diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index d456e8d2ddd2..950887721316 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -24,9 +24,9 @@
/code/modules/food_and_drinks/drinks/drinks/breakawayflask.dm @FalloutFalcon
/code/modules/food_and_drinks/food/ration.dm @FalloutFalcon
/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm @FalloutFalcon
-/code/modules/projectiles @FalloutFalcon
+/code/modules/projectiles/ @FalloutFalcon
/code/modules/reagents/chemistry/reagents/trickwine_reagents.dm @FalloutFalcon
-/code/modules/unit_tests/icons @FalloutFalcon
+/code/modules/unit_tests/icons/ @FalloutFalcon
# MarkSuckerberg
diff --git a/Dockerfile b/Dockerfile
index 0d759e966811..6cefd0618365 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,5 +1,5 @@
# syntax=docker/dockerfile:1
-FROM beestation/byond:515.1616 as base
+FROM beestation/byond:515.1633 as base
# Install the tools needed to compile our rust dependencies
FROM base as rust-build
@@ -11,9 +11,9 @@ COPY dependencies.sh .
RUN dpkg --add-architecture i386 \
&& apt-get update \
&& apt-get install -y --no-install-recommends \
- curl ca-certificates gcc-multilib clang \
- g++-multilib libc6-i386 zlib1g-dev:i386 \
- libssl-dev:i386 pkg-config:i386 git \
+ curl ca-certificates gcc-multilib \
+ clang g++-multilib libc6-i386 \
+ zlib1g-dev:i386 pkg-config:i386 git \
&& /bin/bash -c "source dependencies.sh \
&& curl https://sh.rustup.rs | sh -s -- -y -t i686-unknown-linux-gnu --no-modify-path --profile minimal --default-toolchain \$RUST_VERSION" \
&& rm -rf /var/lib/apt/lists/*
@@ -25,7 +25,7 @@ RUN git init \
&& /bin/bash -c "source dependencies.sh \
&& git fetch --depth 1 origin \$RUST_G_VERSION" \
&& git checkout FETCH_HEAD \
- && cargo build --release --all-features --target i686-unknown-linux-gnu
+ && cargo build --release --target i686-unknown-linux-gnu
# Build auxmos
FROM rust-build as auxmos
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ashwalker_shrine.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ashwalker_shrine.dmm
deleted file mode 100644
index b3d7e439a805..000000000000
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ashwalker_shrine.dmm
+++ /dev/null
@@ -1,3692 +0,0 @@
-//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
-"ad" = (
-/obj/structure/fence{
- dir = 4
- },
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"aw" = (
-/obj/structure/stone_tile/block{
- dir = 8
- },
-/obj/item/melee/transforming/energy/sword/saber/red,
-/obj/effect/mob_spawn/human/corpse/nanotrasenassaultsoldier,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"aA" = (
-/turf/template_noop,
-/area/template_noop)
-"aG" = (
-/obj/item/circuitboard/computer/operating,
-/obj/item/storage/backpack/duffelbag/syndie/surgery,
-/obj/structure/closet/supplypod,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"bm" = (
-/obj/structure/stone_tile/slab,
-/obj/structure/table/wood,
-/obj/item/storage/toolbox/syndicate,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"cm" = (
-/obj/structure/stone_tile/block,
-/obj/structure/stone_tile/slab{
- pixel_y = -16
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"cv" = (
-/obj/structure/bonfire,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"cx" = (
-/obj/structure/stone_tile/slab,
-/obj/item/ammo_casing/shotgun/buckshot,
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"cA" = (
-/obj/structure/stone_tile/block{
- dir = 4
- },
-/obj/structure/stone_tile/block{
- dir = 8
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"cR" = (
-/obj/structure/stone_tile/slab,
-/obj/item/ammo_casing/shotgun/buckshot,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"dg" = (
-/obj/structure/stone_tile/block{
- pixel_x = -16
- },
-/obj/structure/stone_tile{
- dir = 8
- },
-/obj/structure/stone_tile{
- dir = 4
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"dn" = (
-/obj/structure/stone_tile/block{
- dir = 8
- },
-/obj/structure/stone_tile/block{
- dir = 4
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"dv" = (
-/obj/item/ammo_casing/shotgun/buckshot,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"dD" = (
-/turf/closed/indestructible/riveted/boss,
-/area/overmap_encounter/planetoid/lava/explored)
-"dM" = (
-/obj/structure/stone_tile/slab,
-/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"dY" = (
-/obj/structure/fence/door{
- dir = 4
- },
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"ee" = (
-/obj/structure/stone_tile/slab/burnt,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"ej" = (
-/obj/structure/stone_tile/surrounding_tile/cracked{
- dir = 4
- },
-/obj/structure/stone_tile/center/cracked,
-/obj/structure/stone_tile/surrounding_tile,
-/obj/structure/stone_tile/surrounding_tile{
- dir = 1
- },
-/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"ek" = (
-/obj/structure/stone_tile/block{
- dir = 8
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"eq" = (
-/obj/item/storage/bag/plants/portaseeder,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"ew" = (
-/obj/structure/stone_tile/block,
-/obj/structure/mineral_door/sandstone,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"eH" = (
-/obj/structure/stone_tile/center,
-/obj/structure/stone_tile/surrounding_tile,
-/obj/structure/stone_tile/surrounding_tile{
- dir = 8
- },
-/obj/structure/stone_tile/surrounding_tile{
- dir = 4
- },
-/obj/structure/stone_tile/surrounding_tile{
- dir = 1
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"eZ" = (
-/obj/structure/stone_tile/surrounding_tile/cracked,
-/obj/structure/stone_tile/center,
-/obj/structure/stone_tile/surrounding_tile{
- dir = 1
- },
-/obj/structure/stone_tile/surrounding_tile{
- dir = 8
- },
-/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"fd" = (
-/obj/structure/stone_tile/slab/cracked{
- dir = 10
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"fe" = (
-/obj/structure/closet/crate/radiation,
-/obj/item/flashlight/lantern,
-/obj/item/flashlight/lantern,
-/obj/item/flashlight/lantern,
-/obj/item/flashlight/flare,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"fU" = (
-/obj/structure/stone_tile/block{
- dir = 4;
- pixel_y = -16
- },
-/obj/structure/stone_tile,
-/obj/structure/stone_tile{
- dir = 8
- },
-/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"fV" = (
-/turf/open/floor/wood{
- icon_state = "wood-broken4"
- },
-/area/overmap_encounter/planetoid/lava/explored)
-"gl" = (
-/obj/structure/stone_tile/block,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"gp" = (
-/obj/structure/stone_tile{
- dir = 1
- },
-/obj/structure/stone_tile/block{
- dir = 8;
- pixel_y = 16
- },
-/obj/structure/stone_tile{
- dir = 4
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"gM" = (
-/obj/item/stack/cable_coil/red,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"ha" = (
-/obj/structure/stone_tile/slab/cracked{
- dir = 6
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"hd" = (
-/obj/structure/stone_tile,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"hk" = (
-/obj/structure/rack,
-/obj/item/stack/sheet/mineral/wood{
- amount = 18
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"ie" = (
-/obj/structure/table/wood,
-/obj/item/seeds/cannabis,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"ik" = (
-/obj/structure/stone_tile{
- dir = 8
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"il" = (
-/obj/structure/table/wood,
-/obj/item/spear/bonespear,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"im" = (
-/obj/structure/fence{
- dir = 8
- },
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"iw" = (
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"je" = (
-/obj/structure/stone_tile/block{
- dir = 1;
- pixel_x = 16
- },
-/obj/structure/stone_tile,
-/obj/structure/stone_tile{
- dir = 1
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"jl" = (
-/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"ke" = (
-/obj/machinery/hydroponics/soil,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"kz" = (
-/obj/structure/stone_tile/block{
- dir = 8;
- pixel_y = 16
- },
-/obj/structure/stone_tile{
- dir = 1
- },
-/obj/structure/stone_tile{
- dir = 4
- },
-/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"kD" = (
-/obj/structure/stone_tile/block{
- dir = 1
- },
-/obj/item/ammo_casing/shotgun/buckshot,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"kT" = (
-/obj/structure/stone_tile/block{
- dir = 4
- },
-/obj/structure/mineral_door/sandstone,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"kV" = (
-/turf/open/floor/wood{
- icon_state = "wood-broken2"
- },
-/area/overmap_encounter/planetoid/lava/explored)
-"kZ" = (
-/obj/structure/stone_tile/surrounding_tile{
- dir = 4
- },
-/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"lc" = (
-/obj/structure/stone_tile/slab,
-/obj/structure/table/wood,
-/obj/item/instrument/trombone,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"lh" = (
-/obj/structure/table/wood,
-/obj/item/storage/firstaid/fire,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"ln" = (
-/obj/machinery/the_singularitygen,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"lt" = (
-/mob/living/simple_animal/hostile/asteroid/gutlunch,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"lx" = (
-/obj/structure/fence,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"lO" = (
-/obj/structure/stone_tile/slab{
- pixel_y = -16
- },
-/obj/structure/stone_tile/block,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"mg" = (
-/obj/structure/stone_tile/slab,
-/obj/structure/mineral_door/sandstone,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"nh" = (
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"nr" = (
-/obj/structure/stone_tile/block{
- dir = 1
- },
-/obj/structure/mineral_door/sandstone,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"ny" = (
-/obj/structure/stone_tile/block{
- dir = 1
- },
-/obj/structure/stone_tile/block,
-/obj/structure/chair/wood/wings{
- dir = 4
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"ox" = (
-/obj/structure/stone_tile/slab,
-/obj/effect/gibspawner/human,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"oF" = (
-/obj/structure/stone_tile/block,
-/obj/structure/stone_tile/block{
- dir = 1
- },
-/obj/structure/chair/wood/wings,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"oO" = (
-/obj/structure/fence/door,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"oY" = (
-/obj/structure/stone_tile/surrounding_tile/cracked,
-/obj/structure/stone_tile/surrounding_tile/cracked{
- dir = 4
- },
-/obj/structure/stone_tile/center,
-/obj/structure/stone_tile/surrounding_tile{
- dir = 8
- },
-/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"px" = (
-/obj/item/seeds/potato,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"pJ" = (
-/mob/living/simple_animal/hostile/human/nanotrasen/ranged/smg,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"pT" = (
-/obj/structure/table/wood,
-/obj/item/seeds/ambrosia,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"pZ" = (
-/obj/structure/fence/corner{
- dir = 6
- },
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"qq" = (
-/obj/structure/stone_tile/slab/cracked{
- dir = 5
- },
-/obj/structure/bonfire,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"qw" = (
-/obj/effect/gibspawner/human,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"qy" = (
-/obj/structure/stone_tile/slab/burnt,
-/obj/item/ammo_casing/shotgun/buckshot,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"qG" = (
-/obj/structure/stone_tile/surrounding,
-/obj/structure/stone_tile/center,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"rc" = (
-/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"rk" = (
-/obj/structure/stone_tile/block{
- dir = 1
- },
-/obj/structure/stone_tile/block,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"rm" = (
-/obj/structure/stone_tile/slab,
-/obj/structure/chair/wood/wings{
- dir = 4
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"rp" = (
-/obj/structure/rack,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"ru" = (
-/turf/open/floor/wood{
- icon_state = "wood-broken5"
- },
-/area/overmap_encounter/planetoid/lava/explored)
-"rx" = (
-/obj/structure/stone_tile/block,
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"rD" = (
-/obj/structure/stone_tile/slab,
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
- },
-/obj/item/spear/bonespear,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"rH" = (
-/obj/structure/stone_tile/surrounding_tile{
- dir = 8
- },
-/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"rJ" = (
-/obj/structure/stone_tile/slab,
-/obj/item/paper{
- desc = "A hastily written note, written in the Lizard language.";
- default_raw_text = "To all brethren who may read this, we are sorry. We failed to defend the Necropolis, and those from the sky destroyed our home. I write this in my last dying breath, to warn you to not make our mistakes. Don't let them fool you with their actions, all of those who come from the sky are not your friends. They wish to loot and pillage your villages. Please do not make our same mistakes."
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"sc" = (
-/obj/structure/stone_tile/block{
- dir = 8
- },
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
- },
-/obj/item/spear/bonespear,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"ss" = (
-/obj/structure/stone_tile/slab,
-/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"sM" = (
-/obj/item/seeds/tower,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"tR" = (
-/obj/structure/table/wood,
-/obj/item/seeds/cotton/durathread,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"uc" = (
-/obj/structure/stone_tile{
- dir = 1
- },
-/obj/structure/stone_tile/block{
- dir = 8;
- pixel_y = 16
- },
-/obj/structure/stone_tile{
- dir = 4
- },
-/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"uH" = (
-/obj/structure/stone_tile/block,
-/obj/effect/gibspawner/human,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"uJ" = (
-/obj/structure/bed,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"uK" = (
-/turf/closed/wall/mineral/wood/nonmetal,
-/area/overmap_encounter/planetoid/lava/explored)
-"vd" = (
-/obj/structure/stone_tile/block,
-/obj/structure/stone_tile/block{
- dir = 1
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"vm" = (
-/obj/structure/stone_tile/block{
- dir = 4
- },
-/obj/structure/stone_tile{
- dir = 8
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"vu" = (
-/obj/structure/stone_tile/surrounding,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"vH" = (
-/obj/structure/stone_tile/block,
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
- },
-/obj/item/spear/bonespear,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"vN" = (
-/obj/structure/stone_tile/block{
- dir = 8;
- pixel_y = 16
- },
-/obj/structure/stone_tile{
- dir = 1
- },
-/obj/structure/stone_tile{
- dir = 4
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"vU" = (
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
- },
-/obj/item/spear/bonespear,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"vW" = (
-/obj/structure/stone_tile/center,
-/obj/structure/stone_tile/surrounding/burnt,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"wi" = (
-/mob/living/simple_animal/hostile/asteroid/gutlunch,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"wt" = (
-/obj/structure/bed,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"wz" = (
-/obj/structure/stone_tile{
- dir = 4
- },
-/obj/structure/stone_tile/block,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"wO" = (
-/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"wV" = (
-/obj/structure/table/wood,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"xa" = (
-/obj/structure/stone_tile/block{
- dir = 4
- },
-/obj/effect/gibspawner/human,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"xt" = (
-/obj/structure/stone_tile/slab,
-/obj/structure/table/wood,
-/obj/item/weldingtool/experimental,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"xT" = (
-/obj/structure/stone_tile/slab,
-/obj/structure/stone_tile/slab,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"xZ" = (
-/obj/structure/stone_tile/slab,
-/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"yp" = (
-/obj/structure/stone_tile/block,
-/mob/living/simple_animal/hostile/asteroid/gutlunch,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"yD" = (
-/obj/structure/stone_tile/slab,
-/mob/living/simple_animal/hostile/asteroid/gutlunch/grublunch,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"yJ" = (
-/obj/structure/stone_tile/slab,
-/mob/living/simple_animal/hostile/human/nanotrasen/ranged/assault,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"zG" = (
-/obj/structure/table/wood,
-/obj/structure/stone_tile/slab,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"zJ" = (
-/obj/structure/sink/puddle,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"zW" = (
-/obj/item/ammo_casing/shotgun/buckshot,
-/turf/open/floor/wood{
- icon_state = "wood-broken6"
- },
-/area/overmap_encounter/planetoid/lava/explored)
-"zY" = (
-/obj/structure/stone_tile/block{
- dir = 1;
- pixel_x = 16
- },
-/obj/structure/stone_tile,
-/obj/structure/stone_tile{
- dir = 1
- },
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"An" = (
-/obj/structure/fence/corner{
- dir = 8
- },
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"At" = (
-/obj/structure/table/wood,
-/obj/item/seeds/garlic,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"AG" = (
-/obj/item/seeds/peas,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"AI" = (
-/obj/structure/stone_tile/block/cracked{
- dir = 4
- },
-/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"AY" = (
-/obj/structure/stone_tile/block{
- dir = 4
- },
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Bv" = (
-/obj/item/seeds/glowshroom/glowcap,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"BF" = (
-/obj/machinery/hydroponics/soil,
-/obj/item/seeds/tower,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"Cr" = (
-/obj/structure/fence/door{
- dir = 4
- },
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"CE" = (
-/obj/structure/stone_tile{
- dir = 8
- },
-/obj/structure/stone_tile/slab{
- pixel_y = -16
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"CM" = (
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"CP" = (
-/obj/machinery/smartfridge/drying_rack,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"CT" = (
-/obj/structure/stone_tile/slab,
-/obj/structure/table/wood,
-/obj/item/reagent_containers/food/snacks/soup/blood,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"CU" = (
-/obj/structure/stone_tile/slab,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Dk" = (
-/obj/structure/stone_tile{
- dir = 4
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"DF" = (
-/obj/item/clothing/head/welding,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Eh" = (
-/obj/structure/stone_tile/slab,
-/obj/structure/table/wood,
-/obj/item/reagent_containers/glass/bowl/mushroom_bowl,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Eq" = (
-/obj/structure/stone_tile/block{
- dir = 8
- },
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Ez" = (
-/obj/structure/stone_tile/slab,
-/obj/structure/table/wood,
-/obj/item/reagent_containers/glass/bowl/mushroom_bowl,
-/obj/item/reagent_containers/food/snacks/soup/wish,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Fk" = (
-/obj/structure/stone_tile/block{
- dir = 4
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Fo" = (
-/obj/structure/stone_tile/slab,
-/obj/structure/table/wood,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"FS" = (
-/obj/structure/table/wood,
-/obj/item/seeds/ambrosia,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"Gr" = (
-/obj/item/ammo_casing/shotgun/buckshot,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"GD" = (
-/obj/structure/stone_tile/surrounding_tile/cracked{
- dir = 8
- },
-/obj/structure/stone_tile/center,
-/obj/structure/stone_tile/surrounding_tile{
- dir = 1
- },
-/obj/structure/stone_tile/surrounding_tile{
- dir = 4
- },
-/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"HL" = (
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
- },
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"HP" = (
-/obj/structure/mineral_door/sandstone,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Ii" = (
-/obj/structure/stone_tile/surrounding_tile,
-/obj/structure/stone_tile/surrounding_tile{
- pixel_x = 17;
- pixel_y = -17
- },
-/obj/structure/stone_tile/surrounding_tile{
- dir = 1;
- pixel_x = 17;
- pixel_y = -17
- },
-/obj/structure/stone_tile/surrounding_tile{
- dir = 4;
- pixel_x = 17;
- pixel_y = -17
- },
-/obj/structure/stone_tile/surrounding_tile{
- dir = 8;
- pixel_x = 17;
- pixel_y = -17
- },
-/obj/structure/stone_tile/center{
- pixel_x = 17;
- pixel_y = -17
- },
-/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"IF" = (
-/obj/structure/stone_tile/block{
- dir = 1
- },
-/obj/item/kinetic_crusher,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"IO" = (
-/obj/structure/stone_tile/block/cracked,
-/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Jd" = (
-/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"Jk" = (
-/obj/structure/stone_tile/block{
- dir = 4;
- pixel_y = -16
- },
-/obj/structure/stone_tile,
-/obj/structure/stone_tile{
- dir = 8
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Jv" = (
-/obj/structure/stone_tile/block{
- dir = 1
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"JA" = (
-/turf/open/floor/wood{
- icon_state = "wood-broken3"
- },
-/area/overmap_encounter/planetoid/lava/explored)
-"JL" = (
-/obj/structure/table/wood,
-/obj/item/seeds/cotton,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"JM" = (
-/obj/structure/table/wood,
-/obj/item/seeds/cabbage,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"JR" = (
-/obj/structure/stone_tile{
- dir = 4
- },
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"JV" = (
-/obj/structure/table/wood,
-/obj/item/seeds/cherry,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"JZ" = (
-/obj/structure/stone_tile/slab,
-/obj/structure/fluff/drake_statue,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Kd" = (
-/obj/structure/stone_tile/slab/cracked{
- dir = 1
- },
-/obj/structure/table/wood,
-/obj/item/stack/sheet/mineral/wood/fifty,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Ku" = (
-/obj/structure/table/wood,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"KR" = (
-/obj/item/storage/firstaid/regular,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"KS" = (
-/obj/structure/stone_tile/block{
- dir = 4
- },
-/obj/item/ammo_casing/shotgun/buckshot,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Lj" = (
-/obj/structure/stone_tile/block{
- dir = 4
- },
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
- },
-/obj/item/spear/bonespear,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"LG" = (
-/mob/living/simple_animal/hostile/asteroid/gutlunch/guthen,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"LL" = (
-/obj/structure/stone_tile/slab,
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"LS" = (
-/obj/item/seeds/plump,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"MX" = (
-/obj/structure/stone_tile/slab/cracked{
- dir = 10
- },
-/obj/item/ammo_casing/shotgun/buckshot,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Nf" = (
-/obj/structure/stone_tile/block{
- dir = 1
- },
-/obj/structure/stone_tile/block,
-/obj/structure/chair/wood/wings{
- dir = 1
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Np" = (
-/obj/item/seeds/wheat,
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"Nt" = (
-/obj/structure/bonfire,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"NA" = (
-/obj/structure/table/wood,
-/obj/item/clothing/head/welding,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"ND" = (
-/obj/structure/stone_tile/block,
-/obj/structure/stone_tile/slab{
- pixel_y = -16
- },
-/obj/structure/mineral_door/sandstone,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"NE" = (
-/obj/structure/stone_tile/block{
- dir = 1
- },
-/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"OB" = (
-/obj/structure/table/optable,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Pi" = (
-/obj/structure/stone_tile/block/cracked{
- dir = 1
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Qv" = (
-/obj/structure/sink/puddle,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"QT" = (
-/obj/structure/fence/corner{
- dir = 5
- },
-/turf/open/floor/plating/ashplanet/ash,
-/area/overmap_encounter/planetoid/lava/explored)
-"QW" = (
-/obj/structure/closet/crate/medical,
-/obj/item/storage/firstaid/regular,
-/obj/item/reagent_containers/blood/random,
-/obj/item/reagent_containers/blood/lizard,
-/obj/item/reagent_containers/blood/lizard,
-/obj/item/stack/sheet/cotton/cloth/ten,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Sa" = (
-/obj/structure/stone_tile/slab/cracked{
- dir = 4
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"SJ" = (
-/obj/effect/mob_spawn/human/corpse{
- mob_species = /datum/species/lizard/ashwalker
- },
-/obj/structure/stone_tile/block{
- dir = 8
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"SO" = (
-/obj/structure/closet/crate,
-/obj/item/flashlight/lantern,
-/obj/item/flashlight/lantern,
-/obj/item/flashlight/lantern,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Td" = (
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Ty" = (
-/obj/structure/stone_tile/slab/cracked,
-/mob/living/simple_animal/hostile/human/nanotrasen/ranged,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"TX" = (
-/obj/structure/stone_tile{
- dir = 8
- },
-/obj/structure/stone_tile/block{
- dir = 1
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Ua" = (
-/obj/structure/stone_tile/surrounding_tile{
- dir = 1
- },
-/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Us" = (
-/obj/structure/stone_tile/slab,
-/obj/structure/table/wood,
-/obj/item/spear/bonespear,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Ux" = (
-/turf/open/floor/wood{
- icon_state = "wood-broken6"
- },
-/area/overmap_encounter/planetoid/lava/explored)
-"Uy" = (
-/obj/structure/stone_tile/block{
- dir = 8
- },
-/obj/structure/mineral_door/sandstone,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"UB" = (
-/obj/structure/stone_tile{
- dir = 1
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"UF" = (
-/obj/structure/table/wood,
-/obj/item/spear/bonespear,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"Vb" = (
-/obj/structure/stone_tile/block{
- dir = 4
- },
-/obj/item/clothing/head/welding,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"VT" = (
-/obj/structure/stone_tile/block{
- dir = 4
- },
-/obj/structure/stone_tile{
- dir = 4
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"WJ" = (
-/obj/structure/table/wood,
-/obj/item/melee/transforming/energy/sword/saber/red,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"WM" = (
-/obj/item/storage/firstaid/tactical,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Xe" = (
-/obj/machinery/hydroponics/soil,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Xw" = (
-/obj/structure/mineral_door/sandstone,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"Yg" = (
-/obj/structure/stone_tile/slab/cracked{
- dir = 5
- },
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Yh" = (
-/obj/structure/stone_tile/slab/cracked,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"YC" = (
-/obj/structure/table/wood,
-/obj/item/storage/firstaid/ancient,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"YI" = (
-/obj/structure/table/wood,
-/obj/item/stack/sheet/mineral/wood/fifty,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"YT" = (
-/obj/structure/stone_tile/block/cracked,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Zc" = (
-/obj/structure/stone_tile/block{
- dir = 1
- },
-/obj/structure/stone_tile/block,
-/obj/structure/chair/wood/wings,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"Zj" = (
-/obj/machinery/iv_drip,
-/obj/item/reagent_containers/food/drinks/waterbottle/large,
-/turf/open/floor/wood,
-/area/overmap_encounter/planetoid/lava/explored)
-"ZL" = (
-/obj/structure/stone_tile/block{
- dir = 8
- },
-/obj/effect/gibspawner/human,
-/turf/open/lava/smooth/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-"ZX" = (
-/obj/structure/table/wood,
-/obj/item/storage/box/rxglasses,
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
-/area/overmap_encounter/planetoid/lava/explored)
-
-(1,1,1) = {"
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-dD
-uK
-dD
-uK
-Td
-dD
-uK
-dD
-Td
-Td
-Td
-Td
-gl
-Td
-Td
-Td
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-"}
-(2,1,1) = {"
-Td
-An
-lx
-lx
-lx
-lx
-lx
-lx
-dD
-uK
-Td
-dD
-Td
-Td
-uK
-dD
-pT
-wV
-CP
-Td
-wV
-ie
-dD
-uK
-Td
-Td
-Td
-Td
-CU
-Td
-Td
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-Td
-Td
-Td
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-"}
-(3,1,1) = {"
-Td
-ad
-px
-Np
-CM
-LS
-CM
-sM
-Td
-iw
-iw
-uK
-uK
-Td
-dD
-Td
-Td
-iw
-iw
-iw
-iw
-iw
-iw
-dD
-Td
-Td
-Td
-gl
-Td
-Jv
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Gr
-gl
-ee
-Td
-Td
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-"}
-(4,1,1) = {"
-Td
-ad
-CM
-BF
-ke
-ke
-ke
-CM
-oO
-iw
-iw
-iw
-dD
-Td
-Td
-Td
-iw
-Td
-Td
-iw
-JL
-JV
-wV
-dD
-Td
-Td
-Td
-gl
-CU
-Jv
-Td
-Td
-Td
-uK
-dD
-uK
-Td
-uK
-dD
-YT
-CU
-Jv
-Td
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-"}
-(5,1,1) = {"
-Td
-ad
-CM
-ke
-ke
-BF
-ke
-Bv
-dD
-iw
-iw
-iw
-Td
-Td
-dD
-Td
-wV
-tR
-Td
-Td
-JM
-wV
-wV
-Td
-Td
-Td
-Td
-gl
-CU
-Td
-Td
-Td
-dD
-dD
-iw
-iw
-Td
-pJ
-dD
-gl
-Yh
-Jv
-Td
-Gr
-Td
-aA
-aA
-aA
-aA
-aA
-"}
-(6,1,1) = {"
-Td
-ad
-Np
-AG
-sM
-CM
-sM
-zJ
-dD
-eq
-iw
-wt
-uK
-Td
-uK
-iw
-iw
-At
-iw
-Td
-iw
-iw
-iw
-dD
-Td
-Td
-Td
-gl
-CU
-Jv
-Td
-Td
-Td
-Td
-iw
-HL
-iw
-Td
-uK
-YT
-CU
-Pi
-Td
-Td
-Td
-Td
-Td
-dD
-dD
-Td
-"}
-(7,1,1) = {"
-Td
-QT
-lx
-lx
-Cr
-lx
-lx
-lx
-uK
-dD
-iw
-uK
-dD
-Td
-dD
-hk
-rp
-Ku
-iw
-Td
-wV
-Ku
-FS
-uK
-Td
-Td
-Td
-gl
-CU
-Jv
-Td
-Td
-dD
-iw
-Td
-Td
-Td
-Td
-dD
-gl
-cR
-Jv
-Td
-dD
-dD
-dD
-uK
-dD
-uK
-dD
-"}
-(8,1,1) = {"
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Jv
-CU
-gl
-Td
-Td
-dD
-Td
-uK
-dD
-HP
-HP
-dD
-uK
-Td
-dD
-Td
-Td
-Td
-gl
-CU
-Jv
-Td
-Td
-uK
-UF
-iw
-iw
-cv
-iw
-Xw
-Td
-ee
-Jv
-gM
-uK
-Td
-uK
-Td
-uK
-Td
-dD
-"}
-(9,1,1) = {"
-Td
-Td
-Td
-cA
-cA
-cA
-cA
-Fk
-Fk
-Fk
-CU
-Fk
-Fk
-Fk
-Fk
-Fk
-Fk
-VT
-CU
-CU
-vm
-Fk
-Fk
-Fk
-Fk
-Fk
-Fk
-hd
-CU
-Jv
-Td
-Td
-dD
-il
-iw
-Td
-iw
-HL
-uK
-gl
-CU
-UB
-Fk
-Fk
-AY
-eZ
-AI
-ej
-Td
-uK
-"}
-(10,1,1) = {"
-Td
-Td
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-lO
-Jv
-CU
-lO
-Jv
-CU
-lO
-Jv
-lO
-Jv
-lO
-Jv
-lO
-Jv
-CU
-Jv
-Td
-Td
-dD
-dD
-iw
-iw
-iw
-iw
-dD
-gl
-ee
-CU
-CU
-Ty
-rJ
-IO
-jl
-NE
-WM
-Td
-"}
-(11,1,1) = {"
-Td
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-lO
-Jv
-CU
-lO
-Jv
-CU
-lO
-Jv
-lO
-Jv
-lO
-Jv
-lO
-Jv
-CU
-Jv
-Td
-Td
-Td
-dD
-iw
-iw
-SO
-dD
-uK
-gl
-Yh
-Dk
-SJ
-ek
-aw
-oY
-ZL
-GD
-Td
-uK
-"}
-(12,1,1) = {"
-Td
-Td
-ek
-ek
-dn
-dn
-dn
-ek
-ek
-ek
-ek
-ek
-ek
-ek
-ek
-ek
-ek
-ek
-TX
-CU
-wz
-ek
-ek
-ek
-ek
-ek
-ek
-ik
-CU
-Jv
-Td
-Td
-Td
-dD
-Td
-uK
-uK
-dD
-Xe
-YT
-qy
-Jv
-Td
-cv
-uK
-Td
-Td
-nh
-dD
-dD
-"}
-(13,1,1) = {"
-aA
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-dD
-vd
-CU
-rk
-dD
-Td
-wV
-wV
-Xw
-dD
-gl
-CU
-Jv
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Xe
-gl
-CU
-Jv
-Td
-Td
-Td
-dD
-uK
-uK
-Td
-uK
-"}
-(14,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-uK
-oF
-CT
-Nf
-dD
-iw
-iw
-iw
-Td
-uK
-uH
-CU
-Jv
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Xe
-gl
-CU
-kD
-DF
-Xe
-Qv
-Td
-uK
-dD
-cv
-Td
-"}
-(15,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-uK
-oF
-Eh
-Nf
-wV
-Td
-iw
-iw
-iw
-dD
-gl
-CU
-Jv
-Td
-Td
-Td
-Td
-dD
-dD
-uK
-Qv
-Td
-gl
-CU
-Pi
-qw
-Xe
-uK
-dD
-Ux
-dD
-uK
-Td
-"}
-(16,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-Td
-vd
-CU
-Zc
-wV
-iw
-iw
-iw
-iw
-uK
-gl
-CU
-Jv
-Td
-uK
-dD
-wV
-Td
-YI
-uK
-dD
-Td
-YT
-ee
-IF
-Td
-dD
-uK
-iw
-iw
-iw
-uK
-uK
-"}
-(17,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-dD
-oF
-Ez
-Nf
-wV
-iw
-iw
-iw
-iw
-dD
-gl
-CU
-Jv
-Td
-Xw
-JA
-iw
-Td
-Td
-iw
-HP
-Gr
-rx
-CU
-Pi
-Td
-aG
-Yh
-iw
-MX
-iw
-iw
-uK
-"}
-(18,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-uK
-vd
-rm
-ny
-Xw
-iw
-iw
-iw
-Td
-Td
-gl
-CU
-Jv
-Td
-dD
-SO
-nh
-Nt
-Td
-lh
-dD
-Td
-gl
-Yh
-kD
-Td
-dD
-Yg
-Ux
-iw
-JA
-iw
-Ux
-"}
-(19,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-dD
-dD
-zG
-zG
-dD
-iw
-Td
-wt
-dD
-Td
-gl
-xT
-Jv
-Td
-iw
-SO
-iw
-fV
-iw
-iw
-uK
-Td
-gl
-CU
-Pi
-Td
-uK
-ha
-iw
-Td
-HL
-ha
-uK
-"}
-(20,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-Td
-uK
-Td
-dD
-uK
-Td
-dD
-dD
-uK
-Td
-gl
-CU
-Jv
-Td
-dD
-uK
-dD
-uJ
-iw
-dD
-uK
-qw
-gl
-ee
-Jv
-uK
-uK
-iw
-kV
-iw
-iw
-Yh
-uK
-"}
-(21,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-nh
-Td
-Td
-Td
-Td
-gl
-CU
-Jv
-Td
-Td
-Td
-Td
-dD
-Td
-dD
-Td
-Td
-gl
-cR
-UB
-Xw
-dv
-iw
-iw
-qq
-iw
-iw
-dD
-"}
-(22,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-CU
-Fk
-Fk
-Fk
-Fk
-Fk
-Fk
-Fk
-Fk
-Lj
-Fk
-Fk
-hd
-CU
-UB
-Fk
-Fk
-Fk
-Fk
-Fk
-Fk
-KS
-Fk
-Vb
-hd
-CU
-JR
-Td
-iw
-Td
-Ux
-iw
-ru
-iw
-dD
-"}
-(23,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-gl
-CU
-CU
-CU
-CU
-CU
-ox
-CU
-CU
-CU
-CU
-CU
-CU
-vu
-CU
-CU
-CU
-CU
-CU
-cx
-Yh
-CU
-ee
-CU
-yJ
-vW
-Jv
-uK
-dD
-iw
-zW
-ha
-Td
-WJ
-uK
-"}
-(24,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-gl
-CU
-Td
-ek
-ek
-ek
-ik
-rD
-Dk
-ek
-Eq
-ek
-ik
-CU
-Dk
-ek
-ek
-ek
-ik
-CU
-Dk
-ek
-ek
-ek
-ik
-ee
-Jv
-Td
-uK
-iw
-Sa
-iw
-iw
-NA
-dD
-"}
-(25,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-gl
-CU
-Jv
-dD
-dD
-dD
-ew
-mg
-nr
-dD
-dD
-dD
-gl
-CU
-Jv
-eH
-Jk
-vN
-eH
-CU
-qG
-Jk
-vN
-eH
-gl
-CU
-Pi
-Td
-uK
-iw
-Kd
-wV
-Td
-YC
-dD
-"}
-(26,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-rx
-CU
-Jv
-dD
-Fo
-Fo
-gl
-CU
-Jv
-lc
-Fo
-dD
-gl
-CU
-Jv
-je
-Ii
-Ua
-je
-CU
-je
-Ii
-Ua
-je
-YT
-Yh
-kD
-Td
-uK
-dD
-dD
-dD
-Ux
-uK
-dD
-"}
-(27,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-gl
-CU
-Jv
-dD
-Fo
-CU
-yp
-CU
-Jv
-ss
-Fo
-dD
-gl
-CU
-Jv
-dg
-rH
-kZ
-dg
-CU
-dg
-rH
-kZ
-dg
-gl
-CU
-Jv
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-"}
-(28,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-gl
-CU
-vU
-kT
-xa
-Fk
-eZ
-AI
-ej
-Fk
-Fk
-kT
-hd
-LL
-UB
-eH
-Jk
-gp
-eH
-CU
-eH
-fU
-uc
-eH
-hd
-CU
-Jv
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-"}
-(29,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-vU
-gl
-CU
-CU
-mg
-CU
-xZ
-IO
-jl
-NE
-CU
-CU
-mg
-CU
-vu
-CU
-CU
-LL
-CU
-CU
-JZ
-CU
-dM
-dM
-CU
-CU
-CU
-Jv
-Td
-dD
-dD
-uK
-dD
-dD
-Td
-dD
-"}
-(30,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-gl
-LL
-Td
-Uy
-ek
-ek
-oY
-ZL
-GD
-ek
-ek
-Uy
-ik
-CU
-Dk
-eH
-Jk
-vN
-eH
-CU
-eH
-fU
-kz
-eH
-ik
-CU
-Jv
-Td
-uK
-ln
-fe
-iw
-iw
-Td
-uK
-"}
-(31,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-gl
-CU
-Jv
-dD
-Us
-CU
-gl
-yD
-Jv
-CU
-xt
-dD
-gl
-CU
-Jv
-zY
-Ii
-Ua
-je
-CU
-je
-Ii
-Ua
-je
-uH
-CU
-UB
-Fk
-dD
-iw
-Td
-Td
-iw
-iw
-uK
-"}
-(32,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-qw
-gl
-CU
-Jv
-dD
-Us
-Us
-gl
-CU
-Jv
-bm
-Fo
-dD
-vH
-CU
-Jv
-dg
-rH
-kZ
-dg
-CU
-dg
-rH
-kZ
-dg
-gl
-CU
-CU
-CU
-Xw
-Td
-Td
-Td
-iw
-iw
-dD
-"}
-(33,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-gl
-CU
-Jv
-dD
-dD
-dD
-ew
-mg
-nr
-dD
-dD
-dD
-gl
-CU
-Jv
-eH
-Jk
-gp
-eH
-CU
-eH
-Jk
-gp
-eH
-gl
-CU
-Dk
-ek
-uK
-iw
-iw
-iw
-iw
-Td
-uK
-"}
-(34,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-gl
-CU
-Td
-AY
-Fk
-Fk
-hd
-CU
-UB
-Fk
-Fk
-Fk
-hd
-CU
-UB
-Fk
-Fk
-Fk
-hd
-CU
-UB
-Fk
-Fk
-Fk
-hd
-CU
-Jv
-Td
-dD
-dD
-iw
-Td
-dD
-wt
-dD
-"}
-(35,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-gl
-CU
-CU
-CU
-CU
-CU
-CU
-LL
-CU
-LL
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-CU
-Jv
-Td
-uK
-uK
-dY
-dD
-dD
-dD
-uK
-"}
-(36,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-CU
-ek
-ek
-ek
-ek
-sc
-ek
-ek
-ek
-ek
-ek
-CE
-Dk
-ek
-ek
-ek
-ek
-ek
-CE
-Dk
-ek
-ek
-ek
-ek
-ik
-CU
-Jv
-Td
-im
-Jd
-CM
-uK
-iw
-wO
-dD
-"}
-(37,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-qw
-Td
-Td
-cm
-Jv
-Td
-Td
-qw
-dD
-Td
-cm
-Jv
-Td
-Td
-Td
-Td
-gl
-CU
-Jv
-Td
-im
-CM
-CM
-dD
-iw
-CM
-uK
-"}
-(38,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-Td
-uK
-dD
-uK
-cm
-Jv
-dD
-uK
-dD
-uK
-uK
-ND
-Jv
-dD
-dD
-uK
-Td
-gl
-CU
-Jv
-Td
-oO
-CM
-CM
-lt
-iw
-iw
-uK
-"}
-(39,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-uK
-uK
-uK
-Td
-iw
-Td
-iw
-iw
-uK
-KR
-iw
-Td
-Ku
-ZX
-Ku
-dD
-Td
-gl
-CU
-Jv
-Td
-im
-LG
-CM
-uK
-uK
-rc
-uK
-"}
-(40,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-uK
-dD
-Td
-Td
-Td
-iw
-iw
-iw
-uK
-Td
-Td
-Td
-Td
-Td
-iw
-uK
-Td
-gl
-CU
-Jv
-Td
-im
-CM
-CM
-CM
-dD
-uK
-dD
-"}
-(41,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-Td
-uK
-Td
-iw
-Td
-Td
-Td
-iw
-dD
-iw
-Td
-Td
-Td
-iw
-iw
-dD
-Td
-gl
-CU
-Jv
-Td
-im
-CM
-Jd
-CM
-CM
-CM
-im
-"}
-(42,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-uK
-dD
-wt
-uJ
-uJ
-uJ
-wt
-uK
-OB
-Zj
-Td
-iw
-QW
-uK
-dD
-Td
-gl
-CU
-Jv
-Td
-im
-wi
-CM
-LG
-CM
-LG
-im
-"}
-(43,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-Td
-uK
-uK
-dD
-dD
-uK
-uK
-dD
-uK
-dD
-uK
-dD
-uK
-dD
-Td
-Td
-gl
-Yg
-Jv
-Td
-QT
-lx
-lx
-lx
-lx
-lx
-pZ
-"}
-(44,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-Td
-Td
-dD
-uK
-Td
-Td
-uK
-uK
-Td
-uK
-uK
-Td
-uK
-Td
-Td
-gl
-fd
-Jv
-Td
-Td
-Td
-Td
-Td
-Td
-aA
-aA
-"}
-(45,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-Td
-uK
-Td
-Td
-Td
-YT
-Td
-YT
-Td
-Td
-Td
-Td
-aA
-aA
-aA
-aA
-"}
-(46,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-vd
-Td
-Jv
-Td
-Td
-aA
-aA
-aA
-aA
-aA
-aA
-"}
-(47,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-vd
-CU
-rk
-Td
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-"}
-(48,1,1) = {"
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-Td
-vd
-CU
-rk
-Td
-aA
-aA
-aA
-aA
-aA
-aA
-aA
-"}
diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_buried_shrine.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_buried_shrine.dmm
new file mode 100644
index 000000000000..e5756e7dbdf5
--- /dev/null
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_buried_shrine.dmm
@@ -0,0 +1,5795 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"at" = (
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 4
+ },
+/obj/structure/stone_tile/center/cracked,
+/obj/structure/stone_tile/surrounding_tile/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"aD" = (
+/obj/structure/flora/rock/hell,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"aP" = (
+/obj/structure/flora/ausbushes/sparsegrass/hell,
+/turf/open/floor/plating/moss,
+/area/overmap_encounter/planetoid/cave/explored)
+"be" = (
+/obj/item/reagent_containers/food/snacks/grown/apple{
+ pixel_x = 12
+ },
+/turf/open/floor/plating/grass/lava,
+/area/ruin/unpowered/buried_shrine)
+"bp" = (
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 10
+ },
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 6
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"bW" = (
+/obj/structure/flora/ausbushes/sparsegrass/hell,
+/turf/open/floor/plating/grass/lava/orange,
+/area/overmap_encounter/planetoid/lava/explored)
+"bY" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 8
+ },
+/obj/structure/stone_tile/center/burnt,
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"ch" = (
+/obj/structure/destructible/tribal_torch{
+ pixel_y = 13
+ },
+/obj/structure/stone_tile/surrounding,
+/obj/structure/stone_tile/center,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"cn" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 6
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/ruin/unpowered/buried_shrine)
+"co" = (
+/obj/structure/stone_tile/surrounding/cracked,
+/obj/item/stack/ore/gold,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"cv" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/glass/bottle/potion,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"cA" = (
+/obj/structure/stone_tile/surrounding,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"cD" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 6
+ },
+/obj/structure/destructible/tribal_torch,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"cN" = (
+/obj/item/stack/sheet/bone,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"df" = (
+/obj/structure/stone_tile/block/cracked,
+/obj/item/stack/sheet/mineral/wood,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"dg" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"di" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 4
+ },
+/obj/structure/stone_tile/center/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"dn" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 5
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"dA" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_x = 5
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"dB" = (
+/obj/structure/stone_tile/block/cracked,
+/obj/structure/stone_tile/center{
+ pixel_y = -6
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"dD" = (
+/turf/closed/indestructible/riveted/boss,
+/area/overmap_encounter/planetoid/lava/explored)
+"dF" = (
+/turf/open/floor/plating/moss,
+/area/overmap_encounter/planetoid/cave/explored)
+"dG" = (
+/obj/structure/table/wood,
+/obj/structure/stone_tile{
+ dir = 4
+ },
+/obj/item/stack/ore/gold{
+ amount = 10
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"dQ" = (
+/obj/structure/stone_tile/center,
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 4
+ },
+/obj/structure/destructible/tribal_torch{
+ pixel_y = 13
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"dS" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 10;
+ pixel_x = 6
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"dX" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = -8
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"ee" = (
+/turf/open/lava/smooth/lava_land_surface,
+/area/overmap_encounter/planetoid/lava/explored)
+"ef" = (
+/obj/structure/stone_tile/surrounding/cracked,
+/obj/structure/stone_tile/center/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"em" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 7;
+ pixel_x = -2
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"eI" = (
+/turf/open/floor/plating/grass/lava,
+/area/ruin/unpowered/buried_shrine)
+"eJ" = (
+/obj/structure/stone_tile/cracked,
+/obj/structure/stone_tile{
+ dir = 8
+ },
+/obj/structure/stone_tile{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"eZ" = (
+/obj/structure/table/wood,
+/obj/item/clothing/head/hooded/cloakhood/bone,
+/obj/structure/stone_tile/slab,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"ff" = (
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/obj/item/stack/ore/gold,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"fh" = (
+/obj/item/clothing/suit/armor/curator,
+/obj/item/clothing/head/fedora/curator{
+ pixel_y = 16
+ },
+/obj/effect/decal/remains/human{
+ pixel_y = 8
+ },
+/obj/effect/decal/cleanable/blood/old,
+/obj/effect/decal/cleanable/ash/large{
+ pixel_y = -8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"fq" = (
+/obj/structure/destructible/tribal_torch{
+ pixel_y = 13
+ },
+/obj/structure/stone_tile/center,
+/obj/structure/stone_tile/surrounding,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"fx" = (
+/obj/structure/destructible/tribal_torch,
+/obj/structure/stone_tile/slab/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"fB" = (
+/obj/structure/flora/rock/pile/lava,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"fL" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_x = 7;
+ pixel_y = -5
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"fY" = (
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/ash{
+ pixel_x = 6;
+ pixel_y = 11
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"gt" = (
+/obj/structure/flora/ash/stem_shroom,
+/turf/open/floor/plating/moss,
+/area/overmap_encounter/planetoid/cave/explored)
+"gz" = (
+/obj/structure/stone_tile/block{
+ dir = 8
+ },
+/obj/structure/stone_tile/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"gE" = (
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/obj/structure/stone_tile{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"gH" = (
+/obj/structure/stone_tile/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"gW" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_x = 10
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"ha" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 6
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"hn" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"hp" = (
+/obj/structure/flora/ausbushes/ywflowers/hell,
+/turf/open/floor/plating/grass/lava,
+/area/ruin/unpowered/buried_shrine)
+"hz" = (
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 8
+ },
+/obj/structure/stone_tile/center,
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"hW" = (
+/obj/structure/stone_tile/surrounding_tile/burnt{
+ dir = 8
+ },
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 5
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked,
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"ic" = (
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/obj/structure/stone_tile/block/cracked{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"ii" = (
+/obj/structure/chair/pew{
+ dir = 1
+ },
+/obj/structure/stone_tile/slab,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"iw" = (
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/obj/structure/stone_tile/cracked{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"iB" = (
+/obj/structure/stone_tile/block/burnt{
+ dir = 8
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 6
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"iK" = (
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"iL" = (
+/obj/structure/stone_tile/surrounding_tile/cracked,
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = -8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"iX" = (
+/obj/structure/flora/rock/pile,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/cave/explored)
+"jo" = (
+/obj/item/reagent_containers/food/snacks/grown/apple{
+ pixel_y = 12;
+ pixel_x = 11
+ },
+/turf/open/floor/plating/grass/lava,
+/area/ruin/unpowered/buried_shrine)
+"jt" = (
+/obj/structure/flora/rock/pile,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"jy" = (
+/obj/structure/stone_tile/block/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"jI" = (
+/obj/structure/flora/ash/tall_shroom,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"jJ" = (
+/obj/structure/flora/ash/tall_shroom,
+/turf/open/floor/plating/moss,
+/area/overmap_encounter/planetoid/cave/explored)
+"jM" = (
+/obj/structure/stone_tile{
+ dir = 1
+ },
+/obj/structure/stone_tile/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"jY" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = -3
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"kp" = (
+/obj/structure/table_frame/wood,
+/obj/structure/stone_tile/slab,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"kt" = (
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/obj/structure/stone_tile/block/cracked{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"kC" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = -2;
+ pixel_x = 2
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"kJ" = (
+/obj/structure/stone_tile/surrounding/cracked,
+/obj/structure/stone_tile/center/cracked,
+/obj/structure/destructible/tribal_torch{
+ pixel_y = 13
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"kW" = (
+/obj/structure/stone_tile/block{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"kZ" = (
+/obj/structure/stone_tile/cracked{
+ dir = 4
+ },
+/obj/structure/stone_tile/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"ld" = (
+/obj/structure/table/wood,
+/obj/item/stack/ore/diamond,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"lo" = (
+/obj/structure/flora/ausbushes/fullgrass/hell,
+/turf/open/floor/plating/moss,
+/area/overmap_encounter/planetoid/cave/explored)
+"lJ" = (
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"lO" = (
+/obj/structure/flora/ausbushes/sparsegrass/hell,
+/turf/open/floor/plating/moss,
+/area/overmap_encounter/planetoid/lava/explored)
+"me" = (
+/obj/structure/stone_tile/surrounding_tile,
+/obj/structure/stone_tile/surrounding_tile{
+ pixel_x = 17;
+ pixel_y = -17
+ },
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 1;
+ pixel_x = 17;
+ pixel_y = -17
+ },
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 4;
+ pixel_x = 17;
+ pixel_y = -17
+ },
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 8;
+ pixel_x = 17;
+ pixel_y = -17
+ },
+/obj/structure/stone_tile/center{
+ pixel_x = 17;
+ pixel_y = -17
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"mn" = (
+/obj/structure/stone_tile/block,
+/obj/structure/stone_tile/cracked{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"mr" = (
+/obj/structure/stone_tile{
+ dir = 1
+ },
+/obj/structure/stone_tile{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"mv" = (
+/obj/structure/stone_tile/block/burnt{
+ dir = 1
+ },
+/obj/structure/stone_tile/surrounding_tile/burnt{
+ dir = 8
+ },
+/obj/structure/stone_tile/surrounding_tile/burnt,
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"mM" = (
+/obj/structure/stone_tile/surrounding,
+/obj/structure/fluff/drake_statue,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"nh" = (
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"nk" = (
+/obj/structure/stone_tile{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"nq" = (
+/obj/structure/stone_tile/surrounding,
+/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"nz" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 5
+ },
+/obj/item/stack/ore/gold,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"nP" = (
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 4
+ },
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 6
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"nX" = (
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"oi" = (
+/obj/structure/stone_tile{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"ol" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 8;
+ pixel_x = -8
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"om" = (
+/obj/structure/table_frame/wood,
+/obj/item/reagent_containers/food/snacks/grown/ash_flora/fireblossom,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"on" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"oH" = (
+/obj/structure/stone_tile/surrounding,
+/obj/structure/stone_tile/center/cracked,
+/obj/structure/destructible/tribal_torch{
+ pixel_y = 14
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"oL" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_x = 9;
+ pixel_y = 8
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"pu" = (
+/mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient,
+/turf/open/floor/plating/moss,
+/area/ruin/unpowered/buried_shrine)
+"pK" = (
+/obj/structure/stone_tile/slab,
+/mob/living/simple_animal/hostile/asteroid/brimdemon,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"qh" = (
+/obj/structure/stone_tile{
+ dir = 4
+ },
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"qi" = (
+/obj/structure/stone_tile/surrounding,
+/obj/structure/stone_tile/center/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"qp" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 1
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 9
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 6
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"qt" = (
+/obj/structure/stone_tile/center/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"qw" = (
+/obj/structure/stone_tile/block/burnt{
+ dir = 1
+ },
+/obj/structure/stone_tile/surrounding_tile/burnt,
+/obj/structure/stone_tile/surrounding_tile/burnt{
+ dir = 8
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"qO" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 5
+ },
+/obj/structure/chair/wood,
+/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"qT" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_x = -7;
+ pixel_y = 3
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"qV" = (
+/obj/structure/destructible/tribal_torch,
+/obj/structure/stone_tile/slab,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"rh" = (
+/obj/structure/stone_tile,
+/obj/structure/stone_tile{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"rk" = (
+/obj/structure/stone_tile/slab/cracked,
+/obj/item/pickaxe/rusted{
+ pixel_x = 3
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"rp" = (
+/obj/structure/stone_tile/surrounding,
+/obj/structure/stone_tile/center,
+/obj/item/clothing/suit/hooded/cloak/bone{
+ pixel_y = -4
+ },
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"rt" = (
+/obj/structure/stone_tile/cracked,
+/obj/structure/stone_tile/cracked{
+ dir = 4
+ },
+/obj/structure/stone_tile{
+ dir = 8
+ },
+/obj/structure/stone_tile{
+ dir = 1
+ },
+/obj/item/stack/sheet/bone,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/ruin/unpowered/buried_shrine)
+"rA" = (
+/obj/structure/flora/ash/cacti,
+/turf/open/floor/plating/moss,
+/area/ruin/unpowered/buried_shrine)
+"rD" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_x = 9
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"rH" = (
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/cave/explored)
+"rM" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = -6
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"rP" = (
+/obj/structure/flora/ash/leaf_shroom,
+/turf/open/floor/plating/moss,
+/area/overmap_encounter/planetoid/lava/explored)
+"su" = (
+/obj/item/stack/ore/gold,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"sv" = (
+/obj/structure/flora/ash/tall_shroom,
+/turf/open/floor/plating/moss,
+/area/ruin/unpowered/buried_shrine)
+"sy" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_x = 6;
+ pixel_y = -8
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"sB" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 5
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"sD" = (
+/obj/structure/stone_tile/cracked{
+ dir = 8
+ },
+/obj/structure/stone_tile/block/cracked{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"sJ" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 6
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"sL" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = -1
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"sS" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 4
+ },
+/obj/item/stack/sheet/mineral/wood,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"ta" = (
+/obj/structure/stone_tile/block,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"td" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 5
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"tA" = (
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"tE" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/glass/mortar/mushroom{
+ pixel_x = -5
+ },
+/obj/item/pestle{
+ pixel_y = 5
+ },
+/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_stem{
+ pixel_x = -11;
+ pixel_y = 10
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"tL" = (
+/obj/structure/stone_tile/slab,
+/obj/structure/destructible/tribal_torch,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"uf" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 10
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"uK" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"uN" = (
+/obj/structure/stone_tile{
+ dir = 4
+ },
+/obj/item/stack/ore/gold,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"uP" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 8
+ },
+/obj/structure/stone_tile/center,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"uS" = (
+/obj/structure/table_frame/wood,
+/obj/structure/stone_tile/cracked{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"vg" = (
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"vi" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/glass/bottle/potion,
+/obj/item/reagent_containers/glass/bottle/potion{
+ pixel_x = -10;
+ pixel_y = 9
+ },
+/obj/item/reagent_containers/glass/bottle/potion{
+ pixel_x = 10;
+ pixel_y = 9
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"vo" = (
+/obj/structure/table/wood,
+/obj/item/gun/ballistic/bow/ashen,
+/obj/structure/stone_tile/slab,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"vJ" = (
+/obj/structure/flora/ash/stem_shroom,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"vO" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 4
+ },
+/obj/structure/stone_tile/center/burnt,
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"vR" = (
+/obj/item/stack/sheet/bone,
+/obj/structure/stone_tile/slab/cracked{
+ dir = 5
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"wj" = (
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 4
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"wl" = (
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"wt" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 4
+ },
+/mob/living/simple_animal/hostile/asteroid/brimdemon,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"wy" = (
+/obj/structure/stone_tile{
+ dir = 4
+ },
+/obj/structure/stone_tile/block/cracked{
+ dir = 6
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"wM" = (
+/obj/structure/stone_tile/slab,
+/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"wS" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 4
+ },
+/turf/closed/mineral/random/volcanic,
+/area/ruin/unpowered/buried_shrine)
+"xe" = (
+/obj/structure/stone_tile{
+ dir = 1
+ },
+/obj/structure/stone_tile/cracked{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"xs" = (
+/obj/structure/stone_tile/block/burnt{
+ dir = 4
+ },
+/obj/structure/stone_tile/block/cracked{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"xJ" = (
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/obj/structure/stone_tile/block/cracked{
+ dir = 10
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"xT" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 1
+ },
+/obj/structure/chair/wood,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"yb" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 6;
+ pixel_x = -4
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"yt" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 5
+ },
+/obj/structure/stone_tile/center,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"yv" = (
+/obj/structure/stone_tile/surrounding,
+/obj/item/stack/ore/gold,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"yy" = (
+/obj/structure/stone_tile/block,
+/obj/structure/stone_tile{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"yz" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"yF" = (
+/obj/structure/flora/ausbushes/fullgrass/hell,
+/turf/open/floor/plating/grass/lava,
+/area/ruin/unpowered/buried_shrine)
+"yJ" = (
+/turf/open/floor/plating/grass/lava/orange,
+/area/overmap_encounter/planetoid/lava/explored)
+"yM" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"zg" = (
+/obj/structure/stone_tile,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"zB" = (
+/obj/structure/stone_tile/center,
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 8
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 6
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"zL" = (
+/obj/structure/flora/rock/lava,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"zM" = (
+/obj/structure/stone_tile/cracked{
+ dir = 4
+ },
+/obj/item/stack/ore/gold,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"zN" = (
+/obj/structure/stone_tile/block{
+ dir = 8
+ },
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"zQ" = (
+/obj/structure/stone_tile/surrounding_tile/burnt{
+ dir = 1
+ },
+/obj/structure/stone_tile/surrounding_tile/burnt,
+/obj/structure/stone_tile/surrounding_tile/burnt{
+ dir = 4
+ },
+/obj/structure/stone_tile/center/burnt,
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ab" = (
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 1
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ad" = (
+/obj/structure/stone_tile/slab,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Aw" = (
+/obj/structure/stone_tile/cracked{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ay" = (
+/obj/structure/flora/ausbushes/fernybush/hell,
+/turf/open/floor/plating/grass/lava/orange,
+/area/overmap_encounter/planetoid/lava/explored)
+"AY" = (
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/obj/item/stack/ore/gold,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ba" = (
+/obj/structure/stone_tile/block/burnt{
+ dir = 4
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 5
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Bc" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 1
+ },
+/obj/structure/stone_tile/block/cracked{
+ dir = 10
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Bm" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 4
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Bz" = (
+/obj/structure/table_frame/wood,
+/obj/item/stack/sheet/bone,
+/obj/structure/stone_tile/slab,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"BA" = (
+/obj/structure/destructible/tribal_torch{
+ pixel_y = 13
+ },
+/obj/structure/stone_tile/center,
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"BF" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 6
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"BZ" = (
+/obj/structure/stone_tile/block{
+ dir = 8
+ },
+/obj/structure/stone_tile/cracked{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Cm" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 5
+ },
+/obj/structure/stone_tile/center/burnt,
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Cv" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 4
+ },
+/obj/item/chair/wood/wings{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"CD" = (
+/obj/structure/stone_tile{
+ dir = 1
+ },
+/obj/structure/stone_tile{
+ dir = 4
+ },
+/obj/structure/stone_tile,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"CE" = (
+/obj/structure/stone_tile/cracked{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"CF" = (
+/obj/structure/chair/pew/left{
+ dir = 1
+ },
+/obj/structure/stone_tile/slab,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"CM" = (
+/obj/structure/stone_tile/center,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"CT" = (
+/obj/structure/table/wood,
+/obj/item/candle,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"CU" = (
+/mob/living/simple_animal/hostile/asteroid/goliath/pup{
+ pixel_x = 0
+ },
+/turf/open/floor/plating/moss,
+/area/ruin/unpowered/buried_shrine)
+"Do" = (
+/obj/structure/flora/ausbushes/hell,
+/turf/open/floor/plating/grass/lava/orange,
+/area/overmap_encounter/planetoid/lava/explored)
+"Dp" = (
+/obj/structure/flora/ash/fireblossom,
+/turf/open/floor/plating/grass/lava/orange,
+/area/overmap_encounter/planetoid/lava/explored)
+"DB" = (
+/obj/structure/flora/ausbushes/fullgrass/hell,
+/turf/open/floor/plating/grass/lava/orange,
+/area/overmap_encounter/planetoid/lava/explored)
+"Ee" = (
+/obj/structure/chair/pew/left,
+/obj/structure/stone_tile/slab,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ef" = (
+/obj/structure/flora/ash/fern,
+/turf/open/floor/plating/moss,
+/area/overmap_encounter/planetoid/cave/explored)
+"Eh" = (
+/turf/closed/mineral/random/volcanic,
+/area/overmap_encounter/planetoid/lava/explored)
+"Eu" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 5
+ },
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 6
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ez" = (
+/obj/structure/stone_tile/block{
+ dir = 4
+ },
+/obj/structure/stone_tile{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"EE" = (
+/obj/structure/stone_tile/center/burnt,
+/obj/structure/stone_tile/surrounding/burnt,
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Fo" = (
+/obj/structure/stone_tile/cracked{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Fq" = (
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Fw" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 1
+ },
+/obj/structure/chair/wood/wings,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"FC" = (
+/obj/item/reagent_containers/food/snacks/grown/apple{
+ pixel_y = 16
+ },
+/turf/open/floor/plating/grass/lava,
+/area/ruin/unpowered/buried_shrine)
+"FD" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_x = 1
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Gm" = (
+/obj/structure/stone_tile{
+ dir = 8
+ },
+/obj/structure/stone_tile{
+ dir = 1
+ },
+/obj/structure/stone_tile/block/cracked{
+ dir = 9
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Go" = (
+/obj/structure/stone_tile/surrounding_tile/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"GB" = (
+/obj/structure/stone_tile/block{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/ash{
+ pixel_x = -8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"GL" = (
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/obj/structure/stone_tile/block/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"GT" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Hg" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 4
+ },
+/obj/item/stack/ore/gold,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Hh" = (
+/obj/structure/stone_tile/surrounding_tile,
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ht" = (
+/obj/structure/stone_tile/surrounding/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Hv" = (
+/obj/structure/flora/tree/dead/hell,
+/turf/open/floor/plating/grass/lava,
+/area/ruin/unpowered/buried_shrine)
+"Hw" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 6
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"HN" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_x = -3
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ii" = (
+/obj/structure/stone_tile/cracked{
+ dir = 1
+ },
+/obj/structure/stone_tile{
+ dir = 4
+ },
+/obj/structure/stone_tile,
+/obj/structure/stone_tile/cracked{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/ruin/unpowered/buried_shrine)
+"Iz" = (
+/obj/structure/destructible/tribal_torch{
+ pixel_y = 14
+ },
+/obj/structure/stone_tile/surrounding/cracked,
+/obj/structure/stone_tile/center,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"IL" = (
+/obj/structure/stone_tile/slab/cracked,
+/obj/item/stack/sheet/mineral/wood,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ja" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 2;
+ pixel_x = 7
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Jc" = (
+/obj/structure/stone_tile/block/burnt{
+ dir = 8
+ },
+/obj/structure/stone_tile/block/cracked{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Jh" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 9
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Jk" = (
+/obj/structure/stone_tile/cracked{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"Jr" = (
+/obj/structure/stone_tile/cracked{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"Jv" = (
+/mob/living/simple_animal/hostile/asteroid/goliath/pup{
+ pixel_x = 0
+ },
+/obj/structure/flora/ausbushes/sparsegrass/hell,
+/turf/open/floor/plating/moss,
+/area/ruin/unpowered/buried_shrine)
+"Jw" = (
+/obj/structure/stone_tile/block,
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"JE" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 1
+ },
+/obj/item/stack/ore/gold,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"JJ" = (
+/obj/structure/stone_tile{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"JL" = (
+/obj/structure/flora/ausbushes/ywflowers/hell,
+/turf/open/floor/plating/grass/lava/orange,
+/area/overmap_encounter/planetoid/lava/explored)
+"Ka" = (
+/obj/structure/stone_tile/surrounding_tile/burnt{
+ dir = 8
+ },
+/obj/structure/stone_tile/surrounding_tile/burnt,
+/obj/structure/stone_tile/surrounding_tile/burnt{
+ dir = 1
+ },
+/obj/structure/stone_tile/surrounding_tile/burnt{
+ dir = 4
+ },
+/obj/structure/stone_tile/center/burnt,
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Kt" = (
+/obj/structure/stone_tile/surrounding_tile/cracked{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Kz" = (
+/obj/structure/flora/ash/cap_shroom,
+/turf/open/floor/plating/moss,
+/area/overmap_encounter/planetoid/cave/explored)
+"KD" = (
+/obj/structure/stone_tile/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"Lu" = (
+/obj/structure/flora/ash/leaf_shroom,
+/turf/open/floor/plating/moss,
+/area/overmap_encounter/planetoid/cave/explored)
+"Lx" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 1;
+ pixel_x = 4
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"LC" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"LJ" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/snacks/grown/ambrosia/gaia{
+ pixel_y = 6
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"LK" = (
+/turf/open/floor/plating/moss,
+/area/overmap_encounter/planetoid/lava/explored)
+"LL" = (
+/obj/structure/stone_tile/cracked{
+ dir = 4
+ },
+/obj/structure/stone_tile{
+ dir = 1
+ },
+/obj/structure/stone_tile/cracked{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"LP" = (
+/obj/structure/table/wood,
+/obj/item/ammo_casing/caseless/arrow/bone,
+/obj/item/ammo_casing/caseless/arrow/bone{
+ pixel_y = -4
+ },
+/obj/item/ammo_casing/caseless/arrow/bone{
+ pixel_y = 4
+ },
+/obj/item/ammo_casing/caseless/arrow/bone{
+ pixel_y = 8
+ },
+/obj/item/ammo_casing/caseless/arrow/bone{
+ pixel_y = 12
+ },
+/obj/structure/stone_tile/slab,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"LW" = (
+/obj/structure/destructible/tribal_torch{
+ pixel_y = 13
+ },
+/obj/structure/stone_tile/surrounding,
+/obj/structure/stone_tile/center/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"LZ" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 5;
+ pixel_x = 6
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Mc" = (
+/obj/structure/stone_tile/block,
+/obj/structure/stone_tile/slab,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Md" = (
+/obj/structure/stone_tile/surrounding_tile/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"Mt" = (
+/obj/structure/flora/ausbushes/genericbush/hell,
+/turf/open/floor/plating/grass/lava,
+/area/ruin/unpowered/buried_shrine)
+"Mw" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_x = -7;
+ pixel_y = -8
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Mx" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"MJ" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 8
+ },
+/obj/item/stack/ore/gold,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"MQ" = (
+/turf/template_noop,
+/area/template_noop)
+"Ni" = (
+/obj/structure/table/wood,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Nk" = (
+/obj/structure/table_frame/wood,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"NK" = (
+/obj/structure/flora/ash/cacti,
+/turf/open/floor/plating/grass/lava,
+/area/ruin/unpowered/buried_shrine)
+"NN" = (
+/obj/structure/stone_tile/center,
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 5
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"NY" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 9
+ },
+/obj/structure/stone_tile/block/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ok" = (
+/obj/structure/stone_tile{
+ dir = 8
+ },
+/obj/item/stack/ore/gold,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ot" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 8;
+ pixel_x = -1
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"OO" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 1
+ },
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"OT" = (
+/obj/structure/flora/ausbushes/fullgrass/hell,
+/turf/open/floor/plating/moss,
+/area/overmap_encounter/planetoid/lava/explored)
+"Ps" = (
+/obj/structure/flora/rock/hell,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/cave/explored)
+"Qb" = (
+/obj/structure/flora/ausbushes/sparsegrass/hell,
+/turf/open/floor/plating/grass/lava,
+/area/ruin/unpowered/buried_shrine)
+"Qf" = (
+/obj/structure/stone_tile/cracked{
+ dir = 1
+ },
+/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"QR" = (
+/obj/structure/flora/tree/dead/tall/grey,
+/turf/open/floor/plating/grass/lava/orange,
+/area/overmap_encounter/planetoid/lava/explored)
+"Rd" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/ruin/unpowered/buried_shrine)
+"Rl" = (
+/obj/structure/stone_tile/cracked{
+ dir = 8
+ },
+/obj/structure/stone_tile{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"RK" = (
+/obj/structure/stone_tile/center/cracked,
+/mob/living/simple_animal/hostile/asteroid/brimdemon,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"RN" = (
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 8
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Sa" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"Sj" = (
+/obj/structure/flora/ausbushes/sparsegrass/hell,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"Sn" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/snacks/grown/ash_flora/fireblossom,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"So" = (
+/obj/structure/stone_tile/block/cracked,
+/obj/structure/stone_tile/block/cracked{
+ dir = 5
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Sw" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_x = -9
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"SA" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/glass/bowl/mushroom_bowl,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"SJ" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 2;
+ pixel_x = 4
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"SV" = (
+/obj/structure/chair/pew/right{
+ dir = 1
+ },
+/obj/structure/stone_tile/slab,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Td" = (
+/obj/structure/stone_tile/slab/cracked,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Tp" = (
+/obj/structure/stone_tile/cracked{
+ dir = 8
+ },
+/obj/structure/stone_tile,
+/obj/structure/stone_tile{
+ dir = 4
+ },
+/obj/structure/stone_tile{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/ruin/unpowered/buried_shrine)
+"Tu" = (
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/obj/item/chair/wood{
+ dir = 8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ty" = (
+/obj/item/stack/sheet/bluespace_crystal/five{
+ pixel_x = -7
+ },
+/obj/item/stack/sheet/mineral/gold/five{
+ pixel_y = 3
+ },
+/obj/item/stack/sheet/mineral/diamond/five{
+ pixel_x = 8
+ },
+/obj/structure/closet/crate/necropolis,
+/obj/structure/stone_tile/slab/cracked{
+ dir = 5
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"TO" = (
+/turf/closed/mineral/random/volcanic,
+/area/ruin/unpowered/buried_shrine)
+"Ua" = (
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/ash{
+ pixel_x = 6;
+ pixel_y = 11
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Uf" = (
+/obj/structure/chair/pew,
+/obj/structure/stone_tile/slab,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Uw" = (
+/obj/structure/flora/ausbushes/sparsegrass/hell,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/cave/explored)
+"UB" = (
+/obj/structure/flora/ausbushes/genericbush/hell,
+/obj/item/reagent_containers/food/snacks/grown/apple{
+ pixel_x = -10;
+ pixel_y = -6
+ },
+/turf/open/floor/plating/grass/lava,
+/area/ruin/unpowered/buried_shrine)
+"UF" = (
+/obj/structure/stone_tile/block,
+/obj/item/claymore/bone{
+ pixel_x = 8;
+ pixel_y = 21
+ },
+/obj/item/shield/riot/goliath{
+ pixel_x = -12;
+ pixel_y = 16
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Vt" = (
+/obj/structure/flora/ash/leaf_shroom,
+/turf/open/floor/plating/moss,
+/area/ruin/unpowered/buried_shrine)
+"VG" = (
+/obj/structure/table/wood,
+/obj/item/kitchen/knife/combat/bone,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Wd" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 5
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Ws" = (
+/turf/open/floor/plating/moss,
+/area/ruin/unpowered/buried_shrine)
+"WD" = (
+/obj/structure/flora/tree/dead/barren,
+/turf/open/floor/plating/grass/lava/orange,
+/area/overmap_encounter/planetoid/lava/explored)
+"WG" = (
+/obj/structure/stone_tile/slab/burnt,
+/obj/item/gem/amber,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"WP" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/overmap_encounter/planetoid/lava/explored)
+"WZ" = (
+/turf/closed/indestructible/riveted/boss,
+/area/ruin/unpowered/buried_shrine)
+"Xh" = (
+/obj/structure/flora/ash/cap_shroom,
+/turf/open/floor/plating/moss,
+/area/ruin/unpowered/buried_shrine)
+"Xn" = (
+/obj/structure/stone_tile/cracked,
+/obj/structure/stone_tile/cracked{
+ dir = 4
+ },
+/obj/structure/stone_tile{
+ dir = 8
+ },
+/obj/structure/stone_tile{
+ dir = 1
+ },
+/mob/living/simple_animal/hostile/asteroid/hivelord/legion/tendril,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/ruin/unpowered/buried_shrine)
+"Xr" = (
+/obj/structure/stone_tile/cracked,
+/obj/structure/stone_tile/cracked{
+ dir = 4
+ },
+/obj/structure/stone_tile{
+ dir = 8
+ },
+/obj/structure/stone_tile{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/ruin/unpowered/buried_shrine)
+"Xv" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 4
+ },
+/obj/structure/stone_tile/center,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"XA" = (
+/turf/closed/indestructible/riveted/boss,
+/area/overmap_encounter/planetoid/cave/explored)
+"Ye" = (
+/obj/structure/chair/pew/right,
+/obj/structure/stone_tile/slab,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Yf" = (
+/obj/structure/stone_tile/block/cracked{
+ dir = 9
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Yh" = (
+/obj/structure/stone_tile/block,
+/obj/structure/stone_tile{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Yp" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = -7;
+ pixel_x = -4
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"YK" = (
+/obj/structure/flora/ausbushes/sparsegrass/hell,
+/turf/open/floor/plating/moss,
+/area/ruin/unpowered/buried_shrine)
+"Zk" = (
+/obj/structure/stone_tile{
+ dir = 8
+ },
+/obj/structure/stone_tile{
+ dir = 1
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Zl" = (
+/obj/structure/stone_tile/surrounding_tile{
+ dir = 8
+ },
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = -8
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"Zo" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 10
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"ZE" = (
+/obj/structure/stone_tile/surrounding/cracked{
+ dir = 1
+ },
+/obj/structure/stone_tile/center/burnt,
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"ZK" = (
+/obj/structure/stone_tile/block{
+ dir = 1
+ },
+/obj/structure/stone_tile,
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+"ZV" = (
+/obj/structure/stone_tile/slab/cracked{
+ dir = 4
+ },
+/turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit,
+/area/ruin/unpowered/buried_shrine)
+"ZX" = (
+/obj/structure/stone_tile/center/burnt{
+ fall_on_cross = 1;
+ pixel_y = 7;
+ pixel_x = 9
+ },
+/turf/open/lava/smooth/lava_land_surface,
+/area/ruin/unpowered/buried_shrine)
+
+(1,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+nh
+nh
+nh
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(2,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+MQ
+MQ
+MQ
+nh
+jt
+Eh
+Eh
+lO
+LK
+aD
+nh
+LK
+Sj
+nh
+nh
+jt
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(3,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+jt
+nh
+nh
+nh
+nh
+nh
+nh
+nh
+Eh
+Eh
+gt
+dF
+jJ
+nh
+nh
+nh
+nh
+LK
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(4,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+aD
+nh
+nh
+nh
+nh
+aD
+nh
+nh
+Eh
+dF
+lo
+dF
+dF
+aP
+dF
+LK
+nh
+aD
+nh
+Sj
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(5,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+lO
+nh
+nh
+lO
+Eh
+Eh
+nh
+nh
+Eh
+Eh
+Eh
+Eh
+dF
+aP
+dF
+dF
+jJ
+dF
+lO
+LK
+lO
+nh
+nh
+MQ
+MQ
+nh
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(6,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+aD
+nh
+nh
+LK
+nh
+nh
+Eh
+nh
+Sj
+nh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Kz
+dF
+dF
+Eh
+Eh
+Eh
+Eh
+nh
+nh
+nh
+nh
+nh
+nh
+aD
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(7,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+Eh
+Eh
+nh
+Sj
+nh
+nh
+LK
+rP
+LK
+Eh
+Eh
+nh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+lo
+dF
+jJ
+Eh
+Eh
+Eh
+Eh
+aD
+nh
+Sj
+nh
+Eh
+nh
+Sj
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(8,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+jt
+nh
+Eh
+nh
+nh
+nh
+nh
+Eh
+dF
+aP
+aP
+dF
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+dF
+dF
+dF
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+Eh
+Eh
+Eh
+nh
+nh
+jt
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(9,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+Eh
+Eh
+jt
+nh
+Eh
+Eh
+lo
+dF
+Kz
+dF
+Eh
+Eh
+Eh
+WZ
+WZ
+WZ
+WZ
+WZ
+Eh
+Eh
+gt
+aP
+dF
+Ef
+Eh
+Eh
+Eh
+Eh
+nh
+Eh
+Eh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(10,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+Sj
+nh
+Eh
+Eh
+Eh
+Eh
+dF
+dF
+dF
+aP
+Eh
+Eh
+WZ
+WZ
+WZ
+vg
+vg
+vg
+WZ
+WZ
+WZ
+Eh
+Eh
+lo
+aP
+Kz
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+aD
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(11,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+Eh
+Eh
+Eh
+jJ
+aP
+aP
+dF
+Eh
+Eh
+WZ
+WZ
+vg
+vg
+vg
+yF
+hp
+Qb
+TO
+WZ
+WZ
+Eh
+jJ
+dF
+lo
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+nh
+nh
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(12,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+aD
+Eh
+Eh
+XA
+Ef
+dF
+lo
+dF
+Eh
+Eh
+WZ
+WZ
+TO
+hp
+eI
+be
+jo
+Mt
+TO
+TO
+TO
+WZ
+WZ
+Eh
+dF
+dF
+dF
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+jt
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(13,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+Eh
+XA
+XA
+dF
+dF
+aP
+gt
+Eh
+Eh
+WZ
+TO
+Qb
+Mt
+eI
+Hv
+FC
+Qb
+hp
+NK
+TO
+vg
+WZ
+Eh
+Eh
+aP
+lo
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Sj
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(14,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+Sj
+nh
+nh
+Eh
+XA
+lo
+aP
+dF
+dF
+Eh
+Eh
+Eh
+WZ
+TO
+NK
+WZ
+WZ
+UB
+Qb
+yF
+WZ
+WZ
+Td
+vg
+WZ
+Eh
+Eh
+dF
+gt
+dF
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+aD
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(15,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+nh
+nh
+nh
+nh
+Sj
+dF
+dF
+dF
+Kz
+dF
+Eh
+Eh
+WZ
+WZ
+TO
+TO
+WZ
+WZ
+TO
+TO
+hp
+WZ
+WZ
+cN
+vg
+WZ
+WZ
+Eh
+Eh
+dF
+aP
+Eh
+Eh
+Eh
+Eh
+XA
+XA
+Eh
+Eh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(16,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+Eh
+Eh
+jt
+nh
+Eh
+Eh
+Eh
+jJ
+lo
+dF
+XA
+XA
+Eh
+Eh
+WZ
+vg
+TO
+TO
+TO
+TO
+TO
+TO
+Qb
+TO
+TO
+hn
+vg
+vg
+WZ
+Eh
+Eh
+XA
+XA
+Eh
+Eh
+Eh
+Eh
+Eh
+XA
+XA
+Eh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(17,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+Eh
+Eh
+Eh
+Eh
+Eh
+XA
+dF
+dF
+aP
+XA
+XA
+Eh
+Eh
+WZ
+vg
+on
+Fq
+Ht
+TO
+TO
+TO
+TO
+TO
+Wd
+Fq
+cN
+vg
+WZ
+Eh
+Eh
+XA
+XA
+Eh
+Eh
+Eh
+Eh
+Eh
+gt
+XA
+nh
+nh
+nh
+jt
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(18,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+Eh
+Eh
+XA
+XA
+XA
+dF
+Lu
+dF
+Eh
+Eh
+Eh
+Eh
+WZ
+vg
+hn
+cN
+Fq
+yz
+TO
+TO
+TO
+TO
+TO
+TO
+TO
+vg
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+aP
+XA
+XA
+nh
+Sj
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(19,1,1) = {"
+MQ
+MQ
+MQ
+nh
+nh
+nh
+nh
+jt
+Eh
+XA
+XA
+aP
+dF
+dF
+dF
+Eh
+Eh
+Eh
+Eh
+Eh
+WZ
+WZ
+WZ
+WZ
+Td
+TO
+TO
+TO
+TO
+TO
+TO
+WZ
+WZ
+WZ
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+lo
+jJ
+XA
+aD
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(20,1,1) = {"
+MQ
+MQ
+MQ
+aD
+nh
+Eh
+nh
+Eh
+Eh
+XA
+lo
+dF
+aP
+dF
+Eh
+Eh
+Eh
+Eh
+WZ
+WZ
+WZ
+me
+Ab
+WZ
+WZ
+WZ
+TO
+TO
+TO
+WZ
+WZ
+WZ
+me
+Ab
+WZ
+WZ
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+dF
+aP
+XA
+XA
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+"}
+(21,1,1) = {"
+MQ
+MQ
+MQ
+nh
+Sj
+Eh
+Eh
+Eh
+XA
+XA
+Kz
+dF
+dF
+Eh
+Eh
+Eh
+Eh
+Eh
+TO
+on
+lJ
+RN
+wj
+WZ
+TO
+TO
+TO
+Fq
+Tp
+Mx
+CF
+WZ
+RN
+wj
+ta
+oi
+WZ
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+lo
+dF
+aP
+XA
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+"}
+(22,1,1) = {"
+MQ
+MQ
+jt
+nh
+nh
+nh
+Eh
+Eh
+XA
+dF
+dF
+aP
+jJ
+Eh
+Eh
+Eh
+Eh
+TO
+TO
+BF
+oi
+wl
+wl
+WZ
+IL
+ta
+Wd
+Xr
+Tp
+lJ
+ii
+WZ
+wl
+wl
+yz
+Ad
+OO
+WZ
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Ef
+aP
+XA
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+"}
+(23,1,1) = {"
+MQ
+MQ
+nh
+nh
+nh
+Eh
+Eh
+Eh
+XA
+dF
+dF
+dF
+Eh
+Eh
+Eh
+Eh
+Eh
+TO
+qh
+JJ
+Rl
+yz
+WZ
+WZ
+sS
+df
+Ii
+sB
+Td
+lJ
+SV
+WZ
+WZ
+lJ
+Ad
+nq
+Ad
+TO
+WZ
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+gt
+lo
+XA
+Sj
+nh
+jt
+nh
+MQ
+MQ
+MQ
+"}
+(24,1,1) = {"
+MQ
+MQ
+nh
+nh
+Eh
+Eh
+Eh
+jJ
+lo
+aP
+dF
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+TO
+Qf
+Ad
+JJ
+TO
+WZ
+BA
+Wd
+Tp
+yz
+Ad
+JE
+Ii
+on
+kJ
+WZ
+oi
+on
+Ad
+yz
+TO
+TO
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+dF
+lo
+nh
+lO
+nh
+Sj
+MQ
+MQ
+MQ
+"}
+(25,1,1) = {"
+MQ
+MQ
+nh
+LK
+Eh
+Eh
+aP
+dF
+dF
+gt
+Eh
+Eh
+Eh
+Eh
+WZ
+WZ
+WZ
+TO
+Ht
+Aw
+Ad
+TO
+WZ
+TO
+BF
+vJ
+Ad
+cA
+Ad
+yz
+Fq
+Fq
+WZ
+Aw
+Fq
+ff
+Fo
+WZ
+WZ
+WZ
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+dF
+dF
+nh
+nh
+nh
+nh
+MQ
+MQ
+MQ
+"}
+(26,1,1) = {"
+MQ
+nh
+nh
+lO
+Lu
+dF
+dF
+aP
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+WZ
+ld
+WZ
+WZ
+WZ
+yz
+Fq
+TO
+TO
+TO
+Xr
+Ht
+Td
+pK
+on
+Ii
+Tp
+Xr
+Fq
+kW
+BZ
+kW
+CE
+WZ
+uS
+Sn
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+aP
+dF
+LK
+nh
+aD
+nh
+MQ
+MQ
+MQ
+"}
+(27,1,1) = {"
+MQ
+aD
+nh
+nh
+dF
+lo
+dF
+Eh
+Eh
+dD
+dD
+Eh
+Eh
+Eh
+WZ
+Fq
+ta
+kW
+td
+kZ
+Td
+TO
+TO
+TO
+TO
+Tp
+hn
+Ii
+Ht
+Tp
+Hg
+BF
+Ii
+Ad
+Ad
+Ad
+TO
+WZ
+zg
+CE
+WZ
+Eh
+Eh
+Eh
+XA
+XA
+Kz
+aP
+nh
+lO
+nh
+nh
+MQ
+MQ
+MQ
+"}
+(28,1,1) = {"
+MQ
+nh
+nh
+nh
+aP
+Kz
+Eh
+Eh
+Eh
+dD
+dD
+Eh
+Eh
+WZ
+WZ
+Td
+lJ
+nz
+jy
+hn
+CE
+WZ
+WZ
+TO
+TO
+TO
+Wd
+GL
+Ad
+Fq
+Xr
+Ii
+WZ
+WZ
+TO
+TO
+TO
+TO
+Aw
+nk
+WZ
+WZ
+Eh
+Eh
+XA
+XA
+lo
+Eh
+Eh
+aD
+nh
+nh
+nh
+MQ
+MQ
+"}
+(29,1,1) = {"
+MQ
+nh
+Sj
+nh
+aP
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+WZ
+CT
+Fq
+jy
+wl
+lJ
+fq
+WZ
+WZ
+WZ
+WZ
+WZ
+TO
+BF
+qi
+TO
+wS
+WZ
+WZ
+WZ
+WZ
+WZ
+TO
+TO
+Ad
+ta
+zg
+Fo
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+nh
+nh
+jI
+jt
+MQ
+MQ
+"}
+(30,1,1) = {"
+MQ
+nh
+nh
+LK
+dF
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+WZ
+Nk
+Fq
+TO
+TO
+TO
+WZ
+WZ
+tE
+vi
+qp
+WZ
+WZ
+Ad
+Fq
+TO
+WZ
+WZ
+iK
+GB
+nX
+WZ
+WZ
+Fq
+Wd
+ta
+oi
+Fq
+WZ
+Eh
+Eh
+Eh
+Eh
+nh
+aD
+nh
+nh
+nh
+nh
+nh
+nh
+MQ
+"}
+(31,1,1) = {"
+nh
+nh
+LK
+OT
+Eh
+Eh
+Eh
+Eh
+Eh
+WZ
+WZ
+WZ
+WZ
+WZ
+WZ
+WZ
+TO
+TO
+WZ
+WZ
+WZ
+Td
+ic
+xJ
+TO
+WZ
+Ad
+Bc
+yz
+WZ
+TO
+Ua
+rp
+UF
+WZ
+WZ
+WZ
+Ad
+BF
+WZ
+WZ
+WZ
+WZ
+WZ
+WZ
+WZ
+Sj
+nh
+jI
+Sj
+nh
+nh
+Sj
+nh
+MQ
+"}
+(32,1,1) = {"
+nh
+nh
+lO
+Eh
+Eh
+Eh
+Eh
+Eh
+WZ
+WZ
+Ad
+Ad
+cD
+WZ
+yy
+TO
+TO
+Fq
+wl
+CD
+WZ
+So
+ZE
+vg
+TO
+WZ
+Ba
+vO
+Jc
+WZ
+TO
+zQ
+fY
+Hh
+WZ
+Go
+ch
+Mc
+sD
+Fq
+TO
+WZ
+TO
+TO
+zB
+WZ
+WZ
+jt
+nh
+Jk
+nh
+aD
+nh
+nh
+MQ
+"}
+(33,1,1) = {"
+jt
+Sj
+Sj
+Eh
+Eh
+Eh
+Eh
+WZ
+WZ
+yy
+Cv
+Ni
+lJ
+WZ
+ta
+su
+Mx
+uP
+ta
+AY
+WZ
+WZ
+Mw
+FD
+oL
+WZ
+vg
+jY
+vg
+WZ
+vg
+Hw
+TO
+WZ
+WZ
+Ht
+kW
+nP
+iL
+Fq
+TO
+WZ
+TO
+yz
+Yf
+fx
+WZ
+WZ
+rh
+xe
+dD
+nh
+nh
+nh
+Sj
+"}
+(34,1,1) = {"
+nh
+nh
+aD
+nh
+Eh
+Eh
+Eh
+WZ
+Ad
+xT
+SA
+Nk
+sJ
+Ad
+wy
+kW
+yz
+Ad
+hn
+kW
+ZK
+WZ
+TO
+vg
+dA
+vg
+vg
+dX
+gW
+Ja
+SJ
+HN
+ZX
+WZ
+qw
+wl
+qt
+mn
+lJ
+Fq
+rk
+fh
+Ad
+GT
+Ad
+on
+Rd
+ta
+tA
+WP
+Sa
+Jr
+nh
+nh
+nh
+"}
+(35,1,1) = {"
+nh
+nh
+nh
+Eh
+Eh
+ee
+Eh
+WZ
+dQ
+qO
+cv
+LJ
+ta
+NN
+ta
+Xv
+Ad
+mM
+Ad
+yt
+lJ
+WZ
+TO
+vg
+dX
+Sw
+rD
+EE
+vg
+vg
+vg
+vg
+LZ
+WZ
+Ka
+dB
+RK
+uP
+di
+zN
+Ad
+Td
+Ad
+BF
+yz
+td
+Ht
+ZV
+kt
+ha
+ha
+Sj
+nh
+nh
+nh
+"}
+(36,1,1) = {"
+Sj
+nh
+Eh
+Eh
+ee
+ee
+ee
+WZ
+Wd
+Tu
+Nk
+VG
+uf
+Td
+Zk
+wl
+Td
+Ad
+yz
+wl
+gE
+WZ
+vg
+vg
+qT
+TO
+vg
+Bm
+vg
+vg
+sy
+kC
+em
+WZ
+mv
+kW
+CM
+jy
+lJ
+TO
+Ad
+TO
+Wd
+wl
+Ad
+uK
+wl
+cn
+Md
+dn
+dg
+KD
+nh
+nh
+nh
+"}
+(37,1,1) = {"
+nh
+nh
+Eh
+ee
+ee
+ee
+ee
+WZ
+WZ
+Yh
+Fw
+SA
+lJ
+WZ
+ta
+Fq
+lJ
+Xv
+jy
+lJ
+WZ
+WZ
+TO
+fL
+ol
+WZ
+vg
+rM
+vg
+WZ
+sL
+vg
+vg
+WZ
+WZ
+on
+wl
+bp
+Zl
+TO
+TO
+WZ
+td
+Td
+td
+qV
+WZ
+WZ
+eJ
+LL
+dD
+nh
+Sj
+nh
+nh
+"}
+(38,1,1) = {"
+nh
+nh
+Eh
+Eh
+nh
+ee
+ee
+ee
+WZ
+WZ
+yz
+wM
+tL
+WZ
+Yh
+kW
+Fq
+vJ
+kW
+Gm
+WZ
+CE
+Cm
+yb
+vg
+WZ
+xs
+bY
+iB
+WZ
+Yp
+Lx
+Ot
+dS
+WZ
+Kt
+Iz
+ta
+lJ
+Fq
+TO
+WZ
+hz
+Fq
+at
+WZ
+WZ
+Eh
+Eh
+Eh
+Eh
+nh
+nh
+nh
+MQ
+"}
+(39,1,1) = {"
+MQ
+nh
+nh
+nh
+nh
+zL
+ee
+ee
+ee
+WZ
+WZ
+WZ
+WZ
+WZ
+WZ
+WZ
+MJ
+Ht
+WZ
+WZ
+WZ
+on
+JJ
+vg
+vg
+WZ
+Ad
+NY
+yz
+WZ
+vg
+vg
+vg
+Hw
+WZ
+WZ
+WZ
+hn
+Ad
+WZ
+WZ
+WZ
+WZ
+WZ
+WZ
+WZ
+Eh
+Eh
+Eh
+Eh
+jt
+nh
+nh
+nh
+MQ
+"}
+(40,1,1) = {"
+MQ
+nh
+jt
+nh
+nh
+nh
+ee
+ee
+ee
+Eh
+Eh
+Eh
+Eh
+WZ
+Nk
+wy
+wl
+wl
+mr
+WZ
+WZ
+Ty
+yM
+uf
+WZ
+WZ
+hn
+td
+Ad
+WZ
+WZ
+Eu
+WG
+hW
+WZ
+WZ
+vJ
+Ad
+ta
+Ok
+JJ
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+nh
+nh
+nh
+nh
+MQ
+MQ
+"}
+(41,1,1) = {"
+MQ
+nh
+nh
+nh
+Sj
+nh
+ee
+ee
+Eh
+Eh
+Eh
+Eh
+Eh
+WZ
+CT
+Fq
+uf
+kW
+Mx
+BA
+WZ
+WZ
+WZ
+WZ
+WZ
+TO
+Wd
+ef
+BF
+TO
+WZ
+WZ
+WZ
+WZ
+WZ
+oH
+uN
+Wd
+Yh
+oi
+nk
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+nh
+nh
+aD
+nh
+nh
+MQ
+MQ
+"}
+(42,1,1) = {"
+MQ
+MQ
+nh
+nh
+nh
+nh
+ee
+ee
+Eh
+dD
+dD
+Eh
+Eh
+WZ
+WZ
+Td
+lJ
+wt
+ta
+TO
+TO
+WZ
+WZ
+TO
+TO
+TO
+Ad
+Jw
+Ad
+TO
+TO
+TO
+WZ
+WZ
+Fq
+nk
+Td
+yy
+nk
+oi
+WZ
+WZ
+ee
+Eh
+dD
+dD
+jt
+nh
+Sj
+nh
+nh
+nh
+MQ
+MQ
+MQ
+"}
+(43,1,1) = {"
+MQ
+MQ
+MQ
+nh
+nh
+nh
+ee
+ee
+ee
+dD
+dD
+Eh
+Eh
+Eh
+WZ
+Yf
+jy
+LC
+TO
+TO
+TO
+TO
+TO
+TO
+gH
+Xr
+zg
+Tp
+on
+zM
+Tp
+TO
+TO
+Ad
+Ad
+Ad
+Ez
+WZ
+JJ
+mr
+WZ
+ee
+ee
+Eh
+dD
+dD
+nh
+nh
+nh
+jI
+nh
+nh
+MQ
+MQ
+MQ
+"}
+(44,1,1) = {"
+MQ
+MQ
+MQ
+nh
+jt
+nh
+zL
+ee
+ee
+ee
+Eh
+Eh
+Eh
+Eh
+WZ
+om
+WZ
+WZ
+WZ
+TO
+TO
+BF
+TO
+Xr
+uK
+Fo
+Ht
+Ad
+Td
+Tp
+Wd
+TO
+TO
+TO
+iw
+wl
+CE
+WZ
+dG
+CT
+WZ
+ee
+ee
+ee
+ee
+fB
+nh
+nh
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+"}
+(45,1,1) = {"
+MQ
+MQ
+MQ
+Sj
+nh
+nh
+nh
+Eh
+ee
+ee
+ee
+Eh
+Eh
+Eh
+WZ
+WZ
+WZ
+TO
+TO
+TO
+Wd
+gH
+WZ
+su
+Tp
+yz
+Ad
+yv
+Ad
+Fo
+Xr
+TO
+WZ
+TO
+CE
+kW
+Aw
+WZ
+WZ
+WZ
+WZ
+ee
+ee
+ee
+Sj
+nh
+jI
+nh
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+"}
+(46,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+Eh
+Eh
+ee
+Eh
+Eh
+Eh
+Eh
+Eh
+WZ
+TO
+TO
+Zo
+Ad
+zg
+on
+WZ
+fq
+uK
+JJ
+yz
+Ad
+hn
+Tp
+Fq
+LW
+WZ
+Aw
+Ht
+Ad
+hn
+TO
+TO
+WZ
+ee
+ee
+ee
+ee
+zL
+nh
+nh
+nh
+nh
+Sj
+nh
+MQ
+MQ
+MQ
+MQ
+"}
+(47,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+Eh
+Eh
+Eh
+nh
+Eh
+Eh
+Eh
+WZ
+WZ
+Td
+yz
+hn
+co
+Wd
+WZ
+WZ
+Ee
+ta
+yM
+Fq
+yz
+lJ
+CF
+WZ
+WZ
+lJ
+Ad
+nq
+TO
+TO
+WZ
+WZ
+ee
+Eh
+Eh
+Eh
+Eh
+nh
+nh
+jt
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+"}
+(48,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+Sj
+nh
+nh
+nh
+nh
+nh
+Eh
+Eh
+Eh
+WZ
+WZ
+Ad
+Jh
+nk
+kW
+kW
+WZ
+Uf
+ta
+BF
+Tp
+jM
+lJ
+ii
+WZ
+kW
+gz
+Td
+Ad
+TO
+TO
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+"}
+(49,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+aD
+nh
+nh
+MQ
+MQ
+MQ
+nh
+nh
+Eh
+Eh
+Eh
+WZ
+WZ
+Td
+lJ
+me
+Ab
+WZ
+Ye
+ta
+hn
+Xn
+Ht
+lJ
+SV
+WZ
+me
+Ab
+ta
+TO
+TO
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+Eh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(50,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+MQ
+MQ
+MQ
+nh
+nh
+jt
+Eh
+Eh
+Eh
+Eh
+WZ
+WZ
+WZ
+RN
+wj
+WZ
+WZ
+WZ
+vJ
+Fq
+Tp
+WZ
+WZ
+WZ
+RN
+wj
+WZ
+WZ
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+nh
+nh
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(51,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+Sj
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+WZ
+WZ
+WZ
+WZ
+TO
+Wd
+Fq
+BF
+gH
+hn
+TO
+WZ
+WZ
+WZ
+WZ
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+nh
+Sj
+nh
+aD
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(52,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+Eh
+Eh
+nh
+Eh
+Eh
+Eh
+Eh
+Eh
+WZ
+Bz
+TO
+TO
+TO
+TO
+Xr
+hn
+Xr
+TO
+TO
+TO
+Wd
+kp
+WZ
+Eh
+Eh
+Eh
+Eh
+DB
+yJ
+Eh
+Eh
+nh
+nh
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(53,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+nh
+nh
+nh
+Eh
+XA
+XA
+Eh
+Eh
+WZ
+eZ
+vR
+TO
+TO
+TO
+TO
+TO
+TO
+TO
+TO
+TO
+TO
+LP
+WZ
+Eh
+Eh
+dD
+dD
+bW
+bW
+Eh
+Eh
+aD
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(54,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+aD
+MQ
+MQ
+MQ
+nh
+Eh
+XA
+XA
+Eh
+Eh
+WZ
+Bz
+Xr
+TO
+TO
+TO
+TO
+TO
+TO
+TO
+TO
+TO
+TO
+vo
+WZ
+Eh
+Eh
+dD
+dD
+yJ
+JL
+Do
+Eh
+Eh
+Eh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(55,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+Eh
+Eh
+rH
+rH
+Eh
+WZ
+WZ
+BF
+TO
+WZ
+WZ
+TO
+TO
+TO
+WZ
+WZ
+TO
+TO
+WZ
+WZ
+Eh
+yJ
+yJ
+yJ
+DB
+Dp
+yJ
+yJ
+Eh
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(56,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+Eh
+Eh
+Ps
+rH
+Eh
+Eh
+WZ
+rt
+TO
+WZ
+WZ
+Xh
+YK
+YK
+WZ
+WZ
+TO
+Fq
+WZ
+DB
+yJ
+bW
+yJ
+bW
+bW
+yJ
+yJ
+bW
+yJ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(57,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+Sj
+nh
+nh
+Eh
+Eh
+rH
+rH
+Eh
+WZ
+WZ
+TO
+TO
+TO
+Ws
+YK
+Jv
+Ws
+Xh
+TO
+TO
+WZ
+yJ
+yJ
+yJ
+yJ
+WD
+yJ
+bW
+yJ
+bW
+DB
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(58,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+Eh
+Eh
+rH
+iX
+Eh
+Eh
+WZ
+TO
+CU
+sv
+Ws
+pu
+sv
+YK
+YK
+Vt
+WZ
+WZ
+Dp
+Do
+bW
+bW
+yJ
+Ay
+JL
+yJ
+yJ
+JL
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(59,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+nh
+Eh
+rH
+Uw
+Eh
+Eh
+Eh
+WZ
+WZ
+rA
+Ws
+Jv
+YK
+Ws
+YK
+CU
+WZ
+WZ
+yJ
+yJ
+JL
+yJ
+DB
+yJ
+yJ
+yJ
+yJ
+QR
+yJ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(60,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+jt
+Sj
+nh
+nh
+rH
+rH
+Eh
+Eh
+Eh
+Eh
+WZ
+WZ
+WZ
+Vt
+YK
+rA
+WZ
+WZ
+WZ
+yJ
+bW
+yJ
+yJ
+yJ
+yJ
+yJ
+yJ
+yJ
+DB
+bW
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(61,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+nh
+nh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+WZ
+WZ
+WZ
+WZ
+WZ
+yJ
+yJ
+bW
+bW
+Ay
+yJ
+bW
+bW
+yJ
+Do
+bW
+bW
+yJ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(62,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+nh
+nh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+DB
+yJ
+yJ
+Do
+yJ
+DB
+yJ
+yJ
+yJ
+bW
+yJ
+yJ
+Dp
+yJ
+yJ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(63,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+nh
+nh
+Eh
+Eh
+Eh
+Eh
+Eh
+Eh
+yJ
+Ay
+bW
+yJ
+yJ
+yJ
+Dp
+bW
+bW
+yJ
+JL
+yJ
+bW
+yJ
+yJ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(64,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+Sj
+nh
+Eh
+Eh
+bW
+Eh
+Eh
+Eh
+Eh
+yJ
+bW
+yJ
+yJ
+yJ
+WD
+yJ
+yJ
+yJ
+yJ
+yJ
+QR
+bW
+bW
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(65,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+aD
+nh
+nh
+Eh
+bW
+bW
+yJ
+Dp
+DB
+Do
+bW
+bW
+Ay
+bW
+JL
+yJ
+Do
+yJ
+yJ
+DB
+yJ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(66,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+nh
+Eh
+Eh
+JL
+Ay
+yJ
+WD
+JL
+yJ
+yJ
+DB
+bW
+bW
+bW
+yJ
+yJ
+yJ
+bW
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
+(67,1,1) = {"
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+nh
+nh
+MQ
+MQ
+MQ
+MQ
+bW
+bW
+bW
+yJ
+QR
+yJ
+bW
+DB
+yJ
+bW
+DB
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+MQ
+"}
diff --git a/_maps/map_catalogue.txt b/_maps/map_catalogue.txt
index ca3748b4c94c..e7b6ca5db5d3 100644
--- a/_maps/map_catalogue.txt
+++ b/_maps/map_catalogue.txt
@@ -126,9 +126,9 @@ Find the key for using this catalogue in "map_catalogue_key.txt"
Size = (x = 11)(y = 16)(z = 1)
Tags = "Minor Combat Challenge", "Medium Loot", "Inhospitable"
- File Name = "_maps\RandomRuins\LavaRuins\lavaland_surface_ashwalker_shrine.dmm"
- Size = (x = 48)(y = 50)(z = 1)
- Tags = "No Combat", "Minor Loot", "Inhospitable"
+ File Name = "_maps\RandomRuins\LavaRuins\lavaland_surface_buried_shrine.dmm"
+ Size = (x = 67)(y = 55)(z = 1)
+ Tags = "Medium Combat", "Medium Loot", "Hazardous", "Lava", "Inhospitable"
File Name = "_maps\RandomRuins\LavaRuins\lavaland_surface_biodome_winter.dmm"
Size = (x = 46)(y = 42)(z = 1)
diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm
index 7df3a453acfb..e5683140933f 100644
--- a/code/__DEFINES/combat.dm
+++ b/code/__DEFINES/combat.dm
@@ -140,13 +140,14 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list(/obj/item/gun)))
#define WEAPON_MEDIUM 2
/// You must wield the gun to fire this gun
#define WEAPON_HEAVY 3
+/// You must FULLY wield (wait the full wield delay) the gun to fire this gun
+#define WEAPON_VERY_HEAVY 4
//Gun trigger guards
#define TRIGGER_GUARD_ALLOW_ALL -1
#define TRIGGER_GUARD_NONE 0
#define TRIGGER_GUARD_NORMAL 1
//Gun bolt types
-///Gun has a bolt, it stays closed while not cycling. The gun must be racked to have a bullet chambered when a mag is inserted.
-/// Example: c20, shotguns, m90
+///The gun has a closed bolt, when resting it's closed, and must be racked to get a bullet from a magazine. see: Every Fucking Videogame Gun Ever
#define BOLT_TYPE_STANDARD 1
///Gun has a bolt, it is open when ready to fire. The gun can never have a chambered bullet with no magazine, but the bolt stays ready when a mag is removed.
/// Example: Some SMGs, the L6
diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm
index 42f21252213c..f7267a7af8d3 100644
--- a/code/__DEFINES/dcs/signals.dm
+++ b/code/__DEFINES/dcs/signals.dm
@@ -774,6 +774,10 @@
/// send when enabling/diabling an autofire component
#define COMSIG_GUN_DISABLE_AUTOFIRE "disable_autofire"
#define COMSIG_GUN_ENABLE_AUTOFIRE "enable_autofire"
+#define COMSIG_GUN_SET_AUTOFIRE_SPEED "set_autofire_speed"
+
+///sent when guns need to notify the gun hud to update. mostly for revolvers.
+#define COMSIG_UPDATE_AMMO_HUD "update_ammo_hud"
///called in /obj/item/gun/process_chamber (src)
#define COMSIG_GUN_CHAMBER_PROCESSED "gun_chamber_processed"
diff --git a/code/__DEFINES/guns.dm b/code/__DEFINES/guns.dm
index 0256ed11bedd..556a9ff0e35c 100644
--- a/code/__DEFINES/guns.dm
+++ b/code/__DEFINES/guns.dm
@@ -14,3 +14,9 @@
#define MANUFACTURER_DONKCO "the Donk! Co. logo"
#define MANUFACTURER_PGF "the Etherbor Industries emblem"
#define MANUFACTURER_IMPORT "Lanchester Import Co."
+
+#define FIREMODE_SEMIAUTO "single"
+#define FIREMODE_BURST "burst"
+#define FIREMODE_FULLAUTO "auto"
+#define FIREMODE_OTHER "other"
+#define FIREMODE_OTHER_TWO "other2"
diff --git a/code/datums/action.dm b/code/datums/action.dm
index ff03b689085d..de13fc002dde 100644
--- a/code/datums/action.dm
+++ b/code/datums/action.dm
@@ -207,6 +207,7 @@
/datum/action/item_action/toggle_firemode
name = "Toggle Firemode"
+ icon_icon = 'icons/mob/actions/actions_items.dmi'
/datum/action/item_action/rcl_col
name = "Change Cable Color"
diff --git a/code/datums/components/fullauto.dm b/code/datums/components/fullauto.dm
index 177093a49fef..f3050c7ab76c 100644
--- a/code/datums/components/fullauto.dm
+++ b/code/datums/components/fullauto.dm
@@ -8,7 +8,7 @@
var/turf/target_loc //For dealing with locking on targets due to BYOND engine limitations (the mouse input only happening when mouse moves).
var/autofire_stat = AUTOFIRE_STAT_IDLE
var/mouse_parameters
- var/autofire_shot_delay = 0.3 SECONDS //Time between individual shots.
+ var/autofire_shot_delay = 0.1 SECONDS //Time between individual shots.
var/mouse_status = AUTOFIRE_MOUSEUP //This seems hacky but there can be two MouseDown() without a MouseUp() in between if the user holds click and uses alt+tab, printscreen or similar.
var/enabled = TRUE
@@ -22,6 +22,7 @@
RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(wake_up))
RegisterSignal(parent, COMSIG_GUN_DISABLE_AUTOFIRE, PROC_REF(disable_autofire))
RegisterSignal(parent, COMSIG_GUN_ENABLE_AUTOFIRE, PROC_REF(enable_autofire))
+ RegisterSignal(parent, COMSIG_GUN_SET_AUTOFIRE_SPEED, PROC_REF(set_autofire_speed))
if(_autofire_shot_delay)
autofire_shot_delay = _autofire_shot_delay
if(autofire_stat == AUTOFIRE_STAT_IDLE && ismob(gun.loc))
@@ -161,7 +162,7 @@
if(isgun(parent))
var/obj/item/gun/shoota = parent
- if(!shoota.on_autofire_start(shooter)) //This is needed because the minigun has a do_after before firing and signals are async.
+ if(!shoota.on_autofire_start(shooter=shooter)) //This is needed because the minigun has a do_after before firing and signals are async.
stop_autofiring()
return
if(autofire_stat != AUTOFIRE_STAT_FIRING)
@@ -242,12 +243,12 @@
// Gun procs.
-/obj/item/gun/proc/on_autofire_start(mob/living/shooter)
- if(semicd || shooter.stat || !can_trigger_gun(shooter))
- return FALSE
- if(!can_shoot())
- shoot_with_empty_chamber(shooter)
+/obj/item/gun/proc/on_autofire_start(datum/source, atom/target, mob/living/shooter, params)
+ if(current_cooldown || shooter.stat)
return FALSE
+ if(!can_shoot()) //we call pre_fire so bolts/slides work correctly
+ INVOKE_ASYNC(src, PROC_REF(do_autofire_shot), source, target, shooter, params)
+ return NONE
if(weapon_weight == WEAPON_HEAVY && (!wielded))
to_chat(shooter, "You need a more secure grip to fire [src]!")
return FALSE
@@ -262,32 +263,29 @@
/obj/item/gun/proc/do_autofire(datum/source, atom/target, mob/living/shooter, params)
SIGNAL_HANDLER
- if(semicd || shooter.incapacitated())
+ if(current_cooldown || shooter.incapacitated())
return NONE
if(weapon_weight == WEAPON_HEAVY && (!wielded))
to_chat(shooter, "You need a more secure grip to fire [src]!")
return NONE
- if(!can_shoot())
- shoot_with_empty_chamber(shooter)
+ if(!can_shoot()) //we stop if we cant shoot but also calling pre_fire so the bolt works correctly if it's a weird open bolt weapon.
+ INVOKE_ASYNC(src, PROC_REF(do_autofire_shot), source, target, shooter, params)
return NONE
INVOKE_ASYNC(src, PROC_REF(do_autofire_shot), source, target, shooter, params)
return COMPONENT_AUTOFIRE_SHOT_SUCCESS //All is well, we can continue shooting.
/obj/item/gun/proc/do_autofire_shot(datum/source, atom/target, mob/living/shooter, params)
- var/obj/item/gun/akimbo_gun = shooter.get_inactive_held_item()
- var/bonus_spread = 0
- if(istype(akimbo_gun) && weapon_weight < WEAPON_MEDIUM)
- if(akimbo_gun.weapon_weight < WEAPON_MEDIUM && akimbo_gun.can_trigger_gun(shooter))
- bonus_spread = dual_wield_spread
- addtimer(CALLBACK(akimbo_gun, TYPE_PROC_REF(/obj/item/gun, process_fire), target, shooter, TRUE, params, null, bonus_spread), 1)
- process_fire(target, shooter, TRUE, params, null, bonus_spread)
-
-/datum/component/automatic_fire/proc/disable_autofire()
+ pre_fire(target, shooter, TRUE, params, null) //dual wielding is handled here
+
+/datum/component/automatic_fire/proc/disable_autofire(datum/source)
enabled = FALSE
-/datum/component/automatic_fire/proc/enable_autofire()
+/datum/component/automatic_fire/proc/enable_autofire(datum/source)
enabled = TRUE
+/datum/component/automatic_fire/proc/set_autofire_speed(datum/source, newspeed)
+ autofire_shot_delay = newspeed
+
#undef AUTOFIRE_MOUSEUP
#undef AUTOFIRE_MOUSEDOWN
diff --git a/code/datums/components/gunpoint.dm b/code/datums/components/gunpoint.dm
index 0aa1a5a1e8cc..85701e9c7626 100644
--- a/code/datums/components/gunpoint.dm
+++ b/code/datums/components/gunpoint.dm
@@ -126,7 +126,7 @@
if(weapon.chambered && weapon.chambered.BB)
weapon.chambered.BB.damage *= damage_mult
- weapon.process_fire(target, shooter)
+ weapon.pre_fire(target, shooter)
qdel(src)
/datum/component/gunpoint/proc/cancel()
diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm
index 9944cb00fe55..bb4bcf74b31c 100644
--- a/code/datums/ruins/lavaland.dm
+++ b/code/datums/ruins/lavaland.dm
@@ -92,11 +92,11 @@
suffix = "lavaland_surface_dwarffortress.dmm"
allow_duplicates = FALSE
-/datum/map_template/ruin/lavaland/ashwalker_shrine
- name = "Ashwalker shrine"
- id = "ashwalker_shrine"
- description = "A destroyed ashwalker village. What even happened here?"
- suffix = "lavaland_surface_ashwalker_shrine.dmm"
+/datum/map_template/ruin/lavaland/buried_shrine
+ name = "Buried Shrine"
+ id = "buried_shrine"
+ description = "An ancient temple belonging to some long-gone inhabitants, wrecked and buried by the volcanic activity of it's home planet."
+ suffix = "lavaland_surface_buried_shrine.dmm"
/datum/map_template/ruin/lavaland/spookycrash
name = "Spooky Crash"
diff --git a/code/game/area/areas/ruins/lavaland.dm b/code/game/area/areas/ruins/lavaland.dm
index 5e8e706a319d..c4d3f75f8fb7 100644
--- a/code/game/area/areas/ruins/lavaland.dm
+++ b/code/game/area/areas/ruins/lavaland.dm
@@ -112,3 +112,8 @@
/area/ruin/unpowered/scorched_hut
name = "Scorched Hut"
icon_state = "red"
+
+/area/ruin/unpowered/buried_shrine
+ name = "Buried Shrine"
+ icon_state = "red"
+
diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index 2720443d2424..b0e030206a0f 100644
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -21,6 +21,7 @@
/obj/item/ammo_box/magazine/recharge,
/obj/item/modular_computer,
/obj/item/gun/ballistic/automatic/powered,
+ /obj/item/gun/ballistic/automatic/assault/e40,
))
/obj/machinery/recharger/RefreshParts()
diff --git a/code/game/objects/items/chrono_eraser.dm b/code/game/objects/items/chrono_eraser.dm
index f63a5e9dd45a..baa541662e20 100644
--- a/code/game/objects/items/chrono_eraser.dm
+++ b/code/game/objects/items/chrono_eraser.dm
@@ -51,7 +51,7 @@
item_flags = DROPDEL
ammo_type = list(/obj/item/ammo_casing/energy/chrono_beam)
can_charge = FALSE
- fire_delay = 50
+ fire_delay = 5 SECONDS
var/obj/item/chrono_eraser/TED = null
var/obj/structure/chrono_field/field = null
var/turf/startpos = null
diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index bf08b704beb0..61486cf07bf2 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -85,7 +85,7 @@
pai.master_dna = M.dna.unique_enzymes
to_chat(pai, "You have been bound to a new master.")
pai.laws.set_zeroth_law("Serve your master.")
- pai.emittersemicd = FALSE
+ pai.emittercurrent_cooldown = FALSE
if(href_list["wipe"])
var/confirm = input("Are you CERTAIN you wish to delete the current personality? This action cannot be undone.", "Personality Wipe") in list("Yes", "No")
if(confirm == "Yes")
diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm
index c8c9a0f96b96..e386420462d6 100644
--- a/code/game/objects/items/kitchen.dm
+++ b/code/game/objects/items/kitchen.dm
@@ -191,7 +191,7 @@
/obj/item/kitchen/knife/combat/Initialize()
. = ..()
- AddElement(/datum/element/world_icon, null, icon, 'icons/obj/kitchen.dmi')
+ AddElement(/datum/element/world_icon, null, icon, 'icons/obj/item/knife.dmi')
/obj/item/kitchen/knife/combat/survival
name = "survival knife"
diff --git a/code/game/turfs/closed/_closed.dm b/code/game/turfs/closed/_closed.dm
index bb5d6f7311c0..4866dbfb3f60 100644
--- a/code/game/turfs/closed/_closed.dm
+++ b/code/game/turfs/closed/_closed.dm
@@ -239,7 +239,7 @@
return TRUE
/turf/closed/indestructible/riveted/boss
- name = "necropolis wall"
+ name = "thick stone wall"
desc = "A thick, seemingly indestructible stone wall."
icon = 'icons/turf/walls/boss_wall.dmi'
icon_state = "boss_wall-0"
diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm
index 1245e2585462..5bce8014babe 100644
--- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm
+++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm
@@ -384,7 +384,7 @@
ammo_type = list(/obj/item/ammo_casing/energy/shrink)
item_state = "shrink_ray"
icon_state = "shrink_ray"
- fire_delay = 30
+ fire_delay = 3 SECONDS
selfcharge = 1//shot costs 200 energy, has a max capacity of 1000 for 5 shots. self charge returns 25 energy every couple ticks, so about 1 shot charged every 12~ seconds
trigger_guard = TRIGGER_GUARD_ALLOW_ALL// variable-size trigger, get it? (abductors need this to be set so the gun is usable for them)
diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm
index f32c0dcc215b..68e0d514ad3a 100644
--- a/code/modules/antagonists/changeling/powers/mutations.dm
+++ b/code/modules/antagonists/changeling/powers/mutations.dm
@@ -245,7 +245,7 @@
fire_sound = 'sound/effects/splat.ogg'
force = 0
max_charges = 1
- fire_delay = 1
+ fire_delay = 0.1 SECONDS
throwforce = 0 //Just to be on the safe side
throw_range = 0
throw_speed = 0
diff --git a/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm b/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm
index 8832729e58af..83740509f2d7 100644
--- a/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm
+++ b/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm
@@ -122,8 +122,8 @@
pair_item = /datum/blackmarket_item/weapon/e40_mag
price_min = 7000
- price_max = 13000
- stock = 1
+ price_max = 15000
+ stock_max = 2
availability_prob = 20
/datum/blackmarket_item/weapon/e40_mag
@@ -134,7 +134,7 @@
price_min = 750
price_max = 1250
stock_min = 2
- stock_max = 4
+ stock_max = 6
availability_prob = 0
/datum/blackmarket_item/weapon/e50
diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index 36d556bc5f42..88e1d066024f 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -957,6 +957,7 @@
return COMPONENT_NO_ATTACK_OBJ
//A version of the Cave Story refrence that a deranged scientist got their hands on. Better? Not really. Different? Definitely.
+//TODO: replace with a proper polar star and spur, not to mention a proper sprite
/obj/item/gun/energy/spur
name = "Slowpoke"
desc = "The work of a truly genius gunsmith, altered and \"improved\" by a truly deranged Nanotrasen scientist, using components from a kinetic accelerator and beam rifle. Draw, partner!"
@@ -965,11 +966,10 @@
righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi'
icon_state = "spur"
item_state = "spur"
- fire_delay = 0.5 //BRATATAT! This is a cowboy's six-shooter after all.
selfcharge = 1
charge_delay = 1
slot_flags = ITEM_SLOT_BELT
- fire_delay = 1
+ fire_delay = 0.1 SECONDS
recoil = 1
cell_type = /obj/item/stock_parts/cell/gun
ammo_type = list(/obj/item/ammo_casing/energy/spur)
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index 1f574f08a450..9f3b85fd4a92 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -74,7 +74,7 @@
var/emitterregen = 0.25
var/emittercd = 50
var/emitteroverloadcd = 100
- var/emittersemicd = FALSE
+ var/emittercurrent_cooldown = FALSE
var/overload_ventcrawl = 0
var/overload_bulletblock = 0 //Why is this a good idea?
@@ -125,7 +125,7 @@
. = ..()
- emittersemicd = TRUE
+ emittercurrent_cooldown = TRUE
addtimer(CALLBACK(src, PROC_REF(emittercool)), 600)
if(!holoform)
diff --git a/code/modules/mob/living/silicon/pai/pai_shell.dm b/code/modules/mob/living/silicon/pai/pai_shell.dm
index 31a807b319b2..8d50f4a389f4 100644
--- a/code/modules/mob/living/silicon/pai/pai_shell.dm
+++ b/code/modules/mob/living/silicon/pai/pai_shell.dm
@@ -12,11 +12,11 @@
. = fold_in(force)
return
- if(emittersemicd)
+ if(emittercurrent_cooldown)
to_chat(src, "Error: Holochassis emitters recycling. Please try again later.")
return FALSE
- emittersemicd = TRUE
+ emittercurrent_cooldown = TRUE
addtimer(CALLBACK(src, PROC_REF(emittercool)), emittercd)
REMOVE_TRAIT(src, TRAIT_IMMOBILIZED, PAI_FOLDED)
REMOVE_TRAIT(src, TRAIT_HANDS_BLOCKED, PAI_FOLDED)
@@ -42,10 +42,10 @@
holoform = TRUE
/mob/living/silicon/pai/proc/emittercool()
- emittersemicd = FALSE
+ emittercurrent_cooldown = FALSE
/mob/living/silicon/pai/proc/fold_in(force = FALSE)
- emittersemicd = TRUE
+ emittercurrent_cooldown = TRUE
if(!force)
addtimer(CALLBACK(src, PROC_REF(emittercool)), emittercd)
else
diff --git a/code/modules/mob/living/simple_animal/hostile/human/survivors.dm b/code/modules/mob/living/simple_animal/hostile/human/survivors.dm
index 3c4ba08ed16d..f7abea96b222 100644
--- a/code/modules/mob/living/simple_animal/hostile/human/survivors.dm
+++ b/code/modules/mob/living/simple_animal/hostile/human/survivors.dm
@@ -12,11 +12,11 @@
move_force = MOVE_FORCE_DEFAULT
move_resist = MOVE_RESIST_DEFAULT
pull_force = PULL_FORCE_DEFAULT
+ ..()
/*
if(prob(15))
new /obj/item/mob_trophy/shiny(loc)
visible_message("You notice a glimmering nugget of shiny metal.")
- ..()
*/
/mob/living/simple_animal/hostile/human/hermit/survivor
diff --git a/code/modules/projectiles/ammunition/_firing.dm b/code/modules/projectiles/ammunition/_firing.dm
index f96cea991f27..3f46281dbd50 100644
--- a/code/modules/projectiles/ammunition/_firing.dm
+++ b/code/modules/projectiles/ammunition/_firing.dm
@@ -16,12 +16,8 @@
AddComponent(/datum/component/pellet_cloud, projectile_type, pellets)
SEND_SIGNAL(src, COMSIG_PELLET_CLOUD_INIT, target, user, fired_from, randomspread, spread, zone_override, params, distro)
- if(user)
- if(click_cooldown_override)
- user.changeNext_move(click_cooldown_override)
- else
- user.changeNext_move(CLICK_CD_RANGE)
- user.newtonian_move(get_dir(target, user))
+ if(click_cooldown_override && user)
+ user.changeNext_move(click_cooldown_override)
update_appearance()
return TRUE
diff --git a/code/modules/projectiles/ammunition/ballistic/rifle.dm b/code/modules/projectiles/ammunition/ballistic/rifle.dm
index 57592185aff6..b3875292fba2 100644
--- a/code/modules/projectiles/ammunition/ballistic/rifle.dm
+++ b/code/modules/projectiles/ammunition/ballistic/rifle.dm
@@ -106,4 +106,4 @@
icon_state = "caseless"
caliber = ".299 caseless"
projectile_type = /obj/projectile/bullet/c299
- bullet_per_box = 80
+ bullet_per_box = 100
diff --git a/code/modules/projectiles/ammunition/caseless/_caseless.dm b/code/modules/projectiles/ammunition/caseless/_caseless.dm
index 0d364cc93f5a..9e9dafb8d806 100644
--- a/code/modules/projectiles/ammunition/caseless/_caseless.dm
+++ b/code/modules/projectiles/ammunition/caseless/_caseless.dm
@@ -3,8 +3,10 @@
firing_effect_type = null
heavy_metal = FALSE
-/obj/item/ammo_casing/caseless/on_eject(atom/shooter)
- qdel(src)
+/obj/item/ammo_casing/caseless/fire_casing(atom/target, mob/living/user, params, distro, quiet, zone_override, spread, atom/fired_from)
+ . = ..()
+ if(.)
+ qdel(src)
// Overridden; caseless ammo does not distinguish between "live" and "empty"/"spent" icon states (because it has no casing).
/obj/item/ammo_casing/caseless/update_icon_state()
diff --git a/code/modules/projectiles/ammunition/energy/laser.dm b/code/modules/projectiles/ammunition/energy/laser.dm
index 6320cb24b0c6..d0334e8d8acc 100644
--- a/code/modules/projectiles/ammunition/energy/laser.dm
+++ b/code/modules/projectiles/ammunition/energy/laser.dm
@@ -31,7 +31,7 @@
projectile_type = /obj/projectile/beam/laser/weak/negative_ap
e_cost = 799 //12 shots with a normal power cell, 25 with an upgraded
select_name = "kill"
- delay = 0.1 SECONDS
+ delay = 0.13 SECONDS
/obj/item/ammo_casing/energy/lasergun/old
projectile_type = /obj/projectile/beam/laser
diff --git a/code/modules/projectiles/ammunition/energy/stun.dm b/code/modules/projectiles/ammunition/energy/stun.dm
index 917e1c8c8189..1f74196eb83b 100644
--- a/code/modules/projectiles/ammunition/energy/stun.dm
+++ b/code/modules/projectiles/ammunition/energy/stun.dm
@@ -46,4 +46,4 @@
/obj/item/ammo_casing/energy/disabler/smg
projectile_type = /obj/projectile/beam/disabler/weak/negative_ap
e_cost = 330
- delay = 0.1 SECONDS
+ delay = 0.13 SECONDS
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 892a914b88c5..9948e8dbf329 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -1,4 +1,3 @@
-
#define DUALWIELD_PENALTY_EXTRA_MULTIPLIER 1.6
/obj/item/gun
@@ -27,25 +26,55 @@
var/vary_fire_sound = TRUE
var/fire_sound_volume = 50
var/dry_fire_sound = 'sound/weapons/gun/general/dry_fire.ogg'
- var/dry_fire_text = "click" //change this on non-gun things
- var/suppressed = null //whether or not a message is displayed when fired
+ ///Text showed when attempting to fire with no round or empty round.
+ var/dry_fire_text = "click"
+ ///whether or not a message is displayed when fired
+ var/suppressed = null
var/can_suppress = FALSE
var/suppressed_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg'
var/suppressed_volume = 60
var/can_unsuppress = TRUE
var/obj/item/ammo_casing/chambered = null
- trigger_guard = TRIGGER_GUARD_NORMAL //trigger guard on the weapon, hulks can't fire them with their big meaty fingers
- var/sawn_desc = null //description change if weapon is sawn-off
+ ///trigger guard on the weapon. Used for hulk mutations and ashies. I honestly dont know how usefult his is, id avoid touching it
+ trigger_guard = TRIGGER_GUARD_NORMAL
+ ///Set the description of the gun to this when sawed off
+ var/sawn_desc = null
+ ///This triggers some sprite behavior in shotguns and prevents further sawoff, note that can_be_sawn_off is on gun/ballistic and not here, wtf.
var/sawn_off = FALSE
- var/burst_size = 1 //how large a burst is
- var/fire_delay = 0 //rate of fire for burst firing and semi auto
- var/firing_burst = 0 //Prevent the weapon from firing again while already firing
- var/semicd = 0 //cooldown handler
+
+ /// how many shots per burst, Ex: most machine pistols, M90, some ARs are 3rnd burst, while others like the GAR and laser minigun are 2 round burst.
+ var/burst_size = 3
+ ///The rate of fire when firing in a burst. Not the delay between bursts
+ var/burst_delay = 0.15 SECONDS
+ ///The rate of fire when firing full auto and semi auto, and between bursts; for bursts its fire delay + burst_delay after every burst
+ var/fire_delay = 0.2 SECONDS
+
+ /// after initializing, we set the firemode to this
+ var/default_firemode = FIREMODE_SEMIAUTO
+ ///Firemode index, due to code shit this is the currently selected firemode
+ var/firemode_index
+ /// Our firemodes, subtract and add to this list as needed. NOTE that the autofire component is given on init when FIREMODE_FULLAUTO is here.
+ var/list/gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_BURST, FIREMODE_FULLAUTO, FIREMODE_OTHER, FIREMODE_OTHER_TWO)
+ /// A acoc list that determines the names of firemodes. Use if you wanna be weird and set the name of say, FIREMODE_OTHER to "Underbarrel grenade launcher" for example.
+ var/list/gun_firenames = list(FIREMODE_SEMIAUTO = "single", FIREMODE_BURST = "burst fire", FIREMODE_FULLAUTO = "full auto", FIREMODE_OTHER = "misc. fire", FIREMODE_OTHER_TWO = "very misc. fire")
+ ///BASICALLY: the little button you select firing modes from? this is jsut the prefix of the icon state of that. For example, if we set it as "laser", the fire select will use "laser_single" and so on.
+ var/fire_select_icon_state_prefix = ""
+ ///If true, we put "safety_" before fire_select_icon_state_prefix's prefix. ex. "safety_laser_single"
+ var/adjust_fire_select_icon_state_on_safety = FALSE
+
+ ///Are we firing a burst? If so, dont fire again until burst is done
+ var/currently_firing_burst = FALSE
+ ///This prevents gun from firing until the coodown is done, affected by lag
+ var/current_cooldown = 0
+ ///affects if you can fire it unwielded or even dual wield it. LIGHT means dual wield allowed, HEAVY and higher means you have to wield to fire
var/weapon_weight = WEAPON_LIGHT
- var/dual_wield_spread = 24 //additional spread when dual wielding
- var/randomspread = 1 //Set to 0 for shotguns. This is used for weapons that don't fire all their bullets at once.
+ ///If dual wielding, add this to the spread
+ var/dual_wield_spread = 24
+ /// ???, no clue what this is. Original desc: //Set to 0 for shotguns. This is used for weapons that don't fire all their bullets at once.
+ var/randomspread = 1
- var/projectile_damage_multiplier = 1 //Alters projectile damage multiplicatively based on this value. Use it for "better" or "worse" weapons that use the same ammo.
+ ///Alters projectile damage multiplicatively based on this value. Use it for "better" or "worse" weapons that use the same ammo.
+ var/projectile_damage_multiplier = 1
lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi'
@@ -127,6 +156,7 @@
alight = new(src)
muzzle_flash = new(src, muzzleflash_iconstate)
build_zooming()
+ build_firemodes()
/obj/item/gun/ComponentInitialize()
. = ..()
@@ -152,8 +182,10 @@
)
)
wielded_fully = TRUE
+ return TRUE
else
wielded_fully = TRUE
+ return TRUE
/obj/item/gun/proc/is_wielded()
return wielded
@@ -217,6 +249,51 @@
if(zoomed && user.get_active_held_item() != src)
zoom(user, user.dir, FALSE) //we can only stay zoomed in if it's in our hands //yeah and we only unzoom if we're actually zoomed using the gun!!
+/obj/item/gun/attack(mob/M as mob, mob/user)
+ if(user.a_intent == INTENT_HARM) //Flogging
+ if(bayonet)
+ M.attackby(bayonet, user)
+ return
+ else
+ return ..()
+ return
+
+/obj/item/gun/attack_obj(obj/O, mob/user)
+ if(user.a_intent == INTENT_HARM)
+ if(bayonet)
+ O.attackby(bayonet, user)
+ return
+ return ..()
+
+/obj/item/gun/attackby(obj/item/I, mob/user, params)
+ if(user.a_intent == INTENT_HARM)
+ return ..()
+ else if(istype(I, /obj/item/flashlight/seclite))
+ if(!can_flashlight)
+ return ..()
+ var/obj/item/flashlight/seclite/S = I
+ if(!gun_light)
+ if(!user.transferItemToLoc(I, src))
+ return
+ to_chat(user, "You click [S] into place on [src].")
+ set_gun_light(S)
+ update_gunlight()
+ alight = new(src)
+ if(loc == user)
+ alight.Grant(user)
+ else if(istype(I, /obj/item/kitchen/knife))
+ var/obj/item/kitchen/knife/K = I
+ if(!can_bayonet || !K.bayonet || bayonet) //ensure the gun has an attachment point available, and that the knife is compatible with it.
+ return ..()
+ if(!user.transferItemToLoc(I, src))
+ return
+ to_chat(user, "You attach [K] to [src]'s bayonet lug.")
+ bayonet = K
+ update_appearance()
+
+ else
+ return ..()
+
//called after the gun has successfully fired its chambered ammo.
/obj/item/gun/proc/process_chamber(atom/shooter)
SEND_SIGNAL(src, COMSIG_GUN_CHAMBER_PROCESSED)
@@ -229,252 +306,277 @@
return FALSE
return TRUE
-/obj/item/gun/proc/shoot_with_empty_chamber(mob/living/user as mob|obj)
- if(!safety)
- to_chat(user, "*[dry_fire_text]*")
- playsound(src, dry_fire_sound, 30, TRUE)
- return
- to_chat(user, "Safeties are active on the [src]! Turn them off to fire!")
-
-
-/obj/item/gun/proc/shoot_live_shot(mob/living/user, pointblank = 0, atom/pbtarget = null, message = 1)
- var/actual_angle = get_angle_with_scatter((user || get_turf(src)), pbtarget, rand(-recoil_deviation, recoil_deviation) + 180)
- var/muzzle_angle = Get_Angle(get_turf(src), pbtarget)
- if(muzzle_flash && !muzzle_flash.applied)
- handle_muzzle_flash(user, muzzle_angle)
-
- if(wielded_fully)
- simulate_recoil(user, recoil, actual_angle)
- else if(!wielded_fully)
- simulate_recoil(user, recoil_unwielded, actual_angle)
-
- if(suppressed)
- playsound(user, suppressed_sound, suppressed_volume, vary_fire_sound, ignore_walls = FALSE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_distance = 0)
- else
- playsound(user, fire_sound, fire_sound_volume, vary_fire_sound)
- if(message)
- if(pointblank)
- user.visible_message(
- span_danger("[user] fires [src] point blank at [pbtarget]!"),
- span_danger("You fire [src] point blank at [pbtarget]!"),
- span_hear("You hear a gunshot!"), COMBAT_MESSAGE_RANGE, pbtarget
- )
- to_chat(pbtarget, "[user] fires [src] point blank at you!")
- if(pb_knockback > 0 && ismob(pbtarget))
- var/mob/PBT = pbtarget
- var/atom/throw_target = get_edge_target_turf(PBT, user.dir)
- PBT.throw_at(throw_target, pb_knockback, 2)
- else
- user.visible_message(
- span_danger("[user] fires [src]!"),
- blind_message = span_hear("You hear a gunshot!"),
- vision_distance = COMBAT_MESSAGE_RANGE,
- ignored_mobs = user
- )
-
/obj/item/gun/emp_act(severity)
. = ..()
if(!(. & EMP_PROTECT_CONTENTS))
for(var/obj/O in contents)
O.emp_act(severity)
+
+/obj/item/gun/proc/recharge_newshot()
+ return
+
/obj/item/gun/afterattack(atom/target, mob/living/user, flag, params)
. = ..()
+ //No target? Why are we even firing anyways...
if(!target)
return
- if(firing_burst)
+ //If we are burst firing, don't fire, obviously
+ if(currently_firing_burst)
return
- if(flag) //It's adjacent, is the user, or is on the user's person
+ //This var happens when we are either clicking someone next to us or ourselves. Check if we don't want to fire...
+ if(flag)
if(target in user.contents) //can't shoot stuff inside us.
return
if(!ismob(target) || user.a_intent == INTENT_HARM) //melee attack
return
if(target == user && user.zone_selected != BODY_ZONE_PRECISE_MOUTH) //so we can't shoot ourselves (unless mouth selected)
return
+/* TODO: gunpointing is very broken, port the old skyrat gunpointing? its much better, usablity wise and rp wise?
if(ismob(target) && user.a_intent == INTENT_GRAB)
if(user.GetComponent(/datum/component/gunpoint))
to_chat(user, "You are already holding someone up!")
return
user.AddComponent(/datum/component/gunpoint, target, src)
return
+*/
+ // Good job, but we have exta checks to do...
+ return pre_fire(target, user, TRUE, flag, params, null)
+
+/obj/item/gun/proc/pre_fire(atom/target, mob/living/user, message = TRUE, flag, params = null, zone_override = "", bonus_spread = 0, dual_wielded_gun = FALSE)
+ add_fingerprint(user)
- if(istype(user))//Check if the user can use the gun, if the user isn't alive(turrets) assume it can.
- var/mob/living/L = user
- if(!can_trigger_gun(L))
+ // If we have a cooldown, don't do anything, obviously
+ if(current_cooldown)
+ return
+
+ //We check if the user can even use the gun, if not, we assume the user isn't alive(turrets) so we go ahead.
+ if(istype(user))
+ var/mob/living/living_user = user
+ if(!can_trigger_gun(living_user))
return
+ //If targetting the mouth, we do suicide instead.
if(flag)
if(user.zone_selected == BODY_ZONE_PRECISE_MOUTH)
handle_suicide(user, target, params)
return
- if(!can_shoot()) //Just because you can pull the trigger doesn't mean it can shoot.
+ //Just because we can pull the trigger doesn't mean it can fire. Mostly for safties.
+ if(!can_shoot())
shoot_with_empty_chamber(user)
return
+ //we then check our weapon weight vs if we are being wielded...
+ if(weapon_weight == WEAPON_VERY_HEAVY && (!wielded_fully))
+ to_chat(user, "You need a fully secure grip to fire [src]!")
+ return
+
if(weapon_weight == WEAPON_HEAVY && (!wielded))
to_chat(user, "You need a more secure grip to fire [src]!")
return
- //DUAL (or more!) WIELDING
- var/bonus_spread = 0
+ //If we have the pacifist trait and a chambered round, don't fire. Honestly, pacifism quirk is pretty stupid, and as such we check again in process_fire() anyways
+ if(chambered)
+ if(HAS_TRAIT(user, TRAIT_PACIFISM)) // If the user has the pacifist trait, then they won't be able to fire [src] if the round chambered inside of [src] is lethal.
+ if(chambered.harmful) // Is the bullet chambered harmful?
+ to_chat(user, "[src] is lethally chambered! You don't want to risk harming anyone...")
+ return
+
+ //Dual wielding handling. Not the biggest fan of this, but it's here. Dual berettas not included
var/loop_counter = 0
- if(ishuman(user) && user.a_intent == INTENT_HARM)
- var/mob/living/carbon/human/H = user
- for(var/obj/item/gun/G in H.held_items)
- if(G == src || G.weapon_weight >= WEAPON_MEDIUM)
+ if(ishuman(user) && user.a_intent == INTENT_HARM && !dual_wielded_gun)
+ var/mob/living/carbon/human/our_cowboy = user
+ for(var/obj/item/gun/found_gun in our_cowboy.held_items)
+ if(found_gun == src || found_gun.weapon_weight >= WEAPON_MEDIUM)
continue
- else if(G.can_trigger_gun(user))
+ else if(found_gun.can_trigger_gun(user))
bonus_spread += dual_wield_spread
loop_counter++
- addtimer(CALLBACK(G, TYPE_PROC_REF(/obj/item/gun, process_fire), target, user, TRUE, params, null, bonus_spread), loop_counter)
+ addtimer(CALLBACK(found_gun, TYPE_PROC_REF(/obj/item/gun, pre_fire), target, user, TRUE, params, null, bonus_spread), loop_counter)
+ //get current firemode
+ var/current_firemode = gun_firemodes[firemode_index]
+ //FIREMODE_OTHER and its sister directs you to another proc for special handling
+ if(current_firemode == FIREMODE_OTHER)
+ return process_other(target, user, message, flag, params, zone_override, bonus_spread)
+ if(current_firemode == FIREMODE_OTHER_TWO)
+ return process_other_two(target, user, message, flag, params, zone_override, bonus_spread)
+
+ //if all of that succeded, we finally get to process firing
return process_fire(target, user, TRUE, params, null, bonus_spread)
-/obj/item/gun/proc/recharge_newshot()
- return
+/obj/item/gun/proc/process_other(atom/target, mob/living/user, message = TRUE, flag, params = null, zone_override = "", bonus_spread = 0)
+ return //use this for 'underbarrels!!
+
+/obj/item/gun/proc/process_other_two(atom/target, mob/living/user, message = TRUE, flag, params = null, zone_override = "", bonus_spread = 0)
+ return //reserved in case another fire mode is needed, if you need special behavior, put it here then call process_fire, or call process_fire and have the special behavior there
+
+/**
+ * Handles everything involving firing.
+ * * gun.dm is still a fucking mess, and I will document everything next time i get to it... for now this will suffice.
+ *
+ * Returns TRUE or FALSE depending on if it actually fired a shot.
+ * Arguments:
+ * * target - The atom we are trying to hit.
+ * * user - The living mob firing the gun, if any.
+ * * message - Do we show the usual messages? eg. "x fires the y!"
+ * * params - Is the params string from byond [/atom/proc/Click] code, see that documentation.
+ * * zone_override - The bodypart we attempt to hit, sometimes hits another.
+ * * bonus_spread - Adds this value to spread, in this case used by dual wielding.
+ * * burst_firing - Not to be confused with currently_firing_burst. This var is TRUE when we are doing a burst except for the first shot in a burst, as to override the spam burst checks.
+ * * spread_override - Bullet spread is forcibly set to this. This is usually because of bursts attempting to share the same burst trajectory.
+ * * iteration - Which shot in a burst are we in.
+ */
+/obj/item/gun/proc/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0, burst_firing = FALSE, spread_override = 0, iteration = 0)
+ //OKAY, this prevents us from firing until our cooldown is done
+ if(!burst_firing) //if we're firing a burst, dont interfere to avoid issues
+ if(current_cooldown)
+ return FALSE
-/obj/item/gun/proc/process_burst(mob/living/user, atom/target, message = TRUE, params=null, zone_override = "", sprd = 0, randomized_gun_spread = 0, randomized_bonus_spread = 0, rand_spr = 0, iteration = 0)
- if(!user || !firing_burst)
- firing_burst = FALSE
+ //Check one last time for safeties...
+ if(!can_shoot())
+ shoot_with_empty_chamber(user)
+ currently_firing_burst = FALSE
return FALSE
- if(!issilicon(user))
- if(iteration > 1 && !(user.is_holding(src))) //for burst firing
- firing_burst = FALSE
+
+ //special hahnding for burst firing
+ if(burst_firing)
+ if(!user || !currently_firing_burst)
+ currently_firing_burst = FALSE
return FALSE
- if(chambered && chambered.BB)
+ if(!issilicon(user))
+ //If we aren't holding the gun, what are we doing, stop firing!
+ if(iteration > 1 && !(user.is_holding(src)))
+ currently_firing_burst = FALSE
+ return FALSE
+
+ //Do we have a round? If not, stop the whole chain, and if we do, check if the gun is chambered. Pacisim is pretty lame anyways.
+ if(chambered)
if(HAS_TRAIT(user, TRAIT_PACIFISM)) // If the user has the pacifist trait, then they won't be able to fire [src] if the round chambered inside of [src] is lethal.
if(chambered.harmful) // Is the bullet chambered harmful?
to_chat(user, "[src] is lethally chambered! You don't want to risk harming anyone...")
- return
- if(randomspread)
- sprd = round((rand() - 0.5) * DUALWIELD_PENALTY_EXTRA_MULTIPLIER * (randomized_gun_spread + randomized_bonus_spread))
- else //Smart spread
- sprd = round((((rand_spr/burst_size) * iteration) - (0.5 + (rand_spr * 0.25))) * (randomized_gun_spread + randomized_bonus_spread))
- before_firing(target,user)
- if(!chambered.fire_casing(target, user, params, ,suppressed, zone_override, sprd, src))
- shoot_with_empty_chamber(user)
- firing_burst = FALSE
- return FALSE
- else
- if(get_dist(user, target) <= 1) //Making sure whether the target is in vicinity for the pointblank shot
- shoot_live_shot(user, 1, target, message)
- else
- shoot_live_shot(user, 0, target, message)
- if (iteration >= burst_size)
- firing_burst = FALSE
+ currently_firing_burst = FALSE //no burst 4 u
+ return FALSE
+ else
+ shoot_with_empty_chamber(user)
+ currently_firing_burst = FALSE
+ return FALSE
+
+ // we hold the total spread in this var
+ var/sprd
+ // if we ARE burst firing and don't have "randomspread", we add the burst's penalty on top of it.
+ if(burst_firing && !randomspread)
+ bonus_spread += burst_size * iteration
+
+ //override spread? usually happens only in bursts
+ if(spread_override && !randomspread)
+ sprd = spread_override
else
+ //Calculate spread
+ sprd = calculate_spread(user, bonus_spread)
+
+ before_firing(target,user)
+ //If we cant fire the round, just end the proc here. Otherwise, continue
+ if(!chambered.fire_casing(target, user, params, , suppressed, zone_override, sprd, src))
shoot_with_empty_chamber(user)
- firing_burst = FALSE
+ currently_firing_burst = FALSE
return FALSE
+ //Are we PBing someone? If so, set pointblank to TRUE
+ shoot_live_shot(user, (get_dist(user, target) <= 1), target, message) //Making sure whether the target is in vicinity for the pointblank shot
+
+ //process the chamber...
process_chamber(shooter = user)
update_appearance()
- return TRUE
-
-/obj/item/gun/proc/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
+ //get our current firemode...
+ var/current_firemode = gun_firemodes[firemode_index]
+
+ //If we are set to burst fire, then we burst fire!
+ if(burst_size > 1 && (current_firemode == FIREMODE_BURST) && !burst_firing)
+ currently_firing_burst = TRUE
+ for(var/i = 2 to burst_size) //we fire the first burst normally, hence why its 2
+ addtimer(CALLBACK(src, PROC_REF(process_fire), target, user, message, params, zone_override, 0, TRUE, sprd, i), burst_delay * (i - 1))
+
+ //if we have a fire delay, set up a cooldown
+ if(fire_delay && (!burst_firing && !currently_firing_burst))
+ current_cooldown = TRUE
+ addtimer(CALLBACK(src, PROC_REF(reset_current_cooldown)), fire_delay)
+ if(burst_firing && iteration >= burst_size)
+ current_cooldown = TRUE
+ addtimer(CALLBACK(src, PROC_REF(reset_current_cooldown)), fire_delay+burst_delay)
+ currently_firing_burst = FALSE
+
+ // update our inhands...
if(user)
- SEND_SIGNAL(user, COMSIG_MOB_FIRED_GUN, user, target, params, zone_override)
+ user.update_inv_hands()
- add_fingerprint(user)
+ SSblackbox.record_feedback("tally", "gun_fired", 1, type)
+ return TRUE
- if(semicd)
+/obj/item/gun/proc/reset_current_cooldown()
+ current_cooldown = FALSE
+/obj/item/gun/proc/shoot_with_empty_chamber(mob/living/user as mob|obj)
+ if(!safety)
+ to_chat(user, "*[dry_fire_text]*")
+ playsound(src, dry_fire_sound, 30, TRUE)
return
+ to_chat(user, "Safeties are active on the [src]! Turn them off to fire!")
- var/sprd = 0
- var/randomized_gun_spread = 0
- var/rand_spr = rand()
- if(wielded_fully && spread)
- randomized_gun_spread = rand(0,spread)
- else if(!wielded_fully && spread_unwielded)
- randomized_gun_spread = rand(0,spread_unwielded)
+/obj/item/gun/proc/shoot_live_shot(mob/living/user, pointblank = FALSE, atom/pbtarget = null, message = TRUE)
+ var/actual_angle = get_angle_with_scatter((user || get_turf(src)), pbtarget, rand(-recoil_deviation, recoil_deviation) + 180)
+ var/muzzle_angle = Get_Angle(get_turf(src), pbtarget)
- if(HAS_TRAIT(user, TRAIT_POOR_AIM)) //nice shootin' tex
- bonus_spread += 25
- var/randomized_bonus_spread = rand(0, bonus_spread)
+ user.changeNext_move(clamp(fire_delay, 0, CLICK_CD_RANGE))
- if(burst_size > 1)
- firing_burst = TRUE
- for(var/i = 1 to burst_size)
- addtimer(CALLBACK(src, PROC_REF(process_burst), user, target, message, params, zone_override, sprd, randomized_gun_spread, randomized_bonus_spread, rand_spr, i), fire_delay * (i - 1))
+ if(muzzle_flash && !muzzle_flash.applied)
+ handle_muzzle_flash(user, muzzle_angle)
+
+ if(wielded_fully)
+ simulate_recoil(user, recoil, actual_angle)
+ else if(!wielded_fully)
+ simulate_recoil(user, recoil_unwielded, actual_angle)
+
+ if(suppressed)
+ playsound(user, suppressed_sound, suppressed_volume, vary_fire_sound, ignore_walls = FALSE, extrarange = SILENCED_SOUND_EXTRARANGE, falloff_distance = 0)
else
- if(chambered)
- if(HAS_TRAIT(user, TRAIT_PACIFISM)) // If the user has the pacifist trait, then they won't be able to fire [src] if the round chambered inside of [src] is lethal.
- if(chambered.harmful) // Is the bullet chambered harmful?
- to_chat(user, "[src] is lethally chambered! You don't want to risk harming anyone...")
- return
- sprd = round((rand() - 0.5) * DUALWIELD_PENALTY_EXTRA_MULTIPLIER * (randomized_gun_spread + randomized_bonus_spread))
- sprd = calculate_spread(user, sprd)
-
- before_firing(target,user)
- if(!chambered.fire_casing(target, user, params, , suppressed, zone_override, sprd, src))
- shoot_with_empty_chamber(user)
- return
+ playsound(user, fire_sound, fire_sound_volume, vary_fire_sound)
+ if(message)
+ if(pointblank)
+ user.visible_message(
+ span_danger("[user] fires [src] point blank at [pbtarget]!"),
+ span_danger("You fire [src] point blank at [pbtarget]!"),
+ span_hear("You hear a gunshot!"), COMBAT_MESSAGE_RANGE, pbtarget
+ )
+ to_chat(pbtarget, "[user] fires [src] point blank at you!")
+ if(pb_knockback > 0 && ismob(pbtarget))
+ var/mob/PBT = pbtarget
+ var/atom/throw_target = get_edge_target_turf(PBT, user.dir)
+ PBT.throw_at(throw_target, pb_knockback, 2)
else
- if(get_dist(user, target) <= 1) //Making sure whether the target is in vicinity for the pointblank shot
- shoot_live_shot(user, TRUE, target, message)
- else
- shoot_live_shot(user, FALSE, target, message)
- else
- shoot_with_empty_chamber(user)
- return
- process_chamber(shooter = user)
- update_appearance()
- if(fire_delay)
- semicd = TRUE
- addtimer(CALLBACK(src, PROC_REF(reset_semicd)), fire_delay)
+ user.visible_message(
+ span_danger("[user] fires [src]!"),
+ blind_message = span_hear("You hear a gunshot!"),
+ vision_distance = COMBAT_MESSAGE_RANGE,
+ ignored_mobs = user
+ )
- if(user)
- user.update_inv_hands()
- SSblackbox.record_feedback("tally", "gun_fired", 1, type)
- return TRUE
+ //cloudy sent a meme in the discord. i dont know if its true, but i made this piece of code in honor of it
+ var/mob/living/carbon/human/living_human = user
+ if(istype(living_human))
+ if(!living_human.wear_neck)
+ return //if nothing on the neck, don't do anything
+ var/current_month = text2num(time2text(world.timeofday, "MM"))
+ var/static/regex/bian = regex("(?:^\\W*lesbian)", "i")
-/obj/item/gun/proc/reset_semicd()
- semicd = FALSE
+ if(current_month == JUNE)
+ return //if it isn't june, don't do this easter egg
-/obj/item/gun/attack(mob/M as mob, mob/user)
- if(user.a_intent == INTENT_HARM) //Flogging
- if(bayonet)
- M.attackby(bayonet, user)
- return
- else
- return ..()
- return
+ if(!findtext(bian, living_human.generic_adjective))
+ return //dont bother if we already are affected by it
-/obj/item/gun/attack_obj(obj/O, mob/user)
- if(user.a_intent == INTENT_HARM)
- if(bayonet)
- O.attackby(bayonet, user)
- return
- return ..()
-
-/obj/item/gun/attackby(obj/item/I, mob/user, params)
- if(user.a_intent == INTENT_HARM)
- return ..()
- else if(istype(I, /obj/item/flashlight/seclite))
- if(!can_flashlight)
- return ..()
- var/obj/item/flashlight/seclite/S = I
- if(!gun_light)
- if(!user.transferItemToLoc(I, src))
- return
- to_chat(user, "You click [S] into place on [src].")
- set_gun_light(S)
- update_gunlight()
- alight = new(src)
- if(loc == user)
- alight.Grant(user)
- else if(istype(I, /obj/item/kitchen/knife))
- var/obj/item/kitchen/knife/K = I
- if(!can_bayonet || !K.bayonet || bayonet) //ensure the gun has an attachment point available, and that the knife is compatible with it.
- return ..()
- if(!user.transferItemToLoc(I, src))
- return
- to_chat(user, "You attach [K] to [src]'s bayonet lug.")
- bayonet = K
- update_appearance()
-
- else
- return ..()
+ if(istype(living_human.wear_neck, /obj/item/clothing/neck/tie/lesbian) || living_human.wear_neck.icon_state == "lesbian")
+ var/use_space = "[living_human.generic_adjective ? " " : ""]"
+ living_human.generic_adjective = "lesbian[use_space][living_human.generic_adjective]" //i actually don't remember the meme. it was something like lesbians will stop working if they see another with a gun. or something.
/obj/item/gun/CtrlClick(mob/user)
. = ..()
@@ -666,7 +768,7 @@
if(!ishuman(user) || !ishuman(target))
return
- if(semicd)
+ if(current_cooldown)
return
if(!can_shoot()) //Just because you can pull the trigger doesn't mean it can shoot.
@@ -680,7 +782,7 @@
target.visible_message(span_warning("[user] points [src] at [target]'s head, ready to pull the trigger..."), \
span_userdanger("[user] points [src] at your head, ready to pull the trigger..."))
- semicd = TRUE
+ current_cooldown = TRUE
if(!bypass_timer && (!do_after(user, 100, target) || user.zone_selected != BODY_ZONE_PRECISE_MOUTH))
if(user)
@@ -688,17 +790,18 @@
user.visible_message(span_notice("[user] decided not to shoot."))
else if(target && target.Adjacent(user))
target.visible_message(span_notice("[user] has decided to spare [target]."), span_notice("[user] has decided to spare your life!"))
- semicd = FALSE
+ current_cooldown = FALSE
return
- semicd = FALSE
+ current_cooldown = FALSE
target.visible_message(span_warning("[user] pulls the trigger!"), span_userdanger("[(user == target) ? "You pull" : "[user] pulls"] the trigger!"))
if(chambered && chambered.BB && can_trigger_gun(user))
chambered.BB.damage *= 3
//Check is here for safeties and such, brain will be removed after
- process_fire(target, user, TRUE, params, BODY_ZONE_HEAD)
+ if(!pre_fire(target, user, TRUE, params, BODY_ZONE_HEAD))
+ return
var/obj/item/organ/brain/brain_to_blast = target.getorganslot(ORGAN_SLOT_BRAIN)
if(brain_to_blast)
@@ -732,10 +835,55 @@
// We do it like this in case theres some specific gun behavior for adjusting spread, like bipods or folded stocks
/obj/item/gun/proc/calculate_spread(mob/user, bonus_spread)
- return bonus_spread
+ ///our final spread value
+ var/sprd = 0
+ ///our randomized value after checking if we are wielded or not
+ var/randomized_gun_spread = 0
+ ///bonus
+ var/randomized_bonus_spread
+ // do we have poor aim
+ var/poor_aim = FALSE
+
+ //do we have bonus_spread ? If so, set sprd to it because it means a subtype's proc messed with it
+ sprd += bonus_spread
+
+ //reset bonus_spread for poor aim...
+ bonus_spread = 0
+
+ // if we have poor aim, we fuck the shooter over
+ if(HAS_TRAIT(user, TRAIT_POOR_AIM))
+ bonus_spread += 25
+ poor_aim = TRUE
+ // then we randomize the bonus spread
+ randomized_bonus_spread = rand(poor_aim ? 10 : 0, bonus_spread) //poor aim is no longer just a nusiance
+
+ //then, we mutiply previous bonus spread as it means dual wielding usually, it also means poor aim is also even more severe
+ randomized_bonus_spread *= DUALWIELD_PENALTY_EXTRA_MULTIPLIER
+
+ // we will then calculate gun spread depending on if we are fully wielding (after do_after) the gun or not
+ randomized_gun_spread = rand(0, wielded_fully ? spread : spread_unwielded)
+
+ //finally, we put it all together including if sprd has a value
+ sprd += randomized_gun_spread + randomized_bonus_spread
+
+ //clamp it down to avoid guns with negative spread to have worse recoil...
+ sprd = clamp(sprd, 0, INFINITY)
+
+ // im not sure what this does, i beleive its meant to make it so bullet spread goes in the opposite direction? get back to me on this - update,i have commented it out, however it appears be dapening spread. weird.
+ //sprd *= (rand() - 0.5)
+
+ //coin flip if we mutiply output by -1 so spread isn't JUST to the right
+ if(prob(50))
+ sprd *= -1
+
+ // then we round it up and send it!
+ sprd = round(sprd)
+
+ return sprd
/obj/item/gun/proc/simulate_recoil(mob/living/user, recoil_bonus = 0, firing_angle)
var/total_recoil = calculate_recoil(user, recoil_bonus)
+ total_recoil = clamp(total_recoil, 0 , INFINITY)
var/actual_angle = firing_angle + rand(-recoil_deviation, recoil_deviation) + 180
if(actual_angle > 360)
@@ -747,6 +895,7 @@
/obj/item/gun/proc/handle_muzzle_flash(mob/living/user, firing_angle)
var/atom/movable/flash_loc = user
var/prev_light = light_range
+
if(!light_on && (light_range <= muzzle_flash_lum))
set_light_range(muzzle_flash_lum)
set_light_color(muzzle_flash_color)
@@ -895,4 +1044,60 @@
azoom = new()
azoom.gun = src
+/obj/item/gun/proc/build_firemodes()
+ if(FIREMODE_FULLAUTO in gun_firemodes)
+ AddComponent(/datum/component/automatic_fire, fire_delay)
+ SEND_SIGNAL(src, COMSIG_GUN_DISABLE_AUTOFIRE)
+ var/datum/action/item_action/our_action
+
+ if(gun_firemodes.len > 1)
+ our_action = new /datum/action/item_action/toggle_firemode(src)
+
+ for(var/i=1, i <= gun_firemodes.len+1, i++)
+ if(default_firemode == gun_firemodes[i])
+ firemode_index = i
+ if(gun_firemodes[i] == FIREMODE_FULLAUTO)
+ SEND_SIGNAL(src, COMSIG_GUN_ENABLE_AUTOFIRE)
+ if(our_action)
+ our_action.UpdateButtonIcon()
+ return
+
+ firemode_index = 1
+ CRASH("default_firemode isn't in the gun_firemodes list of [src.type]!! Defaulting to 1!!")
+
+/obj/item/gun/ui_action_click(mob/user, actiontype)
+ if(istype(actiontype, /datum/action/item_action/toggle_firemode))
+ fire_select(user)
+ else
+ ..()
+
+/obj/item/gun/proc/fire_select(mob/living/carbon/human/user)
+
+ //gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_BURST, FIREMODE_FULLAUTO, FIREMODE_OTHER)
+
+ firemode_index++
+ if(firemode_index > gun_firemodes.len)
+ firemode_index = 1 //reset to the first index if it's over the limit. Byond arrays start at 1 instead of 0, hence why its set to 1.
+
+ var/current_firemode = gun_firemodes[firemode_index]
+ if(current_firemode == FIREMODE_FULLAUTO)
+ SEND_SIGNAL(src, COMSIG_GUN_ENABLE_AUTOFIRE)
+ else
+ SEND_SIGNAL(src, COMSIG_GUN_DISABLE_AUTOFIRE)
+//wawa
+ to_chat(user, "Switched to [gun_firenames[current_firemode]].")
+ playsound(user, 'sound/weapons/gun/general/selector.ogg', 100, TRUE)
+ update_appearance()
+ for(var/datum/action/current_action as anything in actions)
+ current_action.UpdateButtonIcon()
+
+/datum/action/item_action/toggle_firemode/UpdateButtonIcon(status_only = FALSE, force = FALSE)
+ var/obj/item/gun/our_gun = target
+
+ var/current_firemode = our_gun.gun_firemodes[our_gun.firemode_index]
+ //tldr; if we have adjust_fire_select_icon_state_on_safety as true, we append "safety_" to the prefix, otherwise nothing.
+ var/safety_prefix = "[our_gun.adjust_fire_select_icon_state_on_safety ? "[our_gun.safety ? "safety_" : ""]" : ""]"
+ button_icon_state = "[safety_prefix][our_gun.fire_select_icon_state_prefix][current_firemode]"
+ return ..()
+
#undef DUALWIELD_PENALTY_EXTRA_MULTIPLIER
diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm
index 37b8ceea801c..e5345c0eab45 100644
--- a/code/modules/projectiles/guns/ballistic.dm
+++ b/code/modules/projectiles/guns/ballistic.dm
@@ -58,9 +58,9 @@
///Compatible magazines with the gun
var/mag_type = /obj/item/ammo_box/magazine/m10mm //Removes the need for max_ammo and caliber info
///Whether the sprite has a visible magazine or not
- var/mag_display = FALSE
+ var/show_magazine_on_sprite = FALSE
///Whether the sprite has a visible ammo display or not
- var/mag_display_ammo = FALSE
+ var/show_magazine_on_sprite_ammo = FALSE
///Whether the sprite has a visible indicator for being empty or not.
var/empty_indicator = FALSE
///Whether the gun alarms when empty or not.
@@ -68,7 +68,7 @@
///Do we eject the magazine upon runing out of ammo?
var/empty_autoeject = FALSE
///Whether the gun supports multiple special mag types
- var/special_mags = FALSE
+ var/unique_mag_sprites_for_variants = FALSE
///The bolt type of the gun, affects quite a bit of functionality, see combat.dm defines for bolt types: BOLT_TYPE_STANDARD; BOLT_TYPE_LOCKING; BOLT_TYPE_OPEN; BOLT_TYPE_NO_BOLT
var/bolt_type = BOLT_TYPE_STANDARD
///Used for locking bolt and open bolt guns. Set a bit differently for the two but prevents firing when true for both.
@@ -126,7 +126,7 @@
if (suppressed)
. += "[icon_state]_suppressor"
if (magazine)
- if (special_mags)
+ if (unique_mag_sprites_for_variants)
. += "[icon_state]_mag_[magazine.base_icon_state]"
if (!magazine.ammo_count())
. += "[icon_state]_mag_empty"
@@ -191,6 +191,7 @@
else
playsound(src, rack_sound, rack_sound_volume, rack_sound_vary)
update_appearance()
+ SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD)
///Drops the bolt from a locked position
/obj/item/gun/ballistic/proc/drop_bolt(mob/user = null)
@@ -217,6 +218,7 @@
if (bolt_type == BOLT_TYPE_OPEN && !bolt_locked)
chamber_round(TRUE)
update_appearance()
+ SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD)
return TRUE
else
to_chat(user, "You cannot seem to get \the [src] out of your hands!")
@@ -237,6 +239,7 @@
if (display_message)
to_chat(user, "You pull the [magazine_wording] out of \the [src].")
update_appearance()
+ SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD)
if (tac_load)
if(do_after(user, tactical_reload_delay, TRUE, src))
if (insert_magazine(user, tac_load, FALSE))
@@ -249,6 +252,7 @@
if(user)
user.put_in_hands(old_mag)
update_appearance()
+ SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD)
/obj/item/gun/ballistic/can_shoot()
if(safety)
@@ -303,11 +307,6 @@
return
return FALSE
-/obj/item/gun/ballistic/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
- if (sawn_off)
- bonus_spread += SAWN_OFF_ACC_PENALTY
- . = ..()
-
///Installs a new suppressor, assumes that the suppressor is already in the contents of src
/obj/item/gun/ballistic/proc/install_suppressor(obj/item/suppressor/S)
suppressed = S
@@ -351,8 +350,11 @@
bolt_locked = TRUE
update_appearance()
-/obj/item/gun/ballistic/afterattack()
+/obj/item/gun/ballistic/pre_fire(atom/target, mob/living/user, message = TRUE, flag, params = null, zone_override = "", bonus_spread = 0, dual_wielded_gun = FALSE)
prefire_empty_checks()
+ return ..()
+
+/obj/item/gun/ballistic/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0, burst_firing = FALSE, spread_override = 0, iteration = 0)
. = ..() //The gun actually firing
postfire_empty_checks(.)
diff --git a/code/modules/projectiles/guns/ballistic/assault.dm b/code/modules/projectiles/guns/ballistic/assault.dm
index d0b69480a106..9d97dc627bd4 100644
--- a/code/modules/projectiles/guns/ballistic/assault.dm
+++ b/code/modules/projectiles/guns/ballistic/assault.dm
@@ -1,10 +1,10 @@
/obj/item/gun/ballistic/automatic/assault
- burst_size = 1
- actions_types = list()
- wield_delay = 0.7 SECONDS
+ gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_FULLAUTO)
+ default_firemode = FIREMODE_SEMIAUTO
+ wield_delay = 0.8 SECONDS
wield_slowdown = 0.6
- fire_delay = 1
+ fire_delay = 0.2 SECONDS
load_sound = 'sound/weapons/gun/rifle/ar_reload.ogg'
load_empty_sound = 'sound/weapons/gun/rifle/ar_reload.ogg'
@@ -17,18 +17,20 @@
/obj/item/gun/ballistic/automatic/assault/calculate_recoil(mob/user, recoil_bonus = 0)
var/gunslinger_bonus = 2
var/total_recoil = recoil_bonus
+
if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger penalty
total_recoil += gunslinger_bonus
- total_recoil = clamp(total_recoil,0,INFINITY)
- return total_recoil
+
+ return ..(user, total_recoil)
/obj/item/gun/ballistic/automatic/assault/calculate_spread(mob/user, bonus_spread)
- var/gunslinger_bonus = 8
+ var/gunslinger_bonus = 16
var/total_spread = bonus_spread
+
if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger penalty
total_spread += gunslinger_bonus
- total_spread = clamp(total_spread,0,INFINITY)
- return total_spread
+
+ return ..(user, total_spread)
/obj/item/gun/ballistic/automatic/assault/skm
name = "\improper SKM-24"
@@ -44,8 +46,8 @@
icon_state = "skm"
item_state = "skm"
- mag_display = TRUE
- special_mags = TRUE
+ show_magazine_on_sprite = TRUE
+ unique_mag_sprites_for_variants = TRUE
weapon_weight = WEAPON_MEDIUM
w_class = WEIGHT_CLASS_BULKY
slot_flags = ITEM_SLOT_BACK
@@ -55,9 +57,7 @@
spread = 1
wield_delay = 0.7 SECONDS
-/obj/item/gun/ballistic/automatic/assault/skm/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/automatic_fire, 0.2 SECONDS)
+ fire_delay = 0.2 SECONDS
/obj/item/gun/ballistic/automatic/assault/skm/pirate
name = "\improper Chopper"
@@ -82,22 +82,21 @@
fire_sound = 'sound/weapons/gun/rifle/m16.ogg'
icon_state = "p16"
item_state = "p16"
- mag_display = TRUE
+ show_magazine_on_sprite = TRUE
w_class = WEIGHT_CLASS_BULKY
slot_flags = ITEM_SLOT_BACK
mag_type = /obj/item/ammo_box/magazine/p16
spread = 2
wield_delay = 0.5 SECONDS
+
+ fire_delay = 0.18 SECONDS
+
rack_sound = 'sound/weapons/gun/rifle/m16_cocked.ogg'
load_sound = 'sound/weapons/gun/rifle/m16_reload.ogg'
load_empty_sound = 'sound/weapons/gun/rifle/m16_reload.ogg'
eject_sound = 'sound/weapons/gun/rifle/m16_unload.ogg'
eject_empty_sound = 'sound/weapons/gun/rifle/m16_unload.ogg'
-/obj/item/gun/ballistic/automatic/assault/p16/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/automatic_fire, 0.2 SECONDS)
-
/obj/item/gun/ballistic/automatic/assault/p16/minutemen
name = "\improper CM-16"
desc = "The standard-issue rifle of CLIP and an extensively modified reproduction of the P-16. Chambered in 5.56mm."
@@ -106,72 +105,56 @@
/obj/item/gun/ballistic/automatic/assault/swiss_cheese
name = "\improper Swiss Cheese"
- desc = "An ancient longarm famous for its boxy, modular design. The DMA on this unit is, sadly, broken. Uses 5.56mm ammunition for Matter mode."
+ desc = "An ancient longarm famous for its boxy, modular design. Mass produced by the Terran Confederation in ages past, these often mutiple century old designs have survied due to their sheer ruggedness. The DMA on this unit is sadly broken, but these rifles are known for their excellent burst fire. Uses 5.56mm ammunition for Matter mode."
icon = 'icons/obj/guns/48x32guns.dmi'
fire_sound = 'sound/weapons/gun/rifle/swiss.ogg'
icon_state = "swiss"
item_state = "swiss"
- mag_display = TRUE
+ show_magazine_on_sprite = TRUE
empty_indicator = TRUE
burst_size = 3
- fire_delay = 1.5
+ burst_delay = 0.08 SECONDS
+ fire_delay = 0.25 SECONDS
spread = 8
weapon_weight = WEAPON_MEDIUM
+ gun_firenames = list(FIREMODE_SEMIAUTO = "matter semi-auto", FIREMODE_BURST = "matter burst fire", FIREMODE_FULLAUTO = "matter full auto", FIREMODE_OTHER = "hybrid")
+ gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_BURST, FIREMODE_FULLAUTO, FIREMODE_OTHER)
+
+ fire_select_icon_state_prefix = "swisschesse_"
+
w_class = WEIGHT_CLASS_BULKY
slot_flags = ITEM_SLOT_BACK
mag_type = /obj/item/ammo_box/magazine/swiss
- actions_types = list(/datum/action/item_action/toggle_firemode)
manufacturer = MANUFACTURER_SOLARARMORIES
spread = 8
spread_unwielded = 15
-/obj/item/gun/ballistic/automatic/assault/swiss_cheese/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/automatic_fire, 0.65 SECONDS)
-
-/obj/item/gun/ballistic/automatic/assault/swiss_cheese/afterattack(atom/target, mob/living/user, flag, params)
- if(select == 2)
- to_chat(user, "You hear a strange sound from the DMA unit. It doesn't appear to be operational.")
- return
- else
- return ..()
-
-/obj/item/gun/ballistic/automatic/assault/swiss_cheese/burst_select()
- var/mob/living/carbon/human/user = usr
- switch(select)
- if(1)
- select = 2
- to_chat(user, "You switch to Hybrid.")
- if(2)
- select = 1
- burst_size = initial(burst_size)
- fire_delay = initial(fire_delay)
- to_chat(user, "You switch to [burst_size]-rnd Matter.")
-
- playsound(user, 'sound/weapons/gun/general/selector.ogg', 100, TRUE)
- update_appearance()
- for(var/datum/action/action as anything in actions)
- action.UpdateButtonIcon()
-
-#define E40_BALLISTIC_MODE 1
-#define E40_LASER_MODE 2
+/obj/item/gun/ballistic/automatic/assault/swiss_cheese/process_other(atom/target, mob/living/user, message = TRUE, flag, params = null, zone_override = "", bonus_spread = 0)
+ to_chat(user, "You hear a strange sound from the DMA unit. It doesn't appear to be operational.")
/obj/item/gun/ballistic/automatic/assault/e40
name = "\improper E-40 Hybrid Rifle"
- desc = "A Hybrid Assault Rifle, best known for being having a dual ballistic and laser system. Chambered in .229 Eoehoma caseless, and uses energy for lasers."
+ desc = "A Hybrid Assault Rifle, best known for being having a dual ballistic/laser system along with an advanced ammo counter. Once an icon for bounty hunters, age has broken most down, so these end up in collector's hands or as shoddy Frontiersmen laser SMG conversions when in their inheritted stockpiles. But if one were to find one in working condition, it would be just as formidable as back then. Chambered in .229 Eoehoma caseless, and uses energy for lasers."
icon = 'icons/obj/guns/48x32guns.dmi'
icon_state = "e40"
item_state = "e40"
mag_type = /obj/item/ammo_box/magazine/e40
can_suppress = FALSE
- actions_types = list(/datum/action/item_action/toggle_firemode)
var/obj/item/gun/energy/laser/e40_laser_secondary/secondary
+ fire_select_icon_state_prefix = "e40_"
+
+ fire_delay = 0.18 SECONDS
+ recoil_unwielded = 3
+
+ gun_firenames = list(FIREMODE_FULLAUTO = "full auto ballistic", FIREMODE_OTHER = "full auto laser")
+ gun_firemodes = list(FIREMODE_FULLAUTO, FIREMODE_OTHER)
+ default_firemode = FIREMODE_OTHER
weapon_weight = WEAPON_MEDIUM
w_class = WEIGHT_CLASS_BULKY
slot_flags = ITEM_SLOT_BACK
- mag_display = TRUE
+ show_magazine_on_sprite = TRUE
empty_indicator = TRUE
fire_sound = 'sound/weapons/gun/laser/e40_bal.ogg'
manufacturer = MANUFACTURER_EOEHOMA
@@ -179,56 +162,84 @@
/obj/item/gun/ballistic/automatic/assault/e40/Initialize()
. = ..()
secondary = new /obj/item/gun/energy/laser/e40_laser_secondary(src)
- AddComponent(/datum/component/automatic_fire, 0.2 SECONDS)
RegisterSignal(secondary, COMSIG_ATOM_UPDATE_ICON, PROC_REF(secondary_update_icon))
SEND_SIGNAL(secondary, COMSIG_GUN_DISABLE_AUTOFIRE)
update_appearance()
+/obj/item/gun/ballistic/automatic/assault/e40/ComponentInitialize()
+ . = ..()
+ AddComponent(/datum/component/ammo_hud/eoehoma) // at long last... the ammo counter on the side of the sprite is functional...
+
/obj/item/gun/ballistic/automatic/assault/e40/do_autofire(datum/source, atom/target, mob/living/shooter, params)
- if(select == E40_LASER_MODE)
- secondary.do_autofire(source, target, shooter, params)
- else
+ var/current_firemode = gun_firemodes[firemode_index]
+ if(current_firemode != FIREMODE_OTHER)
return ..()
+ return secondary.do_autofire(source, target, shooter, params)
/obj/item/gun/ballistic/automatic/assault/e40/do_autofire_shot(datum/source, atom/target, mob/living/shooter, params)
- if(select == E40_LASER_MODE)
- secondary.do_autofire_shot(source, target, shooter, params)
- else
+ var/current_firemode = gun_firemodes[firemode_index]
+ if(current_firemode != FIREMODE_OTHER)
return ..()
+ return secondary.do_autofire_shot(source, target, shooter, params)
/obj/item/gun/ballistic/automatic/assault/e40/process_fire(atom/target, mob/living/user, message, params, zone_override, bonus_spread)
- if(select == E40_LASER_MODE)
- secondary.process_fire(target, user, message, params, zone_override, bonus_spread)
- else
+ var/current_firemode = gun_firemodes[firemode_index]
+ if(current_firemode != FIREMODE_OTHER)
return ..()
+ return secondary.process_fire(target, user, message, params, zone_override, bonus_spread)
/obj/item/gun/ballistic/automatic/assault/e40/can_shoot()
- if(select == E40_LASER_MODE)
- return secondary.can_shoot()
- else
+ var/current_firemode = gun_firemodes[firemode_index]
+ if(current_firemode != FIREMODE_OTHER)
return ..()
+ return secondary.can_shoot()
/obj/item/gun/ballistic/automatic/assault/e40/afterattack(atom/target, mob/living/user, flag, params)
- if(select == E40_LASER_MODE)
- secondary.afterattack(target, user, flag, params)
- else
+ var/current_firemode = gun_firemodes[firemode_index]
+ if(current_firemode != FIREMODE_OTHER)
return ..()
+ return secondary.afterattack(target, user, flag, params)
/obj/item/gun/ballistic/automatic/assault/e40/attackby(obj/item/attack_obj, mob/user, params)
if(istype(attack_obj, /obj/item/stock_parts/cell/gun))
- secondary.attackby(attack_obj, user, params)
+ return secondary.attackby(attack_obj, user, params)
if(istype(attack_obj, /obj/item/screwdriver))
- secondary.screwdriver_act(user, attack_obj,)
- else
- ..()
+ return secondary.screwdriver_act(user, attack_obj,)
+ return ..()
+
/obj/item/gun/ballistic/automatic/assault/e40/can_shoot()
- if(select == E40_LASER_MODE)
- return secondary.can_shoot()
- return ..()
+ var/current_firemode = gun_firemodes[firemode_index]
+ if(current_firemode != FIREMODE_OTHER)
+ return ..()
+ return secondary.can_shoot()
+
+/obj/item/gun/ballistic/automatic/assault/e40/on_wield(obj/item/source, mob/user)
+ wielded = TRUE
+ secondary.wielded = TRUE
+ INVOKE_ASYNC(src, .proc.do_wield, user)
+
+/obj/item/gun/ballistic/automatic/assault/e40/do_wield(mob/user)
+ . = ..()
+ secondary.wielded_fully = wielded_fully
+
+/// triggered on unwield of two handed item
+/obj/item/gun/ballistic/automatic/assault/e40/on_unwield(obj/item/source, mob/user)
+ . = ..()
+ secondary.wielded_fully = FALSE
+ secondary.wielded = FALSE
+
/obj/item/gun/ballistic/automatic/assault/e40/proc/secondary_update_icon()
- update_icon()
+ update_appearance()
+ SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD)
+
+/obj/item/gun/ballistic/automatic/assault/e40/process_other(atom/target, mob/living/user, message = TRUE, flag, params = null, zone_override = "", bonus_spread = 0)
+ secondary.pre_fire(target, user, message, flag, params, zone_override, bonus_spread)
+
+
+/obj/item/gun/ballistic/automatic/powered/get_cell()
+ return cell
/obj/item/gun/ballistic/automatic/assault/e40/update_overlays()
. = ..()
@@ -244,41 +255,33 @@
. += "[icon_state]_cell"
-/obj/item/gun/ballistic/automatic/assault/e40/burst_select()
- var/mob/living/carbon/human/user = usr
- switch(select)
- if(NONE)
- select = E40_BALLISTIC_MODE
- to_chat(user, "You switch to full automatic ballistic.")
- if(E40_BALLISTIC_MODE)
- select = E40_LASER_MODE
- to_chat(user, "You switch to full auto laser.")
- SEND_SIGNAL(src, COMSIG_GUN_DISABLE_AUTOFIRE)
- SEND_SIGNAL(secondary, COMSIG_GUN_ENABLE_AUTOFIRE)
- if(E40_LASER_MODE)
- select = E40_BALLISTIC_MODE
- to_chat(user, "You switch to full automatic ballistic.")
- SEND_SIGNAL(src, COMSIG_GUN_ENABLE_AUTOFIRE)
- SEND_SIGNAL(secondary, COMSIG_GUN_DISABLE_AUTOFIRE)
- playsound(user, 'sound/weapons/empty.ogg', 100, TRUE)
- update_icon()
- return
-
-
-
/obj/item/gun/ballistic/automatic/assault/e40/toggle_safety(mob/user, silent=FALSE)
. = ..()
secondary.toggle_safety(user, silent=TRUE)
+/obj/item/gun/ballistic/automatic/assault/e40/fire_select(mob/living/carbon/human/user)
+ . = ..()
+ var/current_firemode = gun_firemodes[firemode_index]
+ if(current_firemode == FIREMODE_OTHER)
+ SEND_SIGNAL(src, COMSIG_GUN_ENABLE_AUTOFIRE)
+ SEND_SIGNAL(src, COMSIG_GUN_SET_AUTOFIRE_SPEED, secondary.fire_delay)
+ else
+ SEND_SIGNAL(src, COMSIG_GUN_SET_AUTOFIRE_SPEED, fire_delay)
+ SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD)
+
//laser
/obj/item/gun/energy/laser/e40_laser_secondary
name = "secondary e40 laser gun"
- desc = "The laser component of a E-40 Hybrid Rifle. You probably shouldn't see this."
+ desc = "The laser component of a E-40 Hybrid Rifle. You probably shouldn't see this. If you can though, you should probably know lorewise, this is primary, the ballistic compontent in universe is secondary. Unfortunately, we cannot simulate this, So codewise this is secondary."
fire_sound = 'sound/weapons/gun/laser/e40_las.ogg'
w_class = WEIGHT_CLASS_NORMAL
ammo_type = list(/obj/item/ammo_casing/energy/laser/assault)
- fire_delay = 2
+ fire_delay = 0.2 SECONDS
+ gun_firemodes = list(FIREMODE_FULLAUTO)
+ default_firemode = FIREMODE_FULLAUTO
+
+ spread_unwielded = 20
//techinically a battle rifle, i'm putting it here for organisation sake
@@ -294,12 +297,13 @@
internal_magazine = TRUE
mag_type = /obj/item/ammo_box/magazine/internal/vickland
fire_sound = 'sound/weapons/gun/rifle/vickland.ogg'
- burst_size = 0
actions_types = list()
manufacturer = MANUFACTURER_HUNTERSPRIDE
rack_sound = 'sound/weapons/gun/rifle/ar_cock.ogg'
+ fire_delay = 0.4 SECONDS
+
spread_unwielded = 25
recoil = 0
recoil_unwielded = 4
diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm
index abc0bcbc9bcb..c0ccf71d513e 100644
--- a/code/modules/projectiles/guns/ballistic/automatic.dm
+++ b/code/modules/projectiles/guns/ballistic/automatic.dm
@@ -1,10 +1,10 @@
+
/obj/item/gun/ballistic/automatic
w_class = WEIGHT_CLASS_NORMAL
- var/select = 1
can_suppress = TRUE
- burst_size = 3
- fire_delay = 2
- actions_types = list(/datum/action/item_action/toggle_firemode)
+
+ gun_firemodes = list(FIREMODE_SEMIAUTO)
+ default_firemode = FIREMODE_SEMIAUTO
semi_auto = TRUE
fire_sound = 'sound/weapons/gun/smg/shot.ogg'
fire_sound_volume = 90
@@ -14,6 +14,7 @@
weapon_weight = WEAPON_MEDIUM
pickup_sound = 'sound/items/handling/rifle_pickup.ogg'
+ fire_delay = 0.4 SECONDS
wield_delay = 1 SECONDS
spread = 0
spread_unwielded = 13
@@ -21,36 +22,6 @@
recoil_unwielded = 4
wield_slowdown = 0.35
-/obj/item/gun/ballistic/automatic/update_overlays()
- . = ..()
- if(!select)
- . += "[initial(icon_state)]_semi"
- if(select == 1)
- . += "[initial(icon_state)]_burst"
-
-/obj/item/gun/ballistic/automatic/ui_action_click(mob/user, actiontype)
- if(istype(actiontype, /datum/action/item_action/toggle_firemode))
- burst_select()
- else
- ..()
-
-/obj/item/gun/ballistic/automatic/proc/burst_select()
- var/mob/living/carbon/human/user = usr
- select = !select
- if(!select)
- burst_size = 1
- fire_delay = 0
- to_chat(user, "You switch to semi-automatic.")
- else
- burst_size = initial(burst_size)
- fire_delay = initial(fire_delay)
- to_chat(user, "You switch to [burst_size]-rnd burst.")
-
- playsound(user, 'sound/weapons/gun/general/selector.ogg', 100, TRUE)
- update_appearance()
- for(var/X in actions)
- var/datum/action/A = X
- A.UpdateButtonIcon()
// SNIPER //
@@ -68,7 +39,6 @@
recoil = 2
weapon_weight = WEAPON_HEAVY
mag_type = /obj/item/ammo_box/magazine/sniper_rounds
- fire_delay = 40
burst_size = 1
w_class = WEIGHT_CLASS_NORMAL
zoomable = TRUE
@@ -76,13 +46,13 @@
zoom_out_amt = 5
slot_flags = ITEM_SLOT_BACK
actions_types = list()
- mag_display = TRUE
+ show_magazine_on_sprite = TRUE
manufacturer = MANUFACTURER_SCARBOROUGH
spread = -5
spread_unwielded = 20
- recoil = 0
- recoil_unwielded = 4
+ recoil = 5
+ recoil_unwielded = 50
wield_slowdown = 1
wield_delay = 1.3 SECONDS
@@ -96,38 +66,36 @@ EMPTY_GUN_HELPER(automatic/sniper_rifle/syndicate)
// Old Semi-Auto Rifle //
-/obj/item/gun/ballistic/automatic/surplus
+/obj/item/gun/ballistic/automatic/surplus //TODO: NEEDS TO BE REPLACED WITH PISTOL CARBINES OR LOWCAL SEMI-AUTO RIFLES
name = "surplus rifle"
desc = "One of countless cheap, obsolete rifles found throughout the Frontier. Its lack of lethality renders it mostly a deterrent. Chambered in 10mm."
icon_state = "surplus"
item_state = "moistnugget"
weapon_weight = WEAPON_HEAVY
mag_type = /obj/item/ammo_box/magazine/m10mm/rifle
- fire_delay = 10
+ fire_delay = 0.5 SECONDS
burst_size = 1
can_unsuppress = TRUE
can_suppress = TRUE
w_class = WEIGHT_CLASS_HUGE
slot_flags = ITEM_SLOT_BACK
- actions_types = list()
- mag_display = TRUE
+ show_magazine_on_sprite = TRUE
// Laser rifle (rechargeable magazine) //
-/obj/item/gun/ballistic/automatic/laser
+/obj/item/gun/ballistic/automatic/laser //TODO: REMOVE
name = "laser rifle"
desc = "Though sometimes mocked for the relatively weak firepower of their energy weapons, the logistic miracle of rechargeable ammunition has given Nanotrasen a decisive edge over many a foe."
icon_state = "oldrifle"
item_state = "arg"
mag_type = /obj/item/ammo_box/magazine/recharge
- fire_delay = 2
+ fire_delay = 0.2 SECONDS
can_suppress = FALSE
burst_size = 0
- actions_types = list()
fire_sound = 'sound/weapons/laser.ogg'
casing_ejector = FALSE
-/obj/item/gun/ballistic/automatic/ebr
+/obj/item/gun/ballistic/automatic/ebr //fuck this gun, its getting wiped soon enough
name = "\improper M514 EBR"
desc = "A reliable, high-powered battle rifle often found in the hands of Syndicate personnel and remnants, chambered in .308. Effective against personnel and armor alike."
icon = 'icons/obj/guns/48x32guns.dmi'
@@ -136,13 +104,12 @@ EMPTY_GUN_HELPER(automatic/sniper_rifle/syndicate)
icon_state = "ebr"
item_state = "ebr"
zoomable = TRUE
- mag_display = TRUE
+ show_magazine_on_sprite = TRUE
weapon_weight = WEAPON_MEDIUM
w_class = WEIGHT_CLASS_BULKY
mag_type = /obj/item/ammo_box/magazine/ebr
fire_sound = 'sound/weapons/gun/rifle/shot_alt2.ogg'
burst_size = 0
- actions_types = list()
manufacturer = MANUFACTURER_SCARBOROUGH
wield_slowdown = 2
@@ -158,7 +125,7 @@ EMPTY_GUN_HELPER(automatic/ebr)
icon_state = "gal"
item_state = "gal"
zoomable = TRUE
- mag_display = TRUE
+ show_magazine_on_sprite = TRUE
weapon_weight = WEAPON_MEDIUM
w_class = WEIGHT_CLASS_BULKY
mag_type = /obj/item/ammo_box/magazine/gal
@@ -169,6 +136,8 @@ EMPTY_GUN_HELPER(automatic/ebr)
wield_slowdown = 2
spread = -4
+ fire_select_icon_state_prefix = "clip_"
+ adjust_fire_select_icon_state_on_safety = TRUE
/obj/item/gun/ballistic/automatic/gal/inteq
name = "\improper SsG-04"
@@ -185,5 +154,5 @@ EMPTY_GUN_HELPER(automatic/ebr)
can_suppress = FALSE
actions_types = list()
can_bayonet = FALSE
- mag_display = TRUE
+ show_magazine_on_sprite = TRUE
weapon_weight = WEAPON_LIGHT
diff --git a/code/modules/projectiles/guns/ballistic/gauss.dm b/code/modules/projectiles/guns/ballistic/gauss.dm
index 8fce353d8b22..c50f906e4eba 100644
--- a/code/modules/projectiles/guns/ballistic/gauss.dm
+++ b/code/modules/projectiles/guns/ballistic/gauss.dm
@@ -9,9 +9,9 @@
load_sound = 'sound/weapons/gun/gauss/rifle_reload.ogg'
can_suppress = FALSE
burst_size = 1
- fire_delay = 3
+ fire_delay = 0.3 SECONDS
spread = 0
- mag_display = TRUE
+ show_magazine_on_sprite = TRUE
empty_indicator = TRUE
weapon_weight = WEAPON_MEDIUM
w_class = WEIGHT_CLASS_BULKY
@@ -25,6 +25,7 @@
recoil_unwielded = 4
wield_slowdown = 0.75
wield_delay = 1 SECONDS
+ fire_select_icon_state_prefix = "pellet_"
/obj/item/gun/ballistic/automatic/powered/gauss/modelh
name = "Model H"
@@ -37,14 +38,15 @@
cell_type = /obj/item/stock_parts/cell/gun/solgov
slot_flags = ITEM_SLOT_BELT
w_class = WEIGHT_CLASS_SMALL
- fire_delay = 0 //pistol
- mag_display = FALSE
+ fire_delay = 0.6 SECONDS //pistol, but heavy caliber.
+ show_magazine_on_sprite = FALSE
empty_indicator = FALSE
manufacturer = MANUFACTURER_SOLARARMORIES
- recoil = 1
+ recoil = 2
recoil_unwielded = 4
- spread = 3
+ spread = 6
spread_unwielded = 12
+ fire_select_icon_state_prefix = "slug_"
/obj/item/gun/ballistic/automatic/powered/gauss/modelh/suns
desc = "A standard-issue pistol exported from the Solarian Confederation. It fires slow flesh-rending ferromagnetic slugs at a high energy cost, however they are ineffective on any armor. It is painted in the colors of SUNS."
@@ -62,13 +64,13 @@
fire_sound = 'sound/weapons/gun/gauss/claris.ogg'
load_sound = 'sound/weapons/gun/gauss/sniper_reload.ogg'
cell_type = /obj/item/stock_parts/cell/gun/solgov
- fire_delay = 2
+ fire_delay = 0.4 SECONDS
bolt_type = BOLT_TYPE_NO_BOLT
internal_magazine = TRUE
- casing_ejector = FALSE
- mag_display = FALSE
+ show_magazine_on_sprite = FALSE
empty_indicator = FALSE
manufacturer = MANUFACTURER_SOLARARMORIES
+ fire_select_icon_state_prefix = "pellet_"
/obj/item/gun/ballistic/automatic/powered/gauss/claris/suns
desc = "An antiquated Solarian rifle. Chambered in ferromagnetic pellets, just as the founding Solarians intended. Evidently, SUNS' founders echo the sentiment, as it appears to be painted in their colors."
@@ -85,17 +87,19 @@
fire_sound = 'sound/weapons/gun/gauss/gar.ogg'
load_sound = 'sound/weapons/gun/gauss/rifle_reload.ogg'
cell_type = /obj/item/stock_parts/cell/gun/solgov
- burst_size = 2
- fire_delay = 1
+ burst_size = 1
+
+ fire_delay = 0.2 SECONDS
+
actions_types = list()
empty_indicator = FALSE
manufacturer = MANUFACTURER_SOLARARMORIES
- wield_delay = 0.7 SECONDS
+ gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_FULLAUTO)
+ default_firemode = FIREMODE_SEMIAUTO
-/obj/item/gun/ballistic/automatic/powered/gauss/gar/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/automatic_fire, 0.2 SECONDS)
+ wield_delay = 0.7 SECONDS
+ fire_select_icon_state_prefix = "lance_"
/obj/item/gun/ballistic/automatic/powered/gauss/gar/suns
desc = "A Solarian carbine, unusually modern for its producers. It's just modern enough for SUNS, however, who have painted the weapon in their colors. Launches ferromagnetic lances at alarming speeds."
diff --git a/code/modules/projectiles/guns/ballistic/hmg.dm b/code/modules/projectiles/guns/ballistic/hmg.dm
index 359a9e13e31e..4e9abd0cd70c 100644
--- a/code/modules/projectiles/guns/ballistic/hmg.dm
+++ b/code/modules/projectiles/guns/ballistic/hmg.dm
@@ -7,7 +7,10 @@
burst_size = 1
actions_types = list(/datum/action/item_action/deploy_bipod) //this is on hmg, as I need the same mechanics for a future gun. ideally, this would be an attachment, but that's still pending
drag_slowdown = 1.5
- fire_delay = 1
+ fire_delay = 0.1 SECONDS
+
+ gun_firemodes = list(FIREMODE_FULLAUTO)
+ default_firemode = FIREMODE_FULLAUTO
spread = 4
spread_unwielded = 80
@@ -114,24 +117,26 @@
retract_bipod(user=user)
/obj/item/gun/ballistic/automatic/hmg/calculate_recoil(mob/user, recoil_bonus = 0)
- var/gunslinger_bonus = 1
+ var/gunslinger_bonus = 2
var/total_recoil = recoil_bonus
+
if(bipod_deployed)
total_recoil += deploy_recoil_bonus
if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger penalty
total_recoil += gunslinger_bonus
- total_recoil = clamp(total_recoil,0,INFINITY)
- return total_recoil
+
+ return ..(user, total_recoil)
/obj/item/gun/ballistic/automatic/hmg/calculate_spread(mob/user, bonus_spread)
- var/gunslinger_bonus = 4
+ var/gunslinger_bonus = 20
var/total_spread = bonus_spread
+
if(bipod_deployed)
total_spread += deploy_spread_bonus
if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger penalty
total_spread += gunslinger_bonus
- total_spread = clamp(total_spread,0,INFINITY)
- return total_spread
+
+ return ..(user, total_spread)
/obj/item/gun/ballistic/automatic/hmg/update_icon_state()
@@ -155,9 +160,12 @@
mag_type = /obj/item/ammo_box/magazine/mm712x82
can_suppress = FALSE
spread = 7
+
+ fire_delay = 0.1 SECONDS
+
bolt_type = BOLT_TYPE_OPEN
- mag_display = TRUE
- mag_display_ammo = TRUE
+ show_magazine_on_sprite = TRUE
+ show_magazine_on_sprite_ammo = TRUE
tac_reloads = FALSE
fire_sound = 'sound/weapons/gun/l6/shot.ogg'
rack_sound = 'sound/weapons/gun/l6/l6_rack.ogg'
@@ -165,10 +173,6 @@
manufacturer = MANUFACTURER_SCARBOROUGH
var/cover_open = FALSE
-/obj/item/gun/ballistic/automatic/hmg/l6_saw/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/automatic_fire, 0.1 SECONDS)
-
/obj/item/gun/ballistic/automatic/hmg/l6_saw/examine(mob/user)
. = ..()
. += "alt + click to [cover_open ? "close" : "open"] the dust cover."
@@ -217,16 +221,17 @@
item_state = "arg"
mag_type = /obj/item/ammo_box/magazine/rifle47x33mm
spread = 7
+
+ fire_delay = 0.1 SECONDS
+
+ fire_select_icon_state_prefix = "caseless_"
+
can_suppress = FALSE
can_bayonet = FALSE
- mag_display = TRUE
+ show_magazine_on_sprite = TRUE
w_class = WEIGHT_CLASS_BULKY
manufacturer = MANUFACTURER_SOLARARMORIES
-/obj/item/gun/ballistic/automatic/hmg/solar/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/automatic_fire, 0.1 SECONDS)
-
/obj/item/gun/ballistic/automatic/hmg/skm_lmg
name = "\improper SKM-24u"
desc = "What appears to be a standard SKM-24 at first glance is actually a light machine gun conversion, with an extended, heavy barrel and overhauled internals. Its weight, bulk, and robust fire rate make it difficult to handle without using the bipod in a prone position or against appropriate cover such as a table. Chambered in 7.62x40mm CLIP."
@@ -242,15 +247,18 @@
eject_sound = 'sound/weapons/gun/rifle/skm_unload.ogg'
eject_empty_sound = 'sound/weapons/gun/rifle/skm_unload.ogg'
+ gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_FULLAUTO)
+ default_firemode = FIREMODE_SEMIAUTO
- mag_display = TRUE
- special_mags = TRUE
+ show_magazine_on_sprite = TRUE
+ unique_mag_sprites_for_variants = TRUE
weapon_weight = WEAPON_MEDIUM
w_class = WEIGHT_CLASS_BULKY
slot_flags = ITEM_SLOT_BACK
manufacturer = MANUFACTURER_IMPORT
mag_type = /obj/item/ammo_box/magazine/skm_762_40
+ fire_delay = 0.13 SECONDS
spread = 7 //you can hipfire, but why?
spread_unwielded = 25
@@ -265,7 +273,6 @@
/obj/item/gun/ballistic/automatic/hmg/skm_lmg/ComponentInitialize()
. = ..()
- AddComponent(/datum/component/automatic_fire, 0.13 SECONDS) //slower than other lmgs but faster than skm and most smgs
AddElement(/datum/element/update_icon_updates_onmob)
/obj/item/gun/ballistic/automatic/hmg/skm_lmg/extended //spawns with the proper extended magazine, for erts
diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm
index 01644cd6e9bb..5619b039d488 100644
--- a/code/modules/projectiles/guns/ballistic/launchers.dm
+++ b/code/modules/projectiles/guns/ballistic/launchers.dm
@@ -11,7 +11,11 @@
fire_sound = 'sound/weapons/gun/general/grenade_launch.ogg'
w_class = WEIGHT_CLASS_NORMAL
bolt_type = BOLT_TYPE_NO_BOLT
- fire_delay = 10
+ fire_delay = 1 SECONDS
+ semi_auto = TRUE
+ has_safety = FALSE
+ safety = FALSE
+ gate_offset = 0
/obj/item/gun/ballistic/revolver/grenadelauncher/attackby(obj/item/A, mob/user, params)
..()
@@ -35,7 +39,7 @@
fire_sound = 'sound/weapons/gun/general/grenade_launch.ogg'
mag_type = /obj/item/ammo_box/magazine/m75
burst_size = 1
- fire_delay = 0
+ fire_delay = 0.4 SECONDS
actions_types = list()
casing_ejector = FALSE
@@ -50,7 +54,7 @@
w_class = WEIGHT_CLASS_BULKY
can_suppress = FALSE
burst_size = 1
- fire_delay = 0
+ fire_delay = 0.4 SECONDS
casing_ejector = FALSE
weapon_weight = WEAPON_HEAVY
bolt_type = BOLT_TYPE_NO_BOLT
diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm
index 11aad5203361..160067b6d250 100644
--- a/code/modules/projectiles/guns/ballistic/pistol.dm
+++ b/code/modules/projectiles/guns/ballistic/pistol.dm
@@ -5,8 +5,6 @@
w_class = WEIGHT_CLASS_SMALL
mag_type = /obj/item/ammo_box/magazine/m10mm
can_suppress = TRUE
- burst_size = 1
- fire_delay = 0 //spam it as fast as you can
actions_types = list()
bolt_type = BOLT_TYPE_LOCKING
fire_sound = 'sound/weapons/gun/pistol/shot.ogg'
@@ -24,12 +22,16 @@
bolt_wording = "slide"
weapon_weight = WEAPON_LIGHT
pickup_sound = 'sound/items/handling/gun_pickup.ogg'
- fire_delay = 1
manufacturer = MANUFACTURER_SCARBOROUGH
+ recoil = 0.5 // apogee wants bloom, this is a placeholder until then to simulate the same concept.
+ recoil_unwielded = 3
+ recoil_backtime_multiplier = 1
+
wield_delay = 0.2 SECONDS
- spread = 2
- spread_unwielded = 5
+ fire_delay = 0.2 SECONDS
+ spread = 5
+ spread_unwielded = 7
wield_slowdown = 0.15
muzzleflash_iconstate = "muzzle_flash_light"
@@ -62,7 +64,6 @@ EMPTY_GUN_HELPER(automatic/pistol)
load_empty_sound = 'sound/weapons/gun/pistol/candor_reload.ogg'
eject_sound = 'sound/weapons/gun/pistol/candor_unload.ogg'
eject_empty_sound = 'sound/weapons/gun/pistol/candor_unload.ogg'
- recoil = -2
EMPTY_GUN_HELPER(automatic/pistol/candor)
@@ -89,7 +90,7 @@ EMPTY_GUN_HELPER(automatic/pistol/candor/factory)
force = 14
mag_type = /obj/item/ammo_box/magazine/m50
can_suppress = FALSE
- mag_display = TRUE
+ show_magazine_on_sprite = TRUE
fire_sound = 'sound/weapons/gun/pistol/deagle.ogg'
rack_sound = 'sound/weapons/gun/pistol/rack.ogg'
lock_back_sound = 'sound/weapons/gun/pistol/slide_lock.ogg'
@@ -99,11 +100,13 @@ EMPTY_GUN_HELPER(automatic/pistol/candor/factory)
load_empty_sound = 'sound/weapons/gun/pistol/deagle_reload.ogg'
eject_sound = 'sound/weapons/gun/pistol/deagle_unload.ogg'
eject_empty_sound = 'sound/weapons/gun/pistol/deagle_unload.ogg'
- fire_delay = 0.7 SECONDS
- recoil = 1
- recoil_unwielded = 2
- spread = 4
- spread_unwielded = 7
+ fire_delay = 0.6 SECONDS
+ recoil = 2
+ recoil_unwielded = 5
+ recoil_backtime_multiplier = 2
+
+ spread = 7
+ spread_unwielded = 14
/obj/item/gun/ballistic/automatic/pistol/deagle/gold
desc = "A gold-plated Desert Eagle folded over a million times by superior Martian gunsmiths. Uses .50 AE ammo."
@@ -123,8 +126,11 @@ EMPTY_GUN_HELPER(automatic/pistol/candor/factory)
mag_type = /obj/item/ammo_box/magazine/pistolm9mm
can_suppress = FALSE
burst_size = 3
- fire_delay = 2
- actions_types = list(/datum/action/item_action/toggle_firemode)
+ burst_delay = 0.1 SECONDS
+ fire_delay = 0.4 SECONDS
+ gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_BURST)
+ default_firemode = FIREMODE_SEMIAUTO
+
/obj/item/gun/ballistic/automatic/pistol/stickman
name = "flat gun"
@@ -236,6 +242,8 @@ EMPTY_GUN_HELPER(automatic/pistol/commander/inteq)
eject_sound = 'sound/weapons/gun/pistol/mag_release.ogg'
eject_empty_sound = 'sound/weapons/gun/pistol/mag_release.ogg'
+ fire_select_icon_state_prefix = "caseless_"
+
/obj/item/gun/ballistic/automatic/pistol/solgov/old
icon_state = "pistole-c-old"
@@ -246,7 +254,7 @@ EMPTY_GUN_HELPER(automatic/pistol/commander/inteq)
weapon_weight = WEAPON_LIGHT
w_class = WEIGHT_CLASS_SMALL
mag_type = /obj/item/ammo_box/magazine/tec9
- mag_display = TRUE
+ show_magazine_on_sprite = TRUE
load_sound = 'sound/weapons/gun/pistol/mag_insert.ogg'
load_empty_sound = 'sound/weapons/gun/pistol/mag_insert.ogg'
eject_sound = 'sound/weapons/gun/pistol/mag_release.ogg'
diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm
index 27c3d124906a..f39382e81ea2 100644
--- a/code/modules/projectiles/guns/ballistic/revolver.dm
+++ b/code/modules/projectiles/guns/ballistic/revolver.dm
@@ -25,7 +25,7 @@
var/spin_delay = 10
var/recent_spin = 0
manufacturer = MANUFACTURER_SCARBOROUGH
- fire_delay = 2
+ fire_delay = 0.4 SECONDS
spread_unwielded = 15
recoil = 0.5
recoil_unwielded = 2
@@ -35,6 +35,9 @@
dry_fire_text = "snap"
wield_slowdown = 0.3
+ gun_firemodes = list(FIREMODE_SEMIAUTO)
+ default_firemode = FIREMODE_SEMIAUTO
+
safety_wording = "hammer"
var/gate_loaded = FALSE //for stupid wild west shit
@@ -279,7 +282,8 @@
to_chat(user, "You rack the [bolt_wording] of \the [src].")
playsound(src, rack_sound, rack_sound_volume, rack_sound_vary)
- chamber_round(TRUE)
+ if((!safety && !semi_auto) || (!safety && !semi_auto))
+ chamber_round(TRUE)
SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD)
update_appearance()
@@ -411,11 +415,14 @@
var/fan = FALSE
if(HAS_TRAIT(user, TRAIT_GUNSLINGER) && !semi_auto && !wielded && loc == user && !safety && !user.get_inactive_held_item())
fan = TRUE
+ fire_delay = 0 SECONDS
. = ..()
+ fire_delay = src::fire_delay
if(fan)
rack()
to_chat(user, "You fan the [bolt_wording] of \the [src]!")
- user.changeNext_move(CLICK_CD_RAPID)
+ balloon_alert_to_viewers("fans revolver!")
+ fire_delay = 0 SECONDS
/obj/item/gun/ballistic/revolver/shoot_live_shot(mob/living/user, pointblank, atom/pbtarget, message)
. = ..()
@@ -434,18 +441,22 @@
/obj/item/gun/ballistic/revolver/calculate_recoil(mob/user, recoil_bonus = 0)
var/gunslinger_bonus = -1
var/total_recoil = recoil_bonus
+
if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger bonus
total_recoil += gunslinger_bonus
total_recoil = clamp(total_recoil,0,INFINITY)
- return total_recoil
+
+ return ..(user, total_recoil)
/obj/item/gun/ballistic/revolver/calculate_spread(mob/user, bonus_spread)
- var/gunslinger_bonus = -4
+ var/gunslinger_bonus = -8
var/total_spread = bonus_spread
+
if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger bonus
total_spread += gunslinger_bonus
total_spread = clamp(total_spread,0,INFINITY)
- return total_spread
+
+ return ..(user, total_spread)
/obj/item/gun/ballistic/revolver/pickup(mob/user)
. = ..()
@@ -454,12 +465,6 @@
/obj/item/gun/ballistic/revolver/proc/tryflip(mob/living/user)
if(HAS_TRAIT(user, TRAIT_GUNSLINGER))
if(COOLDOWN_FINISHED(src, flip_cooldown))
- if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(40))
- to_chat(user, "While trying to flip the [src] you pull the trigger and accidently shoot yourself!")
- var/flip_mistake = pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_HEAD, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_CHEST)
- process_fire(user, user, FALSE, flip_mistake)
- user.dropItemToGround(src, TRUE)
- return
COOLDOWN_START(src, flip_cooldown, 0.3 SECONDS)
SpinAnimation(5,1)
user.visible_message("[user] spins the [src] around their finger by the trigger. That’s pretty badass.")
@@ -486,14 +491,15 @@
manufacturer = MANUFACTURER_HUNTERSPRIDE
recoil = 0 //weaker than normal revolver, no recoil
+ fire_delay = 0.2 SECONDS
EMPTY_GUN_HELPER(revolver/detective)
/obj/item/gun/ballistic/revolver/detective/ComponentInitialize()
. = ..()
AddComponent(/datum/component/ammo_hud/revolver) //note that the hud at the moment only supports 6 round revolvers, 7 or 5 isn't supported rn
-
-/obj/item/gun/ballistic/revolver/detective/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
+//...why...?
+/obj/item/gun/ballistic/revolver/detective/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0, burst_firing = FALSE, spread_override = 0, iteration = 0)
if(magazine.caliber != initial(magazine.caliber))
if(prob(100 - (magazine.ammo_count() * 5))) //minimum probability of 70, maximum of 95
playsound(user, fire_sound, fire_sound_volume, vary_fire_sound)
@@ -580,19 +586,22 @@ EMPTY_GUN_HELPER(revolver/detective)
fire_sound = 'sound/weapons/gun/revolver/shot_hunting.ogg'
manufacturer = MANUFACTURER_HUNTERSPRIDE
gate_loaded = TRUE
+ fire_delay = 0.6 SECONDS
wield_slowdown = 0.5
- spread_unwielded = 5
- spread = 2
+ spread_unwielded = 20
+ spread = 6
recoil = 2
recoil_unwielded = 4
-// A gun to play Russian Roulette!
-// You can spin the chamber to randomize the position of the bullet.
-
/obj/item/gun/ballistic/revolver/ashhand/ComponentInitialize()
. = ..()
AddComponent(/datum/component/ammo_hud/revolver)
+// A gun to play Russian Roulette!
+// You can spin the chamber to randomize the position of the bullet.
+
+//TODO: this is stupid, but used in ONE fucking ruin. Remember to remove when you aren't afraid to do a ton of path changes.
+
/obj/item/gun/ballistic/revolver/russian
name = "\improper Russian revolver"
desc = "A Solarian revolver for particularly lethal drinking games. It has a mechanism requiring you to spin the chamber before each trigger pull. Uses .357 ammo."
@@ -691,7 +700,7 @@ EMPTY_GUN_HELPER(revolver/detective)
spread = 20
manufacturer = MANUFACTURER_HUNTERSPRIDE
spread_unwielded = 50
- fire_delay = 0
+ fire_delay = 0 SECONDS
gate_offset = 4
semi_auto = TRUE
safety_wording = "safety"
@@ -717,6 +726,7 @@ EMPTY_GUN_HELPER(revolver/detective)
)
recoil = 0 //weaker than normal revolver, no recoil
+ spread_unwielded = 10
/obj/item/gun/ballistic/revolver/shadow/ComponentInitialize()
. = ..()
diff --git a/code/modules/projectiles/guns/ballistic/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm
index 24cf3323048a..bdeb7a4811f3 100644
--- a/code/modules/projectiles/guns/ballistic/rifle.dm
+++ b/code/modules/projectiles/guns/ballistic/rifle.dm
@@ -22,8 +22,11 @@
weapon_weight = WEAPON_MEDIUM
pickup_sound = 'sound/items/handling/rifle_pickup.ogg'
+ gun_firemodes = list(FIREMODE_SEMIAUTO)
+ default_firemode = FIREMODE_SEMIAUTO
+
spread = -1
- spread_unwielded = 12
+ spread_unwielded = 48
recoil = -3
recoil_unwielded = 4
wield_slowdown = 1
@@ -89,18 +92,18 @@
/obj/item/gun/ballistic/rifle/illestren/sawoff(mob/user)
. = ..()
if(.)
- spread = 36
- spread_unwielded = 108
+ spread = 24
+ spread_unwielded = 30
can_bayonet = FALSE
item_state = "illestren_sawn"
mob_overlay_state = item_state
weapon_weight = WEAPON_MEDIUM //you can fire it onehanded, makes it worse than worse than useless onehanded, but you can
/obj/item/gun/ballistic/rifle/illestren/blow_up(mob/user)
- . = 0
+ . = FALSE
if(chambered && chambered.BB)
process_fire(user, user, FALSE)
- . = 1
+ . = TRUE
/obj/item/gun/ballistic/rifle/illestren/factory
desc = "A sturdy and conventional bolt-action rifle. One of Hunter's Pride's most successful firearms, this example has been kept in excellent shape and may as well be fresh out of the workshop. Chambered in 8x50mmR."
diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm
index 4b3d8c7687f0..90e13c82ee06 100644
--- a/code/modules/projectiles/guns/ballistic/shotgun.dm
+++ b/code/modules/projectiles/guns/ballistic/shotgun.dm
@@ -19,10 +19,14 @@
cartridge_wording = "shell"
tac_reloads = FALSE
pickup_sound = 'sound/items/handling/shotgun_pickup.ogg'
- fire_delay = 7
+ fire_delay = 0.7 SECONDS
pb_knockback = 2
manufacturer = MANUFACTURER_HUNTERSPRIDE
+ gun_firemodes = list(FIREMODE_SEMIAUTO)
+ default_firemode = FIREMODE_SEMIAUTO
+ fire_select_icon_state_prefix = "sg_"
+
wield_slowdown = 0.45
wield_delay = 0.8 SECONDS
@@ -48,7 +52,8 @@
if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger bonus
total_recoil += gunslinger_bonus
total_recoil = clamp(total_recoil,0,INFINITY)
- return total_recoil
+
+ return ..(user, total_recoil)
// BRIMSTONE SHOTGUN //
@@ -61,18 +66,17 @@
icon_state = "brimstone"
item_state = "brimstone"
+ gun_firemodes = list(FIREMODE_FULLAUTO)
+ default_firemode = FIREMODE_FULLAUTO
+
mag_type = /obj/item/ammo_box/magazine/internal/shot/lethal
manufacturer = MANUFACTURER_HUNTERSPRIDE
- fire_delay = 1
- rack_delay = 2
+ fire_delay = 0.05 SECONDS //slamfire
+ rack_delay = 0.2 SECONDS
can_be_sawn_off = TRUE
-/obj/item/gun/ballistic/shotgun/brimstone/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/automatic_fire, 0.1 SECONDS)
-
/obj/item/gun/ballistic/shotgun/brimstone/sawoff(mob/user)
. = ..()
if(.)
@@ -99,7 +103,7 @@
sawn_desc = "Come with me if you want to live."
can_be_sawn_off = TRUE
rack_sound = 'sound/weapons/gun/shotgun/rack_alt.ogg'
- fire_delay = 1
+ fire_delay = 0.1 SECONDS
/obj/item/gun/ballistic/shotgun/hellfire/sawoff(mob/user)
. = ..()
@@ -140,7 +144,7 @@
desc = "A semi-automatic shotgun with tactical furniture and six-shell capacity underneath."
icon_state = "cshotgun"
item_state = "shotgun_combat"
- fire_delay = 5
+ fire_delay = 0.5 SECONDS
mag_type = /obj/item/ammo_box/magazine/internal/shot/com
w_class = WEIGHT_CLASS_HUGE
@@ -197,7 +201,7 @@
// Bulldog shotgun //
-/obj/item/gun/ballistic/shotgun/bulldog
+/obj/item/gun/ballistic/shotgun/bulldog //TODO: REPATH TO LIKE /obj/item/gun/ballistic/shotgun/automatic/bulldog
name = "\improper Bulldog Shotgun"
desc = "A semi-automatic, magazine-fed shotgun designed for combat in tight quarters, manufactured by Scarborough Arms. A historical favorite of various Syndicate factions, especially the Gorlex Marauders."
icon = 'icons/obj/guns/48x32guns.dmi'
@@ -211,13 +215,12 @@
mag_type = /obj/item/ammo_box/magazine/m12g
can_suppress = FALSE
burst_size = 1
- fire_delay = 0
+ fire_delay = 0.4 SECONDS // this NEEDS the old delay.
fire_sound = 'sound/weapons/gun/shotgun/bulldog.ogg'
- actions_types = list()
- mag_display = TRUE
+ show_magazine_on_sprite = TRUE
empty_indicator = TRUE
empty_alarm = TRUE
- special_mags = TRUE
+ unique_mag_sprites_for_variants = TRUE
semi_auto = TRUE
internal_magazine = FALSE
casing_ejector = TRUE
@@ -225,6 +228,13 @@
pickup_sound = 'sound/items/handling/rifle_pickup.ogg'
manufacturer = MANUFACTURER_SCARBOROUGH
+ load_sound = 'sound/weapons/gun/rifle/ar_reload.ogg'
+ load_empty_sound = 'sound/weapons/gun/rifle/ar_reload.ogg'
+ eject_sound = 'sound/weapons/gun/rifle/ar_unload.ogg'
+ eject_empty_sound = 'sound/weapons/gun/rifle/ar_unload.ogg'
+
+ rack_sound = 'sound/weapons/gun/rifle/ar_cock.ogg'
+
spread = 4
spread_unwielded = 16
recoil = 1
@@ -259,8 +269,10 @@ EMPTY_GUN_HELPER(shotgun/bulldog/inteq)
item_state = "cm15"
empty_alarm = FALSE
empty_indicator = FALSE
- special_mags = FALSE
+ unique_mag_sprites_for_variants = FALSE
manufacturer = MANUFACTURER_MINUTEMAN
+ fire_select_icon_state_prefix = "clip_"
+ adjust_fire_select_icon_state_on_safety = TRUE
/////////////////////////////
// DOUBLE BARRELED SHOTGUN //
@@ -548,7 +560,7 @@ EMPTY_GUN_HELPER(shotgun/bulldog/inteq)
attack_verb = list("bludgeoned", "smashed")
mag_type = /obj/item/ammo_box/magazine/internal/shot/sex
burst_size = 6
- fire_delay = 0.8
+ fire_delay = 0.08 SECONDS //?? very weird number
pb_knockback = 12
unique_reskin = null
recoil = 10
@@ -581,7 +593,7 @@ EMPTY_GUN_HELPER(shotgun/bulldog/inteq)
base_icon_state = "shotgun_e"
icon_state = "shotgun_e"
burst_size = 100
- fire_delay = 0.1
+ fire_delay = 0.01 SECONDS
pb_knockback = 40
recoil = 100
recoil_unwielded = 200
@@ -743,10 +755,10 @@ EMPTY_GUN_HELPER(shotgun/bulldog/inteq)
wield_slowdown = 0.5
wield_delay = 0.5 SECONDS
- spread_unwielded = 5 //mostly the hunting revolver stats
- spread = 2
+ spread_unwielded = 20 //mostly the hunting revolver stats
+ spread = 6
recoil = 2
- recoil_unwielded = 3
+ recoil_unwielded = 4
/obj/item/gun/ballistic/shotgun/doublebarrel/beacon/factory
desc = "A single-shot break-action rifle made by Hunter's Pride and sold to civilian hunters. This example has been kept in excellent shape and may as well be fresh out of the workshop. Uses .45-70 ammo."
diff --git a/code/modules/projectiles/guns/ballistic/smg.dm b/code/modules/projectiles/guns/ballistic/smg.dm
index a6739a79776e..5e8896ab10ec 100644
--- a/code/modules/projectiles/guns/ballistic/smg.dm
+++ b/code/modules/projectiles/guns/ballistic/smg.dm
@@ -1,14 +1,18 @@
/obj/item/gun/ballistic/automatic/smg
- burst_size = 1
+ burst_size = 2
actions_types = list()
- fire_delay = 1
- spread = 4
+ fire_delay = 0.13 SECONDS
+
+ spread = 6
spread_unwielded = 10
wield_slowdown = 0.35
recoil_unwielded = 4
w_class = WEIGHT_CLASS_BULKY
- wield_delay = 0.4 SECONDS
+ gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_FULLAUTO)
+ default_firemode = FIREMODE_SEMIAUTO
+
+ wield_delay = 0.5 SECONDS
load_sound = 'sound/weapons/gun/smg/smg_reload.ogg'
load_empty_sound = 'sound/weapons/gun/smg/smg_reload.ogg'
@@ -16,20 +20,24 @@
eject_empty_sound = 'sound/weapons/gun/smg/smg_unload.ogg'
/obj/item/gun/ballistic/automatic/smg/calculate_recoil(mob/user, recoil_bonus = 0)
- var/gunslinger_bonus = 1
- var/total_recoil = recoil_bonus
+ var/gunslinger_bonus = 2
+ var/total_recoil
+ if(.)
+ total_recoil += .
if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger penalty
total_recoil += gunslinger_bonus
- total_recoil = clamp(total_recoil,0,INFINITY)
- return total_recoil
+ . = total_recoil
+ return ..()
/obj/item/gun/ballistic/automatic/smg/calculate_spread(mob/user, bonus_spread)
- var/gunslinger_bonus = 4
+ var/gunslinger_bonus = 16
var/total_spread = bonus_spread
+ if(.)
+ total_spread += .
if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger penalty
total_spread += gunslinger_bonus
- total_spread = clamp(total_spread,0,INFINITY)
- return total_spread
+ . = total_spread
+ return ..()
/obj/item/gun/ballistic/automatic/smg/proto
name = "\improper Nanotrasen Saber SMG"
@@ -37,14 +45,11 @@
icon_state = "saber"
actions_types = list()
mag_type = /obj/item/ammo_box/magazine/smgm9mm
+
bolt_type = BOLT_TYPE_LOCKING
- mag_display = TRUE
+ show_magazine_on_sprite = TRUE
manufacturer = MANUFACTURER_NANOTRASEN_OLD
-/obj/item/gun/ballistic/automatic/smg/proto/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/automatic_fire, 0.13 SECONDS)
-
/obj/item/gun/ballistic/automatic/smg/c20r
name = "\improper C-20r SMG"
desc = "A bullpup .45 SMG designated 'C-20r.' Its buttstamp reads 'Scarborough Arms - Per falcis, per pravitas.'"
@@ -55,17 +60,13 @@
can_suppress = FALSE
knife_x_offset = 26
knife_y_offset = 12
- mag_display = TRUE
- mag_display_ammo = TRUE
+ show_magazine_on_sprite = TRUE
+ show_magazine_on_sprite_ammo = TRUE
empty_indicator = TRUE
manufacturer = MANUFACTURER_SCARBOROUGH
EMPTY_GUN_HELPER(automatic/smg/c20r)
-/obj/item/gun/ballistic/automatic/smg/c20r/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/automatic_fire, 0.13 SECONDS)
-
/obj/item/gun/ballistic/automatic/smg/c20r/Initialize()
. = ..()
update_appearance()
@@ -89,28 +90,23 @@ EMPTY_GUN_HELPER(automatic/smg/c20r)
item_state = "arg"
mag_type = /obj/item/ammo_box/magazine/wt550m9
can_suppress = FALSE
- burst_size = 1
actions_types = list()
can_bayonet = TRUE
knife_x_offset = 25
knife_y_offset = 12
- mag_display = TRUE
- mag_display_ammo = TRUE
+ show_magazine_on_sprite = TRUE
+ show_magazine_on_sprite_ammo = TRUE
empty_indicator = TRUE
manufacturer = MANUFACTURER_NANOTRASEN_OLD
fire_sound = 'sound/weapons/gun/smg/smg_heavy.ogg'
-/obj/item/gun/ballistic/automatic/smg/wt550/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/automatic_fire, 0.13 SECONDS)
-
/obj/item/gun/ballistic/automatic/smg/mini_uzi
name = "\improper Type U3 Uzi"
desc = "A lightweight submachine gun, for when you really want someone dead. Uses 9mm rounds."
icon_state = "uzi"
mag_type = /obj/item/ammo_box/magazine/uzim9mm
bolt_type = BOLT_TYPE_OPEN
- mag_display = TRUE
+ show_magazine_on_sprite = TRUE
fire_sound = 'sound/weapons/gun/smg/uzi.ogg'
rack_sound = 'sound/weapons/gun/smg/uzi_cocked.ogg'
@@ -124,10 +120,7 @@ EMPTY_GUN_HELPER(automatic/smg/c20r)
spread_unwielded = 8
wield_slowdown = 0.25
wield_delay = 0.2 SECONDS
-
-/obj/item/gun/ballistic/automatic/smg/mini_uzi/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/automatic_fire, 0.1 SECONDS)
+ fire_delay = 0.1 SECONDS
/obj/item/gun/ballistic/automatic/smg/vector
name = "\improper Vector carbine"
@@ -136,14 +129,10 @@ EMPTY_GUN_HELPER(automatic/smg/c20r)
item_state = "vector"
mag_type = /obj/item/ammo_box/magazine/smgm9mm //you guys remember when the autorifle was chambered in 9mm
bolt_type = BOLT_TYPE_LOCKING
- mag_display = TRUE
+ show_magazine_on_sprite = TRUE
weapon_weight = WEAPON_LIGHT
fire_sound = 'sound/weapons/gun/smg/vector_fire.ogg'
-/obj/item/gun/ballistic/automatic/smg/vector/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/automatic_fire, 0.13 SECONDS)
-
/obj/item/gun/ballistic/automatic/smg/m90
name = "\improper M-90gl Carbine"
desc = "A three-round burst 5.56 toploading carbine, designated 'M-90gl'. Has an attached underbarrel grenade launcher which can be toggled on and off."
@@ -151,67 +140,76 @@ EMPTY_GUN_HELPER(automatic/smg/c20r)
item_state = "m90"
mag_type = /obj/item/ammo_box/magazine/m556
can_suppress = FALSE
- actions_types = list(/datum/action/item_action/toggle_firemode)
- var/obj/item/gun/ballistic/revolver/grenadelauncher/underbarrel
- burst_size = 3
- fire_delay = 2
- mag_display = TRUE
+ gun_firenames = list(FIREMODE_SEMIAUTO = "single", FIREMODE_BURST = "burst fire", FIREMODE_FULLAUTO = "full auto", FIREMODE_OTHER = "underbarrel grenade launcher")
+ gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_BURST, FIREMODE_OTHER)
+ default_firemode = FIREMODE_SEMIAUTO
+ var/obj/item/gun/ballistic/revolver/grenadelauncher/secondary
+ show_magazine_on_sprite = TRUE
empty_indicator = TRUE
fire_sound = 'sound/weapons/gun/rifle/shot_alt.ogg'
manufacturer = MANUFACTURER_SCARBOROUGH
+ burst_size = 3
+ burst_delay = 0.1 SECONDS
+ fire_delay = 0.2 SECONDS
spread = 1
spread_unwielded = 8
wield_slowdown = 0.4
/obj/item/gun/ballistic/automatic/smg/m90/Initialize()
. = ..()
- underbarrel = new /obj/item/gun/ballistic/revolver/grenadelauncher(src)
+ secondary = new /obj/item/gun/ballistic/revolver/grenadelauncher(src)
+ RegisterSignal(secondary, COMSIG_ATOM_UPDATE_ICON, PROC_REF(secondary_update_icon))
update_appearance()
+/obj/item/gun/ballistic/automatic/smg/m90/process_other(atom/target, mob/living/user, message = TRUE, flag, params = null, zone_override = "", bonus_spread = 0)
+ return secondary.pre_fire(target, user, message, params, zone_override, bonus_spread)
+
+/obj/item/gun/ballistic/automatic/smg/m90/can_shoot()
+ var/current_firemode = gun_firemodes[firemode_index]
+ if(current_firemode != FIREMODE_OTHER)
+ return ..()
+ return secondary.can_shoot()
+
/obj/item/gun/ballistic/automatic/smg/m90/afterattack(atom/target, mob/living/user, flag, params)
- if(select == 2)
- underbarrel.afterattack(target, user, flag, params)
- else
+ var/current_firemode = gun_firemodes[firemode_index]
+ if(current_firemode != FIREMODE_OTHER)
return ..()
+ return secondary.afterattack(target, user, flag, params)
+
+/obj/item/gun/ballistic/automatic/smg/m90/attackby(obj/item/attack_obj, mob/user, params)
+ if(istype(attack_obj, secondary.magazine.ammo_type))
+ secondary.unique_action()
+ return secondary.attackby(attack_obj, user, params)
+ return ..()
-/obj/item/gun/ballistic/automatic/smg/m90/attackby(obj/item/A, mob/user, params)
- if(istype(A, /obj/item/ammo_casing))
- if(istype(A, underbarrel.magazine.ammo_type))
- underbarrel.attack_self()
- underbarrel.attackby(A, user, params)
- else
- ..()
-/obj/item/gun/ballistic/automatic/smg/m90/update_overlays()
+/obj/item/gun/ballistic/automatic/smg/m90/can_shoot()
+ var/current_firemode = gun_firemodes[firemode_index]
+ if(current_firemode != FIREMODE_OTHER)
+ return ..()
+ return secondary.can_shoot()
+
+/obj/item/gun/ballistic/automatic/smg/m90/on_wield(obj/item/source, mob/user)
+ wielded = TRUE
+ secondary.wielded = TRUE
+ INVOKE_ASYNC(src, .proc.do_wield, user)
+
+/obj/item/gun/ballistic/automatic/smg/m90/do_wield(mob/user)
. = ..()
- switch(select)
- if(0)
- . += "[initial(icon_state)]_semi"
- if(1)
- . += "[initial(icon_state)]_burst"
- if(2)
- . += "[initial(icon_state)]_gren"
-
-/obj/item/gun/ballistic/automatic/smg/m90/burst_select()
- var/mob/living/carbon/human/user = usr
- switch(select)
- if(0)
- select = 1
- burst_size = initial(burst_size)
- fire_delay = initial(fire_delay)
- to_chat(user, "You switch to [burst_size]-rnd burst.")
- if(1)
- select = 2
- to_chat(user, "You switch to grenades.")
- if(2)
- select = 0
- burst_size = 1
- fire_delay = 0
- to_chat(user, "You switch to semi-auto.")
- playsound(user, 'sound/weapons/gun/general/selector.ogg', 100, TRUE)
+ secondary.wielded_fully = wielded_fully
+
+/// triggered on unwield of two handed item
+/obj/item/gun/ballistic/automatic/smg/m90/on_unwield(obj/item/source, mob/user)
+ . = ..()
+ secondary.wielded_fully = FALSE
+ secondary.wielded = FALSE
+
+
+/obj/item/gun/ballistic/automatic/smg/m90/proc/secondary_update_icon()
update_appearance()
- return
+ SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD)
+
/obj/item/gun/ballistic/automatic/smg/firestorm //weapon designed by Apogee-dev
name = "HP Firestorm"
@@ -221,20 +219,18 @@ EMPTY_GUN_HELPER(automatic/smg/c20r)
item_state = "firestorm"
mag_type = /obj/item/ammo_box/magazine/c45_firestorm_mag
can_suppress = FALSE
- special_mags = TRUE
+ unique_mag_sprites_for_variants = TRUE
burst_size = 1
actions_types = list()
- fire_delay = 1
+ fire_delay = 0.13 SECONDS
+ bolt_type = BOLT_TYPE_OPEN
rack_sound = 'sound/weapons/gun/smg/uzi_cocked.ogg'
fire_sound = 'sound/weapons/gun/smg/firestorm.ogg'
+
manufacturer = MANUFACTURER_HUNTERSPRIDE
wield_slowdown = 0.4
-/obj/item/gun/ballistic/automatic/smg/firestorm/Initialize()
- . = ..()
- AddComponent(/datum/component/automatic_fire, 0.13 SECONDS)
-
/obj/item/gun/ballistic/automatic/smg/firestorm/pan //spawns with pan magazine, can take sticks instead of just drums, not sure where this would be used, maybe erts?
spawnwithmagazine = FALSE
@@ -253,11 +249,10 @@ EMPTY_GUN_HELPER(automatic/smg/c20r)
fire_sound = 'sound/weapons/gun/smg/smg_heavy.ogg'
manufacturer = MANUFACTURER_MINUTEMAN
-EMPTY_GUN_HELPER(automatic/smg/cm5)
+ fire_select_icon_state_prefix = "clip_"
+ adjust_fire_select_icon_state_on_safety = TRUE
-/obj/item/gun/ballistic/automatic/smg/cm5/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/automatic_fire, 0.13 SECONDS)
+EMPTY_GUN_HELPER(automatic/smg/cm5)
/obj/item/gun/ballistic/automatic/smg/cm5/compact
name = "\improper CM-5c"
@@ -266,15 +261,13 @@ EMPTY_GUN_HELPER(automatic/smg/cm5)
spread = 25
spread_unwielded = 40
+ fire_delay = 0.08 SECONDS
+
recoil = 1
recoil_unwielded = 2
wield_delay = 0.2 SECONDS
wield_slowdown = 0.15
-/obj/item/gun/ballistic/automatic/smg/cm5/compact/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/automatic_fire, 0.8 SECONDS)
-
/obj/item/gun/ballistic/automatic/smg/skm_carbine
name = "\improper SKM-24v"
desc = "The SKM-24v was a carbine modification of the SKM-24 during the Frontiersmen War. This, however, is just a shoddy imitation of that carbine, effectively an SKM-24 with a sawed down barrel and a folding wire stock. Can be fired with the stock folded, though accuracy suffers. Chambered in 4.6x30mm."
@@ -322,7 +315,6 @@ EMPTY_GUN_HELPER(automatic/smg/cm5)
/obj/item/gun/ballistic/automatic/smg/skm_carbine/ComponentInitialize()
. = ..()
- AddComponent(/datum/component/automatic_fire, 0.13 SECONDS)
AddElement(/datum/element/update_icon_updates_onmob)
/datum/action/item_action/fold_stock
@@ -356,26 +348,19 @@ EMPTY_GUN_HELPER(automatic/smg/cm5)
/obj/item/gun/ballistic/automatic/smg/skm_carbine/calculate_recoil(mob/user, recoil_bonus = 0)
- var/gunslinger_bonus = 1
var/total_recoil = recoil_bonus
if(!stock_folded)
total_recoil += stock_recoil_bonus
- if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger penalty
- total_recoil += gunslinger_bonus
- total_recoil = clamp(total_recoil,0,INFINITY)
- return total_recoil
+ return ..(user, total_recoil)
/obj/item/gun/ballistic/automatic/smg/skm_carbine/calculate_spread(mob/user, bonus_spread)
- var/gunslinger_bonus = 4
var/total_spread = bonus_spread
+
if(!stock_folded)
total_spread += stock_spread_bonus
- if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger penalty
- total_spread += gunslinger_bonus
- total_spread = clamp(total_spread,0,INFINITY)
- return total_spread
+ return ..(user, total_spread)
/obj/item/gun/ballistic/automatic/smg/skm_carbine/update_icon_state()
. = ..()
@@ -418,8 +403,3 @@ EMPTY_GUN_HELPER(automatic/smg/cm5)
unfolded_slowdown = 0.35
unfolded_wield_delay = 0.4 SECONDS
-
-
-/obj/item/gun/ballistic/automatic/smg/skm_carbine/inteq/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/automatic_fire, 0.13 SECONDS)
diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm
index 5f62b8c7ca78..796a62dd9427 100644
--- a/code/modules/projectiles/guns/ballistic/toy.dm
+++ b/code/modules/projectiles/guns/ballistic/toy.dm
@@ -29,7 +29,7 @@
mag_type = /obj/item/ammo_box/magazine/toy/pistol
fire_sound = 'sound/items/syringeproj.ogg'
burst_size = 1
- fire_delay = 0
+ fire_delay = 0.2 SECONDS
actions_types = list()
recoil = -10 //its a toy...
recoil_unwielded = -10
diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm
index 705789b3484a..d06ad71d206d 100644
--- a/code/modules/projectiles/guns/energy.dm
+++ b/code/modules/projectiles/guns/energy.dm
@@ -10,6 +10,11 @@
has_safety = TRUE
safety = TRUE
+ gun_firemodes = list(FIREMODE_SEMIAUTO)
+ default_firemode = FIREMODE_SEMIAUTO
+
+ fire_select_icon_state_prefix = "laser_"
+
var/obj/item/stock_parts/cell/gun/cell //What type of power cell this uses
var/cell_type = /obj/item/stock_parts/cell/gun
var/modifystate = 0
@@ -217,11 +222,6 @@
process_chamber() // If the gun was drained and then recharged, load a new shot.
return ..()
-/obj/item/gun/energy/process_burst(mob/living/user, atom/target, message = TRUE, params = null, zone_override="", sprd = 0, randomized_gun_spread = 0, randomized_bonus_spread = 0, rand_spr = 0, iteration = 0)
- if(!chambered && can_shoot())
- process_chamber() // Ditto.
- return ..()
-
/obj/item/gun/energy/proc/select_fire(mob/living/user)
select++
if (select > ammo_type.len)
diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm
index f2c504f07f84..f1188f76701f 100644
--- a/code/modules/projectiles/guns/energy/energy_gun.dm
+++ b/code/modules/projectiles/guns/energy/energy_gun.dm
@@ -52,14 +52,15 @@
w_class = WEIGHT_CLASS_BULKY
slot_flags = ITEM_SLOT_BACK
+ gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_FULLAUTO)
+ default_firemode = FIREMODE_SEMIAUTO
+
+ fire_delay = 0.2 SECONDS
+
wield_delay = 0.7 SECONDS
wield_slowdown = 0.6
spread_unwielded = 20
-/obj/item/gun/energy/e_gun/hades/Initialize()
- . = ..()
- AddComponent(/datum/component/automatic_fire, 0.2 SECONDS)
-
/obj/item/gun/energy/e_gun/old
name = "prototype energy gun"
desc = "NT-P:01 Prototype Energy Gun. Early stage development of a unique laser rifle that has a multifaceted energy lens, allowing the gun to alter the form of projectile it fires on command. The project was a dud, and Nanotrasen later acquired Sharplite to suit its laser weapon needs."
@@ -224,9 +225,10 @@
charge_sections = 3
weapon_weight = WEAPON_LIGHT
-/obj/item/gun/energy/e_gun/smg/Initialize()
- . = ..()
- AddComponent(/datum/component/automatic_fire, 0.13 SECONDS)
+ fire_delay = 0.13 SECONDS
+
+ gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_FULLAUTO)
+ default_firemode = FIREMODE_SEMIAUTO
/obj/item/gun/energy/e_gun/iot
name = "\improper E-SG 500 Second Edition"
diff --git a/code/modules/projectiles/guns/energy/laser_gatling.dm b/code/modules/projectiles/guns/energy/laser_gatling.dm
index b21e176b92e8..22e6e57d8817 100644
--- a/code/modules/projectiles/guns/energy/laser_gatling.dm
+++ b/code/modules/projectiles/guns/energy/laser_gatling.dm
@@ -105,6 +105,12 @@
icon_state = "minigun_spin"
item_state = "minigun"
slowdown = 1
+
+ fire_delay = 0.1 SECONDS
+
+ gun_firemodes = list(FIREMODE_FULLAUTO)
+ default_firemode = FIREMODE_FULLAUTO
+
slot_flags = null
w_class = WEIGHT_CLASS_HUGE
custom_materials = null
@@ -121,7 +127,6 @@
ammo_pack = loc
AddElement(/datum/element/update_icon_blocker)
- AddComponent(/datum/component/automatic_fire, 0.15 SECONDS)
return ..()
/obj/item/gun/energy/minigun/Destroy()
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index d84655fb5813..73d9104833fb 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -277,10 +277,14 @@
can_charge = FALSE
use_cyborg_cell = TRUE
+ fire_delay = 0.3 SECONDS
+
+ gun_firemodes = list(FIREMODE_FULLAUTO)
+ default_firemode = FIREMODE_FULLAUTO
+
/obj/item/gun/energy/printer/ComponentInitialize()
. = ..()
AddElement(/datum/element/update_icon_blocker)
- AddComponent(/datum/component/automatic_fire, 0.3 SECONDS)
/obj/item/gun/energy/printer/emp_act()
return
@@ -391,9 +395,9 @@
shaded_charge = TRUE
weapon_weight = WEAPON_HEAVY
-/obj/item/gun/energy/tesla_cannon/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/automatic_fire, 0.1 SECONDS)
+ fire_delay = 0.1 SECONDS
+ gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_FULLAUTO)
+ default_firemode = FIREMODE_SEMIAUTO
/obj/item/gun/energy/buster
name = "replica buster cannon"
diff --git a/code/modules/projectiles/guns/faction/gezena/energy_gunsword.dm b/code/modules/projectiles/guns/faction/gezena/energy_gunsword.dm
index aea05fb8fe51..20a301a1396c 100644
--- a/code/modules/projectiles/guns/faction/gezena/energy_gunsword.dm
+++ b/code/modules/projectiles/guns/faction/gezena/energy_gunsword.dm
@@ -11,6 +11,8 @@
modifystate = TRUE
+ fire_delay = 0.16 SECONDS
+
wield_delay = 0.7 SECONDS
wield_slowdown = 0.35
@@ -50,10 +52,6 @@
cell_type = /obj/item/stock_parts/cell/gun/pgf
ammo_type = list(/obj/item/ammo_casing/energy/pgf , /obj/item/ammo_casing/energy/disabler/hitscan)
-/obj/item/gun/energy/kalix/pgf/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/automatic_fire, 0.16 SECONDS)
-
/obj/projectile/beam/hitscan/kalix/pgf
name = "concentrated energy"
tracer_type = /obj/effect/projectile/tracer/pgf
@@ -105,6 +103,11 @@
modifystate = FALSE
+ gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_FULLAUTO)
+ default_firemode = FIREMODE_SEMIAUTO
+
+ fire_delay = 0.2 SECONDS
+
wield_delay = 0.7 SECONDS
wield_slowdown = 0.6
@@ -113,10 +116,6 @@
ammo_type = list(/obj/item/ammo_casing/energy/pgf/assault, /obj/item/ammo_casing/energy/pgf/sniper)
-/obj/item/gun/energy/kalix/pgf/heavy/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/automatic_fire, 0.2 SECONDS)
-
/obj/item/ammo_casing/energy/pgf/assault
select_name = "AR"
projectile_type = /obj/projectile/beam/hitscan/kalix/pgf/assault
diff --git a/code/modules/projectiles/guns/gunhud.dm b/code/modules/projectiles/guns/gunhud.dm
index 9d1a40db8bb6..3dad98f54219 100644
--- a/code/modules/projectiles/guns/gunhud.dm
+++ b/code/modules/projectiles/guns/gunhud.dm
@@ -18,9 +18,6 @@
// Ammo counter
#define ui_ammocounter "EAST-1:28,CENTER+1:25"
-///The gun needs to update the gun hud!
-#define COMSIG_UPDATE_AMMO_HUD "update_ammo_hud"
-
/datum/hud
var/atom/movable/screen/ammo_counter
@@ -233,6 +230,7 @@
/datum/component/ammo_hud/laser/cybersun
prefix = "cybersun_"
+//please be aware, this only supports 6 round revolvers. It is comically easy to support more or less rounds,like in game there are 7 round and 5 round revolvers, but that requires sprites, and i'm lasy
/datum/component/ammo_hud/revolver
prefix = "revolver_"
@@ -285,3 +283,55 @@
round_images += current_bullet_image
hud.update_overlays(round_images)
+
+/datum/component/ammo_hud/eoehoma
+ backing_color = "#cb001a"
+
+/datum/component/ammo_hud/eoehoma/update_hud()
+ var/obj/item/gun/ballistic/automatic/assault/e40/pew = parent
+ var/obj/item/gun/energy/laser/e40_laser_secondary/pew_secondary = pew.secondary
+ hud.maptext = null
+ hud.icon_state = "[prefix]backing"
+
+ var/indicator
+ var/rounds = num2text(get_accurate_ammo_count(pew))
+ var/oth_o
+ var/oth_t
+ var/oth_h
+
+ var/current_firemode = pew.gun_firemodes[pew.firemode_index]
+ if(current_firemode == FIREMODE_FULLAUTO)
+ if(!pew.magazine)
+ hud.set_hud(backing_color, "[prefix]oe", "[prefix]te", "[prefix]he", "[prefix]no_mag")
+ return
+ if(!pew.get_ammo())
+ hud.set_hud(backing_color, "[prefix]oe", "[prefix]te", "[prefix]he", "[prefix]empty_flash")
+ return
+ rounds = num2text(get_accurate_ammo_count(pew))
+ indicator = "bullet"
+ else
+ if(!pew_secondary.cell)
+ hud.set_hud(backing_color, "[prefix]oe", "[prefix]te", "[prefix]he", "[prefix]no_mag")
+ return
+ if(!get_accurate_laser_count(pew_secondary))
+ hud.set_hud(backing_color, "[prefix]oe", "[prefix]te", "[prefix]he", "[prefix]empty_flash_laser")
+ return
+ rounds = num2text(get_accurate_laser_count(pew_secondary))
+ indicator = "laser"
+
+
+ switch(length(rounds))
+ if(1)
+ oth_o = "[prefix]o[rounds[1]]"
+ if(2)
+ oth_o = "[prefix]o[rounds[2]]"
+ oth_t = "[prefix]t[rounds[1]]"
+ if(3)
+ oth_o = "[prefix]o[rounds[3]]"
+ oth_t = "[prefix]t[rounds[2]]"
+ oth_h = "[prefix]h[rounds[1]]"
+ else
+ oth_o = "[prefix]o9"
+ oth_t = "[prefix]t9"
+ oth_h = "[prefix]h9"
+ hud.set_hud(backing_color, oth_o, oth_t, oth_h, indicator)
diff --git a/code/modules/projectiles/projectile/bullets/gauss.dm b/code/modules/projectiles/projectile/bullets/gauss.dm
index 0955745ed798..6011adb61c88 100644
--- a/code/modules/projectiles/projectile/bullets/gauss.dm
+++ b/code/modules/projectiles/projectile/bullets/gauss.dm
@@ -5,7 +5,8 @@
icon_state = "gauss-pellet"
damage = 25
range = 35
- light_color = COLOR_SOFT_RED
+ light_system = 2
+ light_color = MOVABLE_LIGHT
light_range = 3
// Ferromagnetic Lance (GAR AR)
diff --git a/code/modules/projectiles/projectile/bullets/rifle.dm b/code/modules/projectiles/projectile/bullets/rifle.dm
index ddd3319122c7..f7b963cff94b 100644
--- a/code/modules/projectiles/projectile/bullets/rifle.dm
+++ b/code/modules/projectiles/projectile/bullets/rifle.dm
@@ -77,5 +77,5 @@
/obj/projectile/bullet/c299
name = ".229 Eoehoma caseless bullet"
- damage = 25
- armour_penetration = 20
+ damage = 20
+ armour_penetration = 10
diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm
index 366fb41790ab..7cf31dc83ca6 100644
--- a/code/modules/surgery/bodyparts/bodyparts.dm
+++ b/code/modules/surgery/bodyparts/bodyparts.dm
@@ -745,8 +745,8 @@
bone_status = BONE_FLAG_NORMAL
/obj/item/bodypart/proc/on_mob_move()
- // Dont trigger if it isn't broken or if it has no owner
- if(bone_status != BONE_FLAG_BROKEN || !owner)
+ // Dont trigger if it isn't broken or if it has no owner or is buckled to a rollerbed
+ if(bone_status != BONE_FLAG_BROKEN || !owner || istype(owner?.buckled, /obj/structure/bed/roller))
return
if(prob(5))
diff --git a/html/changelogs/AutoChangeLog-pr-2931.yml b/html/changelogs/AutoChangeLog-pr-2931.yml
new file mode 100644
index 000000000000..3ee174b3f911
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-2931.yml
@@ -0,0 +1,5 @@
+author: Zevotech
+changes:
+ - {rscadd: remapped and renamed ashwalker_shrine into lavaland_surface_buried_shrine}
+ - {rscadd: Necropolis walls have been renamed to thick stone walls.}
+delete-after: true
diff --git a/html/changelogs/AutoChangeLog-pr-3046.yml b/html/changelogs/AutoChangeLog-pr-3046.yml
deleted file mode 100644
index 2a6fdd6b1d5e..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3046.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: FalloutFalcon
-changes:
- - {rscdel: Trophies can no longer be used in crushers}
-delete-after: true
diff --git a/html/changelogs/AutoChangeLog-pr-3061.yml b/html/changelogs/AutoChangeLog-pr-3061.yml
new file mode 100644
index 000000000000..cce63207623b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3061.yml
@@ -0,0 +1,9 @@
+author: rye-rice
+changes:
+ - {rscadd: Changing firemodes on guns now have new sprites}
+ - {bugfix: The E-40 now works as intended!}
+ - {rscadd: The E-40 now has an ammo counter}
+ - {balance: The P16 shoots slightly faster.}
+ - {balance: Two E-40s max are obtainable from the black market should it spawn.
+ Blank market price cap of the E-40 has also increased}
+delete-after: true
diff --git a/html/changelogs/AutoChangeLog-pr-3065.yml b/html/changelogs/AutoChangeLog-pr-3065.yml
deleted file mode 100644
index 2ce48895bc29..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3065.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: SomeguyManperson
-changes:
- - {bugfix: The shadow's gunslinger buff now properly provides an AP bonus}
-delete-after: true
diff --git a/html/changelogs/AutoChangeLog-pr-3079.yml b/html/changelogs/AutoChangeLog-pr-3079.yml
new file mode 100644
index 000000000000..7bbcaa88eb5a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3079.yml
@@ -0,0 +1,4 @@
+author: Sun-Soaked
+changes:
+ - {bugfix: combat knives and their subtypes now once again have sprites.}
+delete-after: true
diff --git a/html/changelogs/archive/2024-06.yml b/html/changelogs/archive/2024-06.yml
index 090ed888b9b0..b6d113723f62 100644
--- a/html/changelogs/archive/2024-06.yml
+++ b/html/changelogs/archive/2024-06.yml
@@ -108,3 +108,13 @@
rkz, Benjamin(benbot16), Rohesie, Qustinnus, jlsnow301:
- refactor: refactored do_afters to use timed_action_flags for unique args
- code_imp: centralized do_mob and do_atom into do_after
+2024-06-05:
+ FalloutFalcon:
+ - rscdel: Trophies can no longer be used in crushers
+ - bugfix: fixed CODEOWNERS, i hope
+ SomeguyManperson:
+ - bugfix: The shadow's gunslinger buff now properly provides an AP bonus
+ - balance: Rollerbeds stop broken bone damage ticks from occurring while buckled
+2024-06-06:
+ SomeguyManperson:
+ - bugfix: melee hermits have had their immortal snail deals revoked
diff --git a/icons/hud/gun_hud.dmi b/icons/hud/gun_hud.dmi
index a24f7f2964f3..d108a6088e8f 100644
Binary files a/icons/hud/gun_hud.dmi and b/icons/hud/gun_hud.dmi differ
diff --git a/icons/mob/actions/actions_items.dmi b/icons/mob/actions/actions_items.dmi
index c52e55c475a6..9baf5cdde9b3 100644
Binary files a/icons/mob/actions/actions_items.dmi and b/icons/mob/actions/actions_items.dmi differ