diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 8e73f4427152..950887721316 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -4,22 +4,39 @@ # In the event that multiple org members are to be informed of changes # to the same file or dir, add them to the end under Multiple Owners -# MarkSuckerberg -/code/controllers/subsystem/shuttle.dm @MarkSuckerberg -/code/modules/shuttle/ @MarkSuckerberg -/code/modules/overmap/ @MarkSuckerberg - -# Teams +# TEAMS # Map Maintainers /_maps/ @shiptest-ss13/maptainers # Sprite Maintainers /icons/ @shiptest-ss13/spritetainers -/whitesands/icons/ @shiptest-ss13/spritetainers # CI and tool chains /tools/ @shiptest-ss13/admins -#SIC SEMPER TYRANNIS + +# MAINTAINERS + +# FalloutFalcon + +/code/game/objects/items/storage/ration.dm @FalloutFalcon +/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/reagents/chemistry/reagents/trickwine_reagents.dm @FalloutFalcon +/code/modules/unit_tests/icons/ @FalloutFalcon + +# MarkSuckerberg + +/code/controllers/subsystem/shuttle.dm @MarkSuckerberg +/code/modules/shuttle/ @MarkSuckerberg +/code/modules/overmap/ @MarkSuckerberg /_maps/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm @MarkSuckerberg + + +# CONTRIBUTORS + + +# MULTIPLE OWNERS diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index d8e1a4830773..168b9038b246 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -15,7 +15,6 @@ add: Added new things add: Added more things del: Removed old things -tweak: tweaked a few things balance: rebalanced something fix: fixed a few things soundadd: added a new sound thingy diff --git a/Dockerfile b/Dockerfile index 4a8028dc7fca..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 @@ -12,8 +12,8 @@ RUN dpkg --add-architecture i386 \ && apt-get update \ && apt-get install -y --no-install-recommends \ curl ca-certificates gcc-multilib \ - g++-multilib libc6-i386 zlib1g-dev:i386 \ - libssl-dev:i386 pkg-config:i386 git \ + 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 @@ -34,7 +34,7 @@ RUN git init \ && git remote add origin \$AUXMOS_REPO \ && git fetch --depth 1 origin \$AUXMOS_VERSION" \ && git checkout FETCH_HEAD \ - && cargo rustc --target=i686-unknown-linux-gnu --release --features all_reaction_hooks,katmos -- -C target-cpu=native + && env PKG_CONFIG_ALLOW_CROSS=1 cargo build --release --target=i686-unknown-linux-gnu --features "all_reaction_hooks,katmos" # Install nodejs which is required to deploy Shiptest FROM base as node diff --git a/_maps/RandomRuins/BeachRuins/beach_fishing_hut.dmm b/_maps/RandomRuins/BeachRuins/beach_fishing_hut.dmm index 4aaff2b5a160..84fabfbe5ff7 100644 --- a/_maps/RandomRuins/BeachRuins/beach_fishing_hut.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_fishing_hut.dmm @@ -667,7 +667,7 @@ /area/overmap_encounter/planetoid/beachplanet/explored) "Bg" = ( /obj/effect/turf_decal/corner/opaque/pink/diagonal, -/mob/living/simple_animal/hostile/pirate/melee{ +/mob/living/simple_animal/hostile/human/pirate/melee{ faction = list("beach","pirate") }, /turf/open/floor/plastic, @@ -827,7 +827,7 @@ /area/ruin/beach) "Gt" = ( /obj/effect/turf_decal/corner/opaque/lightgrey/diagonal, -/mob/living/simple_animal/hostile/cat_butcherer{ +/mob/living/simple_animal/hostile/human/cat_butcherer{ atmos_requirements = list("min_oxy"=0,"max_oxy"=0,"min_tox"=0,"max_tox"=0,"min_co2"=0,"max_co2"=0,"min_n2"=0,"max_n2"=0); desc = "A profession carp butcher, gone mad due to carptoxin exposure. There seems to be something in their pocket..."; faction = list("beach","pirate"); @@ -853,7 +853,7 @@ "GP" = ( /obj/structure/chair/sofa/brown/right/directional/south, /obj/effect/decal/cleanable/cobweb, -/mob/living/simple_animal/hostile/pirate/melee{ +/mob/living/simple_animal/hostile/human/pirate/melee{ faction = list("beach","pirate") }, /turf/open/floor/carpet, @@ -1045,7 +1045,7 @@ /obj/structure/chair/plastic{ dir = 8 }, -/mob/living/simple_animal/hostile/pirate/ranged{ +/mob/living/simple_animal/hostile/human/pirate/ranged{ faction = list("beach","pirate") }, /turf/open/floor/wood/ebony, @@ -1135,7 +1135,7 @@ /area/ruin/beach) "Rh" = ( /obj/structure/chair/sofa/brown/corner/directional/south, -/mob/living/simple_animal/hostile/pirate/melee{ +/mob/living/simple_animal/hostile/human/pirate/melee{ faction = list("beach","pirate") }, /turf/open/floor/carpet, @@ -1250,7 +1250,7 @@ pixel_x = 4; layer = 2.9 }, -/mob/living/simple_animal/hostile/pirate/ranged{ +/mob/living/simple_animal/hostile/human/pirate/ranged{ faction = list("beach","pirate") }, /turf/open/floor/wood/ebony, @@ -1333,7 +1333,7 @@ /turf/open/water/beach, /area/overmap_encounter/planetoid/beachplanet/explored) "ZJ" = ( -/mob/living/simple_animal/hostile/pirate/melee{ +/mob/living/simple_animal/hostile/human/pirate/melee{ faction = list("beach","pirate") }, /turf/open/floor/wood, diff --git a/_maps/RandomRuins/BeachRuins/beach_pirate_crash.dmm b/_maps/RandomRuins/BeachRuins/beach_pirate_crash.dmm index 3cdd90e5e1cb..e47ffa92a5e9 100644 --- a/_maps/RandomRuins/BeachRuins/beach_pirate_crash.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_pirate_crash.dmm @@ -385,7 +385,7 @@ }, /area/overmap_encounter/planetoid/beachplanet/explored) "jE" = ( -/mob/living/simple_animal/hostile/pirate/ranged{ +/mob/living/simple_animal/hostile/human/pirate/ranged{ environment_smash = 0; faction = list("pirate","mining") }, @@ -522,7 +522,7 @@ /obj/structure/cable{ icon_state = "1-4" }, -/mob/living/simple_animal/hostile/pirate/melee{ +/mob/living/simple_animal/hostile/human/pirate/melee{ environment_smash = 0; faction = list("pirate","mining") }, @@ -1508,7 +1508,7 @@ /turf/open/floor/plating/asteroid/sand/lit, /area/overmap_encounter/planetoid/cave/explored) "Vc" = ( -/mob/living/simple_animal/hostile/pirate/melee{ +/mob/living/simple_animal/hostile/human/pirate/melee{ environment_smash = 0; faction = list("pirate","mining") }, diff --git a/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm b/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm index 7943cf93372e..e97a926aec6b 100644 --- a/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm @@ -417,7 +417,7 @@ }, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, -/mob/living/simple_animal/hostile/pirate/ranged/space, +/mob/living/simple_animal/hostile/human/pirate/ranged/space, /turf/open/floor/wood, /area/ruin/beach/treasure_cove) "oR" = ( @@ -970,12 +970,12 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt/dust, -/mob/living/simple_animal/hostile/pirate/melee, +/mob/living/simple_animal/hostile/human/pirate/melee, /turf/open/floor/plating/dirt/jungle/lit, /area/ruin/beach/treasure_cove) "EU" = ( /obj/effect/decal/cleanable/dirt/dust, -/mob/living/simple_animal/hostile/pirate/melee, +/mob/living/simple_animal/hostile/human/pirate/melee, /turf/open/floor/plating/dirt/jungle/lit, /area/ruin/beach/treasure_cove) "Gm" = ( @@ -1301,7 +1301,7 @@ /obj/structure/chair/wood{ dir = 8 }, -/mob/living/simple_animal/hostile/pirate/ranged, +/mob/living/simple_animal/hostile/human/pirate/ranged, /turf/open/floor/carpet/red, /area/ruin/beach/treasure_cove) "SX" = ( diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_corporate_rejects.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_corporate_rejects.dmm index 28a963ed476a..c48664ffdcf3 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_surface_corporate_rejects.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_surface_corporate_rejects.dmm @@ -84,8 +84,8 @@ "cN" = ( /obj/structure/safe/floor, /obj/item/hand_tele, -/obj/item/stack/sheet/mineral/adamantine, -/obj/item/stack/sheet/mineral/adamantine, +/obj/item/stack/sheet/mineral/hidden/hellstone, +/obj/item/stack/sheet/mineral/hidden/hellstone, /turf/open/floor/plating/asteroid/snow/icemoon, /area/ruin/unpowered/corprejectrooms) "cP" = ( @@ -518,7 +518,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 9 }, -/mob/living/simple_animal/hostile/nanotrasen/ranged/assault{ +/mob/living/simple_animal/hostile/human/nanotrasen/ranged/assault{ desc = "No longer a member of Nanotrasen's more militaristic forces. Seems grumpy."; faction = list("DeserterNT"); name = "Benny Bleighch" @@ -566,7 +566,7 @@ /turf/open/floor/vault, /area/ruin/unpowered/corprejectrooms) "or" = ( -/mob/living/simple_animal/hostile/nanotrasen/elite{ +/mob/living/simple_animal/hostile/human/nanotrasen/elite{ desc = "A former major player for Nanotrasen militaristic needs. He doesn't seem like someone who'd want to talk over tea."; faction = list("DeserterNT"); name = "Sam the Sharp" @@ -780,7 +780,7 @@ /area/ruin/unpowered/corprejectrooms) "tb" = ( /obj/effect/turf_decal/corner/opaque/white/diagonal, -/mob/living/simple_animal/hostile/nanotrasen/ranged/smg{ +/mob/living/simple_animal/hostile/human/nanotrasen/ranged/smg{ desc = "An officer no longer part of Nanotrasen's private security force, he seems rather unpleased to meet you."; faction = list("DeserterNT"); name = "Rebecca Slouch" @@ -1064,7 +1064,7 @@ /obj/structure/cable/blue{ icon_state = "4-9" }, -/mob/living/simple_animal/hostile/nanotrasen/ranged/smg{ +/mob/living/simple_animal/hostile/human/nanotrasen/ranged/smg{ desc = "An officer no longer part of Nanotrasen's private security force, he seems rather unpleased to meet you."; faction = list("DeserterNT"); name = "Gloria the Glorious" @@ -1106,7 +1106,7 @@ /obj/structure/chair{ dir = 8 }, -/mob/living/simple_animal/hostile/nanotrasen/screaming{ +/mob/living/simple_animal/hostile/human/nanotrasen/screaming{ desc = "An officer no longer part of Nanotrasen's private security force, he seems rather unpleased to meet you."; faction = list("DeserterNT"); name = "Jimmy Firecracker" @@ -1726,11 +1726,11 @@ /obj/item/spacecash/bundle/c1000, /obj/item/spacecash/bundle/c1000, /obj/item/stack/sheet/bluespace_crystal/five, -/obj/item/stack/sheet/mineral/bananium{ +/obj/item/stack/sheet/mineral/hidden/hellstone{ amount = 15 }, /obj/item/stack/sheet/mineral/gold/twenty, -/obj/item/stack/sheet/mineral/runite/ten, +/obj/item/stack/sheet/mineral/hidden/hellstone/ten, /obj/item/toy/figure/captain, /obj/item/organ/cyberimp/brain/anti_stun, /obj/item/disk/design_disk/adv/knight_gear, @@ -1879,7 +1879,7 @@ /obj/structure/cable/blue{ icon_state = "4-9" }, -/mob/living/simple_animal/hostile/nanotrasen/ranged/smg{ +/mob/living/simple_animal/hostile/human/nanotrasen/ranged/smg{ desc = "An officer no longer part of Nanotrasen's private security force, he seems rather unpleased to meet you."; faction = list("DeserterNT"); name = "Todd Clorox" @@ -1902,7 +1902,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 4 }, -/mob/living/simple_animal/hostile/nanotrasen/elite{ +/mob/living/simple_animal/hostile/human/nanotrasen/elite{ desc = "A former major player for Nanotrasen militaristic needs. He doesn't seem like someone who'd want to talk over tea."; faction = list("DeserterNT"); name = "Max the Maniac" @@ -1927,7 +1927,7 @@ /area/ruin/unpowered/corprejectrooms) "Rp" = ( /obj/effect/turf_decal/corner/opaque/white/diagonal, -/mob/living/simple_animal/hostile/nanotrasen/ranged/assault{ +/mob/living/simple_animal/hostile/human/nanotrasen/ranged/assault{ desc = "No longer a member of Nanotrasen's more militaristic forces. Seems grumpy."; faction = list("DeserterNT"); name = "Gordon Lary" @@ -2003,7 +2003,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 4 }, -/mob/living/simple_animal/hostile/nanotrasen/ranged/assault{ +/mob/living/simple_animal/hostile/human/nanotrasen/ranged/assault{ desc = "No longer a member of Nanotrasen's more militaristic forces. Seems grumpy."; faction = list("DeserterNT"); name = "Gary Larson" @@ -2086,7 +2086,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 4 }, -/mob/living/simple_animal/hostile/nanotrasen/ranged/assault{ +/mob/living/simple_animal/hostile/human/nanotrasen/ranged/assault{ desc = "No longer a member of Nanotrasen's more militaristic forces. Seems grumpy."; faction = list("DeserterNT"); name = "Nancy Drew" @@ -2094,7 +2094,7 @@ /turf/open/floor/mineral/plastitanium/red, /area/ruin/unpowered/corprejectrooms) "Us" = ( -/mob/living/simple_animal/hostile/nanotrasen/ranged/smg{ +/mob/living/simple_animal/hostile/human/nanotrasen/ranged/smg{ desc = "An officer no longer part of Nanotrasen's private security force, he seems rather unpleased to meet you."; faction = list("DeserterNT"); name = "Larry Liessahl" @@ -2231,7 +2231,7 @@ /obj/structure/cable/blue{ icon_state = "0-4" }, -/mob/living/simple_animal/hostile/nanotrasen/screaming{ +/mob/living/simple_animal/hostile/human/nanotrasen/screaming{ desc = "An officer no longer part of Nanotrasen's private security force, he seems rather unpleased to meet you."; faction = list("DeserterNT"); name = "Wendy Wallaby" @@ -2286,7 +2286,7 @@ /obj/structure/cable/blue{ icon_state = "4-5" }, -/mob/living/simple_animal/hostile/nanotrasen/screaming{ +/mob/living/simple_animal/hostile/human/nanotrasen/screaming{ desc = "An officer no longer part of Nanotrasen's private security force, he seems rather unpleased to meet you."; faction = list("DeserterNT"); name = "Wetzel the Pretzel" diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_newcops.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_newcops.dmm index bf034757b5a2..149f4a579542 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_newcops.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_newcops.dmm @@ -1028,7 +1028,7 @@ /area/ruin/powered) "Wp" = ( /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/syndicate/ranged/shotgun/space, +/mob/living/simple_animal/hostile/human/syndicate/ranged/shotgun/space, /turf/open/floor/plasteel/freezer, /area/ruin/powered) "Ws" = ( diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm index 0e44f641ab4e..aee0cc51330b 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm @@ -483,7 +483,7 @@ /area/ruin/powered) "PQ" = ( /obj/effect/decal/cleanable/blood/splatter, -/mob/living/simple_animal/hostile/frontier/ranged/trooper, +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, /area/ruin/powered) diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_brazillianlab.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_brazillianlab.dmm index 7fde87854827..4954a9a5aaf4 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_brazillianlab.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_brazillianlab.dmm @@ -55,7 +55,7 @@ /turf/open/floor/plating/asteroid/snow/icemoon, /area/overmap_encounter/planetoid/cave/explored) "ct" = ( -/mob/living/simple_animal/hostile/asteroid/whitesands/ranged/hunter{ +/mob/living/simple_animal/hostile/human/hermit/ranged/hunter{ faction = list("brazillian") }, /turf/open/floor/wood{ @@ -88,7 +88,7 @@ /area/ruin/unpowered) "fB" = ( /obj/structure/chair/stool/bar, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ desc = " A wild-eyed figure, wearing tattered mining equipment and boasting a malformed body."; faction = list("brazillian") }, @@ -101,7 +101,7 @@ /turf/open/floor/plating/asteroid/snow/icemoon, /area/ruin/unpowered) "gH" = ( -/mob/living/simple_animal/hostile/asteroid/whitesands/ranged/gunslinger{ +/mob/living/simple_animal/hostile/human/hermit/ranged/gunslinger{ faction = list("brazillian") }, /turf/open/floor/carpet/green{ @@ -117,7 +117,7 @@ "hp" = ( /obj/item/stack/cable_coil, /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/asteroid/whitesands/ranged/hunter{ +/mob/living/simple_animal/hostile/human/hermit/ranged/hunter{ faction = list("brazillian") }, /turf/open/floor/wood{ @@ -128,7 +128,7 @@ /turf/closed/wall/mineral/wood/nonmetal, /area/overmap_encounter/planetoid/cave/explored) "ht" = ( -/mob/living/simple_animal/hostile/asteroid/whitesands/ranged/hunter{ +/mob/living/simple_animal/hostile/human/hermit/ranged/hunter{ faction = list("brazillian") }, /turf/open/floor/plating/asteroid/snow/icemoon, @@ -177,7 +177,7 @@ /obj/structure/chair/wood{ dir = 1 }, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ desc = " A wild-eyed figure, wearing tattered mining equipment and boasting a malformed body."; faction = list("brazillian") }, @@ -341,7 +341,7 @@ /turf/open/floor/plating/asteroid/snow/icemoon, /area/overmap_encounter/planetoid/cave/explored) "qS" = ( -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ desc = "The greatest chef this side of the wastes."; faction = list("brazillian"); health = 150; @@ -475,7 +475,7 @@ /obj/structure/bed, /obj/structure/curtain, /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ desc = " A wild-eyed figure, wearing tattered mining equipment and boasting a malformed body."; faction = list("brazillian") }, @@ -535,7 +535,7 @@ /turf/open/floor/plating/asteroid/snow/icemoon, /area/overmap_encounter/planetoid/cave/explored) "zy" = ( -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ desc = " A wild-eyed figure, wearing tattered mining equipment and boasting a malformed body."; faction = list("brazillian") }, @@ -545,7 +545,7 @@ /obj/structure/chair/wood{ dir = 8 }, -/mob/living/simple_animal/hostile/asteroid/whitesands/ranged/hunter{ +/mob/living/simple_animal/hostile/human/hermit/ranged/hunter{ faction = list("brazillian") }, /turf/open/floor/wood{ @@ -635,7 +635,7 @@ /area/ruin/unpowered) "CI" = ( /obj/structure/flora/junglebush/c, -/mob/living/simple_animal/hostile/asteroid/whitesands/ranged/hunter{ +/mob/living/simple_animal/hostile/human/hermit/ranged/hunter{ faction = list("brazillian") }, /turf/open/floor/plating/grass/jungle{ @@ -775,7 +775,7 @@ "JM" = ( /obj/structure/bed, /obj/structure/curtain, -/mob/living/simple_animal/hostile/asteroid/whitesands/ranged/hunter{ +/mob/living/simple_animal/hostile/human/hermit/ranged/hunter{ faction = list("brazillian") }, /obj/effect/turf_decal/corner/opaque/green/border, @@ -827,7 +827,7 @@ /obj/structure/chair/stool/bar{ dir = 4 }, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ desc = " A wild-eyed figure, wearing tattered mining equipment and boasting a malformed body."; faction = list("brazillian") }, @@ -895,7 +895,7 @@ }, /area/ruin/unpowered) "NR" = ( -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ desc = " A wild-eyed figure, wearing tattered mining equipment and boasting a malformed body."; faction = list("brazillian") }, @@ -1070,7 +1070,7 @@ }, /area/ruin/unpowered) "Ux" = ( -/mob/living/simple_animal/hostile/asteroid/whitesands/ranged/hunter{ +/mob/living/simple_animal/hostile/human/hermit/ranged/hunter{ faction = list("brazillian") }, /turf/open/floor/plating/grass/jungle{ @@ -1205,7 +1205,7 @@ }, /area/ruin/unpowered) "Yy" = ( -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ desc = " A wild-eyed figure, wearing tattered mining equipment and boasting a malformed body."; faction = list("brazillian") }, diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_drakelair.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_drakelair.dmm index 113fde2af9c7..d000b8fd17a7 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_drakelair.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_drakelair.dmm @@ -128,7 +128,6 @@ /obj/structure/stone_tile/slab, /mob/living/simple_animal/hostile/megafauna/dragon/icemoon{ loot = list(/obj/structure/closet/crate/necropolis/dragon,/obj/item/keycard/gatedrop/drakelair); - crusher_loot = list(/obj/structure/closet/crate/necropolis/dragon/crusher,/obj/item/keycard/gatedrop/drakelair) }, /turf/open/indestructible/boss, /area/ruin) diff --git a/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm b/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm index bb99ab04efb3..2f671753e72c 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm @@ -658,7 +658,7 @@ dir = 4; name = "tactical swivel chair" }, -/mob/living/simple_animal/hostile/frontier/ranged/officer/neutured, +/mob/living/simple_animal/hostile/human/frontier/ranged/officer/neutured, /turf/open/floor/plasteel/dark, /area/ruin/jungle/cavecrew/bridge) "iE" = ( @@ -1342,7 +1342,7 @@ /obj/structure/cable{ icon_state = "1-8" }, -/mob/living/simple_animal/hostile/frontier/ranged/trooper/heavy/neutered, +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/heavy/neutered, /turf/open/floor/plasteel/patterned/brushed, /area/ruin/jungle/cavecrew/security) "pB" = ( @@ -1432,7 +1432,7 @@ /area/ruin/jungle/cavecrew/hallway) "rN" = ( /obj/effect/decal/cleanable/dirt/dust, -/mob/living/simple_animal/hostile/frontier/ranged/trooper/neutered, +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/neutered, /turf/open/floor/plating/dirt/old, /area/ruin/powered) "rQ" = ( @@ -1832,7 +1832,7 @@ /obj/structure/railing/corner{ dir = 8 }, -/mob/living/simple_animal/hostile/frontier/ranged/trooper/skm/neutured, +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/skm/neutured, /turf/open/floor/plasteel/stairs{ dir = 1 }, @@ -2354,7 +2354,7 @@ /obj/effect/turf_decal/spline/fancy/opaque/black{ dir = 8 }, -/mob/living/simple_animal/hostile/frontier/ranged/neutered, +/mob/living/simple_animal/hostile/human/frontier/ranged/neutered, /turf/open/floor/plasteel, /area/ruin/jungle/cavecrew/hallway) "CN" = ( @@ -2365,7 +2365,7 @@ dir = 9 }, /obj/effect/decal/cleanable/dirt/dust, -/mob/living/simple_animal/hostile/frontier, +/mob/living/simple_animal/hostile/human/frontier, /obj/structure/cable{ icon_state = "4-8" }, @@ -2570,7 +2570,7 @@ /turf/open/floor/plating/dirt/jungle, /area/overmap_encounter/planetoid/cave/explored) "Fw" = ( -/mob/living/simple_animal/hostile/frontier/ranged/mosin/neutered, +/mob/living/simple_animal/hostile/human/frontier/ranged/mosin/neutered, /turf/open/floor/plating/dirt/jungle, /area/ruin/powered) "Fy" = ( @@ -2797,7 +2797,7 @@ dir = 4; layer = 3.1 }, -/mob/living/simple_animal/hostile/frontier/ranged/neutered, +/mob/living/simple_animal/hostile/human/frontier/ranged/neutered, /turf/open/water/jungle, /area/ruin/jungle/cavecrew/cargo) "II" = ( @@ -3208,7 +3208,7 @@ /obj/structure/cable{ icon_state = "2-5" }, -/mob/living/simple_animal/hostile/frontier/ranged/trooper/rifle/neutered, +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/rifle/neutered, /turf/open/floor/plasteel, /area/ruin/jungle/cavecrew/hallway) "MW" = ( @@ -3391,7 +3391,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/mob/living/simple_animal/hostile/frontier/ranged/neutered, +/mob/living/simple_animal/hostile/human/frontier/ranged/neutered, /turf/open/floor/plating, /area/ruin/powered) "Pg" = ( @@ -4092,7 +4092,7 @@ /turf/open/floor/plating/dirt/jungle, /area/ruin/powered) "Xx" = ( -/mob/living/simple_animal/hostile/frontier/ranged/mosin/neutered, +/mob/living/simple_animal/hostile/human/frontier/ranged/mosin/neutered, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/tech, /area/ship/storage) diff --git a/_maps/RandomRuins/JungleRuins/jungle_medtech_outbreak.dmm b/_maps/RandomRuins/JungleRuins/jungle_medtech_outbreak.dmm index 0f68c7b7ebd9..e8f075b9005d 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_medtech_outbreak.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_medtech_outbreak.dmm @@ -22,7 +22,7 @@ /obj/effect/turf_decal/industrial/warning{ dir = 6 }, -/mob/living/simple_animal/hostile/zombie, +/mob/living/simple_animal/hostile/human/zombie, /turf/open/floor/plasteel/white, /area/ship/science) "aM" = ( @@ -234,7 +234,7 @@ /area/ship/engineering/electrical) "fe" = ( /obj/effect/decal/cleanable/dirt/dust, -/mob/living/simple_animal/hostile/zombie{ +/mob/living/simple_animal/hostile/human/zombie{ zombiejob = "Geneticist" }, /turf/open/floor/plasteel/tech/techmaint, @@ -511,7 +511,7 @@ dir = 1 }, /obj/effect/gibspawner/human, -/mob/living/simple_animal/hostile/zombie{ +/mob/living/simple_animal/hostile/human/zombie{ zombiejob = "Janitor" }, /turf/open/floor/plasteel/dark, @@ -542,7 +542,7 @@ "jL" = ( /obj/structure/chair/comfy/orange/directional/north, /obj/effect/decal/cleanable/dirt/dust, -/mob/living/simple_animal/hostile/zombie{ +/mob/living/simple_animal/hostile/human/zombie{ name = "Zombiefied Facility Director"; zombiejob = "Research Director" }, @@ -1113,7 +1113,7 @@ /area/ship/medical) "rf" = ( /obj/effect/turf_decal/corner/opaque/orange/full, -/mob/living/simple_animal/hostile/zombie, +/mob/living/simple_animal/hostile/human/zombie, /turf/open/floor/plasteel/white, /area/ship/science/storage) "ro" = ( @@ -1281,14 +1281,14 @@ /turf/open/floor/plating, /area/ship/science/storage) "uT" = ( -/mob/living/simple_animal/hostile/zombie, +/mob/living/simple_animal/hostile/human/zombie, /turf/open/floor/plating, /area/ship/medical) "ve" = ( /obj/effect/turf_decal/industrial/warning{ dir = 10 }, -/mob/living/simple_animal/hostile/zombie, +/mob/living/simple_animal/hostile/human/zombie, /turf/open/floor/plasteel/white, /area/ship/science) "vf" = ( @@ -1308,7 +1308,7 @@ dir = 10 }, /obj/machinery/light/directional/south, -/mob/living/simple_animal/hostile/zombie, +/mob/living/simple_animal/hostile/human/zombie, /turf/open/floor/plasteel/white, /area/ship/medical) "vu" = ( @@ -1679,7 +1679,7 @@ pixel_x = -13; pixel_y = -6 }, -/mob/living/simple_animal/hostile/zombie, +/mob/living/simple_animal/hostile/human/zombie, /turf/open/floor/plasteel/tech, /area/ship/crew/office) "Bh" = ( @@ -1743,7 +1743,7 @@ /turf/open/floor/plasteel/white, /area/ship/science/storage) "Cg" = ( -/mob/living/simple_animal/hostile/zombie{ +/mob/living/simple_animal/hostile/human/zombie{ zombiejob = "Assistant" }, /obj/item/rack_parts, @@ -2208,7 +2208,7 @@ /turf/open/floor/plasteel/tech, /area/ship/science) "Jx" = ( -/mob/living/simple_animal/hostile/zombie{ +/mob/living/simple_animal/hostile/human/zombie{ zombiejob = "Chemist" }, /turf/open/floor/plasteel/white, @@ -2411,7 +2411,7 @@ pixel_x = 4; pixel_y = -13 }, -/mob/living/simple_animal/hostile/zombie{ +/mob/living/simple_animal/hostile/human/zombie{ zombiejob = "Assistant" }, /turf/open/floor/plasteel/dark, @@ -3069,7 +3069,7 @@ dir = 5 }, /obj/effect/decal/cleanable/dirt/dust, -/mob/living/simple_animal/hostile/zombie{ +/mob/living/simple_animal/hostile/human/zombie{ zombiejob = "Assistant" }, /turf/open/floor/plasteel/white, diff --git a/_maps/RandomRuins/JungleRuins/jungle_pirate.dmm b/_maps/RandomRuins/JungleRuins/jungle_pirate.dmm index 83f17d9f7026..739244a8b282 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_pirate.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_pirate.dmm @@ -124,7 +124,7 @@ /obj/structure/railing{ dir = 4 }, -/mob/living/simple_animal/hostile/pirate/ranged, +/mob/living/simple_animal/hostile/human/pirate/ranged, /turf/open/floor/wood, /area/ruin/unpowered) "qL" = ( @@ -209,11 +209,11 @@ /turf/open/floor/wood, /area/ruin/unpowered) "DH" = ( -/mob/living/simple_animal/hostile/pirate/ranged/space, +/mob/living/simple_animal/hostile/human/pirate/ranged/space, /turf/open/floor/carpet/red, /area/ruin/unpowered) "DS" = ( -/mob/living/simple_animal/hostile/pirate/ranged, +/mob/living/simple_animal/hostile/human/pirate/ranged, /turf/open/floor/wood, /area/overmap_encounter/planetoid/jungle/explored) "DV" = ( @@ -270,7 +270,7 @@ /turf/open/floor/wood, /area/ruin/unpowered) "LT" = ( -/mob/living/simple_animal/hostile/pirate/melee, +/mob/living/simple_animal/hostile/human/pirate/melee, /obj/structure/chair/wood, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, @@ -355,7 +355,7 @@ /turf/open/floor/plating/dirt/jungle/lit, /area/overmap_encounter/planetoid/jungle/explored) "UX" = ( -/mob/living/simple_animal/hostile/pirate/melee, +/mob/living/simple_animal/hostile/human/pirate/melee, /turf/open/floor/wood, /area/ruin/unpowered) "Vf" = ( @@ -391,7 +391,7 @@ /turf/open/floor/carpet/red, /area/ruin/unpowered) "XA" = ( -/mob/living/simple_animal/hostile/pirate/melee, +/mob/living/simple_animal/hostile/human/pirate/melee, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, /area/ruin/unpowered) diff --git a/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm b/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm index ebd333289382..4ecf5ee382b1 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm @@ -123,7 +123,7 @@ /turf/open/floor/plating/rust, /area/ruin/jungle/syndifort) "ef" = ( -/mob/living/simple_animal/hostile/syndicate{ +/mob/living/simple_animal/hostile/human/syndicate{ desc = "God dammit Jerry! Why the fuck are you barricading yourself in with all of our weapon supplies?"; name = "Jerry"; unsuitable_atmos_damage = 0 @@ -180,7 +180,7 @@ /turf/open/floor/plating/grass/jungle/lit, /area/overmap_encounter/planetoid/jungle/explored) "fS" = ( -/mob/living/simple_animal/hostile/syndicate{ +/mob/living/simple_animal/hostile/human/syndicate{ unsuitable_atmos_damage = 0 }, /obj/effect/decal/cleanable/dirt/dust, @@ -533,7 +533,7 @@ /turf/open/floor/mineral/plastitanium/red, /area/ruin/jungle/syndifort) "rg" = ( -/mob/living/simple_animal/hostile/syndicate/space, +/mob/living/simple_animal/hostile/human/syndicate/space, /obj/structure/cable{ icon_state = "1-2" }, @@ -1102,7 +1102,7 @@ /area/overmap_encounter/planetoid/jungle/explored) "HR" = ( /obj/structure/chair/plastic, -/mob/living/simple_animal/hostile/syndicate/ranged{ +/mob/living/simple_animal/hostile/human/syndicate/ranged{ unsuitable_atmos_damage = 0 }, /turf/open/floor/plating/dirt/jungle/lit, @@ -1365,7 +1365,7 @@ /area/ruin/jungle/syndifort) "Qs" = ( /obj/structure/cable, -/mob/living/simple_animal/hostile/syndicate{ +/mob/living/simple_animal/hostile/human/syndicate{ unsuitable_atmos_damage = 0 }, /obj/machinery/light/directional/north, 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 5001fd7a1831..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/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/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/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/RandomRuins/LavaRuins/lavaland_surface_comm_outpost.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_comm_outpost.dmm index 91b482df849f..44988210b7e4 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_comm_outpost.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_comm_outpost.dmm @@ -211,7 +211,7 @@ }, /area/ruin/unpowered/syndicate_outpost) "Ts" = ( -/mob/living/simple_animal/hostile/syndicate/ranged{ +/mob/living/simple_animal/hostile/human/syndicate/ranged{ dir = 8; health = 125; name = "Syndicate Radio Operative" diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm index ea2d614717da..943b1dccf126 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm @@ -891,7 +891,6 @@ "zb" = ( /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner{ loot = list(/obj/item/melee/transforming/cleaving_saw,/obj/item/gun/energy/kinetic_accelerator,/obj/item/keycard/gatedrop/lavacanyon); - crusher_loot = list(/obj/item/melee/transforming/cleaving_saw,/obj/item/gun/energy/kinetic_accelerator,/obj/item/crusher_trophy/miner_eye,/obj/item/keycard/gatedrop/lavacanyon) }, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/overmap_encounter/planetoid/cave/explored) diff --git a/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm b/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm index 5c3606aa6a94..b837eff979f7 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm @@ -35,7 +35,7 @@ /turf/open/floor/plastic, /area/ruin/rockplanet/nanotrasen) "aQ" = ( -/mob/living/simple_animal/hostile/nanotrasen, +/mob/living/simple_animal/hostile/human/nanotrasen, /obj/machinery/door/firedoor, /obj/effect/turf_decal/siding/white{ dir = 1 @@ -339,7 +339,7 @@ /turf/open/floor/engine, /area/ruin/rockplanet/nanotrasen) "ff" = ( -/mob/living/simple_animal/hostile/nanotrasen/ranged/smg, +/mob/living/simple_animal/hostile/human/nanotrasen/ranged/smg, /obj/effect/turf_decal/siding/white{ dir = 4 }, @@ -1347,7 +1347,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/oil, /obj/machinery/light/small/broken/directional/north, -/mob/living/simple_animal/hostile/pirate/ranged/space, +/mob/living/simple_animal/hostile/human/pirate/ranged/space, /turf/open/floor/plating, /area/ruin/rockplanet/nanotrasen) "vz" = ( @@ -1462,7 +1462,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 4 }, -/mob/living/simple_animal/hostile/nanotrasen, +/mob/living/simple_animal/hostile/human/nanotrasen, /turf/open/floor/wood{ icon_state = "wood-broken7" }, @@ -1728,7 +1728,7 @@ /turf/open/floor/plasteel/white, /area/ruin/rockplanet/nanotrasen) "CJ" = ( -/mob/living/simple_animal/hostile/pirate/melee/space, +/mob/living/simple_animal/hostile/human/pirate/melee/space, /turf/open/floor/plating{ icon_state = "panelscorched" }, @@ -1767,7 +1767,7 @@ /turf/open/floor/plasteel, /area/ruin/rockplanet/nanotrasen) "Dt" = ( -/mob/living/simple_animal/hostile/pirate/ranged/space, +/mob/living/simple_animal/hostile/human/pirate/ranged/space, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -2036,7 +2036,7 @@ /obj/effect/turf_decal/corner/opaque/red/border{ dir = 8 }, -/mob/living/simple_animal/hostile/nanotrasen/ranged, +/mob/living/simple_animal/hostile/human/nanotrasen/ranged, /turf/open/floor/plasteel/dark, /area/ruin/rockplanet/nanotrasen) "Hs" = ( @@ -2069,7 +2069,7 @@ }, /area/ruin/rockplanet/nanotrasen) "Ie" = ( -/mob/living/simple_animal/hostile/pirate/melee/space, +/mob/living/simple_animal/hostile/human/pirate/melee/space, /turf/open/floor/plating{ icon_state = "platingdmg1" }, @@ -2697,7 +2697,7 @@ /turf/open/floor/plasteel/rockvault, /area/ruin/rockplanet/nanotrasen) "Vn" = ( -/mob/living/simple_animal/hostile/nanotrasen/ranged, +/mob/living/simple_animal/hostile/human/nanotrasen/ranged, /obj/effect/turf_decal/industrial/warning{ dir = 1 }, @@ -2834,7 +2834,7 @@ /turf/open/floor/plating/dirt/jungle/lit, /area/overmap_encounter/planetoid/rockplanet/explored) "Ze" = ( -/mob/living/simple_animal/hostile/nanotrasen/ranged/smg, +/mob/living/simple_animal/hostile/human/nanotrasen/ranged/smg, /obj/effect/turf_decal/corner/transparent/purple/border{ dir = 1 }, @@ -2907,7 +2907,7 @@ /obj/structure/railing{ dir = 8 }, -/mob/living/simple_animal/hostile/nanotrasen/ranged/assault, +/mob/living/simple_animal/hostile/human/nanotrasen/ranged/assault, /turf/open/floor/plasteel/dark, /area/ruin/rockplanet/nanotrasen) "ZZ" = ( diff --git a/_maps/RandomRuins/RockRuins/rockplanet_dangerpod.dmm b/_maps/RandomRuins/RockRuins/rockplanet_dangerpod.dmm index dd6bb43fd913..cf91b07b4072 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_dangerpod.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_dangerpod.dmm @@ -8,7 +8,7 @@ /turf/open/floor/pod/dark, /area/overmap_encounter/planetoid/rockplanet/explored) "h" = ( -/mob/living/simple_animal/hostile/skeleton/plasmaminer/jackhammer, +/mob/living/simple_animal/hostile/human/skeleton/plasmaminer/jackhammer, /obj/effect/decal/cleanable/blood/old, /turf/open/floor/pod/dark, /area/overmap_encounter/planetoid/rockplanet/explored) diff --git a/_maps/RandomRuins/RockRuins/rockplanet_miningexpedition.dmm b/_maps/RandomRuins/RockRuins/rockplanet_miningexpedition.dmm index 088015c83b13..83e80f79a4a3 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_miningexpedition.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_miningexpedition.dmm @@ -114,7 +114,7 @@ /turf/open/floor/plating/asteroid/rockplanet/lit, /area/overmap_encounter/planetoid/rockplanet/explored) "sP" = ( -/mob/living/simple_animal/hostile/skeleton/plasmaminer, +/mob/living/simple_animal/hostile/human/skeleton/plasmaminer, /turf/open/floor/plating/asteroid/rockplanet/lit, /area/overmap_encounter/planetoid/rockplanet/explored) "tN" = ( diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm index f8b569cebdf4..f59cff023b4a 100644 --- a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm +++ b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm @@ -89,7 +89,7 @@ }, /area/overmap_encounter/planetoid/sand/explored) "eq" = ( -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor, +/mob/living/simple_animal/hostile/human/hermit/survivor, /turf/open/floor/plating/asteroid/whitesands{ light_range = 2 }, @@ -157,7 +157,7 @@ /area/ruin) "fO" = ( /obj/structure/chair/plastic, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ faction = list("adobe") }, /turf/open/floor/plating/asteroid/whitesands{ @@ -360,7 +360,7 @@ }, /area/overmap_encounter/planetoid/sand/explored) "nx" = ( -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ dir = 4; faction = list("adobe") }, @@ -425,7 +425,7 @@ "oB" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/old, -/mob/living/simple_animal/hostile/asteroid/whitesands/ranged/hunter{ +/mob/living/simple_animal/hostile/human/hermit/ranged/hunter{ faction = list("saloon"); name = "Whitesands Bartender" }, @@ -592,7 +592,7 @@ /turf/open/floor/concrete, /area/ruin) "we" = ( -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor, +/mob/living/simple_animal/hostile/human/hermit/survivor, /turf/open/floor/plating/asteroid/whitesands/dried{ light_range = 2 }, @@ -678,14 +678,14 @@ }, /area/overmap_encounter/planetoid/sand/explored) "zB" = ( -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ dir = 1; faction = list("adobe") }, /turf/open/floor/concrete, /area/ruin) "AC" = ( -/mob/living/simple_animal/hostile/asteroid/whitesands/ranged/gunslinger{ +/mob/living/simple_animal/hostile/human/hermit/ranged/gunslinger{ dir = 4; faction = list("adobe") }, @@ -704,7 +704,7 @@ /turf/open/floor/wood, /area/ruin) "AR" = ( -/mob/living/simple_animal/hostile/asteroid/whitesands/ranged/hunter, +/mob/living/simple_animal/hostile/human/hermit/ranged/hunter, /turf/open/floor/plating/asteroid/whitesands{ light_range = 2 }, @@ -782,14 +782,14 @@ /area/ruin) "Ed" = ( /obj/item/chair/stool/bar, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ dir = 1; faction = list("saloon") }, /turf/open/floor/wood, /area/ruin) "Ef" = ( -/mob/living/simple_animal/hostile/asteroid/whitesands/ranged/hunter{ +/mob/living/simple_animal/hostile/human/hermit/ranged/hunter{ dir = 4; faction = list("adobe") }, @@ -939,7 +939,7 @@ /obj/structure/chair/plastic{ dir = 4 }, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ dir = 4; faction = list("adobe") }, @@ -1189,7 +1189,7 @@ /turf/open/floor/concrete, /area/ruin) "TH" = ( -/mob/living/simple_animal/hostile/asteroid/whitesands/ranged/hunter{ +/mob/living/simple_animal/hostile/human/hermit/ranged/hunter{ faction = list("adobe") }, /turf/open/floor/concrete, @@ -1200,7 +1200,7 @@ /area/ruin) "UT" = ( /obj/structure/chair/stool/bar, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ dir = 1; faction = list("saloon") }, @@ -1209,7 +1209,7 @@ "Vq" = ( /obj/structure/chair/stool/bar, /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ dir = 8; faction = list("saloon") }, @@ -1253,7 +1253,7 @@ /area/overmap_encounter/planetoid/sand/explored) "Ws" = ( /obj/structure/chair/stool/bar, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ dir = 8; faction = list("saloon") }, diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_drugstore.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_drugstore.dmm index 4bf53b738636..7f69ca337c00 100644 --- a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_drugstore.dmm +++ b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_drugstore.dmm @@ -80,7 +80,7 @@ /turf/open/floor/wood, /area/ruin/unpowered) "n" = ( -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ dir = 4 }, /turf/open/floor/wood{ diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_saloon.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_saloon.dmm index b17207b75020..400a710091b4 100644 --- a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_saloon.dmm +++ b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_saloon.dmm @@ -243,7 +243,7 @@ }, /obj/effect/turf_decal/siding/wood, /obj/structure/chair/stool/bar, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor, +/mob/living/simple_animal/hostile/human/hermit/survivor, /turf/open/floor/wood, /area/ruin/whitesands/saloon) "gC" = ( @@ -328,7 +328,7 @@ "ih" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/old, -/mob/living/simple_animal/hostile/asteroid/whitesands/ranged/hunter{ +/mob/living/simple_animal/hostile/human/hermit/ranged/hunter{ name = "Hermit Bartender" }, /turf/open/floor/wood{ @@ -499,7 +499,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ dir = 1 }, /turf/open/floor/wood, @@ -615,7 +615,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 6 }, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ dir = 1 }, /turf/open/floor/wood, @@ -654,7 +654,7 @@ /obj/structure/chair/stool/bar{ dir = 1 }, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ dir = 1 }, /turf/open/floor/wood{ @@ -666,7 +666,7 @@ dir = 8 }, /obj/item/chair/stool/bar, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ dir = 8 }, /turf/open/floor/wood, @@ -744,7 +744,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/mob/living/simple_animal/hostile/asteroid/whitesands/ranged/hunter{ +/mob/living/simple_animal/hostile/human/hermit/ranged/hunter{ dir = 8 }, /turf/open/floor/wood{ @@ -756,7 +756,7 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ dir = 1 }, /turf/open/floor/wood{ @@ -981,7 +981,7 @@ /area/ruin/whitesands/saloon) "DT" = ( /obj/structure/chair/wood, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ name = "Robert"; desc = "This fellow seems relatively sane and normal"; faction = list("neutral") @@ -1114,7 +1114,7 @@ /obj/structure/chair/stool/bar{ dir = 8 }, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ dir = 8 }, /turf/open/floor/wood, @@ -1148,7 +1148,7 @@ }, /area/ruin/whitesands/saloon) "Ie" = ( -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ dir = 1 }, /turf/open/floor/plating/asteroid/whitesands/lit, @@ -1389,7 +1389,7 @@ /obj/structure/chair/stool/bar{ dir = 8 }, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ dir = 8 }, /turf/open/floor/wood, @@ -1421,7 +1421,7 @@ /turf/open/floor/wood, /area/ruin/whitesands/saloon) "QV" = ( -/mob/living/simple_animal/hostile/asteroid/whitesands/ranged/hunter{ +/mob/living/simple_animal/hostile/human/hermit/ranged/hunter{ name = "Hermit Bartender"; dir = 4 }, @@ -1497,7 +1497,7 @@ /area/ruin/whitesands/saloon) "Ua" = ( /obj/structure/chair/stool/bar, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ dir = 8 }, /turf/open/floor/wood{ @@ -1525,7 +1525,7 @@ /obj/structure/sign/poster/official/cohiba_robusto_ad{ pixel_y = 32 }, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor, +/mob/living/simple_animal/hostile/human/hermit/survivor, /turf/open/floor/wood{ icon_state = "wood-broken7" }, @@ -1641,7 +1641,7 @@ /obj/structure/chair/stool/bar{ dir = 1 }, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ dir = 1 }, /turf/open/floor/wood, diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_chokepoint.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_chokepoint.dmm index 5d63a30bf22b..d4fa2737cd38 100644 --- a/_maps/RandomRuins/SandRuins/whitesands_surface_chokepoint.dmm +++ b/_maps/RandomRuins/SandRuins/whitesands_surface_chokepoint.dmm @@ -26,7 +26,7 @@ "g" = ( /obj/structure/bed, /obj/item/bedsheet/hos, -/mob/living/simple_animal/hostile/nanotrasen/ranged{ +/mob/living/simple_animal/hostile/human/nanotrasen/ranged{ atmos_requirements = list("min_oxy"=5,"max_oxy"=0,"min_tox"=0,"max_tox"=0,"min_co2"=0,"max_co2"=999,"min_n2"=0,"max_n2"=0); damage_coeff = list("brute"=1,"fire"=1,"toxin"=1,"clone"=1,"stamina"=0,"oxygen"=0); name = "\improper Nanotrasen Stranded Security Officer" @@ -34,7 +34,7 @@ /turf/open/floor/plating/asteroid/whitesands/dried, /area/ruin) "h" = ( -/mob/living/simple_animal/hostile/nanotrasen/ranged{ +/mob/living/simple_animal/hostile/human/nanotrasen/ranged{ atmos_requirements = list("min_oxy"=5,"max_oxy"=0,"min_tox"=0,"max_tox"=0,"min_co2"=0,"max_co2"=999,"min_n2"=0,"max_n2"=0); damage_coeff = list("brute"=1,"fire"=1,"toxin"=1,"clone"=1,"stamina"=0,"oxygen"=0); dir = 4; @@ -46,7 +46,7 @@ /obj/structure/chair/wood{ dir = 8 }, -/mob/living/simple_animal/hostile/nanotrasen/ranged{ +/mob/living/simple_animal/hostile/human/nanotrasen/ranged{ atmos_requirements = list("min_oxy"=5,"max_oxy"=0,"min_tox"=0,"max_tox"=0,"min_co2"=0,"max_co2"=999,"min_n2"=0,"max_n2"=0); damage_coeff = list("brute"=1,"fire"=1,"toxin"=1,"clone"=1,"stamina"=0,"oxygen"=0); dir = 8; @@ -93,7 +93,7 @@ /turf/open/floor/plating/asteroid/whitesands, /area/ruin) "v" = ( -/mob/living/simple_animal/hostile/nanotrasen/ranged{ +/mob/living/simple_animal/hostile/human/nanotrasen/ranged{ atmos_requirements = list("min_oxy"=5,"max_oxy"=0,"min_tox"=0,"max_tox"=0,"min_co2"=0,"max_co2"=999,"min_n2"=0,"max_n2"=0); damage_coeff = list("brute"=1,"fire"=1,"toxin"=1,"clone"=1,"stamina"=0,"oxygen"=0); dir = 8; diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_onlyaspoonful.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_onlyaspoonful.dmm index f74a8895976a..f84ccaf6c8ef 100644 --- a/_maps/RandomRuins/SandRuins/whitesands_surface_onlyaspoonful.dmm +++ b/_maps/RandomRuins/SandRuins/whitesands_surface_onlyaspoonful.dmm @@ -65,7 +65,7 @@ /area/ruin/powered) "ew" = ( /obj/effect/decal/cleanable/dirt/dust, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor, +/mob/living/simple_animal/hostile/human/hermit/survivor, /turf/open/floor/plastic, /area/ruin/powered) "eH" = ( @@ -155,7 +155,7 @@ /turf/open/floor/plastic, /area/ruin/powered) "hw" = ( -/mob/living/simple_animal/hostile/asteroid/whitesands/ranged/hunter, +/mob/living/simple_animal/hostile/human/hermit/ranged/hunter, /turf/open/floor/plastic, /area/ruin/powered) "hA" = ( @@ -318,7 +318,7 @@ pixel_y = 9 }, /obj/effect/decal/cleanable/blood/tracks, -/mob/living/simple_animal/hostile/asteroid/whitesands/ranged/gunslinger, +/mob/living/simple_animal/hostile/human/hermit/ranged/gunslinger, /turf/open/floor/plastic, /area/ruin/powered) "wr" = ( @@ -439,7 +439,7 @@ /turf/open/floor/plastic, /area/ruin/powered) "EC" = ( -/mob/living/simple_animal/hostile/asteroid/whitesands/ranged/hunter, +/mob/living/simple_animal/hostile/human/hermit/ranged/hunter, /turf/open/floor/plating/asteroid/whitesands, /area/overmap_encounter/planetoid/sand/explored) "Fi" = ( diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_pubbyslopcrash.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_pubbyslopcrash.dmm index 209709f2599b..e664dfec8d96 100644 --- a/_maps/RandomRuins/SandRuins/whitesands_surface_pubbyslopcrash.dmm +++ b/_maps/RandomRuins/SandRuins/whitesands_surface_pubbyslopcrash.dmm @@ -804,7 +804,7 @@ /obj/effect/decal/fakelattice{ icon_state = "lattice-2" }, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ dir = 1; faction = list("adobe"); desc = " A wild-eyed figure, wearing tattered mining equipment and boasting a malformed body, twisted by the heavy metals and high background radiation of the sandworlds. Their helmet also seems to be filled with vomit" @@ -1003,7 +1003,7 @@ /turf/open/floor/plasteel/tech, /area/ruin/whitesands/pubbycrash/engine_room) "xc" = ( -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ dir = 4 }, /turf/open/floor/plating/asteroid/whitesands/lit, @@ -1145,7 +1145,7 @@ }, /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/directional/west, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ dir = 1; faction = list("saloon") }, @@ -1744,7 +1744,7 @@ /obj/effect/turf_decal/spline/fancy/opaque/black{ dir = 1 }, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ faction = list("saloon") }, /turf/open/floor/plasteel/dark, @@ -1777,7 +1777,7 @@ /obj/effect/turf_decal/ntspaceworks_small/left{ dir = 4 }, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ dir = 4; faction = list("saloon") }, @@ -1946,7 +1946,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/decal/cleanable/vomit/old, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ dir = 1; faction = list("saloon") }, @@ -1969,7 +1969,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 1 }, -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor{ +/mob/living/simple_animal/hostile/human/hermit/survivor{ dir = 4; faction = list("adobe"); desc = " A wild-eyed figure, wearing tattered mining equipment and boasting a malformed body, twisted by the heavy metals and high background radiation of the sandworlds. Their helmet also seems to be filled with vomit" @@ -2060,7 +2060,7 @@ /turf/open/floor/plating/asteroid/whitesands/dried, /area/overmap_encounter/planetoid/cave/explored) "Qo" = ( -/mob/living/simple_animal/hostile/asteroid/whitesands/ranged, +/mob/living/simple_animal/hostile/human/hermit/ranged, /turf/open/floor/plating/asteroid/whitesands/dried, /area/overmap_encounter/planetoid/cave/explored) "Qu" = ( diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_starfurycrash.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_starfurycrash.dmm index bc8616028058..230481e65503 100644 --- a/_maps/RandomRuins/SandRuins/whitesands_surface_starfurycrash.dmm +++ b/_maps/RandomRuins/SandRuins/whitesands_surface_starfurycrash.dmm @@ -34,9 +34,7 @@ }, /area/overmap_encounter/planetoid/cave/explored) "dX" = ( -/obj/item/gun/ballistic/automatic/pistol{ - spawnwithmagazine = 0 - }, +/obj/item/gun/ballistic/automatic/pistol/no_mag, /turf/open/floor/plating/asteroid/whitesands, /area/overmap_encounter/planetoid/cave/explored) "eg" = ( @@ -147,7 +145,7 @@ /obj/effect/turf_decal/industrial/traffic{ dir = 4 }, -/mob/living/simple_animal/hostile/syndicate/ranged/smg/space, +/mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space, /turf/open/floor/engine{ initial_gas_mix = "ws_atmos" }, @@ -224,7 +222,7 @@ }, /area/overmap_encounter/planetoid/cave/explored) "mv" = ( -/mob/living/simple_animal/hostile/syndicate/ranged/space, +/mob/living/simple_animal/hostile/human/syndicate/ranged/space, /turf/open/floor/plating/asteroid/whitesands, /area/overmap_encounter/planetoid/cave/explored) "mP" = ( @@ -395,15 +393,15 @@ }, /area/overmap_encounter/planetoid/cave/explored) "wS" = ( -/mob/living/simple_animal/hostile/syndicate/ranged/smg/space, +/mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space, /turf/open/floor/plating{ icon_state = "platingdmg2"; initial_gas_mix = "ws_atmos" }, /area/overmap_encounter/planetoid/cave/explored) "xr" = ( -/mob/living/simple_animal/hostile/syndicate/ranged/smg/space, -/mob/living/simple_animal/hostile/syndicate/ranged/space, +/mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space, +/mob/living/simple_animal/hostile/human/syndicate/ranged/space, /turf/open/floor/plating{ icon_state = "platingdmg2"; initial_gas_mix = "ws_atmos" @@ -467,7 +465,7 @@ }, /area/overmap_encounter/planetoid/cave/explored) "Bt" = ( -/mob/living/simple_animal/hostile/syndicate/ranged/shotgun/space, +/mob/living/simple_animal/hostile/human/syndicate/ranged/shotgun/space, /turf/open/floor/plating{ icon_state = "platingdmg1"; initial_gas_mix = "ws_atmos" @@ -546,7 +544,7 @@ }, /area/overmap_encounter/planetoid/cave/explored) "Eu" = ( -/mob/living/simple_animal/hostile/syndicate/ranged/space/stormtrooper, +/mob/living/simple_animal/hostile/human/syndicate/ranged/space/stormtrooper, /turf/open/floor/plating{ icon_state = "panelscorched"; initial_gas_mix = "ws_atmos" @@ -632,7 +630,7 @@ }, /area/overmap_encounter/planetoid/cave/explored) "KR" = ( -/mob/living/simple_animal/hostile/syndicate/ranged/shotgun/space, +/mob/living/simple_animal/hostile/human/syndicate/ranged/shotgun/space, /turf/open/floor/plating/asteroid/whitesands, /area/overmap_encounter/planetoid/cave/explored) "KT" = ( @@ -645,7 +643,7 @@ }, /area/overmap_encounter/planetoid/cave/explored) "Md" = ( -/mob/living/simple_animal/hostile/syndicate/ranged/space, +/mob/living/simple_animal/hostile/human/syndicate/ranged/space, /turf/open/floor/plating{ initial_gas_mix = "ws_atmos" }, @@ -880,7 +878,7 @@ /area/overmap_encounter/planetoid/cave/explored) "Xh" = ( /obj/item/stack/tile/plasteel, -/mob/living/simple_animal/hostile/syndicate/ranged/space, +/mob/living/simple_animal/hostile/human/syndicate/ranged/space, /turf/open/floor/plating/asteroid/whitesands/dried, /area/overmap_encounter/planetoid/cave/explored) "XR" = ( diff --git a/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm b/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm index a4f6006bf88b..73f4a5875db1 100644 --- a/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm +++ b/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm @@ -522,9 +522,7 @@ /turf/open/floor/plasteel, /area/ruin/space/has_grav/derelictoutpost/powerstorage) "bI" = ( -/obj/item/gun/ballistic/automatic/pistol/candor{ - spawnwithmagazine = 0 - }, +/obj/item/gun/ballistic/automatic/pistol/candor/no_mag, /turf/open/floor/plasteel, /area/ruin/space/has_grav/derelictoutpost/powerstorage) "bJ" = ( @@ -1333,9 +1331,7 @@ desc = "A thick gelatinous surface covers the floor. Someone get the golashes."; name = "gelatinous floor" }, -/obj/item/gun/ballistic/automatic/pistol/candor{ - spawnwithmagazine = 0 - }, +/obj/item/gun/ballistic/automatic/pistol/candor/no_mag, /obj/item/ammo_box/magazine/m45, /turf/open/floor/plating/asteroid, /area/ruin/space/has_grav/derelictoutpost) @@ -1493,9 +1489,7 @@ /turf/open/floor/plating, /area/ruin/space/has_grav/derelictoutpost) "dJ" = ( -/obj/item/gun/ballistic/automatic/pistol/candor{ - spawnwithmagazine = 0 - }, +/obj/item/gun/ballistic/automatic/pistol/candor/no_mag, /obj/structure/alien/weeds{ color = "#4BAE56"; desc = "A thick gelatinous surface covers the floor. Someone get the golashes."; diff --git a/_maps/RandomRuins/SpaceRuins/crashedship.dmm b/_maps/RandomRuins/SpaceRuins/crashedship.dmm index 9a154053c0bf..358b08790095 100644 --- a/_maps/RandomRuins/SpaceRuins/crashedship.dmm +++ b/_maps/RandomRuins/SpaceRuins/crashedship.dmm @@ -2232,7 +2232,7 @@ /turf/closed/mineral/diamond, /area/awaymission/BMPship) "hw" = ( -/turf/closed/mineral/bananium, +/turf/closed/mineral/bscrystal, /area/awaymission/BMPship) "hE" = ( /turf/closed/wall/mineral/titanium/nodiagonal, diff --git a/_maps/RandomRuins/SpaceRuins/ntfacility.dmm b/_maps/RandomRuins/SpaceRuins/ntfacility.dmm index 355ab65494ae..bacfb7fe76ac 100644 --- a/_maps/RandomRuins/SpaceRuins/ntfacility.dmm +++ b/_maps/RandomRuins/SpaceRuins/ntfacility.dmm @@ -114,7 +114,7 @@ /obj/effect/mob_spawn/human/corpse/assistant{ outfit = /datum/outfit/job/cmo }, -/mob/living/simple_animal/hostile/zombie, +/mob/living/simple_animal/hostile/human/zombie, /turf/open/floor/mineral/titanium/blue, /area/ruin/powered) "dh" = ( @@ -136,7 +136,7 @@ /turf/open/floor/plating, /area/ruin/powered) "dm" = ( -/mob/living/simple_animal/hostile/zombie, +/mob/living/simple_animal/hostile/human/zombie, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/dark, /area/ruin/powered) @@ -269,7 +269,7 @@ /turf/open/floor/plating, /area/ruin/powered) "gb" = ( -/mob/living/simple_animal/hostile/zombie, +/mob/living/simple_animal/hostile/human/zombie, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/dark, @@ -389,8 +389,8 @@ /turf/open/floor/vault, /area/ruin/powered) "hI" = ( -/mob/living/simple_animal/hostile/zombie, -/mob/living/simple_animal/hostile/zombie, +/mob/living/simple_animal/hostile/human/zombie, +/mob/living/simple_animal/hostile/human/zombie, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/ruin/powered) @@ -478,7 +478,7 @@ /turf/open/floor/plasteel/white, /area/ruin/powered) "jP" = ( -/mob/living/simple_animal/hostile/zombie, +/mob/living/simple_animal/hostile/human/zombie, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/corner/opaque/black{ @@ -568,7 +568,7 @@ pixel_x = -12 }, /obj/effect/gibspawner/human, -/mob/living/simple_animal/hostile/zombie, +/mob/living/simple_animal/hostile/human/zombie, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/dark, @@ -879,7 +879,7 @@ /obj/effect/turf_decal/number/four{ dir = 4 }, -/mob/living/simple_animal/hostile/zombie, +/mob/living/simple_animal/hostile/human/zombie, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/dark, @@ -1113,13 +1113,13 @@ /obj/effect/decal/cleanable/blood/tracks{ dir = 6 }, -/mob/living/simple_animal/hostile/zombie, +/mob/living/simple_animal/hostile/human/zombie, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/ruin/powered) "BG" = ( -/mob/living/simple_animal/hostile/zombie, +/mob/living/simple_animal/hostile/human/zombie, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, @@ -1619,9 +1619,7 @@ /turf/open/floor/plasteel/dark, /area/ruin/powered) "KJ" = ( -/obj/item/gun/ballistic/revolver/detective{ - spawnwithmagazine = 0 - }, +/obj/item/gun/ballistic/revolver/detective/no_mag, /obj/effect/decal/cleanable/blood, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, @@ -1671,7 +1669,7 @@ /turf/open/floor/plasteel/dark, /area/ruin/powered) "LD" = ( -/mob/living/simple_animal/hostile/zombie, +/mob/living/simple_animal/hostile/human/zombie, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/carpet/royalblue, @@ -1959,7 +1957,7 @@ /area/ruin/powered) "TD" = ( /obj/effect/gibspawner/human, -/mob/living/simple_animal/hostile/zombie, +/mob/living/simple_animal/hostile/human/zombie, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/dark, @@ -2037,7 +2035,7 @@ /turf/open/floor/plasteel/dark, /area/ruin/powered) "VE" = ( -/mob/living/simple_animal/hostile/zombie, +/mob/living/simple_animal/hostile/human/zombie, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/dark, @@ -2140,7 +2138,7 @@ /turf/open/floor/carpet/royalblue, /area/ruin/powered) "XB" = ( -/mob/living/simple_animal/hostile/zombie, +/mob/living/simple_animal/hostile/human/zombie, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, /area/ruin/powered) @@ -2221,7 +2219,7 @@ /area/ruin/powered) "Zu" = ( /obj/machinery/door/poddoor/preopen, -/mob/living/simple_animal/hostile/zombie, +/mob/living/simple_animal/hostile/human/zombie, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/dark, /area/ruin/powered) diff --git a/_maps/RandomRuins/SpaceRuins/provinggrounds.dmm b/_maps/RandomRuins/SpaceRuins/provinggrounds.dmm index 7577cdeb99f5..83e662b69ad0 100644 --- a/_maps/RandomRuins/SpaceRuins/provinggrounds.dmm +++ b/_maps/RandomRuins/SpaceRuins/provinggrounds.dmm @@ -115,7 +115,7 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ruin/space/has_grav/syndicircle/research) "du" = ( -/mob/living/simple_animal/hostile/syndicate/civilian{ +/mob/living/simple_animal/hostile/human/syndicate/civilian{ name = "Syndicate Researcher" }, /turf/open/floor/mineral/plastitanium/red, @@ -232,7 +232,7 @@ /turf/open/floor/plating/asteroid/snow/atmosphere, /area/ruin/space/has_grav/syndicircle/winter) "gz" = ( -/mob/living/simple_animal/hostile/syndicate/ranged/smg{ +/mob/living/simple_animal/hostile/human/syndicate/ranged/smg{ name = "REDFOR operative" }, /turf/open/floor/plating/asteroid/snow/atmosphere, @@ -309,7 +309,7 @@ /obj/structure/flippedtable{ dir = 4 }, -/mob/living/simple_animal/hostile/nanotrasen/ranged/smg{ +/mob/living/simple_animal/hostile/human/nanotrasen/ranged/smg{ name = "BLUFOR operative" }, /turf/open/floor/plasteel/tech, @@ -422,7 +422,7 @@ /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/syndicircle/halls) "lX" = ( -/mob/living/simple_animal/hostile/syndicate/ranged/infiltrator{ +/mob/living/simple_animal/hostile/human/syndicate/ranged/infiltrator{ name = "REDFOR operative" }, /turf/open/floor/plasteel/tech/techmaint, @@ -465,7 +465,7 @@ /area/ruin/space/has_grav/syndicircle/winter) "na" = ( /obj/structure/flippedtable, -/mob/living/simple_animal/hostile/nanotrasen/ranged/smg{ +/mob/living/simple_animal/hostile/human/nanotrasen/ranged/smg{ name = "BLUFOR operative" }, /obj/structure/cable{ @@ -497,7 +497,7 @@ /turf/open/floor/plating, /area/ruin/space/has_grav/syndicircle/winter) "ov" = ( -/mob/living/simple_animal/hostile/syndicate/civilian{ +/mob/living/simple_animal/hostile/human/syndicate/civilian{ name = "Syndicate Researcher" }, /obj/structure/cable{ @@ -561,7 +561,7 @@ /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ruin/space/has_grav/syndicircle/winter) "qv" = ( -/mob/living/simple_animal/hostile/syndicate/ranged/shotgun{ +/mob/living/simple_animal/hostile/human/syndicate/ranged/shotgun{ name = "REDFOR operative" }, /turf/open/floor/plating/ice, @@ -610,7 +610,7 @@ /obj/effect/turf_decal/ntlogo{ dir = 1 }, -/mob/living/simple_animal/hostile/syndicate/ranged/smg/space{ +/mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space{ name = "REDFOR commando" }, /turf/open/floor/mineral/titanium/white, @@ -693,7 +693,7 @@ /obj/effect/turf_decal/ntlogo{ dir = 4 }, -/mob/living/simple_animal/hostile/syndicate/ranged/smg/space{ +/mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space{ name = "REDFOR commando" }, /turf/open/floor/mineral/titanium/white, @@ -1222,7 +1222,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/mob/living/simple_animal/hostile/syndicate, +/mob/living/simple_animal/hostile/human/syndicate, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/syndicircle/halls) "Fv" = ( @@ -1247,7 +1247,7 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ruin/space/has_grav/syndicircle/research) "FM" = ( -/mob/living/simple_animal/hostile/syndicate/civilian{ +/mob/living/simple_animal/hostile/human/syndicate/civilian{ name = "Syndicate Researcher" }, /turf/open/floor/mineral/plastitanium, @@ -1304,7 +1304,7 @@ /turf/open/space/basic, /area/ruin/space/has_grav/syndicircle/halls) "HC" = ( -/mob/living/simple_animal/hostile/syndicate/civilian{ +/mob/living/simple_animal/hostile/human/syndicate/civilian{ name = "Syndicate Researcher" }, /obj/structure/cable{ @@ -1507,7 +1507,7 @@ /area/ruin/space/has_grav/syndicircle/training) "MP" = ( /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/syndicate/ranged/smg/space{ +/mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space{ name = "REDFOR commando" }, /obj/item/storage/backpack/duffelbag/syndie/c4, @@ -1608,7 +1608,7 @@ /turf/open/floor/plating/dirt/jungle/wasteland, /area/ruin/space/has_grav/syndicircle/training) "Rj" = ( -/mob/living/simple_animal/hostile/syndicate, +/mob/living/simple_animal/hostile/human/syndicate, /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/syndicircle/halls) "Rs" = ( @@ -1670,7 +1670,7 @@ /obj/structure/chair/comfy/shuttle{ dir = 8 }, -/mob/living/simple_animal/hostile/nanotrasen/ranged{ +/mob/living/simple_animal/hostile/human/nanotrasen/ranged{ name = "BLUFOR operative" }, /turf/open/floor/mineral/titanium, @@ -1705,7 +1705,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/nanotrasen/ranged{ +/mob/living/simple_animal/hostile/human/nanotrasen/ranged{ name = "BLUFOR operative" }, /turf/open/floor/mineral/titanium, @@ -1756,7 +1756,7 @@ /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/syndicircle/halls) "UA" = ( -/mob/living/simple_animal/hostile/syndicate, +/mob/living/simple_animal/hostile/human/syndicate, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/syndicircle/halls) "UI" = ( @@ -1794,7 +1794,7 @@ /obj/structure/chair/comfy/shuttle{ dir = 4 }, -/mob/living/simple_animal/hostile/nanotrasen/ranged{ +/mob/living/simple_animal/hostile/human/nanotrasen/ranged{ name = "BLUFOR operative" }, /turf/open/floor/mineral/titanium, @@ -1931,7 +1931,7 @@ /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/syndicircle/halls) "XW" = ( -/mob/living/simple_animal/hostile/syndicate/melee/space{ +/mob/living/simple_animal/hostile/human/syndicate/melee/space{ name = "REDFOR commando" }, /turf/open/space, @@ -1950,7 +1950,7 @@ /area/ruin/space/has_grav/syndicircle/escape) "Yr" = ( /obj/structure/chair/comfy/shuttle, -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/no_mech/nanotrasen{ +/mob/living/simple_animal/hostile/human/syndicate/mecha_pilot/no_mech/nanotrasen{ name = "BLUFOR Pilot" }, /turf/open/floor/mineral/titanium/blue, @@ -2027,7 +2027,7 @@ /area/ruin/space/has_grav/syndicircle/halls) "ZU" = ( /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/syndicate/ranged/smg/space{ +/mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space{ name = "REDFOR commando" }, /turf/open/floor/plating/asteroid/airless, diff --git a/_maps/RandomRuins/SpaceRuins/singularity_lab.dmm b/_maps/RandomRuins/SpaceRuins/singularity_lab.dmm index 202a6c0c0b74..54896bfe8630 100644 --- a/_maps/RandomRuins/SpaceRuins/singularity_lab.dmm +++ b/_maps/RandomRuins/SpaceRuins/singularity_lab.dmm @@ -827,7 +827,7 @@ /obj/structure/spacevine/dense{ pixel_x = -32 }, -/mob/living/simple_animal/hostile/zombie/kudzu{ +/mob/living/simple_animal/hostile/human/zombie/kudzu{ zombiejob = "Assistant" }, /obj/structure/flora/ausbushes/lavendergrass, @@ -885,7 +885,7 @@ /area/ruin/space/has_grav/singularitylab/cargo) "dx" = ( /obj/structure/spacevine/dense, -/mob/living/simple_animal/hostile/zombie/kudzu{ +/mob/living/simple_animal/hostile/human/zombie/kudzu{ zombiejob = "Assistant" }, /turf/open/floor/plating/grass/jungle{ @@ -2576,7 +2576,7 @@ }, /obj/structure/window/reinforced/tinted/frosted, /obj/item/soap/nanotrasen, -/mob/living/simple_animal/hostile/zombie/kudzu{ +/mob/living/simple_animal/hostile/human/zombie/kudzu{ zombiejob = "Assistant" }, /turf/open/floor/plasteel/dark, @@ -2642,7 +2642,7 @@ /turf/open/floor/plating/asteroid/airless, /area/ruin/space/has_grav) "kR" = ( -/mob/living/simple_animal/hostile/zombie/kudzu{ +/mob/living/simple_animal/hostile/human/zombie/kudzu{ zombiejob = "Cargo Technician" }, /obj/effect/turf_decal/siding/yellow{ @@ -2942,7 +2942,7 @@ /area/ruin/space/has_grav/singularitylab/lab) "lL" = ( /obj/structure/spacevine/dense, -/mob/living/simple_animal/hostile/zombie/kudzu{ +/mob/living/simple_animal/hostile/human/zombie/kudzu{ zombiejob = "Assistant" }, /obj/structure/flora/ausbushes/fullgrass, @@ -3049,7 +3049,7 @@ /area/ruin/space/has_grav/singularitylab/cargo) "mj" = ( /obj/structure/spacevine/dense, -/mob/living/simple_animal/hostile/zombie/kudzu{ +/mob/living/simple_animal/hostile/human/zombie/kudzu{ zombiejob = "Assistant" }, /obj/structure/flora/ausbushes/fullgrass, @@ -3290,7 +3290,7 @@ /area/ruin/space/has_grav/singularitylab/reactor) "nd" = ( /obj/effect/turf_decal/corner/opaque/white/full, -/mob/living/simple_animal/hostile/zombie/kudzu{ +/mob/living/simple_animal/hostile/human/zombie/kudzu{ zombiejob = "Scientist" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ @@ -3610,7 +3610,7 @@ }, /area/ruin/space/has_grav/singularitylab) "ol" = ( -/mob/living/simple_animal/hostile/zombie/kudzu{ +/mob/living/simple_animal/hostile/human/zombie/kudzu{ zombiejob = "Shaft Miner" }, /turf/open/floor/plasteel/dark, @@ -4271,7 +4271,7 @@ dir = 10 }, /obj/structure/railing/corner, -/mob/living/simple_animal/hostile/zombie/kudzu{ +/mob/living/simple_animal/hostile/human/zombie/kudzu{ zombiejob = "Station Engineer" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, @@ -5557,7 +5557,7 @@ /area/ruin/space/has_grav/singularitylab) "wV" = ( /obj/structure/spacevine/dense, -/mob/living/simple_animal/hostile/zombie/kudzu{ +/mob/living/simple_animal/hostile/human/zombie/kudzu{ zombiejob = "Assistant" }, /turf/open/floor/plating/grass/jungle{ @@ -6315,7 +6315,7 @@ "zC" = ( /obj/effect/turf_decal/corner/opaque/white/full, /obj/effect/turf_decal/corner/opaque/white/full, -/mob/living/simple_animal/hostile/zombie/kudzu{ +/mob/living/simple_animal/hostile/human/zombie/kudzu{ zombiejob = "Scientist" }, /obj/effect/turf_decal/siding/thinplating/light, @@ -6899,7 +6899,7 @@ /obj/effect/turf_decal/corner/opaque/purple{ dir = 5 }, -/mob/living/simple_animal/hostile/zombie/kudzu{ +/mob/living/simple_animal/hostile/human/zombie/kudzu{ zombiejob = "Scientist" }, /turf/open/floor/plasteel, @@ -7222,7 +7222,7 @@ "CX" = ( /obj/effect/turf_decal/corner/opaque/white/full, /obj/effect/turf_decal/corner/opaque/white/full, -/mob/living/simple_animal/hostile/zombie/kudzu{ +/mob/living/simple_animal/hostile/human/zombie/kudzu{ zombiejob = "Scientist" }, /obj/effect/turf_decal/siding/thinplating/light{ @@ -9024,7 +9024,7 @@ /obj/structure/chair/office{ dir = 8 }, -/mob/living/simple_animal/hostile/zombie/kudzu{ +/mob/living/simple_animal/hostile/human/zombie/kudzu{ zombiejob = "Security Officer" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, @@ -9452,7 +9452,7 @@ pixel_y = 4 }, /obj/effect/turf_decal/corner/opaque/white/full, -/mob/living/simple_animal/hostile/zombie/kudzu{ +/mob/living/simple_animal/hostile/human/zombie/kudzu{ zombiejob = "Scientist" }, /obj/effect/turf_decal/siding/thinplating/light/corner, @@ -9798,7 +9798,7 @@ /obj/structure/chair{ dir = 1 }, -/mob/living/simple_animal/hostile/zombie/kudzu{ +/mob/living/simple_animal/hostile/human/zombie/kudzu{ zombiejob = "Cargo Technician" }, /obj/machinery/light/small/directional/south, @@ -10328,7 +10328,7 @@ /obj/structure/chair{ dir = 8 }, -/mob/living/simple_animal/hostile/zombie/kudzu{ +/mob/living/simple_animal/hostile/human/zombie/kudzu{ zombiejob = "Cargo Technician" }, /turf/open/floor/carpet/nanoweave/beige, @@ -11694,7 +11694,7 @@ /obj/structure/chair/office{ dir = 4 }, -/mob/living/simple_animal/hostile/zombie/kudzu{ +/mob/living/simple_animal/hostile/human/zombie/kudzu{ zombiejob = "Quartermaster" }, /obj/effect/decal/cleanable/blood{ @@ -12894,7 +12894,7 @@ /area/ruin/space/has_grav/singularitylab/civvie) "WE" = ( /obj/structure/spacevine, -/mob/living/simple_animal/hostile/zombie/kudzu{ +/mob/living/simple_animal/hostile/human/zombie/kudzu{ zombiejob = "Assistant" }, /turf/open/floor/plating/grass/jungle{ diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_abandoned_mechbay.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_abandoned_mechbay.dmm index 20301b381145..31c53d09a82e 100644 --- a/_maps/RandomRuins/WasteRuins/wasteplanet_abandoned_mechbay.dmm +++ b/_maps/RandomRuins/WasteRuins/wasteplanet_abandoned_mechbay.dmm @@ -480,7 +480,7 @@ /area/ruin/wasteplanet/abandoned_mechbay/bay1) "fe" = ( /obj/effect/decal/cleanable/dirt/dust, -/mob/living/simple_animal/hostile/syndicate/melee{ +/mob/living/simple_animal/hostile/human/syndicate/melee{ name = "Syndicate Mech Pilot" }, /turf/open/floor/concrete/slab_1, @@ -1376,7 +1376,7 @@ dir = 4 }, /obj/effect/decal/cleanable/plastic, -/mob/living/simple_animal/hostile/syndicate/ranged/shotgun, +/mob/living/simple_animal/hostile/human/syndicate/ranged/shotgun, /turf/open/floor/plasteel/dark, /area/ruin/wasteplanet/abandoned_mechbay/mechlab) "pA" = ( @@ -1499,7 +1499,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/mob/living/simple_animal/hostile/syndicate{ +/mob/living/simple_animal/hostile/human/syndicate{ name = "Syndicate Engineer"; desc = "Death to bad mechanics." }, @@ -1558,7 +1558,7 @@ /area/ruin/wasteplanet/abandoned_mechbay/bay1) "rT" = ( /obj/structure/chair/sofa/brown/right/directional/south, -/mob/living/simple_animal/hostile/syndicate{ +/mob/living/simple_animal/hostile/human/syndicate{ name = "Syndicate Engineer"; desc = "Death to bad mechanics." }, @@ -1779,7 +1779,7 @@ /obj/machinery/camera/autoname{ dir = 4 }, -/mob/living/simple_animal/hostile/syndicate/ranged/smg/space, +/mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space, /turf/open/floor/plasteel/tech/techmaint, /area/ruin/wasteplanet/abandoned_mechbay/crewquarters) "uM" = ( @@ -1907,7 +1907,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/mob/living/simple_animal/hostile/syndicate/ranged/shotgun, +/mob/living/simple_animal/hostile/human/syndicate/ranged/shotgun, /turf/open/floor/plasteel/dark, /area/ruin/wasteplanet/abandoned_mechbay/mechlab) "vS" = ( @@ -2047,7 +2047,7 @@ /obj/structure/cable{ icon_state = "0-4" }, -/mob/living/simple_animal/hostile/syndicate{ +/mob/living/simple_animal/hostile/human/syndicate{ name = "Syndicate Launderer"; desc = "Death to Dirty Laundry?" }, @@ -2180,7 +2180,7 @@ dir = 8 }, /obj/machinery/light/floor, -/mob/living/simple_animal/hostile/syndicate/ranged/smg/space, +/mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space, /obj/machinery/door/firedoor/border_only{ dir = 8 }, @@ -2473,7 +2473,7 @@ pixel_y = 19 }, /obj/structure/curtain, -/mob/living/simple_animal/hostile/syndicate/civilian{ +/mob/living/simple_animal/hostile/human/syndicate/civilian{ desc = "Can an armored mook not shower in peace?" }, /turf/open/floor/carpet/blue, @@ -2722,7 +2722,7 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/syndicate/melee{ +/mob/living/simple_animal/hostile/human/syndicate/melee{ name = "Syndicate Mech Pilot" }, /turf/open/floor/plasteel/tech/techmaint, @@ -2770,7 +2770,7 @@ /area/overmap_encounter/planetoid/cave/explored) "Hj" = ( /obj/machinery/light/dim/directional/south, -/mob/living/simple_animal/hostile/syndicate/melee{ +/mob/living/simple_animal/hostile/human/syndicate/melee{ name = "Syndicate Mech Pilot" }, /turf/open/floor/plasteel/tech/techmaint, @@ -3015,7 +3015,7 @@ }, /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/directional/south, -/mob/living/simple_animal/hostile/syndicate/melee{ +/mob/living/simple_animal/hostile/human/syndicate/melee{ name = "Syndicate Mech Pilot" }, /turf/open/floor/plasteel/dark, @@ -3056,7 +3056,7 @@ /obj/effect/turf_decal/industrial/warning{ dir = 8 }, -/mob/living/simple_animal/hostile/syndicate{ +/mob/living/simple_animal/hostile/human/syndicate{ name = "Syndicate Engineer"; desc = "Death to bad mechanics." }, @@ -3375,7 +3375,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/item/radio/intercom/directional/west, -/mob/living/simple_animal/hostile/syndicate{ +/mob/living/simple_animal/hostile/human/syndicate{ name = "Syndicate Engineer"; desc = "Death to bad mechanics." }, diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_clowncrash.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_clowncrash.dmm index ae2434a3ca45..11c0ecc1a2ff 100644 --- a/_maps/RandomRuins/WasteRuins/wasteplanet_clowncrash.dmm +++ b/_maps/RandomRuins/WasteRuins/wasteplanet_clowncrash.dmm @@ -96,7 +96,7 @@ /area/overmap_encounter/planetoid/cave/explored) "r" = ( /obj/structure/table/reinforced, -/obj/item/stack/ore/bananium, +/obj/item/stack/ore/hellstone, /turf/open/floor/plating/asteroid, /area/overmap_encounter/planetoid/cave/explored) "s" = ( diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm index 73735c65542b..b795826ec6c2 100644 --- a/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm +++ b/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm @@ -342,7 +342,7 @@ "cX" = ( /obj/structure/statue/bananium/clown, /obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/mineral/bananium, +/turf/open/floor/mineral/gold, /area/ruin/powered) "dg" = ( /obj/structure/sign/poster/contraband/eat, @@ -430,7 +430,7 @@ /area/ruin/powered) "ed" = ( /obj/item/trash/cheesie, -/turf/open/floor/mineral/bananium, +/turf/open/floor/mineral/gold, /area/ruin/powered) "ee" = ( /obj/machinery/photocopier, @@ -578,12 +578,8 @@ /turf/open/floor/plating/rust, /area/ruin/powered) "fk" = ( -/obj/machinery/door/airlock/bananium{ - name = "Clown Embassy"; - dir = 4 - }, /obj/item/grown/bananapeel, -/turf/open/floor/mineral/bananium, +/turf/open/floor/mineral/gold, /area/ruin/powered) "fn" = ( /obj/effect/gibspawner/human, @@ -695,7 +691,7 @@ /area/ruin/powered) "go" = ( /obj/machinery/light/small/directional/west, -/turf/open/floor/mineral/bananium, +/turf/open/floor/mineral/gold, /area/ruin/powered) "gp" = ( /mob/living/simple_animal/hostile/rat, @@ -735,7 +731,7 @@ /turf/open/floor/plating, /area/ruin/powered) "gL" = ( -/turf/open/floor/mineral/bananium, +/turf/open/floor/mineral/gold, /area/ruin/powered) "gM" = ( /obj/structure/rack, @@ -762,7 +758,7 @@ /area/ruin/powered) "hd" = ( /obj/item/reagent_containers/food/snacks/cakeslice/clown_slice, -/turf/open/floor/mineral/bananium, +/turf/open/floor/mineral/gold, /area/ruin/powered) "he" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ @@ -1123,7 +1119,7 @@ /obj/effect/decal/cleanable/blood, /obj/effect/mob_spawn/human/clown/corpse, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/mineral/bananium, +/turf/open/floor/mineral/gold, /area/ruin/powered) "kO" = ( /obj/item/trash/chips, @@ -1133,7 +1129,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/mineral/bananium, +/turf/open/floor/mineral/gold, /area/ruin/powered) "kS" = ( /obj/effect/decal/cleanable/blood, @@ -1507,7 +1503,7 @@ /obj/item/pneumatic_cannon/pie, /obj/item/reagent_containers/spray/waterflower/lube, /obj/machinery/light/small/directional/east, -/turf/open/floor/mineral/bananium, +/turf/open/floor/mineral/gold, /area/ruin/powered) "nK" = ( /obj/structure/table, @@ -2100,7 +2096,7 @@ /obj/structure/chair/wood{ dir = 8 }, -/mob/living/simple_animal/hostile/frontier{ +/mob/living/simple_animal/hostile/human/frontier{ dir = 8 }, /turf/open/floor/wood, @@ -2375,7 +2371,7 @@ /obj/effect/decal/cleanable/blood, /obj/effect/mob_spawn/human/clown/corpse, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/mineral/bananium, +/turf/open/floor/mineral/gold, /area/ruin/powered) "vX" = ( /obj/item/ammo_casing, @@ -2773,7 +2769,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/generic, /obj/item/trash/cheesie, -/turf/open/floor/mineral/bananium, +/turf/open/floor/mineral/gold, /area/ruin/powered) "Aa" = ( /obj/effect/decal/cleanable/dirt/dust, @@ -3113,7 +3109,7 @@ /area/ruin/powered) "Cy" = ( /obj/structure/closet/cardboard, -/obj/item/coin/bananium, +/obj/item/coin/hellstone, /obj/item/reagent_containers/food/snacks/soup/clownstears, /turf/open/floor/plating, /area/ruin/powered) @@ -4333,7 +4329,7 @@ "Ow" = ( /obj/structure/table/wood/fancy/orange, /obj/item/clothing/under/rank/civilian/clown/rainbow, -/turf/open/floor/mineral/bananium, +/turf/open/floor/mineral/gold, /area/ruin/powered) "Ox" = ( /obj/effect/decal/cleanable/dirt/dust, @@ -4422,7 +4418,7 @@ /area/ruin/powered) "Pr" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/mineral/bananium, +/turf/open/floor/mineral/gold, /area/ruin/powered) "Px" = ( /mob/living/simple_animal/hostile/rat, @@ -5549,7 +5545,7 @@ /turf/open/floor/plating, /area/ruin/powered) "Zo" = ( -/mob/living/simple_animal/hostile/cat_butcherer{ +/mob/living/simple_animal/hostile/human/cat_butcherer{ dir = 4 }, /obj/effect/decal/cleanable/blood, diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm index b6298e29f39d..a880d2947ae2 100644 --- a/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm +++ b/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm @@ -659,7 +659,7 @@ /turf/open/floor/mineral/titanium/white, /area/ruin/wasteplanet) "Bb" = ( -/mob/living/simple_animal/hostile/skeleton{ +/mob/living/simple_animal/hostile/human/skeleton{ desc = "A villager resurrected by the power of an unknown deity, eternally seeking vengeance for its people." }, /turf/open/floor/plating/dirt/old/waste, @@ -791,7 +791,7 @@ /turf/open/indestructible/hierophant/waste, /area/ruin/wasteplanet) "Fc" = ( -/mob/living/simple_animal/hostile/skeleton{ +/mob/living/simple_animal/hostile/human/skeleton{ desc = "A villager resurrected by the power of an unknown deity, eternally seeking vengeance for its people." }, /turf/open/floor/wood/waste, @@ -1378,7 +1378,7 @@ /turf/open/indestructible/hierophant/waste, /area/ruin/wasteplanet) "Xq" = ( -/mob/living/simple_animal/hostile/skeleton{ +/mob/living/simple_animal/hostile/human/skeleton{ desc = "A villager resurrected by the power of an unknown deity, eternally seeking vengeance for its people." }, /turf/open/floor/plating/grass/wasteplanet, diff --git a/_maps/configs/independent_beluga.json b/_maps/configs/independent_beluga.json index 64230b0dc797..6d7926a8e845 100644 --- a/_maps/configs/independent_beluga.json +++ b/_maps/configs/independent_beluga.json @@ -13,7 +13,6 @@ ], "starting_funds": 4000, "limit": 2, - "roundstart": true, "job_slots": { "Captain": { "outfit": "/datum/outfit/job/independent/captain", diff --git a/_maps/configs/independent_boyardee.json b/_maps/configs/independent_boyardee.json index f099b23952e9..d4659b14e0ac 100644 --- a/_maps/configs/independent_boyardee.json +++ b/_maps/configs/independent_boyardee.json @@ -16,6 +16,7 @@ "starting_funds": 5000, "map_short_name": "Boyardee-class", "map_path": "_maps/shuttles/independent/independent_boyardee.dmm", + "unique_ship_access": false, "job_slots": { "Bartender": { "outfit": "/datum/outfit/job/independent/bartender", diff --git a/_maps/configs/independent_dwayne.json b/_maps/configs/independent_dwayne.json index 1cd4a3683f0f..64f68af68752 100644 --- a/_maps/configs/independent_dwayne.json +++ b/_maps/configs/independent_dwayne.json @@ -15,7 +15,6 @@ "Mining", "Generalist" ], - "roundstart": true, "limit": 1, "job_slots": { "Captain": { diff --git a/_maps/configs/independent_lagoon.json b/_maps/configs/independent_lagoon.json index 017850eef555..313b4cd71d95 100644 --- a/_maps/configs/independent_lagoon.json +++ b/_maps/configs/independent_lagoon.json @@ -13,6 +13,7 @@ ], "map_short_name": "Lagoon-class", "map_path": "_maps/shuttles/independent/independent_lagoon.dmm", + "unique_ship_access": false, "starting_funds": 3000, "job_slots": { "Captain": { diff --git a/_maps/configs/independent_mudskipper.json b/_maps/configs/independent_mudskipper.json index 1dfd48861d13..9f4cf32e0cf8 100644 --- a/_maps/configs/independent_mudskipper.json +++ b/_maps/configs/independent_mudskipper.json @@ -14,7 +14,6 @@ "SPACE" ], "map_path": "_maps/shuttles/independent/independent_mudskipper.dmm", - "roundstart": true, "limit": 2, "starting_funds": 1500, "job_slots": { diff --git a/_maps/configs/independent_rigger.json b/_maps/configs/independent_rigger.json index 3550773cc0e4..e36b57ca750a 100644 --- a/_maps/configs/independent_rigger.json +++ b/_maps/configs/independent_rigger.json @@ -15,7 +15,6 @@ "Generalist" ], "map_path": "_maps/shuttles/independent/independent_rigger.dmm", - "roundstart": true, "limit": 1, "job_slots": { "Captain": { diff --git a/_maps/configs/independent_shetland.json b/_maps/configs/independent_shetland.json index 344f9a99ee50..de5873f80d75 100644 --- a/_maps/configs/independent_shetland.json +++ b/_maps/configs/independent_shetland.json @@ -14,7 +14,6 @@ ], "map_path": "_maps/shuttles/independent/independent_shetland.dmm", "map_id": "independent_shetland", - "roundstart": true, "job_slots": { "Captain": { "outfit": "/datum/outfit/job/independent/captain/cheap", diff --git a/_maps/configs/nanotrasen_skipper.json b/_maps/configs/nanotrasen_skipper.json index 9ced4c28038c..2f61c3afa601 100644 --- a/_maps/configs/nanotrasen_skipper.json +++ b/_maps/configs/nanotrasen_skipper.json @@ -17,7 +17,6 @@ "Mining" ], "starting_funds": 4500, - "roundstart": true, "job_slots": { "Captain": { "outfit": "/datum/outfit/job/nanotrasen/captain", diff --git a/_maps/configs/pirate_libertatia.json b/_maps/configs/pirate_libertatia.json index f61e421b0952..4ed426746512 100644 --- a/_maps/configs/pirate_libertatia.json +++ b/_maps/configs/pirate_libertatia.json @@ -12,6 +12,7 @@ "PIRATES", "NATURAL_AGGRESSIVE" ], + "space_spawn": true, "job_slots": { "Captain": { "outfit": "/datum/outfit/job/independent/captain/pirate", diff --git a/_maps/configs/pirate_noderider.json b/_maps/configs/pirate_noderider.json index 1341a6197635..7863a9d96896 100644 --- a/_maps/configs/pirate_noderider.json +++ b/_maps/configs/pirate_noderider.json @@ -15,6 +15,7 @@ "Riot", "Combat" ], + "space_spawn": true, "job_slots": { "Command Node": { "outfit": "/datum/outfit/job/independent/captain/pirate/jupiter", 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/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 19b41ef8018f..0f8565b7ecec 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -3045,11 +3045,6 @@ /area/wizard_station) "aEX" = ( /obj/structure/table/wood, -/obj/item/gun/magic/wand{ - desc = "Used in emergencies to reignite magma engines."; - max_charges = 0; - name = "wand of emergency engine ignition" - }, /turf/open/floor/plasteel, /area/wizard_station) "aEY" = ( diff --git a/_maps/shuttles/inteq/inteq_talos.dmm b/_maps/shuttles/inteq/inteq_talos.dmm index 45ecbf33d0a7..1e08e3912dc6 100644 --- a/_maps/shuttles/inteq/inteq_talos.dmm +++ b/_maps/shuttles/inteq/inteq_talos.dmm @@ -3417,14 +3417,12 @@ /obj/structure/sign/poster/retro/lasergun_new{ pixel_x = -32 }, -/obj/item/gun/ballistic/shotgun/bulldog/inteq{ +/obj/item/gun/ballistic/shotgun/bulldog/inteq/no_mag{ pixel_x = -8; pixel_y = 8; - spawnwithmagazine = 0 }, -/obj/item/gun/ballistic/shotgun/bulldog/inteq{ +/obj/item/gun/ballistic/shotgun/bulldog/inteq/no_mag{ pixel_x = -12; - spawnwithmagazine = 0 }, /turf/open/floor/plasteel/tech/grid, /area/ship/security/armory) diff --git a/_maps/shuttles/inteq/inteq_vaquero.dmm b/_maps/shuttles/inteq/inteq_vaquero.dmm index 927f372ab3c5..23a80717b42f 100644 --- a/_maps/shuttles/inteq/inteq_vaquero.dmm +++ b/_maps/shuttles/inteq/inteq_vaquero.dmm @@ -263,10 +263,9 @@ /obj/item/ammo_box/magazine/co9mm{ pixel_x = -5 }, -/obj/item/gun/ballistic/shotgun/bulldog/inteq{ +/obj/item/gun/ballistic/shotgun/bulldog/inteq/no_mag{ pixel_x = -4; pixel_y = 5; - spawnwithmagazine = 0 }, /obj/item/gun/ballistic/automatic/pistol/commander/inteq, /obj/item/gun/ballistic/automatic/pistol/commander/inteq{ diff --git a/_maps/shuttles/nanotrasen/nanotrasen_skipper.dmm b/_maps/shuttles/nanotrasen/nanotrasen_skipper.dmm index 436d6185ee54..93c59445ee41 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_skipper.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_skipper.dmm @@ -2868,7 +2868,7 @@ pixel_x = 4; pixel_y = 8 }, -/obj/item/coin/adamantine{ +/obj/item/coin/hellstone{ pixel_x = -12; pixel_y = -3 }, diff --git a/_maps/shuttles/roumain/srm_elder.dmm b/_maps/shuttles/roumain/srm_elder.dmm index ff5841d98df5..0fdb4827655a 100644 --- a/_maps/shuttles/roumain/srm_elder.dmm +++ b/_maps/shuttles/roumain/srm_elder.dmm @@ -273,7 +273,6 @@ dir = 1 }, /obj/machinery/door/poddoor/shutters{ - dir = 2; id = "elderatriumshuts" }, /turf/open/floor/plating, @@ -497,7 +496,6 @@ /obj/machinery/button/door{ id = "elderengineshuts"; name = "Engine Shutters"; - dir = 2; pixel_x = 7; pixel_y = 21 }, @@ -955,7 +953,6 @@ /obj/structure/grille, /obj/structure/window/reinforced/fulltile, /obj/machinery/door/poddoor/shutters{ - dir = 2; id = "elderatriumshuts" }, /turf/open/floor/plating, @@ -1170,7 +1167,6 @@ /obj/structure/window/reinforced/fulltile, /obj/structure/grille, /obj/machinery/door/poddoor/shutters{ - dir = 2; id = "elderatriumshuts" }, /turf/open/floor/plating, @@ -1242,7 +1238,6 @@ /obj/structure/window/reinforced/fulltile, /obj/structure/grille, /obj/machinery/door/poddoor/shutters{ - dir = 2; id = "elderatriumshuts" }, /turf/open/floor/plating, @@ -1259,15 +1254,13 @@ /obj/machinery/door/window/eastright{ dir = 8 }, -/obj/item/gun/ballistic/shotgun/flamingarrow{ - pixel_y = -5 - }, -/obj/item/gun/ballistic/shotgun/flamingarrow{ - pixel_y = 0 - }, +/obj/item/gun/ballistic/shotgun/flamingarrow/factory, /obj/item/gun/ballistic/shotgun/flamingarrow/bolt{ pixel_y = 5 }, +/obj/item/gun/ballistic/shotgun/flamingarrow/factory{ + pixel_y = -5 + }, /turf/open/floor/wood/ebony, /area/ship/storage) "oC" = ( @@ -1275,7 +1268,6 @@ /obj/structure/grille, /obj/machinery/door/firedoor/border_only, /obj/machinery/door/poddoor/shutters{ - dir = 2; id = "elderatriumshuts" }, /turf/open/floor/plating, @@ -1774,7 +1766,6 @@ /obj/structure/window/reinforced/fulltile, /obj/structure/grille, /obj/machinery/door/poddoor/shutters{ - dir = 2; id = "elderatriumshuts" }, /turf/open/floor/plating, @@ -2187,18 +2178,18 @@ /obj/machinery/door/window{ dir = 8 }, -/obj/item/gun/ballistic/rifle/illestren{ +/obj/item/gun/ballistic/rifle/illestren/factory{ + pixel_y = 3; + pixel_x = -4 + }, +/obj/item/gun/ballistic/rifle/illestren/factory{ pixel_x = -4; pixel_y = -5 }, -/obj/item/gun/ballistic/rifle/illestren{ +/obj/item/gun/ballistic/rifle/illestren/factory{ pixel_x = -4; pixel_y = -1 }, -/obj/item/gun/ballistic/rifle/illestren{ - pixel_x = -4; - pixel_y = 3 - }, /turf/open/floor/wood/ebony, /area/ship/storage) "Bq" = ( @@ -2278,7 +2269,6 @@ pixel_x = 4 }, /obj/item/reagent_containers/food/snacks/meat/steak{ - pixel_y = 0; pixel_x = -9 }, /obj/item/reagent_containers/food/snacks/meat/steak{ @@ -2542,9 +2532,7 @@ pixel_x = 3; pixel_y = -6 }, -/obj/item/storage/toolbox/fishing{ - pixel_y = 0 - }, +/obj/item/storage/toolbox/fishing, /turf/open/floor/wood/ebony, /area/ship/storage) "Fu" = ( @@ -2926,7 +2914,6 @@ pixel_x = -2 }, /obj/item/weldingtool{ - pixel_y = 0; pixel_x = -5 }, /turf/open/floor/wood/ebony, @@ -3015,8 +3002,7 @@ dir = 1 }, /obj/machinery/door/airlock/medical/glass{ - name = "Medical Bay"; - dir = 2 + name = "Medical Bay" }, /obj/effect/turf_decal/siding/blue/end{ dir = 1 @@ -3073,7 +3059,6 @@ pixel_x = 21 }, /obj/item/binoculars{ - pixel_y = 0; pixel_x = -4 }, /obj/item/megaphone{ @@ -3497,8 +3482,7 @@ pixel_x = 5 }, /obj/item/cultivator/rake{ - pixel_x = -4; - pixel_y = 0 + pixel_x = -4 }, /turf/open/floor/grass/ship/jungle, /area/ship/roumain) @@ -3763,8 +3747,7 @@ pixel_y = -4 }, /obj/item/pickaxe{ - pixel_x = 1; - pixel_y = 0 + pixel_x = 1 }, /obj/item/pickaxe{ pixel_x = 1; diff --git a/_maps/shuttles/subshuttles/syndicate_runner.dmm b/_maps/shuttles/subshuttles/syndicate_runner.dmm index 100a0d234000..69430bf09157 100644 --- a/_maps/shuttles/subshuttles/syndicate_runner.dmm +++ b/_maps/shuttles/subshuttles/syndicate_runner.dmm @@ -74,9 +74,7 @@ /obj/effect/turf_decal/trimline/opaque/bar/filled/corner, /obj/machinery/power/terminal, /obj/effect/landmark/ert_shuttle_spawn, -/obj/structure/cable{ - icon_state = "0-1" - }, +/obj/structure/cable, /obj/structure/cable{ icon_state = "1-4" }, @@ -168,15 +166,15 @@ "co" = ( /obj/effect/turf_decal/spline/fancy/opaque/black, /obj/effect/turf_decal/trimline/opaque/syndiered/filled/line, -/obj/effect/turf_decal/trimline/opaque/bar/filled/warning{ - dir = 1 - }, /obj/structure/cable{ icon_state = "4-8" }, /obj/structure/cable{ icon_state = "1-8" }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 1 + }, /turf/open/floor/plasteel/dark, /area/ship/bridge) "cF" = ( @@ -213,9 +211,7 @@ dir = 4; id = "runner_sub_holo" }, -/obj/structure/cable{ - icon_state = "0-1" - }, +/obj/structure/cable, /turf/open/floor/plating, /area/ship/bridge) "fa" = ( @@ -228,6 +224,15 @@ /obj/machinery/light/directional/south, /turf/open/floor/plasteel/tech/grid, /area/ship/bridge) +"fQ" = ( +/obj/effect/turf_decal/trimline/opaque/bar/filled/warning{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) "gi" = ( /obj/item/storage/backpack/duffelbag/med/surgery{ pixel_x = -2; @@ -325,15 +330,32 @@ }, /turf/open/floor/plasteel/mono/dark, /area/ship/bridge) +"mN" = ( +/obj/docking_port/mobile{ + dir = 2; + name = "trauma team shuttle"; + port_direction = 8; + preferred_direction = 4 + }, +/obj/machinery/door/poddoor{ + id = "runner_sub_door" + }, +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + dir = 8; + id = "runner_sub_holo" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ship/bridge) "nP" = ( /obj/effect/turf_decal/spline/fancy/opaque/black, /obj/effect/turf_decal/trimline/opaque/syndiered/filled/line, -/obj/effect/turf_decal/trimline/opaque/bar/filled/warning{ - dir = 1 - }, /obj/structure/cable{ icon_state = "1-8" }, +/obj/effect/turf_decal/trimline/opaque/bar/line{ + dir = 1 + }, /turf/open/floor/plasteel/dark, /area/ship/bridge) "rR" = ( @@ -389,13 +411,13 @@ /obj/effect/turf_decal/trimline/opaque/syndiered/filled/line{ dir = 1 }, -/obj/effect/turf_decal/trimline/opaque/bar/filled/warning, /obj/structure/cable{ icon_state = "2-8" }, /obj/structure/cable{ icon_state = "4-8" }, +/obj/effect/turf_decal/trimline/opaque/bar/line, /turf/open/floor/plasteel/dark, /area/ship/bridge) "DP" = ( @@ -420,23 +442,11 @@ /turf/open/floor/engine/hull, /area/ship/external) "Or" = ( -/obj/docking_port/mobile{ - dir = 2; - name = "trauma team shuttle"; - port_direction = 8; - preferred_direction = 4 - }, -/obj/machinery/door/poddoor{ - id = "runner_sub_door" - }, -/obj/machinery/power/shieldwallgen/atmos/roundstart{ - dir = 8; - id = "runner_sub_holo" - }, /obj/structure/cable{ - icon_state = "0-1" + icon_state = "1-2" }, -/turf/open/floor/plating, +/obj/effect/turf_decal/trimline/opaque/bar/filled/warning, +/turf/open/floor/plasteel/dark, /area/ship/bridge) "Pq" = ( /turf/template_noop, @@ -568,29 +578,29 @@ gs te "} (4,1,1) = {" -Pq bz +fQ co gA SE ku zS +Or dB -Pq "} (5,1,1) = {" -Pq sl +fQ nP ZN kM iR zS Or -Pq +mN "} (6,1,1) = {" -Pq +PD PD cF hJ @@ -598,7 +608,7 @@ ac hB bG PD -Pq +PD "} (7,1,1) = {" Pq diff --git a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm index 11840b667214..7bf283492efc 100644 --- a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm +++ b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm @@ -4672,8 +4672,7 @@ pixel_x = 6; pixel_y = 1 }, -/obj/item/gun/ballistic/automatic/sniper_rifle/syndicate{ - spawnwithmagazine = 0; +/obj/item/gun/ballistic/automatic/sniper_rifle/syndicate/no_mag{ pixel_x = -3; pixel_y = 6 }, @@ -5609,15 +5608,13 @@ /area/ship/security) "Gm" = ( /obj/structure/rack, -/obj/item/gun/ballistic/automatic/ebr{ +/obj/item/gun/ballistic/automatic/ebr/no_mag{ pixel_x = -16; pixel_y = 7; - spawnwithmagazine = 0 }, -/obj/item/gun/ballistic/automatic/ebr{ +/obj/item/gun/ballistic/automatic/ebr/no_mag{ pixel_x = -9; pixel_y = 2; - spawnwithmagazine = 0 }, /obj/item/ammo_box/magazine/ebr{ pixel_x = 10; @@ -7502,15 +7499,13 @@ /area/ship/hallway/aft) "Rv" = ( /obj/structure/rack, -/obj/item/gun/ballistic/shotgun/bulldog{ +/obj/item/gun/ballistic/shotgun/bulldog/no_mag{ pixel_x = -7; pixel_y = 7; - spawnwithmagazine = 0 }, -/obj/item/gun/ballistic/shotgun/bulldog{ +/obj/item/gun/ballistic/shotgun/bulldog/no_mag{ pixel_y = -3; pixel_x = 2; - spawnwithmagazine = 0 }, /obj/machinery/light/directional/north, /obj/item/ammo_box/magazine/m12g{ @@ -8841,19 +8836,16 @@ /area/ship/engineering/engine) "YO" = ( /obj/structure/rack, -/obj/item/gun/ballistic/automatic/smg/c20r{ +/obj/item/gun/ballistic/automatic/smg/c20r/no_mag{ pixel_x = 2; pixel_y = 8; - spawnwithmagazine = 0 }, -/obj/item/gun/ballistic/automatic/smg/c20r{ +/obj/item/gun/ballistic/automatic/smg/c20r/no_mag{ pixel_y = 3; - spawnwithmagazine = 0 }, -/obj/item/gun/ballistic/automatic/smg/c20r{ +/obj/item/gun/ballistic/automatic/smg/c20r/no_mag{ pixel_y = -2; pixel_x = 3; - spawnwithmagazine = 0 }, /obj/item/ammo_box/magazine/smgm45, /obj/item/ammo_box/magazine/smgm45, diff --git a/check_regex.yaml b/check_regex.yaml index 538d570daea4..e01c41995e8e 100644 --- a/check_regex.yaml +++ b/check_regex.yaml @@ -38,7 +38,7 @@ standards: - exactly: [ - 269, + 268, "non-bitwise << uses", '(?- -#define AMMO_BOX_PER_BULLET 1 -///ammo box will have a different state for full and empty; -max_ammo and -0 -#define AMMO_BOX_FULL_EMPTY 2 - -#define SUPPRESSED_NONE 0 -#define SUPPRESSED_QUIET 1 ///standard suppressed -#define SUPPRESSED_VERY 2 /// no message - -//Projectile Reflect -#define REFLECT_NORMAL (1<<0) -#define REFLECT_FAKEPROJECTILE (1<<1) - //Object/Item sharpness #define IS_BLUNT 0 #define IS_SHARP 1 @@ -214,23 +168,3 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list(/obj/item/gun))) //We will round to this value in damage calculations. #define DAMAGE_PRECISION 0.1 - -//bullet_act() return values -#define BULLET_ACT_HIT "HIT" //It's a successful hit, whatever that means in the context of the thing it's hitting. -#define BULLET_ACT_BLOCK "BLOCK" //It's a blocked hit, whatever that means in the context of the thing it's hitting. -#define BULLET_ACT_FORCE_PIERCE "PIERCE" //It pierces through the object regardless of the bullet being piercing by default. - -#define NICE_SHOT_RICOCHET_BONUS 10 //if the shooter has the NICE_SHOT trait and they fire a ricocheting projectile, add this to the ricochet chance and auto aim angle - -//Autofire component -/// Compatible firemode is in the gun. Wait until it's held in the user hands. -#define AUTOFIRE_STAT_IDLE (1<<0) -/// Gun is active and in the user hands. Wait until user does a valid click. -#define AUTOFIRE_STAT_ALERT (1<<1) -/// Gun is shooting. -#define AUTOFIRE_STAT_FIRING (1<<2) - -#define COMSIG_AUTOFIRE_ONMOUSEDOWN "autofire_onmousedown" - #define COMPONENT_AUTOFIRE_ONMOUSEDOWN_BYPASS (1<<0) -#define COMSIG_AUTOFIRE_SHOT "autofire_shot" - #define COMPONENT_AUTOFIRE_SHOT_SUCCESS (1<<0) diff --git a/code/__DEFINES/contracts.dm b/code/__DEFINES/contracts.dm index c6e23394ba2d..0e80652f4f52 100644 --- a/code/__DEFINES/contracts.dm +++ b/code/__DEFINES/contracts.dm @@ -7,14 +7,6 @@ #define CONTRACT_KNOWLEDGE "knowledge" #define CONTRACT_UNWILLING "unwilling" -#define BANE_SALT "salt" -#define BANE_LIGHT "light" -#define BANE_IRON "iron" -#define BANE_WHITECLOTHES "whiteclothes" -#define BANE_SILVER "silver" -#define BANE_HARVEST "harvest" -#define BANE_TOOLBOX "toolbox" - #define OBLIGATION_FOOD "food" #define OBLIGATION_FIDDLE "fiddle" #define OBLIGATION_DANCEOFF "danceoff" 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/do_afters.dm b/code/__DEFINES/do_afters.dm new file mode 100644 index 000000000000..456cf9404004 --- /dev/null +++ b/code/__DEFINES/do_afters.dm @@ -0,0 +1,4 @@ +#define DOAFTER_SOURCE_SURGERY "doafter_surgery" +#define DOAFTER_SOURCE_MECHADRILL "doafter_mechadrill" +#define DOAFTER_SOURCE_SURVIVALPEN "doafter_survivalpen" +#define DOAFTER_SOURCE_GETTING_UP "doafter_gettingup" diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index e0ac4b177001..c27a78ffd2de 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -123,6 +123,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define FLOATING (1<<3) /// When moving, will Cross()/Uncross() everything, but won't stop or Bump() anything. #define PHASING (1<<4) +#define THROWN (1<<5) //Fire and Acid stuff, for resistance_flags #define LAVA_PROOF (1<<0) diff --git a/code/__DEFINES/guns.dm b/code/__DEFINES/guns.dm index 0256ed11bedd..dba7ce93afaf 100644 --- a/code/__DEFINES/guns.dm +++ b/code/__DEFINES/guns.dm @@ -1,4 +1,61 @@ -//weapon manufacturers +//Gun weapon weight +/// Allows you to dual wield this gun and your offhand gun +#define WEAPON_LIGHT 1 +/// Does not allow you to dual wield with this gun and your offhand 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 +///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 +#define BOLT_TYPE_OPEN 2 +///Gun has no moving bolt mechanism, it cannot be racked. Also dumps the entire contents when emptied instead of a magazine. +/// Example: Break action shotguns, revolvers +#define BOLT_TYPE_NO_BOLT 3 +///Gun has a bolt, it locks back when empty. It can be released to chamber a round if a magazine is in. +/// Example: Pistols with a slide lock, some SMGs +#define BOLT_TYPE_LOCKING 4 +//Sawn off nerfs +///accuracy penalty of sawn off guns +#define SAWN_OFF_ACC_PENALTY 25 +///added recoil of sawn off guns +#define SAWN_OFF_RECOIL 1 + +//ammo box sprite defines +///ammo box will always use provided icon state +#define AMMO_BOX_ONE_SPRITE 0 +///ammo box will have a different state for each bullet; - +#define AMMO_BOX_PER_BULLET 1 +///ammo box will have a different state for full and empty; -max_ammo and -0 +#define AMMO_BOX_FULL_EMPTY 2 + +#define SUPPRESSED_NONE 0 +#define SUPPRESSED_QUIET 1 ///standard suppressed +#define SUPPRESSED_VERY 2 /// no message + +//Autofire component +/// Compatible firemode is in the gun. Wait until it's held in the user hands. +#define AUTOFIRE_STAT_IDLE (1<<0) +/// Gun is active and in the user hands. Wait until user does a valid click. +#define AUTOFIRE_STAT_ALERT (1<<1) +/// Gun is shooting. +#define AUTOFIRE_STAT_FIRING (1<<2) + +#define COMSIG_AUTOFIRE_ONMOUSEDOWN "autofire_onmousedown" + #define COMPONENT_AUTOFIRE_ONMOUSEDOWN_BYPASS (1<<0) +#define COMSIG_AUTOFIRE_SHOT "autofire_shot" + #define COMPONENT_AUTOFIRE_SHOT_SUCCESS (1<<0) + +#define DUALWIELD_PENALTY_EXTRA_MULTIPLIER 1.6 + #define MANUFACTURER_NONE null #define MANUFACTURER_SHARPLITE "the Sharplite Defense logo" #define MANUFACTURER_SHARPLITE_NEW "the Nanotrasen-Sharplite logo" @@ -14,3 +71,28 @@ #define MANUFACTURER_DONKCO "the Donk! Co. logo" #define MANUFACTURER_PGF "the Etherbor Industries emblem" #define MANUFACTURER_IMPORT "Lanchester Import Co." + + +///////////////// +// PROJECTILES // +///////////////// + +//bullet_act() return values +#define BULLET_ACT_HIT "HIT" //It's a successful hit, whatever that means in the context of the thing it's hitting. +#define BULLET_ACT_BLOCK "BLOCK" //It's a blocked hit, whatever that means in the context of the thing it's hitting. +#define BULLET_ACT_FORCE_PIERCE "PIERCE" //It pierces through the object regardless of the bullet being piercing by default. + +#define NICE_SHOT_RICOCHET_BONUS 10 //if the shooter has the NICE_SHOT trait and they fire a ricocheting projectile, add this to the ricochet chance and auto aim angle + +//Projectile Reflect +#define REFLECT_NORMAL (1<<0) +#define REFLECT_FAKEPROJECTILE (1<<1) + +#define MOVES_HITSCAN -1 //Not actually hitscan but close as we get without actual hitscan. +#define MUZZLE_EFFECT_PIXEL_INCREMENT 17 //How many pixels to move the muzzle flash up so your character doesn't look like they're shitting out lasers. + +#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/__DEFINES/icon_smoothing.dm b/code/__DEFINES/icon_smoothing.dm index 6c07dd234392..ff1072ffdbad 100644 --- a/code/__DEFINES/icon_smoothing.dm +++ b/code/__DEFINES/icon_smoothing.dm @@ -99,7 +99,6 @@ DEFINE_BITFIELD(smoothing_flags, list( #define SMOOTH_GROUP_SILVER_WALLS S_OBJ(3) ///turf/closed/wall/mineral/silver, /obj/structure/falsewall/silver #define SMOOTH_GROUP_DIAMOND_WALLS S_OBJ(4) ///turf/closed/wall/mineral/diamond, /obj/structure/falsewall/diamond #define SMOOTH_GROUP_PLASMA_WALLS S_OBJ(5) ///turf/closed/wall/mineral/plasma, /obj/structure/falsewall/plasma -#define SMOOTH_GROUP_BANANIUM_WALLS S_OBJ(6) ///turf/closed/wall/mineral/bananium, /obj/structure/falsewall/bananium #define SMOOTH_GROUP_SANDSTONE_WALLS S_OBJ(7) ///turf/closed/wall/mineral/sandstone, /obj/structure/falsewall/sandstone #define SMOOTH_GROUP_WOOD_WALLS S_OBJ(8) ///turf/closed/wall/mineral/wood, /obj/structure/falsewall/wood #define SMOOTH_GROUP_IRON_WALLS S_OBJ(9) ///turf/closed/wall/mineral/iron, /obj/structure/falsewall/iron diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index d1d782c84876..8026f9635a97 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -396,7 +396,11 @@ #define WABBAJACK (1<<6) #define SLEEP_CHECK_DEATH(X) sleep(X); if(QDELETED(src) || stat == DEAD) return; -#define INTERACTING_WITH(X, Y) (Y in X.do_afters) + +#define DOING_INTERACTION(user, interaction_key) (LAZYACCESS(user.do_afters, interaction_key)) +#define DOING_INTERACTION_LIMIT(user, interaction_key, max_interaction_count) ((LAZYACCESS(user.do_afters, interaction_key) || 0) >= max_interaction_count) +#define DOING_INTERACTION_WITH_TARGET(user, target) (LAZYACCESS(user.do_afters, target)) +#define DOING_INTERACTION_WITH_TARGET_LIMIT(user, target, max_interaction_count) ((LAZYACCESS(user.do_afters, target) || 0) >= max_interaction_count) /// If you examine the same atom twice in this timeframe, we call examine_more() instead of examine() #define EXAMINE_MORE_TIME 1 SECONDS diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm index a470b9087b2e..96d322285dfc 100644 --- a/code/__DEFINES/say.dm +++ b/code/__DEFINES/say.dm @@ -96,6 +96,8 @@ //Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam #define MAX_MESSAGE_LEN 1024 +#define MAX_FLAVOR_LEN 1024 +#define MAX_SHORTFLAVOR_LEN 100 #define MAX_NAME_LEN 42 #define MAX_BROADCAST_LEN 512 #define MAX_CHARTER_LEN 80 diff --git a/code/__DEFINES/timed_action.dm b/code/__DEFINES/timed_action.dm new file mode 100644 index 000000000000..90572cdc5416 --- /dev/null +++ b/code/__DEFINES/timed_action.dm @@ -0,0 +1,10 @@ +// timed_action_flags parameter for 'proc/do_after' + +// The user can move freely without canceling the do_after +#define IGNORE_USER_LOC_CHANGE (1<<0) +// The target can move freely without canceling the do_after +#define IGNORE_TARGET_LOC_CHANGE (1<<1) +/// Can do the action even if the item is no longer being held +#define IGNORE_HELD_ITEM (1<<2) +/// Can do the action even if the mob is incapacitated +#define IGNORE_INCAPACITATED (1<<3) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 72123b78268c..f88f0c9d791c 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -294,8 +294,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_NIGHT_VISION "night_vision" #define TRAIT_LIGHT_STEP "light_step" #define TRAIT_SPIRITUAL "spiritual" -#define TRAIT_FAN_CLOWN "fan_clown" -#define TRAIT_FAN_MIME "fan_mime" #define TRAIT_FAN_RILENA "fan_rilena" #define TRAIT_VORACIOUS "voracious" #define TRAIT_SELF_AWARE "self_aware" diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 5e8a6cc62588..6a3028443dcc 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -242,66 +242,6 @@ GLOBAL_LIST_EMPTY(species_list) else return "unknown" -///Timed action involving two mobs, the user and the target. -/proc/do_mob(mob/user , mob/target, time = 3 SECONDS, uninterruptible = FALSE, progress = TRUE, datum/callback/extra_checks = null, ignore_loc_change = FALSE, hidden = FALSE) - if(!user || !target) - return FALSE - - if(target && INTERACTING_WITH(user, target)) - to_chat(user, "You're already interacting with [target]!") - return - - var/user_loc = user.loc - - var/drifting = FALSE - if(!user.Process_Spacemove(0) && user.inertia_dir) - drifting = TRUE - - var/target_loc = target.loc - - LAZYADD(user.do_afters, target) - LAZYADD(target.targeted_by, user) - var/holding = user.get_active_held_item() - var/datum/progressbar/progbar - var/datum/cogbar/cog - if (progress) - progbar = new(user, time, target) - if(!hidden && time >= 1 SECONDS) - cog = new(user) - - var/endtime = world.time+time - var/starttime = world.time - . = TRUE - while (world.time < endtime) - stoplag(1) - if(!QDELETED(progbar)) - progbar.update(world.time - starttime) - if(QDELETED(user) || QDELETED(target)) - . = FALSE - break - if(uninterruptible) - continue - - if(drifting && !user.inertia_dir) - drifting = FALSE - user_loc = user.loc - - - if(!ignore_loc_change && ((!drifting && user.loc != user_loc) || target.loc != target_loc)) - . = FALSE - break - - if(user.get_active_held_item() != holding || user.incapacitated() || (extra_checks && !extra_checks.Invoke())) - . = FALSE - break - if(!QDELETED(progbar)) - progbar.end_progress() - - cog?.remove() - if(!QDELETED(target)) - LAZYREMOVE(user.do_afters, target) - LAZYREMOVE(target.targeted_by, user) - //some additional checks as a callback for for do_afters that want to break on losing health or on the mob taking action /mob/proc/break_do_after_checks(list/checked_health, check_clicks) if(check_clicks && next_move > world.time) @@ -316,24 +256,40 @@ GLOBAL_LIST_EMPTY(species_list) checked_health["health"] = health return ..() -///Timed action involving one mob user. Target is optional. -/proc/do_after(mob/user, delay, needhand = TRUE, atom/target = null, progress = TRUE, datum/callback/extra_checks = null, hidden = FALSE) +/** + * Timed action involving one mob user. A target can also be specified, but it is optional. + * + * Checks that `user` does not move, change hands, get stunned, etc. for the + * given `delay`. Returns `TRUE` on success or `FALSE` on failure. + * + * Arguments: + * * user - the primary "user" of the do_after. + * * delay - how long the do_after takes. Defaults to 3 SECONDS. + * * target - the (optional) target mob of the do_after. If they move/cease to exist, the do_after is cancelled. + * * timed_action_flags - optional flags to override certain do_after checks (see DEFINES/timed_action.dm). + * * progress - if TRUE, a progress bar is displayed. + * * extra_checks - a callback that can be used to add extra checks to the do_after. Returning false in this callback will cancel the do_after. + */ +/proc/do_after(mob/user, delay = 3 SECONDS, atom/target, timed_action_flags = NONE, progress = TRUE, datum/callback/extra_checks, interaction_key, max_interact_count = 1, hidden = FALSE) if(!user) return FALSE + if(!isnum(delay)) + CRASH("do_after was passed a non-number delay: [delay || "null"].") - if(target && INTERACTING_WITH(user, target)) + if(target && DOING_INTERACTION_WITH_TARGET(user, target)) to_chat(user, "You're already interacting with [target]!") return - var/atom/Tloc = null - if(target && !isturf(target)) - Tloc = target.loc - - if(target) - LAZYADD(user.do_afters, target) - LAZYADD(target.targeted_by, user) + if(!interaction_key && target) + interaction_key = target //Use the direct ref to the target + if(interaction_key) //Do we have a interaction_key now? + var/current_interaction_count = LAZYACCESS(user.do_afters, interaction_key) || 0 + if(current_interaction_count >= max_interact_count) //We are at our peak + return + LAZYSET(user.do_afters, interaction_key, current_interaction_count + 1) - var/atom/Uloc = user.loc + var/atom/user_loc = user.loc + var/atom/target_loc = target?.loc var/drifting = FALSE if(!user.Process_Spacemove(0) && user.inertia_dir) @@ -341,136 +297,59 @@ GLOBAL_LIST_EMPTY(species_list) var/holding = user.get_active_held_item() - var/holdingnull = TRUE //User's hand started out empty, check for an empty hand - if(holding) - holdingnull = FALSE //Users hand started holding something, check to see if it's still holding that - delay *= user.do_after_coefficent() var/datum/progressbar/progbar var/datum/cogbar/cog + if(progress) - progbar = new(user, delay, target || user) + if(user.client) + progbar = new(user, delay, target || user) + if(!hidden && delay >= 1 SECONDS) cog = new(user) + var/endtime = world.time + delay var/starttime = world.time . = TRUE while (world.time < endtime) stoplag(1) + if(!QDELETED(progbar)) progbar.update(world.time - starttime) if(drifting && !user.inertia_dir) drifting = FALSE - Uloc = user.loc + user_loc = user.loc - if(QDELETED(user) || user.stat || (!drifting && user.loc != Uloc) || (extra_checks && !extra_checks.Invoke())) + // Check flags + if(QDELETED(user) \ + || (!(timed_action_flags & IGNORE_USER_LOC_CHANGE) && !drifting && user.loc != user_loc) \ + || (!(timed_action_flags & IGNORE_HELD_ITEM) && user.get_active_held_item() != holding) \ + || (!(timed_action_flags & IGNORE_INCAPACITATED) && HAS_TRAIT(user, TRAIT_INCAPACITATED)) \ + || (extra_checks && !extra_checks.Invoke())) . = FALSE break - if(isliving(user)) - var/mob/living/L = user - if(L.IsStun() || L.IsParalyzed()) - . = FALSE - break - - if(!QDELETED(Tloc) && (QDELETED(target) || Tloc != target.loc)) - if((Uloc != Tloc || Tloc != user) && !drifting) - . = FALSE - break - - if(target && !(target in user.do_afters)) + // If we have a target, we check for them moving here. We don't care about it if we're drifting or we ignore target loc change + if(target && (user != target) && \ + (QDELETED(target) \ + || (!(timed_action_flags & IGNORE_TARGET_LOC_CHANGE) && target.loc != target_loc))) . = FALSE break - if(needhand) - //This might seem like an odd check, but you can still need a hand even when it's empty - //i.e the hand is used to pull some item/tool out of the construction - if(!holdingnull) - if(!holding) - . = FALSE - break - if(user.get_active_held_item() != holding) - . = FALSE - break if(!QDELETED(progbar)) progbar.end_progress() cog?.remove() - if(!QDELETED(target)) - LAZYREMOVE(user.do_afters, target) - LAZYREMOVE(target.targeted_by, user) + if(interaction_key) + LAZYREMOVE(user.do_afters, interaction_key) /mob/proc/do_after_coefficent() // This gets added to the delay on a do_after, default 1 . = 1 return -///Timed action involving at least one mob user and a list of targets. -/proc/do_after_mob(mob/user, list/targets, time = 3 SECONDS, uninterruptible = FALSE, progress = TRUE, datum/callback/extra_checks) - if(!user) - return FALSE - if(!islist(targets)) - targets = list(targets) - if(!length(targets)) - return FALSE - - for(var/i in targets) - var/mob/living/target = i - if(INTERACTING_WITH(user, target)) - to_chat(user, "You're already interacting with [target]!") - return - - - var/user_loc = user.loc - - var/drifting = FALSE - if(!user.Process_Spacemove(0) && user.inertia_dir) - drifting = TRUE - - var/list/originalloc = list() - for(var/atom/target in targets) - originalloc[target] = target.loc - LAZYADD(user.do_afters, target) - LAZYADD(target.targeted_by, user) - - var/holding = user.get_active_held_item() - var/datum/progressbar/progbar - if(progress) - progbar = new(user, time, targets[1]) - - var/endtime = world.time + time - var/starttime = world.time - . = TRUE - mainloop: - while(world.time < endtime) - stoplag(1) - if(!QDELETED(progbar)) - progbar.update(world.time - starttime) - if(QDELETED(user) || !targets) - . = FALSE - break - if(uninterruptible) - continue - - if(drifting && !user.inertia_dir) - drifting = FALSE - user_loc = user.loc - - for(var/atom/target in targets) - if((!drifting && user_loc != user.loc) || QDELETED(target) || originalloc[target] != target.loc || user.get_active_held_item() != holding || user.incapacitated() || (extra_checks && !extra_checks.Invoke())) - . = FALSE - break mainloop - if(!QDELETED(progbar)) - progbar.end_progress() - - for(var/thing in targets) - var/atom/target = thing - if(!QDELETED(target)) - LAZYREMOVE(user.do_afters, target) - LAZYREMOVE(target.targeted_by, user) - /proc/is_species(A, species_datum) . = FALSE if(ishuman(A)) diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm index 7cdaf32b0531..7054c051f707 100644 --- a/code/__HELPERS/names.dm +++ b/code/__HELPERS/names.dm @@ -233,64 +233,52 @@ GLOBAL_DATUM(syndicate_code_response_regex, /regex) else . += ", " +#define FACTION_SYNDICATE "Syndicate" + #define FACTION_NGR "New Gorlex Republic" + #define FACTION_CYBERSUN "CyberSun" + #define FACTION_SUNS "Student-Union of Naturalistic Sciences" +#define FACTION_SOLGOV "SolGov" +#define FACTION_SRM "Saint-Roumain Militia" +#define FACTION_INTEQ "Inteq Risk Management Group" +#define FACTION_CLIP "CLIP Minutemen" +#define FACTION_NT "Nanotrasen" + #define FACTION_NS_LOGI "N+S Logistics" + #define FACTION_VIGILITAS "Vigilitas Interstellar" +#define FACTION_FRONTIER "Frontiersmen Fleet" +#define FACTION_PGF "Pan-Gezenan Federation" +#define FACTION_INDEPENDENT "Independent" + +#define PREFIX_SYNDICATE list("SEV", "SSV") + #define PREFIX_NGR list("NGRV") + #define PREFIX_CYBERSUN list("CSSV") + #define PREFIX_SUNS list("SUNS") +#define PREFIX_SOLGOV list("SCSV") +#define PREFIX_SRM list("SRSV") +#define PREFIX_INTEQ list("IRMV") +#define PREFIX_CLIP list("CMSV", "CMGSV") +#define PREFIX_NT list("NTSV") + #define PREFIX_NS_LOGI list("NSSV") + #define PREFIX_VIGILITAS list("VISV") +#define PREFIX_FRONTIER list("FFV") +#define PREFIX_PGF list("PGF", "PGFMC", "PGFN") +#define PREFIX_INDEPENDENT list("SV", "IMV", "ISV") + /// List of all ship factions to their prefixes. GLOBAL_LIST_INIT(ship_faction_to_prefixes, list( - "Syndicate" = list( - "SEV", - "SSV", - ), - "New Gorlex Republic" = list( - "NGRV", - ), - "CyberSun" = list( - "CSSV", - ), - "Student-Union of Naturalistic Sciences" = list( - "SUNS", - ), - "SolGov" = list( - "SCSV", - ), - "Saint-Roumain Militia" = list( - "SRSV", - ), - "Independent" = list( - "SV", - "IMV", - "ISV", - "XSV", - ), - "Inteq Risk Management Group" = list( - "IRMV", - ), - "CLIP Minutemen" = list( - "CMSV", - "CMGSV", - ), - "CLIP Government" = list( - "LGSV", - "CGSV", - ), - "Nanotrasen" = list( - "NTSV", - ), - "N+S Logistics" = list( - "NSSV", - ), - "Vigilitas Interstellar" = list( - "VISV", - ), - "Frontiersmen Fleet" = list( - "FFV", - ), - "Saint-Roumaine Militia" = list( - "SRSV", - ), - "Pan-Gezenan Federation" = list( - "PGF", - "PGFMC", - "PGFN", - ), + FACTION_SYNDICATE = PREFIX_SYNDICATE, + FACTION_NGR = PREFIX_NGR, + FACTION_CYBERSUN = PREFIX_CYBERSUN, + FACTION_SUNS = PREFIX_SUNS, + FACTION_SOLGOV = PREFIX_SOLGOV, + FACTION_SRM = PREFIX_SRM, + FACTION_INTEQ = PREFIX_INTEQ, + FACTION_CLIP = PREFIX_CLIP, + FACTION_NT = PREFIX_NT, + FACTION_NS_LOGI = PREFIX_NS_LOGI, + FACTION_VIGILITAS = PREFIX_VIGILITAS, + FACTION_FRONTIER = PREFIX_FRONTIER, + FACTION_PGF = PREFIX_PGF, + FACTION_INDEPENDENT = PREFIX_INDEPENDENT )) /proc/ship_prefix_to_faction(prefix) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 8e9a1dbc9979..c8c7b63d0a09 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1329,44 +1329,6 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) temp = ((temp + (temp>>3))&29127) % 63 //070707 return temp -//same as do_mob except for movables and it allows both to drift and doesn't draw progressbar -/proc/do_atom(atom/movable/user , atom/movable/target, time = 30, uninterruptible = 0,datum/callback/extra_checks = null) - if(!user || !target) - return TRUE - var/user_loc = user.loc - - var/drifting = FALSE - if(!user.Process_Spacemove(0) && user.inertia_dir) - drifting = TRUE - - var/target_drifting = FALSE - if(!target.Process_Spacemove(0) && target.inertia_dir) - target_drifting = TRUE - - var/target_loc = target.loc - - var/endtime = world.time+time - . = TRUE - while (world.time < endtime) - stoplag(1) - if(QDELETED(user) || QDELETED(target)) - . = 0 - break - if(uninterruptible) - continue - - if(drifting && !user.inertia_dir) - drifting = FALSE - user_loc = user.loc - - if(target_drifting && !target.inertia_dir) - target_drifting = FALSE - target_loc = target.loc - - if((!drifting && user.loc != user_loc) || (!target_drifting && target.loc != target_loc) || (extra_checks && !extra_checks.Invoke())) - . = FALSE - break - //returns a GUID like identifier (using a mostly made up record format) //guids are not on their own suitable for access or security tokens, as most of their bits are predictable. // (But may make a nice salt to one) diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index 1dffeca4be1b..bbfb0d3a74c5 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -191,6 +191,7 @@ DEFINE_BITFIELD(movement_type, list( "GROUND" = GROUND, "PHASING" = PHASING, "VENTCRAWLING" = VENTCRAWLING, + "THROWN" = THROWN, )) DEFINE_BITFIELD(obj_flags, list( diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index b0a196e4ee95..f9edbc500142 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -190,6 +190,22 @@ GLOBAL_LIST_INIT(exowearlist, list(PREF_NOEXOWEAR, PREF_EXOWEAR, PREF_ALTEXOWEAR #define UPLINK_PEN "Pen" //like a real spy! GLOBAL_LIST_INIT(uplink_spawn_loc_list, list(UPLINK_PDA, UPLINK_RADIO, UPLINK_PEN)) +//favorite cigarette brand +#define PREF_CIG_SPACE "Space Cigarettes" +#define PREF_CIG_DROMEDARY "DromedaryCo Cigarettes" +#define PREF_CIG_UPLIFT "Uplift Smooth Cigarettes" +#define PREF_CIG_ROBUST "Robust Cigarettes" +#define PREF_CIG_ROBUSTGOLD "Robust Gold Cigarettes" +#define PREF_CIG_CARP "Carp Classic Cigarettes" +#define PREF_CIG_MIDORI "Midori Taboko Rollies" +#define PREF_CIGAR "Premium Cigars" +#define PREF_CIGAR_SOLAR "Solarian Cigars" +#define PREF_CIGAR_COHIBA "Cohiba Cigars" +#define PREF_VAPE "Vape Pen" +#define PREF_PIPE "Fancy Pipe" + +GLOBAL_LIST_INIT(valid_smoke_types, sortList(list(PREF_CIG_SPACE, PREF_CIG_DROMEDARY, PREF_CIG_UPLIFT, PREF_CIG_ROBUST, PREF_CIG_ROBUSTGOLD, PREF_CIG_CARP, PREF_CIG_MIDORI, PREF_CIGAR, PREF_CIGAR_SOLAR, PREF_CIGAR_COHIBA, PREF_VAPE, PREF_PIPE))) + //Female Uniforms GLOBAL_LIST_EMPTY(female_clothing_icons) //Alternate species icons diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index dbc3607129f4..5f5c26731d15 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -125,8 +125,6 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_NIGHT_VISION" = TRAIT_NIGHT_VISION, "TRAIT_LIGHT_STEP" = TRAIT_LIGHT_STEP, "TRAIT_SPIRITUAL" = TRAIT_SPIRITUAL, - "TRAIT_FAN_CLOWN" = TRAIT_FAN_CLOWN, - "TRAIT_FAN_MIME" = TRAIT_FAN_MIME, "TRAIT_VORACIOUS" = TRAIT_VORACIOUS, "TRAIT_SELF_AWARE" = TRAIT_SELF_AWARE, "TRAIT_FREERUNNING" = TRAIT_FREERUNNING, diff --git a/code/controllers/subsystem/events.dm b/code/controllers/subsystem/events.dm index 32f404c936a6..dc55c7ca0755 100644 --- a/code/controllers/subsystem/events.dm +++ b/code/controllers/subsystem/events.dm @@ -102,7 +102,7 @@ SUBSYSTEM_DEF(events) // Why the heck is this here! Took me so damn long to find! /client/proc/forceEvent() set name = "Trigger Event" - set category = "Admin.Events" + set category = "Event" if(!holder ||!check_rights(R_FUN)) return diff --git a/code/controllers/subsystem/overmap.dm b/code/controllers/subsystem/overmap.dm index 93852230b244..1304eeeb34ea 100644 --- a/code/controllers/subsystem/overmap.dm +++ b/code/controllers/subsystem/overmap.dm @@ -133,7 +133,7 @@ SUBSYSTEM_DEF(overmap) spawn_ruin_levels() spawn_outpost() - spawn_initial_ships() + //spawn_initial_ships() /** * VERY Simple random generation for overmap events, spawns the event in a random turf and sometimes spreads it out similar to ores @@ -212,6 +212,7 @@ SUBSYSTEM_DEF(overmap) new found_type(location) return +/* /datum/controller/subsystem/overmap/proc/spawn_initial_ships() #ifndef UNIT_TESTS var/datum/map_template/shuttle/selected_template = SSmapping.maplist[pick(SSmapping.maplist)] @@ -224,10 +225,11 @@ SUBSYSTEM_DEF(overmap) query_round_map_name.Execute() qdel(query_round_map_name) #endif +*/ /** * Spawns a controlled ship with the passed template at the template's preferred spawn location. - * Inteded for ship purchases, etc. + * Intended for ship purchases, etc. */ /datum/controller/subsystem/overmap/proc/spawn_ship_at_start(datum/map_template/shuttle/template) //Should never happen, but just in case. This'll delay the next spawn until the current one is done. diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index 9dc117783af9..c6f9e4404c07 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -23,7 +23,6 @@ PROCESSING_SUBSYSTEM_DEF(quirks) list("Ageusia","Vegetarian","Deviant Tastes"), \ list("Ananas Affinity","Ananas Aversion"), \ list("Alcohol Tolerance","Light Drinker"), \ - list("Clown Fan","Mime Fan", "RILENA Super Fan"), \ list("Bad Touch", "Friendly")) species_blacklist = list("Blood Deficiency" = list(SPECIES_IPC, SPECIES_JELLYPERSON, SPECIES_PLASMAMAN, SPECIES_VAMPIRE)) diff --git a/code/controllers/subsystem/throwing.dm b/code/controllers/subsystem/throwing.dm index 0260e952d10d..e8cd514eb48b 100644 --- a/code/controllers/subsystem/throwing.dm +++ b/code/controllers/subsystem/throwing.dm @@ -47,7 +47,7 @@ SUBSYSTEM_DEF(throwing) /datum/thrownthing var/atom/movable/thrownthing - var/atom/target + var/datum/weakref/initial_target var/turf/target_turf var/target_zone var/init_dir @@ -71,12 +71,13 @@ SUBSYSTEM_DEF(throwing) var/last_move = 0 -/datum/thrownthing/New(thrownthing, target, target_turf, init_dir, maxrange, speed, thrower, diagonals_first, force, gentle, callback, target_zone) +/datum/thrownthing/New(thrownthing, target, init_dir, maxrange, speed, thrower, diagonals_first, force, gentle, callback, target_zone) . = ..() src.thrownthing = thrownthing RegisterSignal(thrownthing, COMSIG_PARENT_QDELETING, PROC_REF(on_thrownthing_qdel)) - src.target = target - src.target_turf = target_turf + src.target_turf = get_turf(target) + if(target_turf != target) + src.initial_target = WEAKREF(target) src.init_dir = init_dir src.maxrange = maxrange src.speed = speed @@ -87,14 +88,13 @@ SUBSYSTEM_DEF(throwing) src.callback = callback src.target_zone = target_zone - /datum/thrownthing/Destroy() SSthrowing.processing -= thrownthing SSthrowing.currentrun -= thrownthing thrownthing.throwing = null thrownthing = null - target = null thrower = null + initial_target = null if(callback) QDEL_NULL(callback) //It stores a reference to the thrownthing, its source. Let's clean that. return ..() @@ -109,6 +109,7 @@ SUBSYSTEM_DEF(throwing) /datum/thrownthing/proc/tick() var/atom/movable/AM = thrownthing + AM.setMovetype(AM.movement_type | THROWN) if (!isturf(AM.loc) || !AM.throwing) finalize() return @@ -117,9 +118,17 @@ SUBSYSTEM_DEF(throwing) delayed_time += world.time - last_move return - if (dist_travelled && hitcheck()) //to catch sneaky things moving on our tile while we slept - finalize() - return + var/atom/movable/actual_target = initial_target?.resolve() + + if(dist_travelled) //to catch sneaky things moving on our tile while we slept + for(var/atom/movable/obstacle as anything in get_turf(thrownthing)) + if (obstacle == thrownthing || (obstacle == thrower && !ismob(thrownthing))) + continue + if(obstacle.pass_flags_self & LETPASSTHROW) + continue + if (obstacle == actual_target || (obstacle.density && !(obstacle.flags_1 & ON_BORDER_1))) + finalize(TRUE, obstacle) + return var/atom/step @@ -146,10 +155,15 @@ SUBSYSTEM_DEF(throwing) finalize() return - AM.Move(step, get_dir(AM, step), DELAY_TO_GLIDE_SIZE(1 / speed)) + if(!AM.Move(step, get_dir(AM, step), DELAY_TO_GLIDE_SIZE(1 / speed))) // we hit something during our move... + if(AM.throwing) // ...but finalize() wasn't called on Bump() because of a higher level definition that doesn't always call parent. + finalize() + return - if (!AM.throwing) // we hit something during our move - finalize(hit = TRUE) + dist_travelled++ + + if(actual_target && !(actual_target.pass_flags_self & LETPASSTHROW) && actual_target.loc == AM.loc) // we crossed a movable with no density (e.g. a mouse or APC) we intend to hit anyway. + finalize(TRUE, actual_target) return dist_travelled++ @@ -158,18 +172,19 @@ SUBSYSTEM_DEF(throwing) finalize() return -/datum/thrownthing/proc/finalize(hit = FALSE, target=null) +//If the target hasent been hit search for it in the turf we landed on. +/datum/thrownthing/proc/finalize(hit = FALSE, target = null) set waitfor = FALSE //done throwing, either because it hit something or it finished moving if(!thrownthing) return thrownthing.throwing = null + thrownthing.setMovetype(thrownthing.movement_type & ~THROWN) if (!hit) - for (var/thing in get_turf(thrownthing)) //looking for our target on the turf we land on. - var/atom/A = thing - if (A == target) + for (var/atom/movable/obstacle as anything in get_turf(thrownthing)) //looking for our target on the turf we land on. + if (obstacle == target) hit = TRUE - thrownthing.throw_impact(A, src) + thrownthing.throw_impact(obstacle, src) if(QDELETED(thrownthing)) //throw_impact can delete things, such as glasses smashing return //deletion should already be handled by on_thrownthing_qdel() break @@ -195,15 +210,3 @@ SUBSYSTEM_DEF(throwing) T.zFall(thrownthing) qdel(src) - -/datum/thrownthing/proc/hit_atom(atom/A) - finalize(hit=TRUE, target=A) - -/datum/thrownthing/proc/hitcheck() - for (var/thing in get_turf(thrownthing)) - var/atom/movable/AM = thing - if (AM == thrownthing || (AM == thrower && !ismob(thrownthing))) - continue - if (AM.density && !(AM.pass_flags_self & LETPASSTHROW) && !(AM.flags_1 & ON_BORDER_1)) - finalize(hit=TRUE, target=AM) - return TRUE diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm index 64339d794205..25ae750eb0d3 100644 --- a/code/controllers/subsystem/traumas.dm +++ b/code/controllers/subsystem/traumas.dm @@ -41,7 +41,7 @@ SUBSYSTEM_DEF(traumas) "spiders" = typecacheof(list(/mob/living/simple_animal/hostile/poison/giant_spider)), "security" = typecacheof(list(/mob/living/simple_animal/bot/secbot)), "lizards" = typecacheof(list(/mob/living/simple_animal/hostile/lizard)), - "skeletons" = typecacheof(list(/mob/living/simple_animal/hostile/skeleton)), + "skeletons" = typecacheof(list(/mob/living/simple_animal/hostile/human/skeleton)), "snakes" = typecacheof(list(/mob/living/simple_animal/hostile/retaliate/poison/snake)), "robots" = typecacheof(list(/mob/living/silicon/robot, /mob/living/silicon/ai, /mob/living/simple_animal/drone, /mob/living/simple_animal/bot, /mob/living/simple_animal/hostile/swarmer)), @@ -90,10 +90,10 @@ SUBSYSTEM_DEF(traumas) /obj/item/clothing/under/rank/command/captain, /obj/item/clothing/under/rank/security/head_of_security, /obj/item/clothing/under/rank/engineering/chief_engineer, /obj/item/clothing/under/rank/medical/chief_medical_officer, /obj/item/clothing/under/rank/command/head_of_personnel, /obj/item/clothing/under/rank/rnd/research_director, - /obj/item/clothing/under/rank/security/head_of_security/alt,//WS Edit - Better security jumpsuit sprites + /obj/item/clothing/under/rank/security/head_of_security/alt, /obj/item/clothing/under/rank/rnd/research_director/alt, /obj/item/clothing/under/rank/rnd/research_director/turtleneck, /obj/item/clothing/under/rank/security/head_of_security/parade, - /obj/item/clothing/under/rank/security/head_of_security/parade/female, //WS Edit - Better Command Uniforms + /obj/item/clothing/under/rank/security/head_of_security/parade/female, /obj/item/clothing/head/helmet/abductor, /obj/item/clothing/suit/armor/abductor/vest, /obj/item/melee/baton/abductor, /obj/item/storage/belt/military/abductor, /obj/item/gun/energy/alien, /obj/item/abductor/silencer, /obj/item/abductor/gizmo, /obj/item/clothing/under/rank/centcom/official, @@ -128,11 +128,10 @@ SUBSYSTEM_DEF(traumas) /obj/item/melee/cultblade, /obj/item/cult_bastard, /obj/item/restraints/legcuffs/bola/cult, /obj/item/clothing/suit/space/hardsuit/cult, /obj/item/clothing/suit/hooded/cultrobes, /obj/item/clothing/head/hooded/cult_hoodie, /obj/effect/rune, - /obj/item/stack/sheet/runed_metal, /obj/machinery/door/airlock/cult, /obj/singularity/narsie, + /obj/machinery/door/airlock/cult, /obj/singularity/narsie, /obj/item/soulstone, /obj/item/clothing/suit/wizrobe, /obj/item/clothing/head/wizard, /obj/item/spellbook, /obj/item/staff, /obj/item/clothing/suit/space/hardsuit/shielded/wizard, /obj/item/clothing/suit/space/hardsuit/wizard, - /obj/item/gun/magic/staff, /obj/item/gun/magic/wand, /obj/item/nullrod, /obj/item/clothing/under/rank/civilian/chaplain)), "aliens" = typecacheof(list( 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/_component.dm b/code/datums/components/_component.dm index 1d16391a18e1..d76504787b04 100644 --- a/code/datums/components/_component.dm +++ b/code/datums/components/_component.dm @@ -321,10 +321,12 @@ // all the objects that are receiving the signal get the signal this final time. // AKA: No you can't cancel the signal reception of another object by doing an unregister in the same signal. var/list/queued_calls = list() - for(var/datum/listening_datum as anything in target) - queued_calls[listening_datum] = listening_datum.signal_procs[src][sigtype] - for(var/datum/listening_datum as anything in queued_calls) - . |= call(listening_datum, queued_calls[listening_datum])(arglist(arguments)) + // This should be faster than doing `var/datum/listening_datum as anything in target` as it does not implicitly copy the list + for(var/i in 1 to length(target)) + var/datum/listening_datum = target[i] + queued_calls.Add(listening_datum, listening_datum.signal_procs[src][sigtype]) + for(var/i in 1 to length(queued_calls) step 2) + . |= call(queued_calls[i], queued_calls[i + 1])(arglist(arguments)) // The type arg is casted so initial works, you shouldn't be passing a real instance into this /** diff --git a/code/datums/components/butchering.dm b/code/datums/components/butchering.dm index 6923760a7705..55ba84fb5f7d 100644 --- a/code/datums/components/butchering.dm +++ b/code/datums/components/butchering.dm @@ -51,10 +51,14 @@ /datum/component/butchering/proc/startButcher(obj/item/source, mob/living/M, mob/living/user) to_chat(user, "You begin to butcher [M]...") playsound(M.loc, butcher_sound, 50, TRUE, -1) - if(do_mob(user, M, speed) && M.Adjacent(source)) + if(do_after(user, speed, M) && M.Adjacent(source)) Butcher(user, M) /datum/component/butchering/proc/startNeckSlice(obj/item/source, mob/living/carbon/human/H, mob/living/user) + if(DOING_INTERACTION_WITH_TARGET(user, H)) + to_chat(user, "You're already interacting with [H]!") + return + user.visible_message("[user] is slitting [H]'s throat!", \ "You start slicing [H]'s throat!", \ "You hear a cutting noise!", ignored_mobs = H) @@ -63,7 +67,7 @@ log_combat(user, H, "starts slicing the throat of") playsound(H.loc, butcher_sound, 50, TRUE, -1) - if(do_mob(user, H, clamp(500 / source.force, 30, 100)) && H.Adjacent(source)) + if(do_after(user, clamp(500 / source.force, 30, 100), H) && H.Adjacent(source)) if(H.has_status_effect(/datum/status_effect/neck_slice)) user.show_message("[H]'s neck has already been already cut, you can't make the bleeding any worse!", MSG_VISUAL, \ "Their neck has already been already cut, you can't make the bleeding any worse!") diff --git a/code/datums/components/crafting/recipes/misc.dm b/code/datums/components/crafting/recipes/misc.dm index 4df0521bcff3..0ed4acb5be78 100644 --- a/code/datums/components/crafting/recipes/misc.dm +++ b/code/datums/components/crafting/recipes/misc.dm @@ -211,3 +211,10 @@ /obj/item/organ/heart = 1, /obj/item/stack/sheet/cotton/cloth = 3) category = CAT_MISC + +/datum/crafting_recipe/candorupgrade + name = "Candor Upgrade" + result = /obj/item/gun/ballistic/automatic/pistol/candor/phenex + reqs = list(/obj/item/stack/sheet/mineral/hidden = 4, + /obj/item/gun/ballistic/automatic/pistol/candor = 1) + category = CAT_MISC diff --git a/code/datums/components/crafting/recipes/tribal.dm b/code/datums/components/crafting/recipes/tribal.dm index ec974a563fce..83e5c03722bc 100644 --- a/code/datums/components/crafting/recipes/tribal.dm +++ b/code/datums/components/crafting/recipes/tribal.dm @@ -12,8 +12,8 @@ time = 35 reqs = list(/obj/item/stack/sheet/bone = 2, /obj/item/stack/sheet/sinew = 3, - /obj/item/crusher_trophy/wolf_ear = 2, - /obj/item/crusher_trophy/fang = 1) + /obj/item/mob_trophy/wolf_ear = 2, + /obj/item/mob_trophy/fang = 1) category = CAT_PRIMAL /datum/crafting_recipe/bonecodpiece @@ -21,7 +21,7 @@ result = /obj/item/clothing/accessory/skullcodpiece time = 20 reqs = list(/obj/item/stack/sheet/bone = 2, - /obj/item/crusher_trophy/legion_skull = 1, + /obj/item/mob_trophy/legion_skull = 1, /obj/item/stack/sheet/animalhide/goliath_hide = 1) category = CAT_PRIMAL diff --git a/code/datums/components/edible.dm b/code/datums/components/edible.dm index 3a047d082868..cf0199d05e18 100644 --- a/code/datums/components/edible.dm +++ b/code/datums/components/edible.dm @@ -115,7 +115,7 @@ Behavior that's still missing from this component that original food items had t . = COMPONENT_ITEM_NO_ATTACK //Point of no return I suppose if(eater == feeder)//If you're eating it yourself. - if(!do_mob(feeder, eater, eat_time)) //Gotta pass the minimal eat time + if(!do_after(feeder, eat_time, eater)) //Gotta pass the minimal eat time return var/eatverb = pick(eatverbs) if(junkiness && eater.satiety < -150 && eater.nutrition > NUTRITION_LEVEL_STARVING + 50 && !HAS_TRAIT(eater, TRAIT_VORACIOUS)) @@ -143,7 +143,7 @@ Behavior that's still missing from this component that original food items had t eater.visible_message("[feeder] cannot force any more of [parent] down [eater]'s throat!", \ "[feeder] cannot force any more of [parent] down your throat!") return - if(!do_mob(feeder, eater)) //Wait 3 seconds before you can feed + if(!do_after(feeder, target = eater)) //Wait 3 seconds before you can feed return log_combat(feeder, eater, "fed", owner.reagents.log_list()) diff --git a/code/datums/components/fantasy/suffixes.dm b/code/datums/components/fantasy/suffixes.dm index ec1ee58735f9..8cabee42d21c 100644 --- a/code/datums/components/fantasy/suffixes.dm +++ b/code/datums/components/fantasy/suffixes.dm @@ -131,11 +131,7 @@ /obj/projectile/bullet/honker = 15, /obj/projectile/temp = 15, /obj/projectile/ion = 15, - /obj/projectile/magic/door = 15, - /obj/projectile/magic/locker = 15, - /obj/projectile/magic/fetch = 15, /obj/projectile/beam/emitter = 15, - /obj/projectile/magic/flying = 15, /obj/projectile/energy/net = 15, /obj/projectile/bullet/incendiary/c9mm = 15, /obj/projectile/temp/hot = 15, diff --git a/code/datums/components/forensics.dm b/code/datums/components/forensics.dm index 3c006073304c..6f2a34e50ea5 100644 --- a/code/datums/components/forensics.dm +++ b/code/datums/components/forensics.dm @@ -192,4 +192,4 @@ return if(isitem(parent)) var/obj/item/I = parent - I.AddElement(/datum/element/decal/blood, initial(I.icon) || I.icon, initial(I.icon_state) || I.icon_state, _color = get_blood_dna_color(blood_DNA)) + I.AddElement(/datum/element/decal/blood, I.icon, I.icon_state, _color = get_blood_dna_color(blood_DNA)) 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/components/movable_physics.dm b/code/datums/components/movable_physics.dm index 55686bb1e259..114cac29f24b 100644 --- a/code/datums/components/movable_physics.dm +++ b/code/datums/components/movable_physics.dm @@ -69,7 +69,7 @@ /datum/component/movable_physics/proc/z_floor_bounce(atom/movable/moving_atom) angle_of_movement += rand(-3000, 3000) / 100 var/turf/a_turf = get_turf(moving_atom) - if(istype(moving_atom, /obj/item/ammo_casing)) + if(istype(moving_atom, /obj/item/ammo_casing) && !bounce_sound) playsound(moving_atom, a_turf.bullet_bounce_sound, 50, TRUE) else playsound(moving_atom, bounce_sound, 50, TRUE) diff --git a/code/datums/components/remote_materials.dm b/code/datums/components/remote_materials.dm index de61c13ae295..2f3aa79749b2 100644 --- a/code/datums/components/remote_materials.dm +++ b/code/datums/components/remote_materials.dm @@ -52,7 +52,7 @@ handles linking back and forth. /datum/material/diamond, /datum/material/plasma, /datum/material/uranium, - /datum/material/bananium, + /datum/material/hellstone, /datum/material/titanium, /datum/material/bluespace, /datum/material/plastic, diff --git a/code/datums/components/storage/storage.dm b/code/datums/components/storage/storage.dm index 4728e15cc205..5724d4327bee 100644 --- a/code/datums/components/storage/storage.dm +++ b/code/datums/components/storage/storage.dm @@ -316,7 +316,7 @@ var/turf/T = get_turf(A) var/list/things = contents() var/datum/progressbar/progress = new(M, length(things), T) - while (do_after(M, 10, TRUE, T, FALSE, CALLBACK(src, PROC_REF(mass_remove_from_storage), T, things, progress))) + while (do_after(M, 1 SECONDS, T, NONE, FALSE, CALLBACK(src, PROC_REF(mass_remove_from_storage), T, things, progress))) stoplag(1) progress.end_progress() diff --git a/code/datums/diseases/advance/presets.dm b/code/datums/diseases/advance/presets.dm index da8ad0d69a59..1924d92428e4 100644 --- a/code/datums/diseases/advance/presets.dm +++ b/code/datums/diseases/advance/presets.dm @@ -16,14 +16,6 @@ symptoms = list(new/datum/symptom/cough) ..() -/datum/disease/advance/necropolis - copy_type = /datum/disease/advance - -/datum/disease/advance/necropolis/New() - name = "Necropolis Seed" - symptoms = list(new/datum/symptom/necroseed) - ..() - //Randomly generated Disease, for virus crates and events /datum/disease/advance/random name = "Experimental Disease" diff --git a/code/datums/diseases/advance/symptoms/necropolis.dm b/code/datums/diseases/advance/symptoms/necropolis.dm deleted file mode 100644 index 9626b944124d..000000000000 --- a/code/datums/diseases/advance/symptoms/necropolis.dm +++ /dev/null @@ -1,113 +0,0 @@ -/datum/symptom/necroseed - name = "Necropolis Seed" - desc = "An infantile form of the root of Lavaland's tendrils. Forms a symbiotic bond with the host, making them stronger and hardier, at the cost of speed. Should the disease be cured, the host will be severely weakened." - stealth = 0 - resistance = 3 - stage_speed = -10 - transmittable = -3 - level = 9 - base_message_chance = 3 - severity = 0 - symptom_delay_min = 1 - symptom_delay_max = 1 - var/color = "#302f20" - var/tendrils = FALSE - var/chest = FALSE - var/fireproof = FALSE - threshold_descs = list( - "Resistance 15" = "The area near the host roils with paralyzing tendrils.", - "Resistance 20" = "Host becomes immune to heat, ash, and lava. Removes movespeed debuff. Hail to the necropolis!", - ) - var/list/cached_tentacle_turfs - var/turf/last_location - var/tentacle_recheck_cooldown = 100 - -/datum/symptom/necroseed/Start(datum/disease/advance/A) - . = ..() - if(!.) - return - if(A.totalResistance() >= 15) - tendrils = TRUE - if(A.totalResistance() >= 20) - fireproof = TRUE - -/datum/symptom/necroseed/Activate(datum/disease/advance/A) - . = ..() - if(!.) - return - var/mob/living/carbon/M = A.affected_mob - switch(A.stage) - if(1, 2) - if(tendrils) - tendril(A) - if(prob(base_message_chance)) - to_chat(M, "Your skin feels scaly.") - if(3, 4) - if(tendrils) - tendril(A) - if(prob(base_message_chance)) - to_chat(M, "[pick("Your skin is hard.", "You feel stronger.", "You feel powerful.", "You feel your muscles growing stiff.", "You feel warm.")]") - if(5) - if(tendrils) - tendril(A) - M.dna.species.punchdamagelow = 15 - M.dna.species.punchdamagehigh = 20 - M.dna.species.punchstunthreshold = 18 - M.dna.species.brutemod = 0.6 - M.dna.species.burnmod = 0.6 - M.dna.species.heatmod = 0.6 - M.add_atom_colour(color, FIXED_COLOUR_PRIORITY) - M.add_movespeed_modifier(/datum/movespeed_modifier/necropolis, update=TRUE) - ADD_TRAIT(M, TRAIT_PIERCEIMMUNE, DISEASE_TRAIT) - if(fireproof) - to_chat(M, "[pick("You taste primordial ash.", "The necropolis whispers sweet nothings to you.", "You feel like a god.")]") - ADD_TRAIT(M, TRAIT_RESISTHEAT, DISEASE_TRAIT) - ADD_TRAIT(M, TRAIT_RESISTHIGHPRESSURE, DISEASE_TRAIT) - M.weather_immunities |= "ash" - M.weather_immunities |= "lava" - M.remove_movespeed_modifier(/datum/movespeed_modifier/necropolis) - else - if(prob(base_message_chance)) - to_chat(M, "[pick("Your skin has become a hardened carapace.", "Your strength is superhuman.", "You feel invincible.")]") - if(tendrils) - tendril(A) - return - -/datum/symptom/necroseed/proc/tendril(datum/disease/advance/A) - . = A.affected_mob - var/mob/living/loc = A.affected_mob.loc - if(isturf(loc)) - if(!LAZYLEN(cached_tentacle_turfs) || loc != last_location || tentacle_recheck_cooldown <= world.time) - LAZYCLEARLIST(cached_tentacle_turfs) - last_location = loc - tentacle_recheck_cooldown = world.time + initial(tentacle_recheck_cooldown) - for(var/turf/open/T in orange(4, loc)) - LAZYADD(cached_tentacle_turfs, T) - for(var/t in cached_tentacle_turfs) - if(isopenturf(t)) - if(prob(10)) - new /obj/effect/temp_visual/goliath_tentacle(t, .) - else - cached_tentacle_turfs -= t - -/datum/symptom/necroseed/End(datum/disease/advance/A) - . = ..() - if(!.) - return - var/mob/living/carbon/M = A.affected_mob - to_chat(M, "You feel weakened as the necropolis' blessing leaves your body.") - M.remove_movespeed_modifier(/datum/movespeed_modifier/necropolis) - M.dna.species.punchdamagelow = initial(M.dna.species.punchdamagelow) - M.dna.species.punchdamagehigh = initial(M.dna.species.punchdamagehigh) - M.dna.species.punchstunthreshold = initial(M.dna.species.punchstunthreshold) - M.remove_atom_colour(color, FIXED_COLOUR_PRIORITY) - M.dna.species.brutemod /= 0.6 - M.dna.species.burnmod /= 0.6 - M.dna.species.heatmod /= 0.6 - REMOVE_TRAIT(M, TRAIT_PIERCEIMMUNE, DISEASE_TRAIT) - if(fireproof) - REMOVE_TRAIT(M, TRAIT_RESISTHIGHPRESSURE, DISEASE_TRAIT) - REMOVE_TRAIT(M, TRAIT_RESISTHEAT, DISEASE_TRAIT) - M.weather_immunities -= "ash" - M.weather_immunities -= "lava" - diff --git a/code/datums/dna.dm b/code/datums/dna.dm index dde90dd5dbe8..abd20fd29212 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -659,8 +659,6 @@ O.Remove(src) visible_message("[src] vomits up their [O.name]!", "You vomit up your [O.name]") //no "vomit up your the heart" O.forceMove(drop_location()) - if(prob(20)) - O.animate_atom_living() if(9 to 10) ForceContractDisease(new/datum/disease/gastrolosis()) to_chat(src, "Oh, I actually feel quite alright!") diff --git a/code/datums/elements/decals/blood.dm b/code/datums/elements/decals/blood.dm index 85f75bef2416..0a3ca8ce59a3 100644 --- a/code/datums/elements/decals/blood.dm +++ b/code/datums/elements/decals/blood.dm @@ -6,9 +6,11 @@ . = ..() RegisterSignal(target, COMSIG_ATOM_GET_EXAMINE_NAME, PROC_REF(get_examine_name), TRUE) + RegisterSignal(target, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED), PROC_REF(redraw), TRUE) /datum/element/decal/blood/Detach(atom/source, force) UnregisterSignal(source, COMSIG_ATOM_GET_EXAMINE_NAME) + UnregisterSignal(source, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED)) return ..() /datum/element/decal/blood/generate_appearance(_icon, _icon_state, _dir, _layer, _color, _alpha, source) @@ -30,3 +32,11 @@ override[EXAMINE_POSITION_ARTICLE] = A.gender == PLURAL? "some" : "a" override[EXAMINE_POSITION_BEFORE] = " blood-stained " return COMPONENT_EXNAME_CHANGED + +///this is probably quite bad, let me know if you have a better solution for this -S +/datum/element/decal/blood/proc/redraw(datum/source, mob/user) + SIGNAL_HANDLER + + var/atom/bloodsource = source + Detach(source) + bloodsource.AddElement(/datum/element/decal/blood, bloodsource.icon, bloodsource.icon_state, _color = get_blood_dna_color(bloodsource.return_blood_DNA())) diff --git a/code/datums/elements/world_icon.dm b/code/datums/elements/world_icon.dm new file mode 100644 index 000000000000..bcb0129c6c68 --- /dev/null +++ b/code/datums/elements/world_icon.dm @@ -0,0 +1,121 @@ +///////////////////////////////////////////////////////////// +////////// WORLD ICON ELEMENT DIRECTORY ////////// +///////////////////////////////////////////////////////////// +//PORTED FROM MOJAVE SUN// + +// Slap onto something to give it a world icon that differs from the inventory one (allows for realistically sized objects and all that) // +// To fix 25/06/2021 : Blood Decals, Mutable Overlays and other baked in bitch ass overlays that need to be remade when the icon changes // +// Fixed 07/05/2022: Now you can deal with the above by handling everything with attached_proc instead +// Fixed 12/04/2023: Icon states, Needs major tuning up by someone who can properly make it work + +/datum/element/world_icon + id_arg_index = 2 + element_flags = ELEMENT_BESPOKE | ELEMENT_DETACH + //If we want COMPLEX world icon behavior, this proc will handle icon updating when the item is NOT in the inventory. + //I just assumed that the default update_icon is for inventory sprites because ss13 basically focuses on how the sprites + //look on your hand, not how they realistically look in the world. + var/attached_proc + /// Only used if attached_proc doesn't exist, simply changes the icon of target to this when it's in the inventory + var/inventory_icon + /// Only used if attached_proc doesn't exist, simply changes the icon of target to this when it's NOT in the inventory + var/world_icon + /// Only used when inventory state icon is different from original + var/inventory_icon_state + /// Only used when world state icon is different from original, pretty much just the original "icon_state" but if you for some reason need to flip the standard icon states for this element around you can use this + var/world_icon_state + +/datum/element/world_icon/Attach(obj/item/target, attached_proc, world_icon, inventory_icon, world_icon_state, inventory_icon_state) + . = ..() + if(!istype(target)) + return ELEMENT_INCOMPATIBLE + + src.attached_proc = attached_proc + src.world_icon = world_icon + src.world_icon_state = world_icon_state + src.inventory_icon = inventory_icon + src.inventory_icon_state = inventory_icon_state + RegisterSignal(target, COMSIG_ATOM_UPDATE_ICON, PROC_REF(update_icon)) + RegisterSignal(target, COMSIG_ATOM_UPDATE_ICON_STATE, PROC_REF(update_icon_state)) + RegisterSignal(target, list(COMSIG_ITEM_EQUIPPED, COMSIG_STORAGE_ENTERED, COMSIG_ITEM_DROPPED, COMSIG_STORAGE_EXITED), PROC_REF(inventory_updated)) + target.update_appearance(UPDATE_ICON) + target.update_appearance(UPDATE_ICON_STATE) + +/datum/element/world_icon/Detach(obj/item/source) + . = ..() + UnregisterSignal(source, COMSIG_ATOM_UPDATE_ICON) + UnregisterSignal(source, COMSIG_ATOM_UPDATE_ICON_STATE, PROC_REF(update_icon_state)) + UnregisterSignal(source, list(COMSIG_ITEM_EQUIPPED, COMSIG_STORAGE_ENTERED, COMSIG_ITEM_DROPPED, COMSIG_STORAGE_EXITED)) + source.update_appearance(UPDATE_ICON) + source.update_appearance(UPDATE_ICON_STATE) + +/datum/element/world_icon/proc/update_icon(obj/item/source, updates) + SIGNAL_HANDLER + + if((source.item_flags & IN_INVENTORY) || (source.loc && SEND_SIGNAL(source.loc, COMSIG_CONTAINS_STORAGE))) + if(attached_proc) + return + return default_inventory_icon(source) + + if(attached_proc) + return call(source, attached_proc)(updates) + else + return default_world_icon(source) + +/datum/element/world_icon/proc/update_icon_state(obj/item/source, updates) + SIGNAL_HANDLER + + if((source.item_flags & IN_INVENTORY) || (source.loc && SEND_SIGNAL(source.loc, COMSIG_CONTAINS_STORAGE))) + if(attached_proc) + return + return default_inventory_icon_state(source) + + if(attached_proc) + return call(source, attached_proc)(updates) + else + return default_world_icon_state(source) + +/datum/element/world_icon/proc/inventory_updated(obj/item/source) + SIGNAL_HANDLER + + source.update_appearance(UPDATE_ICON) + source.update_appearance(UPDATE_ICON_STATE) + +/datum/element/world_icon/proc/default_inventory_icon(obj/item/source) + SIGNAL_HANDLER + + source.icon = inventory_icon + +/datum/element/world_icon/proc/default_world_icon(obj/item/source) + SIGNAL_HANDLER + + source.icon = world_icon + +/datum/element/world_icon/proc/default_inventory_icon_state(obj/item/source) + SIGNAL_HANDLER + + if(!inventory_icon_state) + source.icon_state = source.icon_state + return + + INVOKE_ASYNC(src, PROC_REF(check_inventory_state), source) + +/datum/element/world_icon/proc/default_world_icon_state(obj/item/source) + SIGNAL_HANDLER + + if(!world_icon_state) + source.icon_state = source.icon_state + return + + INVOKE_ASYNC(src, PROC_REF(check_world_icon_state), source) + +/datum/element/world_icon/proc/check_inventory_state(obj/item/source) + SIGNAL_HANDLER + + inventory_icon_state = source.inventory_state + source.icon_state = inventory_icon_state + +/datum/element/world_icon/proc/check_world_icon_state(obj/item/source) + SIGNAL_HANDLER + + world_icon_state = source.world_state + source.icon_state = world_icon_state diff --git a/code/datums/mapgen/planetary/AsteroidGenerator.dm b/code/datums/mapgen/planetary/AsteroidGenerator.dm index c2f7a5340097..737194b5ee28 100644 --- a/code/datums/mapgen/planetary/AsteroidGenerator.dm +++ b/code/datums/mapgen/planetary/AsteroidGenerator.dm @@ -114,7 +114,10 @@ /obj/structure/geyser/random = 1, /obj/structure/spawner/mining/goliath = 1, /obj/structure/spawner/mining = 1, - /obj/structure/spawner/mining/hivelord = 1 + /obj/structure/spawner/mining/hivelord = 1, + /obj/structure/vein/asteroid = 5, + /obj/structure/vein/classtwo/asteroid = 10, + /obj/structure/vein/classthree/asteroid = 5 ) mob_spawn_list = list( @@ -157,8 +160,11 @@ ) feature_spawn_list = list( - /obj/structure/geyser/random = 1, - /obj/structure/spawner/mining/carp = 1 + /obj/structure/geyser/random = 5, + /obj/structure/spawner/mining/carp = 5, + /obj/structure/vein/asteroid = 10, + /obj/structure/vein/classtwo/asteroid = 15, + /obj/structure/vein/classthree/asteroid = 12 ) mob_spawn_list = list( diff --git a/code/datums/mapgen/planetary/SandGenerator.dm b/code/datums/mapgen/planetary/SandGenerator.dm index 442daa0c7705..91fad1430a47 100644 --- a/code/datums/mapgen/planetary/SandGenerator.dm +++ b/code/datums/mapgen/planetary/SandGenerator.dm @@ -103,7 +103,7 @@ /mob/living/simple_animal/hostile/asteroid/goliath/beast/random = 50, /mob/living/simple_animal/hostile/asteroid/basilisk/whitesands = 40, /mob/living/simple_animal/hostile/asteroid/hivelord/legion/random = 30, - /mob/living/simple_animal/hostile/asteroid/whitesands/survivor/random = 25, + /mob/living/simple_animal/hostile/human/hermit/survivor/random = 25, ) /datum/biome/sand/wasteland @@ -135,7 +135,7 @@ ) mob_spawn_chance = 1 mob_spawn_list = list( - /mob/living/simple_animal/hostile/asteroid/whitesands/survivor/random = 1, + /mob/living/simple_animal/hostile/human/hermit/survivor/random = 1, ) /datum/biome/sand/grass/dead @@ -169,7 +169,7 @@ /mob/living/simple_animal/hostile/asteroid/goliath/beast/random = 40, /mob/living/simple_animal/hostile/asteroid/basilisk/whitesands = 30, /mob/living/simple_animal/hostile/asteroid/hivelord/legion/random = 20, - /mob/living/simple_animal/hostile/asteroid/whitesands/survivor/random = 40, + /mob/living/simple_animal/hostile/human/hermit/survivor/random = 40, ) /datum/biome/sand/acid //plains diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm index 98db1541c953..ed8dd509ec3b 100644 --- a/code/datums/materials/basemats.dm +++ b/code/datums/materials/basemats.dm @@ -127,30 +127,6 @@ Unless you know what you're doing, only use the first three numbers. They're in ore_type = /obj/item/stack/ore/bluespace_crystal value_per_unit = 0.15 -///Honks and slips -/datum/material/bananium - name = "bananium" - id = "bananium" - desc = "Material with hilarious properties" - color = "#ffff00" //obnoxiously bright yellow - categories = list(MAT_CATEGORY_ORE = TRUE, MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) - sheet_type = /obj/item/stack/sheet/mineral/bananium - ore_type = /obj/item/stack/ore/bananium - value_per_unit = 0.5 - beauty_modifier = 0.5 - armor_modifiers = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 100, "bio" = 0, "rad" = 0, "fire" = 10, "acid" = 0) //Clowns cant be blown away. - -/datum/material/bananium/on_applied(atom/source, amount, material_flags) - . = ..() - source.LoadComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 50, falloff_exponent = 20) - source.AddComponent(/datum/component/slippery, min(amount / 10, 80)) - - -/datum/material/bananium/on_removed(atom/source, amount, material_flags) - . = ..() - qdel(source.GetComponent(/datum/component/slippery)) - qdel(source.GetComponent(/datum/component/squeak)) - ///Mediocre force increase /datum/material/titanium @@ -166,18 +142,6 @@ Unless you know what you're doing, only use the first three numbers. They're in beauty_modifier = 0.05 armor_modifiers = list("melee" = 1.35, "bullet" = 1.3, "laser" = 1.3, "energy" = 1.25, "bomb" = 1.25, "bio" = 1, "rad" = 1, "fire" = 0.7, "acid" = 1) -/datum/material/runite - name = "runite" - id = "runite" - desc = "Runite" - color = "#3F9995" - strength_modifier = 1.3 - categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) - sheet_type = /obj/item/stack/sheet/mineral/runite - value_per_unit = 0.3 - beauty_modifier = 0.5 - armor_modifiers = list("melee" = 1.35, "bullet" = 2, "laser" = 0.5, "energy" = 1.25, "bomb" = 1.25, "bio" = 1, "rad" = 1, "fire" = 1.4, "acid" = 1) //rune is weak against magic lasers but strong against bullets. This is the combat triangle. - ///Force decrease /datum/material/plastic name = "plastic" @@ -224,42 +188,20 @@ Unless you know what you're doing, only use the first three numbers. They're in var/obj/wooden = source wooden.resistance_flags &= ~FLAMMABLE -///Stronk force increase -/datum/material/adamantine - name = "adamantine" - id = "adamantine" - desc = "A powerful material made out of magic, I mean science!" - color = "#6d7e8e" +//Remember when the theme used to be "Eerie" before 1.3? Good times. +/datum/material/hellstone + name = "hellstone" + id = "hellstone" + desc = "A colloquialism given to millenia-old slag, heat-treated through the eons in deep magma." + color = "#ffaf5e" strength_modifier = 1.5 categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) - sheet_type = /obj/item/stack/sheet/mineral/adamantine + sheet_type = /obj/item/stack/sheet/mineral/hidden/hellstone + ore_type = /obj/item/stack/ore/hellstone value_per_unit = 0.25 beauty_modifier = 0.4 armor_modifiers = list("melee" = 1.5, "bullet" = 1.5, "laser" = 1.3, "energy" = 1.3, "bomb" = 1, "bio" = 1, "rad" = 1, "fire" = 2.5, "acid" = 1) -///RPG Magic. -/datum/material/mythril - name = "mythril" - id = "mythril" - desc = "How this even exists is byond me" - color = "#f2d5d7" - categories = list(MAT_CATEGORY_RIGID = TRUE, MAT_CATEGORY_BASE_RECIPES = TRUE) - sheet_type = /obj/item/stack/sheet/mineral/mythril - value_per_unit = 0.75 - strength_modifier = 1.2 - armor_modifiers = list("melee" = 1.5, "bullet" = 1.5, "laser" = 1.5, "energy" = 1.5, "bomb" = 1.5, "bio" = 1.5, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5) - beauty_modifier = 0.5 - -/datum/material/mythril/on_applied_obj(atom/source, amount, material_flags) - . = ..() - if(istype(source, /obj/item)) - source.AddComponent(/datum/component/fantasy) - -/datum/material/mythril/on_removed_obj(atom/source, material_flags) - . = ..() - if(istype(source, /obj/item)) - qdel(source.GetComponent(/datum/component/fantasy)) - //formed when freon react with o2, emits a lot of plasma when heated /datum/material/hot_ice name = "hot ice" @@ -323,18 +265,6 @@ Unless you know what you're doing, only use the first three numbers. They're in turf_sound_override = FOOTSTEP_SAND texture_layer_icon_state = "sand" -/datum/material/runedmetal - name = "runed metal" - id = "runed metal" - desc = "Mir'ntrath barhah Nar'sie." - color = "#3C3434" - categories = list(MAT_CATEGORY_RIGID = TRUE) - sheet_type = /obj/item/stack/sheet/runed_metal - value_per_unit = 0.75 - armor_modifiers = list("melee" = 1.2, "bullet" = 1.2, "laser" = 1, "energy" = 1, "bomb" = 1.2, "bio" = 1.2, "rad" = 1.5, "fire" = 1.5, "acid" = 1.5) - beauty_modifier = -0.15 - texture_layer_icon_state = "runed" - /datum/material/bronze name = "bronze" id = "bronze" diff --git a/code/datums/mood_events/drug_events.dm b/code/datums/mood_events/drug_events.dm index 6af401e8b009..028973c5c839 100644 --- a/code/datums/mood_events/drug_events.dm +++ b/code/datums/mood_events/drug_events.dm @@ -4,12 +4,12 @@ /datum/mood_event/smoked description = "I have had a smoke recently.\n" - mood_change = 2 + mood_change = 1 timeout = 6 MINUTES /datum/mood_event/wrong_brand - description = "I hate that brand of cigarettes.\n" - mood_change = -2 + description = "That brand of cigarette just doesn't hit right.\n" + mood_change = -1 timeout = 6 MINUTES /datum/mood_event/overdose diff --git a/code/datums/mood_events/generic_positive_events.dm b/code/datums/mood_events/generic_positive_events.dm index 899c617a99d2..f9e339c3c081 100644 --- a/code/datums/mood_events/generic_positive_events.dm +++ b/code/datums/mood_events/generic_positive_events.dm @@ -105,14 +105,6 @@ description = "My family heirloom is safe with me.\n" mood_change = 1 -/datum/mood_event/fan_clown_pin - description = "I love showing off my clown pin!\n" - mood_change = 1 - -/datum/mood_event/fan_mime_pin - description = "I love showing off my mime pin!\n" - mood_change = 1 - /datum/mood_event/rilena_fan description = "I love my RILENA merch!\n" mood_change = 1 diff --git a/code/datums/mutations/actions.dm b/code/datums/mutations/actions.dm index f2ffe7c25fd2..53080247b827 100644 --- a/code/datums/mutations/actions.dm +++ b/code/datums/mutations/actions.dm @@ -88,67 +88,6 @@ if(direction_text) to_chat(user,"You consider [tracking_target]'s scent. The trail leads [direction_text].") -/datum/mutation/human/firebreath - name = "Fire Breath" - desc = "An ancient mutation that gives lizards breath of fire." - quality = POSITIVE - difficulty = 12 - locked = TRUE - text_gain_indication = "Your throat is burning!" - text_lose_indication = "Your throat is cooling down." - power = /obj/effect/proc_holder/spell/aimed/firebreath - instability = 30 - energy_coeff = 1 - power_coeff = 1 - -/datum/mutation/human/firebreath/modify() - if(power) - var/obj/effect/proc_holder/spell/aimed/firebreath/S = power - S.strength = GET_MUTATION_POWER(src) - -/obj/effect/proc_holder/spell/aimed/firebreath - name = "Fire Breath" - desc = "You can breathe fire at a target." - school = "evocation" - charge_max = 600 - clothes_req = FALSE - range = 20 - projectile_type = /obj/projectile/magic/aoe/fireball/firebreath - base_icon_state = "fireball" - action_icon_state = "fireball0" - sound = 'sound/magic/demon_dies.ogg' //horrifying lizard noises - active_msg = "You built up heat in your mouth." - deactive_msg = "You swallow the flame." - var/strength = 1 - -/obj/effect/proc_holder/spell/aimed/firebreath/before_cast(list/targets) - . = ..() - if(iscarbon(usr)) - var/mob/living/carbon/C = usr - if(C.is_mouth_covered()) - C.adjust_fire_stacks(2) - C.IgniteMob() - to_chat(C,"Something in front of your mouth caught fire!") - return FALSE - -/obj/effect/proc_holder/spell/aimed/firebreath/ready_projectile(obj/projectile/P, atom/target, mob/user, iteration) - if(!istype(P, /obj/projectile/magic/aoe/fireball)) - return - var/obj/projectile/magic/aoe/fireball/F = P - switch(strength) - if(1 to 3) - F.exp_light = strength-1 - if(4 to INFINITY) - F.exp_heavy = strength-3 - F.exp_fire += strength - -/obj/projectile/magic/aoe/fireball/firebreath - name = "fire breath" - exp_heavy = 0 - exp_light = 0 - exp_flash = 0 - exp_fire= 4 - /datum/mutation/human/void name = "Void Magnet" desc = "A rare genome that attracts odd forces not usually observed." diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm index 964c269b5f43..34771af91ed2 100644 --- a/code/datums/outfit.dm +++ b/code/datums/outfit.dm @@ -104,6 +104,9 @@ /// Set to FALSE if your outfit requires runtime parameters var/can_be_admin_equipped = TRUE + // Used to determine if it should be ignored in unit tests due to being to dynamic to always spawn backpack contents right + var/random = FALSE + /** * extra types for chameleon outfit changes, mostly guns * 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/datums/shuttles.dm b/code/datums/shuttles.dm index 1da1dcd04554..d7b60476d977 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -21,7 +21,8 @@ var/prefix = "ISV" /// The full name of the ship's faction. var/faction_name = "Independent" - var/unique_ship_access = FALSE + /// Whether or not players from other ships can open airlocks. + var/unique_ship_access = TRUE /// Set by config JSON. If true, the template's ships' "default" spawn location (when bought by a player or loaded at roundstart) /// will be in the middle of space, instead of at an outpost. var/space_spawn = FALSE diff --git a/code/datums/status_effects/gas.dm b/code/datums/status_effects/gas.dm index 11037374b9b3..cc6a91b2f267 100644 --- a/code/datums/status_effects/gas.dm +++ b/code/datums/status_effects/gas.dm @@ -38,7 +38,7 @@ /datum/status_effect/freon/proc/do_resist() to_chat(owner, "You start breaking out of the ice cube...") - if(do_mob(owner, owner, 40)) + if(do_after(owner, 40)) if(!QDELETED(src)) to_chat(owner, "You break out of the ice cube!") owner.remove_status_effect(/datum/status_effect/freon) diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm index 52ee20e23c27..574c35f60beb 100644 --- a/code/datums/traits/good.dm +++ b/code/datums/traits/good.dm @@ -62,26 +62,6 @@ lose_text = "You feel isolated from others." medical_record_text = "Patient is highly perceptive of and sensitive to social cues, or may possibly have ESP. Further testing needed." -/datum/quirk/fan_clown - name = "Clown Fan" - desc = "You enjoy clown antics and get a mood boost from wearing your clown pin." - value = 1 - mob_traits = list(TRAIT_FAN_CLOWN) - gain_text = "You are a big fan of clowns." - lose_text = "The clown doesn't seem so great." - medical_record_text = "Patient reports being a big fan of clowns." - -/datum/quirk/fan_clown/on_spawn() - var/mob/living/carbon/human/H = quirk_holder - var/obj/item/clothing/accessory/fan_clown_pin/B = new(get_turf(H)) - var/list/slots = list ( - "backpack" = ITEM_SLOT_BACKPACK, - "hands" = ITEM_SLOT_HANDS, - ) - H.equip_in_one_of_slots(B, slots , qdel_on_fail = TRUE) - var/datum/atom_hud/fan = GLOB.huds[DATA_HUD_FAN] - fan.add_hud_to(H) - /datum/quirk/fan_rilena name = "RILENA Super Fan" desc = "You are a major fan of the popular webseries RILENA: LMR. You get a mood boost from plushies of your favorite characters, and wearing your Xader pin." @@ -102,26 +82,6 @@ var/datum/atom_hud/fan = GLOB.huds[DATA_HUD_FAN] fan.add_hud_to(H) -/datum/quirk/fan_mime - name = "Mime Fan" - desc = "You enjoy mime antics and get a mood boost from wearing your mime pin." - value = 1 - mob_traits = list(TRAIT_FAN_MIME) - gain_text = "You are a big fan of the Mime." - lose_text = "The mime doesn't seem so great." - medical_record_text = "Patient reports being a big fan of mimes." - -/datum/quirk/fan_mime/on_spawn() - var/mob/living/carbon/human/H = quirk_holder - var/obj/item/clothing/accessory/fan_mime_pin/B = new(get_turf(H)) - var/list/slots = list ( - "backpack" = ITEM_SLOT_BACKPACK, - "hands" = ITEM_SLOT_HANDS, - ) - H.equip_in_one_of_slots(B, slots , qdel_on_fail = TRUE) - var/datum/atom_hud/fan = GLOB.huds[DATA_HUD_FAN] - fan.add_hud_to(H) - /datum/quirk/freerunning name = "Freerunning" desc = "You're great at quick moves! You can climb tables more quickly." diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm index 4b0afce14b47..d1a8fd6acaa5 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -430,11 +430,6 @@ /datum/quirk/insanity/proc/madness() quirk_holder.hallucination += rand(10, 25) -/datum/quirk/insanity/post_add() //I don't /think/ we'll need this but for newbies who think "roleplay as insane" = "license to kill" it's probably a good thing to have - if(!quirk_holder.mind || quirk_holder.mind.special_role) - return - to_chat(quirk_holder, "Please note that your dissociation syndrome does NOT give you the right to attack people or otherwise cause any interference to \ - the round. You are not an antagonist, and the rules will treat you the same as other crewmembers.") /datum/quirk/social_anxiety name = "Social Anxiety" @@ -589,24 +584,57 @@ reagent_type = /datum/reagent/drug/nicotine accessory_type = /obj/item/lighter/greyscale +//I fucking hate prefscode + /datum/quirk/junkie/smoker/on_spawn() - drug_container_type = pick(/obj/item/storage/fancy/cigarettes, - /obj/item/storage/fancy/cigarettes/cigpack_midori, - /obj/item/storage/fancy/cigarettes/cigpack_uplift, - /obj/item/storage/fancy/cigarettes/cigpack_robust, - /obj/item/storage/fancy/cigarettes/cigpack_robustgold, - /obj/item/storage/fancy/cigarettes/cigpack_carp) + var/mob/living/carbon/human/H = quirk_holder + switch (H.client?.prefs.preferred_smoke_brand) + if (PREF_CIG_SPACE) + drug_container_type = /obj/item/storage/fancy/cigarettes + if (PREF_CIG_DROMEDARY) + drug_container_type = /obj/item/storage/fancy/cigarettes/dromedaryco + if (PREF_CIG_UPLIFT) + drug_container_type = /obj/item/storage/fancy/cigarettes/cigpack_uplift + if (PREF_CIG_ROBUST) + drug_container_type = /obj/item/storage/fancy/cigarettes/cigpack_robust + if (PREF_CIG_ROBUSTGOLD) + drug_container_type = /obj/item/storage/fancy/cigarettes/cigpack_robustgold + if (PREF_CIG_CARP) + drug_container_type= /obj/item/storage/fancy/cigarettes/cigpack_carp + if (PREF_CIG_MIDORI) + drug_container_type = /obj/item/storage/fancy/cigarettes/cigpack_midori + if (PREF_CIGAR) + drug_container_type = /obj/item/storage/fancy/cigarettes/cigars + accessory_type = /obj/item/storage/box/matches + if (PREF_CIGAR_SOLAR) + drug_container_type = /obj/item/storage/fancy/cigarettes/cigars/havana + accessory_type = /obj/item/storage/box/matches + if (PREF_CIGAR_COHIBA) + drug_container_type = /obj/item/storage/fancy/cigarettes/cigars/cohiba + accessory_type = /obj/item/storage/box/matches + if (PREF_VAPE) + drug_container_type = /obj/item/clothing/mask/vape + accessory_type = null + if (PREF_PIPE) + drug_container_type = /obj/item/clothing/mask/cigarette/pipe + accessory_type = /obj/item/storage/box/matches + else + CRASH("Someone had an improper cigarette pref on loading") . = ..() /datum/quirk/junkie/smoker/announce_drugs() - to_chat(quirk_holder, "There is a [initial(drug_container_type.name)] [where_drug], and a lighter [where_accessory]. Make sure you get your favorite brand when you run out.") - + if(accessory_type == null) + to_chat(quirk_holder, "There is a [initial(drug_container_type.name)] [where_drug], Make sure you get a refill soon.") + return + to_chat(quirk_holder, "There is a [initial(drug_container_type.name)] [where_drug], and a [initial(accessory_type.name)] [where_accessory]. Make sure you get your favorite brand when you run out.") /datum/quirk/junkie/smoker/on_process() . = ..() var/mob/living/carbon/human/H = quirk_holder var/obj/item/I = H.get_item_by_slot(ITEM_SLOT_MASK) if (istype(I, /obj/item/clothing/mask/cigarette)) + if(I == drug_container_type) + return var/obj/item/storage/fancy/cigarettes/C = drug_container_type if(istype(I, initial(C.spawn_type))) SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "wrong_cigs") 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/atoms.dm b/code/game/atoms.dm index 44d5de773f94..7ffa3255ada1 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -84,9 +84,6 @@ var/list/alternate_appearances - ///Mobs that are currently do_after'ing this atom, to be cleared from on Destroy() - var/list/targeted_by - /// Last appearance of the atom for demo saving purposes var/image/demo_last_appearance @@ -310,11 +307,6 @@ LAZYCLEARLIST(overlays) LAZYCLEARLIST(managed_overlays) - for(var/i in targeted_by) - var/mob/M = i - LAZYREMOVE(M.do_afters, src) - - targeted_by = null QDEL_NULL(light) if(smoothing_flags & SMOOTH_QUEUED) @@ -976,7 +968,7 @@ var/list/things = src_object.contents() var/datum/progressbar/progress = new(user, things.len, src) var/datum/component/storage/STR = GetComponent(/datum/component/storage) - while (do_after(user, 10, TRUE, src, FALSE, CALLBACK(STR, TYPE_PROC_REF(/datum/component/storage, handle_mass_item_insertion), things, src_object, user, progress))) + while (do_after(user, 1 SECONDS, src, NONE, FALSE, CALLBACK(STR, TYPE_PROC_REF(/datum/component/storage, handle_mass_item_insertion), things, src_object, user, progress))) stoplag(1) progress.end_progress() to_chat(user, "You dump as much of [src_object.parent]'s contents [STR.insert_preposition]to [src] as you can.") diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 989db20efd1f..beb7cef2718f 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -624,7 +624,7 @@ SEND_SIGNAL(src, COMSIG_MOVABLE_BUMP, A) . = ..() if(!QDELETED(throwing)) - throwing.hit_atom(A) + throwing.finalize(hit = TRUE, target = A) . = TRUE if(QDELETED(A)) return @@ -821,7 +821,9 @@ var/impact_signal = SEND_SIGNAL(src, COMSIG_MOVABLE_IMPACT, hit_atom, throwingdatum) if(impact_signal & COMPONENT_MOVABLE_IMPACT_FLIP_HITPUSH) hitpush = FALSE // hacky, tie this to something else or a proper workaround later - + if(isturf(loc)) + var/turf/T = loc + T.Entered(src) if(impact_signal & ~COMPONENT_MOVABLE_IMPACT_NEVERMIND) // in case a signal interceptor broke or deleted the thing before we could process our hit return hit_atom.hitby(src, throwingdatum=throwingdatum, hitpush=hitpush) @@ -883,7 +885,7 @@ else target_zone = thrower.zone_selected - var/datum/thrownthing/TT = new(src, target, get_turf(target), get_dir(src, target), range, speed, thrower, diagonals_first, force, gentle, callback, target_zone) + var/datum/thrownthing/TT = new(src, target, get_dir(src, target), range, speed, thrower, diagonals_first, force, gentle, callback, target_zone) var/dist_x = abs(target.x - src.x) var/dist_y = abs(target.y - src.y) diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 1dee49da7f54..4020895f29bd 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -216,24 +216,6 @@ Medical HUD! Basic mode needs suit sensors on. holder.icon_state = "hudhealthy" -/*********************************************** -FAN HUDs! For identifying other fans on-sight. -************************************************/ - -//HOOKS - -/mob/living/carbon/human/proc/fan_hud_set_fandom() - var/image/holder = hud_list[FAN_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size - holder.icon_state = "hudfan_no" - var/obj/item/clothing/under/U = get_item_by_slot(ITEM_SLOT_ICLOTHING) - if(U) - if(istype(U.attached_accessory, /obj/item/clothing/accessory/fan_mime_pin)) - holder.icon_state = "fan_mime_pin" - else if(istype(U.attached_accessory, /obj/item/clothing/accessory/fan_clown_pin)) - holder.icon_state = "fan_clown_pin" - /*********************************************** Security HUDs! Basic mode shows only the job. ************************************************/ diff --git a/code/game/gamemodes/clown_ops/clown_weapons.dm b/code/game/gamemodes/clown_ops/clown_weapons.dm index fe95ea3c5988..3064a52a48ad 100644 --- a/code/game/gamemodes/clown_ops/clown_weapons.dm +++ b/code/game/gamemodes/clown_ops/clown_weapons.dm @@ -40,14 +40,14 @@ /obj/item/clothing/shoes/clown_shoes/banana_shoes/combat/Initialize() . = ..() var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container) - bananium.insert_amount_mat(max_recharge, /datum/material/bananium) + bananium.insert_amount_mat(max_recharge, /datum/material/hellstone) START_PROCESSING(SSobj, src) /obj/item/clothing/shoes/clown_shoes/banana_shoes/combat/process() var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container) - var/bananium_amount = bananium.get_material_amount(/datum/material/bananium) + var/bananium_amount = bananium.get_material_amount(/datum/material/hellstone) if(bananium_amount < max_recharge) - bananium.insert_amount_mat(min(recharge_rate, max_recharge - bananium_amount), /datum/material/bananium) + bananium.insert_amount_mat(min(recharge_rate, max_recharge - bananium_amount), /datum/material/hellstone) /obj/item/clothing/shoes/clown_shoes/banana_shoes/combat/attack_self(mob/user) ui_action_click(user) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 82735ff9d522..65e161f2176b 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -883,31 +883,6 @@ GLOBAL_LIST_EMPTY(possible_items_special) explanation_text = "Steal at least five guns!" wanted_items = list(/obj/item/gun) -/datum/objective/steal_five_of_type/summon_magic - name = "steal magic" - explanation_text = "Steal at least five magical artefacts!" - wanted_items = list() - -/datum/objective/steal_five_of_type/summon_magic/New() - wanted_items = GLOB.summoned_magic_objectives - ..() - -/datum/objective/steal_five_of_type/summon_magic/check_completion() - var/list/datum/mind/owners = get_owners() - var/stolen_count = 0 - for(var/datum/mind/M in owners) - if(!isliving(M.current)) - continue - var/list/all_items = M.current.GetAllContents() //this should get things in cheesewheels, books, etc. - for(var/obj/I in all_items) //Check for wanted items - if(istype(I, /obj/item/book/granter/spell)) - var/obj/item/book/granter/spell/spellbook = I - if(!spellbook.used || !spellbook.oneuse) //if the book still has powers... - stolen_count++ //it counts. nice. - else if(is_type_in_typecache(I, wanted_items)) - stolen_count++ - return stolen_count >= 5 - //Created by admin tools /datum/objective/custom name = "custom" diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 5e61d276b226..e63b3f75fb2b 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -51,7 +51,7 @@ ) /obj/machinery/autolathe/Initialize() - AddComponent(/datum/component/material_container,list(/datum/material/iron, /datum/material/glass, /datum/material/plastic, /datum/material/silver, /datum/material/gold, /datum/material/plasma, /datum/material/uranium, /datum/material/titanium), 0, TRUE, null, null, CALLBACK(src, PROC_REF(AfterMaterialInsert))) + AddComponent(/datum/component/material_container,list(/datum/material/iron, /datum/material/glass, /datum/material/plastic, /datum/material/silver, /datum/material/gold, /datum/material/plasma, /datum/material/uranium, /datum/material/titanium, /datum/material/hellstone), 0, TRUE, null, null, CALLBACK(src, PROC_REF(AfterMaterialInsert))) . = ..() wires = new /datum/wires/autolathe(src) diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index b10dba436e0d..f6c004ddca71 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -68,34 +68,40 @@ default_deconstruction_screwdriver(user, "button-open", "[skin]",W) update_appearance() else - to_chat(user, "Maintenance Access Denied.") + to_chat(user, span_alert("Maintenance Access Denied.")) flick("[skin]-denied", src) return if(panel_open) if(!device && istype(W, /obj/item/assembly)) if(!user.transferItemToLoc(W, src)) - to_chat(user, "\The [W] is stuck to you!") + to_chat(user, span_warning("\The [W] is stuck to you!")) return device = W - to_chat(user, "You add [W] to the button.") + to_chat(user, span_notice("You add [W] to the button.")) if(!board && istype(W, /obj/item/electronics/airlock)) if(!user.transferItemToLoc(W, src)) - to_chat(user, "\The [W] is stuck to you!") + to_chat(user, span_warning("\The [W] is stuck to you!")) return board = W if(board.one_access) req_one_access = board.accesses else req_access = board.accesses - to_chat(user, "You add [W] to the button.") + to_chat(user, span_notice("You add [W] to the button.")) + + if(device && W.tool_behaviour == TOOL_MULTITOOL) + var/obj/item/multitool/multi = W + if(istype(device, /obj/item/assembly/control)) + multi.buffer = device + to_chat(user, span_notice("You copy the [device] to your multitool's buffer.")) if(!device && !board && W.tool_behaviour == TOOL_WRENCH) - to_chat(user, "You start unsecuring the button frame...") + to_chat(user, span_notice("You start unsecuring the button frame...")) W.play_tool_sound(src) if(W.use_tool(src, user, 40)) - to_chat(user, "You unsecure the button frame.") + to_chat(user, span_notice("You unsecure the button frame.")) transfer_fingerprints_to(new /obj/item/wallframe/button(get_turf(src))) playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE) qdel(src) @@ -153,14 +159,14 @@ req_one_access = list() board = null update_appearance() - to_chat(user, "You remove electronics from the button frame.") + to_chat(user, span_notice("You remove electronics from the button frame.")) else if(skin == "doorctrl") skin = "launcher" else skin = "doorctrl" - to_chat(user, "You change the button frame's front panel.") + to_chat(user, span_notice("You change the button frame's front panel.")) return if((machine_stat & (NOPOWER|BROKEN))) @@ -170,7 +176,7 @@ return if(!allowed(user)) - to_chat(user, "Access Denied.") + to_chat(user, span_alert("Access Denied.")) flick("[skin]-denied", src) return diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm index 8f57ad09203a..d5f7e618c637 100644 --- a/code/game/machinery/camera/presets.dm +++ b/code/game/machinery/camera/presets.dm @@ -56,18 +56,11 @@ /obj/machinery/camera/autoname/LateInitialize() . = ..() - number = 1 - var/area/A = get_area(src) - if(A) - for(var/obj/machinery/camera/autoname/C in GLOB.machines) - if(C == src) - continue - var/area/CA = get_area(C) - if(CA.type == A.type) - if(C.number) - number = max(number, C.number+1) - c_tag = "[A.name] #[number]" - + var/static/list/autonames_in_areas = list() + var/area/camera_area = get_area(src) + number = autonames_in_areas[camera_area] + 1 + autonames_in_areas[camera_area] = number + c_tag = "[format_text(camera_area.name)] #[number]" // UPGRADE PROCS diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index b665a36bcf32..d7f80fc45680 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -867,7 +867,7 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list( say("WEEWOO! WEEWOO! Spaceport security en route!") playsound(src, 'sound/items/weeoo1.ogg', 100, FALSE) for(var/i, i<=3, i++) - var/mob/living/simple_animal/hostile/syndicate/ranged/smg/orion/O = new/mob/living/simple_animal/hostile/syndicate/ranged/smg/orion(get_turf(src)) + var/mob/living/simple_animal/hostile/human/syndicate/ranged/smg/orion/O = new/mob/living/simple_animal/hostile/human/syndicate/ranged/smg/orion(get_turf(src)) O.target = usr @@ -1242,7 +1242,7 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list( newgame() obj_flags |= EMAGGED -/mob/living/simple_animal/hostile/syndicate/ranged/smg/orion +/mob/living/simple_animal/hostile/human/syndicate/ranged/smg/orion name = "spaceport security" desc = "Premier corporate security forces for all spaceports found along the Orion Trail." faction = list("orion") diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 6bb5a4bab561..121c93a07353 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -958,7 +958,7 @@ to_chat(user, "You need at least 2 metal sheets to reinforce [src].") return to_chat(user, "You start reinforcing [src].") - if(do_after(user, 20, TRUE, src)) + if(do_after(user, 20, src)) if(!panel_open || !S.use(2)) return user.visible_message("[user] reinforces \the [src] with metal.", @@ -972,7 +972,7 @@ to_chat(user, "You need at least 2 plasteel sheets to reinforce [src].") return to_chat(user, "You start reinforcing [src].") - if(do_after(user, 20, TRUE, src)) + if(do_after(user, 20, src)) if(!panel_open || !S.use(2)) return user.visible_message("[user] reinforces \the [src] with plasteel.", @@ -1226,7 +1226,7 @@ var/time_to_open = 50 playsound(src, pry_sound, 100, TRUE, mono_adj = TRUE) //is it aliens or just the CE being a dick? prying_so_hard = TRUE - if(do_after(user, time_to_open, TRUE, src)) + if(do_after(user, time_to_open, src)) open(2) if(density && !open(2)) to_chat(user, "Despite your attempts, [src] refuses to open.") @@ -1414,7 +1414,7 @@ playsound(src, 'sound/machines/creaking.ogg', 100, TRUE, mono_adj = TRUE) - if(do_after(user, time_to_open, TRUE, src)) + if(do_after(user, time_to_open, src)) if(density && !open(2)) //The airlock is still closed, but something prevented it opening. (Another player noticed and bolted/welded the airlock in time!) to_chat(user, "Despite your efforts, [src] managed to resist your attempts to open it!") diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index 8e0ed982b501..492ce30f6ac4 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -264,17 +264,7 @@ opacity = FALSE glass = TRUE -/obj/machinery/door/airlock/bananium - name = "bananium airlock" - desc = "Honkhonkhonk" - icon = 'icons/obj/doors/airlocks/station/bananium.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_bananium - doorOpen = 'sound/items/bikehorn.ogg' - has_hatch = FALSE -/obj/machinery/door/airlock/bananium/glass - opacity = FALSE - glass = TRUE /obj/machinery/door/airlock/sandstone name = "sandstone airlock" diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index 4e846c26f14a..7e3febcc482c 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -23,26 +23,32 @@ /obj/machinery/door/poddoor/attackby(obj/item/W, mob/user, params) . = ..() if((resistance_flags & INDESTRUCTIBLE) && W.tool_behaviour == TOOL_SCREWDRIVER) // This makes it so ERT members cannot cheese by opening their blast doors. - to_chat(user, "You can't find the panel!") + to_chat(user, span_warning("You can't find the panel!")) return if(W.tool_behaviour == TOOL_SCREWDRIVER) if(density) - to_chat(user, "You need to open [src] to access the maintenance panel!") + to_chat(user, span_warning("You need to open [src] to access the maintenance panel")) return else if(default_deconstruction_screwdriver(user, icon_state, icon_state, W)) - to_chat(user, "You [panel_open ? "open" : "close"] the maintenance hatch of [src].") + to_chat(user, span_notice("You [panel_open ? "open" : "close"] the maintenance hatch of [src].")) return TRUE if(panel_open && !density) if(W.tool_behaviour == TOOL_MULTITOOL) - var/change_id = input("Set [src]'s ID. It must be a number between 1 and 100.", "ID", id) as num|null - if(change_id) - id = clamp(round(change_id, 1), 1, 100) - to_chat(user, "You change the ID to [id].") + var/obj/item/multitool/multi = W + if (istype(multi.buffer,/obj/item/assembly/control)) + var/obj/item/assembly/control/controller = multi.buffer + id = controller.id + to_chat(user, span_notice("You copy the ID in your multitool's buffer into the [src].")) + else + var/change_id = input("Set [src]'s ID. It must be a number between 1 and 100.", "ID", id) as num|null + if(change_id) + id = clamp(round(change_id, 1), 1, 100) + to_chat(user, span_notice("You change the ID to [id].")) if(W.tool_behaviour == TOOL_CROWBAR) - to_chat(user, "You start to remove the airlock electronics.") + to_chat(user, span_notice("You start to remove the airlock electronics.")) if(!(machine_stat & NOPOWER)) do_sparks(5, TRUE, src) electrocute_mob(user, get_area(src), src, 1, TRUE) //fuck this fella @@ -52,9 +58,9 @@ /obj/machinery/door/poddoor/examine(mob/user) . = ..() - . += "The maintenance panel is [panel_open ? "opened" : "closed"]." + . += span_notice("The maintenance panel is [panel_open ? "opened" : "closed"].") if(panel_open) - . += "The airlock electronics are exposed and could be pried out." + . += span_notice("The airlock electronics are exposed and could be pried out.") /obj/machinery/door/poddoor/deconstruct(disassembled = TRUE, mob/user) if(!(flags_1 & NODECONSTRUCT_1)) @@ -142,18 +148,18 @@ /obj/machinery/door/poddoor/attack_alien(mob/living/carbon/alien/humanoid/user) if(density & !(resistance_flags & INDESTRUCTIBLE)) add_fingerprint(user) - user.visible_message("[user] begins prying open [src].",\ - "You begin digging your claws into [src] with all your might!",\ - "You hear groaning metal...") + user.visible_message(span_warning("[user] begins prying open [src]."),\ + span_noticealien("You begin digging your claws into [src] with all your might"),\ + span_warning("You hear groaning metal...")) playsound(src, 'sound/machines/creaking.ogg', 100, TRUE) var/time_to_open = 5 SECONDS if(hasPower()) time_to_open = 15 SECONDS - if(do_after(user, time_to_open, TRUE, src)) + if(do_after(user, time_to_open, src)) if(density && !open(TRUE)) //The airlock is still closed, but something prevented it opening. (Another player noticed and bolted/welded the airlock in time!) - to_chat(user, "Despite your efforts, [src] managed to resist your attempts to open it!") + to_chat(user, span_warning("Despite your efforts, [src] managed to resist your attempts to open it!")) else return ..() diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 9b2591bd59cd..60ded054842a 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -78,6 +78,8 @@ Possible to do for anyone motivated enough: var/secure = FALSE /// If we are currently calling another holopad var/calling = FALSE + /// The last holopad that called this one. + var/caller_history /obj/machinery/holopad/Initialize() . = ..() @@ -178,7 +180,9 @@ Possible to do for anyone motivated enough: /obj/machinery/holopad/examine(mob/user) . = ..() if(in_range(user, src) || isobserver(user)) - . += "The status display reads: Current projection range: [holo_range] units." + . += span_notice("The status display reads: Current projection range: [holo_range] units.") + if(caller_history) + . += span_notice("The caller history displays the last recieved call to be from: [caller_history].") /obj/machinery/holopad/attackby(obj/item/P, mob/user, params) if(default_deconstruction_screwdriver(user, "holopad_open", "holopad0", P)) @@ -195,11 +199,11 @@ Possible to do for anyone motivated enough: if(istype(P,/obj/item/disk/holodisk)) if(disk) - to_chat(user,"There's already a disk inside [src]!") + to_chat(user,span_warning("There's already a disk inside [src]!")) return if (!user.transferItemToLoc(P,src)) return - to_chat(user,"You insert [P] into [src].") + to_chat(user,span_notice("You insert [P] into [src].")) disk = P return @@ -249,15 +253,15 @@ Possible to do for anyone motivated enough: if("AIrequest") if(last_request + 200 < world.time) last_request = world.time - to_chat(usr, "You requested an AI's presence.") + to_chat(usr, span_info("You requested an AI's presence.")) var/area/area = get_area(src) for(var/mob/living/silicon/ai/AI in GLOB.silicon_mobs) if(!AI.client) continue - to_chat(AI, "Your presence is requested at \the [area].") + to_chat(AI, span_info("Your presence is requested at \the [area].")) return TRUE else - to_chat(usr, "A request for AI presence was already sent recently.") + to_chat(usr, span_info("A request for AI presence was already sent recently.")) return if("holocall") if(outgoing_call) @@ -280,7 +284,7 @@ Possible to do for anyone motivated enough: calling = TRUE return TRUE else - to_chat(usr, "You must stand on the holopad to make a call!") + to_chat(usr, span_warning("You must stand on the holopad to make a call!")) if("connectcall") var/datum/holocall/call_to_connect = locate(params["holopad"]) in holo_calls if(!QDELETED(call_to_connect)) @@ -374,6 +378,7 @@ Possible to do for anyone motivated enough: for(var/I in holo_calls) var/datum/holocall/HC = I if(HC.connected_holopad != src) + caller_history = get_area_name(HC.calling_holopad) if(force_answer_call && world.time > (HC.call_start_time + (HOLOPAD_MAX_DIAL_TIME / 2))) HC.Answer(src) break @@ -392,7 +397,7 @@ Possible to do for anyone motivated enough: if(is_operational && (!AI || AI.eyeobj.loc == loc))//If the projector has power and client eye is on it if (AI && istype(AI.current, /obj/machinery/holopad)) - to_chat(user, "ERROR: \black Image feed in progress.") + to_chat(user, span_danger("ERROR: \black Image feed in progress.")) return var/obj/effect/overlay/holo_pad_hologram/Hologram = new(loc)//Spawn a blank effect at the location. @@ -415,11 +420,11 @@ Possible to do for anyone motivated enough: move_hologram(user, loc) set_holo(user, Hologram) - visible_message("A holographic image of [user] flickers to life before your eyes!") + visible_message(span_notice("A holographic image of [user] flickers to life before your eyes!")) return Hologram else - to_chat(user, "ERROR: Unable to project hologram.") + to_chat(user, span_danger("ERROR:Unable to project hologram.")) /*This is the proc for special two-way communication between AI and holopad/people talking near holopad. For the other part of the code, check silicon say.dm. Particularly robot talk.*/ @@ -583,7 +588,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ Hologram.set_anchored(TRUE)//So space wind cannot drag it. Hologram.name = "[record.caller_name] (Hologram)"//If someone decides to right click. Hologram.set_light(2) //hologram lighting - visible_message("A holographic image of [record.caller_name] flickers to life before your eyes!") + visible_message(span_notice("A holographic image of [record.caller_name] flickers to life before your eyes!")) return Hologram /obj/machinery/holopad/proc/replay_start() 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/machinery/recycler.dm b/code/game/machinery/recycler.dm index af0c08162311..82265e244448 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -21,7 +21,7 @@ /obj/machinery/recycler/Initialize() AddComponent(/datum/component/butchering/recycler, 1, amount_produced,amount_produced/5) - AddComponent(/datum/component/material_container, list(/datum/material/iron, /datum/material/glass, /datum/material/silver, /datum/material/plasma, /datum/material/gold, /datum/material/diamond, /datum/material/plastic, /datum/material/uranium, /datum/material/bananium, /datum/material/titanium, /datum/material/bluespace), INFINITY, FALSE, null, null, null, TRUE) + AddComponent(/datum/component/material_container, list(/datum/material/iron, /datum/material/glass, /datum/material/silver, /datum/material/plasma, /datum/material/gold, /datum/material/diamond, /datum/material/plastic, /datum/material/uranium, /datum/material/hellstone, /datum/material/titanium, /datum/material/bluespace), INFINITY, FALSE, null, null, null, TRUE) . = ..() update_appearance() req_one_access = get_all_accesses() + get_all_centcom_access() diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index 9f2f56e2e1ce..df865aee82e5 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -122,25 +122,23 @@ if(.) return if(locked && !issilicon(user)) - to_chat(user, "The machine is locked, you are unable to use it!") + to_chat(user, span_notice("The machine is locked, you are unable to use it!")) return if(panel_open) - to_chat(user, "The panel must be closed before operating this machine!") + to_chat(user, span_warning("The panel must be closed before operating this machine!")) return if (active) - user.visible_message("[user] deactivated \the [src].", \ - "You deactivate \the [src].", \ - "You hear heavy droning fade out.") + user.visible_message(span_notice("[user] deactivated \the [src]."), span_notice("You deactivate \the [src]."), span_hear("You hear heavy droning fade out")) shields_down() else if(anchored) - user.visible_message("[user] activated \the [src].", \ - "You activate \the [src].", \ - "You hear heavy droning.") + user.visible_message(span_notice("[user] activated \the [src]."), \ + span_notice("You activate \the [src]."), \ + span_hear("You hear heavy droning.")) shields_up() else - to_chat(user, "The device must first be secured to the floor!") + to_chat(user, span_warning("The device must first be secured to the floor!")) return /obj/machinery/shieldgen/attackby(obj/item/W, mob/user, params) @@ -148,60 +146,60 @@ W.play_tool_sound(src, 100) panel_open = !panel_open if(panel_open) - to_chat(user, "You open the panel and expose the wiring.") + to_chat(user, span_notice("You open the panel and expose the wiring.")) else - to_chat(user, "You close the panel.") + to_chat(user, span_notice("You close the panel.")) else if(istype(W, /obj/item/stack/cable_coil) && (machine_stat & BROKEN) && panel_open) var/obj/item/stack/cable_coil/coil = W if (coil.get_amount() < 1) - to_chat(user, "You need one length of cable to repair [src]!") + to_chat(user, span_warning("You need one length of cable to repair [src]!")) return - to_chat(user, "You begin to replace the wires...") + to_chat(user, span_notice("You begin to replace the wires...")) if(do_after(user, 30, target = src)) if(coil.get_amount() < 1) return coil.use(1) obj_integrity = max_integrity set_machine_stat(machine_stat & ~BROKEN) - to_chat(user, "You repair \the [src].") + to_chat(user, span_notice("You repair \the [src].")) update_appearance() else if(W.tool_behaviour == TOOL_WRENCH) if(locked) - to_chat(user, "The bolts are covered! Unlocking this would retract the covers.") + to_chat(user, span_warning("The bolts are covered! Unlocking this would retract the covers.")) return if(!anchored && !isinspace()) W.play_tool_sound(src, 100) - to_chat(user, "You secure \the [src] to the floor!") + to_chat(user, span_notice("You secure \the [src] to the floor!")) set_anchored(TRUE) else if(anchored) W.play_tool_sound(src, 100) - to_chat(user, "You unsecure \the [src] from the floor!") + to_chat(user, span_notice("You unsecure \the [src] from the floor!")) if(active) - to_chat(user, "\The [src] shuts off!") + to_chat(user, span_notice("\The [src] shuts off!")) shields_down() set_anchored(FALSE) else if(W.GetID()) if(allowed(user) && !(obj_flags & EMAGGED)) locked = !locked - to_chat(user, "You [locked ? "lock" : "unlock"] the controls.") + to_chat(user, span_notice("You [locked ? "lock" : "unlock"] the controls.")) else if(obj_flags & EMAGGED) - to_chat(user, "Error, access controller damaged!") + to_chat(user, span_danger("Error, access controller damaged!")) else - to_chat(user, "Access denied.") + to_chat(user, span_danger("Access denied.")) else return ..() /obj/machinery/shieldgen/emag_act(mob/user) if(obj_flags & EMAGGED) - to_chat(user, "The access controller is damaged!") + to_chat(user, span_warning("The access controller is damaged!")) return obj_flags |= EMAGGED locked = FALSE playsound(src, "sparks", 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - to_chat(user, "You short out the access controller.") + to_chat(user, span_warning("You short out the access controller.")) /obj/machinery/shieldgen/update_icon_state() icon_state = "shield[active ? "on" : "off"][(machine_stat & BROKEN) ? "br" : null]" @@ -275,9 +273,7 @@ if(!active_power_usage || surplus() >= active_power_usage) add_load(active_power_usage) else - visible_message("The [src.name] shuts down due to lack of power!", \ - "If this message is ever seen, something is wrong.", - "You hear heavy droning fade out.") + visible_message(span_danger("The [src.name] shuts down due to lack of power!"), "If this message is ever seen, something is wrong.",span_hear("You hear heavy droning fade out.Turn off the shield generator first!") + to_chat(user, span_warning("Turn off the shield generator first!")) return FAILED_UNFASTEN return ..() @@ -388,11 +384,11 @@ if(item.GetID()) if(allowed(user) && !(obj_flags & EMAGGED)) locked = !locked - to_chat(user, "You [src.locked ? "lock" : "unlock"] the controls.") + to_chat(user, span_notice("You [src.locked ? "lock" : "unlock"] the controls.")) else if(obj_flags & EMAGGED) - to_chat(user, "Error, access controller damaged!") + to_chat(user, span_danger("Error, access controller damaged!")) else - to_chat(user, "Access denied.") + to_chat(user, span_danger("Access denied.")) else add_fingerprint(user) @@ -406,25 +402,23 @@ shock(user,50) return if(!anchored) - to_chat(user, "\The [src] needs to be firmly secured to the floor first!") + to_chat(user, span_warning("\The [src] needs to be firmly secured to the floor first!")) return if(locked && !issilicon(user)) - to_chat(user, "The controls are locked!") + to_chat(user, span_warning("The controls are locked!")) return if(!powernet) - to_chat(user, "\The [src] needs to be powered by a wire!") + to_chat(user, span_warning("\The [src] needs to be powered by a wire!")) return if(active) - user.visible_message("[user] turned \the [src] off.", \ - "You turn off \the [src].", \ - "You hear heavy droning fade out.") + user.visible_message(span_notice("[user] turned \the [src] off."), \ + span_notice("You turn off \the [src]."), \ + span_hear("You hear heavy droning fade out.")) active = FALSE log_game("[src] was deactivated by [key_name(user)] at [AREACOORD(src)]") else - user.visible_message("[user] turned \the [src] on.", \ - "You turn on \the [src].", \ - "You hear heavy droning.") + user.visible_message(span_notice("[user] turned \the [src] on."), span_notice("ou turn on \the [src]."), span_hear("ou hear heavy droning.")) active = ACTIVE_SETUPFIELDS log_game("[src] was activated by [key_name(user)] at [AREACOORD(src)]") add_fingerprint(user) @@ -435,28 +429,28 @@ if(!powernet) return if(active) - visible_message("The [src.name] hums as it powers down.", \ + visible_message(span_notice("The [src.name] hums as it powers down."), \ "If this message is ever seen, something is wrong.", \ - "You hear heavy droning fade out.") + span_notice("You hear heavy droning fade out.")) playsound(src, 'sound/machines/synth_no.ogg', 50, TRUE, frequency = 6120) active = FALSE log_game("[src] was deactivated by wire pulse at [AREACOORD(src)]") else - visible_message("The [src.name] beeps as it powers up.", \ + visible_message(span_notice("The [src.name] beeps as it powers up."), \ "If this message is ever seen, something is wrong.", \ - "You hear heavy droning.") + span_notice("You hear heavy droning.")) playsound(src, 'sound/machines/synth_yes.ogg', 50, TRUE, frequency = 6120) active = ACTIVE_SETUPFIELDS log_game("[src] was activated by wire pulse at [AREACOORD(src)]") /obj/machinery/power/shieldwallgen/emag_act(mob/user) if(obj_flags & EMAGGED) - to_chat(user, "The access controller is damaged!") + to_chat(user, span_warning("The access controller is damaged!")) return obj_flags |= EMAGGED locked = FALSE playsound(src, "sparks", 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - to_chat(user, "You short out the access controller.") + to_chat(user, span_warning("You short out the access controller.")) /obj/machinery/power/shieldwallgen/proc/shock(mob/user, prb) if(machine_stat & (BROKEN|NOPOWER)) // unpowered, no shock @@ -511,10 +505,31 @@ /obj/machinery/power/shieldwallgen/atmos/proc/can_be_rotated(mob/user, rotation_type) if (anchored) - to_chat(user, "It is fastened to the floor!") + to_chat(user, span_warning("It is fastened to the floor!")) return FALSE return TRUE +/obj/machinery/power/shieldwallgen/atmos/attacked_by(obj/item/I, mob/living/user) + if(I.tool_behaviour == TOOL_MULTITOOL) + var/obj/item/multitool/multi = I + if(!panel_open && !locked) + if(istype(multi.buffer,/obj/item/assembly/control/shieldwallgen)) + var/obj/item/assembly/control/shieldwallgen/controller = multi.buffer + to_chat(user, span_notice("You copy the ID in your multitool's buffer to the [src].")) + id = controller.id + return TRUE + + else + to_chat(user, span_warning("The controls are locked!")) + return + + return ..() + +/obj/machinery/power/shieldwallgen/atmos/multitool_act(mob/living/user, obj/item/I) + . = ..() + + + /// Same as in the normal shieldwallgen, but with the shieldwalls replaced with atmos shieldwalls /obj/machinery/power/shieldwallgen/atmos/setup_field(direction) if(!direction) @@ -586,7 +601,7 @@ setDir(get_dir(gen_primary, gen_secondary)) if(hardshield == TRUE) for(var/mob/living/victim in get_turf(src)) - visible_message("\The [src] is suddenly occupying the same space as \the [victim]!") + visible_message(span_danger("\The [src] is suddenly occupying the same space as \the [victim]!")) victim.gib() /obj/machinery/shieldwall/Destroy() diff --git a/code/game/machinery/shuttle/shuttle_engine_types.dm b/code/game/machinery/shuttle/shuttle_engine_types.dm index e5e3d812c098..de9992e106d1 100644 --- a/code/game/machinery/shuttle/shuttle_engine_types.dm +++ b/code/game/machinery/shuttle/shuttle_engine_types.dm @@ -29,7 +29,7 @@ if(heat_creation) heat_engine() var/to_use = fuel_use * (percentage / 100) * deltatime - return resolved_heater.consume_fuel(to_use, fuel_type) / to_use * thrust //This proc returns how much was actually burned, so let's use that and multiply it by the thrust to get all the thrust we CAN give. + return resolved_heater.consume_fuel(to_use, fuel_type) / to_use * percentage / 100 * thrust //This proc returns how much was actually burned, so let's use that and multiply it by the thrust to get all the thrust we CAN give. /obj/machinery/power/shuttle/engine/fueled/return_fuel() . = ..() diff --git a/code/game/machinery/shuttle/shuttle_heater.dm b/code/game/machinery/shuttle/shuttle_heater.dm index 8f5fd9cbad34..8578e3fb5a23 100644 --- a/code/game/machinery/shuttle/shuttle_heater.dm +++ b/code/game/machinery/shuttle/shuttle_heater.dm @@ -25,7 +25,7 @@ layer = OBJ_LAYER showpipe = TRUE - pipe_flags = PIPING_ONE_PER_TURF | PIPING_DEFAULT_LAYER_ONLY + pipe_flags = PIPING_ONE_PER_TURF var/efficiency_multiplier = 1 var/gas_capacity = 0 @@ -34,6 +34,13 @@ ///The internals tank to draw from var/obj/item/tank/fuel_tank +/obj/machinery/atmospherics/components/unary/shuttle/heater/on_construction(obj_color, set_layer) + var/obj/item/circuitboard/machine/shuttle/heater/board = circuit + if(board) + piping_layer = board.pipe_layer + set_layer = piping_layer + ..() + /obj/machinery/atmospherics/components/unary/shuttle/heater/New() . = ..() SetInitDirections() diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 960df9263c81..7db02250ce94 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -1,3 +1,5 @@ +#define BASE_UV_CYCLES 7 + // SUIT STORAGE UNIT ///////////////// /obj/machinery/suit_storage_unit name = "suit storage unit" @@ -9,6 +11,7 @@ use_power = IDLE_POWER_USE idle_power_usage = IDLE_DRAW_MINIMAL max_integrity = 250 + circuit = /obj/item/circuitboard/machine/suit_storage_unit var/obj/item/clothing/suit/space/suit = null var/obj/item/clothing/head/helmet/space/helmet = null @@ -42,7 +45,9 @@ */ var/uv_super = FALSE /// How many cycles remain for the decontamination sequence. - var/uv_cycles = 6 + var/uv_cycles = 7 + /// Time reduction from stock parts + var/lasers_bonus = 0 /// Cooldown for occupant breakout messages via relaymove() var/message_cooldown /// How long it takes to break out of the SSU. @@ -193,6 +198,19 @@ storage = new storage_type(src) update_appearance() +/obj/machinery/suit_storage_unit/examine(mob/user) + . = ..() + . += span_notice("Number of UV cycles reduced by [lasers_bonus].") + if(locked) + . += span_notice("The locking bolts on \the [src] are engaged, preventing it from being pried open.") + +/obj/machinery/suit_storage_unit/RefreshParts() + lasers_bonus = 0 + for(var/obj/item/stock_parts/micro_laser/lasers in component_parts) + lasers_bonus += ((lasers.rating) * 0.25) + + uv_cycles = BASE_UV_CYCLES - lasers_bonus + /obj/machinery/suit_storage_unit/Destroy() QDEL_NULL(suit) QDEL_NULL(helmet) @@ -252,7 +270,15 @@ if(!(flags_1 & NODECONSTRUCT_1)) open_machine() dump_contents() - new /obj/item/stack/sheet/metal (loc, 2) + on_deconstruction() + if(circuit) + circuit.forceMove(loc) + circuit = null + if(length(component_parts)) + spawn_frame(disassembled) + for(var/obj/item/I in component_parts) + I.forceMove(loc) + component_parts.Cut() qdel(src) /obj/machinery/suit_storage_unit/interact(mob/living/user) @@ -320,7 +346,7 @@ else if (occupant) var/mob/living/mob_occupant = occupant - to_chat(mob_occupant, "[src]'s confines grow warm, then hot, then scorching. You're being burned [!mob_occupant.stat ? "alive" : "away"]!") + to_chat(mob_occupant, span_userdanger("[src]'s confines grow warm, then hot, then scorching. You're being burned [!mob_occupant.stat ? "alive" : "away"]!")) cook() if ("lock", "unlock") if (!state_open) @@ -366,27 +392,27 @@ return var/mob/living/target = A if(!state_open) - to_chat(user, "The unit's doors are shut!") + to_chat(user, span_warning("The unit's doors are shut!")) return if(!is_operational) - to_chat(user, "The unit is not operational!") + to_chat(user, span_warning("The unit is not operational!")) return if(occupant || helmet || suit || storage) - to_chat(user, "It's too cluttered inside to fit in!") + to_chat(user, span_warning("It's too cluttered inside to fit in!")) return if(target == user) - user.visible_message("[user] starts squeezing into [src]!", "You start working your way into [src]...") + user.visible_message(span_warning("[user] starts squeezing into [src]!"), span_notice("You start working your way into [src]...")) else - target.visible_message("[user] starts shoving [target] into [src]!", "[user] starts shoving you into [src]!") + target.visible_message(span_warning("[user] starts shoving [target] into [src]!"), span_userdanger("[user] starts shoving you into [src]!")) - if(do_mob(user, target, 30)) + if(do_after(user, 30, target)) if(occupant || helmet || suit || storage) return if(target == user) - user.visible_message("[user] slips into [src] and closes the door behind [user.p_them()]!", "You slip into [src]'s cramped space and shut its door.") + user.visible_message(span_warning("[user] slips into [src] and closes the door behind [user.p_them()]!"), span_notice("You slip into [src]'s cramped space and shut its door.")) else - target.visible_message("[user] pushes [target] into [src] and shuts its door!", "[user] shoves you into [src] and shuts the door!") + target.visible_message(span_warning("[user] pushes [target] into [src] and shuts its door!"), span_userdanger("[user] shoves you into [src] and shuts the door!")) close_machine(target) add_fingerprint(user) @@ -400,7 +426,7 @@ */ /obj/machinery/suit_storage_unit/proc/cook() var/mob/living/mob_occupant = occupant - if(uv_cycles) + if(uv_cycles > 0) uv_cycles-- uv = TRUE locked = TRUE @@ -414,11 +440,11 @@ mob_occupant.emote("scream") addtimer(CALLBACK(src, PROC_REF(cook)), 50) else - uv_cycles = initial(uv_cycles) + uv_cycles = (BASE_UV_CYCLES - lasers_bonus) uv = FALSE locked = FALSE if(uv_super) - visible_message("[src]'s door creaks open with a loud whining noise. A cloud of foul black smoke escapes from its chamber.") + visible_message(span_warning("[src]'s door creaks open with a loud whining noise. A cloud of foul black smoke escapes from its chamber.")) playsound(src, 'sound/machines/creaking.ogg', 50, TRUE) helmet = null qdel(helmet) @@ -432,9 +458,9 @@ wires.cut_all() else if(!occupant) - visible_message("[src]'s door slides open. The glowing yellow lights dim to a gentle green.") + visible_message(span_notice("[src]'s door slides open. The glowing yellow lights dim to a gentle green.")) else - visible_message("[src]'s door slides open, barraging you with the nauseating smell of charred flesh.") + visible_message(span_warning("[src]'s door slides open, barraging you with the nauseating smell of charred flesh.")) mob_occupant.radiation = 0 playsound(src, 'sound/machines/airlocks/standard/close.ogg', 25, TRUE) var/list/things_to_clear = list() //Done this way since using GetAllContents on the SSU itself would include circuitry and such. @@ -472,7 +498,7 @@ if(locked) if(message_cooldown <= world.time) message_cooldown = world.time + 50 - to_chat(user, "[src]'s door won't budge!") + to_chat(user, span_warning("[src]'s door won't budge!")) return open_machine() dump_contents() @@ -484,21 +510,21 @@ return user.changeNext_move(CLICK_CD_BREAKOUT) user.last_special = world.time + CLICK_CD_BREAKOUT - user.visible_message("You see [user] kicking against the doors of [src]!", \ - "You start kicking against the doors... (this will take about [DisplayTimeText(breakout_time)].)", \ - "You hear a thump from [src].") + user.visible_message(span_notice("You see [user] kicking against the doors of [src]!"), \ + span_notice("You start kicking against the doors... (this will take about [DisplayTimeText(breakout_time)].)"), \ + span_hear("You hear a thump from [src].")) if(do_after(user,(breakout_time), target = src)) if(!user || user.stat != CONSCIOUS || user.loc != src) return - user.visible_message("[user] successfully broke out of [src]!", \ - "You successfully break out of [src]!") + user.visible_message(span_warning("[user] successfully broke out of [src]!"), \ + span_notice("You successfully break out of [src]!")) open_machine() dump_contents() add_fingerprint(user) if(locked) - visible_message("You see [user] kicking against the doors of [src]!", \ - "You start kicking against the doors...") + visible_message(span_notice("You see [user] kicking against the doors of [src]!"), \ + span_notice("You start kicking against the doors...")) addtimer(CALLBACK(src, PROC_REF(resist_open), user), 300) else open_machine() @@ -506,42 +532,42 @@ /obj/machinery/suit_storage_unit/proc/resist_open(mob/user) if(!state_open && occupant && (user in src) && user.stat == 0) // Check they're still here. - visible_message("You see [user] burst out of [src]!", \ - "You escape the cramped confines of [src]!") + visible_message(span_notice("You see [user] burst out of [src]!"), \ + span_notice("You escape the cramped confines of [src]!")) open_machine() /obj/machinery/suit_storage_unit/attackby(obj/item/I, mob/user, params) if(state_open && is_operational) if(istype(I, /obj/item/clothing/suit)) if(suit) - to_chat(user, "The unit already contains a suit!.") + to_chat(user, span_warning("The unit already contains a suit!.")) return if(!user.transferItemToLoc(I, src)) return suit = I else if(istype(I, /obj/item/clothing/head)) if(helmet) - to_chat(user, "The unit already contains a helmet!") + to_chat(user, span_warning("The unit already contains a helmet!")) return if(!user.transferItemToLoc(I, src)) return helmet = I else if(istype(I, /obj/item/clothing/mask)) if(mask) - to_chat(user, "The unit already contains a mask!") + to_chat(user, span_warning("The unit already contains a mask!")) return if(!user.transferItemToLoc(I, src)) return mask = I else if(storage) - to_chat(user, "The auxiliary storage compartment is full!") + to_chat(user, span_warning("The auxiliary storage compartment is full!")) return if(!user.transferItemToLoc(I, src)) return storage = I - visible_message("[user] inserts [I] into [src]", "You load [I] into [src].") + visible_message(span_notice("[user] inserts [I] into [src]"), span_notice("You load [I] into [src].")) update_appearance() return @@ -564,7 +590,7 @@ */ /obj/machinery/suit_storage_unit/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/I) if(!(flags_1 & NODECONSTRUCT_1) && I.tool_behaviour == TOOL_SCREWDRIVER && uv) - to_chat(user, "It might not be wise to fiddle with [src] while it's running...") + to_chat(user, span_warning("It might not be wise to fiddle with [src] while it's running...")) return TRUE return ..() @@ -573,8 +599,12 @@ . = !(state_open || panel_open || is_operational || locked || (flags_1 & NODECONSTRUCT_1)) && I.tool_behaviour == TOOL_CROWBAR if(.) I.play_tool_sound(src, 50) - visible_message("[usr] pries open \the [src].", "You pry open \the [src].") + visible_message(span_notice("[usr] pries open \the [src]."), span_notice("You pry open \the [src].")) open_machine() + // todo, make it not deconstruct while locked + if(!locked) + if(default_deconstruction_crowbar(I)) + return TRUE // Mapping helper unit takes whatever lies on top of it /obj/machinery/suit_storage_unit/inherit/Initialize(mapload) @@ -599,3 +629,6 @@ AM.forceMove(src) storage = AM update_appearance() + + +#undef BASE_UV_CYCLES diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index 63d308f69558..3882fe8d5a6f 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -101,13 +101,13 @@ chassis.use_power(energy_drain) addtimer(CALLBACK(src, PROC_REF(set_ready_state), 1), equip_cooldown) -/obj/item/mecha_parts/mecha_equipment/proc/do_after_cooldown(atom/target) +/obj/item/mecha_parts/mecha_equipment/proc/do_after_cooldown(atom/target, mob/user, interaction_key) if(!chassis) return var/C = chassis.loc set_ready_state(0) chassis.use_power(energy_drain) - . = do_after(chassis.occupant, equip_cooldown, target=target) + . = do_after(user, equip_cooldown, target=target, interaction_key = interaction_key) set_ready_state(1) if(!chassis || chassis.loc != C || src != chassis.selected || !(get_dir(chassis, target)&chassis.dir)) return 0 diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index d2c712d32ea8..88c2ca721da2 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -831,7 +831,7 @@ //An actual AI (simple_animal mecha pilot) entering the mech -/obj/mecha/proc/aimob_enter_mech(mob/living/simple_animal/hostile/syndicate/mecha_pilot/pilot_mob) +/obj/mecha/proc/aimob_enter_mech(mob/living/simple_animal/hostile/human/syndicate/mecha_pilot/pilot_mob) if(pilot_mob && pilot_mob.Adjacent(src)) if(occupant) return @@ -841,7 +841,7 @@ pilot_mob.forceMove(src) GrantActions(pilot_mob)//needed for checks, and incase a badmin puts somebody in the mob -/obj/mecha/proc/aimob_exit_mech(mob/living/simple_animal/hostile/syndicate/mecha_pilot/pilot_mob) +/obj/mecha/proc/aimob_exit_mech(mob/living/simple_animal/hostile/human/syndicate/mecha_pilot/pilot_mob) if(occupant == pilot_mob) occupant = null if(pilot_mob.mecha == src) diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index 42c32e04fa98..fbe90058fc3e 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -210,7 +210,7 @@ M.visible_message("[user] starts buckling [M] to [src]!",\ "[user] starts buckling you to [src]!",\ "You hear metal clanking.") - if(!do_after(user, 2 SECONDS, TRUE, M)) + if(!do_after(user, 2 SECONDS, M)) return FALSE // Sanity check before we attempt to buckle. Is everything still in a kosher state for buckling after the 3 seconds have elapsed? diff --git a/code/game/objects/effects/anomalies/anomalies_hallucination.dm b/code/game/objects/effects/anomalies/anomalies_hallucination.dm index fc7e4e3c9859..ab859a3b3215 100644 --- a/code/game/objects/effects/anomalies/anomalies_hallucination.dm +++ b/code/game/objects/effects/anomalies/anomalies_hallucination.dm @@ -28,7 +28,7 @@ /obj/effect/anomaly/hallucination/proc/hallucination_pulse(turf/open/location, effectrange) for(var/mob/living/carbon/human/user in view(location, effectrange)) // If they are immune to the anomaly - if (iscarbon(user) && !user.research_scanner) + if (user.research_scanner) continue // Blind people don't get hallucinations. diff --git a/code/game/objects/effects/spawners/bundle.dm b/code/game/objects/effects/spawners/bundle.dm index 19e7b1c957fa..edab392613f3 100644 --- a/code/game/objects/effects/spawners/bundle.dm +++ b/code/game/objects/effects/spawners/bundle.dm @@ -141,18 +141,6 @@ /obj/item/clothing/head/wizard/fake, /obj/item/staff) -/obj/effect/spawner/bundle/costume/sexyclown - name = "sexy clown costume spawner" - items = list( - /obj/item/clothing/mask/gas/sexyclown, - /obj/item/clothing/under/rank/civilian/clown/sexy) - -/obj/effect/spawner/bundle/costume/sexymime - name = "sexy mime costume spawner" - items = list( - /obj/item/clothing/mask/gas/sexymime, - /obj/item/clothing/under/rank/civilian/mime/sexy) - /obj/effect/spawner/bundle/costume/mafia name = "black mafia outfit spawner" items = list( diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 75cc7c0556fb..033307e5472f 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -202,6 +202,10 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb var/canMouseDown = FALSE + //for setting world icons on the go + var/inventory_state + var/world_state + /obj/item/Initialize() if(attack_verb) @@ -391,7 +395,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb if(grav > STANDARD_GRAVITY) var/grav_power = min(3,grav - STANDARD_GRAVITY) to_chat(user,"You start picking up [src]...") - if(!do_mob(user,src,30*grav_power)) + if(!do_after(user, 30*grav_power, src)) return @@ -518,12 +522,12 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb /obj/item/proc/equipped(mob/user, slot, initial = FALSE) SHOULD_CALL_PARENT(1) visual_equipped(user, slot, initial) - SEND_SIGNAL(src, COMSIG_ITEM_EQUIPPED, user, slot) for(var/X in actions) var/datum/action/A = X if(item_action_slot_check(slot, user)) //some items only give their actions buttons when in a specific slot. A.Grant(user) item_flags |= IN_INVENTORY + SEND_SIGNAL(src, COMSIG_ITEM_EQUIPPED, user, slot) if(!initial) if(equip_sound && (slot_flags & slot)) playsound(src, equip_sound, EQUIP_SOUND_VOLUME, TRUE, ignore_walls = FALSE) @@ -922,7 +926,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb var/datum/callback/tool_check = CALLBACK(src, PROC_REF(tool_check_callback), user, amount, extra_checks) if(ismob(target)) - if(!do_mob(user, target, delay, extra_checks=tool_check)) + if(!do_after(user, delay, target, extra_checks=tool_check)) return else diff --git a/code/game/objects/items/cardboard_cutouts.dm b/code/game/objects/items/cardboard_cutouts.dm index f44359ca656c..31af53aa3fc7 100644 --- a/code/game/objects/items/cardboard_cutouts.dm +++ b/code/game/objects/items/cardboard_cutouts.dm @@ -104,7 +104,7 @@ var/new_appearance = show_radial_menu(user, src, possible_appearances, custom_check = CALLBACK(src, PROC_REF(check_menu), user, crayon), radius = 36, require_near = TRUE) if(!new_appearance) return FALSE - if(!do_after(user, 10, FALSE, src, TRUE)) + if(!do_after(user, 10, src, progress = TRUE)) return FALSE if(!check_menu(user, crayon)) return FALSE diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index 2e93b662799a..9d5623498733 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -180,7 +180,18 @@ /obj/item/card/id/attack_self(mob/user) if(Adjacent(user)) - user.visible_message("[user] shows you: [icon2html(src, viewers(user))] \the [initial(name)] [(!registered_name) ? "(" : "([registered_name]"][(!assignment) ? ")" : ", [assignment])"].", "You show \the [initial(name)] [(!registered_name) ? "(" : "([registered_name],"] [(!assignment) ? ")" : "[assignment])"].") + var/id_message = "\the [initial(name)] " + var/list/id_info = list() + if(assignment) + id_info += "JOB: [assignment]" + if(registered_name) + id_info += "NAME: [registered_name]" + if(id_info) + id_message += id_info.Join(", ") + var/self_message = span_notice("You show [id_message]") + var/other_message = span_notice("[user] shows you: [icon2html(src, viewers(user))] [id_message]") + + user.visible_message(other_message, self_message) add_fingerprint(user) /obj/item/card/id/vv_edit_var(var_name, var_value) @@ -320,33 +331,42 @@ /obj/item/card/id/examine(mob/user) . = ..() - if(registered_account) - . += "The account linked to the card belongs to '[registered_account.account_holder]' and reports a balance of [registered_account.account_balance] cr." . += "There's more information below, you can look again to take a closer look..." /obj/item/card/id/examine_more(mob/user) var/list/msg = list("You examine [src] closer, and note the following...") if(registered_name) - msg += "This access card is assigned to [registered_name]." + msg += "NAME:" + msg += "[registered_name]" if(registered_age) - msg += "The card indicates that the holder is [registered_age] years old. [(registered_age < AGE_MINOR) ? "There's a holographic stripe that reads 'MINOR: DO NOT SERVE ALCOHOL OR TOBACCO' along the bottom of the card." : ""]" - if(mining_points) - msg += "There's [mining_points] mining equipment redemption point\s loaded onto this card." + msg += "AGE:" + msg += "[registered_age] years old [(registered_age < AGE_MINOR) ? "There's a holographic stripe that reads 'MINOR: DO NOT SERVE ALCOHOL OR TOBACCO' along the bottom of the card." : ""]" if(length(ship_access)) + msg += "SHIP ACCESS:" + + var/list/ship_factions = list() + for(var/datum/overmap/ship/controlled/ship in ship_access) + var/faction = ship.get_faction() + if(!(faction in ship_factions)) + ship_factions += faction + msg += "[ship_factions.Join(", ")]" + var/list/ship_names = list() for(var/datum/overmap/ship/controlled/ship in ship_access) ship_names += ship.name - msg += "The card has access to the following ships: [ship_names.Join(", ")]" + msg += "[ship_names.Join(", ")]" + if(registered_account) - msg += "The account linked to the ID belongs to '[registered_account.account_holder]' and reports a balance of [registered_account.account_balance] cr." - msg += "Alt-Click the ID to pull money from the linked account in the form of holochips." - msg += "You can insert credits into the linked account by pressing holochips, cash, or coins against the ID." + msg += "ACCOUNT:" + msg += "LINKED ACCOUNT HOLDER: '[registered_account.account_holder]'" + msg += "BALANCE: [registered_account.account_balance] cr." + msg += "Alt-click the ID to pull money from the account in the form of holochips." + msg += "You can insert credits into the account by pressing holochips, cash, or coins against the ID." if(registered_account.account_holder == user.real_name) - msg += "If you lose this ID card, you can reclaim your account by Alt-Clicking a blank ID card while holding it and entering your account ID number." + msg += "If you lose this ID card, you can reclaim your account by Alt-click a blank ID card and entering your account ID number." else - msg += "There is no registered account linked to this card. Alt-Click to add one." - + msg += "There is no registered account. Alt-click to add one." return msg /obj/item/card/id/GetAccess() 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/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 6a5fa6e70a12..4fbe06343ae5 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -201,8 +201,19 @@ name = "Circulator/Heat Exchanger (Machine Board)" icon_state = "engineering" build_path = /obj/machinery/atmospherics/components/binary/circulator + var/pipe_layer = PIPING_LAYER_DEFAULT req_components = list() +/obj/item/circuitboard/machine/circulator/attackby(obj/item/I, mob/user, params) + if(I.tool_behaviour == TOOL_MULTITOOL) + pipe_layer = (pipe_layer >= PIPING_LAYER_MAX) ? PIPING_LAYER_MIN : (pipe_layer + 1) + to_chat(user, "You change the circuitboard to layer [pipe_layer].") + return + +/obj/item/circuitboard/machine/circulator/examine() + . = ..() + . += "It is set to layer [pipe_layer]." + /obj/item/circuitboard/machine/emitter name = "Emitter (Machine Board)" icon_state = "engineering" @@ -1470,10 +1481,22 @@ /obj/item/circuitboard/machine/shuttle/heater name = "Fueled Engine Heater (Machine Board)" + desc = "You can use mulitool to switch pipe layers" build_path = /obj/machinery/atmospherics/components/unary/shuttle/heater + var/pipe_layer = PIPING_LAYER_DEFAULT req_components = list(/obj/item/stock_parts/micro_laser = 2, /obj/item/stock_parts/matter_bin = 1) +/obj/item/circuitboard/machine/shuttle/heater/attackby(obj/item/I, mob/user, params) + if(I.tool_behaviour == TOOL_MULTITOOL) + pipe_layer = (pipe_layer >= PIPING_LAYER_MAX) ? PIPING_LAYER_MIN : (pipe_layer + 1) + to_chat(user, "You change the circuitboard to layer [pipe_layer].") + return + +/obj/item/circuitboard/machine/shuttle/heater/examine() + . = ..() + . += "It is set to layer [pipe_layer]." + /obj/item/circuitboard/machine/shuttle/smes name = "Electric Engine Precharger (Machine Board)" build_path = /obj/machinery/power/smes/shuttle @@ -1501,22 +1524,8 @@ /obj/item/stock_parts/manipulator = 2, ) -/obj/item/circuitboard/machine/coffeemaker - name = "Modello 3 Coffeemaker" - build_path = /obj/machinery/coffeemaker - req_components = list( - /obj/item/stack/sheet/glass = 1, - /obj/item/reagent_containers/glass/beaker = 2, - /obj/item/stock_parts/capacitor = 1, - /obj/item/stock_parts/micro_laser = 2, - ) - -/obj/item/circuitboard/machine/coffeemaker/impressa - name = "Impressa Coffeemaker" - build_path = /obj/machinery/coffeemaker/impressa - req_components = list( - /obj/item/stack/sheet/glass = 1, - /obj/item/reagent_containers/glass/beaker = 2, - /obj/item/stock_parts/capacitor = 1, - /obj/item/stock_parts/micro_laser = 2, - ) +/obj/item/circuitboard/machine/suit_storage_unit + name = "Suit Storage Unit" + icon_state = "engineering" + build_path = /obj/machinery/suit_storage_unit + req_components = list(/obj/item/stock_parts/micro_laser = 4) diff --git a/code/game/objects/items/devices/mines.dm b/code/game/objects/items/devices/mines.dm index 112e26e1303b..1772cbf497c3 100644 --- a/code/game/objects/items/devices/mines.dm +++ b/code/game/objects/items/devices/mines.dm @@ -212,11 +212,8 @@ SIGNAL_HANDLER if(!can_trigger(arrived)) return - // Flying = can't step on a mine - if(arrived.movement_type & FLYING) - return - //no cheap disarming - if(arrived.throwing && isitem(arrived)) + // All other movment types rn can easily avoid it + if(!(arrived.movement_type == GROUND)) return // Someone already on it if(foot_on_mine?.resolve()) @@ -257,6 +254,10 @@ clicked = FALSE . = ..() +/obj/item/mine/pressure/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) + trigger_mine(AM) + ..() + //handles disarming(and failing to disarm) /obj/item/mine/pressure/attackby(obj/item/I, mob/user) if(I.tool_behaviour == TOOL_SCREWDRIVER) 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/dna_injector.dm b/code/game/objects/items/dna_injector.dm index 34563d5e649c..a11539595805 100644 --- a/code/game/objects/items/dna_injector.dm +++ b/code/game/objects/items/dna_injector.dm @@ -62,7 +62,7 @@ if(target != user) target.visible_message("[user] is trying to inject [target] with [src]!", \ "[user] is trying to inject you with [src]!") - if(!do_mob(user, target) || used) + if(!do_after(user, target = target) || used) return target.visible_message("[user] injects [target] with the syringe with [src]!", \ "[user] injects you with the syringe with [src]!") @@ -90,11 +90,6 @@ desc = "This will make you big and strong, but give you a bad skin condition." add_mutations = list(HULK) -/obj/item/dnainjector/firebreath - name = "\improper DNA injector (Fire Breath)" - desc = "Restores the dragon ancestry." - add_mutations = list(FIREBREATH) - /obj/item/dnainjector/xraymut name = "\improper DNA injector (X-ray)" desc = "Finally you can see what the Captain does." diff --git a/code/game/objects/items/dyekit.dm b/code/game/objects/items/dyekit.dm index 2cbfbca6332b..86c6e90a3290 100644 --- a/code/game/objects/items/dyekit.dm +++ b/code/game/objects/items/dyekit.dm @@ -38,3 +38,30 @@ return playsound(src, 'sound/effects/spray.ogg', 5, TRUE, 5) human_target.update_hair() + +/obj/item/colorsalve + name = "Elzuose color salve" + desc = "A Kalixcian beauty product for Elzuose that comes in the form of a salve packaged with various color additives. Used to temporarily change the pigment color of light emitting cells in the skin, requiring an extensive amount of time to prepare and apply. Wears off after a few hours." + icon = 'icons/obj/dyespray.dmi' + icon_state = "colorsalve" + +/obj/item/colorsalve/attack_self(mob/living/user) + if(!iselzuose(user)) + return + + var/mob/living/carbon/human/H = user + var/datum/species/elzuose/species_datum = H.dna.species + // select new color + var/new_etherealcolor = input(user, "Choose your Elzuose color:", "Character Preference", species_datum.default_color) as color|null + if(new_etherealcolor) + var/temp_hsv = RGBtoHSV(new_etherealcolor) + if(ReadHSV(temp_hsv)[3] >= ReadHSV("#505050")[3]) // elzu colors should be bright ok?? + if(!do_after(usr, 30 SECONDS, user)) + return + playsound(src, 'sound/effects/ointment.ogg', 5, TRUE, 5) + species_datum.default_color = sanitize_hexcolor(new_etherealcolor, 6, TRUE) + species_datum.current_color = species_datum.health_adjusted_color(user, species_datum.default_color) + species_datum.spec_updatehealth(user) + user.visible_message(span_notice("[user] applies the salve, changing [user.p_their()] color to [new_etherealcolor]")) + else + to_chat(user, span_danger("Invalid color. Your color is not bright enough.")) diff --git a/code/game/objects/items/eightball.dm b/code/game/objects/items/eightball.dm index 111dd3aa96bc..1396521aaf9a 100644 --- a/code/game/objects/items/eightball.dm +++ b/code/game/objects/items/eightball.dm @@ -59,7 +59,7 @@ shaking = TRUE start_shaking(user) - if(do_after(user, shake_time, needhand=TRUE, target=user, progress=TRUE)) + if(do_after(user, shake_time, target=user)) var/answer = get_answer() say(answer) diff --git a/code/game/objects/items/granters.dm b/code/game/objects/items/granters.dm index 0681892fd47e..f3cdfb068944 100644 --- a/code/game/objects/items/granters.dm +++ b/code/game/objects/items/granters.dm @@ -247,19 +247,6 @@ user.Stun(40, ignore_canstun = TRUE) user.petrify(30) -/obj/item/book/granter/spell/cards - spell = /obj/effect/proc_holder/spell/aimed/spell_cards - spellname = "spellcards" - icon_state ="bookspellcards" - desc = "The ultimate card trick, for users ten and up." - remarks = list("It's all about the razzmataz.", "...I don't think I'll actually be sawing anyone in half", "These are pretty flimsy, most armor would defeat them.", "They do burn damage? Weird.", "Why the dumb stance? It's just a flick of the hand...", "Are these cards? They feel stiffer then pages.", "Best performed using a top hat...") - -/obj/item/book/granter/spell/cards/recoil(mob/living/user) - ..() - to_chat(user,"The cards are against you!") - user.Stun(40, ignore_canstun = TRUE) - user.petrify(30) - /obj/item/book/granter/spell/shapechange spell = /obj/effect/proc_holder/spell/targeted/shapeshift spellname = "shapechange" diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index 496fc07288ec..9fece4feedd4 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -57,7 +57,8 @@ "[user] is trying to put [src.name] on you!") playsound(loc, cuffsound, 30, TRUE, -2) - if(do_mob(user, C, 30) && C.canBeHandcuffed()) + log_combat(user, C, "attempted to handcuff") + if(do_after(user, 3 SECONDS, C) && C.canBeHandcuffed()) if(iscyborg(user)) apply_cuffs(C, user, TRUE) else @@ -272,6 +273,11 @@ update_appearance() playsound(src, 'sound/effects/snap.ogg', 50, TRUE) +/obj/item/restraints/legcuffs/beartrap/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) + if(armed) + close_trap() + ..() + /obj/item/restraints/legcuffs/beartrap/proc/on_entered(datum/source, AM as mob|obj) SIGNAL_HANDLER if(armed && isturf(loc)) diff --git a/code/game/objects/items/implants/implanter.dm b/code/game/objects/items/implants/implanter.dm index 5b8db550a87d..6de461954cb2 100644 --- a/code/game/objects/items/implants/implanter.dm +++ b/code/game/objects/items/implants/implanter.dm @@ -27,7 +27,7 @@ M.visible_message("[user] is attempting to implant [M].") var/turf/T = get_turf(M) - if(T && (M == user || do_mob(user, M, 50))) + if(T && (M == user || do_after(user, 5 SECONDS, M))) if(src && imp) if(imp.implant(M, user)) if (M == user) diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm index 1475ae88f8dd..e386420462d6 100644 --- a/code/game/objects/items/kitchen.dm +++ b/code/game/objects/items/kitchen.dm @@ -179,6 +179,7 @@ /obj/item/kitchen/knife/combat name = "combat knife" + icon = 'icons/obj/world/melee.dmi' icon_state = "combatknife" item_state = "combatknife" desc = "A military combat utility survival knife." @@ -188,6 +189,10 @@ attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "cut") bayonet = TRUE +/obj/item/kitchen/knife/combat/Initialize() + . = ..() + AddElement(/datum/element/world_icon, null, icon, 'icons/obj/item/knife.dmi') + /obj/item/kitchen/knife/combat/survival name = "survival knife" icon_state = "survivalknife" diff --git a/code/game/objects/items/manuals.dm b/code/game/objects/items/manuals.dm index 693858bf1b2e..05af8fcadbad 100644 --- a/code/game/objects/items/manuals.dm +++ b/code/game/objects/items/manuals.dm @@ -256,8 +256,8 @@ -

Trickwines for idiots

- Okay, so you just joined the SRM and you want to make some brews! I'm tired of explaining all of this so I'm jotting it all down for you clowns.
+

Trickwines for brewers

+ Okay, so you just joined the SRM and you want to make some brews! I'm tired of explaining all of this so I'm jotting it all down for the new hires.
Trickwines almost all share the same effect. When you drink them, they provide a beneficial effect and when you toss them at someone it provides some sort of bad effect.

Breakaway flasks

Honestly, I love these things. I'm not a scientist so I cant exactly explain how it works but somehow when you fuse plasma into glass it makes it ultra sharp and makes it really good for cracking over fauna heads.
@@ -273,22 +273,27 @@ Soon it will drops some apples and you can grind them for the bacteria.
Once you have enough you can fabricate it the same way you would a normal barrel.
+

Ratios

+ A common trend among Trickwines is the ratio of 3:1:1.
+ 3 parts being an ethonal, the other 2 parts are often made from flora or fauna.
+

Ashwine

- It's kind of our trademark, and it's one of the simplest trickwines to make. The Montagnes love using this stuff in ceremonies as well so it should get you some good boy points.
+ It's kind of our trademark, and it's one of the simplest trickwines to make.
+ These are the most common wines used in ceremonies so we often stock ships with the moonflowers needed to make them.
It's made with a ratio of 3:1:1 absinthe, mushroom hallucinogen, and ash respectively.
Mushroom hallucinogens come from mushroom caps and you can ferment absinthe from moonflowers.
Its a mild hallucinogenic but seems to have powerful cleansing effects on the devoted SRM.
It can also really fuck someone up, causing their vision to go shaky and blurry which makes it difficult for them to fight.

Icewine

- This one helps stopping foes in their tracks. It's also got a nice taste. + This one helps stopping foes in their tracks. One of my favorite flavor wise. Its made with 3:1:1 saké, polar bear fur, frost oil(grind chilled peppers).
You can get polar bear fur and frost oil from grinding up polar bear hides and chilled peppers.
It's pretty good at sealing burns and lowering your temperature quickly.
However, it completely encases foes in ice and drops their temperature substantially.

Shockwine

- Easily my favorite, this thing is great at scorching most fauna.
+ Easily my favorite for its splashed effect, this thing is great at scorching most fauna.
Its made with vodka, calcium, and lemon juice.
If you did not know, vodka requires enzymes instead of the normal fermenting process.
It's a nice upper. Great if you're trying to run away.
@@ -301,15 +306,18 @@ Its made out of ground up fireblossems with some nice hard cider and a bit of welding fuel with of course a ratio of 3:1:1.

Forcewine

- I once had a duel with a wizard and and I was able to completly ignore a few of his spells! Its like they just fizzled out when they hit me.
- Would recomend for any esoteric senarios even though I have only been in a few of those.
- You can also use it to entrap Fauna inside of a forcefield like bubble, Gives you time to breath and laugh at them.
- 3:1:1 Tequila, Space Montain Wind, and I know its strange but hollow water, Its that stuff you can extract from geysers
+ Two intresting effects from the consumption of Forcewine.
+ First it seems to give you an "anti magic" effect, I have read about of tales of how it fizzled out some sort of great curse that we could best trace back to a ancient cult.
+ Second is it protects the mind from cohersion and mind control.
+ From my research this seems to act like nanotrasen mindshield implants.
+ Would recomend for any esoteric senarios. We wont see these alot but its always smart to prepare for the worst.
+ You can also use it to entrap Fauna inside of a forcefield like bubble, Gives you time to breath and prepare an attack.
+ 3:1:1. Tequila, Space Montain Wind, and I know its one of the most difficult things to come by but hollow water, Its that stuff you can extract from geysers

Prismwine

Gives you a nice shiny layer of armour, fire seems to have alot harder time sticking to me when i tested it.
Throwing it seeems to do the reverse acting like a magnifying glass to burns and lasers
- Made 3:1:1 with good ol Gin, then add plasma and tinea luxor which is found from mushroom stems
+ 3:1:1. Good ol Gin, then add plasma and tinea luxor which is found from mushroom stems
Some of these can be a bit situatinal but its always nice to have a few in your bag for emergecys.
As a bonus, most of the other factions have no clue how to make these so you can sell them for a fair chunk of cash.
diff --git a/code/game/objects/items/pet_carrier.dm b/code/game/objects/items/pet_carrier.dm index d9311f5e2b43..a08b1398aad8 100644 --- a/code/game/objects/items/pet_carrier.dm +++ b/code/game/objects/items/pet_carrier.dm @@ -165,7 +165,7 @@ user.visible_message("[user] starts loading [target] into [src].", \ "You start loading [target] into [src]...", null, null, target) to_chat(target, "[user] starts loading you into [user.p_their()] [name]!") - if(!do_mob(user, target, 30)) + if(!do_after(user, 3 SECONDS, target)) return if(target in occupants) return diff --git a/code/game/objects/items/puzzle_pieces.dm b/code/game/objects/items/puzzle_pieces.dm index 5d6b409e8d32..473bcd945c58 100644 --- a/code/game/objects/items/puzzle_pieces.dm +++ b/code/game/objects/items/puzzle_pieces.dm @@ -1,6 +1,6 @@ //************** -//*****Keys******************* -//************** ** ** +//*****Keys***** +//************** /obj/item/keycard name = "security keycard" desc = "This feels like it belongs to a door." diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 32d923eef985..ca3b1e184168 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -31,17 +31,17 @@ return if(target == user) playsound(src, islist(apply_sounds) ? pick(apply_sounds) : apply_sounds, 25) - if(!do_mob(user, target, self_delay, extra_checks=CALLBACK(target, TYPE_PROC_REF(/mob/living, can_inject), user, TRUE))) - return if(!silent) user.visible_message("[user] starts to apply \the [src] on [user.p_them()]self...", "You begin applying \the [src] on yourself...") + if(!do_after(user, self_delay, target, extra_checks=CALLBACK(target, TYPE_PROC_REF(/mob/living, can_inject), user, TRUE))) + return else if(other_delay) playsound(src, islist(apply_sounds) ? pick(apply_sounds) : apply_sounds, 25) - if(!do_mob(user, target, other_delay, extra_checks=CALLBACK(target, TYPE_PROC_REF(/mob/living, can_inject), user, TRUE))) - return if(!silent) user.visible_message("[user] starts to apply \the [src] on [target].", "You begin applying \the [src] on [target]...") + if(!do_after(user, other_delay, target, extra_checks=CALLBACK(target, TYPE_PROC_REF(/mob/living, can_inject), user, TRUE))) + return if(heal(target, user)) diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index e3ef63e116d4..9fc6fa808a46 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -332,32 +332,6 @@ GLOBAL_LIST_INIT(silver_recipes, list ( \ /obj/item/stack/sheet/mineral/silver/five amount = 5 -/* - * Clown - */ -/obj/item/stack/sheet/mineral/bananium - name = "bananium" - icon_state = "sheet-bananium" - item_state = "sheet-bananium" - singular_name = "bananium sheet" - sheettype = "bananium" - custom_materials = list(/datum/material/bananium=MINERAL_MATERIAL_AMOUNT) - - grind_results = list(/datum/reagent/consumable/banana = 20) - point_value = 50 - merge_type = /obj/item/stack/sheet/mineral/bananium - material_type = /datum/material/bananium - walltype = /turf/closed/wall/mineral/bananium - -GLOBAL_LIST_INIT(bananium_recipes, list ( \ - new/datum/stack_recipe("bananium tile", /obj/item/stack/tile/mineral/bananium, 1, 4, 20), \ - new/datum/stack_recipe("Clown Statue", /obj/structure/statue/bananium/clown, 5, one_per_turf = 1, on_floor = 1), \ - )) - -/obj/item/stack/sheet/mineral/bananium/get_main_recipes() - . = ..() - . += GLOB.bananium_recipes - /* * Titanium */ @@ -436,7 +410,6 @@ GLOBAL_LIST_INIT(plastitanium_recipes, list ( \ . = ..() . += GLOB.plastitanium_recipes - /* * Snow */ @@ -465,56 +438,6 @@ GLOBAL_LIST_INIT(snow_recipes, list ( \ . = ..() . += GLOB.snow_recipes -/****************************** Others ****************************/ - -/* - * Adamantine -*/ - -/obj/item/stack/sheet/mineral/adamantine - name = "adamantine" - icon_state = "sheet-adamantine" - item_state = "sheet-adamantine" - singular_name = "adamantine sheet" - custom_materials = list(/datum/material/adamantine=MINERAL_MATERIAL_AMOUNT) - merge_type = /obj/item/stack/sheet/mineral/adamantine - grind_results = list(/datum/reagent/liquidadamantine = 10) - -/obj/item/stack/sheet/mineral/adamantine/ten - amount = 10 - -/* - * Runite - */ - -/obj/item/stack/sheet/mineral/runite - name = "runite" - desc = "Rare material found in distant lands." - singular_name = "runite bar" - icon_state = "sheet-runite" - item_state = "sheet-runite" - custom_materials = list(/datum/material/runite=MINERAL_MATERIAL_AMOUNT) - merge_type = /obj/item/stack/sheet/mineral/runite - material_type = /datum/material/runite - -/obj/item/stack/sheet/mineral/runite/ten - amount = 10 - -/* - * Mythril - */ -/obj/item/stack/sheet/mineral/mythril - name = "mythril" - icon_state = "sheet-mythril" - item_state = "sheet-mythril" - singular_name = "mythril sheet" - novariants = TRUE - custom_materials = list(/datum/material/mythril=MINERAL_MATERIAL_AMOUNT) - merge_type = /obj/item/stack/sheet/mineral/mythril - -/obj/item/stack/sheet/mineral/mythril/ten - amount = 10 - /* * Alien Alloy */ @@ -573,3 +496,35 @@ GLOBAL_LIST_INIT(abductor_recipes, list ( \ /obj/item/stack/sheet/mineral/coal/ten amount = 10 + +/* + * Hellstone + */ +/obj/item/stack/sheet/mineral/hidden + name = "????????" + singular_name = "????????" + +/obj/item/stack/sheet/mineral/hidden/hellstone + name = "hellstone" + icon_state = "sheet-hellstone" + item_state = "sheet-hellstone" + singular_name = "hellstone bar" + sheettype = "hellstone" + resistance_flags = FIRE_PROOF | LAVA_PROOF + custom_materials = list(/datum/material/hellstone=MINERAL_MATERIAL_AMOUNT) + grind_results = list(/datum/reagent/clf3 = 5) + point_value = 20 + merge_type = /obj/item/stack/sheet/mineral/hidden/hellstone + material_type = /datum/material/hellstone + +/obj/item/stack/sheet/mineral/hidden/hellstone/fifty + amount = 50 + +/obj/item/stack/sheet/mineral/hidden/hellstone/twenty + amount = 20 + +/obj/item/stack/sheet/mineral/hidden/hellstone/ten + amount = 10 + +/obj/item/stack/sheet/mineral/hidden/hellstone/five + amount = 5 diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 7c28c93200a3..ead6b8aeb8f1 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -31,10 +31,6 @@ tableVariant = /obj/structure/table material_type = /datum/material/iron -/obj/item/stack/sheet/metal/narsie_act() - new /obj/item/stack/sheet/runed_metal(loc, amount) - qdel(src) - /obj/item/stack/sheet/metal/fifty amount = 50 @@ -225,9 +221,9 @@ GLOBAL_LIST_INIT(bamboo_recipes, list ( \ force = 0 throwforce = 0 merge_type = /obj/item/stack/sheet/cotton - var/pull_effort = 30 - var/loom_result = /obj/item/stack/sheet/cotton/cloth grind_results = list(/datum/reagent/cellulose = 20) + var/pull_effort = 10 + var/loom_result = /obj/item/stack/sheet/cotton/cloth GLOBAL_LIST_INIT(cloth_recipes, list ( \ new/datum/stack_recipe("white jumpskirt", /obj/item/clothing/under/color/jumpskirt/white, 3), /*Ladies first*/ \ @@ -249,6 +245,7 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \ new/datum/stack_recipe("rag", /obj/item/reagent_containers/glass/rag, 1), \ new/datum/stack_recipe("towel", /obj/item/towel, 2), \ new/datum/stack_recipe("bedsheet", /obj/item/bedsheet, 3), \ + new/datum/stack_recipe("double bedsheet", /obj/item/bedsheet/double, 4), \ new/datum/stack_recipe("empty sandbag", /obj/item/emptysandbag, 4), \ null, \ new/datum/stack_recipe("fingerless gloves", /obj/item/clothing/gloves/fingerless, 1), \ @@ -342,7 +339,6 @@ GLOBAL_LIST_INIT(durathread_recipes, list ( \ singular_name = "raw durathread ball" icon_state = "sheet-durathreadraw" merge_type = /obj/item/stack/sheet/cotton/durathread - pull_effort = 70 loom_result = /obj/item/stack/sheet/durathread grind_results = list() @@ -443,52 +439,6 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \ else . = ..() - -/* - * Runed Metal - */ - -GLOBAL_LIST_INIT(runed_metal_recipes, list ( \ - new/datum/stack_recipe("runed door", /obj/machinery/door/airlock/cult, 1, time = 50, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("runed girder", /obj/structure/girder/cult, 1, time = 50, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("pylon", /obj/structure/destructible/cult/pylon, 4, time = 40, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("forge", /obj/structure/destructible/cult/forge, 3, time = 40, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("archives", /obj/structure/destructible/cult/tome, 3, time = 40, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("altar", /obj/structure/destructible/cult/talisman, 3, time = 40, one_per_turf = TRUE, on_floor = TRUE), \ - )) - -/obj/item/stack/sheet/runed_metal - name = "runed metal" - desc = "Sheets of cold metal with shifting inscriptions writ upon them." - singular_name = "runed metal sheet" - icon_state = "sheet-runed" - item_state = "sheet-runed" - icon = 'icons/obj/stack_objects.dmi' - custom_materials = list(/datum/material/runedmetal = MINERAL_MATERIAL_AMOUNT) - merge_type = /obj/item/stack/sheet/runed_metal - novariants = TRUE - grind_results = list(/datum/reagent/iron = 5, /datum/reagent/blood = 15) - material_type = /datum/material/runedmetal - -/obj/item/stack/sheet/runed_metal/attack_self(mob/living/user) - if(!iscultist(user)) - to_chat(user, "Only one with forbidden knowledge could hope to work this metal...") - return FALSE - return ..() - -/obj/item/stack/sheet/runed_metal/get_main_recipes() - . = ..() - . += GLOB.runed_metal_recipes - -/obj/item/stack/sheet/runed_metal/fifty - amount = 50 - -/obj/item/stack/sheet/runed_metal/ten - amount = 10 - -/obj/item/stack/sheet/runed_metal/five - amount = 5 - /* * Bronze */ diff --git a/code/game/objects/items/stacks/tape.dm b/code/game/objects/items/stacks/tape.dm index d22b1be85344..6a984c021a26 100644 --- a/code/game/objects/items/stacks/tape.dm +++ b/code/game/objects/items/stacks/tape.dm @@ -114,7 +114,7 @@ return if(use(1)) playsound(loc, usesound, 30, TRUE, -2) - if(do_mob(user, C, other_delay) && (!C.is_mouth_covered() || !C.is_muzzled())) + if(do_after(user, other_delay, C) && (!C.is_mouth_covered() || !C.is_muzzled())) apply_gag(C, user) C.visible_message("[user] tapes [C]s mouth shut.", \ "[user] taped your mouth shut!") @@ -134,7 +134,7 @@ "[user] is trying to put [src.name] on you!") playsound(loc, usesound, 30, TRUE, -2) - if(do_mob(user, C, self_delay) && (C.canBeHandcuffed())) + if(do_after(user, self_delay, C) && (C.canBeHandcuffed())) apply_tapecuffs(C, user) C.visible_message("[user] tapecuffs [C].", \ "[user] tapecuffs you.") @@ -152,11 +152,11 @@ if(C == user) playsound(loc, usesound, 30, TRUE, -2) user.visible_message("[user] starts to apply \the [src] on [user.p_them()]self...", "You begin applying \the [src] on yourself...") - if(!do_mob(user, C, self_delay, extra_checks=CALLBACK(C, TYPE_PROC_REF(/mob/living, can_inject), user, TRUE))) + if(!do_after(user, self_delay, C, extra_checks=CALLBACK(C, TYPE_PROC_REF(/mob/living, can_inject), user, TRUE))) return else if(other_delay) user.visible_message("[user] starts to apply \the [src] on [C].", "You begin applying \the [src] on [C]...") - if(!do_mob(user, C, other_delay, extra_checks=CALLBACK(C, TYPE_PROC_REF(/mob/living, can_inject), user, TRUE))) + if(!do_after(user, other_delay, C, extra_checks=CALLBACK(C, TYPE_PROC_REF(/mob/living, can_inject), user, TRUE))) return if(heal(C, user)) diff --git a/code/game/objects/items/stacks/tiles/tile_mineral.dm b/code/game/objects/items/stacks/tiles/tile_mineral.dm index c5e05b5212fc..ad00f3902c50 100644 --- a/code/game/objects/items/stacks/tiles/tile_mineral.dm +++ b/code/game/objects/items/stacks/tiles/tile_mineral.dm @@ -48,16 +48,6 @@ mineralType = "diamond" custom_materials = list(/datum/material/diamond=500) -/obj/item/stack/tile/mineral/bananium - name = "bananium tile" - singular_name = "bananium floor tile" - desc = "A tile made out of bananium, HOOOOOOOOONK!" - icon_state = "tile_bananium" - item_state = "tile-bananium" - turf_type = /turf/open/floor/mineral/bananium - mineralType = "bananium" - custom_materials = list(/datum/material/bananium=500) - /obj/item/stack/tile/mineral/abductor name = "alien floor tile" singular_name = "alien floor tile" diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index bfe08526311b..0e2a945de0be 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -270,7 +270,15 @@ /obj/item/assembly/flash/handheld, /obj/item/clothing/glasses, /obj/item/ammo_casing/shotgun, - /obj/item/ammo_box, + /obj/item/ammo_box/magazine, + /obj/item/ammo_box/c38, //speed loaders don't have a common path like magazines. pain. + /obj/item/ammo_box/a357, //some day we should refactor these into an ammo_box/speedloader type + /obj/item/ammo_box/a4570, //but not today + /obj/item/ammo_box/a858, //oh boy stripper clips too + /obj/item/ammo_box/vickland_a308, + /obj/item/ammo_box/a300, + /obj/item/ammo_box/aac_300blk_stripper, + /obj/item/ammo_box/amagpellet_claris, //that's the last of the clips /obj/item/reagent_containers/food/snacks/donut, /obj/item/kitchen/knife/combat, /obj/item/flashlight/seclite, @@ -592,33 +600,6 @@ /obj/item/multitool = 1) generate_items_inside(items_inside,src) - -/obj/item/storage/belt/wands - name = "wand belt" - desc = "A belt designed to hold various rods of power. A veritable fanny pack of exotic magic." - icon_state = "soulstone" - item_state = "soulstone" - -/obj/item/storage/belt/wands/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 6 - STR.set_holdable(list( - /obj/item/gun/magic/wand - )) - -/obj/item/storage/belt/wands/full/PopulateContents() - new /obj/item/gun/magic/wand/death(src) - new /obj/item/gun/magic/wand/resurrection(src) - new /obj/item/gun/magic/wand/polymorph(src) - new /obj/item/gun/magic/wand/teleport(src) - new /obj/item/gun/magic/wand/door(src) - new /obj/item/gun/magic/wand/fireball(src) - - for(var/obj/item/gun/magic/wand/W in contents) //All wands in this pack come in the best possible condition - W.max_charges = initial(W.max_charges) - W.charges = W.max_charges - /obj/item/storage/belt/janitor name = "janibelt" desc = "A belt used to hold most janitorial supplies." @@ -698,6 +679,7 @@ . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.max_items = 40 + STR.max_combined_w_class = 40 STR.display_numerical_stacking = TRUE STR.set_holdable(list( /obj/item/ammo_casing diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index fb001b2eb56b..5b817cbba675 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -1370,10 +1370,10 @@ /obj/item/stack/sheet/mineral/uranium=20,\ /obj/item/stack/sheet/mineral/diamond=50,\ /obj/item/stack/sheet/bluespace_crystal=50,\ - /obj/item/stack/sheet/mineral/bananium=50,\ + /obj/item/stack/sheet/mineral/hidden/hellstone=50,\ /obj/item/stack/sheet/mineral/wood=50,\ /obj/item/stack/sheet/plastic/fifty=1,\ - /obj/item/stack/sheet/runed_metal/fifty=1 + /obj/item/stack/sheet/mineral/hidden/hellstone/fifty=1 ) generate_items_inside(items_inside,src) @@ -1520,53 +1520,3 @@ ) generate_items_inside(items_inside,src) -/obj/item/storage/box/coffeepack - icon_state = "arabica_beans" - name = "arabica beans" - desc = "A bag containing fresh, dry coffee arabica beans. Ethically sourced and packaged by Donk! Co." - illustration = null - icon = 'icons/obj/food/containers.dmi' - var/beantype = /obj/item/reagent_containers/food/snacks/grown/coffee - -/obj/item/storage/box/cofeepack/Initialize(mapload) - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 5 - STR.set_holdable(list(/obj/item/reagent_containers/food/snacks/grown/coffee)) - -/obj/item/storage/box/coffeepack/PopulateContents() - var/static/items_inside = list( - /obj/item/reagent_containers/food/snacks/grown/coffee = 5, - /obj/item/reagent_containers/food/snacks/grown/coffee/robusta = 5) - generate_items_inside(items_inside,src) - -/obj/item/storage/box/coffeepack/robusta - icon_state = "robusta_beans" - name = "robusta beans" - desc = "A bag containing fresh, dry coffee robusta beans. Ethically sourced and packaged by Donk! Co." - beantype = /obj/item/reagent_containers/food/snacks/grown/coffee/robusta - - -/* - * Coffee condiments display -- someone can make this fancy eventually, i cant fucking figure it out for the life of me -- it exists in TG - */ - -/obj/item/storage/box/coffee_condi_display - name = "coffee condiments display" - desc = "A neat small box, holding all your favorite coffee condiments." - -/obj/item/storage/box/coffee_condi_display/Initialize(mapload) - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 14 - STR.set_holdable(list( - /obj/item/reagent_containers/food/condiment/pack/sugar, - /obj/item/reagent_containers/food/condiment/pack/creamer, - /obj/item/reagent_containers/food/condiment/pack/astrotame, - )) - -/obj/item/storage/box/coffee_condi_display/PopulateContents() - for(var/i in 1 to 4) - new /obj/item/reagent_containers/food/condiment/pack/sugar(src) - new /obj/item/reagent_containers/food/condiment/pack/creamer(src) - new /obj/item/reagent_containers/food/condiment/pack/astrotame(src) diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm index 41f214998ffd..01307d92a0f8 100644 --- a/code/game/objects/items/storage/fancy.dm +++ b/code/game/objects/items/storage/fancy.dm @@ -163,7 +163,7 @@ //////////// /obj/item/storage/fancy/cigarettes name = "\improper Space Cigarettes packet" - desc = "The most popular brand of cigarettes, sponsors of the Space Olympics." + desc = "The most popular brand of cigarettes on the Frontier." icon = 'icons/obj/cigarettes.dmi' base_icon_state = "cig" icon_state = "cig" @@ -273,14 +273,14 @@ /obj/item/storage/fancy/cigarettes/cigpack_carp name = "\improper Carp Classic packet" - desc = "Since 2313." + desc = "Since 207 FS." icon_state = "carp" base_icon_state = "carp" spawn_type = /obj/item/clothing/mask/cigarette/carp /obj/item/storage/fancy/cigarettes/cigpack_syndicate name = "cigarette packet" - desc = "An obscure brand of cigarettes." + desc = "A semi-obscure brand of cigarettes, favored by interstellar miners." icon_state = "syndie" base_icon_state = "syndie" spawn_type = /obj/item/clothing/mask/cigarette/syndicate @@ -322,7 +322,7 @@ /obj/item/storage/fancy/cigarettes/cigpack_mindbreaker name = "\improper Leary's Delight packet" - desc = "Banned in over 36 galaxies." + desc = "Banned in over 36 Sectors." icon_state = "shadyjim" base_icon_state = "shadyjim" spawn_type = /obj/item/clothing/mask/cigarette/rollie/mindbreaker @@ -435,7 +435,7 @@ /obj/item/storage/fancy/cigarettes/cigars/havana name = "\improper premium Havanian cigar case" - desc = "A case of classy Havanian cigars." + desc = "Even after centuries of Solarian export, Havana smooth is only found in proper terran cigars." icon_state = "cohibacase" base_icon_state = "cohibacase" spawn_type = /obj/item/clothing/mask/cigarette/cigar/havana diff --git a/code/game/objects/items/survery_handheld.dm b/code/game/objects/items/survery_handheld.dm index 79523b574030..547bdc150237 100644 --- a/code/game/objects/items/survery_handheld.dm +++ b/code/game/objects/items/survery_handheld.dm @@ -51,7 +51,7 @@ src_turf.visible_message("Warning: unable to locate valuable information in current sector.") break - if(!do_after_mob(user, list(src), survey_delay / penalty)) + if(!do_after(user, list(src), survey_delay / penalty)) flick(icon_state + "-corrupted", src) playsound(src, 'sound/machines/buzz-sigh.ogg', 20) src_turf.visible_message("Warning: results corrupted. Please try again.") diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 361358892520..b1dfb479b66c 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -562,7 +562,6 @@ var/datum/fakeDevil/devil = new var/list/messages = list() messages += "Some fun facts about: [devil.truename]" - messages += "[GLOB.lawlorify[LORE][devil.bane]]" messages += "[GLOB.lawlorify[LORE][devil.obligation]]" messages += "[GLOB.lawlorify[LORE][devil.ban]]" messages += "[GLOB.lawlorify[LORE][devil.banish]]" diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 69efcd42af15..971ba3cbedce 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -93,7 +93,7 @@ if(HAS_TRAIT(user, TRAIT_FREERUNNING)) //do you have any idea how fast I am??? adjusted_climb_time *= 0.8 structureclimber = user - if(do_mob(user, user, adjusted_climb_time)) + if(do_after(user, adjusted_climb_time)) if(src.loc) //Checking if structure has been destroyed if(do_climb(user)) user.visible_message("[user] climbs onto [src].", \ diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 417a1f8d86a6..714129498e4c 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -343,7 +343,7 @@ "You [actuallyismob ? "try to ":""]stuff [O] into [src].", \ "You hear clanging.") if(actuallyismob) - if(do_after_mob(user, targets, 40)) + if(do_after(user, 40, targets)) user.visible_message( "[user] stuffs [O] into [src].", \ "You stuff [O] into [src].", \ diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index a11e647a706d..f3aca3e96a98 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -5,11 +5,9 @@ /obj/structure/closet/secure_closet/engineering_chief/PopulateContents() ..() - //WS Begin new /obj/item/clothing/head/beret/ce(src) //Berets new /obj/item/clothing/under/rank/command(src) //Better command uniforms new /obj/item/stack/tape/industrial/pro(src) //Better tape - //WS End new /obj/item/clothing/neck/cloak/ce(src) new /obj/item/clothing/under/rank/engineering/chief_engineer(src) new /obj/item/clothing/under/rank/engineering/chief_engineer/skirt(src) @@ -40,9 +38,7 @@ /obj/structure/closet/secure_closet/engineering_electrical/PopulateContents() ..() var/static/items_inside = list( - //WS Begin /obj/item/stack/tape/industrial/electrical = 1, // Better tape - //WS End /obj/item/clothing/gloves/color/yellow = 2, /obj/item/storage/toolbox/electrical = 3, /obj/item/electronics/apc = 3, diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index cfdcca348b14..6c01be326e7a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -79,13 +79,11 @@ /obj/structure/closet/secure_closet/CMO/PopulateContents() ..() - //WS Begin new /obj/item/storage/belt/medical(src) //Gives the CMO a belt new /obj/item/storage/bag/medical(src) //Medibags new /obj/item/clothing/head/beret/cmo(src) //Berets new /obj/item/clothing/under/rank/command(src) //Better command uniforms new /obj/item/storage/box/hypospray/CMO(src) //Hypo mk. 2s - //WS End new /obj/item/clothing/neck/cloak/cmo(src) new /obj/item/clothing/suit/bio_suit/cmo(src) new /obj/item/clothing/head/bio_hood/cmo(src) diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm index ee9a29945aa0..fc0aae860782 100644 --- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm +++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm @@ -105,7 +105,7 @@ /obj/item/stack/sheet/mineral/plasma, /obj/item/stack/sheet/mineral/uranium, /obj/item/stack/sheet/mineral/diamond, - /obj/item/stack/sheet/mineral/bananium, + /obj/item/stack/sheet/mineral/hidden/hellstone, /obj/item/stack/sheet/plasteel, /obj/item/stack/sheet/mineral/titanium, /obj/item/stack/sheet/mineral/plastitanium, diff --git a/code/game/objects/structures/door_assembly_types.dm b/code/game/objects/structures/door_assembly_types.dm index 2558993a5278..d2bcf77cfda7 100644 --- a/code/game/objects/structures/door_assembly_types.dm +++ b/code/game/objects/structures/door_assembly_types.dm @@ -214,14 +214,6 @@ mineral = "plasma" glass_type = /obj/machinery/door/airlock/plasma/glass -/obj/structure/door_assembly/door_assembly_bananium - name = "bananium airlock assembly" - desc = "Honk." - icon = 'icons/obj/doors/airlocks/station/bananium.dmi' - base_name = "bananium airlock" - airlock_type = /obj/machinery/door/airlock/bananium - mineral = "bananium" - glass_type = /obj/machinery/door/airlock/bananium/glass /obj/structure/door_assembly/door_assembly_sandstone name = "sandstone airlock assembly" diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index a0097504c1d3..d5a8c3e496c1 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -269,19 +269,6 @@ if(exposed_temperature > 300) burnbabyburn() -/obj/structure/falsewall/bananium - name = "bananium wall" - desc = "A wall with bananium plating. Honk!" - icon = 'icons/turf/walls/bananium_wall.dmi' - icon_state = "bananium_wall-0" - base_icon_state = "bananium_wall" - mineral = /obj/item/stack/sheet/mineral/bananium - walltype = /turf/closed/wall/mineral/bananium - smoothing_flags = SMOOTH_BITMASK - smoothing_groups = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_BANANIUM_WALLS) - canSmoothWith = list(SMOOTH_GROUP_BANANIUM_WALLS) - - /obj/structure/falsewall/sandstone name = "sandstone wall" desc = "A wall with sandstone plating. Rough." diff --git a/code/game/objects/structures/fugitive_role_spawners.dm b/code/game/objects/structures/fugitive_role_spawners.dm deleted file mode 100644 index 4f98e919ffc5..000000000000 --- a/code/game/objects/structures/fugitive_role_spawners.dm +++ /dev/null @@ -1,58 +0,0 @@ - - -/obj/effect/mob_spawn/human/fugitive - assignedrole = "Fugitive Hunter" - flavour_text = "" //the flavor text will be the backstory argument called on the antagonist's greet, see hunter.dm for details - roundstart = FALSE - death = FALSE - random = TRUE - show_flavour = FALSE - density = TRUE - var/back_story = "error" - -/obj/effect/mob_spawn/human/fugitive/Initialize(mapload) - . = ..() - notify_ghosts("Hunters are waking up looking for refugees!", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_FUGITIVE) - -/obj/effect/mob_spawn/human/fugitive/spacepol - name = "police pod" - desc = "A small sleeper typically used to put people to sleep for briefing on the mission." - mob_name = "a spacepol officer" - flavour_text = "Justice has arrived. I am a member of the Spacepol!" - back_story = "space cop" - outfit = /datum/outfit/spacepol - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper" - -/obj/effect/mob_spawn/human/fugitive/russian - name = "russian pod" - flavour_text = "Ay blyat. I am a space-russian smuggler! We were mid-flight when our cargo was beamed off our ship!" - back_story = "russian" - desc = "A small sleeper typically used to make long distance travel a bit more bearable." - mob_name = "russian" - outfit = /datum/outfit/frontier/hunter - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper" - -/obj/effect/mob_spawn/human/fugitive/bounty - name = "bounty hunter pod" - flavour_text = "We got a new bounty on some fugitives, dead or alive." - back_story = "bounty hunters" - desc = "A small sleeper typically used to make long distance travel a bit more bearable." - mob_name = "bounty hunter" - icon = 'icons/obj/machines/sleeper.dmi' - icon_state = "sleeper" - -/obj/effect/mob_spawn/human/fugitive/bounty/Destroy() - var/obj/structure/fluff/empty_sleeper/S = new(drop_location()) - S.setDir(dir) - return ..() - -/obj/effect/mob_spawn/human/fugitive/bounty/armor - outfit = /datum/outfit/bountyarmor - -/obj/effect/mob_spawn/human/fugitive/bounty/hook - outfit = /datum/outfit/bountyhook - -/obj/effect/mob_spawn/human/fugitive/bounty/synth - outfit = /datum/outfit/bountysynth diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 25822d69ff00..6463282eb6df 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -364,7 +364,7 @@ add_fingerprint(user) if(istype(W, /obj/item/melee/cultblade/dagger) && iscultist(user)) //Cultists can demolish cult girders instantly with their tomes user.visible_message("[user] strikes [src] with [W]!", "You demolish [src].") - new /obj/item/stack/sheet/runed_metal(drop_location(), 1) + new /obj/item/stack/sheet/mineral/hidden/hellstone(drop_location(), 1) qdel(src) else if(W.tool_behaviour == TOOL_WELDER) @@ -374,19 +374,19 @@ to_chat(user, "You start slicing apart the girder...") if(W.use_tool(src, user, 40, volume=50)) to_chat(user, "You slice apart the girder.") - var/obj/item/stack/sheet/runed_metal/R = new(drop_location(), 1) + var/obj/item/stack/sheet/mineral/hidden/hellstone/R = new(drop_location(), 1) transfer_fingerprints_to(R) qdel(src) else if(istype(W, /obj/item/pickaxe/drill/jackhammer)) to_chat(user, "Your jackhammer smashes through the girder!") - var/obj/item/stack/sheet/runed_metal/R = new(drop_location(), 2) + var/obj/item/stack/sheet/mineral/hidden/hellstone/R = new(drop_location(), 2) transfer_fingerprints_to(R) W.play_tool_sound(src) qdel(src) - else if(istype(W, /obj/item/stack/sheet/runed_metal)) - var/obj/item/stack/sheet/runed_metal/R = W + else if(istype(W, /obj/item/stack/sheet/mineral/hidden/hellstone)) + var/obj/item/stack/sheet/mineral/hidden/hellstone/R = W if(R.get_amount() < 1) to_chat(user, "You need at least one sheet of runed metal to construct a runed wall!") return 0 @@ -408,7 +408,7 @@ /obj/structure/girder/cult/deconstruct(disassembled = TRUE) if(!(flags_1 & NODECONSTRUCT_1)) - new /obj/item/stack/sheet/runed_metal(drop_location(), 1) + new /obj/item/stack/sheet/mineral/hidden/hellstone(drop_location(), 1) qdel(src) /obj/structure/girder/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) diff --git a/code/game/objects/structures/icemoon/cave_entrance.dm b/code/game/objects/structures/icemoon/cave_entrance.dm index 07ecef04afac..47ac972b1c20 100644 --- a/code/game/objects/structures/icemoon/cave_entrance.dm +++ b/code/game/objects/structures/icemoon/cave_entrance.dm @@ -5,7 +5,6 @@ GLOBAL_LIST_INIT(ore_probability, list( /obj/item/stack/ore/silver = 50, /obj/item/stack/ore/gold = 50, /obj/item/stack/ore/diamond = 25, - /obj/item/stack/ore/bananium = 5, /obj/item/stack/ore/titanium = 75, /obj/item/pickaxe/diamond = 15, /obj/item/borg/upgrade/modkit/cooldown = 5, @@ -258,8 +257,7 @@ GLOBAL_LIST_INIT(ore_probability, list( new /mob/living/simple_animal/hostile/clown/fleshclown(loc) if(prob(25))//you lost new /obj/item/circlegame(loc) - new /obj/item/stack/sheet/mineral/bananium(loc) - new /turf/open/floor/mineral/bananium(loc) + new /obj/item/stack/sheet/mineral/hidden/hellstone(loc) if(2)//basic demonic incursion visible_message("You glimpse an indescribable abyss in the portal. Horrifying monsters appear in a gout of flame.") playsound(loc,'sound/hallucinations/wail.ogg', 200, FALSE, 50, TRUE, TRUE) @@ -312,18 +310,18 @@ GLOBAL_LIST_INIT(ore_probability, list( playsound(loc,'sound/ambience/ambiholy.ogg', 100, FALSE, 50, TRUE, TRUE) if(prob(30)) new /obj/item/reagent_containers/glass/bottle/potion/flight(loc) - new /mob/living/simple_animal/hostile/skeleton/templar(loc) + new /mob/living/simple_animal/hostile/human/skeleton/templar(loc) else new /obj/item/clothing/neck/memento_mori(loc) - new /mob/living/simple_animal/hostile/skeleton(loc) - new /mob/living/simple_animal/hostile/skeleton/templar(loc) + new /mob/living/simple_animal/hostile/human/skeleton(loc) + new /mob/living/simple_animal/hostile/human/skeleton/templar(loc) if(prob(35)) new /obj/item/storage/box/holy_grenades(loc) - new /mob/living/simple_animal/hostile/skeleton/templar(loc) - new /mob/living/simple_animal/hostile/skeleton/templar(loc) + new /mob/living/simple_animal/hostile/human/skeleton/templar(loc) + new /mob/living/simple_animal/hostile/human/skeleton/templar(loc) if(prob(40)) new /obj/item/claymore(loc) - new /mob/living/simple_animal/hostile/skeleton/templar(loc) + new /mob/living/simple_animal/hostile/human/skeleton/templar(loc) if(prob(45)) new /obj/item/gun/ballistic/bow(loc) new /obj/item/storage/bag/quiver(loc) @@ -332,38 +330,38 @@ GLOBAL_LIST_INIT(ore_probability, list( new /obj/item/ammo_casing/caseless/arrow/bronze(loc) new /obj/item/ammo_casing/caseless/arrow/bronze(loc) new /obj/item/ammo_casing/caseless/arrow/bronze(loc) - new /mob/living/simple_animal/hostile/skeleton/templar(loc) - new /mob/living/simple_animal/hostile/skeleton(loc) + new /mob/living/simple_animal/hostile/human/skeleton/templar(loc) + new /mob/living/simple_animal/hostile/human/skeleton(loc) if(prob(30)) new /obj/item/stack/sheet/mineral/wood/fifty(loc) - new /mob/living/simple_animal/hostile/skeleton(loc) - new /mob/living/simple_animal/hostile/skeleton(loc) + new /mob/living/simple_animal/hostile/human/skeleton(loc) + new /mob/living/simple_animal/hostile/human/skeleton(loc) if(prob(35)) new /obj/item/staff/bostaff(loc) - new /mob/living/simple_animal/hostile/skeleton(loc) - new /mob/living/simple_animal/hostile/skeleton(loc) + new /mob/living/simple_animal/hostile/human/skeleton(loc) + new /mob/living/simple_animal/hostile/human/skeleton(loc) if(prob(45)) new /obj/item/disk/design_disk/adv/cleric_mace(loc) - new /mob/living/simple_animal/hostile/skeleton(loc) - new /mob/living/simple_animal/hostile/skeleton(loc) + new /mob/living/simple_animal/hostile/human/skeleton(loc) + new /mob/living/simple_animal/hostile/human/skeleton(loc) if(prob(25)) new /obj/item/shield/riot/roman(loc) - new /mob/living/simple_animal/hostile/skeleton(loc) + new /mob/living/simple_animal/hostile/human/skeleton(loc) if(prob(55)) new /obj/item/clothing/suit/armor/riot/knight/blue(loc) new /obj/item/clothing/head/helmet/knight/blue(loc) - new /mob/living/simple_animal/hostile/skeleton(loc) - new /mob/living/simple_animal/hostile/skeleton(loc) + new /mob/living/simple_animal/hostile/human/skeleton(loc) + new /mob/living/simple_animal/hostile/human/skeleton(loc) if(prob(35)) new /obj/item/disk/design_disk/adv/knight_gear(loc) - new /mob/living/simple_animal/hostile/skeleton(loc) - new /mob/living/simple_animal/hostile/skeleton(loc) + new /mob/living/simple_animal/hostile/human/skeleton(loc) + new /mob/living/simple_animal/hostile/human/skeleton(loc) new /obj/item/instrument/trombone(loc) new /obj/item/stack/sheet/bone(loc) new /obj/item/stack/sheet/bone(loc) new /obj/item/stack/sheet/bone(loc) new /obj/item/stack/sheet/bone(loc) - new /mob/living/simple_animal/hostile/skeleton/templar(loc) + new /mob/living/simple_animal/hostile/human/skeleton/templar(loc) new /turf/open/floor/mineral/silver(loc) if(4)//syndicate incursion. Again, high-quality loot at low chances, this time with excessive levels of danger visible_message("Radio chatter echoes out from the portal. Red-garbed figures step through, weapons raised.") @@ -372,74 +370,74 @@ GLOBAL_LIST_INIT(ore_probability, list( if(prob(35)) if(prob(15)) new /obj/item/clothing/suit/space/hardsuit/syndi/elite(loc) - new /mob/living/simple_animal/hostile/syndicate/ranged/smg/space(loc) + new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space(loc) else if(prob(50)) new /obj/item/clothing/suit/space/hardsuit/syndi(loc) - new /mob/living/simple_animal/hostile/syndicate/ranged/smg/space(loc) + new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space(loc) else new /obj/item/clothing/suit/space/hardsuit/syndi(loc) - new /mob/living/simple_animal/hostile/syndicate/ranged/smg/space(loc) - new /mob/living/simple_animal/hostile/syndicate/ranged/smg/space(loc) + new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space(loc) + new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space(loc) if(prob(25))//the real prize new /obj/effect/spawner/lootdrop/donkpockets(loc) new /obj/effect/spawner/lootdrop/donkpockets(loc) new /obj/effect/spawner/lootdrop/donkpockets(loc) if(prob(35)) new /obj/item/clothing/shoes/magboots/syndie(loc) - new /mob/living/simple_animal/hostile/syndicate/ranged/smg/space(loc) + new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space(loc) if(prob(25)) new /obj/item/gun/ballistic/automatic/pistol/suppressed(loc) new /obj/item/ammo_box/magazine/ - new /mob/living/simple_animal/hostile/syndicate/melee/sword(loc) + new /mob/living/simple_animal/hostile/human/syndicate/melee/sword(loc) if(prob(25)) new /obj/item/gun/ballistic/automatic/pistol/tec9(loc) new /obj/item/ammo_box/magazine/tec9(loc) new /obj/item/ammo_box/magazine/tec9(loc) - new /mob/living/simple_animal/hostile/syndicate/melee/sword(loc) + new /mob/living/simple_animal/hostile/human/syndicate/melee/sword(loc) if(prob(35)) new /obj/item/clothing/gloves/rapid(loc) - new /mob/living/simple_animal/hostile/syndicate/melee/sword/space(loc) - new /mob/living/simple_animal/hostile/syndicate/ranged/smg/space(loc) + new /mob/living/simple_animal/hostile/human/syndicate/melee/sword/space(loc) + new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space(loc) if(prob(35)) new /obj/item/wrench/combat(loc) new /obj/item/storage/toolbox/syndicate(loc) - new /mob/living/simple_animal/hostile/syndicate/melee/sword/space(loc) + new /mob/living/simple_animal/hostile/human/syndicate/melee/sword/space(loc) if(prob(35)) new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(loc) if(prob(35)) new /obj/item/borg/upgrade/transform/assault(loc) - new /mob/living/simple_animal/hostile/syndicate/ranged/smg(loc) + new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg(loc) if(prob(25)) - new /mob/living/simple_animal/hostile/syndicate/ranged/smg(loc) - new /mob/living/simple_animal/hostile/syndicate/ranged/smg/space(loc) + new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg(loc) + new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space(loc) if(prob(25)) - new /mob/living/simple_animal/hostile/syndicate/melee/sword/space(loc) - new /mob/living/simple_animal/hostile/syndicate/ranged/smg/space(loc) + new /mob/living/simple_animal/hostile/human/syndicate/melee/sword/space(loc) + new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space(loc) if(prob(25)) - new /mob/living/simple_animal/hostile/syndicate/melee/sword(loc) + new /mob/living/simple_animal/hostile/human/syndicate/melee/sword(loc) new /obj/item/storage/backpack/duffelbag/syndie/c4(loc) if(prob(35)) new /obj/item/storage/belt/military(loc) - new /mob/living/simple_animal/hostile/syndicate/ranged/smg(loc) + new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg(loc) if(prob(35)) new /obj/item/kinetic_crusher/syndie_crusher(loc) - new /mob/living/simple_animal/hostile/syndicate/ranged/smg(loc) - new /mob/living/simple_animal/hostile/syndicate/ranged/smg/space(loc) + new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg(loc) + new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space(loc) if(prob(25)) new /obj/item/card/id/syndicate/anyone(loc) if(prob(35)) new /obj/item/clothing/glasses/thermal/syndi(loc) - new /mob/living/simple_animal/hostile/syndicate/melee/sword(loc) + new /mob/living/simple_animal/hostile/human/syndicate/melee/sword(loc) if(prob(35)) new /obj/item/reagent_containers/hypospray(loc) - new /mob/living/simple_animal/hostile/syndicate/ranged/shotgun(loc) - new /mob/living/simple_animal/hostile/syndicate/melee/sword(loc) + new /mob/living/simple_animal/hostile/human/syndicate/ranged/shotgun(loc) + new /mob/living/simple_animal/hostile/human/syndicate/melee/sword(loc) if(prob(25)) new /obj/item/card/emag(loc) - new /mob/living/simple_animal/hostile/syndicate/melee/sword(loc) - new /mob/living/simple_animal/hostile/syndicate/ranged/smg/space(loc) - new /mob/living/simple_animal/hostile/syndicate/melee/sword/space(loc) + new /mob/living/simple_animal/hostile/human/syndicate/melee/sword(loc) + new /mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space(loc) + new /mob/living/simple_animal/hostile/human/syndicate/melee/sword/space(loc) new /turf/open/floor/mineral/plastitanium/red(loc) if(5)//;HELP BLOB IN MEDICAL visible_message("You hear a robotic voice saying something about a \"Delta-level biohazard\".") @@ -618,19 +616,19 @@ GLOBAL_LIST_INIT(ore_probability, list( visible_message("You catch a brief glimpse of a vast production complex. One of the assembly lines outputs through the portal!") playsound(loc,'sound/ambience/antag/clockcultalr.ogg', 100, FALSE, 50, TRUE, TRUE) if(prob(45)) - new /obj/item/stack/sheet/mineral/adamantine/ten(loc) - new /obj/item/stack/sheet/mineral/runite/ten(loc) - new /obj/item/stack/sheet/mineral/mythril/ten(loc) + new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc) + new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc) + new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc) new /mob/living/simple_animal/hostile/hivebot(loc) if(prob(35)) - new /obj/item/stack/sheet/mineral/adamantine/ten(loc) - new /obj/item/stack/sheet/mineral/runite/ten(loc) - new /obj/item/stack/sheet/mineral/mythril/ten(loc) + new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc) + new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc) + new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc) new /mob/living/simple_animal/hostile/hivebot(loc) if(prob(25)) - new /obj/item/stack/sheet/mineral/adamantine/ten(loc) - new /obj/item/stack/sheet/mineral/runite/ten(loc) - new /obj/item/stack/sheet/mineral/mythril/ten(loc) + new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc) + new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc) + new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc) new /mob/living/simple_animal/hostile/hivebot/strong(loc) if(prob(35)) new /obj/item/stack/sheet/mineral/silver/twenty(loc) @@ -665,9 +663,9 @@ GLOBAL_LIST_INIT(ore_probability, list( new /obj/item/circuitboard/machine/ore_silo(loc) new /mob/living/simple_animal/hostile/hivebot/mechanic(loc) if(prob(35)) - new /obj/item/stack/sheet/mineral/adamantine/ten(loc) - new /obj/item/stack/sheet/mineral/runite/ten(loc) - new /obj/item/stack/sheet/mineral/mythril/ten(loc) + new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc) + new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc) + new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc) new /mob/living/simple_animal/hostile/hivebot/strong(loc) if(prob(35)) new /obj/item/circuitboard/machine/medipen_refiller(loc) @@ -745,7 +743,6 @@ GLOBAL_LIST_INIT(ore_probability, list( new /obj/item/clothing/suit/space/hardsuit/carp(loc) new /mob/living/simple_animal/hostile/carp(loc) if(prob(45)) - new /obj/item/gun/magic/hook(loc) new /mob/living/simple_animal/hostile/carp(loc) if(prob(45)) new /obj/item/reagent_containers/food/snacks/fishmeat/carp(loc) @@ -838,7 +835,7 @@ GLOBAL_LIST_INIT(ore_probability, list( new /obj/item/bedsheet/cult(loc) new /mob/living/simple_animal/hostile/construct/wraith/hostile(loc) if(prob(50)) - new /obj/item/stack/sheet/runed_metal/ten(loc) + new /obj/item/stack/sheet/mineral/hidden/hellstone/ten(loc) if(prob(35)) new /obj/item/sharpener/cult(loc) new /mob/living/simple_animal/hostile/construct/artificer/hostile(loc) @@ -979,46 +976,46 @@ GLOBAL_LIST_INIT(ore_probability, list( playsound(loc,'sound/misc/bloblarm.ogg', 120, FALSE, 50, TRUE, TRUE) if(prob(35)) new /obj/item/storage/box/rndboards(loc) - new /mob/living/simple_animal/hostile/zombie(loc) + new /mob/living/simple_animal/hostile/human/zombie(loc) if(prob(35)) new /obj/item/storage/box/stockparts/deluxe(loc) - new /mob/living/simple_animal/hostile/zombie(loc) - new /mob/living/simple_animal/hostile/zombie(loc) + new /mob/living/simple_animal/hostile/human/zombie(loc) + new /mob/living/simple_animal/hostile/human/zombie(loc) if(prob(15)) new /obj/effect/spawner/lootdrop/stockparts(loc) - new /mob/living/simple_animal/hostile/zombie(loc) + new /mob/living/simple_animal/hostile/human/zombie(loc) if(prob(15)) new /obj/effect/spawner/lootdrop/stockparts(loc) - new /mob/living/simple_animal/hostile/zombie(loc) + new /mob/living/simple_animal/hostile/human/zombie(loc) if(prob(15)) new /obj/effect/spawner/lootdrop/stockparts(loc) - new /mob/living/simple_animal/hostile/zombie(loc) + new /mob/living/simple_animal/hostile/human/zombie(loc) if(prob(15)) new /obj/effect/spawner/lootdrop/stockparts(loc) - new /mob/living/simple_animal/hostile/zombie(loc) + new /mob/living/simple_animal/hostile/human/zombie(loc) if(prob(30)) new /obj/item/circuitboard/machine/rdserver(loc) - new /mob/living/simple_animal/hostile/zombie(loc) + new /mob/living/simple_animal/hostile/human/zombie(loc) if(prob(35)) new /obj/item/research_notes/loot/big(loc) - new /mob/living/simple_animal/hostile/zombie(loc) + new /mob/living/simple_animal/hostile/human/zombie(loc) else new /obj/item/research_notes/loot/medium(loc) if(prob(35)) new /obj/item/research_notes/loot/medium(loc) - new /mob/living/simple_animal/hostile/zombie(loc) + new /mob/living/simple_animal/hostile/human/zombie(loc) else new /obj/item/research_notes/loot/small(loc) if(prob(35)) new /obj/item/pneumatic_cannon(loc) - new /mob/living/simple_animal/hostile/zombie(loc) + new /mob/living/simple_animal/hostile/human/zombie(loc) if(prob(45)) new /obj/item/research_notes/loot/medium(loc) - new /mob/living/simple_animal/hostile/zombie(loc) + new /mob/living/simple_animal/hostile/human/zombie(loc) else new /obj/item/research_notes/loot/small(loc) new/turf/open/floor/mineral/titanium/purple(loc) - new /mob/living/simple_animal/hostile/zombie(loc) + new /mob/living/simple_animal/hostile/human/zombie(loc) if(22)//Silverback's locker room visible_message("You catch a glimpse of verdant green. Smells like a locker room.") playsound(loc,'sound/creatures/gorilla.ogg', 75, FALSE, 50, TRUE, TRUE) @@ -1047,7 +1044,6 @@ GLOBAL_LIST_INIT(ore_probability, list( if(prob(45)) new /obj/item/dnainjector/dwarf(loc) if(prob(35)) - new /obj/item/dnainjector/firebreath(loc) new /mob/living/simple_animal/hostile/gorilla(loc) if(prob(35)) new /mob/living/simple_animal/hostile/gorilla(loc) diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index d863b693604f..6512a0683947 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -64,7 +64,7 @@ /obj/structure/kitchenspike/attack_hand(mob/user) if(VIABLE_MOB_CHECK(user.pulling) && user.a_intent == INTENT_GRAB && !has_buckled_mobs()) var/mob/living/L = user.pulling - if(do_mob(user, src, 120)) + if(do_after(user, 12 SECONDS, src)) if(has_buckled_mobs()) //to prevent spam/queing up attacks return if(L.buckled) diff --git a/code/game/objects/structures/loom.dm b/code/game/objects/structures/loom.dm index 28ff5a8de732..e2c3b8909913 100644 --- a/code/game/objects/structures/loom.dm +++ b/code/game/objects/structures/loom.dm @@ -31,11 +31,9 @@ user.show_message("You need at least [FABRIC_PER_SHEET] units of fabric before using this.", MSG_VISUAL) return FALSE user.show_message("You start weaving \the [W.name] through the loom..", MSG_VISUAL) - if(W.use_tool(src, user, W.pull_effort)) - if(W.amount >= FABRIC_PER_SHEET) - new W.loom_result(drop_location()) - W.use(FABRIC_PER_SHEET) - user.show_message("You weave \the [W.name] into a workable fabric.", MSG_VISUAL) + while(W.use_tool(src, user, W.pull_effort) && W.use(FABRIC_PER_SHEET)) + new W.loom_result(drop_location()) + user.show_message("You weave \the [W.name] into a workable fabric.", MSG_VISUAL) return TRUE #undef FABRIC_PER_SHEET diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index fa964a55619b..ffd4e021086a 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -336,7 +336,7 @@ if((user.a_intent != INTENT_HARM) && istype(I, /obj/item/paper) && (obj_integrity < max_integrity)) user.visible_message("[user] starts to patch the holes in [src].", "You start patching some of the holes in [src]!") - if(do_after(user, 20, TRUE, src)) + if(do_after(user, 20, src)) obj_integrity = min(obj_integrity+4,max_integrity) qdel(I) user.visible_message("[user] patches some of the holes in [src].", "You patch some of the holes in [src]!") diff --git a/code/game/objects/structures/spawner.dm b/code/game/objects/structures/spawner.dm index 9773221f0c22..d44606a1a57b 100644 --- a/code/game/objects/structures/spawner.dm +++ b/code/game/objects/structures/spawner.dm @@ -5,7 +5,7 @@ GLOBAL_LIST_INIT(astroloot, list( /obj/item/stack/ore/silver = 50, /obj/item/stack/ore/gold = 50, /obj/item/stack/ore/diamond = 25, - /obj/item/stack/ore/bananium = 5, + /obj/item/stack/ore/hellstone = 5, /obj/item/stack/ore/titanium = 75, /obj/item/pickaxe/diamond = 15, /obj/item/borg/upgrade/modkit/cooldown = 5, @@ -59,7 +59,7 @@ GLOBAL_LIST_INIT(astroloot, list( icon = 'icons/obj/device.dmi' icon_state = "syndbeacon" spawn_text = "warps in from" - mob_types = list(/mob/living/simple_animal/hostile/syndicate/ranged) + mob_types = list(/mob/living/simple_animal/hostile/human/syndicate/ranged) faction = list(ROLE_SYNDICATE) /obj/structure/spawner/skeleton @@ -68,7 +68,7 @@ GLOBAL_LIST_INIT(astroloot, list( max_integrity = 150 max_mobs = 15 spawn_time = 150 - mob_types = list(/mob/living/simple_animal/hostile/skeleton) + mob_types = list(/mob/living/simple_animal/hostile/human/skeleton) spawn_text = "climbs out of" faction = list("skeleton") diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index 642c2c2efdd4..9f51ba34476a 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -224,7 +224,7 @@ /obj/structure/statue/bananium max_integrity = 300 - material_drop_type = /obj/item/stack/sheet/mineral/bananium + material_drop_type = /obj/item/stack/sheet/mineral/hidden/hellstone impressiveness = 50 desc = "A bananium statue with a small engraving:'HOOOOOOONK'." var/spam_flag = 0 diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 2257a3c10c3a..27c10f244c37 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -746,7 +746,7 @@ return building = TRUE to_chat(user, "You start assembling [src]...") - if(do_after(user, 50, target = user, progress=TRUE)) + if(do_after(user, 50, target = user)) if(!user.temporarilyRemoveItemFromInventory(src)) return var/obj/structure/R = new construction_type(user.loc) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 377c40d4e7ce..c22858ea591d 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -40,7 +40,7 @@ GM.visible_message("[user] starts to give [GM] a swirlie!", "[user] starts to give you a swirlie...") swirlie = GM var/was_alive = (swirlie.stat != DEAD) - if(do_after(user, 30, 0, target = src)) + if(do_after(user, 30, target = src, timed_action_flags = IGNORE_HELD_ITEM)) GM.visible_message("[user] gives [GM] a swirlie!", "[user] gives you a swirlie!", "You hear a toilet flushing.") if(iscarbon(GM)) var/mob/living/carbon/C = GM diff --git a/code/game/turfs/closed/_closed.dm b/code/game/turfs/closed/_closed.dm index cfede10541d4..4866dbfb3f60 100644 --- a/code/game/turfs/closed/_closed.dm +++ b/code/game/turfs/closed/_closed.dm @@ -86,47 +86,6 @@ smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS) canSmoothWith = list(SMOOTH_GROUP_CLOSED_TURFS) -/turf/closed/indestructible/riveted/supermatter - name = "wall" - desc = "A wall made out of a strange metal. The squares on it pulse in a predictable pattern." - icon = 'icons/turf/walls/bananium_wall.dmi' - icon_state = "bananium_wall-0" - base_icon_state = "bananium_wall" - smoothing_flags = SMOOTH_BITMASK - smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_BANANIUM_WALLS) - canSmoothWith = list(SMOOTH_GROUP_BANANIUM_WALLS) - -/turf/closed/indestructible/riveted/supermatter/Bumped(atom/movable/AM) - if(isliving(AM)) - AM.visible_message("\The [AM] slams into \the [src] inducing a resonance... [AM.p_their()] body starts to glow and burst into flames before flashing into dust!",\ - "You slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"",\ - "You hear an unearthly noise as a wave of heat washes over you.") - else if(isobj(AM) && !iseffect(AM)) - AM.visible_message("\The [AM] smacks into \the [src] and rapidly flashes to ash.", null,\ - "You hear a loud crack as you are washed with a wave of heat.") - else - return - - playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, TRUE) - Consume(AM) - -/turf/closed/indestructible/riveted/supermatter/proc/Consume(atom/movable/AM) - if(isliving(AM)) - var/mob/living/user = AM - if(user.status_flags & GODMODE) - return - message_admins("[src] has consumed [key_name_admin(user)] [ADMIN_JMP(src)].") - investigate_log("has consumed [key_name(user)].", INVESTIGATE_SUPERMATTER) - user.dust(force = TRUE) - else if(isobj(AM)) - if(!iseffect(AM)) - var/suspicion = "" - if(AM.fingerprintslast) - suspicion = "last touched by [AM.fingerprintslast]" - message_admins("[src] has consumed [AM], [suspicion] [ADMIN_JMP(src)].") - investigate_log("has consumed [AM] - [suspicion].", INVESTIGATE_SUPERMATTER) - qdel(AM) - /turf/closed/indestructible/syndicate icon = 'icons/turf/walls/plastitanium_wall.dmi' icon_state = "plastitanium_wall-0" @@ -280,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/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm index ab46afa7e884..370afeaeedf2 100644 --- a/code/game/turfs/closed/minerals.dm +++ b/code/game/turfs/closed/minerals.dm @@ -281,14 +281,13 @@ light_range = 2 light_power = 1 - /turf/closed/mineral/random/snow/underground baseturfs = /turf/open/floor/plating/asteroid/snow/icemoon // abundant ore mineralChance = 10 mineralSpawnChanceList = list( /obj/item/stack/ore/uranium = 10, /obj/item/stack/ore/diamond = 4, /obj/item/stack/ore/gold = 20, /obj/item/stack/ore/titanium = 22, - /obj/item/stack/ore/silver = 24, /obj/item/stack/ore/plasma = 20, /obj/item/stack/ore/iron = 20, /obj/item/stack/ore/bananium = 1, + /obj/item/stack/ore/silver = 24, /obj/item/stack/ore/plasma = 20, /obj/item/stack/ore/iron = 20, /turf/closed/mineral/gibtonite/ice/icemoon = 8, /obj/item/stack/ore/bluespace_crystal = 2) /turf/closed/mineral/random/snow/high_chance @@ -404,11 +403,6 @@ initial_gas_mix = FROZEN_ATMOS defer_change = TRUE -/turf/closed/mineral/bananium - mineralType = /obj/item/stack/ore/bananium - mineralAmt = 3 - scan_state = "rock_Bananium" - /turf/closed/mineral/bscrystal mineralType = /obj/item/stack/ore/bluespace_crystal mineralAmt = 1 @@ -650,10 +644,7 @@ H.mind.adjust_experience(/datum/skill/mining, 100) //yay! /turf/closed/mineral/strong/proc/drop_ores() - if(prob(10)) - new /obj/item/stack/sheet/mineral/mythril(src, 5) - else - new /obj/item/stack/sheet/mineral/adamantine(src, 5) + new /obj/item/stack/sheet/mineral/hidden/hellstone(src, 5) /turf/closed/mineral/strong/acid_melt() return diff --git a/code/game/turfs/closed/wall/mineral_walls.dm b/code/game/turfs/closed/wall/mineral_walls.dm index 720a95afd0e1..89a00d04c142 100644 --- a/code/game/turfs/closed/wall/mineral_walls.dm +++ b/code/game/turfs/closed/wall/mineral_walls.dm @@ -68,24 +68,6 @@ icon_state = "diamond_wall-255" smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS -/turf/closed/wall/mineral/bananium - name = "bananium wall" - desc = "A wall with bananium plating. Honk!" - icon = 'icons/turf/walls/bananium_wall.dmi' - icon_state = "bananium_wall-0" - base_icon_state = "bananium_wall" - sheet_type = /obj/item/stack/sheet/mineral/bananium - smoothing_flags = SMOOTH_BITMASK | SMOOTH_CONNECTORS - smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_BANANIUM_WALLS) - canSmoothWith = list(SMOOTH_GROUP_BANANIUM_WALLS, SMOOTH_GROUP_WALLS,SMOOTH_GROUP_AIRLOCK) - connector_icon = 'icons/turf/connectors/bananium_wall_connector.dmi' - connector_icon_state = "bananium_wall_connector" - no_connector_typecache = list(/turf/closed/wall/mineral/bananium, /obj/structure/falsewall/bananium) - -/turf/closed/wall/mineral_bananium/yesdiag - icon_state = "bananium_wall-255" - smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS - /turf/closed/wall/mineral/sandstone name = "sandstone wall" desc = "A wall with sandstone plating. Rough." diff --git a/code/game/turfs/closed/wall/misc_walls.dm b/code/game/turfs/closed/wall/misc_walls.dm index e6e5c8f0c557..20fcb2cb9f57 100644 --- a/code/game/turfs/closed/wall/misc_walls.dm +++ b/code/game/turfs/closed/wall/misc_walls.dm @@ -6,7 +6,7 @@ base_icon_state = "cult_wall" smoothing_flags = SMOOTH_BITMASK canSmoothWith = null - sheet_type = /obj/item/stack/sheet/runed_metal + sheet_type = /obj/item/stack/sheet/mineral/hidden/hellstone sheet_amount = 1 girder_type = /obj/structure/girder/cult diff --git a/code/game/turfs/open/floor/mineral_floor.dm b/code/game/turfs/open/floor/mineral_floor.dm index 476a69fa468d..5d53a162b087 100644 --- a/code/game/turfs/open/floor/mineral_floor.dm +++ b/code/game/turfs/open/floor/mineral_floor.dm @@ -172,48 +172,6 @@ /turf/open/floor/mineral/plastitanium/red/brig name = "brig floor" -//BANANIUM - -/turf/open/floor/mineral/bananium - name = "bananium floor" - icon_state = "bananium" - floor_tile = /obj/item/stack/tile/mineral/bananium - icons = list("bananium","bananium_dam") - var/spam_flag = 0 - -/turf/open/floor/mineral/bananium/Entered(atom/movable/AM) - .=..() - if(!.) - if(isliving(AM)) - squeak() - -/turf/open/floor/mineral/bananium/attackby(obj/item/W, mob/user, params) - .=..() - if(!.) - honk() - -/turf/open/floor/mineral/bananium/attack_hand(mob/user) - .=..() - if(!.) - honk() - -/turf/open/floor/mineral/bananium/attack_paw(mob/user) - .=..() - if(!.) - honk() - -/turf/open/floor/mineral/bananium/proc/honk() - if(spam_flag < world.time) - playsound(src, 'sound/items/bikehorn.ogg', 50, TRUE) - spam_flag = world.time + 20 - -/turf/open/floor/mineral/bananium/proc/squeak() - if(spam_flag < world.time) - playsound(src, "clownstep", 50, TRUE) - spam_flag = world.time + 10 - -/turf/open/floor/mineral/bananium/airless - initial_gas_mix = AIRLESS_ATMOS //DIAMOND diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm index 99f1d590c05a..eb2132940bd9 100644 --- a/code/game/turfs/open/lava.dm +++ b/code/game/turfs/open/lava.dm @@ -18,6 +18,8 @@ heavyfootstep = FOOTSTEP_LAVA var/particle_emitter = /obj/effect/particle_emitter/lava + /// Whether the lava has been dug with hellstone found successfully + var/is_mined = FALSE /turf/open/lava/Initialize(mapload) . = ..() @@ -100,10 +102,10 @@ /turf/open/lava/TakeTemperature(temp) -/turf/open/lava/attackby(obj/item/C, mob/user, params) +/turf/open/lava/attackby(obj/item/attacking_item, mob/user, params) ..() - if(istype(C, /obj/item/stack/rods/lava)) - var/obj/item/stack/rods/lava/R = C + if(istype(attacking_item, /obj/item/stack/rods/lava)) + var/obj/item/stack/rods/lava/R = attacking_item var/obj/structure/lattice/lava/H = locate(/obj/structure/lattice/lava, src) if(H) to_chat(user, "There is already a lattice here!") @@ -115,6 +117,19 @@ else to_chat(user, "You need one rod to build a heatproof lattice.") return + if(attacking_item.tool_behaviour == TOOL_MINING && (attacking_item.custom_materials[SSmaterials.GetMaterialRef(/datum/material/diamond)])) + if(is_mined) + to_chat(user, span_notice("This has already been cleared out of hellstone...")) + return FALSE + to_chat(user, span_notice("You start parting away [src]...")) + if(attacking_item.use_tool(src, user, 175, volume=30)) + to_chat(user, span_notice("You part away [src].")) + playsound(src, 'sound/effects/break_stone.ogg', 30, TRUE) + if (prob(10)) + new /obj/item/stack/ore/hellstone(src) + is_mined = TRUE + return TRUE + return FALSE /turf/open/lava/proc/is_safe() //if anything matching this typecache is found in the lava, we don't burn things diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 5bb4b25cc1f1..7b147385c556 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -215,7 +215,7 @@ /datum/admins/proc/access_news_network() //MARKER - set category = "Admin.Events" + set category = "Event" set name = "Access Newscaster Network" set desc = "Allows you to view, add and edit news feeds." @@ -700,7 +700,7 @@ ////////////////////////////////////////////////////////////////////////////////////////////////ADMIN HELPER PROCS /datum/admins/proc/spawn_atom(object as text) - set category = "Debug" + set category = "Event.Spawning" set desc = "(atom path) Spawn an atom" set name = "Spawn" @@ -729,9 +729,9 @@ SSblackbox.record_feedback("tally", "admin_verb", 1, "Spawn Atom") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/podspawn_atom(object as text) - set category = "Debug" + set category = "Event.Spawning" set desc = "(atom path) Spawn an atom via supply drop" - set name = "Podspawn" + set name = "Supply drop spawn" if(!check_rights(R_SPAWN)) return @@ -753,7 +753,7 @@ SSblackbox.record_feedback("tally", "admin_verb", 1, "Podspawn Atom") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/spawn_cargo(object as text) - set category = "Debug" + set category = "Event.Spawning" set desc = "(atom path) Spawn a cargo crate" set name = "Spawn Cargo" @@ -1018,3 +1018,14 @@ dat += "Disable footsteps: [SSlag_switch.measures[DISABLE_FOOTSTEPS] ? "On" : "Off"] - trait applies to character
" dat += "" usr << browse(dat.Join(), "window=lag_switch_panel;size=420x480") + +/datum/admins/proc/view_manifest() + set category = "Admin.Game" + set name = "View Manifest" + set desc = "Opens the Manifest UI." + + if(!GLOB.crew_manifest_tgui) + GLOB.crew_manifest_tgui = new /datum/crew_manifest(src) + + if(ismob(usr)) + GLOB.crew_manifest_tgui.ui_interact(usr) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index ef2bfae400e4..f4913b6be1e8 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -81,6 +81,7 @@ GLOBAL_PROTECT(admin_verbs_admin) /client/proc/overmap_datum_token_manager, /datum/admins/proc/open_borgopanel, /client/proc/investigate_show, /*various admintools for investigation. Such as a singulo grief-log*/ + /datum/admins/proc/view_manifest ) GLOBAL_LIST_INIT(admin_verbs_ban, list( @@ -121,7 +122,6 @@ GLOBAL_LIST_INIT(admin_verbs_fun, list( /client/proc/polymorph_all, /client/proc/show_tip, /client/proc/smite, - /client/proc/spawn_ruin, )) GLOBAL_PROTECT(admin_verbs_fun) GLOBAL_LIST_INIT(admin_verbs_spawn, list( @@ -130,7 +130,9 @@ GLOBAL_LIST_INIT(admin_verbs_spawn, list( /datum/admins/proc/spawn_cargo, /datum/admins/proc/spawn_objasmob, /datum/admins/proc/beaker_panel, - /datum/admins/proc/gift + /datum/admins/proc/gift, + /client/proc/spawn_ruin, + /client/proc/spawn_outpost /* Allows admins to spawn a new outpost. */ )) GLOBAL_PROTECT(admin_verbs_spawn) GLOBAL_LIST_INIT(admin_verbs_server, world.AVerbsServer()) @@ -169,10 +171,13 @@ GLOBAL_PROTECT(admin_verbs_debug) /client/proc/cmd_display_del_log, /client/proc/cmd_display_init_log, /client/proc/cmd_display_overlay_log, + /client/proc/cmd_admin_grantfullaccess, + /client/proc/cmd_assume_direct_control, //-errorage + /client/proc/cmd_give_direct_control, /client/proc/getserverlogs, /*for accessing server logs*/ /client/proc/getcurrentlogs, /*for accessing server logs for the current round*/ /client/proc/restart_controller, - /client/proc/enable_debug_verbs, + /client/proc/disable_debug_verbs, /client/proc/callproc, /client/proc/callproc_datum, /client/proc/SDQL2_query, @@ -205,12 +210,16 @@ GLOBAL_PROTECT(admin_verbs_debug) #endif /datum/admins/proc/create_or_modify_area, /datum/admins/proc/open_shuttlepanel, /* Opens shuttle manipulator UI */ - /client/proc/spawn_outpost, /* Allows admins to spawn a new outpost. */ /datum/admins/proc/open_borgopanel, /datum/admins/proc/overmap_view, /* Opens HTML overmap viewer UI */ /client/proc/toggle_AI_interact, /*toggle admin ability to interact with machines as an AI*/ /client/proc/toggle_cdn, - /client/proc/check_timer_sources + /client/proc/check_timer_sources, + /client/proc/air_status, //Air things + /client/proc/air_status_loc, //More air things + /client/proc/manipulate_organs, + /client/proc/set_server_fps, //allows you to set the ticklag. + /client/proc/start_singlo, ) GLOBAL_LIST_INIT(admin_verbs_possess, list(/proc/possess, /proc/release)) GLOBAL_PROTECT(admin_verbs_possess) @@ -269,10 +278,9 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list( /client/proc/Debug2, /client/proc/reload_admins, /client/proc/cmd_debug_make_powernets, - /client/proc/startSinglo, /client/proc/cmd_debug_mob_lists, /client/proc/cmd_debug_del_all, - /client/proc/enable_debug_verbs, + /client/proc/disable_debug_verbs, /proc/possess, /proc/release, /client/proc/reload_admins, @@ -305,7 +313,7 @@ GLOBAL_PROTECT(admin_verbs_hideable) if(rights & R_SERVER) add_verb(src, GLOB.admin_verbs_server) if(rights & R_DEBUG) - add_verb(src, GLOB.admin_verbs_debug) + add_verb(src, list(GLOB.admin_verbs_debug, GLOB.admin_verbs_debug_extra)) if(rights & R_POSSESS) add_verb(src, GLOB.admin_verbs_possess) if(rights & R_PERMISSIONS) @@ -338,7 +346,7 @@ GLOBAL_PROTECT(admin_verbs_hideable) /client/proc/play_web_sound, GLOB.admin_verbs_spawn, /*Debug verbs added by "show debug verbs"*/ - GLOB.admin_verbs_debug_mapping, + GLOB.admin_verbs_debug_extra, /client/proc/disable_debug_verbs, /client/proc/readmin )) @@ -505,7 +513,7 @@ GLOBAL_PROTECT(admin_verbs_hideable) SSblackbox.record_feedback("tally", "admin_verb", 1, "Stealth Mode") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/drop_bomb() - set category = "Fun" + set category = "Event.Fun" set name = "Drop Bomb" set desc = "Cause an explosion of varying strength at your location." @@ -547,7 +555,7 @@ GLOBAL_PROTECT(admin_verbs_hideable) SSblackbox.record_feedback("tally", "admin_verb", 1, "Drop Bomb") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/drop_dynex_bomb() - set category = "Fun" + set category = "Event.Fun" set name = "Drop DynEx Bomb" set desc = "Cause an explosion of varying strength at your location." @@ -594,7 +602,7 @@ GLOBAL_PROTECT(admin_verbs_hideable) message_admins("[key_name_admin(usr)] has modified Dynamic Explosion Scale: [ex_scale]") /client/proc/give_spell(mob/T in GLOB.mob_list) - set category = "Fun" + set category = "Event.Fun" set name = "Give Spell" set desc = "Gives a spell to a mob." @@ -618,7 +626,7 @@ GLOBAL_PROTECT(admin_verbs_hideable) message_admins("Spells given to mindless mobs will not be transferred in mindswap or cloning!") /client/proc/remove_spell(mob/T in GLOB.mob_list) - set category = "Fun" + set category = "Event.Fun" set name = "Remove Spell" set desc = "Remove a spell from the selected mob." @@ -631,7 +639,7 @@ GLOBAL_PROTECT(admin_verbs_hideable) SSblackbox.record_feedback("tally", "admin_verb", 1, "Remove Spell") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/give_disease(mob/living/T in GLOB.mob_living_list) - set category = "Fun" + set category = "Event.Fun" set name = "Give Disease" set desc = "Gives a Disease to a mob." if(!istype(T)) @@ -646,7 +654,7 @@ GLOBAL_PROTECT(admin_verbs_hideable) message_admins("[key_name_admin(usr)] gave [key_name_admin(T)] the disease [D].") /client/proc/object_say(obj/O in world) - set category = "Admin.Events" + set category = "Event" set name = "OSay" set desc = "Makes an object say something." var/message = input(usr, "What do you want the message to be?", "Make Sound") as text | null @@ -656,9 +664,10 @@ GLOBAL_PROTECT(admin_verbs_hideable) log_admin("[key_name(usr)] made [O] at [AREACOORD(O)] say \"[message]\"") message_admins("[key_name_admin(usr)] made [O] at [AREACOORD(O)]. say \"[message]\"") SSblackbox.record_feedback("tally", "admin_verb", 1, "Object Say") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + /client/proc/togglebuildmodeself() set name = "Toggle Build Mode Self" - set category = "Admin.Events" + set category = "Event" if (!(holder.rank.rights & R_BUILD)) return if(src.mob) diff --git a/code/modules/admin/verbs/anonymousnames.dm b/code/modules/admin/verbs/anonymousnames.dm index 62c48149af52..c880a74ba6f6 100644 --- a/code/modules/admin/verbs/anonymousnames.dm +++ b/code/modules/admin/verbs/anonymousnames.dm @@ -1,5 +1,5 @@ /client/proc/anon_names() - set category = "Admin.Events" + set category = "Event" set name = "Setup Anonymous Names" diff --git a/code/modules/admin/verbs/atmosdebug.dm b/code/modules/admin/verbs/atmosdebug.dm index 6fc5f8a4c709..56da851fdfd9 100644 --- a/code/modules/admin/verbs/atmosdebug.dm +++ b/code/modules/admin/verbs/atmosdebug.dm @@ -19,7 +19,7 @@ return list(y + 1 - min(bounds[2], bounds[4]), -(x - 1 - max(bounds[1], bounds[3]))) /client/proc/check_atmos() - set category = "Mapping" + set category = "Debug.Mapping" set name = "Check Atmospherics Piping" if(!check_rights_for(src, R_DEBUG)) to_chat(src, "Only administrators may use this command.", confidential = TRUE) @@ -54,7 +54,7 @@ return results /client/proc/check_wiring() - set category = "Mapping" + set category = "Debug.Mapping" set name = "Check Power" if(!check_rights_for(src, R_DEBUG)) to_chat(src, "Only administrators may use this command.", confidential = TRUE) diff --git a/code/modules/admin/verbs/beakerpanel.dm b/code/modules/admin/verbs/beakerpanel.dm index 1f523c9e4627..3ba2a51b2fe8 100644 --- a/code/modules/admin/verbs/beakerpanel.dm +++ b/code/modules/admin/verbs/beakerpanel.dm @@ -61,7 +61,7 @@ return container /datum/admins/proc/beaker_panel() - set category = "Admin.Events" + set category = "Event.Spawning" set name = "Spawn reagent container" if(!check_rights()) return diff --git a/code/modules/admin/verbs/cinematic.dm b/code/modules/admin/verbs/cinematic.dm index 722440e11b93..a8549c635966 100644 --- a/code/modules/admin/verbs/cinematic.dm +++ b/code/modules/admin/verbs/cinematic.dm @@ -1,6 +1,6 @@ /client/proc/cinematic() - set name = "cinematic" - set category = "Fun" + set name = "Cinematic" + set category = "Event.Fun" set desc = "Shows a cinematic." // Intended for testing but I thought it might be nice for events on the rare occasion Feel free to comment it out if it's not wanted. set hidden = TRUE if(!SSticker) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 19ac8a0514d3..ae039c216120 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -26,7 +26,7 @@ Because if you select a player mob as owner it tries to do the proc for But you can call procs that are of type /mob/living/carbon/human/proc/ for that player. */ -/client/proc/Cell() +/client/proc/air_status_loc() set category = "Debug" set name = "Air Status in Location" if(!mob) @@ -38,7 +38,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that SSblackbox.record_feedback("tally", "admin_verb", 1, "Air Status In Location") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_robotize(mob/M in GLOB.mob_list) - set category = "Fun" + set category = "Event.Fun" set name = "Make Robot" if(!SSticker.HasRoundStarted()) @@ -53,7 +53,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that alert("Invalid mob") /client/proc/cmd_admin_blobize(mob/M in GLOB.mob_list) - set category = "Fun" + set category = "Event.Fun" set name = "Make Blob" if(!SSticker.HasRoundStarted()) @@ -68,7 +68,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that /client/proc/cmd_admin_animalize(mob/M in GLOB.mob_list) - set category = "Fun" + set category = "Event.Fun" set name = "Make Simple Animal" if(!SSticker.HasRoundStarted()) @@ -88,7 +88,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that /client/proc/makepAI(turf/T in GLOB.mob_list) - set category = "Fun" + set category = "Event.Fun" set name = "Make pAI" set desc = "Specify a location to spawn a pAI device, then specify a key to play that pAI" @@ -121,7 +121,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that SSblackbox.record_feedback("tally", "admin_verb", 1, "Make pAI") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_alienize(mob/M in GLOB.mob_list) - set category = "Fun" + set category = "Event.Fun" set name = "Make Alien" if(!SSticker.HasRoundStarted()) @@ -136,7 +136,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that alert("Invalid mob") /client/proc/cmd_admin_slimeize(mob/M in GLOB.mob_list) - set category = "Fun" + set category = "Event.Fun" set name = "Make slime" if(!SSticker.HasRoundStarted()) @@ -228,7 +228,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that message_admins("[key_name_admin(usr)] has granted [M.key] full access.") /client/proc/cmd_assume_direct_control(mob/M in GLOB.mob_list) - set category = "Admin.Game" + set category = "Debug" set name = "Assume direct control" set desc = "Direct intervention" @@ -249,7 +249,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that SSblackbox.record_feedback("tally", "admin_verb", 1, "Assume Direct Control") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_give_direct_control(mob/M in GLOB.mob_list) - set category = "Admin.Game" + set category = "Debug" set name = "Give direct control" if(!M) @@ -275,7 +275,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that SSblackbox.record_feedback("tally", "admin_verb", 1, "Give Direct Control") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_test_atmos_controllers() - set category = "Mapping" + set category = "Debug.Mapping" set name = "Test Atmos Monitoring Consoles" var/list/dat = list() @@ -311,7 +311,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that popup.open() /client/proc/cmd_admin_areatest() - set category = "Mapping" + set category = "Debug.Mapping" set name = "Test Areas" var/list/dat = list() @@ -465,12 +465,12 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that /client/proc/cmd_admin_areatest_station() - set category = "Mapping" + set category = "Debug.Mapping" set name = "Test Areas (STATION Z)" cmd_admin_areatest(TRUE) /client/proc/cmd_admin_areatest_all() - set category = "Mapping" + set category = "Debug.Mapping" set name = "Test Areas (ALL)" cmd_admin_areatest(FALSE) @@ -529,8 +529,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that return dresscode -/client/proc/startSinglo() - +/client/proc/start_singlo() set category = "Debug" set name = "Start Singularity" set desc = "Sets up the singularity and all machines to get power flowing through the station" @@ -692,11 +691,11 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that to_chat(usr, "[template.description]", confidential = TRUE) /client/proc/fucky_wucky() - set category = "Debug" + set category = "Event.Fun" set name = "Fucky Wucky" set desc = "Inform the players that the code monkeys at our headquarters are working very hard to fix this." - if(!check_rights(R_DEBUG)) + if(!check_rights(R_FUN)) return remove_verb(/client/proc/fucky_wucky) message_admins("[key_name_admin(src)] did a fucky wucky.") @@ -750,7 +749,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that log_admin("[key_name(src)] pumped a random event.") /client/proc/start_line_profiling() - set category = "Profile" + set category = "Debug.Profile" set name = "Start Line Profiling" set desc = "Starts tracking line by line profiling for code lines that support it" @@ -761,7 +760,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that log_admin("[key_name(src)] started line by line profiling.") /client/proc/stop_line_profiling() - set category = "Profile" + set category = "Debug.Profile" set name = "Stops Line Profiling" set desc = "Stops tracking line by line profiling for code lines that support it" @@ -772,7 +771,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that log_admin("[key_name(src)] stopped line by line profiling.") /client/proc/show_line_profiling() - set category = "Profile" + set category = "Debug.Profile" set name = "Show Line Profiling" set desc = "Shows tracked profiling info from code lines that support it" diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index 305cce363c8d..6d8bac8adcfc 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -19,42 +19,32 @@ //- Identify how hard it is to break into the area and where the weak points are //- Check if the area has too much empty space. If so, make it smaller and replace the rest with maintenance tunnels. -GLOBAL_LIST_INIT(admin_verbs_debug_mapping, list( +GLOBAL_LIST_INIT(admin_verbs_debug_extra, list( /client/proc/camera_view, //-errorage - /client/proc/sec_camera_report, //-errorage - /client/proc/intercom_view, //-errorage - /client/proc/air_status, //Air things - /client/proc/Cell, //More air things /client/proc/check_atmos, /client/proc/check_wiring, - /client/proc/count_objects_on_z_level, - /client/proc/count_objects_all, - /client/proc/cmd_assume_direct_control, //-errorage - /client/proc/cmd_give_direct_control, - /client/proc/startSinglo, - /client/proc/set_server_fps, //allows you to set the ticklag. - /client/proc/cmd_admin_grantfullaccess, /client/proc/cmd_admin_areatest_all, /client/proc/cmd_admin_areatest_station, - #ifdef TESTING - /client/proc/see_dirty_varedits, - #endif /client/proc/cmd_admin_test_atmos_controllers, - /client/proc/cmd_admin_rejuvenate, - /datum/admins/proc/show_traitor_panel, - /client/proc/disable_communication, /client/proc/cmd_show_at_list, /client/proc/cmd_show_at_markers, - /client/proc/manipulate_organs, - /client/proc/start_line_profiling, - /client/proc/stop_line_profiling, - /client/proc/show_line_profiling, + /client/proc/count_objects_all, + /client/proc/count_objects_on_z_level, /client/proc/create_mapping_job_icons, /client/proc/debug_z_levels, + /client/proc/disable_communication, + /client/proc/export_map, + /client/proc/intercom_view, //-errorage /client/proc/map_zones_info, - /client/proc/export_map + /client/proc/sec_camera_report, //-errorage + #ifdef TESTING + /client/proc/see_dirty_varedits, + #endif + /client/proc/show_line_profiling, + /client/proc/start_line_profiling, + /client/proc/stop_line_profiling, )) -GLOBAL_PROTECT(admin_verbs_debug_mapping) +GLOBAL_PROTECT(admin_verbs_debug_extra) /obj/effect/debugging/mapfix_marker name = "map fix marker" @@ -70,7 +60,7 @@ GLOBAL_PROTECT(admin_verbs_debug_mapping) return 0 /client/proc/camera_view() - set category = "Mapping" + set category = "Debug.Mapping" set name = "Camera Range Display" var/on = FALSE @@ -93,7 +83,7 @@ GLOBAL_PROTECT(admin_verbs_debug_mapping) GLOBAL_LIST_EMPTY(dirty_vars) /client/proc/see_dirty_varedits() - set category = "Mapping" + set category = "Debug.Mapping" set name = "Dirty Varedits" var/list/dat = list() @@ -107,7 +97,7 @@ GLOBAL_LIST_EMPTY(dirty_vars) #endif /client/proc/sec_camera_report() - set category = "Mapping" + set category = "Debug.Mapping" set name = "Camera Report" if(!Master) @@ -147,7 +137,7 @@ GLOBAL_LIST_EMPTY(dirty_vars) SSblackbox.record_feedback("tally", "admin_verb", 1, "Show Camera Report") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/intercom_view() - set category = "Mapping" + set category = "Debug.Mapping" set name = "Intercom Range Display" var/static/intercom_range_display_status = FALSE @@ -165,7 +155,7 @@ GLOBAL_LIST_EMPTY(dirty_vars) SSblackbox.record_feedback("tally", "admin_verb", 1, "Show Intercom Range") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_show_at_list() - set category = "Mapping" + set category = "Debug.Mapping" set name = "Show roundstart AT list" set desc = "Displays a list of active turfs coordinates at roundstart" @@ -182,7 +172,7 @@ GLOBAL_LIST_EMPTY(dirty_vars) SSblackbox.record_feedback("tally", "admin_verb", 1, "Show Roundstart Active Turfs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_show_at_markers() - set category = "Mapping" + set category = "Debug.Mapping" set name = "Show roundstart AT markers" set desc = "Places a marker on all active-at-roundstart turfs" @@ -207,18 +197,18 @@ GLOBAL_LIST_EMPTY(dirty_vars) if(!check_rights(R_DEBUG)) return remove_verb(src, /client/proc/enable_debug_verbs) - add_verb(src, list(/client/proc/disable_debug_verbs, GLOB.admin_verbs_debug_mapping)) + add_verb(src, list(/client/proc/disable_debug_verbs, GLOB.admin_verbs_debug_extra)) SSblackbox.record_feedback("tally", "admin_verb", 1, "Enable Debug Verbs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/disable_debug_verbs() set category = "Debug" set name = "Debug verbs - Disable" - remove_verb(src, list(/client/proc/disable_debug_verbs, GLOB.admin_verbs_debug_mapping)) + remove_verb(src, list(/client/proc/disable_debug_verbs, GLOB.admin_verbs_debug_extra)) add_verb(src, /client/proc/enable_debug_verbs) SSblackbox.record_feedback("tally", "admin_verb", 1, "Disable Debug Verbs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/count_objects_on_z_level() - set category = "Mapping" + set category = "Debug.Mapping" set name = "Count Objects On Level" var/level = input("Which z-level?","Level?") as text|null if(!level) @@ -257,7 +247,7 @@ GLOBAL_LIST_EMPTY(dirty_vars) SSblackbox.record_feedback("tally", "admin_verb", 1, "Count Objects Zlevel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/count_objects_all() - set category = "Mapping" + set category = "Debug.Mapping" set name = "Count Objects All" var/type_text = input("Which type path?","") as text|null @@ -280,7 +270,7 @@ GLOBAL_LIST_EMPTY(dirty_vars) //This proc is intended to detect lag problems relating to communication procs GLOBAL_VAR_INIT(say_disabled, FALSE) /client/proc/disable_communication() - set category = "Mapping" + set category = "Debug.Mapping" set name = "Disable all communication verbs" GLOB.say_disabled = !GLOB.say_disabled @@ -292,7 +282,7 @@ GLOBAL_VAR_INIT(say_disabled, FALSE) //This generates the icon states for job starting location landmarks. /client/proc/create_mapping_job_icons() set name = "Generate job landmarks icons" - set category = "Mapping" + set category = "Debug.Mapping" var/icon/final = icon() var/mob/living/carbon/human/dummy/D = new(locate(1,1,1)) //spawn on 1,1,1 so we don't have runtimes when items are deleted D.setDir(SOUTH) @@ -319,7 +309,7 @@ GLOBAL_VAR_INIT(say_disabled, FALSE) /client/proc/debug_z_levels() set name = "Debug Z-Levels" - set category = "Mapping" + set category = "Debug.Mapping" var/list/z_list = SSmapping.z_list var/list/messages = list() @@ -350,7 +340,7 @@ GLOBAL_VAR_INIT(say_disabled, FALSE) /client/proc/map_zones_info() set name = "Map-Zones Info" - set category = "Mapping" + set category = "Debug.Mapping" var/list/dat = list() for(var/datum/map_zone/map_zone as anything in SSmapping.map_zones) @@ -405,7 +395,7 @@ GLOBAL_VAR_INIT(say_disabled, FALSE) #undef MAP_ZONE_INFO /client/proc/export_map() - set category = "Mapping" + set category = "Debug.Mapping" set name = "Export Map" var/z_level = input("Export Which Z-Level?", "Map Exporter", 2) as num diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index dff0335b7e9e..028c9729131a 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -4,7 +4,7 @@ /client/proc/one_click_antag() set name = "Create Antagonist" set desc = "Auto-create an antagonist of your choice" - set category = "Admin.Events" + set category = "Event" if(holder) holder.one_click_antag() diff --git a/code/modules/admin/verbs/outpost.dm b/code/modules/admin/verbs/outpost.dm index 358da03d2844..25632838f45f 100644 --- a/code/modules/admin/verbs/outpost.dm +++ b/code/modules/admin/verbs/outpost.dm @@ -19,7 +19,7 @@ /client/proc/spawn_outpost() set name = "Spawn Outpost" - set category = "Admin.Events" + set category = "Event.Spawning" set desc = "Spawns the selected /datum/overmap/outpost subtype." if(!holder) diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm index 131dd55ad82b..e3e5bc8c1ede 100644 --- a/code/modules/admin/verbs/playsound.dm +++ b/code/modules/admin/verbs/playsound.dm @@ -1,5 +1,5 @@ /client/proc/play_sound(S as sound) - set category = "Fun" + set category = "Event.Fun" set name = "Play Global Sound" if(!check_rights(R_SOUND)) return @@ -40,7 +40,7 @@ /client/proc/play_local_sound(S as sound) - set category = "Fun" + set category = "Event.Fun" set name = "Play Local Sound" if(!check_rights(R_SOUND)) return @@ -52,7 +52,7 @@ SSblackbox.record_feedback("tally", "admin_verb", 1, "Play Local Sound") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/play_direct_mob_sound(S as sound, mob/M) - set category = "Fun" + set category = "Event.Fun" set name = "Play Direct Mob Sound" if(!check_rights(R_SOUND)) return @@ -67,7 +67,7 @@ SSblackbox.record_feedback("tally", "admin_verb", 1, "Play Direct Mob Sound") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/play_web_sound() - set category = "Fun" + set category = "Event.Fun" set name = "Play Internet Sound" if(!check_rights(R_SOUND)) return @@ -151,7 +151,7 @@ SSblackbox.record_feedback("tally", "admin_verb", 1, "Play Internet Sound") /client/proc/set_round_end_sound(S as sound) - set category = "Fun" + set category = "Event.Fun" set name = "Set Round End Sound" if(!check_rights(R_SOUND)) return diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index ae621e17d479..f189fdf6106d 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -20,7 +20,7 @@ SSblackbox.record_feedback("tally", "admin_verb", 1, "Drop Everything") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_subtle_message(mob/M in GLOB.mob_list) - set category = "Admin.Events" + set category = "Event" set name = "Subtle Message" if(!ismob(M)) @@ -46,7 +46,7 @@ SSblackbox.record_feedback("tally", "admin_verb", 1, "Subtle Message") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_headset_message(mob/M in GLOB.mob_list) - set category = "Admin.Events" + set category = "Event" set name = "Headset Message" admin_headset_message(M) @@ -92,7 +92,7 @@ SSblackbox.record_feedback("tally", "admin_verb", 1, "Headset Message") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_world_narrate() - set category = "Admin.Events" + set category = "Event" set name = "Global Narrate" if(!check_rights(R_ADMIN)) @@ -108,7 +108,7 @@ SSblackbox.record_feedback("tally", "admin_verb", 1, "Global Narrate") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_direct_narrate(mob/M) - set category = "Admin.Events" + set category = "Event" set name = "Direct Narrate" if(!check_rights(R_ADMIN)) @@ -133,7 +133,7 @@ SSblackbox.record_feedback("tally", "admin_verb", 1, "Direct Narrate") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_local_narrate(atom/A) - set category = "Admin.Events" + set category = "Event" set name = "Local Narrate" if(!check_rights(R_ADMIN)) @@ -295,7 +295,7 @@ return 1 /client/proc/cmd_admin_add_freeform_ai_law() - set category = "Admin.Events" + set category = "Event" set name = "Add Custom AI law" if(!check_rights(R_ADMIN)) @@ -318,7 +318,7 @@ SSblackbox.record_feedback("tally", "admin_verb", 1, "Add Custom AI Law") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_create_centcom_report() - set category = "Admin.Events" + set category = "Event" set name = "Create Command Report" if(!check_rights(R_FUN)) @@ -347,7 +347,7 @@ SSblackbox.record_feedback("tally", "admin_verb", 1, "Create Command Report") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_change_command_name() - set category = "Admin.Events" + set category = "Event" set name = "Change Command Name" if(!check_rights(R_FUN)) @@ -370,7 +370,7 @@ admin_delete(A) /client/proc/cmd_admin_explosion(atom/O as obj|mob|turf in world) - set category = "Fun" + set category = "Event.Fun" set name = "Explosion" if(!check_rights(R_ADMIN)) @@ -406,7 +406,7 @@ return /client/proc/cmd_admin_emp(atom/O as obj|mob|turf in world) - set category = "Fun" + set category = "Event.Fun" set name = "EM Pulse" if(!check_rights(R_ADMIN)) @@ -431,7 +431,7 @@ return /client/proc/cmd_admin_gib(mob/M in GLOB.mob_list) - set category = "Fun" + set category = "Event.Fun" set name = "Gib" if(!check_rights(R_ADMIN)) @@ -458,7 +458,7 @@ /client/proc/cmd_admin_gib_self() set name = "Gibself" - set category = "Fun" + set category = "Event.Fun" var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No") if(confirm == "Yes") @@ -492,7 +492,7 @@ SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Change View Range", "[view]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/admin_initiate_jump() - set category = "Admin.Events" + set category = "Event" set name = "Initiate Jump" if(!check_rights(R_ADMIN)) return @@ -510,7 +510,7 @@ message_admins("[key_name_admin(usr)] admin-initiated a bluespace jump.") /client/proc/admin_cancel_jump() - set category = "Admin.Events" + set category = "Event" set name = "Cancel Jump" if(!check_rights(0)) return @@ -528,7 +528,7 @@ message_admins("[key_name_admin(usr)] admin-cancelled a bluespace jump.") /client/proc/everyone_random() - set category = "Fun" + set category = "Event.Fun" set name = "Make Everyone Random" set desc = "Make everyone have a random appearance. You can only use this before rounds!" @@ -576,7 +576,7 @@ /client/proc/admin_change_sec_level() - set category = "Admin.Events" + set category = "Event" set name = "Set Security Level" set desc = "Changes the security level. Announcement only, i.e. setting to Delta won't activate nuke" @@ -593,7 +593,7 @@ /client/proc/toggle_nuke(obj/machinery/nuclearbomb/N in GLOB.nuke_list) set name = "Toggle Nuke" - set category = "Admin.Events" + set category = "Event" set popup_menu = 0 if(!check_rights(R_DEBUG)) return @@ -646,7 +646,7 @@ /client/proc/run_weather() - set category = "Admin.Events" + set category = "Event" set name = "Run Weather" set desc = "Triggers a weather on the z-level you choose." @@ -669,7 +669,7 @@ SSblackbox.record_feedback("tally", "admin_verb", 1, "Run Weather") /client/proc/mass_zombie_infection() - set category = "Fun" + set category = "Event.Fun" set name = "Mass Zombie Infection" set desc = "Infects all humans with a latent organ that will zombify \ them on death." @@ -690,7 +690,7 @@ SSblackbox.record_feedback("tally", "admin_verb", 1, "Mass Zombie Infection") /client/proc/mass_zombie_cure() - set category = "Fun" + set category = "Event.Fun" set name = "Mass Zombie Cure" set desc = "Removes the zombie infection from all humans, returning them to normal." if(!check_rights(R_ADMIN)) @@ -708,7 +708,7 @@ SSblackbox.record_feedback("tally", "admin_verb", 1, "Mass Zombie Cure") /client/proc/polymorph_all() - set category = "Fun" + set category = "Event.Fun" set name = "Polymorph All" set desc = "Applies the effects of the bolt of change to every single mob." @@ -735,8 +735,6 @@ M.audible_message("...wabbajack...wabbajack...") playsound(M.loc, 'sound/magic/staff_change.ogg', 50, TRUE, -1) - wabbajack(M) - message_admins("Mass polymorph started by [who_did_it] is complete.") @@ -819,7 +817,7 @@ /client/proc/spawn_ruin() set name = "Spawn Planet/Ruin" - set category = "Fun" + set category = "Event.Spawning" if(!check_rights(R_ADMIN) || !check_rights(R_SPAWN)) return @@ -880,7 +878,7 @@ /client/proc/smite(mob/living/target as mob) set name = "Smite" - set category = "Fun" + set category = "Event.Fun" if(!check_rights(R_ADMIN) || !check_rights(R_FUN)) return @@ -1068,8 +1066,8 @@ REMOVE_TRAIT(D,chosen_trait,source) /datum/admins/proc/gift(mob/living/carbon/human/target as mob, object as text) - set name = "Gift" - set category = "Fun" + set name = "Gift a mob" + set category = "Event.Spawning" set desc = "Give a mob an item directly." if(!check_rights(R_ADMIN) || !check_rights(R_FUN)) return diff --git a/code/modules/admin/verbs/selectequipment.dm b/code/modules/admin/verbs/selectequipment.dm index 9bc6ab3dcea9..03a560d5e712 100644 --- a/code/modules/admin/verbs/selectequipment.dm +++ b/code/modules/admin/verbs/selectequipment.dm @@ -1,5 +1,5 @@ /client/proc/cmd_select_equipment(mob/target in GLOB.mob_list) - set category = "Admin.Events" + set category = "Event" set name = "Select equipment" diff --git a/code/modules/admin/verbs/shuttlepanel.dm b/code/modules/admin/verbs/shuttlepanel.dm index b4e374f41cb8..bb3bd11b7f42 100644 --- a/code/modules/admin/verbs/shuttlepanel.dm +++ b/code/modules/admin/verbs/shuttlepanel.dm @@ -1,5 +1,5 @@ /datum/admins/proc/open_shuttlepanel() - set category = "Admin.Events" + set category = "Event" set name = "Shuttle Manipulator" set desc = "Opens the shuttle manipulator UI." @@ -8,7 +8,6 @@ SSshuttle.ui_interact(usr) - /obj/docking_port/mobile/proc/admin_fly_shuttle(mob/user) var/list/options = list() diff --git a/code/modules/admin/verbs/spawnobjasmob.dm b/code/modules/admin/verbs/spawnobjasmob.dm index f840516d49f1..e787ecfde664 100644 --- a/code/modules/admin/verbs/spawnobjasmob.dm +++ b/code/modules/admin/verbs/spawnobjasmob.dm @@ -1,7 +1,7 @@ /datum/admins/proc/spawn_objasmob(object as text) - set category = "Debug" - set desc = "(obj path) Spawn object-mob" - set name = "Spawn object-mob" + set category = "Event.Spawning" + set desc = "(obj path) Spawn object-mob from Object" + set name = "Spawn Living Mob" if(!check_rights(R_SPAWN)) return diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm index 5efddfb3cf8c..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) @@ -577,9 +577,11 @@ Congratulations! You are now trained for invasive xenobiology research!"} if(!C.handcuffed) if(C.canBeHandcuffed()) playsound(src, 'sound/weapons/cablecuff.ogg', 30, TRUE, -2) - C.visible_message("[user] begins restraining [C] with [src]!", \ - "[user] begins shaping an energy field around your hands!") - if(do_mob(user, C, time_to_cuff) && C.canBeHandcuffed()) + C.visible_message( + "[user] begins restraining [C] with [src]!", \ + "[user] begins shaping an energy field around your hands!" + ) + if(do_after(user, time_to_cuff, C) && C.canBeHandcuffed()) if(!C.handcuffed) C.set_handcuffed(new /obj/item/restraints/handcuffs/energy/used(C)) C.update_handcuffed() diff --git a/code/modules/antagonists/borer/borer.dm b/code/modules/antagonists/borer/borer.dm index 511bbbec1fd5..92a1e728dc8b 100644 --- a/code/modules/antagonists/borer/borer.dm +++ b/code/modules/antagonists/borer/borer.dm @@ -422,7 +422,7 @@ GLOBAL_VAR_INIT(total_borer_hosts_needed, 3) "[src] tears [H.ears] off of your ear!") //coz, you know, they go in the ear holes to_chat(src, "You slither up [H] and begin probing at their ear canal...") - if(!do_mob(src, H, 30)) + if(!do_after(src, 3 SECONDS, H)) to_chat(src, "As [H] moves away, you are dislodged and fall to the ground.") return diff --git a/code/modules/antagonists/changeling/powers/absorb.dm b/code/modules/antagonists/changeling/powers/absorb.dm index 33e0a8f75d48..a54cdc4cd09c 100644 --- a/code/modules/antagonists/changeling/powers/absorb.dm +++ b/code/modules/antagonists/changeling/powers/absorb.dm @@ -43,7 +43,7 @@ target.take_overall_damage(40) SSblackbox.record_feedback("nested tally", "changeling_powers", 1, list("Absorb DNA", "[i]")) - if(!do_mob(user, target, 150)) + if(!do_after(user, 15 SECONDS, target)) to_chat(user, "Our absorption of [target] has been interrupted!") changeling.isabsorbing = 0 return diff --git a/code/modules/antagonists/changeling/powers/linglink.dm b/code/modules/antagonists/changeling/powers/linglink.dm index a0008dec26de..6036ae1d00f6 100644 --- a/code/modules/antagonists/changeling/powers/linglink.dm +++ b/code/modules/antagonists/changeling/powers/linglink.dm @@ -58,7 +58,7 @@ target.say("[MODE_TOKEN_CHANGELING] AAAAARRRRGGGGGHHHHH!!") to_chat(target, "You can now communicate in the changeling hivemind, say \"[MODE_TOKEN_CHANGELING] message\" to communicate!") SSblackbox.record_feedback("nested tally", "changeling_powers", 1, list("[name]", "[i]")) - if(!do_mob(user, target, 20)) + if(!do_after(user, 2 SECONDS, target)) to_chat(user, "Our link with [target] has ended!") changeling.islinking = 0 target.mind.linglink = 0 @@ -67,7 +67,7 @@ to_chat(user, "We must keep holding on to [target] to sustain the link. ") while(user.pulling && user.grab_state >= GRAB_NECK) target.reagents.add_reagent(/datum/reagent/medicine/salbutamol, 0.5) // So they don't choke to death while you interrogate them - do_mob(user, target, 100, TRUE) + do_after(user, 10 SECONDS, target, TRUE) changeling.islinking = 0 target.mind.linglink = 0 diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index f32c0dcc215b..28a4ae06d16b 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -211,185 +211,6 @@ if(can_drop) new /obj/item/melee/synthetic_arm_blade(get_turf(user)) -/***************************************\ -|***********COMBAT TENTACLES*************| -\***************************************/ - -/datum/action/changeling/weapon/tentacle - name = "Tentacle" - desc = "We ready a tentacle to grab items or victims with. Costs 10 chemicals." - helptext = "We can use it once to retrieve a distant item. If used on living creatures, the effect depends on the intent: \ - Help will simply drag them closer, Disarm will grab whatever they're holding instead of them, Grab will put the victim in our hold after catching it, \ - and Harm will pull it in and stab it if we're also holding a sharp weapon. Cannot be used while in lesser form." - button_icon_state = "tentacle" - chemical_cost = 10 - dna_cost = 2 - req_human = 1 - weapon_type = /obj/item/gun/magic/tentacle - weapon_name_simple = "tentacle" - silent = TRUE - -/obj/item/gun/magic/tentacle - name = "tentacle" - desc = "A fleshy tentacle that can stretch out and grab things or people." - icon = 'icons/obj/changeling_items.dmi' - icon_state = "tentacle" - item_state = "tentacle" - lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi' - righthand_file = 'icons/mob/inhands/antag/changeling_righthand.dmi' - item_flags = NEEDS_PERMIT | ABSTRACT | DROPDEL | NOBLUDGEON - flags_1 = NONE - w_class = WEIGHT_CLASS_HUGE - slot_flags = NONE - ammo_type = /obj/item/ammo_casing/magic/tentacle - fire_sound = 'sound/effects/splat.ogg' - force = 0 - max_charges = 1 - fire_delay = 1 - throwforce = 0 //Just to be on the safe side - throw_range = 0 - throw_speed = 0 - -/obj/item/gun/magic/tentacle/Initialize(mapload, silent) - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CHANGELING_TRAIT) - if(ismob(loc)) - if(!silent) - loc.visible_message("[loc.name]\'s arm starts stretching inhumanly!", "Our arm twists and mutates, transforming it into a tentacle.", "You hear organic matter ripping and tearing!") - else - to_chat(loc, "You prepare to extend a tentacle.") - - -/obj/item/gun/magic/tentacle/shoot_with_empty_chamber(mob/living/user as mob|obj) - to_chat(user, "The [name] is not ready yet.") - -/obj/item/gun/magic/tentacle/process_fire() - . = ..() - if(charges == 0) - qdel(src) - -/obj/item/ammo_casing/magic/tentacle - name = "tentacle" - desc = "A tentacle." - projectile_type = /obj/projectile/tentacle - caliber = "tentacle" - icon_state = "arrow" - firing_effect_type = null - var/obj/item/gun/magic/tentacle/gun //the item that shot it - -/obj/item/ammo_casing/magic/tentacle/Initialize() - gun = loc - . = ..() - -/obj/item/ammo_casing/magic/tentacle/Destroy() - gun = null - return ..() - -/obj/projectile/tentacle - name = "tentacle" - icon_state = "tentacle_end" - pass_flags = PASSTABLE - damage = 0 - damage_type = BRUTE - range = 8 - hitsound = 'sound/weapons/thudswoosh.ogg' - var/chain - var/obj/item/ammo_casing/magic/tentacle/source //the item that shot it - -/obj/projectile/tentacle/Initialize() - source = loc - . = ..() - -/obj/projectile/tentacle/fire(setAngle) - if(firer) - chain = firer.Beam(src, icon_state = "tentacle", emissive = FALSE) - ..() - -/obj/projectile/tentacle/proc/reset_throw(mob/living/carbon/human/H) - if(H.throw_mode) - H.throw_mode_off() //Don't annoy the changeling if he doesn't catch the item - -/obj/projectile/tentacle/proc/tentacle_grab(mob/living/carbon/human/H, mob/living/carbon/C) - if(H.Adjacent(C)) - if(H.get_active_held_item() && !H.get_inactive_held_item()) - H.swap_hand() - if(H.get_active_held_item()) - return - C.grabbedby(H) - C.grippedby(H, instant = TRUE) //instant aggro grab - -/obj/projectile/tentacle/proc/tentacle_stab(mob/living/carbon/human/H, mob/living/carbon/C) - if(H.Adjacent(C)) - for(var/obj/item/I in H.held_items) - if(I.get_sharpness()) - C.visible_message("[H] impales [C] with [H.p_their()] [I.name]!", "[H] impales you with [H.p_their()] [I.name]!") - C.apply_damage(I.force, BRUTE, BODY_ZONE_CHEST) - H.do_item_attack_animation(C, used_item = I) - H.add_mob_blood(C) - playsound(get_turf(H),I.hitsound,75,TRUE) - return - -/obj/projectile/tentacle/on_hit(atom/target, blocked = FALSE) - var/mob/living/carbon/human/H = firer - if(blocked >= 100) - return BULLET_ACT_BLOCK - if(isitem(target)) - var/obj/item/I = target - if(!I.anchored) - to_chat(firer, "You pull [I] towards yourself.") - H.throw_mode_on() - I.throw_at(H, 10, 2) - . = BULLET_ACT_HIT - - else if(isliving(target)) - var/mob/living/L = target - if(!L.anchored && !L.throwing)//avoid double hits - if(iscarbon(L)) - var/mob/living/carbon/C = L - var/firer_intent = INTENT_HARM - var/mob/M = firer - if(istype(M)) - firer_intent = M.a_intent - switch(firer_intent) - if(INTENT_HELP) - C.visible_message("[L] is pulled by [H]'s tentacle!","A tentacle grabs you and pulls you towards [H]!") - C.throw_at(get_step_towards(H,C), 8, 2) - return BULLET_ACT_HIT - - if(INTENT_DISARM) - var/obj/item/I = C.get_active_held_item() - if(I) - if(C.dropItemToGround(I)) - C.visible_message("[I] is yanked off [C]'s hand by [src]!","A tentacle pulls [I] away from you!") - on_hit(I) //grab the item as if you had hit it directly with the tentacle - return BULLET_ACT_HIT - else - to_chat(firer, "You can't seem to pry [I] off [C]'s hands!") - return BULLET_ACT_BLOCK - else - to_chat(firer, "[C] has nothing in hand to disarm!") - return BULLET_ACT_HIT - - if(INTENT_GRAB) - C.visible_message("[L] is grabbed by [H]'s tentacle!","A tentacle grabs you and pulls you towards [H]!") - C.throw_at(get_step_towards(H,C), 8, 2, H, TRUE, TRUE, callback=CALLBACK(src, PROC_REF(tentacle_grab), H, C)) - return BULLET_ACT_HIT - - if(INTENT_HARM) - C.visible_message("[L] is thrown towards [H] by a tentacle!","A tentacle grabs you and throws you towards [H]!") - C.throw_at(get_step_towards(H,C), 8, 2, H, TRUE, TRUE, callback=CALLBACK(src, PROC_REF(tentacle_stab), H, C)) - return BULLET_ACT_HIT - else - L.visible_message("[L] is pulled by [H]'s tentacle!","A tentacle grabs you and pulls you towards [H]!") - L.throw_at(get_step_towards(H,L), 8, 2) - . = BULLET_ACT_HIT - -/obj/projectile/tentacle/Destroy() - qdel(chain) - source = null - return ..() - - /***************************************\ |****************SHIELD*****************| \***************************************/ diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index 003abfd42991..c9232857a547 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -535,7 +535,7 @@ playsound(loc, 'sound/weapons/cablecuff.ogg', 30, TRUE, -2) C.visible_message("[user] begins restraining [C] with dark magic!", \ "[user] begins shaping dark magic shackles around your wrists!") - if(do_mob(user, C, 30)) + if(do_after(user, 3 SECONDS, C)) if(!C.handcuffed) C.set_handcuffed(new /obj/item/restraints/handcuffs/energy/cult/used(C)) C.update_handcuffed() @@ -601,7 +601,7 @@ var/quantity = candidate.amount if(candidate.use(quantity)) uses -- - new /obj/item/stack/sheet/runed_metal(T,quantity) + new /obj/item/stack/sheet/mineral/hidden/hellstone(T,quantity) to_chat(user, "A dark cloud emanates from you hand and swirls around the plasteel, transforming it into runed metal!") SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25)) else if(istype(target,/mob/living/silicon/robot)) @@ -812,7 +812,7 @@ /obj/item/melee/blood_magic/manipulator/attack_self(mob/living/user) if(iscultist(user)) - var/list/options = list("Blood Spear (150)", "Blood Bolt Barrage (300)", "Blood Beam (500)") + var/list/options = list("Blood Spear (150)", "Blood Beam (500)") var/choice = input(user, "Choose a greater blood rite...", "Greater Blood Rites") as null|anything in options if(!choice) to_chat(user, "You decide against conducting a greater blood rite.") @@ -835,18 +835,6 @@ user.visible_message( "A [rite.name] appears at [user]'s feet!", \ "A [rite.name] materializes at your feet.") - if("Blood Bolt Barrage (300)") - if(uses < BLOOD_BARRAGE_COST) - to_chat(user, "You need [BLOOD_BARRAGE_COST] charges to perform this rite.") - else - var/obj/rite = new /obj/item/gun/ballistic/rifle/illestren/enchanted/arcane_barrage/blood() - uses -= BLOOD_BARRAGE_COST - qdel(src) - if(user.put_in_hands(rite)) - to_chat(user, "Your hands glow with power!") - else - to_chat(user, "You need a free hand for this rite!") - qdel(rite) if("Blood Beam (500)") if(uses < BLOOD_BEAM_COST) to_chat(user, "You need [BLOOD_BEAM_COST] charges to perform this rite.") diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm index e7f37d37f4a6..406c51956035 100644 --- a/code/modules/antagonists/cult/cult.dm +++ b/code/modules/antagonists/cult/cult.dm @@ -61,7 +61,7 @@ var/mob/living/current = owner.current add_objectives() if(give_equipment) - equip_cultist(TRUE) + equip_cultist() SSticker.mode.cult += owner // Only add after they've been given objectives current.log_message("has been converted to the cult of Nar'Sie!", LOG_ATTACK, color="#960000") @@ -69,13 +69,11 @@ current.client.images += cult_team.blood_target_image -/datum/antagonist/cult/proc/equip_cultist(metal=TRUE) +/datum/antagonist/cult/proc/equip_cultist() var/mob/living/carbon/H = owner.current if(!istype(H)) return . += cult_give_item(/obj/item/melee/cultblade/dagger, H) - if(metal) - . += cult_give_item(/obj/item/stack/sheet/runed_metal/ten, H) to_chat(owner, "These will help you jumpstart a cult of your own in this sector. Use them well, and remember - you are not the only one.") @@ -163,21 +161,16 @@ /datum/antagonist/cult/get_admin_commands() . = ..() .["Dagger"] = CALLBACK(src, PROC_REF(admin_give_dagger)) - .["Dagger and Metal"] = CALLBACK(src, PROC_REF(admin_give_metal)) - .["Remove Dagger and Metal"] = CALLBACK(src, PROC_REF(admin_take_all)) + .["Metal"] = CALLBACK(src, PROC_REF(admin_take_all)) /datum/antagonist/cult/proc/admin_give_dagger(mob/admin) - if(!equip_cultist(metal=FALSE)) + if(!equip_cultist()) to_chat(admin, "Spawning dagger failed!") -/datum/antagonist/cult/proc/admin_give_metal(mob/admin) - if (!equip_cultist(metal=TRUE)) - to_chat(admin, "Spawning runed metal failed!") - /datum/antagonist/cult/proc/admin_take_all(mob/admin) var/mob/living/current = owner.current for(var/o in current.GetAllContents()) - if(istype(o, /obj/item/melee/cultblade/dagger) || istype(o, /obj/item/stack/sheet/runed_metal)) + if(istype(o, /obj/item/melee/cultblade/dagger)) qdel(o) /datum/antagonist/cult/master diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index 6eed283b02f1..53d17bf325aa 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -703,47 +703,6 @@ L.visible_message("An unseen force pulls the blood spear from [L]'s hands!") spear.throw_at(owner, 10, 2, owner) - -/obj/item/gun/ballistic/rifle/illestren/enchanted/arcane_barrage/blood - name = "blood bolt barrage" - desc = "Blood for blood." - color = "#ff0000" - guns_left = 24 - mag_type = /obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage/blood - fire_sound = 'sound/magic/wand_teleport.ogg' - - -/obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage/blood - ammo_type = /obj/item/ammo_casing/magic/arcane_barrage/blood - -/obj/item/ammo_casing/magic/arcane_barrage/blood - projectile_type = /obj/projectile/magic/arcane_barrage/blood - firing_effect_type = /obj/effect/temp_visual/cult/sparks - -/obj/projectile/magic/arcane_barrage/blood - name = "blood bolt" - icon_state = "mini_leaper" - nondirectional_sprite = TRUE - damage_type = BRUTE - impact_effect_type = /obj/effect/temp_visual/dir_setting/bloodsplatter - -/obj/projectile/magic/arcane_barrage/blood/Bump(atom/target) - var/turf/T = get_turf(target) - playsound(T, 'sound/effects/splat.ogg', 50, TRUE) - if(iscultist(target)) - if(ishuman(target)) - var/mob/living/carbon/human/H = target - if(H.stat != DEAD) - H.reagents.add_reagent(/datum/reagent/fuel/unholywater, 4) - if(isshade(target) || isconstruct(target)) - var/mob/living/simple_animal/M = target - if(M.health+5 < M.maxHealth) - M.adjustHealth(-5) - new /obj/effect/temp_visual/cult/sparks(T) - qdel(src) - else - ..() - /obj/item/blood_beam name = "\improper magical aura" desc = "Sinister looking aura that distorts the flow of reality around it." diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm index 66526d96a34f..60816a90d45d 100644 --- a/code/modules/antagonists/cult/cult_structures.dm +++ b/code/modules/antagonists/cult/cult_structures.dm @@ -5,7 +5,7 @@ light_power = 2 var/cooldowntime = 0 break_sound = 'sound/hallucinations/veryfar_noise.ogg' - debris = list(/obj/item/stack/sheet/runed_metal = 1) + debris = list(/obj/item/stack/sheet/mineral/hidden/hellstone = 1) /obj/structure/destructible/cult/proc/conceal() //for spells that hide cult presence density = FALSE diff --git a/code/modules/antagonists/devil/devil.dm b/code/modules/antagonists/devil/devil.dm index 9b9ba7c4d69d..ace534f94dfa 100644 --- a/code/modules/antagonists/devil/devil.dm +++ b/code/modules/antagonists/devil/devil.dm @@ -24,13 +24,6 @@ GLOBAL_LIST_INIT(lawlorify, list ( OBLIGATION_SAYNAME = "He will always chant his name upon killing someone.", OBLIGATION_ANNOUNCEKILL = "This devil always loudly announces his kills for the world to hear.", OBLIGATION_ANSWERTONAME = "This devil always responds to his truename.", - BANE_SILVER = "Silver seems to gravely injure this devil.", - BANE_SALT = "Throwing salt at this devil will hinder his ability to use infernal powers temporarily.", - BANE_LIGHT = "Bright flashes will disorient the devil, likely causing him to flee.", - BANE_IRON = "Cold iron will slowly injure him, until he can purge it from his system.", - BANE_WHITECLOTHES = "Wearing clean white clothing will help ward off this devil.", - BANE_HARVEST = "Presenting the labors of a harvest will disrupt the devil.", - BANE_TOOLBOX = "That which holds the means of creation also holds the means of the devil's undoing.", BAN_HURTWOMAN = "This devil seems to prefer hunting men.", BAN_CHAPEL = "This devil avoids holy ground.", BAN_HURTPRIEST = "The annointed clergy appear to be immune to his powers.", @@ -62,13 +55,6 @@ GLOBAL_LIST_INIT(lawlorify, list ( BAN_STRIKEUNCONSCIOUS = "You must never strike an unconscious person.", BAN_HURTlizard = "You must never harm a lizardman outside of self defense.", BAN_HURTANIMAL = "You must never harm a non-sentient creature or robot outside of self defense.", - BANE_SILVER = "Silver, in all of its forms shall be your downfall.", - BANE_SALT = "Salt will disrupt your magical abilities.", - BANE_LIGHT = "Blinding lights will prevent you from using offensive powers for a time.", - BANE_IRON = "Cold wrought iron shall act as poison to you.", - BANE_WHITECLOTHES = "Those clad in pristine white garments will strike you true.", - BANE_HARVEST = "The fruits of the harvest shall be your downfall.", - BANE_TOOLBOX = "Toolboxes are bad news for you, for some reason.", BANISH_WATER = "If your corpse is filled with holy water, you will be unable to resurrect.", BANISH_COFFIN = "If your corpse is in a coffin, you will be unable to resurrect.", BANISH_FORMALDYHIDE = "If your corpse is embalmed, you will be unable to resurrect.", @@ -94,7 +80,6 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", show_to_ghosts = TRUE var/obligation var/ban - var/bane var/banish var/truename var/list/datum/mind/soulsOwned = new @@ -171,9 +156,6 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", /proc/randomdevilban() return pick(BAN_HURTWOMAN, BAN_CHAPEL, BAN_HURTPRIEST, BAN_AVOIDWATER, BAN_STRIKEUNCONSCIOUS, BAN_HURTLIZARD, BAN_HURTANIMAL) -/proc/randomdevilbane() - return pick(BANE_SALT, BANE_LIGHT, BANE_IRON, BANE_WHITECLOTHES, BANE_SILVER, BANE_HARVEST, BANE_TOOLBOX) - /proc/randomdevilbanish() return pick(BANISH_WATER, BANISH_COFFIN, BANISH_FORMALDYHIDE, BANISH_RUNES, BANISH_CANDLES, BANISH_DESTRUCTION, BANISH_FUNERAL_GARB) @@ -489,7 +471,6 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", to_chat(owner.current, "However, your infernal form is not without weaknesses.") to_chat(owner.current, "You may not use violence to coerce someone into selling their soul.") to_chat(owner.current, "You may not directly and knowingly physically harm a devil, other than yourself.") - to_chat(owner.current, GLOB.lawlorify[LAW][bane]) to_chat(owner.current, GLOB.lawlorify[LAW][ban]) to_chat(owner.current, GLOB.lawlorify[LAW][obligation]) to_chat(owner.current, GLOB.lawlorify[LAW][banish]) @@ -499,12 +480,11 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", /datum/antagonist/devil/on_gain() truename = randomDevilName() ban = randomdevilban() - bane = randomdevilbane() obligation = randomdevilobligation() banish = randomdevilbanish() GLOB.allDevils[lowertext(truename)] = src - antag_memory += "Your devilic true name is [truename]
[GLOB.lawlorify[LAW][ban]]
You may not use violence to coerce someone into selling their soul.
You may not directly and knowingly physically harm a devil, other than yourself.
[GLOB.lawlorify[LAW][bane]]
[GLOB.lawlorify[LAW][obligation]]
[GLOB.lawlorify[LAW][banish]]
" + antag_memory += "Your devilic true name is [truename]
[GLOB.lawlorify[LAW][ban]]
You may not use violence to coerce someone into selling their soul.
You may not directly and knowingly physically harm a devil, other than yourself.
[GLOB.lawlorify[LAW][obligation]]
[GLOB.lawlorify[LAW][banish]]
" if(issilicon(owner.current)) var/mob/living/silicon/robot_devil = owner.current var/laws = list("You may not use violence to coerce someone into selling their soul.", "You may not directly and knowingly physically harm a devil, other than yourself.", GLOB.lawlorify[LAW][ban], GLOB.lawlorify[LAW][obligation], "Accomplish your objectives at all costs.") @@ -541,7 +521,6 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", parts += "The devil's true name is: [truename]" parts += "The devil's bans were:" parts += "[FOURSPACES][GLOB.lawlorify[LORE][ban]]" - parts += "[FOURSPACES][GLOB.lawlorify[LORE][bane]]" parts += "[FOURSPACES][GLOB.lawlorify[LORE][obligation]]" parts += "[FOURSPACES][GLOB.lawlorify[LORE][banish]]" return parts.Join("
") @@ -556,7 +535,6 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", //A simple super light weight datum for the codex gigas. /datum/fakeDevil var/truename - var/bane var/obligation var/ban var/banish @@ -564,7 +542,6 @@ GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", /datum/fakeDevil/New(name = randomDevilName()) truename = name - bane = randomdevilbane() obligation = randomdevilobligation() ban = randomdevilban() banish = randomdevilbanish() diff --git a/code/modules/antagonists/devil/devil_helpers.dm b/code/modules/antagonists/devil/devil_helpers.dm deleted file mode 100644 index 3be8320a001f..000000000000 --- a/code/modules/antagonists/devil/devil_helpers.dm +++ /dev/null @@ -1,37 +0,0 @@ -/mob/living/proc/check_devil_bane_multiplier(obj/item/weapon, mob/living/attacker) - var/datum/antagonist/devil/devilInfo = mind.has_antag_datum(/datum/antagonist/devil) - switch(devilInfo.bane) - if(BANE_WHITECLOTHES) - if(ishuman(attacker)) - var/mob/living/carbon/human/H = attacker - if(H.w_uniform && istype(H.w_uniform, /obj/item/clothing/under)) - var/obj/item/clothing/under/U = H.w_uniform - var/static/list/whiteness = list ( - /obj/item/clothing/under/color/white = 2, - /obj/item/clothing/under/rank/civilian/bartender = 1, - /obj/item/clothing/under/rank/civilian/chef = 1, - /obj/item/clothing/under/rank/engineering/chief_engineer = 1, - /obj/item/clothing/under/rank/rnd/scientist = 1, - /obj/item/clothing/under/rank/medical/chemist = 1, - /obj/item/clothing/under/rank/medical/chief_medical_officer = 1, - /obj/item/clothing/under/rank/medical/geneticist = 1, - /obj/item/clothing/under/rank/medical/virologist = 1, - /obj/item/clothing/under/rank/medical/doctor/nurse = 1, - /obj/item/clothing/under/rank/medical/doctor = 1, - /obj/item/clothing/under/rank/security/detective = 1, - /obj/item/clothing/under/suit/white = 0.5, - ) - if(U && whiteness[U.type]) - src.visible_message("[src] seems to have been harmed by the purity of [attacker]'s clothes.", "Unsullied white clothing is disrupting your form.") - return whiteness[U.type] + 1 - if(BANE_TOOLBOX) - if(istype(weapon, /obj/item/storage/toolbox)) - src.visible_message("The [weapon] seems unusually robust this time.", "The [weapon] is your unmaking!") - return 2.5 // Will take four hits with a normal toolbox to crit. - if(BANE_HARVEST) - if(istype(weapon, /obj/item/reagent_containers/food/snacks/grown/)) - visible_message("The spirits of the harvest aid in the exorcism.", "The harvest spirits are harming you.") - Paralyze(40) - qdel(weapon) - return 2 - return 1 diff --git a/code/modules/antagonists/devil/true_devil/_true_devil.dm b/code/modules/antagonists/devil/true_devil/_true_devil.dm index 0faab8e003cf..4703f95263f7 100644 --- a/code/modules/antagonists/devil/true_devil/_true_devil.dm +++ b/code/modules/antagonists/devil/true_devil/_true_devil.dm @@ -113,11 +113,6 @@ /mob/living/carbon/true_devil/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null) return 666 -/mob/living/carbon/true_devil/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0) - if(mind && has_bane(BANE_LIGHT)) - mind.disrupt_spells(-500) - return ..() //flashes don't stop devils UNLESS it's their bane. - /mob/living/carbon/true_devil/soundbang_act() return 0 @@ -126,8 +121,7 @@ /mob/living/carbon/true_devil/attacked_by(obj/item/I, mob/living/user, def_zone) - var/weakness = check_weakness(I, user) - apply_damage(I.force * weakness, I.damtype, def_zone) + apply_damage(I.force, I.damtype, def_zone) var/message_verb = "" if(I.attack_verb && I.attack_verb.len) message_verb = "[pick(I.attack_verb)]" @@ -213,8 +207,6 @@ b_loss = 150 if (EXPLODE_LIGHT) b_loss = 30 - if(has_bane(BANE_LIGHT)) - b_loss *=2 adjustBruteLoss(b_loss) return ..() diff --git a/code/modules/antagonists/fugitive/fugitive_outfits.dm b/code/modules/antagonists/fugitive/fugitive_outfits.dm deleted file mode 100644 index df784813df40..000000000000 --- a/code/modules/antagonists/fugitive/fugitive_outfits.dm +++ /dev/null @@ -1,154 +0,0 @@ -/datum/outfit/prisoner - name = "Prison Escapee" - uniform = /obj/item/clothing/under/rank/prisoner - shoes = /obj/item/clothing/shoes/sneakers/orange - r_pocket = /obj/item/kitchen/knife/shiv - -/datum/outfit/prisoner/post_equip(mob/living/carbon/human/H, visualsOnly=FALSE) - if(visualsOnly) - return - H.fully_replace_character_name(null,"NTP #CC-0[rand(111,999)]") //same as the lavaland prisoner transport, but this time they are from CC, or CentCom - -/datum/outfit/yalp_cultist - name = "Cultist of Yalp Elor" - uniform = /obj/item/clothing/under/rank/civilian/chaplain - suit = /obj/item/clothing/suit/chaplainsuit/holidaypriest - gloves = /obj/item/clothing/gloves/color/red - shoes = /obj/item/clothing/shoes/sneakers/black - mask = /obj/item/clothing/mask/gas/tiki_mask/yalp_elor - -/datum/outfit/waldo - name = "Waldo" - uniform = /obj/item/clothing/under/pants/jeans - suit = /obj/item/clothing/suit/striped_sweater - head = /obj/item/clothing/head/beanie/waldo - shoes = /obj/item/clothing/shoes/sneakers/brown - ears = /obj/item/radio/headset - glasses = /obj/item/clothing/glasses/regular/circle - -/datum/outfit/waldo/post_equip(mob/living/carbon/human/H, visualsOnly=FALSE) - if(visualsOnly) - return - H.fully_replace_character_name(null,"Waldo") - H.eye_color = "000" - H.gender = MALE - H.skin_tone = "caucasian3" - H.hairstyle = "Business Hair 3" - H.facial_hairstyle = "Shaved" - H.hair_color = "000" - H.facial_hair_color = H.hair_color - H.update_body() - if(H.mind) - H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null)) - var/list/no_drops = list() - no_drops += H.get_item_by_slot(ITEM_SLOT_FEET) - no_drops += H.get_item_by_slot(ITEM_SLOT_ICLOTHING) - no_drops += H.get_item_by_slot(ITEM_SLOT_OCLOTHING) - no_drops += H.get_item_by_slot(ITEM_SLOT_HEAD) - no_drops += H.get_item_by_slot(ITEM_SLOT_EYES) - for(var/i in no_drops) - var/obj/item/I = i - ADD_TRAIT(I, TRAIT_NODROP, CURSED_ITEM_TRAIT) - -/datum/outfit/synthetic - name = "Factory Error Synth" - uniform = /obj/item/clothing/under/color/white - ears = /obj/item/radio/headset - -/datum/outfit/synthetic/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - var/obj/item/organ/eyes/robotic/glow/eyes = new() - eyes.Insert(src, drop_if_replaced = FALSE) - -/datum/outfit/spacepol - name = "Spacepol Officer" - uniform = /obj/item/clothing/under/rank/security/officer/beatcop - suit = /obj/item/clothing/suit/armor/vest/blueshirt - belt = /obj/item/gun/ballistic/automatic/pistol/candor - head = /obj/item/clothing/head/helmet/police - gloves = /obj/item/clothing/gloves/tackler/combat - shoes = /obj/item/clothing/shoes/jackboots - mask = /obj/item/clothing/mask/gas/sechailer/swat/spacepol - glasses = /obj/item/clothing/glasses/sunglasses - ears = /obj/item/radio/headset - l_pocket = /obj/item/ammo_box/magazine/m45 - r_pocket = /obj/item/restraints/handcuffs - id = /obj/item/card/id - -/datum/outfit/spacepol/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - var/obj/item/card/id/W = H.wear_id - W.assignment = "Police Officer" - W.registered_name = H.real_name - W.update_label() - -/datum/outfit/frontier/hunter - name = "Frontiersman Corpse (Hunter)" - ears = /obj/item/radio/headset - r_hand = /obj/item/gun/ballistic/rifle/illestren - -/datum/outfit/frontier/hunter/pre_equip(mob/living/carbon/human/H) - if(prob(50)) - head = /obj/item/clothing/head/trapper - -/datum/outfit/bountyarmor - name = "Bounty Hunter - Armored" - uniform = /obj/item/clothing/under/rank/prisoner - head = /obj/item/clothing/head/hunter - suit = /obj/item/clothing/suit/space/hunter - gloves = /obj/item/clothing/gloves/tackler/combat - shoes = /obj/item/clothing/shoes/jackboots - mask = /obj/item/clothing/mask/gas/hunter - glasses = /obj/item/clothing/glasses/sunglasses/garb - ears = /obj/item/radio/headset - l_pocket = /obj/item/tank/internals/emergency_oxygen - r_pocket = /obj/item/restraints/handcuffs/cable - id = /obj/item/card/id - r_hand = /obj/item/flamethrower/full/tank - -/datum/outfit/bountyarmor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - var/obj/item/card/id/W = H.wear_id - W.assignment = "Bounty Hunter" - W.registered_name = H.real_name - W.update_label() - -/datum/outfit/bountyhook - name = "Bounty Hunter - Hook" - uniform = /obj/item/clothing/under/rank/prisoner - back = /obj/item/storage/backpack - head = /obj/item/clothing/head/scarecrow_hat - gloves = /obj/item/clothing/gloves/botanic_leather - ears = /obj/item/radio/headset - shoes = /obj/item/clothing/shoes/jackboots - mask = /obj/item/clothing/mask/scarecrow - r_pocket = /obj/item/restraints/handcuffs/cable - id = /obj/item/card/id - r_hand = /obj/item/gun/ballistic/shotgun/doublebarrel/hook - - backpack_contents = list( - /obj/item/ammo_casing/shotgun/incapacitate = 6 - ) - -/datum/outfit/bountyhook/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - var/obj/item/card/id/W = H.wear_id - W.assignment = "Bounty Hunter" - W.registered_name = H.real_name - W.update_label() - -/datum/outfit/bountysynth - name = "Bounty Hunter - Synth" - uniform = /obj/item/clothing/under/rank/prisoner - back = /obj/item/storage/backpack - suit = /obj/item/clothing/suit/armor/riot - shoes = /obj/item/clothing/shoes/jackboots - glasses = /obj/item/clothing/glasses/eyepatch - r_pocket = /obj/item/restraints/handcuffs/cable - ears = /obj/item/radio/headset - id = /obj/item/card/id - r_hand = /obj/item/storage/firstaid/regular diff --git a/code/modules/antagonists/revenant/revenant_abilities.dm b/code/modules/antagonists/revenant/revenant_abilities.dm index b235199ed750..ca568bce6316 100644 --- a/code/modules/antagonists/revenant/revenant_abilities.dm +++ b/code/modules/antagonists/revenant/revenant_abilities.dm @@ -34,7 +34,7 @@ draining = TRUE essence_drained += rand(15, 20) to_chat(src, "You search for the soul of [target].") - if(do_after(src, rand(10, 20), 0, target)) //did they get deleted in that second? + if(do_after(src, rand(10, 20), target, timed_action_flags = IGNORE_HELD_ITEM)) //did they get deleted in that second? if(target.ckey) to_chat(src, "[target.p_their(TRUE)] soul burns with intelligence.") essence_drained += rand(20, 30) @@ -43,7 +43,7 @@ essence_drained += rand(40, 50) else to_chat(src, "[target.p_their(TRUE)] soul is weak and faltering.") - if(do_after(src, rand(15, 20), 0, target)) //did they get deleted NOW? + if(do_after(src, rand(15, 20), target, timed_action_flags = IGNORE_HELD_ITEM)) //did they get deleted NOW? switch(essence_drained) if(1 to 30) to_chat(src, "[target] will not yield much essence. Still, every bit counts.") @@ -53,7 +53,7 @@ to_chat(src, "Such a feast! [target] will yield much essence to you.") if(90 to INFINITY) to_chat(src, "Ah, the perfect soul. [target] will yield massive amounts of essence to you.") - if(do_after(src, rand(15, 25), 0, target)) //how about now + if(do_after(src, rand(15, 25), target, timed_action_flags = IGNORE_HELD_ITEM)) //how about now if(!target.stat) to_chat(src, "[target.p_theyre(TRUE)] now powerful enough to fight off your draining.") to_chat(target, "You feel something tugging across your body before subsiding.") @@ -76,7 +76,7 @@ draining = FALSE return var/datum/beam/B = Beam(target,icon_state="drain_life",time=INFINITY) - if(do_after(src, 46, 0, target)) //As one cannot prove the existance of ghosts, ghosts cannot prove the existance of the target they were draining. + if(do_after(src, 46, target, timed_action_flags = IGNORE_HELD_ITEM)) //As one cannot prove the existence of ghosts, ghosts cannot prove the existence of the target they were draining. change_essence_amount(essence_drained, FALSE, target) if(essence_drained <= 90 && target.stat != DEAD) essence_regen_cap += 5 diff --git a/code/modules/antagonists/survivalist/survivalist.dm b/code/modules/antagonists/survivalist/survivalist.dm index 0e38dc57105d..1fb457eea64b 100644 --- a/code/modules/antagonists/survivalist/survivalist.dm +++ b/code/modules/antagonists/survivalist/survivalist.dm @@ -26,17 +26,3 @@ guns.owner = owner objectives += guns ..() - -/datum/antagonist/survivalist/magic - name = "Amateur Magician" - greet_message = "Grow your newfound talent! Grab as many magical artefacts as possible, by any means necessary. Kill anyone who gets in your way." - -/datum/antagonist/survivalist/magic/greet() - ..() - to_chat(owner, "As a wonderful magician, you should remember that spellbooks don't mean anything if they are used up.") - -/datum/antagonist/survivalist/magic/forge_objectives() - var/datum/objective/steal_five_of_type/summon_magic/magic = new - magic.owner = owner - objectives += magic - ..() diff --git a/code/modules/antagonists/swarmer/swarmer.dm b/code/modules/antagonists/swarmer/swarmer.dm index 6fec09373797..ea6fe83c8a07 100644 --- a/code/modules/antagonists/swarmer/swarmer.dm +++ b/code/modules/antagonists/swarmer/swarmer.dm @@ -456,7 +456,7 @@ to_chat(src, "Attempting to remove this being from our presence.") - if(!do_mob(src, target, 30)) + if(!do_after(src, 3 SECONDS, target)) return var/turf/open/floor/F @@ -491,7 +491,7 @@ D.pixel_x = target.pixel_x D.pixel_y = target.pixel_y D.pixel_z = target.pixel_z - if(do_mob(src, target, 100)) + if(do_after(src, 10 SECONDS, target)) to_chat(src, "Dismantling complete.") var/atom/Tsec = target.drop_location() new /obj/item/stack/sheet/metal(Tsec, 5) @@ -604,7 +604,7 @@ if(resources < 5) to_chat(src, "We do not have the resources for this!") return - if(do_mob(src, src, 10)) + if(do_after(src, 1 SECONDS)) Fabricate(/obj/structure/swarmer/blockade, 5) @@ -633,7 +633,7 @@ if(!isturf(loc)) to_chat(src, "This is not a suitable location for replicating ourselves. We need more room.") return - if(do_mob(src, src, 100)) + if(do_after(src, 10 SECONDS)) var/createtype = SwarmerTypeToCreate() if(createtype && Fabricate(createtype, 50)) playsound(loc,'sound/items/poster_being_created.ogg',50, TRUE, -1) @@ -650,7 +650,7 @@ if(!isturf(loc)) return to_chat(src, "Attempting to repair damage to our body, stand by...") - if(do_mob(src, src, 100)) + if(do_after(src, 10 SECONDS)) adjustHealth(-100) to_chat(src, "We successfully repaired ourselves.") diff --git a/code/modules/antagonists/wizard/equipment/spellbook.dm b/code/modules/antagonists/wizard/equipment/spellbook.dm index 58e397a64d40..69ff4bcfc2f5 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook.dm @@ -106,10 +106,6 @@ name = "Fireball" spell_type = /obj/effect/proc_holder/spell/aimed/fireball -/datum/spellbook_entry/spell_cards - name = "Spell Cards" - spell_type = /obj/effect/proc_holder/spell/aimed/spell_cards - /datum/spellbook_entry/rod_form name = "Rod Form" spell_type = /obj/effect/proc_holder/spell/targeted/rod_form @@ -223,18 +219,6 @@ . = ..() REMOVE_TRAIT(user, TRAIT_TESLA_SHOCKIMMUNE, "lightning_bolt_spell") -/datum/spellbook_entry/infinite_guns - name = "Lesser Summon Guns" - spell_type = /obj/effect/proc_holder/spell/targeted/infinite_guns/gun - cost = 3 - no_coexistance_typecache = /obj/effect/proc_holder/spell/targeted/infinite_guns/arcane_barrage - -/datum/spellbook_entry/arcane_barrage - name = "Arcane Barrage" - spell_type = /obj/effect/proc_holder/spell/targeted/infinite_guns/arcane_barrage - cost = 3 - no_coexistance_typecache = /obj/effect/proc_holder/spell/targeted/infinite_guns/gun - /datum/spellbook_entry/barnyard name = "Barnyard Curse" spell_type = /obj/effect/proc_holder/spell/pointed/barnyardcurse @@ -291,47 +275,6 @@ dat += "[surplus] left.
" return dat -/datum/spellbook_entry/item/staffchange - name = "Staff of Change" - desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself." - item_path = /obj/item/gun/magic/staff/change - -/datum/spellbook_entry/item/staffanimation - name = "Staff of Animation" - desc = "An arcane staff capable of shooting bolts of eldritch energy which cause inanimate objects to come to life. This magic doesn't affect machines." - item_path = /obj/item/gun/magic/staff/animate - category = "Assistance" - -/datum/spellbook_entry/item/staffchaos - name = "Staff of Chaos" - desc = "A caprious tool that can fire all sorts of magic without any rhyme or reason. Using it on people you care about is not recommended." - item_path = /obj/item/gun/magic/staff/chaos - -/datum/spellbook_entry/item/spellblade - name = "Spellblade" - desc = "A sword capable of firing blasts of energy which rip targets limb from limb." - item_path = /obj/item/gun/magic/staff/spellblade - -/datum/spellbook_entry/item/staffdoor - name = "Staff of Door Creation" - desc = "A particular staff that can mold solid walls into ornate doors. Useful for getting around in the absence of other transportation. Does not work on glass." - item_path = /obj/item/gun/magic/staff/door - cost = 1 - category = "Mobility" - -/datum/spellbook_entry/item/staffhealing - name = "Staff of Healing" - desc = "An altruistic staff that can heal the lame and raise the dead." - item_path = /obj/item/gun/magic/staff/healing - cost = 1 - category = "Defensive" - -/datum/spellbook_entry/item/lockerstaff - name = "Staff of the Locker" - desc = "A staff that shoots lockers. It eats anyone it hits on its way, leaving a welded locker with your victims behind." - item_path = /obj/item/gun/magic/staff/locker - category = "Defensive" - /datum/spellbook_entry/item/scryingorb name = "Scrying Orb" desc = "An incandescent orb of crackling energy. Using it will allow you to release your ghost while alive, allowing you to spy upon others and talk to the deceased. In addition, buying it will permanently grant you X-ray vision." @@ -356,12 +299,6 @@ item_path = /obj/item/necromantic_stone category = "Assistance" -/datum/spellbook_entry/item/wands - name = "Wand Assortment" - desc = "A collection of wands that allow for a wide variety of utility. Wands have a limited number of charges, so be conservative with their use. Comes in a handy belt." - item_path = /obj/item/storage/belt/wands/full - category = "Defensive" - /datum/spellbook_entry/item/armor name = "Mastercrafted Armor Set" desc = "An artefact suit of armor that allows you to cast spells while providing more protection against attacks and the void of space." diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm index 14cf56d51ae0..96a41b2ac07b 100644 --- a/code/modules/antagonists/wizard/wizard.dm +++ b/code/modules/antagonists/wizard/wizard.dm @@ -204,7 +204,6 @@ if(APPRENTICE_HEALING) owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/charge(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/forcewall(null)) - H.put_in_hands(new /obj/item/gun/magic/staff/healing(H)) to_chat(owner, "Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned life-saving survival spells. You are able to cast charge and forcewall.") if(APPRENTICE_ROBELESS) owner.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null)) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm index 9f2d582be256..30703b2f4a02 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm @@ -15,12 +15,19 @@ var/active = FALSE var/last_pressure_delta = 0 - pipe_flags = PIPING_ONE_PER_TURF | PIPING_DEFAULT_LAYER_ONLY + pipe_flags = PIPING_ONE_PER_TURF var/flipped = 0 var/mode = CIRCULATOR_HOT var/obj/machinery/power/generator/generator +/obj/machinery/atmospherics/components/unary/shuttle/heater/on_construction(obj_color, set_layer) + var/obj/item/circuitboard/machine/circulator/board = circuit + if(board) + piping_layer = board.pipe_layer + set_layer = piping_layer + ..() + //for mappers /obj/machinery/atmospherics/components/binary/circulator/cold mode = CIRCULATOR_COLD diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 40932634cfa4..11358938bd47 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -30,7 +30,7 @@ var/mob_color //Change the mob's color var/assignedrole var/show_flavour = TRUE - var/banType = ROLE_LAVALAND + var/ban_type = ROLE_LAVALAND var/ghost_usable = TRUE /// Weakref to the mob this spawner created - just if you needed to do something with it. var/datum/weakref/spawned_mob_ref @@ -42,7 +42,7 @@ if(!uses) to_chat(user, "This spawner is out of charges!") return - if(is_banned_from(user.key, banType)) + if(is_banned_from(user.key, ban_type)) to_chat(user, "You are jobanned!") return if(!allow_spawn(user)) diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index c7aa46af728b..b64a2abf02de 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -487,7 +487,6 @@ /obj/item/shield/energy = 6, /obj/item/shield/riot/tele = 12, /obj/item/dnainjector/lasereyesmut = 7, - /obj/item/gun/magic/wand/fireball/inert = 3, /obj/item/pneumatic_cannon = 15, /obj/item/melee/transforming/energy/sword = 7, /obj/item/book/granter/spell/knock = 15, @@ -515,8 +514,6 @@ /obj/item/dualsaber = 15, /obj/item/organ/heart/demon = 7, /obj/item/gun/ballistic/automatic/smg/c20r = 16, - /obj/item/gun/magic/wand/resurrection/inert = 15, - /obj/item/gun/magic/wand/resurrection = 10, /obj/item/uplink/old = 2, /obj/item/book/granter/spell/charge = 12, /obj/item/grenade/clusterbuster/spawner_manhacks = 15, @@ -556,16 +553,6 @@ desc = "High speed, low drag combat boots, now with an added layer of insulation." min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT -/obj/item/gun/magic/wand/fireball/inert - name = "weakened wand of fireball" - desc = "This wand shoots scorching balls of fire that explode into destructive flames. The years of the cold have weakened the magic inside the wand." - max_charges = 4 - -/obj/item/gun/magic/wand/resurrection/inert - name = "weakened wand of healing" - desc = "This wand uses healing magics to heal and revive. The years of the cold have weakened the magic inside the wand." - max_charges = 5 - /obj/effect/mob_spawn/human/syndicatesoldier/coldres name = "Syndicate Snow Operative" outfit = /datum/outfit/snowsyndie/corpse diff --git a/code/modules/awaymissions/mission_code/spacebattle.dm b/code/modules/awaymissions/mission_code/spacebattle.dm index dee4def256b0..efe429b86b73 100644 --- a/code/modules/awaymissions/mission_code/spacebattle.dm +++ b/code/modules/awaymissions/mission_code/spacebattle.dm @@ -41,11 +41,11 @@ name = "Hidden Chamber" icon_state = "awaycontent10" -/mob/living/simple_animal/hostile/syndicate/ranged/spacebattle +/mob/living/simple_animal/hostile/human/syndicate/ranged/spacebattle loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier, /obj/item/gun/ballistic/automatic/smg/c20r, /obj/item/shield/energy) -/mob/living/simple_animal/hostile/syndicate/melee/spacebattle +/mob/living/simple_animal/hostile/human/syndicate/melee/spacebattle deathmessage = "falls limp as they release their grip from the energy weapons, activating their self-destruct function!" loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier) diff --git a/code/modules/buildmode/buildmode.dm b/code/modules/buildmode/buildmode.dm index 81c46eebd10c..d85929daa0a8 100644 --- a/code/modules/buildmode/buildmode.dm +++ b/code/modules/buildmode/buildmode.dm @@ -182,9 +182,6 @@ return TRUE // no doing underlying actions /proc/togglebuildmode(mob/M as mob in GLOB.player_list) - set name = "Toggle Build Mode" - set category = "Event" - if(M.client) if(istype(M.client.click_intercept,/datum/buildmode)) var/datum/buildmode/B = M.client.click_intercept diff --git a/code/modules/cargo/blackmarket/blackmarket_items/misc.dm b/code/modules/cargo/blackmarket/blackmarket_items/misc.dm index eb3de3c4040d..a5e2c67175af 100644 --- a/code/modules/cargo/blackmarket/blackmarket_items/misc.dm +++ b/code/modules/cargo/blackmarket/blackmarket_items/misc.dm @@ -91,7 +91,7 @@ stock = 1 availability_prob = 40 -/datum/blackmarket_item/consumable/secret_docs/spawn_item(loc) +/datum/blackmarket_item/misc/secret_docs/spawn_item(loc) var/docs = pick(list(/obj/item/documents/nanotrasen, /obj/item/documents/solgov, /obj/item/documents/terragov, 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/cargo/bounties/special.dm b/code/modules/cargo/bounties/special.dm index af61a6698e44..fa581504ca89 100644 --- a/code/modules/cargo/bounties/special.dm +++ b/code/modules/cargo/bounties/special.dm @@ -19,12 +19,12 @@ return (Copy.copy_type && ispath(Copy.copy_type, /obj/item/documents/syndicate)) return TRUE -/datum/bounty/item/adamantine - name = "Adamantine" - description = "Nanotrasen's anomalous materials division is in desparate need for Adamantine. Send them a large shipment and we'll make it worth your while." +/datum/bounty/item/hellstone + name = "Hellstone" + description = "Nanotrasen's anomalous materials division is in desparate need for Hellstone. Send them a large shipment and we'll make it worth your while." reward = 35000 required_count = 10 - wanted_types = list(/obj/item/stack/sheet/mineral/adamantine) + wanted_types = list(/obj/item/stack/sheet/mineral/hidden/hellstone) /datum/bounty/item/trash name = "Trash" diff --git a/code/modules/cargo/bounty.dm b/code/modules/cargo/bounty.dm index 01efd57be70b..3807e9bd6984 100644 --- a/code/modules/cargo/bounty.dm +++ b/code/modules/cargo/bounty.dm @@ -166,7 +166,7 @@ GLOBAL_LIST_EMPTY(bounties_list) /********************************Low Priority Gens********************************/ var/list/low_priority_strict_type_list = list( /datum/bounty/item/alien_organs, /datum/bounty/item/syndicate_documents, - /datum/bounty/item/adamantine, + /datum/bounty/item/hellstone, /datum/bounty/item/trash, /datum/bounty/more_bounties) diff --git a/code/modules/cargo/centcom_podlauncher.dm b/code/modules/cargo/centcom_podlauncher.dm index 61e416e9d4f1..dfec659e1644 100644 --- a/code/modules/cargo/centcom_podlauncher.dm +++ b/code/modules/cargo/centcom_podlauncher.dm @@ -19,7 +19,7 @@ /client/proc/centcom_podlauncher() //Creates a verb for admins to open up the ui set name = "Config/Launch Supplypod" set desc = "Configure and launch a CentCom supplypod full of whatever your heart desires!" - set category = "Admin.Events" + set category = "Event" new /datum/centcom_podlauncher(usr)//create the datum //Variables declared to change how items in the launch bay are picked and launched. (Almost) all of these are changed in the ui_act proc diff --git a/code/modules/cargo/exports/lavaland.dm b/code/modules/cargo/exports/lavaland.dm index cd1946265374..4779886622a4 100644 --- a/code/modules/cargo/exports/lavaland.dm +++ b/code/modules/cargo/exports/lavaland.dm @@ -7,7 +7,6 @@ unit_name = "minor lava planet artifact" export_types = list(/obj/item/immortality_talisman, /obj/item/book_of_babel, - /obj/item/gun/magic/hook, /obj/item/wisp_lantern, /obj/item/reagent_containers/glass/bottle/potion/flight, /obj/item/katana/cursed, @@ -23,9 +22,7 @@ /obj/item/lava_staff, /obj/item/ship_in_a_bottle, /obj/item/clothing/shoes/clown_shoes/banana_shoes, - /obj/item/gun/magic/staff/honk, /obj/item/kitchen/knife/envy, - /obj/item/gun/ballistic/revolver/russian/soul, /obj/item/veilrender/vealrender, /obj/item/nullrod/scythe/talking/necro, /obj/item/clothing/suit/armor/ascetic) @@ -55,43 +52,42 @@ /obj/machinery/anomalous_crystal, /obj/item/mayhem, /obj/item/blood_contract, - /obj/item/guardiancreator/miner/choose,//this is basically the most valulable mining loot so good luck getting a miner to part ways - /obj/item/gun/magic/staff/spellblade, + /obj/item/guardiancreator/miner/choose//this is basically the most valulable mining loot so good luck getting a miner to part ways ) - +/* /datum/export/lavaland/trophycommon cost = 1500 unit_name = "common hunting trophy" - export_types = list(/obj/item/crusher_trophy/legion_skull, - /obj/item/crusher_trophy/wolf_ear, - /obj/item/crusher_trophy/bear_paw, - /obj/item/crusher_trophy/goliath_tentacle, - /obj/item/crusher_trophy/watcher_wing) + export_types = list(/obj/item/mob_trophy/legion_skull, + /obj/item/mob_trophy/wolf_ear, + /obj/item/mob_trophy/bear_paw, + /obj/item/mob_trophy/goliath_tentacle, + /obj/item/mob_trophy/watcher_wing) /datum/export/lavaland/trophyrare cost = 5000 unit_name = "rare hunting trophy" - export_types = list(/obj/item/crusher_trophy/dwarf_skull, - /obj/item/crusher_trophy/fang, - /obj/item/crusher_trophy/war_paw, - /obj/item/crusher_trophy/elder_tentacle, - /obj/item/crusher_trophy/ice_crystal, - /obj/item/crusher_trophy/magma_wing, - /obj/item/crusher_trophy/tail_spike, - /obj/item/crusher_trophy/ice_wing) + export_types = list(/obj/item/mob_trophy/dwarf_skull, + /obj/item/mob_trophy/fang, + /obj/item/mob_trophy/war_paw, + /obj/item/mob_trophy/elder_tentacle, + /obj/item/mob_trophy/ice_crystal, + /obj/item/mob_trophy/magma_wing, + /obj/item/mob_trophy/tail_spike, + /obj/item/mob_trophy/ice_wing) /datum/export/lavaland/trophymega cost = 10000 unit_name = "big game hunting trophy" - export_types = list(/obj/item/crusher_trophy/legionnaire_spine, - /obj/item/crusher_trophy/ash_spike, - /obj/item/crusher_trophy/demon_claws, - /obj/item/crusher_trophy/broodmother_tongue, - /obj/item/crusher_trophy/ice_block_talisman, - /obj/item/crusher_trophy/king_goat, - /obj/item/crusher_trophy/miner_eye, - /obj/item/crusher_trophy/vortex_talisman, - /obj/item/crusher_trophy/blaster_tubes) + export_types = list(/obj/item/mob_trophy/legionnaire_spine, + /obj/item/mob_trophy/ash_spike, + /obj/item/mob_trophy/demon_claws, + /obj/item/mob_trophy/broodmother_tongue, + /obj/item/mob_trophy/ice_block_talisman, + /obj/item/mob_trophy/miner_eye, + /obj/item/mob_trophy/vortex_talisman, + /obj/item/mob_trophy/blaster_tubes) +*/ /datum/export/lavaland/megafauna/total_printout(datum/export_report/ex, notes = TRUE) //in the unlikely case a miner feels like selling megafauna loot . = ..() diff --git a/code/modules/cargo/exports/materials.dm b/code/modules/cargo/exports/materials.dm index 1bf35a94c440..f81654978ac2 100644 --- a/code/modules/cargo/exports/materials.dm +++ b/code/modules/cargo/exports/materials.dm @@ -26,11 +26,6 @@ // Materials. Prices have been heavily nerfed from the original values; mining is boring, so it shouldn't be a good way to make money. -/datum/export/material/bananium - cost = 250 - material_id = /datum/material/bananium - message = "cm3 of bananium" - /datum/export/material/diamond cost = 125 material_id = /datum/material/diamond @@ -62,15 +57,10 @@ material_id = /datum/material/titanium message = "cm3 of titanium" -/datum/export/material/adamantine +/datum/export/material/hellstone cost = 125 - material_id = /datum/material/adamantine - message = "cm3 of adamantine" - -/datum/export/material/mythril - cost = 375 - material_id = /datum/material/mythril - message = "cm3 of mythril" + material_id = /datum/material/hellstone + message = "cm3 of hellstone" /datum/export/material/bscrystal cost = 75 @@ -82,11 +72,6 @@ message = "cm3 of plastic" material_id = /datum/material/plastic -/datum/export/material/runite - cost = 150 - message = "cm3 of runite" - material_id = /datum/material/runite - /datum/export/material/metal cost = 2 message = "cm3 of metal" diff --git a/code/modules/cargo/packs/ammo.dm b/code/modules/cargo/packs/ammo.dm index 5d94d25b61c4..ab521998f07c 100644 --- a/code/modules/cargo/packs/ammo.dm +++ b/code/modules/cargo/packs/ammo.dm @@ -341,6 +341,12 @@ contains = list(/obj/item/ammo_box/a4570) cost = 500 +/datum/supply_pack/ammo/a4570_box/match + name = ".45-70 Match Crate" + desc = "Contains a twelve-round box containing devastatingly powerful .45-70 caliber ammunition, that travels faster, pierces armour better, and ricochets off targets." + contains = list(/obj/item/ammo_box/a4570/match) + cost = 750 + /datum/supply_pack/ammo/ferropelletboxcrate name = "Ferromagnetic Pellet Box Crate" desc = "Contains a fifty-round ferromagnetic pellet ammo box for gauss guns such as the Claris." diff --git a/code/modules/cargo/packs/food.dm b/code/modules/cargo/packs/food.dm index f383e4e706f1..bf16fb592e21 100644 --- a/code/modules/cargo/packs/food.dm +++ b/code/modules/cargo/packs/food.dm @@ -317,40 +317,3 @@ crate_name = "ration crate" crate_type = /obj/structure/closet/crate -/datum/supply_pack/food/syrup - name = "Coffee Syrups Box" - desc = "A packaged box of various syrups, perfect for making your delicious coffee even more diabetic." - cost = 200 - contains = list( - /obj/item/reagent_containers/food/drinks/bottle/syrup_bottle/caramel, - /obj/item/reagent_containers/food/drinks/bottle/syrup_bottle/liqueur, - ) - crate_name = "coffee syrups box" - crate_type = /obj/structure/closet/crate - -/datum/supply_pack/food/coffeekit - name = "Coffee Equipment Crate" - desc = "A complete kit to setup your own cozy coffee shop, the coffeemaker is for some reason not included." - cost = 1000 - contains = list( - /obj/item/storage/box/coffeepack/robusta, - /obj/item/storage/box/coffeepack, - /obj/item/reagent_containers/food/drinks/bottle/coffeepot, - /obj/item/storage/box/coffee_condi_display, - /obj/item/reagent_containers/food/condiment/milk, - /obj/item/reagent_containers/food/condiment/soymilk, - /obj/item/reagent_containers/food/condiment/sugar, - /obj/item/reagent_containers/food/drinks/bottle/syrup_bottle/caramel, //one extra syrup as a treat - ) - crate_name = "coffee equipment crate" - -/datum/supply_pack/food/coffeemaker - name = "Impressa Coffeemaker Crate" - desc = "An assembled Impressa model coffeemaker." - cost = 500 - contains = list( - /obj/machinery/coffeemaker/impressa, - /obj/item/reagent_containers/food/drinks/bottle/coffeepot, - ) - crate_name = "coffeemaker crate" - crate_type = /obj/structure/closet/crate diff --git a/code/modules/cargo/packs/machinery.dm b/code/modules/cargo/packs/machinery.dm index 825329e97c80..56ed7130738b 100644 --- a/code/modules/cargo/packs/machinery.dm +++ b/code/modules/cargo/packs/machinery.dm @@ -66,25 +66,22 @@ /datum/supply_pack/machinery/thermomachine name = "Thermomachine Crate" desc = "Freeze or heat your air." - cost = 2000 - contains = list(/obj/item/circuitboard/machine/thermomachine, - /obj/item/circuitboard/machine/thermomachine) + cost = 1000 + contains = list(/obj/item/circuitboard/machine/thermomachine) crate_name = "thermomachine crate" /datum/supply_pack/machinery/portapump name = "Portable Air Pump Crate" - desc = "Want to drain a room of air without losing a drop? We've got you covered. Contains two portable air pumps." - cost = 3000 - contains = list(/obj/machinery/portable_atmospherics/pump, - /obj/machinery/portable_atmospherics/pump) + desc = "Want to drain a room of air without losing a drop? We've got you covered. Contains a portable air pump." + cost = 1500 + contains = list(/obj/machinery/portable_atmospherics/pump) crate_name = "portable air pump crate" /datum/supply_pack/machinery/portascrubber name = "Portable Scrubber Crate" - desc = "Clean up that pesky plasma leak with your very own set of two portable scrubbers." - cost = 3000 - contains = list(/obj/machinery/portable_atmospherics/scrubber, - /obj/machinery/portable_atmospherics/scrubber) + desc = "Clean up that pesky plasma leak with your very own portable scrubber." + cost = 1500 + contains = list(/obj/machinery/portable_atmospherics/scrubber) crate_name = "portable scrubber crate" /datum/supply_pack/machinery/hugescrubber @@ -155,11 +152,9 @@ /datum/supply_pack/machinery/wall_shield_gen name = "Shield Generator Crate" - desc = "These four shield wall generators are guaranteed to keep any unwanted lifeforms on the outside, where they belong! Not rated for containing singularities or tesla balls." - cost = 2000 + desc = "These two shield wall generators are guaranteed to keep any unwanted lifeforms on the outside, where they belong! Not rated for containing singularities or tesla balls." + cost = 1000 contains = list(/obj/machinery/power/shieldwallgen, - /obj/machinery/power/shieldwallgen, - /obj/machinery/power/shieldwallgen, /obj/machinery/power/shieldwallgen) crate_name = "shield generators crate" crate_type = /obj/structure/closet/crate/secure/plasma diff --git a/code/modules/cargo/packs/mechs.dm b/code/modules/cargo/packs/mechs.dm index b28d16359d5e..376c22fc0db8 100644 --- a/code/modules/cargo/packs/mechs.dm +++ b/code/modules/cargo/packs/mechs.dm @@ -103,21 +103,17 @@ Mech Equipment /datum/supply_pack/mech/equipment/drill name = "Mech drill kit" - desc = "A trio of mechanized drills" - cost = 1500 + desc = "Contains one mechanized drill for heavy duty digging." + cost = 500 contains = list( - /obj/item/mecha_parts/mecha_equipment/drill, - /obj/item/mecha_parts/mecha_equipment/drill, /obj/item/mecha_parts/mecha_equipment/drill ) -/datum/supply_pack/mech/equipment/scanners +/datum/supply_pack/mech/equipment/scanner name = "Mech scanner kit" - desc = "A trio of electronic mining scanners, graded to interface with a mech" - cost = 1000 + desc = "An electronic mining scanner, graded to interface with a mech." + cost = 350 contains = list( - /obj/item/mecha_parts/mecha_equipment/mining_scanner, - /obj/item/mecha_parts/mecha_equipment/mining_scanner, /obj/item/mecha_parts/mecha_equipment/mining_scanner ) @@ -131,10 +127,9 @@ Mech Equipment /datum/supply_pack/mech/equipment/clamp name = "Mech clamp kit" - desc = "Two clamps designed for mechanized freight hauling." - cost = 700 + desc = "Contains a clamp designed for mechanized freight hauling." + cost = 350 contains = list( - /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp, /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp ) @@ -148,7 +143,7 @@ Mech Equipment /datum/supply_pack/mech/equipment/ripley_upgrade name = "APLU upgrade kit" - desc = "The components needed to upgrade an APLU MK-I to be spaceworthy" + desc = "Contains an APLU MK II upgrade kit. The upgrade will replace the cockpit with a spaceworthy canopy, but the added weight makes it slower." cost = 1500 contains = list( /obj/item/mecha_parts/mecha_equipment/conversion_kit/ripley @@ -159,7 +154,7 @@ weapons */ /datum/supply_pack/mech/equipment/pka - name = "Proto-Kinetic Accelerator kit" + name = "Mech Mounted Proto-Kinetic Accelerator kit" desc = "A ranged mining attachment for any mech." cost = 1500 contains = list( diff --git a/code/modules/cargo/packs/medical.dm b/code/modules/cargo/packs/medical.dm index d49e9760da81..08b576937138 100644 --- a/code/modules/cargo/packs/medical.dm +++ b/code/modules/cargo/packs/medical.dm @@ -61,10 +61,9 @@ /datum/supply_pack/medical/defibs name = "Defibrillator Crate" - desc = "Contains two defibrillators for bringing the recently deceased back to life." - cost = 1500 - contains = list(/obj/item/defibrillator/loaded, - /obj/item/defibrillator/loaded) + desc = "Contains a defibrillator for bringing the recently deceased back to life." + cost = 750 + contains = list(/obj/item/defibrillator/loaded) crate_name = "defibrillator crate" /datum/supply_pack/medical/surgery diff --git a/code/modules/cargo/packs/spacesuit_armor.dm b/code/modules/cargo/packs/spacesuit_armor.dm index 78e7d0fb1ff0..8346ea00b06e 100644 --- a/code/modules/cargo/packs/spacesuit_armor.dm +++ b/code/modules/cargo/packs/spacesuit_armor.dm @@ -34,8 +34,7 @@ name = "Medical Hardsuit Crate" desc = "One medical hardsuit, resistant to diseases and useful for retrieving patients in space." cost = 1500 - contains = list(/obj/item/clothing/suit/space/hardsuit/medical, - /obj/item/clothing/suit/space/hardsuit/medical) + contains = list(/obj/item/clothing/suit/space/hardsuit/medical) crate_name = "medical hardsuit crate" crate_type = /obj/structure/closet/crate/medical diff --git a/code/modules/cargo/packs/tools.dm b/code/modules/cargo/packs/tools.dm index 92726a3ab6a6..6b43448a5d81 100644 --- a/code/modules/cargo/packs/tools.dm +++ b/code/modules/cargo/packs/tools.dm @@ -67,14 +67,11 @@ ) crate_name = "basic mining crate" -/datum/supply_pack/tools/jackhammers +/datum/supply_pack/tools/jackhammer name = "Jackhammer Crate" - desc = "Contains two jackhammers, ideal for breaking rocks and breaking hull." - cost = 3500 - contains = list( - /obj/item/pickaxe/drill/jackhammer, - /obj/item/pickaxe/drill/jackhammer, - ) + desc = "Contains a jackhammer, ideal for breaking rocks and breaking hull." + cost = 1750 + contains = list(/obj/item/pickaxe/drill/jackhammer) crate_name = "jackhammer crate" @@ -87,10 +84,9 @@ /datum/supply_pack/tools/insulated_gloves name = "Insulated Gloves Crate" - desc = "The backbone of modern society. Barely ever ordered for actual engineering. Contains two insulated gloves." - cost = 1500 - contains = list(/obj/item/clothing/gloves/color/yellow, - /obj/item/clothing/gloves/color/yellow) + desc = "The backbone of modern society. Barely ever ordered for actual engineering. Contains a pair of insulated gloves." + cost = 750 + contains = list(/obj/item/clothing/gloves/color/yellow) crate_name = "insulated gloves crate" /datum/supply_pack/tools/jetpack @@ -101,13 +97,12 @@ crate_name = "jetpack crate" crate_type = /obj/structure/closet/crate/secure/plasma -/datum/supply_pack/tools/transfer_valves +/datum/supply_pack/tools/transfer_valve name = "Tank Transfer Valves Crate" - desc = "The key ingredient for making a lot of people very angry very fast. Contains two tank transfer valves." - cost = 6000 - contains = list(/obj/item/transfer_valve, - /obj/item/transfer_valve) - crate_name = "tank transfer valves crate" + desc = "The key ingredient for making a lot of people very angry very fast. Contains a tank transfer valve." + cost = 3000 + contains = list(/obj/item/transfer_valve) + crate_name = "tank transfer valve crate" crate_type = /obj/structure/closet/crate/secure/science /* diff --git a/code/modules/client/loadout/loadout_accessories.dm b/code/modules/client/loadout/loadout_accessories.dm index 40702e5fc2be..b81588c8e72e 100644 --- a/code/modules/client/loadout/loadout_accessories.dm +++ b/code/modules/client/loadout/loadout_accessories.dm @@ -77,6 +77,11 @@ description = "Standard hand coverings for everyday use." path = /obj/item/clothing/gloves/color/white +/datum/gear/accessory/gloves/fingerless + display_name = "fingerless gloves" + description = "Radical hand coverings for everyday use." + path = /obj/item/clothing/gloves/fingerless + /datum/gear/accessory/gloves/evening display_name = "evening gloves" description = "Excessively fancy elbow-length gloves." diff --git a/code/modules/client/loadout/loadout_general.dm b/code/modules/client/loadout/loadout_general.dm index d9e6d8f13020..4c081a67e92f 100644 --- a/code/modules/client/loadout/loadout_general.dm +++ b/code/modules/client/loadout/loadout_general.dm @@ -36,7 +36,7 @@ /datum/gear/mug display_name = "coffee mug" - path = /obj/item/reagent_containers/food/drinks/britcup + path = /obj/item/reagent_containers/food/drinks/mug /datum/gear/rilena_mug display_name = "coffee mug, rilena" @@ -146,6 +146,10 @@ display_name = "hair dye" path = /obj/item/dyespray +/datum/gear/colorsalve + display_name = "Elzuose color salve" + path = /obj/item/colorsalve + /datum/gear/tablebell display_name = "table bell, brass" path = /obj/item/table_bell/brass diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 9cafaa753f69..b9a4fb8f0ca3 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -155,6 +155,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) ) var/fbp = FALSE var/phobia = "spiders" + var/preferred_smoke_brand = PREF_CIG_SPACE var/list/alt_titles_preferences = list() var/list/custom_names = list() var/preferred_ai_core_display = "Blue" @@ -860,6 +861,11 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "" mutant_category = 0 + if("Smoker" in all_quirks) + dat += "

Smoker

" + + dat += "[preferred_smoke_brand]
" + if("body_size" in pref_species.default_features) if(!mutant_category) dat += APPEARANCE_CATEGORY_COLUMN @@ -1699,9 +1705,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) age = clamp(round(text2num(new_age)), pref_species.species_age_min, pref_species.species_age_max) if("flavor_text") - var/msg = sanitize(stripped_multiline_input(usr, "Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!", "Flavor Text", features["flavor_text"], 4096, TRUE)) + var/msg = stripped_multiline_input(usr, "A snippet of text shown when others examine you, describing what you may look like. This can also be used for OOC notes.", "Flavor Text", html_decode(features["flavor_text"]), MAX_FLAVOR_LEN, TRUE) if(msg) //WS edit - "Cancel" does not clear flavor text - features["flavor_text"] = html_decode(msg) + features["flavor_text"] = msg if("hair") var/new_hair = input(user, "Choose your character's hair colour:", "Character Preference","#"+hair_color) as color|null @@ -2113,6 +2119,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/phobiaType = input(user, "What are you scared of?", "Character Preference", phobia) as null|anything in SStraumas.phobia_types if(phobiaType) phobia = phobiaType + if("preferred_smoke_brand") + var/smokeBrand = input(user, "What cigarettes are your favorite?", "Character Preference", preferred_smoke_brand) as null|anything in GLOB.valid_smoke_types + if(smokeBrand) + preferred_smoke_brand = smokeBrand if("generic_adjective") var/selectAdj diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 3fb4b9ec9718..3c3040f03906 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -405,6 +405,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car READ_FILE(S["jumpsuit_style"], jumpsuit_style) READ_FILE(S["uplink_loc"], uplink_spawn_loc) READ_FILE(S["phobia"], phobia) + READ_FILE(S["preferred_smoke_brand"], preferred_smoke_brand) READ_FILE(S["generic_adjective"], generic_adjective) READ_FILE(S["randomise"], randomise) READ_FILE(S["body_size"], features["body_size"]) @@ -596,6 +597,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["uplink_loc"] , uplink_spawn_loc) WRITE_FILE(S["randomise"] , randomise) WRITE_FILE(S["species"] , pref_species.id) + WRITE_FILE(S["preferred_smoke_brand"] , preferred_smoke_brand) WRITE_FILE(S["phobia"] , phobia) WRITE_FILE(S["generic_adjective"] , generic_adjective) WRITE_FILE(S["body_size"] , features["body_size"]) diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm index b12e7cdf3d00..b40e1702652e 100644 --- a/code/modules/client/preferences_toggles.dm +++ b/code/modules/client/preferences_toggles.dm @@ -443,7 +443,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS //Admin Preferences /client/proc/toggleadminhelpsound() set name = "Hear/Silence Adminhelps" - set category = "Prefs - Admin" + set category = "Preferences.Admin" set desc = "Toggle hearing a notification when admin PMs are received" if(!holder) return @@ -454,7 +454,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS /client/proc/toggleannouncelogin() set name = "Do/Don't Announce Login" - set category = "Prefs - Admin" + set category = "Preferences.Admin" set desc = "Toggle if you want an announcement to admins when you login during a round" if(!holder) return @@ -465,7 +465,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS /client/proc/toggle_hear_radio() set name = "Show/Hide Radio Chatter" - set category = "Prefs - Admin" + set category = "Preferences.Admin" set desc = "Toggle seeing radiochatter from nearby radios and speakers" if(!holder) return @@ -487,7 +487,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS /client/proc/deadchat() set name = "Show/Hide Deadchat" - set category = "Prefs - Admin" + set category = "Preferences.Admin" set desc ="Toggles seeing deadchat" if(!holder) return @@ -498,7 +498,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS /client/proc/toggleprayers() set name = "Show/Hide Prayers" - set category = "Prefs - Admin" + set category = "Preferences.Admin" set desc = "Toggles seeing prayers" if(!holder) return @@ -509,7 +509,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS /client/proc/toggle_prayer_sound() set name = "Hear/Silence Prayer Sounds" - set category = "Prefs - Admin" + set category = "Preferences.Admin" set desc = "Hear Prayer Sounds" if(!holder) return @@ -520,7 +520,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS /client/proc/colorasay() set name = "Set Admin Say Color" - set category = "Prefs - Admin" + set category = "Preferences.Admin" set desc = "Set the color of your ASAY messages" if(!holder) return @@ -537,7 +537,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS /client/proc/resetasaycolor() set name = "Reset your Admin Say Color" set desc = "Returns your ASAY Color to default" - set category = "Prefs - Admin" + set category = "Preferences.Admin" if(!holder) return if(!CONFIG_GET(flag/allow_admin_asaycolor)) diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index d039d06dae35..100cc7ff0f52 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -226,8 +226,6 @@ backpack_contents = list( /obj/item/melee/transforming/energy/axe=1,\ /obj/item/storage/part_replacer/bluespace/tier4=1,\ - /obj/item/gun/magic/wand/resurrection/debug=1,\ - /obj/item/gun/magic/wand/death/debug=1,\ /obj/item/debug/human_spawner=1,\ /obj/item/debug/omnitool=1 ) diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index 1b5f0ae58fae..336ac43c7d4d 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -134,9 +134,12 @@ return if(user == loc && tied != SHOES_TIED) // if they're our own shoes, go tie-wards + if(DOING_INTERACTION_WITH_TARGET(user, our_guy)) + to_chat(user, span_warning("You're already interacting with [src]!")) + return user.visible_message("[user] begins [tied ? "unknotting" : "tying"] the laces of [user.p_their()] [src.name].", "You begin [tied ? "unknotting" : "tying"] the laces of your [src.name]...") - if(do_after(user, lace_time, needhand=TRUE, target=our_guy, extra_checks=CALLBACK(src, PROC_REF(still_shoed), our_guy))) + if(do_after(user, lace_time, target = our_guy, extra_checks = CALLBACK(src, PROC_REF(still_shoed), our_guy))) to_chat(user, "You [tied ? "unknot" : "tie"] the laces of your [src.name].") if(tied == SHOES_UNTIED) adjust_laces(SHOES_TIED, user) @@ -151,13 +154,16 @@ if(tied == SHOES_KNOTTED) to_chat(user, "The laces on [loc]'s [src.name] are already a hopelessly tangled mess!") return + if(DOING_INTERACTION_WITH_TARGET(user, our_guy)) + to_chat(user, span_warning("You're already interacting with [src]!")) + return var/mod_time = lace_time to_chat(user, "You quietly set to work [tied ? "untying" : "knotting"] [loc]'s [src.name]...") if(HAS_TRAIT(user, TRAIT_CLUMSY)) // based clowns trained their whole lives for this mod_time *= 0.75 - if(do_after(user, mod_time, needhand=TRUE, target=our_guy, extra_checks=CALLBACK(src, PROC_REF(still_shoed), our_guy), hidden = TRUE)) + if(do_after(user, mod_time, target = our_guy, extra_checks = CALLBACK(src, PROC_REF(still_shoed), our_guy))) to_chat(user, "You [tied ? "untie" : "knot"] the laces on [loc]'s [src.name].") if(tied == SHOES_UNTIED) adjust_laces(SHOES_KNOTTED, user) @@ -232,8 +238,12 @@ /obj/item/clothing/shoes/attack_self(mob/user) . = ..() + if(DOING_INTERACTION_WITH_TARGET(user, src)) + to_chat(user, "You're already interacting with [src]!") + return + to_chat(user, "You begin [tied ? "untying" : "tying"] the laces on [src]...") - if(do_after(user, lace_time, needhand=TRUE, target=src,extra_checks=CALLBACK(src, PROC_REF(still_shoed), user))) + if(do_after(user, lace_time, target = src,extra_checks = CALLBACK(src, PROC_REF(still_shoed), user))) to_chat(user, "You [tied ? "untie" : "tie"] the laces on [src].") adjust_laces(tied ? SHOES_TIED : SHOES_UNTIED, user) diff --git a/code/modules/clothing/shoes/bananashoes.dm b/code/modules/clothing/shoes/bananashoes.dm index a09ea07a3250..4ed246a587be 100644 --- a/code/modules/clothing/shoes/bananashoes.dm +++ b/code/modules/clothing/shoes/bananashoes.dm @@ -16,7 +16,7 @@ /obj/item/clothing/shoes/clown_shoes/banana_shoes/ComponentInitialize() . = ..() AddElement(/datum/element/update_icon_updates_onmob) - AddComponent(/datum/component/material_container, list(/datum/material/bananium), 200000, TRUE, /obj/item/stack) + AddComponent(/datum/component/material_container, list(/datum/material/hellstone), 200000, TRUE, /obj/item/stack) AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 75, falloff_exponent = 20) /obj/item/clothing/shoes/clown_shoes/banana_shoes/step_action() @@ -24,7 +24,7 @@ var/mob/wearer = loc var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container) if(on && istype(wearer)) - if(bananium.get_material_amount(/datum/material/bananium) < 100) + if(bananium.get_material_amount(/datum/material/hellstone) < 100) on = !on if(!always_noslip) clothing_flags &= ~NOSLIP @@ -32,7 +32,7 @@ to_chat(loc, "You ran out of bananium!") else new /obj/item/grown/bananapeel/specialpeel(get_step(src,turn(wearer.dir, 180))) //honk - bananium.use_amount_mat(100, /datum/material/bananium) + bananium.use_amount_mat(100, /datum/material/hellstone) /obj/item/clothing/shoes/clown_shoes/banana_shoes/attack_self(mob/user) var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container) @@ -48,7 +48,7 @@ /obj/item/clothing/shoes/clown_shoes/banana_shoes/ui_action_click(mob/user) var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container) - if(bananium.get_material_amount(/datum/material/bananium)) + if(bananium.get_material_amount(/datum/material/hellstone)) on = !on update_appearance() to_chat(user, "You [on ? "activate" : "deactivate"] the prototype shoes.") diff --git a/code/modules/clothing/suits/cloaks.dm b/code/modules/clothing/suits/cloaks.dm index bce5d5bd2445..4e3f6d5e3a9c 100644 --- a/code/modules/clothing/suits/cloaks.dm +++ b/code/modules/clothing/suits/cloaks.dm @@ -67,6 +67,11 @@ desc = "Worn by high ranking vampires of the transylvanian society of vampires." icon_state = "trans" +/obj/item/clothing/neck/cloak/bi + name = "solarian marine biologist cloak" + desc = "Commonly worn by members of the Solarian Marine Biologist Society, dedicated to the study and preservation of marine wildlife." + icon_state = "bi" + /obj/item/clothing/suit/hooded/cloak/goliath name = "goliath cloak" icon_state = "goliath_cloak" diff --git a/code/modules/clothing/suits/hoodies.dm b/code/modules/clothing/suits/hoodies.dm index b9e7ebb218c0..f58d445c53f0 100644 --- a/code/modules/clothing/suits/hoodies.dm +++ b/code/modules/clothing/suits/hoodies.dm @@ -85,11 +85,13 @@ /obj/item/clothing/head/hooded/hood/fbp name = "\improper FBP kepori hood" desc = "A hood for your FBP hoodie." + icon_state = "hoodie_fbp" item_state = "hoodie_fbp" /obj/item/clothing/suit/hooded/hoodie/rilena name = "K4L1 hoodie" desc = "A hoodie themed to look like K4L1 from the popular webseries RILENA. It has a comfy pocket for keeping your hands warm." + icon_state = "hoodie_rilena" item_state = "hoodie_rilena" hoodtype = /obj/item/clothing/head/hooded/hood/rilena @@ -110,5 +112,6 @@ /obj/item/clothing/head/hooded/hood/rilena name = "RILENA: LMR K4L1 hood" desc = "A hood for your RILENA themed hoodie." + icon_state = "hoodie_rilena" item_state = "hoodie_rilena" diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index 41c1cddde5a1..451d428760f3 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -148,39 +148,6 @@ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) resistance_flags = FLAMMABLE -/obj/item/clothing/suit/wizrobe/paper - name = "papier-mache robe" // no non-latin characters! - desc = "A robe held together by various bits of clear-tape and paste." - icon_state = "wizard-paper" - item_state = "wizard-paper" - var/robe_charge = TRUE - actions_types = list(/datum/action/item_action/stickmen) - - -/obj/item/clothing/suit/wizrobe/paper/ui_action_click(mob/user, action) - stickmen() - - -/obj/item/clothing/suit/wizrobe/paper/verb/stickmen() - set category = "Object" - set name = "Summon Stick Minions" - set src in usr - if(!isliving(usr)) - return - if(!robe_charge) - to_chat(usr, "The robe's internal magic supply is still recharging!") - return - - usr.say("Rise, my creation! Off your page into this realm!", forced = "stickman summoning") - playsound(src.loc, 'sound/magic/summon_magic.ogg', 50, TRUE, TRUE) - var/mob/living/M = new /mob/living/simple_animal/hostile/stickman(get_turf(usr)) - var/list/factions = usr.faction - M.faction = factions - src.robe_charge = FALSE - sleep(30) - src.robe_charge = TRUE - to_chat(usr, "The robe hums, its internal magic supply restored.") - /obj/item/clothing/suit/space/hardsuit/shielded/wizard name = "battlemage armour" desc = "Not all wizards are afraid of getting up close and personal." diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index 7a8e21ae2bea..a28d6d323a83 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -86,7 +86,6 @@ if(attached_accessory && slot != ITEM_SLOT_HANDS && ishuman(user)) var/mob/living/carbon/human/H = user attached_accessory.on_uniform_equip(src, user) - H.fan_hud_set_fandom() if(attached_accessory.above_suit) H.update_inv_wear_suit() @@ -101,7 +100,6 @@ attached_accessory.on_uniform_dropped(src, user) if(ishuman(user)) var/mob/living/carbon/human/H = user - H.fan_hud_set_fandom() if(attached_accessory.above_suit) H.update_inv_wear_suit() @@ -136,7 +134,6 @@ var/mob/living/carbon/human/H = loc H.update_inv_w_uniform() H.update_inv_wear_suit() - H.fan_hud_set_fandom() return TRUE @@ -158,7 +155,6 @@ var/mob/living/carbon/human/H = loc H.update_inv_w_uniform() H.update_inv_wear_suit() - H.fan_hud_set_fandom() /obj/item/clothing/under/examine(mob/user) diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm index ed1d12be3fcb..76de51b173cd 100644 --- a/code/modules/clothing/under/accessories.dm +++ b/code/modules/clothing/under/accessories.dm @@ -376,45 +376,6 @@ for(var/i in 1 to 3) new /obj/item/lipstick/random(src) -//////////////// -//REAL BIG FAN// -//////////////// - -/obj/item/clothing/accessory/fan_clown_pin - name = "Clown Pin" - desc = "A pin to show off your appreciation for clowns and clowning" - icon_state = "fan_clown_pin" - above_suit = FALSE - minimize_when_attached = TRUE - attachment_slot = CHEST - -/obj/item/clothing/accessory/fan_clown_pin/on_uniform_equip(obj/item/clothing/under/U, user) - var/mob/living/L = user - if(HAS_TRAIT(L, TRAIT_FAN_CLOWN)) - SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "fan_clown_pin", /datum/mood_event/fan_clown_pin) - -/obj/item/clothing/accessory/fan_clown_pin/on_uniform_dropped(obj/item/clothing/under/U, user) - var/mob/living/L = user - if(HAS_TRAIT(L, TRAIT_FAN_CLOWN)) - SEND_SIGNAL(L, COMSIG_CLEAR_MOOD_EVENT, "fan_clown_pin") - -/obj/item/clothing/accessory/fan_mime_pin - name = "Mime Pin" - desc = "A pin to show off your appreciation for mimes and miming" - icon_state = "fan_mime_pin" - above_suit = FALSE - minimize_when_attached = TRUE - attachment_slot = CHEST - -/obj/item/clothing/accessory/fan_mime_pin/on_uniform_equip(obj/item/clothing/under/U, user) - var/mob/living/L = user - if(HAS_TRAIT(L, TRAIT_FAN_MIME)) - SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "fan_mime_pin", /datum/mood_event/fan_mime_pin) - -/obj/item/clothing/accessory/fan_mime_pin/on_uniform_dropped(obj/item/clothing/under/U, user) - var/mob/living/L = user - if(HAS_TRAIT(L, TRAIT_FAN_MIME)) - SEND_SIGNAL(L, COMSIG_CLEAR_MOOD_EVENT, "fan_mime_pin") //////////////// //OONGA BOONGA// diff --git a/code/modules/donator/_donator.dm b/code/modules/donator/_donator.dm index b18dbe8f78b3..dd4df369cfea 100644 --- a/code/modules/donator/_donator.dm +++ b/code/modules/donator/_donator.dm @@ -23,7 +23,7 @@ GLOBAL_PROTECT(donators) /client/proc/do_donator_redemption() set name = "Redeem Donator Reward" - set category = "Donator" + set category = "OOC.Donator" set desc = "Redeem a reward" var/mob/client_mob = mob @@ -38,7 +38,7 @@ GLOBAL_PROTECT(donators) /client/proc/do_donator_wcir() set name = "What Can I Redeem" - set category = "Donator" + set category = "OOC.Donator" set desc = "Currently available redemptions" donator?.what_can_i_redeem(src.mob) diff --git a/code/modules/events/wizard/magicarp.dm b/code/modules/events/wizard/magicarp.dm deleted file mode 100644 index 68a38f0479e1..000000000000 --- a/code/modules/events/wizard/magicarp.dm +++ /dev/null @@ -1,75 +0,0 @@ -/datum/round_event_control/wizard/magicarp //these fish is loaded - name = "Magicarp" - weight = 1 - typepath = /datum/round_event/wizard/magicarp - max_occurrences = 1 - earliest_start = 0 MINUTES - -/datum/round_event/wizard/magicarp - announceWhen = 3 - startWhen = 50 - -/datum/round_event/wizard/magicarp/setup() - startWhen = rand(40, 60) - -/datum/round_event/wizard/magicarp/announce(fake) - priority_announce("Unknown magical entities have been detected near [station_name()], please stand-by.", "Lifesign Alert") - -/datum/round_event/wizard/magicarp/start() - for(var/obj/effect/landmark/carpspawn/C in GLOB.landmarks_list) - if(prob(5)) - new /mob/living/simple_animal/hostile/carp/ranged/chaos(C.loc) - else - new /mob/living/simple_animal/hostile/carp/ranged(C.loc) - -/mob/living/simple_animal/hostile/carp/ranged - name = "magicarp" - desc = "50% magic, 50% carp, 100% horrible." - icon_state = "magicarp" - icon_living = "magicarp" - icon_dead = "magicarp_dead" - icon_gib = "magicarp_gib" - ranged = 1 - retreat_distance = 2 - minimum_distance = 0 //Between shots they can and will close in to nash - projectiletype = /obj/projectile/magic - projectilesound = 'sound/weapons/emitter.ogg' - maxHealth = 50 - health = 50 - gold_core_spawnable = NO_SPAWN - random_color = FALSE - food_type = list() - tame_chance = 0 - bonus_tame_chance = 0 - var/allowed_projectile_types = list(/obj/projectile/magic/change, /obj/projectile/magic/animate, /obj/projectile/magic/resurrection, - /obj/projectile/magic/death, /obj/projectile/magic/teleport, /obj/projectile/magic/door, /obj/projectile/magic/aoe/fireball, - /obj/projectile/magic/spellblade, /obj/projectile/magic/arcane_barrage) - -/mob/living/simple_animal/hostile/carp/ranged/Initialize() - projectiletype = pick(allowed_projectile_types) - . = ..() - -/mob/living/simple_animal/hostile/carp/ranged/chaos - name = "chaos magicarp" - desc = "50% carp, 100% magic, 150% horrible." - color = "#00FFFF" - maxHealth = 75 - health = 75 - gold_core_spawnable = NO_SPAWN - -/mob/living/simple_animal/hostile/carp/ranged/chaos/Shoot() - projectiletype = pick(allowed_projectile_types) - ..() - -/mob/living/simple_animal/hostile/carp/ranged/xenobiology // these are for the xenobio gold slime pool - gold_core_spawnable = HOSTILE_SPAWN - allowed_projectile_types = list(/obj/projectile/magic/animate, /obj/projectile/magic/teleport, - /obj/projectile/magic/door, /obj/projectile/magic/aoe/fireball, /obj/projectile/magic/spellblade, /obj/projectile/magic/arcane_barrage, - /obj/projectile/magic/spell/magic_missile, /obj/projectile/magic/aoe/lightning, /obj/projectile/magic/locker) //thanks Lett1 /finally, we can synthesize the lockerfish - -/mob/living/simple_animal/hostile/carp/ranged/chaos/xenobiology - gold_core_spawnable = HOSTILE_SPAWN - allowed_projectile_types = list(/obj/projectile/magic/change, /obj/projectile/magic/animate, /obj/projectile/magic/resurrection, - /obj/projectile/magic/death, /obj/projectile/magic/teleport, /obj/projectile/magic/door, /obj/projectile/magic/aoe/fireball, - /obj/projectile/magic/spellblade, /obj/projectile/magic/arcane_barrage, /obj/projectile/magic/locker, /obj/projectile/magic/nothing, - /obj/projectile/magic/aoe/lightning, /obj/projectile/magic/necropotence, /obj/projectile/magic/fortify, /obj/projectile/magic/spell/magic_missile)//now THIS is chaos diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 258e9a56217f..ced086e1dfc6 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -525,11 +525,11 @@ GLOBAL_LIST_INIT(hallucination_list, list( /datum/hallucination/delusion var/list/image/delusions = list() -/datum/hallucination/delusion/New(mob/living/carbon/C, forced, force_kind = null , duration = 300,skip_nearby = TRUE, custom_icon = null, custom_icon_file = null, custom_name = null) +/datum/hallucination/delusion/New(mob/living/carbon/C, forced, force_kind = null , duration = rand(30,300),skip_nearby = TRUE, custom_icon = null, custom_icon_file = null, custom_name = null) set waitfor = FALSE . = ..() var/image/A = null - var/kind = force_kind ? force_kind : pick("nothing","monkey","corgi","carp","skeleton","demon","zombie") + var/kind = force_kind ? force_kind : pick("doe","mi-go","carp","hermit","frontiersman","ramzi") feedback_details += "Type: [kind]" var/list/nearby if(skip_nearby) @@ -540,27 +540,24 @@ GLOBAL_LIST_INIT(hallucination_list, list( if(skip_nearby && (H in nearby)) continue switch(kind) - if("nothing") - A = image('icons/effects/effects.dmi',H,"nothing") - A.name = "..." - if("monkey")//Monkey - A = image('icons/mob/monkey.dmi',H,"monkey1") - A.name = "Monkey ([rand(1,999)])" + if("doe")//Doe + A = image('icons/mob/animal.dmi',H,"deer-doe") + A.name = "Doe" if("carp")//Carp A = image('icons/mob/carp.dmi',H,"carp") A.name = "Space Carp" - if("corgi")//Corgi - A = image('icons/mob/pets.dmi',H,"corgi") - A.name = "Corgi" - if("skeleton")//Skeletons - A = image('icons/mob/human.dmi',H,"skeleton") - A.name = "Skeleton" - if("zombie")//Zombies - A = image('icons/mob/human.dmi',H,"zombie") - A.name = "Zombie" - if("demon")//Demon - A = image('icons/mob/mob.dmi',H,"daemon") - A.name = "Demon" + if("mi-go")//Mi-go + A = image('icons/mob/animal.dmi',H,"mi-go") + A.name = "Mi-go" + if("hermit")//Hermit + A = image('icons/mob/simple_human.dmi',H,"survivor_gunslinger") + A.name = "Hermit Soldier" + if("frontiersman")//Frontiersman + A = image('icons/mob/simple_human.dmi',H,"frontiersmanrangedminigun") + A.name = "Frontiersman" + if("ramzi")//Ramzi + A = image('icons/mob/simple_human.dmi',H,"ramzi_base") + A.name = "Ramzi Commando" if("custom") A = image(custom_icon_file, H, custom_icon) A.name = custom_name @@ -568,8 +565,7 @@ GLOBAL_LIST_INIT(hallucination_list, list( if(target.client) delusions |= A target.client.images |= A - if(duration) - QDEL_IN(src, duration) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), src), duration) /datum/hallucination/delusion/Destroy() for(var/image/I in delusions) @@ -580,25 +576,28 @@ GLOBAL_LIST_INIT(hallucination_list, list( /datum/hallucination/self_delusion var/image/delusion -/datum/hallucination/self_delusion/New(mob/living/carbon/C, forced, force_kind = null , duration = 300, custom_icon = null, custom_icon_file = null, wabbajack = TRUE) //set wabbajack to false if you want to use another fake source +/datum/hallucination/self_delusion/New(mob/living/carbon/C, forced, force_kind = null , duration = rand(30,300), custom_icon = null, custom_icon_file = null, wabbajack = TRUE) //set wabbajack to false if you want to use another fake source set waitfor = FALSE ..() var/image/A = null - var/kind = force_kind ? force_kind : pick("monkey","corgi","carp","skeleton","demon","zombie","robot") + var/kind = force_kind ? force_kind : pick("doe","mi-go","carp","hermit","frontiersman","ramzi","pai","robot") feedback_details += "Type: [kind]" switch(kind) - if("monkey")//Monkey - A = image('icons/mob/monkey.dmi',target,"monkey1") + if("doe")//Doe + A = image('icons/mob/animal.dmi',target,"deer-doe") if("carp")//Carp A = image('icons/mob/animal.dmi',target,"carp") - if("corgi")//Corgi - A = image('icons/mob/pets.dmi',target,"corgi") - if("skeleton")//Skeletons - A = image('icons/mob/human.dmi',target,"skeleton") - if("zombie")//Zombies - A = image('icons/mob/human.dmi',target,"zombie") - if("demon")//Demon - A = image('icons/mob/mob.dmi',target,"daemon") + if("mi-go")//Mi-go + A = image('icons/mob/animal.dmi',target,"mi-go") + if("hermit")//Hermit + A = image('icons/mob/simple_human.dmi',target,"survivor_base") + if("frontiersman")//Frontiersman + A = image('icons/mob/simple_human.dmi',target,"frontiersmanranged") + if("ramzi")//Ramzi + A = image('icons/mob/simple_human.dmi',target,"ramzi_base") + if("pai")//pAI + A = image('icons/mob/pai.dmi',target,"repairbot") + target.playsound_local(target,'sound/effects/pai_boot.ogg', 75, 1) if("robot")//Cyborg A = image('icons/mob/robots.dmi',target,"robot") target.playsound_local(target,'sound/voice/liveagain.ogg', 75, 1) @@ -610,7 +609,7 @@ GLOBAL_LIST_INIT(hallucination_list, list( to_chat(target, "...you look down and notice... you aren't the same as you used to be...") delusion = A target.client.images |= A - QDEL_IN(src, duration) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), src), duration) /datum/hallucination/self_delusion/Destroy() if(target.client) diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index 8f88924930f4..d6a281a2b925 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -39,7 +39,7 @@ else M.visible_message("[user] attempts to feed [M] the contents of [src].", \ "[user] attempts to feed you the contents of [src].") - if(!do_mob(user, M)) + if(!do_after(user, target = M)) return if(!reagents || !reagents.total_volume) return // The drink might be empty after the delay, such as by spam-feeding @@ -120,27 +120,36 @@ if(!.) //if the bottle wasn't caught smash(hit_atom, throwingdatum?.thrower, TRUE) -/obj/item/reagent_containers/food/drinks/proc/smash(atom/target, mob/thrower, ranged = FALSE) +/obj/item/reagent_containers/food/drinks/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) + smash() + ..() + +/obj/item/reagent_containers/food/drinks/proc/smash(atom/target = FALSE, mob/thrower = FALSE, ranged = FALSE) if(!isGlass) return - if(QDELING(src) || !target || !(flags_1 & INITIALIZED_1)) //Invalid loc - return - if(bartender_check(target) && ranged) + if(QDELING(src) || !(flags_1 & INITIALIZED_1)) //Invalid loc return - var/obj/item/broken_bottle/B = new (loc) - B.icon_state = icon_state - var/icon/I = new(icon, icon_state) - I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1) - I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0)) - B.icon = I - B.name = "broken [name]" + if(target) + if(bartender_check(target) && ranged) + return + var/obj/item/broken_bottle/smashed_bottle = new (loc) + if(!ranged && thrower) + thrower.put_in_hands(smashed_bottle) + smashed_bottle.icon_state = icon_state + var/icon/new_icon = new(icon, icon_state) + new_icon.Blend(smashed_bottle.broken_outline, ICON_OVERLAY, rand(5), 1) + new_icon.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0)) + smashed_bottle.icon = new_icon + smashed_bottle.name = "broken [name]" if(prob(33)) - var/obj/item/shard/S = new(drop_location()) - target.Bumped(S) + var/obj/item/shard/new_shard = new(drop_location()) + if(target) + target.Bumped(new_shard) playsound(src, "shatter", 70, TRUE) - transfer_fingerprints_to(B) + transfer_fingerprints_to(smashed_bottle) qdel(src) - target.Bumped(B) + if(target) + target.Bumped(smashed_bottle) /obj/item/reagent_containers/food/drinks/bullet_act(obj/projectile/P) . = ..() diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index 4da78a5989a1..c19fd9dd3baa 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -34,39 +34,7 @@ volume = 50 custom_price = 55 -/obj/item/reagent_containers/food/drinks/bottle/smash(mob/living/target, mob/thrower, ranged = FALSE) - if(QDELING(src) || !target || !(flags_1 & INITIALIZED_1)) //Invalid loc - return - //Creates a shattering noise and replaces the bottle with a broken_bottle - if(bartender_check(target) && ranged) - return - var/obj/item/broken_bottle/B = new (loc) - if(!ranged && thrower) - thrower.put_in_hands(B) - B.icon_state = icon_state - - var/icon/I = new('icons/obj/drinks/drinks.dmi', src.icon_state) - I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1) - I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0)) - B.icon = I - - if(isGlass) - if(prob(33)) - var/obj/item/shard/S = new(drop_location()) - target.Bumped(S) - playsound(src, "shatter", 70, TRUE) - else - B.force = 0 - B.throwforce = 0 - B.desc = "A carton with the bottom half burst open. Might give you a papercut." - B.name = "broken [name]" - transfer_fingerprints_to(B) - - qdel(src) - target.Bumped(B) - /obj/item/reagent_containers/food/drinks/bottle/attack(mob/living/target, mob/living/user) - if(!target) return diff --git a/code/modules/food_and_drinks/food/condiment.dm b/code/modules/food_and_drinks/food/condiment.dm index 589e986aaeeb..0adf98ba5666 100644 --- a/code/modules/food_and_drinks/food/condiment.dm +++ b/code/modules/food_and_drinks/food/condiment.dm @@ -79,7 +79,7 @@ else M.visible_message("[user] attempts to feed [M] from [src].", \ "[user] attempts to feed you from [src].") - if(!do_mob(user, M)) + if(!do_after(user, target = M)) return if(!reagents || !reagents.total_volume) return // The condiment might be empty after the delay. @@ -322,14 +322,3 @@ desc = "A delicious oil used in cooking" icon_state = "oliveoil" list_reagents = list(/datum/reagent/consumable/cornoil = 50) - -/obj/item/reagent_containers/food/condiment/pack/sugar - name = "sugar pack" - originalname = "sugar" - list_reagents = list(/datum/reagent/consumable/sugar = 5) - -/obj/item/reagent_containers/food/condiment/pack/creamer - name = "creamer" /// dont laugh you child - originalname = "cream" - list_reagents = list(/datum/reagent/consumable/cream = 5) - diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index 2dd04174ba85..b64d52eea54a 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -126,7 +126,7 @@ All foods are distributed among various categories. Use common sense. "[user] cannot force any more of [src] down your throat!") return FALSE - if(!do_mob(user, M)) + if(!do_after(user, target = M)) return log_combat(user, M, "fed", reagents.log_list()) M.visible_message("[user] forces [M] to eat [src]!", \ diff --git a/code/modules/food_and_drinks/kitchen_machinery/coffeemaker.dm b/code/modules/food_and_drinks/kitchen_machinery/coffeemaker.dm deleted file mode 100644 index bebf3dda83a4..000000000000 --- a/code/modules/food_and_drinks/kitchen_machinery/coffeemaker.dm +++ /dev/null @@ -1,692 +0,0 @@ -#define BEAN_CAPACITY 10 //amount of coffee beans that can fit inside the impressa coffeemaker - -/obj/machinery/coffeemaker - name = "coffeemaker" - desc = "A Modello 3 Coffeemaker that brews coffee and holds it at the perfect temperature of 176 fahrenheit. Made by Piccionaia Home Appliances." - icon = 'icons/obj/machines/coffeemaker.dmi' - icon_state = "coffeemaker_nopot_nocart" - base_icon_state = "coffeemaker" - idle_power_usage = IDLE_DRAW_MINIMAL - active_power_usage = ACTIVE_DRAW_MINIMAL - resistance_flags = FIRE_PROOF | ACID_PROOF - circuit = /obj/item/circuitboard/machine/coffeemaker - var/obj/item/reagent_containers/food/drinks/bottle/coffeepot/coffeepot = null - var/brewing = FALSE - var/brew_time = 20 SECONDS - var/speed = 1 - /// The coffee cartridge to make coffee from. In the future, coffee grounds are like printer ink. - var/obj/item/coffee_cartridge/cartridge = null - /// The type path to instantiate for the coffee cartridge the device initially comes with, eg. /obj/item/coffee_cartridge - var/initial_cartridge = /obj/item/coffee_cartridge - /// The number of cups left - var/coffee_cups = 15 - var/max_coffee_cups = 15 - /// The amount of sugar packets left - var/sugar_packs = 10 - var/max_sugar_packs = 10 - /// The amount of sweetener packets left - var/sweetener_packs = 10 - var/max_sweetener_packs = 10 - /// The amount of creamer packets left - var/creamer_packs = 10 - var/max_creamer_packs = 10 - - var/static/radial_examine = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_examine") - var/static/radial_brew = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_brew") - var/static/radial_eject_pot = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_eject_pot") - var/static/radial_eject_cartridge = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_eject_cartridge") - var/static/radial_take_cup = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_take_cup") - var/static/radial_take_sugar = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_take_sugar") - var/static/radial_take_sweetener = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_take_sweetener") - var/static/radial_take_creamer = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_take_creamer") - -/obj/machinery/coffeemaker/Initialize(mapload) - . = ..() - if(mapload) - coffeepot = new /obj/item/reagent_containers/food/drinks/bottle/coffeepot(src) - cartridge = new /obj/item/coffee_cartridge(src) - -/obj/machinery/coffeemaker/deconstruct() - coffeepot?.forceMove(drop_location()) - cartridge?.forceMove(drop_location()) - return ..() - -/obj/machinery/coffeemaker/Destroy() - QDEL_NULL(coffeepot) - QDEL_NULL(cartridge) - return ..() - -/obj/machinery/coffeemaker/Exited(atom/movable/gone, direction) - . = ..() - if(gone == coffeepot) - coffeepot = null - update_appearance(UPDATE_OVERLAYS) - if(gone == cartridge) - cartridge = null - update_appearance(UPDATE_OVERLAYS) -/obj/machinery/coffeemaker/examine(mob/user) - . = ..() - if(!in_range(user, src) && !issilicon(user) && !isobserver(user)) - . += span_warning("You're too far away to examine [src]'s contents and display!") - return - - if(brewing) - . += span_warning("\The [src] is brewing.") - return - - if(panel_open) - . += span_notice("[src]'s maintenance hatch is open!") - return - - if(coffeepot || cartridge) - . += span_notice("\The [src] contains:") - if(coffeepot) - . += span_notice("- \A [coffeepot].") - if(cartridge) - . += span_notice("- \A [cartridge].") - return - - if(!(machine_stat & (NOPOWER|BROKEN))) - . += "[span_notice("The status display reads:")]\n"+\ - span_notice("- Brewing coffee at [speed*100]%.") - if(coffeepot) - for(var/datum/reagent/consumable/cawfee as anything in coffeepot.reagents.reagent_list) - . += span_notice("- [cawfee.volume] units of coffee in pot.") - if(cartridge) - if(cartridge.charges < 1) - . += span_notice("- grounds cartridge is empty.") - else - . += span_notice("- grounds cartridge has [cartridge.charges] charges remaining.") - - if (coffee_cups >= 1) - . += span_notice("There [coffee_cups == 1 ? "is" : "are"] [coffee_cups] coffee cup[coffee_cups != 1 && "s"] left.") - else - . += span_notice("There are no cups left.") - - if (sugar_packs >= 1) - . += span_notice("There [sugar_packs == 1 ? "is" : "are"] [sugar_packs] packet[sugar_packs != 1 && "s"] of sugar left.") - else - . += span_notice("There is no sugar left.") - - if (sweetener_packs >= 1) - . += span_notice("There [sweetener_packs == 1 ? "is" : "are"] [sweetener_packs] packet[sweetener_packs != 1 && "s"] of sweetener left.") - else - . += span_notice("There is no sweetener left.") - - if (creamer_packs > 1) - . += span_notice("There [creamer_packs == 1 ? "is" : "are"] [creamer_packs] packet[creamer_packs != 1 && "s"] of creamer left.") - else - . += span_notice("There is no creamer left.") - - -/obj/machinery/coffeemaker/update_overlays() - . = ..() - . += overlay_checks() - -/obj/machinery/coffeemaker/proc/overlay_checks() - . = list() - if(coffeepot) - . += "coffeemaker_pot" - if(cartridge) - . += "coffeemaker_cartidge" - return . - -/obj/machinery/coffeemaker/proc/replace_pot(mob/living/user, /obj/item/reagent_containers/food/drinks/bottle/coffeepot) - if(!user) - return FALSE - if(coffeepot) - try_put_in_hand(coffeepot, user) - balloon_alert(user, "replaced pot") - update_appearance(UPDATE_OVERLAYS) - return TRUE - -/obj/machinery/coffeemaker/proc/replace_cartridge(mob/living/user, obj/item/coffee_cartridge/new_cartridge) - if(!user) - return FALSE - if(cartridge) - try_put_in_hand(cartridge, user) - if(new_cartridge) - cartridge = new_cartridge - update_appearance(UPDATE_OVERLAYS) - return TRUE - -/obj/machinery/coffeemaker/wrench_act(mob/living/user, obj/item/tool) - . = ..() - default_unfasten_wrench(user, tool) - return TOOL_ACT_TOOLTYPE_SUCCESS - -/obj/machinery/coffeemaker/attackby(obj/item/attack_item, mob/living/user, params) - //You can only screw open empty grinder - if(!coffeepot && default_deconstruction_screwdriver(user, icon_state, icon_state, attack_item)) - return FALSE - - if(default_deconstruction_crowbar(attack_item)) - return - - if(panel_open) //Can't insert objects when its screwed open - return TRUE - - if (istype(attack_item, /obj/item/reagent_containers/food/drinks/bottle/coffeepot) && !(attack_item.item_flags & ABSTRACT) && attack_item.is_open_container()) - var/obj/item/reagent_containers/food/drinks/bottle/coffeepot/new_pot = attack_item - . = TRUE //no afterattack - if(!user.transferItemToLoc(new_pot, src)) - return TRUE - replace_pot(user, new_pot) - update_appearance(UPDATE_OVERLAYS) - return TRUE //no afterattack - - if (istype(attack_item, /obj/item/reagent_containers/glass/coffee_cup) && !(attack_item.item_flags & ABSTRACT) && attack_item.is_open_container()) - var/obj/item/reagent_containers/glass/coffee_cup/new_cup = attack_item - if(new_cup.reagents.total_volume > 0) - balloon_alert(user, "the cup must be empty!") - return - if(coffee_cups >= max_coffee_cups) - balloon_alert(user, "the cup holder is full!") - return - if(!user.transferItemToLoc(attack_item, src)) - return - coffee_cups++ - update_appearance(UPDATE_OVERLAYS) - return TRUE //no afterattack - - if (istype(attack_item, /obj/item/reagent_containers/food/condiment/pack/sugar)) - var/obj/item/reagent_containers/food/condiment/pack/sugar/new_pack = attack_item - if(new_pack.reagents.total_volume < new_pack.reagents.maximum_volume) - balloon_alert(user, "the pack must be full!") - return - if(sugar_packs >= max_sugar_packs) - balloon_alert(user, "the sugar compartment is full!") - return - if(!user.transferItemToLoc(attack_item, src)) - return - sugar_packs++ - update_appearance(UPDATE_OVERLAYS) - return TRUE //no afterattack - - if (istype(attack_item, /obj/item/reagent_containers/food/condiment/pack/creamer)) - var/obj/item/reagent_containers/food/condiment/pack/creamer/new_pack = attack_item - if(new_pack.reagents.total_volume < new_pack.reagents.maximum_volume) - balloon_alert(user, "the pack must be full!") - return - if(creamer_packs >= max_creamer_packs) - balloon_alert(user, "the creamer compartment is full!") - return - if(!user.transferItemToLoc(attack_item, src)) - return - creamer_packs++ - update_appearance(UPDATE_OVERLAYS) - return TRUE //no afterattack - - if (istype(attack_item, /obj/item/reagent_containers/food/condiment/pack/astrotame)) - var/obj/item/reagent_containers/food/condiment/pack/astrotame/new_pack = attack_item - if(new_pack.reagents.total_volume < new_pack.reagents.maximum_volume) - balloon_alert(user, "the pack must be full!") - return - else if(sweetener_packs >= max_sweetener_packs) - balloon_alert(user, "the sweetener compartment is full!") - return - else if(!user.transferItemToLoc(attack_item, src)) - return - sweetener_packs++ - update_appearance(UPDATE_OVERLAYS) - return TRUE //no afterattack - - if (istype(attack_item, /obj/item/coffee_cartridge) && !(attack_item.item_flags & ABSTRACT)) - var/obj/item/coffee_cartridge/new_cartridge = attack_item - if(!user.transferItemToLoc(new_cartridge, src)) - return - replace_cartridge(user, new_cartridge) - balloon_alert(user, "added cartridge") - update_appearance(UPDATE_OVERLAYS) - return TRUE //no afterattack - -/obj/machinery/coffeemaker/proc/try_brew() - if(!cartridge) - balloon_alert(usr, "no coffee cartridge inserted!") - return FALSE - if(cartridge.charges < 1) - balloon_alert(usr, "coffee cartridge empty!") - return FALSE - if(!coffeepot) - balloon_alert(usr, "no coffeepot inside!") - return FALSE - if(machine_stat & (NOPOWER|BROKEN)) - balloon_alert(usr, "machine unpowered!") - return FALSE - if(coffeepot.reagents.total_volume >= coffeepot.reagents.maximum_volume) - balloon_alert(usr, "the coffeepot is already full!") - return FALSE - return TRUE - -/obj/machinery/coffeemaker/ui_interact(mob/user) // The microwave Menu //I am reasonably certain that this is not a microwave //I am positively certain that this is not a microwave - . = ..() - - if(brewing || panel_open || !anchored || !user.canUseTopic(src, !issilicon(user))) - return - - var/list/options = list() - - if(coffeepot) - options["Eject Pot"] = radial_eject_pot - - if(cartridge) - options["Eject Cartridge"] = radial_eject_cartridge - - options["Brew"] = radial_brew //brew is always available as an option, when the machine is unable to brew the player is told by balloon alerts whats exactly wrong - - if(coffee_cups > 0) - options["Take Cup"] = radial_take_cup - - if(sugar_packs > 0) - options["Take Sugar"] = radial_take_sugar - - if(sweetener_packs > 0) - options["Take Sweetener"] = radial_take_sweetener - - if(creamer_packs > 0) - options["Take Creamer"] = radial_take_creamer - - if(isAI(user)) - if(machine_stat & NOPOWER) - return - options["Examine"] = radial_examine - - var/choice - - if(length(options) < 1) - return - if(length(options) == 1) - choice = options[1] - else - choice = show_radial_menu(user, src, options, require_near = !issilicon(user)) - - // post choice verification - if(brewing || panel_open || !anchored || !user.canUseTopic(src, !issilicon(user))) - return - - switch(choice) - if("Brew") - brew(user) - if("Eject Pot") - eject_pot(user) - if("Eject Cartridge") - eject_cartridge(user) - if("Examine") - examine(user) - if("Take Cup") - take_cup(user) - if("Take Sugar") - take_sugar(user) - if("Take Sweetener") - take_sweetener(user) - if("Take Creamer") - take_creamer(user) - -/obj/machinery/coffeemaker/proc/eject_pot(mob/user) - if(coffeepot) - replace_pot(user) - -/obj/machinery/coffeemaker/proc/eject_cartridge(mob/user) - if(cartridge) - replace_cartridge(user) - -/obj/machinery/coffeemaker/proc/take_cup(mob/user) - if(!coffee_cups) //shouldn't happen, but we all know how stuff manages to break - balloon_alert(user, "no cups left!") - return - var/obj/item/reagent_containers/glass/coffee_cup/new_cup = new(get_turf(src)) - user.put_in_hands(new_cup) - coffee_cups-- - update_appearance(UPDATE_OVERLAYS) - -/obj/machinery/coffeemaker/proc/take_sugar(mob/user) - if(!sugar_packs) - balloon_alert(user, "no sugar left!") - return - var/obj/item/reagent_containers/food/condiment/pack/sugar/new_pack = new(get_turf(src)) - user.put_in_hands(new_pack) - sugar_packs-- - update_appearance(UPDATE_OVERLAYS) - -/obj/machinery/coffeemaker/proc/take_sweetener(mob/user) - if(!sweetener_packs) - balloon_alert(user, "no sweetener left!") - return - var/obj/item/reagent_containers/food/condiment/pack/astrotame/new_pack = new(get_turf(src)) - user.put_in_hands(new_pack) - sweetener_packs-- - update_appearance(UPDATE_OVERLAYS) - -/obj/machinery/coffeemaker/proc/take_creamer(mob/user) - if(!creamer_packs) - balloon_alert(user, "no creamer left!") - return - var/obj/item/reagent_containers/food/condiment/pack/creamer/new_pack = new(drop_location()) - user.put_in_hands(new_pack) - creamer_packs-- - update_appearance(UPDATE_OVERLAYS) - -///Updates the smoke state to something else, setting particles if relevant -/obj/machinery/coffeemaker/proc/toggle_steam() - QDEL_NULL(particles) - if(brewing) - particles.position = list(-6, 0, 0) - -/obj/machinery/coffeemaker/proc/operate_for(time, silent = FALSE) - brewing = TRUE - if(!silent) - playsound(src, 'sound/machines/coffeemaker_brew.ogg', 20, vary = TRUE) - toggle_steam() - set_active_power() - addtimer(CALLBACK(src, PROC_REF(stop_operating)), time / speed) - -/obj/machinery/coffeemaker/proc/stop_operating() - brewing = FALSE - set_idle_power() - toggle_steam() - -/obj/machinery/coffeemaker/proc/brew() - power_change() - if(!try_brew()) - return - operate_for(brew_time) - coffeepot.reagents.add_reagent_list(cartridge.drink_type) - cartridge.charges-- - -//Coffee Cartridges: like toner, but for your coffee! -/obj/item/coffee_cartridge - name = "coffeemaker cartridge- Caffè Generico" - desc = "A coffee cartridge manufactured by Piccionaia Coffee, for use with the Modello 3 system." - icon = 'icons/obj/machines/coffeemaker.dmi' - icon_state = "cartridge_basic" - var/charges = 4 - var/list/drink_type = list(/datum/reagent/consumable/coffee = 120) - -/obj/item/coffee_cartridge/examine(mob/user) - . = ..() - if(charges) - . += span_warning("The cartridge has [charges] portions of grounds remaining.") - else - . += span_warning("The cartridge has no unspent grounds remaining.") - -/obj/item/coffee_cartridge/fancy - name = "coffeemaker cartridge - Caffè Fantasioso" - desc = "A fancy coffee cartridge manufactured by Piccionaia Coffee, for use with the Modello 3 system." - icon_state = "cartridge_blend" - -//Here's the joke before I get 50 issue reports: they're all the same, and that's intentional -/obj/item/coffee_cartridge/fancy/Initialize(mapload) - . = ..() - var/coffee_type = pick("blend", "blue_mountain", "kilimanjaro", "mocha") - switch(coffee_type) - if("blend") - name = "coffeemaker cartridge - Miscela di Piccione" - icon_state = "cartridge_blend" - if("blue_mountain") - name = "coffeemaker cartridge - Montagna Blu" - icon_state = "cartridge_blue_mtn" - if("kilimanjaro") - name = "coffeemaker cartridge - Kilimangiaro" - icon_state = "cartridge_kilimanjaro" - if("mocha") - name = "coffeemaker cartridge - Moka Arabica" - icon_state = "cartridge_mocha" - -/obj/item/coffee_cartridge/decaf - name = "coffeemaker cartridge - Caffè Decaffeinato" - desc = "A decaf coffee cartridge manufactured by Piccionaia Coffee, for use with the Modello 3 system." - icon_state = "cartridge_decaf" - -// no you can't just squeeze the juice bag into a glass! -/obj/item/coffee_cartridge/bootleg - name = "coffeemaker cartridge - Botany Blend" - desc = "A jury-rigged coffee cartridge. Should work with a Modello 3 system, though it might void the warranty." - icon_state = "cartridge_bootleg" - -// blank cartridge for crafting's sake, can be made at the service lathe -/obj/item/blank_coffee_cartridge - name = "blank coffee cartridge" - desc = "A blank coffee cartridge, ready to be filled with coffee paste." - icon = 'icons/obj/machines/coffeemaker.dmi' - icon_state = "cartridge_blank" - -//now, how do you store coffee carts? well, in a rack, of course! -/obj/item/storage/box/coffee_cart_rack - name = "coffeemaker cartridge box" - desc = "A small rack for storing coffeemaker cartridges." - var/cartridge_type = /obj/item/coffee_cartridge - -/obj/item/storage/box/coffee_cart_rack/Initialize(mapload) - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 8 - STR.can_hold = typecacheof(list(/obj/item/coffee_cartridge)) - - -/obj/item/storage/box/coffee_cart_rack/PopulateContents() - for(var/i in 1 to 4) - new cartridge_type(src) - new /obj/item/coffee_cartridge/decaf(src) - new /obj/item/coffee_cartridge/fancy(src) - new /obj/item/coffee_cartridge(src) - -/* - * impressa coffee maker - * its supposed to be a premium line product, so its cargo-only, the board cant be therefore researched - */ - -/obj/machinery/coffeemaker/impressa - name = "impressa coffeemaker" - desc = "An industry-grade Impressa Modello 5 Coffeemaker of the Piccionaia Home Appliances premium coffeemakers product line. Makes coffee from fresh dried whole beans." - icon = 'icons/obj/machines/coffeemaker.dmi' - icon_state = "coffeemaker_impressa" - circuit = /obj/item/circuitboard/machine/coffeemaker/impressa - initial_cartridge = null //no cartridge, just coffee beans - brew_time = 15 SECONDS //industrial grade, its faster than the regular one - density = TRUE - pass_flags = PASSTABLE - /// Current amount of coffee beans stored - var/coffee_amount = 0 - /// List of coffee bean objects are stored - var/list/coffee = list() - -/obj/machinery/coffeemaker/impressa/Initialize(mapload) - . = ..() - if(mapload) - coffeepot = new /obj/item/reagent_containers/food/drinks/bottle/coffeepot(src) - cartridge = null - -/obj/machinery/coffeemaker/impressa/Destroy() - QDEL_NULL(coffeepot) - QDEL_NULL(coffee) - return ..() - -/obj/machinery/coffeemaker/impressa/examine(mob/user) - . = ..() - if(coffee) - . += span_notice("The internal grinder contains [length(coffee)] scoop\s of coffee beans") - -/obj/machinery/coffeemaker/impressa/update_overlays() - . = ..() - . += overlay_checks() - -/obj/machinery/coffeemaker/impressa/overlay_checks() - . = list() - if(coffeepot) - if(coffeepot.reagents.total_volume > 0) - . += "pot_full" - else - . += "pot_empty" - if(coffee_cups > 0) - if(coffee_cups >= max_coffee_cups/3) - if(coffee_cups > max_coffee_cups/1.5) - . += "cups_3" - else - . += "cups_2" - else - . += "cups_1" - if(sugar_packs) - . += "extras_1" - if(creamer_packs) - . += "extras_2" - if(sweetener_packs) - . += "extras_3" - if(coffee_amount) - if(coffee_amount < 0.7*BEAN_CAPACITY) - . += "grinder_half" - else - . += "grinder_full" - return . - -/obj/machinery/coffeemaker/impressa/Exited(atom/movable/gone, direction) - . = ..() - if(gone in coffee) - coffee -= gone - update_appearance(UPDATE_OVERLAYS) - -/obj/machinery/coffeemaker/impressa/try_brew(mob/living/user) - if(coffee_amount <= 0) - balloon_alert(user, "no coffee beans added!") - return FALSE - if(!coffeepot) - balloon_alert(user, "no coffeepot inside!") - return FALSE - if(machine_stat & (NOPOWER|BROKEN)) - balloon_alert(user, "machine unpowered!") - return FALSE - if(coffeepot.reagents.total_volume >= coffeepot.reagents.maximum_volume) - balloon_alert(user, "the coffeepot is already full!") - return FALSE - return TRUE - -/obj/machinery/coffeemaker/impressa/attackby(obj/item/attack_item, mob/living/user, params) - //You can only screw open empty grinder - if(!coffeepot && default_deconstruction_screwdriver(user, icon_state, icon_state, attack_item)) - return - - if(default_deconstruction_crowbar(attack_item)) - return - - if(panel_open) //Can't insert objects when its screwed open - return TRUE - - if (istype(attack_item, /obj/item/reagent_containers/food/drinks/bottle/coffeepot) && !(attack_item.item_flags & ABSTRACT) && attack_item.is_open_container()) - var/obj/item/reagent_containers/food/drinks/bottle/coffeepot/new_pot = attack_item - if(!user.transferItemToLoc(new_pot, src)) - return TRUE - replace_pot(user, new_pot) - update_appearance(UPDATE_OVERLAYS) - return TRUE //no afterattack - - if (istype(attack_item, /obj/item/reagent_containers/glass/coffee_cup) && !(attack_item.item_flags & ABSTRACT) && attack_item.is_open_container()) - var/obj/item/reagent_containers/glass/coffee_cup/new_cup = attack_item //different type of cup - if(new_cup.reagents.total_volume > 0) - balloon_alert(user, "the cup must be empty!") - return - if(coffee_cups >= max_coffee_cups) - balloon_alert(user, "the cup holder is full!") - return - if(!user.transferItemToLoc(attack_item, src)) - return - coffee_cups++ - update_appearance(UPDATE_OVERLAYS) - return TRUE //no afterattack - - if (istype(attack_item, /obj/item/reagent_containers/food/condiment/pack/sugar)) - var/obj/item/reagent_containers/food/condiment/pack/sugar/new_pack = attack_item - if(new_pack.reagents.total_volume < new_pack.reagents.maximum_volume) - balloon_alert(user, "the pack must be full!") - return - if(sugar_packs >= max_sugar_packs) - balloon_alert(user, "the sugar compartment is full!") - return - if(!user.transferItemToLoc(attack_item, src)) - return - sugar_packs++ - update_appearance(UPDATE_OVERLAYS) - return TRUE //no afterattack - - if (istype(attack_item, /obj/item/reagent_containers/food/condiment/pack/creamer)) - var/obj/item/reagent_containers/food/condiment/pack/creamer/new_pack = attack_item - if(new_pack.reagents.total_volume < new_pack.reagents.maximum_volume) - balloon_alert(user, "the pack must be full!") - return - if(creamer_packs >= max_creamer_packs) - balloon_alert(user, "the creamer compartment is full!") - return - if(!user.transferItemToLoc(attack_item, src)) - return - creamer_packs++ - update_appearance(UPDATE_OVERLAYS) - return TRUE //no afterattack - - if (istype(attack_item, /obj/item/reagent_containers/food/condiment/pack/astrotame)) - var/obj/item/reagent_containers/food/condiment/pack/astrotame/new_pack = attack_item - if(new_pack.reagents.total_volume < new_pack.reagents.maximum_volume) - balloon_alert(user, "the pack must be full!") - return - if(sweetener_packs >= max_sweetener_packs) - balloon_alert(user, "the sweetener compartment is full!") - return - if(!user.transferItemToLoc(attack_item, src)) - return - sweetener_packs++ - update_appearance(UPDATE_OVERLAYS) - return TRUE //no afterattack - - if (istype(attack_item, /obj/item/reagent_containers/food/snacks/grown/coffee) && !(attack_item.item_flags & ABSTRACT)) - if(coffee_amount >= BEAN_CAPACITY) - balloon_alert(user, "the coffee container is full!") - return - var/obj/item/reagent_containers/food/snacks/grown/coffee/new_coffee = attack_item - if(!user.transferItemToLoc(new_coffee, src)) - return - coffee += new_coffee - coffee_amount++ - balloon_alert(user, "added coffee") - - - if (istype(attack_item, /obj/item/storage/box/coffeepack)) - if(coffee_amount >= BEAN_CAPACITY) - balloon_alert(user, "the coffee container is full!") - return - var/obj/item/storage/box/coffeepack/new_coffee_pack = attack_item - for(var/obj/item/reagent_containers/food/snacks/grown/coffee/new_coffee in new_coffee_pack.contents) - if(coffee_amount < BEAN_CAPACITY) - if(user.transferItemToLoc(new_coffee, src)) - coffee += new_coffee - coffee_amount++ - new_coffee.forceMove(src) - balloon_alert(user, "added coffee") - update_appearance(UPDATE_OVERLAYS) - else - return - update_appearance(UPDATE_OVERLAYS) - return TRUE //no afterattack - -/obj/machinery/coffeemaker/impressa/take_cup(mob/user) - if(!coffee_cups) //shouldn't happen, but we all know how stuff manages to break - balloon_alert(user, "no cups left!") - return - balloon_alert_to_viewers("took cup") - var/obj/item/reagent_containers/food/drinks/coffee/new_cup = new(get_turf(src)) - user.put_in_hands(new_cup) - coffee_cups-- - update_appearance(UPDATE_OVERLAYS) - -/obj/machinery/coffeemaker/impressa/toggle_steam() - QDEL_NULL(particles) - if(brewing) - particles.position = list(-2, 1, 0) - -/obj/machinery/coffeemaker/impressa/brew() - power_change() - if(!try_brew()) - return - operate_for(brew_time) - coffeepot.reagents.add_reagent_list(list(/datum/reagent/consumable/coffee = 120)) - coffee.Cut(1,2) //remove the first item from the list - coffee_amount-- - update_appearance(UPDATE_OVERLAYS) - -#undef BEAN_CAPACITY diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm index d2e919f00882..5852ea34742b 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm @@ -245,6 +245,7 @@ icon = 'icons/obj/hydroponics/equipment.dmi' icon_state = "drying_rack" use_power = IDLE_POWER_USE + circuit = null idle_power_usage = IDLE_DRAW_MINIMAL active_power_usage = ACTIVE_DRAW_MINIMAL visible_contents = FALSE @@ -258,7 +259,6 @@ /obj/machinery/smartfridge/drying_rack/on_deconstruction() new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) - ..() /obj/machinery/smartfridge/drying_rack/RefreshParts() /obj/machinery/smartfridge/drying_rack/default_deconstruction_screwdriver() diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm index 0d7f403b538d..d0558f94fdb5 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm @@ -152,7 +152,7 @@ /datum/reagent/water = 10, /obj/item/reagent_containers/glass/bowl = 1, /obj/item/reagent_containers/food/snacks/grown/banana = 1, - /obj/item/stack/ore/bananium = 1 + /obj/item/stack/sheet/mineral/hidden/hellstone = 1 ) result = /obj/item/reagent_containers/food/snacks/soup/clownstears subcategory = CAT_SOUP diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 7fa710323207..ed58e86e16dc 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -69,20 +69,19 @@ /obj/item/reagent_containers/food/snacks/grown/attackby(obj/item/O, mob/user, params) ..() if (istype(O, /obj/item/plant_analyzer)) - var/msg = "*---------*\n This is \a [src].\n" + var/msg = "This is \a [src].\n" if(seed) - msg += seed.get_analyzer_text() + msg += "[seed.get_analyzer_text()]\n" var/reag_txt = "" if(seed) for(var/reagent_id in seed.reagents_add) var/datum/reagent/R = GLOB.chemical_reagents_list[reagent_id] var/amt = reagents.get_reagent_amount(reagent_id) - reag_txt += "\n- [R.name]: [amt]" + reag_txt += "- [R.name]: [amt]\n" if(reag_txt) msg += reag_txt - msg += "
*---------*" - to_chat(user, msg) + to_chat(user, examine_block(msg)) else if(seed) for(var/datum/plant_gene/trait/T in seed.genes) diff --git a/code/modules/hydroponics/grown/kudzu.dm b/code/modules/hydroponics/grown/kudzu.dm index a8b9d5f8d034..a93d706a99b9 100644 --- a/code/modules/hydroponics/grown/kudzu.dm +++ b/code/modules/hydroponics/grown/kudzu.dm @@ -39,7 +39,7 @@ /obj/item/seeds/kudzu/attack_self(mob/user) user.visible_message("[user] begins throwing seeds on the ground...") - if(do_after(user, 50, needhand = TRUE, target = user.drop_location(), progress = TRUE)) + if(do_after(user, 50, target = user.drop_location(), progress = TRUE)) plant(user) to_chat(user, "You plant the kudzu. You monster.") diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm index 3ecb34762ae1..f97596c348f2 100644 --- a/code/modules/hydroponics/growninedible.dm +++ b/code/modules/hydroponics/growninedible.dm @@ -35,11 +35,10 @@ /obj/item/grown/attackby(obj/item/O, mob/user, params) ..() if (istype(O, /obj/item/plant_analyzer)) - var/msg = "*---------*\n This is \a [src]\n" + var/msg = "This is \a [src]\n" if(seed) msg += seed.get_analyzer_text() - msg += "" - to_chat(usr, msg) + to_chat(usr, examine_block(msg)) return /obj/item/grown/proc/add_juice() diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 66e4904e64d4..bbfeaeeb5b5a 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -1,3 +1,6 @@ +#define HYDRO_MAX_PEST 10 +#define HYDRO_MAX_WEED 10 +#define HYDRO_MAX_TOXIC 100 /obj/machinery/hydroponics name = "hydroponics tray" icon = 'icons/obj/hydroponics/equipment.dmi' @@ -255,7 +258,7 @@ adjustWeeds(1 / rating) // Weeeeeeeeeeeeeeedddssss - if(weedlevel >= 10 && prob(50)) // At this point the plant is kind of fucked. Weeds can overtake the plant spot. + if(weedlevel >= HYDRO_MAX_WEED && prob(50)) // At this point the plant is kind of fucked. Weeds can overtake the plant spot. if(myseed) if(!myseed.get_gene(/datum/plant_gene/trait/plant_type/weed_hardy) && !myseed.get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism)) // If a normal plant weedinvasion() @@ -551,25 +554,26 @@ else if(istype(O, /obj/item/plant_analyzer)) var/obj/item/plant_analyzer/P_analyzer = O + var/msg = "" if(myseed) if(P_analyzer.scan_mode == PLANT_SCANMODE_STATS) - to_chat(user, examine_block("[myseed.plantname]")) - to_chat(user, examine_block("Plant Age: [age]")) + msg += "[myseed.plantname]\n" + msg += "- Plant Age: [span_notice("[age]\n")]" var/list/text_string = myseed.get_analyzer_text() if(text_string) - to_chat(user, examine_block(text_string)) + msg += "[text_string]\n" if(myseed.reagents_add && P_analyzer.scan_mode == PLANT_SCANMODE_CHEMICALS) - to_chat(user, examine_block("Plant Reagents")) + msg += "Plant Reagents\n" for(var/datum/plant_gene/reagent/Gene in myseed.genes) - to_chat(user, examine_block("- [Gene.get_name()] -")) + msg += "[span_notice("- [Gene.get_name()] -")]\n" else - to_chat(user, examine_block( "No plant found.")) - to_chat(user, examine_block("\nWeed level: [weedlevel] / 10")) - to_chat(user, examine_block("\nPest level: [pestlevel] / 10")) - to_chat(user, examine_block("\nToxicity level: [toxic] / 100")) - to_chat(user, examine_block("\nWater level: [waterlevel] / [maxwater]")) - to_chat(user, examine_block("\nNutrition level: [reagents.total_volume] / [maxnutri]")) - to_chat(user, examine_block("
")) + msg += "No plant found.\n" + msg += "Weed level: [span_notice("[weedlevel] / [HYDRO_MAX_WEED]")]\n" + msg += "Pest level: [span_notice("[pestlevel] / [HYDRO_MAX_PEST]")]\n" + msg += "Toxicity level: [span_notice("[toxic] / [HYDRO_MAX_TOXIC]")]\n" + msg += "Water level: [span_notice("[waterlevel] / [maxwater]")]\n" + msg += "Nutrition level: [span_notice("[reagents.total_volume] / [maxnutri]")]\n" + to_chat(user, examine_block(msg)) return else if(istype(O, /obj/item/cultivator)) @@ -723,13 +727,13 @@ plant_health = clamp(plant_health + adjustamt, 0, myseed.endurance) /obj/machinery/hydroponics/proc/adjustToxic(adjustamt) - toxic = clamp(toxic + adjustamt, 0, 100) + toxic = clamp(toxic + adjustamt, 0, HYDRO_MAX_TOXIC) /obj/machinery/hydroponics/proc/adjustPests(adjustamt) - pestlevel = clamp(pestlevel + adjustamt, 0, 10) + pestlevel = clamp(pestlevel + adjustamt, 0, HYDRO_MAX_PEST) /obj/machinery/hydroponics/proc/adjustWeeds(adjustamt) - weedlevel = clamp(weedlevel + adjustamt, 0, 10) + weedlevel = clamp(weedlevel + adjustamt, 0, HYDRO_MAX_WEED) /obj/machinery/hydroponics/proc/spawnplant() // why would you put strange reagent in a hydro tray you monster I bet you also feed them blood var/list/livingplants = list(/mob/living/simple_animal/hostile/tree, /mob/living/simple_animal/hostile/killertomato) diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 008009a35765..ad24dccff43d 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -390,29 +390,29 @@ /obj/item/seeds/proc/get_analyzer_text() //in case seeds have something special to tell to the analyzer var/text = "" if(!get_gene(/datum/plant_gene/trait/plant_type/weed_hardy) && !get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism) && !get_gene(/datum/plant_gene/trait/plant_type/alien_properties)) - text += "- Plant type: Normal plant\n" + text += "- Plant type: [span_notice("Normal plant\n")]" if(get_gene(/datum/plant_gene/trait/plant_type/weed_hardy)) - text += "- Plant type: Weed. Can grow in nutrient-poor soil.\n" + text += "- Plant type: [span_notice("Weed. Can grow in nutrient-poor soil.\n")]" if(get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism)) - text += "- Plant type: Mushroom. Can grow in dry soil.\n" + text += "- Plant type: [span_notice("Mushroom. Can grow in dry soil.\n")]" if(get_gene(/datum/plant_gene/trait/plant_type/crystal)) - text += "- Plant type: Crystal. Revitalizes soil.\n" + text += "- Plant type: [span_notice("Crystal. Revitalizes soil.\n")]" if(get_gene(/datum/plant_gene/trait/plant_type/alien_properties)) - text += "- Plant type: UNKNOWN \n" + text += "- Plant type: [span_warning("UNKNOWN\n")]" if(potency != UNHARVESTABLE) - text += "- Potency: [potency]\n" + text += "- Potency: [span_notice("[potency]\n")]" if(yield != UNHARVESTABLE) - text += "- Yield: [yield]\n" - text += "- Maturation speed: [maturation]\n" + text += "- Yield: [span_notice("[yield]\n")]" + text += "- Maturation speed: [span_notice("[maturation]\n")]" if(yield != UNHARVESTABLE) - text += "- Production speed: [production]\n" - text += "- Endurance: [endurance]\n" - text += "- Lifespan: [lifespan]\n" - text += "- Instability: [instability]\n" - text += "- Weed Growth Rate: [weed_rate]\n" - text += "- Weed Vulnerability: [weed_chance]\n" + text += "- Production speed: [span_notice("[production]\n")]" + text += "- Endurance: [span_notice("[endurance]\n")]" + text += "- Lifespan: [span_notice("[lifespan]\n")]" + text += "- Instability: [span_notice("[instability]\n")]" + text += "- Weed Growth Rate: [span_notice("[weed_rate]\n")]" + text += "- Weed Vulnerability: [span_notice("[weed_chance]\n")]" if(rarity) - text += "- Species Discovery Value: [rarity]\n" + text += "- Species Discovery Value: [span_notice("[rarity]\n")]" var/all_traits = "" for(var/datum/plant_gene/trait/traits in genes) if(istype(traits, /datum/plant_gene/trait/plant_type)) @@ -427,20 +427,20 @@ /obj/item/seeds/attackby(obj/item/O, mob/user, params) if (istype(O, /obj/item/plant_analyzer)) - to_chat(user, "*---------*\n This is \a [src].") + var/msg = "This is \a [src]." var/text var/obj/item/plant_analyzer/P_analyzer = O if(P_analyzer.scan_mode == PLANT_SCANMODE_STATS) text = get_analyzer_text() if(text) - to_chat(user, "[text]") + msg += "\n[text]" if(reagents_add && P_analyzer.scan_mode == PLANT_SCANMODE_CHEMICALS) - to_chat(user, "- Plant Reagents -") - to_chat(user, "*---------*") + msg += "\n- Plant Reagents -" + msg += "\n*---------*" for(var/datum/plant_gene/reagent/Gene in genes) - to_chat(user, "- [Gene.get_name()] -") - to_chat(user, "*---------*") - + msg += "\n- [Gene.get_name()] -" + msg += "\n*---------*" + to_chat(user, examine_block(msg)) return diff --git a/code/modules/library/lib_codex_gigas.dm b/code/modules/library/lib_codex_gigas.dm index c4263a771b0d..69155c9230d8 100644 --- a/code/modules/library/lib_codex_gigas.dm +++ b/code/modules/library/lib_codex_gigas.dm @@ -48,7 +48,7 @@ correctness = 100 correctness -= U.getOrganLoss(ORGAN_SLOT_BRAIN) * 0.5 //Brain damage makes researching hard. speed += U.getOrganLoss(ORGAN_SLOT_BRAIN) * 3 - if(do_after(user, speed, 0, user)) + if(do_after(user, speed, user, timed_action_flags = IGNORE_HELD_ITEM)) var/usedName = devilName if(!prob(correctness)) usedName += "x" @@ -59,7 +59,7 @@ inUse = FALSE /obj/item/book/codex_gigas/proc/display_devil(datum/antagonist/devil/devil, mob/reader, devilName) - reader << browse("Information on [devilName]


[GLOB.lawlorify[LORE][devil.ban]]
[GLOB.lawlorify[LORE][devil.bane]]
[GLOB.lawlorify[LORE][devil.obligation]]
[GLOB.lawlorify[LORE][devil.banish]]
[devil.ascendable?"This devil may ascend given enough souls.":""]", "window=book[window_size != null ? ";size=[window_size]" : ""]") + reader << browse("Information on [devilName]


[GLOB.lawlorify[LORE][devil.ban]]
[GLOB.lawlorify[LORE][devil.obligation]]
[GLOB.lawlorify[LORE][devil.banish]]
[devil.ascendable?"This devil may ascend given enough souls.":""]", "window=book[window_size != null ? ";size=[window_size]" : ""]") /obj/item/book/codex_gigas/proc/ask_name(mob/reader) ui_interact(reader) diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm index 613a68a2de47..d86cfebf1197 100644 --- a/code/modules/mining/abandoned_crates.dm +++ b/code/modules/mining/abandoned_crates.dm @@ -192,7 +192,7 @@ if(77 to 78) new /obj/item/toy/plush/lizardplushie(src) if(79 to 80) - new /obj/item/stack/sheet/mineral/bananium(src, 10) + new /obj/item/stack/sheet/mineral/hidden/hellstone(src, 10) if(81 to 82) new /obj/item/bikehorn/airhorn(src) if(83 to 84) diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm index 6955bd23d66b..46c20dd02e1b 100644 --- a/code/modules/mining/equipment/explorer_gear.dm +++ b/code/modules/mining/equipment/explorer_gear.dm @@ -10,7 +10,7 @@ max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT heat_protection = CHEST|GROIN|LEGS|ARMS hoodtype = /obj/item/clothing/head/hooded/explorer - armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 10, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 50) + armor = list("melee" = 15, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 50) allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe) resistance_flags = FIRE_PROOF supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION @@ -23,7 +23,7 @@ flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT - armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 10, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 50) + armor = list("melee" = 15, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 50) resistance_flags = FIRE_PROOF /obj/item/clothing/suit/hooded/explorer/Initialize() @@ -166,7 +166,7 @@ max_heat_protection_temperature = (FIRE_SUIT_MAX_TEMP_PROTECT / 2) heat_protection = CHEST|GROIN|LEGS|ARMS hoodtype = /obj/item/clothing/head/hooded/survivor_hood - armor = list("melee" = 15, "bullet" = 10, "laser" = 10, "energy" = 15, "bomb" = 20, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 30) + armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 10, "bomb" = 20, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 30) allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe) resistance_flags = FIRE_PROOF supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION @@ -180,7 +180,7 @@ flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT - armor = list("melee" = 15, "bullet" = 10, "laser" = 10, "energy" = 15, "bomb" = 20, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 30) + armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 10, "bomb" = 20, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 30) resistance_flags = FIRE_PROOF /obj/item/clothing/suit/hooded/survivor/Initialize() diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index 278fccd0fcd1..030e592d80cd 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -24,7 +24,6 @@ light_range = 5 light_on = FALSE custom_price = 800 - var/list/trophies = list() var/charged = TRUE var/charge_time = 15 var/detonation_damage = 20 @@ -41,10 +40,6 @@ AddComponent(/datum/component/butchering, 60, 110) //technically it's huge and bulky, but this provides an incentive to use it AddComponent(/datum/component/two_handed, force_unwielded=0, force_wielded=15) -/obj/item/kinetic_crusher/Destroy() - QDEL_LIST(trophies) - return ..() - /// triggered on wield of two handed item /obj/item/kinetic_crusher/proc/on_wield(obj/item/source, mob/user) wielded = TRUE @@ -57,30 +52,6 @@ . = ..() . += "Induce magnetism in an enemy by striking them with a magnetospheric wave, then hit them in melee to force a waveform collapse for [force + detonation_damage] damage." . += "Does [force + detonation_damage + backstab_bonus] damage if the target is backstabbed, instead of [force + detonation_damage]." - for(var/t in trophies) - var/obj/item/crusher_trophy/T = t - . += "It has \a [T] attached, which causes [T.effect_desc()]." - -/obj/item/kinetic_crusher/attackby(obj/item/I, mob/living/user) - if(I.tool_behaviour == TOOL_CROWBAR) - if(LAZYLEN(trophies)) - var/list/choose_options = list() - for(var/obj/item/crusher_trophy/T in trophies) - choose_options += list(T.name = image(icon = T.icon, icon_state = T.icon_state)) - var/picked_option = show_radial_menu(user, src, choose_options, radius = 38, require_near = TRUE) - if(picked_option) - to_chat(user, "You remove [picked_option].") - I.play_tool_sound(src) - for(var/obj/item/crusher_trophy/T in trophies) - if(T.name == picked_option) - T.remove_from(src, user) - else - to_chat(user, "There are no trophies on [src].") - else if(istype(I, /obj/item/crusher_trophy)) - var/obj/item/crusher_trophy/T = I - T.add_to(src, user) - else - return ..() /obj/item/kinetic_crusher/attack(mob/living/target, mob/living/carbon/user) if(!wielded) @@ -90,10 +61,6 @@ var/datum/status_effect/crusher_damage/C = target.has_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING) var/target_health = target.health ..() - for(var/t in trophies) - if(!QDELETED(target)) - var/obj/item/crusher_trophy/T = t - T.on_melee_hit(target, user) if(!QDELETED(C) && !QDELETED(target)) C.total_damage += target_health - target.health //we did some damage, but let's not assume how much we did @@ -106,9 +73,6 @@ if(!isturf(proj_turf)) return var/obj/projectile/destabilizer/D = new /obj/projectile/destabilizer(proj_turf) - for(var/t in trophies) - var/obj/item/crusher_trophy/T = t - T.on_projectile_fire(D, user) D.preparePixelProjectile(target, user, clickparams) D.firer = user D.hammer_synced = src @@ -125,9 +89,6 @@ return var/datum/status_effect/crusher_damage/C = L.has_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING) var/target_health = L.health - for(var/t in trophies) - var/obj/item/crusher_trophy/T = t - T.on_mark_detonation(target, user) if(!QDELETED(L)) if(!QDELETED(C)) C.total_damage += target_health - L.health //we did some damage, but let's not assume how much we did @@ -186,12 +147,7 @@ /obj/projectile/destabilizer/on_hit(atom/target, blocked = FALSE) if(isliving(target)) var/mob/living/L = target - var/had_effect = (L.has_status_effect(STATUS_EFFECT_CRUSHERMARK)) //used as a boolean - var/datum/status_effect/crusher_mark/CM = L.apply_status_effect(STATUS_EFFECT_CRUSHERMARK, hammer_synced) - if(hammer_synced) - for(var/t in hammer_synced.trophies) - var/obj/item/crusher_trophy/T = t - T.on_mark_application(target, CM, had_effect) + L.apply_status_effect(STATUS_EFFECT_CRUSHERMARK, hammer_synced) var/target_turf = get_turf(target) if(ismineralturf(target_turf)) var/turf/closed/mineral/M = target_turf @@ -199,535 +155,6 @@ M.gets_drilled(firer, TRUE) ..() -//trophies -/obj/item/crusher_trophy - name = "tail spike" - desc = "A strange spike with no usage." - icon = 'icons/obj/lavaland/artefacts.dmi' - icon_state = "tail_spike" - var/bonus_value = 10 //if it has a bonus effect, this is how much that effect is - var/denied_type = /obj/item/crusher_trophy - -/obj/item/crusher_trophy/examine(mob/living/user) - . = ..() - . += "Causes [effect_desc()] when attached to a kinetic crusher." - -/obj/item/crusher_trophy/proc/effect_desc() - return "errors" - -/obj/item/crusher_trophy/attackby(obj/item/A, mob/living/user) - if(istype(A, /obj/item/kinetic_crusher)) - add_to(A, user) - else - ..() - -/obj/item/crusher_trophy/proc/add_to(obj/item/kinetic_crusher/H, mob/living/user) - for(var/t in H.trophies) - var/obj/item/crusher_trophy/T = t - if(istype(T, denied_type) || istype(src, T.denied_type)) - to_chat(user, "You can't seem to attach [src] to [H]. Maybe remove a few trophies?") - return FALSE - if(!user.transferItemToLoc(src, H)) - return - H.trophies += src - to_chat(user, "You attach [src] to [H].") - return TRUE - -/obj/item/crusher_trophy/proc/remove_from(obj/item/kinetic_crusher/H, mob/living/user) - forceMove(get_turf(H)) - H.trophies -= src - return TRUE - -/obj/item/crusher_trophy/proc/on_melee_hit(mob/living/target, mob/living/user) //the target and the user -/obj/item/crusher_trophy/proc/on_projectile_fire(obj/projectile/destabilizer/marker, mob/living/user) //the projectile fired and the user -/obj/item/crusher_trophy/proc/on_mark_application(mob/living/target, datum/status_effect/crusher_mark/mark, had_mark) //the target, the mark applied, and if the target had a mark before -/obj/item/crusher_trophy/proc/on_mark_detonation(mob/living/target, mob/living/user) //the target and the user - -//goliath -/obj/item/crusher_trophy/goliath_tentacle - name = "goliath tentacle" - desc = "A sliced-off goliath tentacle." - icon_state = "goliath_tentacle" - denied_type = /obj/item/crusher_trophy/goliath_tentacle - bonus_value = 5 - var/missing_health_ratio = 0.1 - var/missing_health_desc = 10 - -/obj/item/crusher_trophy/goliath_tentacle/effect_desc() - return "waveform collapse to do [bonus_value] more damage for every [missing_health_desc] health you are missing" - -/obj/item/crusher_trophy/goliath_tentacle/on_mark_detonation(mob/living/target, mob/living/user) - var/missing_health = user.maxHealth - user.health - missing_health *= missing_health_ratio //bonus is active at all times, even if you're above 90 health - missing_health *= bonus_value //multiply the remaining amount by bonus_value - if(missing_health > 0) - target.adjustBruteLoss(missing_health) //and do that much damage - -//ancient goliath -/obj/item/crusher_trophy/elder_tentacle - name = "elder tentacle" - desc = "The barbed tip of a tentacle sliced from an incredibly ancient goliath." - icon_state = "elder_tentacle" - denied_type = /obj/item/crusher_trophy/elder_tentacle - bonus_value = 3 - var/missing_health_ratio = 0.1 - var/missing_health_desc = 5 - icon = 'icons/obj/lavaland/elite_trophies.dmi' - -/obj/item/crusher_trophy/elder_tentacle/examine(mob/user) - . = ..() - . += "Suitable as a trophy for a proto-kinetic crusher." - -/obj/item/crusher_trophy/elder_tentacle/effect_desc() - return "waveform collapse to do [bonus_value] more damage for every [missing_health_desc] health you are missing" - -/obj/item/crusher_trophy/elder_tentacle/on_mark_detonation(mob/living/target, mob/living/user) - var/missing_health = user.maxHealth - user.health - missing_health *= missing_health_ratio //bonus is active at all times, even if you're above 90 health - missing_health *= bonus_value //multiply the remaining amount by bonus_value - if(missing_health > 0) - target.adjustBruteLoss(missing_health) //and do that much damage - -//crystal goliath -/obj/item/crusher_trophy/goliath_crystal - name = "goliath crystal" - desc = "A crystal ripped off from a goliath infected by the strange crystals. You can see the original skin of the goliath deeply embeded in it." - icon_state = "goliath_crystal" - denied_type = /obj/item/crusher_trophy/elder_tentacle - bonus_value = 4 - var/missing_health_ratio = 0.1 - var/missing_health_desc = 5 - -/obj/item/crusher_trophy/goliath_crystal/effect_desc() - return "waveform collapse to stun creatures for [bonus_value*0.1] second\s" - -/obj/item/crusher_trophy/goliath_crystal/on_mark_detonation(mob/living/simple_animal/target, mob/living/user) - if(!ishostile(target)) - return - var/mob/living/simple_animal/hostile/hostile_target = target - var/hostile_ai_status = hostile_target.AIStatus - hostile_target.AIStatus = AI_OFF - addtimer(VARSET_CALLBACK(hostile_target, AIStatus, hostile_ai_status), bonus_value*0.1 SECONDS) - -//watcher -/obj/item/crusher_trophy/watcher_wing - name = "watcher wing" - desc = "A wing ripped from a watcher." - icon_state = "watcher_wing" - denied_type = /obj/item/crusher_trophy/watcher_wing - bonus_value = 5 - -/obj/item/crusher_trophy/watcher_wing/effect_desc() - return "waveform collapse to prevent certain creatures from using certain attacks for [bonus_value*0.1] second\s" - -/obj/item/crusher_trophy/watcher_wing/on_mark_detonation(mob/living/target, mob/living/user) - if(ishostile(target)) - var/mob/living/simple_animal/hostile/H = target - if(H.ranged) //briefly delay ranged attacks - if(H.ranged_cooldown >= world.time) - H.ranged_cooldown += bonus_value - else - H.ranged_cooldown = bonus_value + world.time - -//magmawing watcher -/obj/item/crusher_trophy/magma_wing - name = "magmatic sinew" - desc = "A fuming organ, dropped by beings hotter then lava." - icon_state = "magma_wing" - denied_type = /obj/item/crusher_trophy/magma_wing - gender = NEUTER - bonus_value = 5 - var/deadly_shot = FALSE - -/obj/item/crusher_trophy/magma_wing/effect_desc() - return "waveform collapse to make the next magnetic pulse deal [bonus_value] damage" - -/obj/item/crusher_trophy/magma_wing/examine(mob/user) - . = ..() - . += "Suitable as a trophy for a proto-kinetic crusher." - -/obj/item/crusher_trophy/magma_wing/on_projectile_fire(obj/projectile/destabilizer/marker, mob/living/user) - if(deadly_shot) - marker.name = "superheated [marker.name]" - marker.icon_state = "lava" - marker.damage = bonus_value - marker.nodamage = FALSE - marker.speed = 2 - deadly_shot = FALSE - -/obj/item/crusher_trophy/magma_wing/on_mark_detonation(mob/living/target, mob/living/user) - deadly_shot = TRUE - addtimer(CALLBACK(src, PROC_REF(reset_deadly_shot)), 300, TIMER_UNIQUE|TIMER_OVERRIDE) - -/obj/item/crusher_trophy/magma_wing/proc/reset_deadly_shot() - deadly_shot = FALSE - -//icewing watcher -/obj/item/crusher_trophy/ice_wing - name = "frigid sinew" - desc = "A carefully-preserved freezing organ, dropped by chilling beings." - icon_state = "ice_wing" - bonus_value = 8 - denied_type = /obj/item/crusher_trophy/ice_wing - -/obj/item/crusher_trophy/ice_wing/effect_desc() - return "waveform collapse to prevent certain creatures from using certain attacks for [bonus_value*0.1] second\s" - -/obj/item/crusher_trophy/ice_wing/on_mark_detonation(mob/living/target, mob/living/user) - if(ishostile(target)) - var/mob/living/simple_animal/hostile/H = target - if(H.ranged) //briefly delay ranged attacks - if(H.ranged_cooldown >= world.time) - H.ranged_cooldown += bonus_value - else - H.ranged_cooldown = bonus_value + world.time - -//forgotten watcher -/obj/item/crusher_trophy/watcher_wing_forgotten - name = "forgotten watcher wing" - desc = "A wing with a terminal infection of the strange crystals." - icon_state = "watcher_wing_crystal" - denied_type = /obj/item/crusher_trophy/watcher_wing_forgotten - gender = NEUTER - bonus_value = 20 - var/deadly_shot = FALSE - -/obj/item/crusher_trophy/watcher_wing_forgotten/effect_desc() - return "waveform collapse to make the next magnetic pulse deal [bonus_value] damage" - -/obj/item/crusher_trophy/watcher_wing_forgotten/examine(mob/user) - . = ..() - . += "Suitable as a trophy for a proto-kinetic crusher." - -/obj/item/crusher_trophy/watcher_wing_forgotten/on_projectile_fire(obj/projectile/destabilizer/marker, mob/living/user) - if(deadly_shot) - marker.name = "crystal [marker.name]" - marker.icon_state = "crystal_shard" - marker.damage = bonus_value - marker.nodamage = FALSE - marker.speed = 2 - deadly_shot = FALSE - -/obj/item/crusher_trophy/watcher_wing_forgotten/on_mark_detonation(mob/living/target, mob/living/user) - deadly_shot = TRUE - addtimer(CALLBACK(src, PROC_REF(reset_deadly_shot)), 300, TIMER_UNIQUE|TIMER_OVERRIDE) - -/obj/item/crusher_trophy/watcher_wing_forgotten/proc/reset_deadly_shot() - deadly_shot = FALSE - -//legion -/obj/item/crusher_trophy/legion_skull - name = "legion skull" - desc = "A dead and lifeless legion skull. Could be used in crafting." - icon_state = "legion_skull" - denied_type = /obj/item/crusher_trophy/legion_skull - bonus_value = 3 - -/obj/item/crusher_trophy/legion_skull/examine(mob/user) - . = ..() - . += "Suitable as a trophy for a proto-kinetic crusher." - -/obj/item/crusher_trophy/legion_skull/effect_desc() - return "a kinetic crusher to recharge [bonus_value*0.1] second\s faster" - -/obj/item/crusher_trophy/legion_skull/add_to(obj/item/kinetic_crusher/H, mob/living/user) - . = ..() - if(.) - H.charge_time -= bonus_value - -/obj/item/crusher_trophy/legion_skull/remove_from(obj/item/kinetic_crusher/H, mob/living/user) - . = ..() - if(.) - H.charge_time += bonus_value - -//dwarf legion -/obj/item/crusher_trophy/dwarf_skull - name = "shrunken skull" - desc = "Looks like someone hasn't been drinking their milk. Could be used in crafting." - icon = 'icons/obj/lavaland/elite_trophies.dmi' - icon_state = "shrunk_skull" - denied_type = /obj/item/crusher_trophy/dwarf_skull - bonus_value = 6 - -/obj/item/crusher_trophy/dwarf_skull/effect_desc() - return "a kinetic crusher to recharge [bonus_value*0.1] second\s faster" - -/obj/item/crusher_trophy/dwarf_skull/add_to(obj/item/kinetic_crusher/H, mob/living/user) - . = ..() - if(.) - H.charge_time -= bonus_value - -/obj/item/crusher_trophy/dwarf_skull/remove_from(obj/item/kinetic_crusher/H, mob/living/user) - . = ..() - if(.) - H.charge_time += bonus_value - - -//disfigured legion -/obj/item/crusher_trophy/legion_skull_crystal - name = "disfigured legion skull" - desc = "A dead and lifeless legion skull. The crystals keep it alive, even in agony." - icon_state = "legion_skull_crystal" - denied_type = /obj/item/crusher_trophy/legion_skull_crystal - bonus_value = 1 - -/obj/item/crusher_trophy/legion_skull_crystal/examine(mob/user) - . = ..() - . += "Suitable as a trophy for a proto-kinetic crusher." - -/obj/item/crusher_trophy/legion_skull_crystal/effect_desc() - return "waveform collapse to shoot 3 projectiles that only hits hostile fauna" - -/obj/item/crusher_trophy/legion_skull_crystal/on_mark_detonation(mob/living/target, mob/living/user) - for(var/i in 0 to 5) - var/obj/projectile/projectile_to_shoot = new /obj/projectile/crystalline_crusher(get_turf(src)) - projectile_to_shoot.preparePixelProjectile(get_step(src, pick(GLOB.alldirs)), get_turf(src)) - projectile_to_shoot.firer = user - projectile_to_shoot.fire(i*(360/5)) - return ..() - -/obj/projectile/crystalline_crusher - name = "Crystalline Shard" - icon_state = "crystal_shard" - damage = 25 - damage_type = BRUTE - speed = 3 - -/obj/projectile/crystalline_crusher/on_hit(atom/target, blocked) - . = ..() - var/turf/turf_hit = get_turf(target) - new /obj/effect/temp_visual/goliath_tentacle/crystal/visual_only(turf_hit,firer) - -/obj/projectile/crystalline_crusher/can_hit_target(atom/target, list/passthrough, direct_target, ignore_loc) - if(!(istype(target,/mob/living/simple_animal/hostile/asteroid))) - if(isturf(target)) - return ..() - return FALSE - return ..() - -//blood-drunk hunter -/obj/item/crusher_trophy/miner_eye - name = "eye of a blood-drunk hunter" - desc = "Its pupil is collapsed and turned to mush." - icon_state = "hunter_eye" - denied_type = /obj/item/crusher_trophy/miner_eye - -/obj/item/crusher_trophy/miner_eye/examine(mob/user) - . = ..() - . += "Suitable as a trophy for a proto-kinetic crusher." - -/obj/item/crusher_trophy/miner_eye/effect_desc() - return "waveform collapse to grant stun immunity and 90% damage reduction for 1 second" - -/obj/item/crusher_trophy/miner_eye/on_mark_detonation(mob/living/target, mob/living/user) - user.apply_status_effect(STATUS_EFFECT_BLOODDRUNK) - -//whelp -/obj/item/crusher_trophy/tail_spike - desc = "A spike taken from a young dragon's tail. Sharp enough to stab someone with." - denied_type = /obj/item/crusher_trophy/tail_spike - bonus_value = 5 - force = 10 - throwforce = 15 - throw_speed = 4 - sharpness = IS_SHARP - attack_verb = list("cut", "sliced", "diced") - hitsound = 'sound/weapons/bladeslice.ogg' - -/obj/item/crusher_trophy/tail_spike/effect_desc() - return "waveform collapse to do [bonus_value] damage to nearby creatures and push them back" - -/obj/item/crusher_trophy/tail_spike/on_mark_detonation(mob/living/target, mob/living/user) - for(var/mob/living/L in oview(2, user)) - if(L.stat == DEAD) - continue - playsound(L, 'sound/magic/fireball.ogg', 20, TRUE) - new /obj/effect/temp_visual/fire(L.loc) - addtimer(CALLBACK(src, PROC_REF(pushback), L, user), 1) //no free backstabs, we push AFTER module stuff is done - L.adjustFireLoss(bonus_value, forced = TRUE) - -/obj/item/crusher_trophy/tail_spike/proc/pushback(mob/living/target, mob/living/user) - if(!QDELETED(target) && !QDELETED(user) && (!target.anchored || ismegafauna(target))) //megafauna will always be pushed - step(target, get_dir(user, target)) - -//ash drake -/obj/item/crusher_trophy/ash_spike - desc = "A molten spike taken from an ash drake's tail. Hot to the touch and extremely sharp." - icon = 'icons/obj/lavaland/elite_trophies.dmi' - icon_state = "ash_spike" - denied_type = /obj/item/crusher_trophy/ash_spike - bonus_value = 15 - force = 15 - throwforce = 20 - throw_speed = 4 - sharpness = IS_SHARP - attack_verb = list("cut", "braised", "singed") - hitsound = 'sound/weapons/bladeslice.ogg' - -/obj/item/crusher_trophy/ash_spike/effect_desc() - return "waveform collapse to do [bonus_value] damage to nearby creatures and push them back" - -/obj/item/crusher_trophy/ash_spike/examine(mob/user) - . = ..() - . += "Suitable as a trophy for a proto-kinetic crusher." - -/obj/item/crusher_trophy/ash_spike/on_mark_detonation(mob/living/target, mob/living/user) - for(var/mob/living/L in oview(2, user)) - if(L.stat == DEAD) - continue - playsound(L, 'sound/magic/fireball.ogg', 20, TRUE) - new /obj/effect/temp_visual/fire(L.loc) - addtimer(CALLBACK(src, PROC_REF(pushback), L, user), 1) //no free backstabs, we push AFTER module stuff is done - L.adjustFireLoss(bonus_value, forced = TRUE) - -/obj/item/crusher_trophy/ash_spike/proc/pushback(mob/living/target, mob/living/user) - if(!QDELETED(target) && !QDELETED(user) && (!target.anchored || ismegafauna(target))) //megafauna will always be pushed - step(target, get_dir(user, target)) - -//bubblegum -/obj/item/crusher_trophy/demon_claws - name = "demon claws" - desc = "A set of blood-drenched claws from a massive demon's hand." - icon_state = "demon_claws" - gender = PLURAL - denied_type = /obj/item/crusher_trophy/demon_claws - bonus_value = 10 - var/static/list/damage_heal_order = list(BRUTE, BURN, OXY) - -/obj/item/crusher_trophy/demon_claws/effect_desc() - return "melee hits to do [bonus_value * 0.2] more damage and heal you for [bonus_value * 0.1], with 5X effect on waveform collapse" - -/obj/item/crusher_trophy/demon_claws/add_to(obj/item/kinetic_crusher/H, mob/living/user) - . = ..() - if(.) - H.force += bonus_value * 0.2 - H.detonation_damage += bonus_value * 0.8 - AddComponent(/datum/component/two_handed, force_wielded=(20 + bonus_value * 0.2)) - -/obj/item/crusher_trophy/demon_claws/remove_from(obj/item/kinetic_crusher/H, mob/living/user) - . = ..() - if(.) - H.force -= bonus_value * 0.2 - H.detonation_damage -= bonus_value * 0.8 - AddComponent(/datum/component/two_handed, force_wielded=20) - -/obj/item/crusher_trophy/demon_claws/on_melee_hit(mob/living/target, mob/living/user) - user.heal_ordered_damage(bonus_value * 0.1, damage_heal_order) - -/obj/item/crusher_trophy/demon_claws/on_mark_detonation(mob/living/target, mob/living/user) - user.heal_ordered_damage(bonus_value * 0.4, damage_heal_order) - -//colossus -/obj/item/crusher_trophy/blaster_tubes - name = "blaster tubes" - desc = "The blaster tubes from a colossus's arm." - icon_state = "blaster_tubes" - gender = PLURAL - denied_type = /obj/item/crusher_trophy/blaster_tubes - bonus_value = 15 - var/deadly_shot = FALSE - -/obj/item/crusher_trophy/blaster_tubes/examine(mob/user) - . = ..() - . += "Suitable as a trophy for a proto-kinetic crusher." - -/obj/item/crusher_trophy/blaster_tubes/effect_desc() - return "waveform collapse to make the next magnetic pulse deal [bonus_value] damage but move slower" - -/obj/item/crusher_trophy/blaster_tubes/on_projectile_fire(obj/projectile/destabilizer/marker, mob/living/user) - if(deadly_shot) - marker.name = "ominous [marker.name]" - marker.icon_state = "chronobolt" - marker.damage = bonus_value - marker.nodamage = FALSE - marker.speed = 2 - deadly_shot = FALSE - -/obj/item/crusher_trophy/blaster_tubes/on_mark_detonation(mob/living/target, mob/living/user) - deadly_shot = TRUE - addtimer(CALLBACK(src, PROC_REF(reset_deadly_shot)), 300, TIMER_UNIQUE|TIMER_OVERRIDE) - -/obj/item/crusher_trophy/blaster_tubes/proc/reset_deadly_shot() - deadly_shot = FALSE - -//hierophant -/obj/item/crusher_trophy/vortex_talisman - name = "vortex talisman" - desc = "A glowing trinket that was originally the Hierophant's beacon." - icon_state = "vortex_talisman" - denied_type = /obj/item/crusher_trophy/vortex_talisman - -/obj/item/crusher_trophy/vortex_talisman/effect_desc() - return "waveform collapse to create a barrier you can pass" - -/obj/item/crusher_trophy/vortex_talisman/on_mark_detonation(mob/living/target, mob/living/user) - var/turf/current_location = get_turf(user) - var/area/current_area = current_location.loc - if(current_area.area_flags & NOTELEPORT) - to_chat(user, "[src] fizzles uselessly.") - return - var/turf/T = get_turf(user) - new /obj/effect/temp_visual/hierophant/wall/crusher(T, user) //a wall only you can pass! - var/turf/otherT = get_step(T, turn(user.dir, 90)) - if(otherT) - new /obj/effect/temp_visual/hierophant/wall/crusher(otherT, user) - otherT = get_step(T, turn(user.dir, -90)) - if(otherT) - new /obj/effect/temp_visual/hierophant/wall/crusher(otherT, user) - -/obj/effect/temp_visual/hierophant/wall/crusher - duration = 75 - -//I am afraid of this code. It also does not function(in terms of doing damage to enemies) as of my last test. -/obj/item/crusher_trophy/king_goat - name = "king goat hoof" - desc = "A hoof from the king of all goats, it still glows with a fraction of its original power..." - icon_state = "goat_hoof" //needs a better sprite but I cant sprite . - denied_type = /obj/item/crusher_trophy/king_goat - -/obj/item/crusher_trophy/king_goat/examine(mob/user) - . = ..() - . += "Suitable as a trophy for a proto-kinetic crusher." - -/obj/item/crusher_trophy/king_goat/effect_desc() - return "you also passively recharge pulses 5x as fast while this is equipped and do a decent amount of damage at the cost of dulling the blade" - -/obj/item/crusher_trophy/king_goat/on_projectile_fire(obj/projectile/destabilizer/marker, mob/living/user) - marker.damage = 10 //in my testing only does damage to simple mobs so should be fine to have it high //it does damage to nobody. Please fix -M - -/obj/item/crusher_trophy/king_goat/add_to(obj/item/kinetic_crusher/H, mob/living/user) - . = ..() - if(.) - H.charge_time = 3 - H.AddComponent(/datum/component/two_handed, force_wielded=5) - -/obj/item/crusher_trophy/king_goat/remove_from(obj/item/kinetic_crusher/H, mob/living/user) - . = ..() - if(.) - H.charge_time = 15 - H.AddComponent(/datum/component/two_handed, force_wielded=20) - -/obj/item/crusher_trophy/shiny - name = "shiny nugget" - icon = 'icons/obj/lavaland/elite_trophies.dmi' - desc = "A glimmering nugget of dull metal. As it turns out, the fools were right- pyrite is a far rarer substance than gold in the space age. You could probably sell this for a fair price." - icon_state = "nugget" - gender = PLURAL - denied_type = /obj/item/crusher_trophy/shiny - -/obj/item/crusher_trophy/shiny/effect_desc() - return "empowered butchering chances" - -/obj/item/crusher_trophy/shiny/add_to(obj/item/kinetic_crusher/H, mob/living/user) - . = ..() - if(.) - H.AddComponent(/datum/component/butchering, 60, 210) - -/obj/item/crusher_trophy/shiny/remove_from(obj/item/kinetic_crusher/H, mob/living/user) - . = ..() - if(.) - H.AddComponent(/datum/component/butchering, 60, 110) - //outdated Nanotrasen prototype of the crusher. Incredibly heavy, but the blade was made at a premium. //to alter this I had to duplicate some code, big moment. /obj/item/kinetic_crusher/old icon_state = "crusherold" @@ -820,16 +247,3 @@ . = ..() if(wielded) . += "[icon_state]_lit" - -/obj/item/crusher_trophy/lobster_claw - name = "lobster claw" - icon_state = "lobster_claw" - desc = "A lobster claw." - denied_type = /obj/item/crusher_trophy/lobster_claw - bonus_value = 1 - -/obj/item/crusher_trophy/lobster_claw/effect_desc() - return "mark detonation to briefly stagger the target for [bonus_value] seconds" - -/obj/item/crusher_trophy/lobster_claw/on_mark_detonation(mob/living/target, mob/living/user) - target.apply_status_effect(/datum/status_effect/stagger, bonus_value SECONDS) diff --git a/code/modules/mining/equipment/mining_tools.dm b/code/modules/mining/equipment/mining_tools.dm index ed8be5000a66..d38a3ce8b55b 100644 --- a/code/modules/mining/equipment/mining_tools.dm +++ b/code/modules/mining/equipment/mining_tools.dm @@ -53,6 +53,7 @@ force = 19 custom_price = 1500 custom_premium_price = 2000 + custom_materials = list(/datum/material/diamond=2000) /obj/item/pickaxe/drill name = "mining drill" @@ -81,6 +82,7 @@ toolspeed = 0.2 desc = "EXOCOM's improvement on the NT autodrill design, featuring a premium diamond cutting head. Yours is the drill that will pierce the heavens!" force = 20 + custom_materials = list(/datum/material/diamond=2000) /obj/item/pickaxe/drill/cyborg/diamond //This is the BORG version! name = "diamond-tipped integrated mining drill" //To inherit the NODROP_1 flag, and easier to change borg specific drill mechanics. diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index 817970a00602..7ba30d327444 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -315,10 +315,6 @@ /obj/item/hierophant_club, /obj/item/gun/energy/minigun, /obj/item/gun/ballistic/automatic/hmg/l6_saw, - /obj/item/gun/magic/staff/chaos, - /obj/item/gun/magic/staff/spellblade, - /obj/item/gun/magic/wand/death, - /obj/item/gun/magic/wand/fireball, /obj/item/stack/telecrystal/twenty, /obj/item/nuke_core, /obj/item/phylactery, diff --git a/code/modules/mining/equipment/trophies.dm b/code/modules/mining/equipment/trophies.dm new file mode 100644 index 000000000000..a9631c7ffc15 --- /dev/null +++ b/code/modules/mining/equipment/trophies.dm @@ -0,0 +1,184 @@ +//trophies +/obj/item/mob_trophy + name = "tail spike" + desc = "A strange spike with no usage." + icon = 'icons/obj/lavaland/artefacts.dmi' + icon_state = "tail_spike" + +//legion +/obj/item/mob_trophy/legion_skull + name = "legion skull" + desc = "A dead and lifeless legion skull. Could be used in crafting." + icon_state = "legion_skull" + +/obj/item/mob_trophy/wolf_ear + name = "wolf ear" + desc = "The battered remains of a wolf's ear. You could attach it to a crusher, or use the fur to craft a trophy." + icon = 'icons/obj/lavaland/elite_trophies.dmi' + icon_state = "torn_ear" + +/obj/item/mob_trophy/fang + name = "battle-stained fang" + desc = "A wolf fang, displaying the wear and tear associated with a long and colorful life. Could be attached to a kinetic crusher or used to make a trophy." + icon = 'icons/obj/lavaland/elite_trophies.dmi' + icon_state = "fang" + +/* +//goliath +/obj/item/mob_trophy/goliath_tentacle + name = "goliath tentacle" + desc = "A sliced-off goliath tentacle." + icon_state = "goliath_tentacle" + +//ancient goliath0 +/obj/item/mob_trophy/elder_tentacle + name = "elder tentacle" + desc = "The barbed tip of a tentacle sliced from an incredibly ancient goliath." + icon_state = "elder_tentacle" + icon = 'icons/obj/lavaland/elite_trophies.dmi' + +//crystal goliath +/obj/item/mob_trophy/goliath_crystal + name = "goliath crystal" + desc = "A crystal ripped off from a goliath infected by the strange crystals. You can see the original skin of the goliath deeply embeded in it." + icon_state = "goliath_crystal" + +//watcher +/obj/item/mob_trophy/watcher_wing + name = "watcher wing" + desc = "A wing ripped from a watcher." + icon_state = "watcher_wing" + +//magmawing watcher +/obj/item/mob_trophy/magma_wing + name = "magmatic sinew" + desc = "A fuming organ, dropped by beings hotter then lava." + icon_state = "magma_wing" + gender = NEUTER + +//icewing watcher +/obj/item/mob_trophy/ice_wing + name = "frigid sinew" + desc = "A carefully-preserved freezing organ, dropped by chilling beings." + icon_state = "ice_wing" + +//forgotten watcher +/obj/item/mob_trophy/watcher_wing_forgotten + name = "forgotten watcher wing" + desc = "A wing with a terminal infection of the strange crystals." + icon_state = "watcher_wing_crystal" + gender = NEUTER + +//dwarf legion +/obj/item/mob_trophy/dwarf_skull + name = "shrunken skull" + desc = "Looks like someone hasn't been drinking their milk. Could be used in crafting." + icon = 'icons/obj/lavaland/elite_trophies.dmi' + icon_state = "shrunk_skull" + +//disfigured legion +/obj/item/mob_trophy/legion_skull_crystal + name = "disfigured legion skull" + desc = "A dead and lifeless legion skull. The crystals keep it alive, even in agony." + icon_state = "legion_skull_crystal" + +//blood-drunk hunter +/obj/item/mob_trophy/miner_eye + name = "eye of a blood-drunk hunter" + desc = "Its pupil is collapsed and turned to mush." + icon_state = "hunter_eye" + +//whelp +/obj/item/mob_trophy/tail_spike + desc = "A spike taken from a young dragon's tail. Sharp enough to stab someone with." + force = 10 + throwforce = 15 + throw_speed = 4 + sharpness = IS_SHARP + attack_verb = list("cut", "sliced", "diced") + hitsound = 'sound/weapons/bladeslice.ogg' + +//ash drake +/obj/item/mob_trophy/ash_spike + desc = "A molten spike taken from an ash drake's tail. Hot to the touch and extremely sharp." + icon = 'icons/obj/lavaland/elite_trophies.dmi' + icon_state = "ash_spike" + force = 15 + throwforce = 20 + throw_speed = 4 + sharpness = IS_SHARP + attack_verb = list("cut", "braised", "singed") + hitsound = 'sound/weapons/bladeslice.ogg' + +//bubblegum +/obj/item/mob_trophy/demon_claws + name = "demon claws" + desc = "A set of blood-drenched claws from a massive demon's hand." + icon_state = "demon_claws" + gender = PLURAL + +//colossus +/obj/item/mob_trophy/blaster_tubes + name = "blaster tubes" + desc = "The blaster tubes from a colossus's arm." + icon_state = "blaster_tubes" + gender = PLURAL + +//hierophant +/obj/item/mob_trophy/vortex_talisman + name = "vortex talisman" + desc = "A glowing trinket that was originally the Hierophant's beacon." + icon_state = "vortex_talisman" + +// Broodmother's loot: Broodmother Tongue +/obj/item/mob_trophy/broodmother_tongue + name = "broodmother tongue" + desc = "The tongue of a broodmother. If attached a certain way, makes for a suitable crusher trophy." + icon = 'icons/obj/lavaland/elite_trophies.dmi' + icon_state = "broodmother_tongue" + +/obj/item/mob_trophy/shiny + name = "shiny nugget" + icon = 'icons/obj/lavaland/elite_trophies.dmi' + desc = "A glimmering nugget of dull metal. As it turns out, the fools were right- pyrite is a far rarer substance than gold in the space age. You could probably sell this for a fair price." + icon_state = "nugget" + gender = PLURAL + +/obj/item/mob_trophy/lobster_claw + name = "lobster claw" + icon_state = "lobster_claw" + desc = "A lobster claw." + +/obj/item/mob_trophy/ice_block_talisman + name = "ice block talisman" + desc = "A glowing trinket that a demonic miner had on him, it seems he couldn't utilize it for whatever reason." + icon_state = "freeze_cube" + +/obj/item/mob_trophy/brimdemon_fang + name = "brimdemon's fang" + icon_state = "brimdemon_fang" + desc = "A fang from a brimdemon's corpse." + +/obj/item/mob_trophy/ice_crystal + name = "frost gem" + icon = 'icons/obj/lavaland/elite_trophies.dmi' + desc = "The glowing remnant of an ancient ice demon- so cold that it hurts to touch." + icon_state = "ice_crystal" + +/obj/item/mob_trophy/lobster_claw + name = "lobster claw" + icon_state = "lobster_claw" + desc = "A lobster claw." + +/obj/item/mob_trophy/bear_paw + name = "polar bear paw" + desc = "It's a polar bear paw." + icon_state = "bear_paw" + icon ='icons/obj/lavaland/elite_trophies.dmi' + +/obj/item/mob_trophy/war_paw + name = "Armored bear paw" + desc = "It's a paw from a true warrior. Still remembers the basics of CQB." + icon_state = "armor_paw" + icon ='icons/obj/lavaland/elite_trophies.dmi' +*/ diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 42cc2a74d6a4..7b80559d2691 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -66,8 +66,6 @@ new /obj/item/wisp_lantern(src) if(20) new /obj/item/immortality_talisman(src) - if(21) - new /obj/item/gun/magic/hook(src) if(22) new /obj/item/voodoo(src) if(23) @@ -143,8 +141,6 @@ new /obj/item/wisp_lantern(src) if(20) new /obj/item/immortality_talisman(src) - if(21) - new /obj/item/gun/magic/hook(src) if(22) new /obj/item/voodoo(src) if(23) @@ -481,91 +477,6 @@ /obj/effect/warp_cube/ex_act(severity, target) return -//Meat Hook -/obj/item/gun/magic/hook - name = "meat hook" - desc = "A light hooked blade, attached by the handle to a long chain. Can be used to make quick strikes in hand, or thrown at enemies, magically dragging them to the user. Get over here!" - ammo_type = /obj/item/ammo_casing/magic/hook - icon_state = "hook" - item_state = "hook" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - fire_sound = 'sound/weapons/batonextend.ogg' - max_charges = 1 - item_flags = NEEDS_PERMIT - force = 15 - sharpness = IS_SHARP - block_chance = 5//A pittance, but might be worth something in a scuffle - hitsound = 'sound/weapons/chainhit.ogg' - -/obj/item/gun/magic/hook/melee_attack_chain(mob/user, atom/target, params) - ..() - user.changeNext_move(CLICK_CD_MELEE * 0.5)//quick to swing. 15 force can be quite something with this attack frequency. - -/obj/item/gun/magic/hook/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 15, 130, 0, hitsound) - -/obj/item/ammo_casing/magic/hook - name = "hook" - desc = "A hook." - projectile_type = /obj/projectile/hook - caliber = "hook" - icon_state = "arrow" - -/obj/projectile/hook - name = "hook" - icon_state = "hook" - icon = 'icons/obj/lavaland/artefacts.dmi' - pass_flags = PASSTABLE - damage = 20 - stamina = 20 - armour_penetration = 60 - damage_type = BRUTE - hitsound = 'sound/effects/splat.ogg' - var/chain - var/knockdown_time = (0.5 SECONDS) - -/obj/projectile/hook/fire(setAngle) - if(firer) - chain = firer.Beam(src, icon_state = "chain", emissive = FALSE) - ..() - //TODO: root the firer until the chain returns - -/obj/projectile/hook/on_hit(atom/target) - . = ..() - if(ismovable(target)) - var/atom/movable/A = target - if(A.anchored) - return - A.visible_message("[A] is snagged by [firer]'s hook!") - new /datum/forced_movement(A, get_turf(firer), 5, TRUE) - if (isliving(target)) - var/mob/living/fresh_meat = target - fresh_meat.Knockdown(knockdown_time) - return - //TODO: keep the chain beamed to A - //TODO: needs a callback to delete the chain - -/obj/projectile/hook/Destroy() - qdel(chain) - return ..() - -//just a nerfed version of the real thing for the bounty hunters. -/obj/item/gun/magic/hook/bounty - name = "hook" - ammo_type = /obj/item/ammo_casing/magic/hook/bounty - -/obj/item/gun/magic/hook/bounty/shoot_with_empty_chamber(mob/living/user) - to_chat(user, "The [src] isn't ready to fire yet!") - -/obj/item/ammo_casing/magic/hook/bounty - projectile_type = /obj/projectile/hook/bounty - -/obj/projectile/hook/bounty - damage = 0 - stamina = 40 - //Immortality Talisman: Now with state-of-the-art panic button technology /obj/item/immortality_talisman name = "\improper Immortality Talisman" @@ -882,6 +793,39 @@ walk(hit_mob, 0) //stops them mid pathing even if they're stunimmune hit_mob.apply_status_effect(/datum/status_effect/ice_block_talisman, 5 SECONDS) +/datum/status_effect/ice_block_talisman + id = "ice_block_talisman" + duration = 40 + status_type = STATUS_EFFECT_REFRESH + alert_type = /atom/movable/screen/alert/status_effect/ice_block_talisman + /// Stored icon overlay for the hit mob, removed when effect is removed + var/icon/cube + +/atom/movable/screen/alert/status_effect/ice_block_talisman + name = "Frozen Solid" + desc = "You're frozen inside an ice cube, and cannot move!" + icon_state = "frozen" + +/datum/status_effect/ice_block_talisman/on_apply() + RegisterSignal(owner, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(owner_moved)) + if(!owner.stat) + to_chat(owner, "You become frozen in a cube!") + cube = icon('icons/effects/freeze.dmi', "ice_cube") + var/icon/size_check = icon(owner.icon, owner.icon_state) + cube.Scale(size_check.Width(), size_check.Height()) + owner.add_overlay(cube) + return ..() + +/// Blocks movement from the status effect owner +/datum/status_effect/ice_block_talisman/proc/owner_moved() + return COMPONENT_MOVABLE_BLOCK_PRE_MOVE + +/datum/status_effect/ice_block_talisman/on_remove() + if(!owner.stat) + to_chat(owner, "The cube melts!") + owner.cut_overlay(cube) + UnregisterSignal(owner, COMSIG_MOVABLE_PRE_MOVE) + //earthquake gauntlets /obj/item/clothing/gloves/gauntlets name = "concussive gauntlets" @@ -924,6 +868,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!" @@ -932,11 +877,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) @@ -1270,17 +1214,9 @@ new /obj/item/lava_staff(src) if(3) new /obj/item/book/granter/spell/sacredflame(src) - new /obj/item/gun/magic/wand/fireball(src) if(4) new /obj/item/dragons_blood(src) -/obj/structure/closet/crate/necropolis/dragon/crusher - name = "firey dragon chest" - -/obj/structure/closet/crate/necropolis/dragon/crusher/PopulateContents() - ..() - new /obj/item/crusher_trophy/ash_spike(src) - /obj/item/melee/ghost_sword name = "\improper spectral blade" desc = "A rusted and dulled blade. It doesn't look like it'd do much damage. It glows weakly." @@ -1493,21 +1429,12 @@ /obj/structure/closet/crate/necropolis/bubblegum/PopulateContents() new /obj/item/clothing/suit/space/hostile_environment(src) new /obj/item/clothing/head/helmet/space/hostile_environment(src) - var/loot = rand(1,3) + var/loot = rand(1,2) switch(loot) if(1) new /obj/item/mayhem(src) if(2) new /obj/item/blood_contract(src) - if(3) - new /obj/item/gun/magic/staff/spellblade(src) - -/obj/structure/closet/crate/necropolis/bubblegum/crusher - name = "bloody bubblegum chest" - -/obj/structure/closet/crate/necropolis/bubblegum/crusher/PopulateContents() - ..() - new /obj/item/crusher_trophy/demon_claws(src) /obj/item/mayhem name = "mayhem in a bottle" @@ -1584,13 +1511,6 @@ new random_crystal(src) new /obj/item/organ/vocal_cords/colossus(src) -/obj/structure/closet/crate/necropolis/colossus/crusher - name = "angelic colossus chest" - -/obj/structure/closet/crate/necropolis/colossus/crusher/PopulateContents() - ..() - new /obj/item/crusher_trophy/blaster_tubes(src) - //Hierophant /obj/item/hierophant_club name = "hierophant club" diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 74d35e830a7e..0ae29ca8ee54 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -143,7 +143,7 @@ /obj/machinery/mineral/processing_unit/Initialize() . = ..() proximity_monitor = new(src, 1) - AddComponent(/datum/component/material_container, list(/datum/material/iron, /datum/material/glass, /datum/material/silver, /datum/material/gold, /datum/material/diamond, /datum/material/plasma, /datum/material/uranium, /datum/material/bananium, /datum/material/titanium, /datum/material/bluespace), INFINITY, TRUE, /obj/item/stack) + AddComponent(/datum/component/material_container, list(/datum/material/iron, /datum/material/glass, /datum/material/silver, /datum/material/gold, /datum/material/diamond, /datum/material/plasma, /datum/material/uranium, /datum/material/hellstone, /datum/material/titanium, /datum/material/bluespace), INFINITY, TRUE, /obj/item/stack) stored_research = new /datum/techweb/specialized/autounlocking/smelter selected_material = SSmaterials.GetMaterialRef(/datum/material/iron) diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm index fd36a4bb4ab1..d0704887b4ea 100644 --- a/code/modules/mining/machine_redemption.dm +++ b/code/modules/mining/machine_redemption.dm @@ -17,7 +17,7 @@ var/points = 0 var/ore_multiplier = 1 var/point_upgrade = 1 - var/list/ore_values = list(/datum/material/iron = 1, /datum/material/glass = 1, /datum/material/plasma = 15, /datum/material/silver = 16, /datum/material/gold = 18, /datum/material/titanium = 30, /datum/material/uranium = 30, /datum/material/diamond = 50, /datum/material/bluespace = 50, /datum/material/bananium = 60) + var/list/ore_values = list(/datum/material/iron = 1, /datum/material/glass = 1, /datum/material/plasma = 15, /datum/material/silver = 16, /datum/material/gold = 18, /datum/material/titanium = 30, /datum/material/uranium = 30, /datum/material/diamond = 50, /datum/material/bluespace = 50) /// Variable that holds a timer which is used for callbacks to `send_console_message()`. Used for preventing multiple calls to this proc while the ORM is eating a stack of ores. var/console_notify_timer var/datum/techweb/stored_research diff --git a/code/modules/mining/machine_silo.dm b/code/modules/mining/machine_silo.dm index 788d1c102f75..444e72992685 100644 --- a/code/modules/mining/machine_silo.dm +++ b/code/modules/mining/machine_silo.dm @@ -22,7 +22,6 @@ GLOBAL_LIST_EMPTY(silo_access_logs) /datum/material/diamond, /datum/material/plasma, /datum/material/uranium, - /datum/material/bananium, /datum/material/titanium, /datum/material/bluespace, /datum/material/plastic, diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm index 707d68a871f7..cc2a9f176c70 100644 --- a/code/modules/mining/minebot.dm +++ b/code/modules/mining/minebot.dm @@ -33,7 +33,7 @@ wanted_objects = list( /obj/item/stack/ore/diamond, /obj/item/stack/ore/gold, /obj/item/stack/ore/silver, /obj/item/stack/ore/plasma, /obj/item/stack/ore/uranium, /obj/item/stack/ore/iron, - /obj/item/stack/ore/bananium, /obj/item/stack/ore/titanium) + /obj/item/stack/ore/hellstone, /obj/item/stack/ore/titanium) healable = 0 loot = list(/obj/effect/decal/cleanable/robot_debris) del_on_death = TRUE diff --git a/code/modules/mining/mint.dm b/code/modules/mining/mint.dm index 33117d99c518..79c2f0d52208 100644 --- a/code/modules/mining/mint.dm +++ b/code/modules/mining/mint.dm @@ -24,11 +24,8 @@ /datum/material/uranium, /datum/material/titanium, /datum/material/diamond, - /datum/material/bananium, - /datum/material/adamantine, - /datum/material/mythril, /datum/material/plastic, - /datum/material/runite + /datum/material/hellstone, ), MINERAL_MATERIAL_AMOUNT * 75, FALSE, /obj/item/stack) chosen = SSmaterials.GetMaterialRef(chosen) diff --git a/code/modules/mining/money_bag.dm b/code/modules/mining/money_bag.dm index 46011ae8ec7e..2c8ac19a353a 100644 --- a/code/modules/mining/money_bag.dm +++ b/code/modules/mining/money_bag.dm @@ -26,4 +26,4 @@ new /obj/item/coin/silver(src) new /obj/item/coin/gold(src) new /obj/item/coin/gold(src) - new /obj/item/coin/adamantine(src) + new /obj/item/coin/hellstone(src) diff --git a/code/modules/mining/ore_veins.dm b/code/modules/mining/ore_veins.dm index 3e5e20053a77..0df6cd187d03 100644 --- a/code/modules/mining/ore_veins.dm +++ b/code/modules/mining/ore_veins.dm @@ -209,3 +209,36 @@ GLOBAL_LIST_EMPTY(ore_veins) ) max_mobs = 6 spawn_time = 80 + +// Asteroid veins are the same as the base planetary ones yield wise, but with the asteroid mobs. + +/obj/structure/vein/asteroid + mob_types = list( + /mob/living/simple_animal/hostile/asteroid/goliath = 60, + /mob/living/simple_animal/hostile/asteroid/basilisk = 30, + /mob/living/simple_animal/hostile/asteroid/hivelord = 30, + /mob/living/simple_animal/hostile/asteroid/brimdemon = 20, + /mob/living/simple_animal/hostile/carp = 20, + ) + +/obj/structure/vein/classtwo/asteroid + mob_types = list( + /mob/living/simple_animal/hostile/asteroid/goliath = 60, + /mob/living/simple_animal/hostile/asteroid/basilisk = 30, + /mob/living/simple_animal/hostile/asteroid/hivelord = 30, + /mob/living/simple_animal/hostile/asteroid/brimdemon = 20, + /mob/living/simple_animal/hostile/carp = 20, + /mob/living/simple_animal/hostile/carp/megacarp = 15, + /mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient = 5 + ) + +/obj/structure/vein/classthree/asteroid + mob_types = list( + /mob/living/simple_animal/hostile/asteroid/goliath = 60, + /mob/living/simple_animal/hostile/asteroid/basilisk = 30, + /mob/living/simple_animal/hostile/asteroid/hivelord = 30, + /mob/living/simple_animal/hostile/asteroid/brimdemon = 20, + /mob/living/simple_animal/hostile/carp/megacarp = 20, + /mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient = 10 + ) + diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index ec971ed84bed..1dfe590cac0a 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -217,16 +217,6 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ mine_experience = 10 scan_state = "rock_Diamond" -/obj/item/stack/ore/bananium - name = "bananium ore" - icon_state = "Bananium ore" - item_state = "Bananium ore" - singular_name = "bananium ore chunk" - points = 60 - custom_materials = list(/datum/material/bananium=MINERAL_MATERIAL_AMOUNT) - refined_type = /obj/item/stack/sheet/mineral/bananium - mine_experience = 15 - scan_state = "rock_Bananium" /obj/item/stack/ore/titanium name = "titanium ore" @@ -240,6 +230,16 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ scan_state = "rock_Titanium" spreadChance = 5 +/obj/item/stack/ore/hellstone + name = "hellstone ore" + icon_state = "hellstone-ore" + item_state = "hellstone-ore" + singular_name = "hellstone ore chunk" + resistance_flags = LAVA_PROOF + points = 50 + custom_materials = list(/datum/material/hellstone=MINERAL_MATERIAL_AMOUNT) + refined_type = /obj/item/stack/sheet/mineral/hidden/hellstone + /obj/item/stack/ore/slag name = "slag" desc = "Completely useless." @@ -458,20 +458,11 @@ GLOBAL_LIST_INIT(sand_recipes, list(\ /obj/item/coin/titanium custom_materials = list(/datum/material/titanium = 400) -/obj/item/coin/bananium - custom_materials = list(/datum/material/bananium = 400) - -/obj/item/coin/adamantine - custom_materials = list(/datum/material/adamantine = 400) - -/obj/item/coin/mythril - custom_materials = list(/datum/material/mythril = 400) - /obj/item/coin/plastic custom_materials = list(/datum/material/plastic = 400) -/obj/item/coin/runite - custom_materials = list(/datum/material/runite = 400) +/obj/item/coin/hellstone + custom_materials = list(/datum/material/hellstone = 400) /obj/item/coin/twoheaded desc = "Hey, this coin's the same on both sides!" diff --git a/code/modules/mob/dead/crew_manifest.dm b/code/modules/mob/dead/crew_manifest.dm index c7ca52968f86..da742342218c 100644 --- a/code/modules/mob/dead/crew_manifest.dm +++ b/code/modules/mob/dead/crew_manifest.dm @@ -4,7 +4,7 @@ return GLOB.always_state /datum/crew_manifest/ui_status(mob/user, datum/ui_state/state) - return (isnewplayer(user) || isobserver(user) || isAI(user) || ispAI(user)) ? UI_INTERACTIVE : UI_CLOSE + return (ismob(user)) ? UI_INTERACTIVE : UI_CLOSE /datum/crew_manifest/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 5ccba743bb1b..8fbf9c32a38e 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -319,7 +319,6 @@ spawn_point.join_player_here(character) var/atom/movable/screen/splash/Spl = new(character.client, TRUE) Spl.Fade(TRUE) - character.playsound_local(get_turf(character), 'sound/voice/ApproachingTG.ogg', 25) character.update_parallax_teleport() @@ -336,8 +335,6 @@ if(GLOB.summon_guns_triggered) give_guns(humanc) - if(GLOB.summon_magic_triggered) - give_magic(humanc) if(GLOB.curse_of_madness_triggered) give_madness(humanc, GLOB.curse_of_madness_triggered) if(CONFIG_GET(flag/roundstart_traits)) diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index a70520462f39..8629d01650d4 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -113,7 +113,7 @@ return user.visible_message("[user] starts to pour the contents of [O] onto [src].", "You start to slowly pour the contents of [O] onto [src].") - if(!do_after(user, 60, TRUE, src)) + if(!do_after(user, 60, src)) to_chat(user, "You failed to pour [O] onto [src]!") return diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 651ea4c6d0ee..dcb44af19cca 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -63,7 +63,7 @@ if(href_list["pouches"] && usr.canUseTopic(src, BE_CLOSE, NO_DEXTERITY)) visible_message("[usr] tries to empty [src]'s pouches.", \ "[usr] tries to empty your pouches.") - if(do_mob(usr, src, POCKET_STRIP_DELAY * 0.5)) + if(do_after(usr, POCKET_STRIP_DELAY * 0.5, src)) dropItemToGround(r_store) dropItemToGround(l_store) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 36fd8e1e6704..dd5b29059085 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -202,7 +202,7 @@ visible_message("[usr] tries to [internal ? "close" : "open"] the valve on [src]'s [ITEM.name].", \ "[usr] tries to [internal ? "close" : "open"] the valve on your [ITEM.name].", null, null, usr) to_chat(usr, "You try to [internal ? "close" : "open"] the valve on [src]'s [ITEM.name]...") - if(do_mob(usr, src, POCKET_STRIP_DELAY)) + if(do_after(usr, POCKET_STRIP_DELAY, src)) if(internal) internal = null update_internals_hud_icon(0) @@ -255,7 +255,7 @@ buckle_cd = O.breakouttime visible_message("[src] attempts to unbuckle [p_them()]self!", \ "You attempt to unbuckle yourself... (This will take around [round(buckle_cd/600,1)] minute\s, and you need to stay still.)") - if(do_after(src, buckle_cd, 0, target = src, hidden = TRUE)) + if(do_after(src, buckle_cd, target = src, timed_action_flags = IGNORE_HELD_ITEM)) if(!buckled) return buckled.user_unbuckle_mob(src,src) @@ -306,7 +306,7 @@ if(!cuff_break) visible_message("[src] attempts to remove [I]!") to_chat(src, "You attempt to remove [I]... (This will take around [DisplayTimeText(breakouttime)] and you need to stand still.)") - if(do_after(src, breakouttime, 0, target = src)) + if(do_after(src, breakouttime, target = src, timed_action_flags = IGNORE_HELD_ITEM)) . = clear_cuffs(I, cuff_break) else to_chat(src, "You fail to remove [I]!") @@ -315,7 +315,7 @@ breakouttime = 50 visible_message("[src] is trying to break [I]!") to_chat(src, "You attempt to break [I]... (This will take around 5 seconds and you need to stand still.)") - if(do_after(src, breakouttime, 0, target = src)) + if(do_after(src, breakouttime, target = src, timed_action_flags = IGNORE_HELD_ITEM)) . = clear_cuffs(I, cuff_break) else to_chat(src, "You fail to break [I]!") diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 9b50d1827724..8377fc0833d6 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -554,14 +554,10 @@ else to_chat(src, "Your eyes are really starting to hurt. This can't be good for you!") - if(has_bane(BANE_LIGHT)) - mind.disrupt_spells(-500) return 1 else if(damage == 0) // just enough protection if(prob(20)) to_chat(src, "Something bright flashes in the corner of your vision!") - if(has_bane(BANE_LIGHT)) - mind.disrupt_spells(0) /mob/living/carbon/soundbang_act(intensity = 1, stun_pwr = 20, damage_pwr = 5, deafen_pwr = 15) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 59f97d172ad1..64882c75ec4e 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -416,4 +416,5 @@ . = ..() if ((wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))) return - . += list(span_notice("[p_they(TRUE)] appear[p_s()] to be [get_age()].")) + if(get_age()) + . += list(span_notice("[p_they(TRUE)] appear[p_s()] to be [get_age()].")) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 148c02d4988b..27fa569de7cd 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -52,8 +52,6 @@ sec_hud_set_ID() sec_hud_set_implants() sec_hud_set_security_status() - //...fan gear - fan_hud_set_fandom() //...and display them. add_to_all_human_data_huds() @@ -247,7 +245,7 @@ else return - if(do_mob(usr, src, POCKET_STRIP_DELAY/delay_denominator, hidden = TRUE)) //placing an item into the pocket is 4 times faster + if(do_after(usr, POCKET_STRIP_DELAY/delay_denominator, src, hidden = TRUE)) //placing an item into the pocket is 4 times faster if(pocket_item) if(pocket_item == (pocket_id == ITEM_SLOT_RPOCKET ? r_store : l_store)) //item still in the pocket we search dropItemToGround(pocket_item) @@ -265,7 +263,7 @@ if(href_list["toggle_uniform"] && usr.canUseTopic(src, BE_CLOSE, NO_DEXTERITY)) var/obj/item/clothing/under/U = get_item_by_slot(ITEM_SLOT_ICLOTHING) to_chat(src, "[usr.name] is trying to adjust your [U].") - if(do_mob(usr, src, U.strip_delay/2)) + if(do_after(usr, U.strip_delay/2, src)) to_chat(src, "[usr.name] successfully adjusted your [U].") U.toggle_jumpsuit_adjust() update_inv_w_uniform() @@ -614,10 +612,13 @@ /mob/living/carbon/human/proc/do_cpr(mob/living/carbon/target) var/panicking = FALSE + if(target == src) //Sanity check, in case spacetime crumbles and allows us to perform cpr on ourselves + return + do CHECK_DNA_AND_SPECIES(target) - if (INTERACTING_WITH(src, target)) + if (DOING_INTERACTION_WITH_TARGET(src,target)) return FALSE if (target.stat == DEAD || HAS_TRAIT(target, TRAIT_FAKEDEATH)) @@ -643,7 +644,7 @@ visible_message("[src] is trying to perform CPR on [target.name]!", \ "You try to perform CPR on [target.name]... Hold still!") - if (!do_mob(src, target, time = panicking ? CPR_PANIC_SPEED : (3 SECONDS))) + if (!do_after(src, delay = panicking ? CPR_PANIC_SPEED : (3 SECONDS), target = target)) to_chat(src, "You fail to perform CPR on [target]!") return FALSE @@ -898,11 +899,6 @@ dna.remove_mutation(HM.name) ..() -/mob/living/carbon/human/check_weakness(obj/item/weapon, mob/living/attacker) - . = ..() - if (dna && dna.species) - . += dna.species.check_species_weakness(weapon, attacker) - /mob/living/carbon/human/is_literate() return TRUE @@ -1070,7 +1066,7 @@ if(!src.is_busy && (src.zone_selected == BODY_ZONE_HEAD || src.zone_selected == BODY_ZONE_PRECISE_GROIN) && get_turf(src) == get_turf(T) && !(T.mobility_flags & MOBILITY_STAND) && src.a_intent != INTENT_HELP) //all the stars align, time to curbstomp src.is_busy = TRUE - if (!do_mob(src,T,25) || get_turf(src) != get_turf(T) || (T.mobility_flags & MOBILITY_STAND) || src.a_intent == INTENT_HELP || src == T) //wait 30ds and make sure the stars still align (Body zone check removed after PR #958) + if (!do_after(src, 2.5 SECONDS, T) || get_turf(src) != get_turf(T) || (T.mobility_flags & MOBILITY_STAND) || src.a_intent == INTENT_HELP || src == T) //wait 30ds and make sure the stars still align (Body zone check removed after PR #958) src.is_busy = FALSE return @@ -1158,7 +1154,7 @@ //Joe Medic starts quickly/expertly lifting Grey Tider onto their back.. "[carrydelay < 35 ? "Using your gloves' nanochips, you" : "You"] [skills_space] start to lift [target] onto your back[carrydelay == 40 ? ", while assisted by the nanochips in your gloves.." : "..."]") //(Using your gloves' nanochips, you/You) (/quickly/expertly) start to lift Grey Tider onto your back(, while assisted by the nanochips in your gloves../...) - if(do_after(src, carrydelay, TRUE, target)) + if(do_after(src, carrydelay, target)) //Second check to make sure they're still valid to be carried if(can_be_firemanned(target) && !incapacitated(FALSE, TRUE) && !target.buckled) buckle_mob(target, TRUE, TRUE, 90, 1, 0) @@ -1181,7 +1177,7 @@ //Joe Medic starts quickly/expertly scooping Grey Tider into their arms.. "[carrydelay < 11 ? "Using your gloves' nanochips, you" : "You"] [skills_space] start to scoop [target] into your arms[carrydelay == 15 ? ", while assisted by the nanochips in your gloves.." : "..."]") //(Using your gloves' nanochips, you/You) ( /quickly/expertly) start to scoop Grey Tider into your arms(, while assisted by the nanochips in your gloves../...) - if(do_after(src, carrydelay, TRUE, target)) + if(do_after(src, carrydelay, target)) //Second check to make sure they're still valid to be carried if(!incapacitated(FALSE, TRUE) && !target.buckled) buckle_mob(target, TRUE, TRUE, 90, 1, 0) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 7091090f8877..3e3fd2209856 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -485,6 +485,9 @@ ///Calculates the siemens coeff based on clothing and species, can also restart hearts. /mob/living/carbon/human/electrocute_act(shock_damage, source, siemens_coeff = 1, flags = NONE) + //If it doesnt have physiology its prob still initializing. + if(!physiology) + return //Calculates the siemens coeff based on clothing. Completely ignores the arguments if(flags & SHOCK_TESLA) //I hate this entire block. This gets the siemens_coeff for tesla shocks if(gloves && gloves.siemens_coefficient <= 0) diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index b98466301f63..5d8264c14ac3 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -34,7 +34,7 @@ /mob/living/carbon/human/get_visible_name() if(name_override) return name_override - return get_generic_name(lowercase = TRUE) + return get_generic_name(TRUE, lowercase = TRUE) //Returns "Unknown" if facially disfigured and real_name if not. Useful for setting name when Fluacided or when updating a human's name variable /mob/living/carbon/human/proc/get_face_name(if_no_face = get_generic_name(lowercase = TRUE)) @@ -177,7 +177,7 @@ var/obscured = check_obscured_slots() var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) if((obscured & ITEM_SLOT_ICLOTHING) && skipface || isipc(src)) - return "" + return FALSE switch(age) if(70 to INFINITY) return "Geriatric" @@ -188,27 +188,35 @@ if(40 to 50) return "Middle-Aged" if(24 to 40) - return "" //not necessary because this is basically the most common age range + return FALSE //not necessary because this is basically the most common age range if(18 to 24) return "Young" else return "Puzzling" /mob/living/carbon/human/proc/get_generic_name(prefixed = FALSE, lowercase = FALSE) + var/final_string = "" var/obscured = check_obscured_slots() var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) var/hide_features = (obscured & ITEM_SLOT_ICLOTHING) && skipface - var/visible_adjective + if(generic_adjective && !hide_features) - visible_adjective = "[generic_adjective] " + final_string += "[generic_adjective] " + var/visible_age = get_age() if(visible_age) - visible_age = "[visible_age] " - var/visible_gender = get_gender() - var/final_string = "[visible_adjective][visible_age][dna.species.name] [visible_gender]" + final_string += "[visible_age] " + + final_string += "[dna.species.name] " + + final_string += get_gender() + if(prefixed) final_string = "\A [final_string]" - return lowercase ? lowertext(final_string) : final_string + + if(lowercase) + final_string = lowertext(final_string) + return final_string /mob/living/carbon/human/proc/get_gender() var/visible_gender = p_they() @@ -218,10 +226,7 @@ if("she") visible_gender = "Woman" if("they") - if(ishuman(src)) - visible_gender = "Person" - else - visible_gender = "Creature" + visible_gender = "Person" else visible_gender = "Thing" return visible_gender diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index a14715bca3fa..e848bc01d251 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1302,9 +1302,6 @@ GLOBAL_LIST_EMPTY(roundstart_races) /datum/species/proc/get_spans() return list() -/datum/species/proc/check_species_weakness(obj/item, mob/living/attacker) - return 0 //This is not a boolean, it's the multiplier for the damage that the user takes from the item.It is added onto the check_weakness value of the mob, and then the force of the item is multiplied by this value - /** * Equip the outfit required for life. Replaces items currently worn. */ @@ -1461,7 +1458,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) user.visible_message("[user] starts stealing [target]'s [I.name]!", "You start stealing [target]'s [I.name]...", null, null, target) to_chat(target, "[user] starts stealing your [I.name]!") - if(do_after(user, I.strip_delay, TRUE, target, TRUE)) + if(do_after(user, I.strip_delay, target)) target.dropItemToGround(I, TRUE) user.put_in_hands(I) user.visible_message("[user] stole [target]'s [I.name]!", @@ -1621,8 +1618,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/armor_block = H.run_armor_check(affecting, "melee", I.armour_penetration, FALSE, "Your armor has protected your [hit_area]!", "Your armor has softened a hit to your [hit_area]!") armor_block = min(90,armor_block) //cap damage reduction at 90% - var/weakness = H.check_weakness(I, user) - apply_damage(I.force * weakness, I.damtype, def_zone, armor_block, H) + apply_damage(I.force, I.damtype, def_zone, armor_block, H) H.send_item_attack_message(I, user, hit_area) diff --git a/code/modules/mob/living/carbon/human/species_types/ethereal.dm b/code/modules/mob/living/carbon/human/species_types/ethereal.dm index 6aa59e824169..4ad5297b73d9 100644 --- a/code/modules/mob/living/carbon/human/species_types/ethereal.dm +++ b/code/modules/mob/living/carbon/human/species_types/ethereal.dm @@ -46,7 +46,6 @@ var/current_color var/EMPeffect = FALSE - var/emag_effect = FALSE var/static/unhealthy_color = rgb(237, 164, 149) loreblurb = "Elzuosa are an uncommon and unusual species best described as crystalline, electrically-powered plantpeople. They hail from the warm planet Kalixcis, where they evolved alongside the Sarathi. Kalixcian culture places no importance on blood-bonds, and those from it tend to consider their family anyone they are sufficiently close to, and choose their own names." var/drain_time = 0 //used to keep ethereals from spam draining power sources @@ -64,7 +63,6 @@ return var/mob/living/carbon/human/ethereal = _carbon default_color = "#[ethereal.dna.features["ethcolor"]]" - RegisterSignal(ethereal, COMSIG_ATOM_EMAG_ACT, PROC_REF(on_emag_act)) RegisterSignal(ethereal, COMSIG_ATOM_EMP_ACT, PROC_REF(on_emp_act)) ethereal_light = ethereal.mob_light() spec_updatehealth(ethereal) @@ -80,7 +78,6 @@ BP.update_limb(is_creating = TRUE) /datum/species/elzuose/on_species_loss(mob/living/carbon/human/_carbon, datum/species/new_species, pref_load) - UnregisterSignal(_carbon, COMSIG_ATOM_EMAG_ACT) UnregisterSignal(_carbon, COMSIG_ATOM_EMP_ACT) UnregisterSignal(_carbon, COMSIG_DIGOUT) UnregisterSignal(_carbon, COMSIG_MOVABLE_MOVED) @@ -180,8 +177,7 @@ return if(_human.stat != DEAD && !EMPeffect) - if(!emag_effect) - current_color = health_adjusted_color(_human, default_color) + current_color = health_adjusted_color(_human, default_color) set_ethereal_light(_human, current_color) ethereal_light.set_light_on(TRUE) fixed_mut_color = copytext_char(current_color, 2) @@ -235,16 +231,6 @@ if(EMP_HEAVY) addtimer(CALLBACK(src, PROC_REF(stop_emp), _human), 20 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) //We're out for 20 seconds -/datum/species/elzuose/proc/on_emag_act(mob/living/carbon/human/_human, mob/user) - if(emag_effect) - return - emag_effect = TRUE - if(user) - to_chat(user, span_notice("You tap [_human] on the back with your card.")) - _human.visible_message(span_danger("[_human] starts flickering in an array of colors!")) - handle_emag(_human) - addtimer(CALLBACK(src, PROC_REF(stop_emag), _human), 30 SECONDS) //Disco mode for 30 seconds! This doesn't affect the ethereal at all besides either annoying some players, or making someone look badass. - /datum/species/elzuose/spec_life(mob/living/carbon/human/_human) .=..() handle_charge(_human) @@ -254,18 +240,6 @@ spec_updatehealth(_human) to_chat(_human, span_notice("You feel more energized as your shine comes back.")) -/datum/species/elzuose/proc/handle_emag(mob/living/carbon/human/_human) - if(!emag_effect) - return - current_color = pick(ELZUOSE_EMAG_COLORS) - spec_updatehealth(_human) - addtimer(CALLBACK(src, PROC_REF(handle_emag), _human), 5) //Call ourselves every 0.5 seconds to change color - -/datum/species/elzuose/proc/stop_emag(mob/living/carbon/human/_human) - emag_effect = FALSE - spec_updatehealth(_human) - _human.visible_message(span_danger("[_human] stops flickering and goes back to their normal state!")) - /datum/species/elzuose/proc/handle_charge(mob/living/carbon/human/_human) brutemod = 1.25 switch(get_charge(_human)) @@ -297,7 +271,7 @@ var/static/mutable_appearance/overcharge //shameless copycode from lightning spell overcharge = overcharge || mutable_appearance('icons/effects/effects.dmi', "electricity", EFFECTS_LAYER) _human.add_overlay(overcharge) - if(do_mob(_human, _human, 50, 1)) + if(do_after(_human, 50, _human, 1)) _human.flash_lighting_fx(5, 7, current_color) var/obj/item/organ/stomach/ethereal/stomach = _human.getorganslot(ORGAN_SLOT_STOMACH) playsound(_human, 'sound/magic/lightningshock.ogg', 100, TRUE, extrarange = 5) @@ -320,34 +294,3 @@ if(istype(stomach)) return stomach.crystal_charge return ELZUOSE_CHARGE_NONE - -/datum/species/elzuose/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/_human) - if(istype(I, /obj/item/multitool)) - if(user.a_intent == INTENT_HARM) - . = ..() // multitool beatdown - return - - if (emag_effect == TRUE) - to_chat(user, span_warning("The multitool can't get a lock on [_human]'s EM frequency!")) - return - - if(user != _human) - // random color change - default_color = "#" + GLOB.color_list_ethereal[pick(GLOB.color_list_ethereal)] - current_color = health_adjusted_color(_human, default_color) - spec_updatehealth(_human) - _human.visible_message(span_danger("[_human]'s EM frequency is scrambled to a random color.")) - else - // select new color - var/new_etherealcolor = input(user, "Choose your Elzuose color:", "Character Preference",default_color) as color|null - if(new_etherealcolor) - var/temp_hsv = RGBtoHSV(new_etherealcolor) - if(ReadHSV(temp_hsv)[3] >= ReadHSV("#505050")[3]) // elzu colors should be bright ok?? - default_color = sanitize_hexcolor(new_etherealcolor, 6, TRUE) - current_color = health_adjusted_color(_human, default_color) - spec_updatehealth(_human) - _human.visible_message(span_notice("[_human] modulates [_human.p_their()] EM frequency to [new_etherealcolor]")) - else - to_chat(user, span_danger("Invalid color. Your color is not bright enough.")) - else - . = ..() diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm index af19f1316ce2..f5de9f873b3b 100644 --- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/flypeople.dm @@ -35,7 +35,3 @@ "You throw up on the floor!") return ..() -/datum/species/fly/check_species_weakness(obj/item/weapon, mob/living/attacker) - if(istype(weapon, /obj/item/melee/flyswatter)) - return 29 //Flyswatters deal 30x damage to flypeople. - return 0 diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index eb78ef131644..30f3d5f74b58 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -313,7 +313,7 @@ H.notransform = TRUE - if(do_after(owner, delay=60, needhand=FALSE, target=owner, progress=TRUE)) + if(do_after(owner, delay=60, target=owner, progress=TRUE, timed_action_flags = IGNORE_HELD_ITEM)) if(H.blood_volume >= BLOOD_VOLUME_SLIME_SPLIT) make_dupe() else diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index 6cb15357cc64..c34a70b3afde 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -21,7 +21,6 @@ exotic_bloodtype = "L" disliked_food = GRAIN | DAIRY | CLOTH | GROSS liked_food = GORE | MEAT - inert_mutation = FIREBREATH deathsound = 'sound/voice/lizard/deathsound.ogg' wings_icons = list("Dragon") species_language_holder = /datum/language_holder/lizard diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm index b20b27efc928..91169299afba 100644 --- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm +++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm @@ -73,11 +73,6 @@ H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM) return ..() -/datum/species/moth/check_species_weakness(obj/item/weapon, mob/living/attacker) - if(istype(weapon, /obj/item/melee/flyswatter)) - return 9 //flyswatters deal 10x damage to moths - return 0 - /datum/species/space_move(mob/living/carbon/human/H) . = ..() if(H.loc && !isspaceturf(H.loc) && H.getorganslot(ORGAN_SLOT_WINGS) && !flying_species) //"flying_species" is exclusive to the potion of flight, which has its flying mechanics. If they want to fly they can use that instead diff --git a/code/modules/mob/living/carbon/human/species_types/spider.dm b/code/modules/mob/living/carbon/human/species_types/spider.dm index 847d6ad74f3f..9c0f58dc8312 100644 --- a/code/modules/mob/living/carbon/human/species_types/spider.dm +++ b/code/modules/mob/living/carbon/human/species_types/spider.dm @@ -97,11 +97,6 @@ GLOBAL_LIST_INIT(spider_last, world.file2list("strings/names/spider_last.txt")) H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM) return ..() -/datum/species/spider/check_species_weakness(obj/item/weapon, mob/living/attacker) - if(istype(weapon, /obj/item/melee/flyswatter)) - return 9 //flyswatters deal 10x damage to spiders - return 0 - /mob/living/carbon/human/species/spider race = /datum/species/spider diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm index 070894a92bee..5caf871a7f23 100644 --- a/code/modules/mob/living/carbon/human/species_types/vampire.dm +++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm @@ -53,11 +53,6 @@ C.adjust_fire_stacks(6) C.IgniteMob() -/datum/species/vampire/check_species_weakness(obj/item/weapon, mob/living/attacker) - if(istype(weapon, /obj/item/nullrod/whip)) - return 1 //Whips deal 2x damage to vampires. Vampire killer. - return 0 - /obj/item/organ/tongue/vampire name = "vampire tongue" actions_types = list(/datum/action/item_action/organ_action/vampire) diff --git a/code/modules/mob/living/carbon/monkey/combat.dm b/code/modules/mob/living/carbon/monkey/combat.dm index 1f730de799d0..8fd4e89566c7 100644 --- a/code/modules/mob/living/carbon/monkey/combat.dm +++ b/code/modules/mob/living/carbon/monkey/combat.dm @@ -296,7 +296,7 @@ return IsStandingStill() /mob/living/carbon/monkey/proc/pickpocket(mob/M) - if(do_mob(src, M, MONKEY_ITEM_SNATCH_DELAY) && pickupTarget) + if(do_after(src, MONKEY_ITEM_SNATCH_DELAY, M) && pickupTarget) for(var/obj/item/I in M.held_items) if(I == pickupTarget) M.visible_message("[src] snatches [pickupTarget] from [M].", "[src] snatched [pickupTarget]!") diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index b240836b55e7..cb0ec02ced34 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -507,7 +507,7 @@ /mob/living/proc/get_up(instant = FALSE) set waitfor = FALSE - if(!instant && !do_mob(src, src, 2 SECONDS, uninterruptible = TRUE, extra_checks = CALLBACK(src, TYPE_PROC_REF(/mob/living, rest_checks_callback)))) + if(!instant && !do_after(src, 1 SECONDS, src, timed_action_flags = (IGNORE_USER_LOC_CHANGE|IGNORE_TARGET_LOC_CHANGE|IGNORE_HELD_ITEM), extra_checks = CALLBACK(src, TYPE_PROC_REF(/mob/living, rest_checks_callback)), interaction_key = DOAFTER_SOURCE_GETTING_UP)) return if(resting || body_position == STANDING_UP || HAS_TRAIT(src, TRAIT_FLOORED)) return @@ -977,7 +977,7 @@ "[src] tries to remove your [what.name].", null, null, src) to_chat(src, "You try to remove [who]'s [what.name]...") what.add_fingerprint(src) - if(do_mob(src, who, what.strip_delay)) + if(do_after(src, what.strip_delay, who, interaction_key = what)) if(what && Adjacent(who)) if(islist(where)) var/list/L = where @@ -1024,7 +1024,7 @@ who.visible_message("[src] tries to put [what] on [who].", \ "[src] tries to put [what] on you.", null, null, src) to_chat(src, "You try to put [what] on [who]...") - if(do_mob(src, who, what.equip_delay_other)) + if(do_after(src, what.equip_delay_other, who)) if(what && Adjacent(who) && what.mob_can_equip(who, src, final_where, TRUE, TRUE)) if(temporarilyRemoveItemFromInventory(what)) if(where_list) @@ -1144,15 +1144,6 @@ devilInfo.remove_soul(mind) mind.soulOwner = mind -/mob/living/proc/has_bane(banetype) - var/datum/antagonist/devil/devilInfo = is_devil(src) - return devilInfo && banetype == devilInfo.bane - -/mob/living/proc/check_weakness(obj/item/weapon, mob/living/attacker) - if(mind && mind.has_antag_datum(/datum/antagonist/devil)) - return check_devil_bane_multiplier(weapon, attacker) - return 1 //This is not a boolean, it's the multiplier for the damage the weapon does. - /mob/living/proc/check_acedia() if(mind && mind.has_objective(/datum/objective/sintouched/acedia)) return TRUE diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 86c85d27360a..c1c4cd668792 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -101,6 +101,9 @@ return 1 else playsound(loc, 'sound/weapons/genhit.ogg', 50, TRUE, -1) //Item sounds are handled in the item itself + + if(body_position == LYING_DOWN) // physics says it's significantly harder to push someone by constantly chucking random furniture at them if they are down on the floor. + hitpush = FALSE ..() @@ -179,7 +182,7 @@ log_combat(user, src, "attempted to neck grab", addition="neck grab") if(GRAB_NECK) log_combat(user, src, "attempted to strangle", addition="kill grab") - if(!do_mob(user, src, grab_upgrade_time)) + if(!do_after(user, grab_upgrade_time, src)) return 0 if(!user.pulling || user.pulling != src || user.grab_state != old_grab_state) return 0 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/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index 3a07ffc4cb8d..22d68c8a6190 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -488,6 +488,9 @@ return TRUE /mob/living/simple_animal/bot/medbot/attack_hand(mob/living/carbon/human/H) + if(DOING_INTERACTION_WITH_TARGET(H, src)) + to_chat(H, "You're already interacting with [src].") + return if(H.a_intent == INTENT_DISARM && mode != BOT_TIPPED) H.visible_message("[H] begins tipping over [src].", "You begin tipping over [src]...") @@ -574,7 +577,7 @@ C.visible_message("[src] is trying to tend the wounds of [patient]!", \ "[src] is trying to tend your wounds!") - if(do_mob(src, patient, 20)) //Slightly faster than default tend wounds, but does less HPS + if(do_after(src, 2 SECONDS, patient)) //Slightly faster than default tend wounds, but does less HPS if((get_dist(src, patient) <= 1) && (on) && assess_patient(patient)) var/healies = heal_amount var/obj/item/storage/firstaid/FA = firstaid diff --git a/code/modules/mob/living/simple_animal/corpse.dm b/code/modules/mob/living/simple_animal/corpse.dm index aa49c6e52b59..a1b10b897db6 100644 --- a/code/modules/mob/living/simple_animal/corpse.dm +++ b/code/modules/mob/living/simple_animal/corpse.dm @@ -47,14 +47,14 @@ id = /obj/item/card/id/syndicate /obj/effect/mob_spawn/human/corpse/syndicateramzi - name = "Ramzi's Clique Commando" + name = "Ramzi Clique Commando" id_job = "Cutthroat" hairstyle = "Bald" facial_hairstyle = "Shaved" outfit = /datum/outfit/syndicateramzicorpse /datum/outfit/syndicateramzicorpse - name = "Ramzi's Clique Commando Corpse" + name = "Ramzi Clique Commando Corpse" uniform = /obj/item/clothing/under/syndicate/gorlex suit = /obj/item/clothing/suit/space/hardsuit/syndi/ramzi shoes = /obj/item/clothing/shoes/combat diff --git a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm index 8aeb3b64a8cd..104d4363bc3b 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm @@ -79,7 +79,7 @@ to_chat(user, "You can't seem to find the [pick(faux_gadgets)]! Without it, [src] [pick(faux_problems)].") return user.visible_message("[user] begins to reactivate [src].", "You begin to reactivate [src]...") - if(do_after(user, 30, 1, target = src)) + if(do_after(user, 30, target = src)) revive(full_heal = TRUE, admin_revive = FALSE) user.visible_message("[user] reactivates [src]!", "You reactivate [src].") alert_drones(DRONE_NET_CONNECT) diff --git a/code/modules/mob/living/simple_animal/friendly/mothroach.dm b/code/modules/mob/living/simple_animal/friendly/mothroach.dm index 2002ef3b5d8d..881e64d2a70f 100644 --- a/code/modules/mob/living/simple_animal/friendly/mothroach.dm +++ b/code/modules/mob/living/simple_animal/friendly/mothroach.dm @@ -64,8 +64,3 @@ qdel(I) // this sucks else return ..() - -/mob/living/simple_animal/pet/mothroach/check_weakness(obj/item/weapon, mob/living/attacker) - if(istype(weapon, /obj/item/melee/flyswatter)) - return 9 // flyswatters deal 10x damage to mothroaches - return 0 diff --git a/code/modules/mob/living/simple_animal/guardian/types/support.dm b/code/modules/mob/living/simple_animal/guardian/types/support.dm index 1e02c89c81f7..57f1b1892f9d 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/support.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/support.dm @@ -134,7 +134,7 @@ "You start to faintly glow, and you feel strangely weightless!") do_attack_animation(A) - if(!do_mob(src, A, 60)) //now start the channel + if(!do_after(src, 6 SECONDS, A)) //now start the channel to_chat(src, "You need to hold still!") return diff --git a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm b/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm deleted file mode 100644 index 57d6f2fc325f..000000000000 --- a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm +++ /dev/null @@ -1,171 +0,0 @@ -//Paper Wizard Boss -/mob/living/simple_animal/hostile/boss/paper_wizard - name = "Mjor the Creative" - desc = "A wizard with a taste for the arts." - mob_biotypes = MOB_HUMANOID - boss_abilities = list(/datum/action/boss/wizard_summon_minions, /datum/action/boss/wizard_mimic) - faction = list("hostile","stickman") - del_on_death = TRUE - icon = 'icons/mob/simple_human.dmi' - icon_state = "paperwizard" - ranged = 1 - environment_smash = ENVIRONMENT_SMASH_NONE - minimum_distance = 3 - retreat_distance = 3 - obj_damage = 0 - melee_damage_lower = 10 - melee_damage_upper = 20 - health = 1000 - maxHealth = 1000 - loot = list(/obj/effect/temp_visual/paperwiz_dying) - projectiletype = /obj/projectile/temp - projectilesound = 'sound/weapons/emitter.ogg' - attack_sound = 'sound/hallucinations/growl1.ogg' - var/list/copies = list() - - footstep_type = FOOTSTEP_MOB_SHOE - - -//Summon Ability -//Lets the wizard summon his art to fight for him -/datum/action/boss/wizard_summon_minions - name = "Summon Minions" - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' - button_icon_state = "art_summon" - usage_probability = 40 - boss_cost = 30 - boss_type = /mob/living/simple_animal/hostile/boss/paper_wizard - needs_target = FALSE - say_when_triggered = "Rise, my creations! Jump off your pages and into this realm!" - var/static/summoned_minions = 0 - -/datum/action/boss/wizard_summon_minions/Trigger() - if(summoned_minions <= 6 && ..()) - var/list/minions = list( - /mob/living/simple_animal/hostile/stickman, - /mob/living/simple_animal/hostile/stickman/ranged, - /mob/living/simple_animal/hostile/stickman/dog) - var/list/directions = GLOB.cardinals.Copy() - for(var/i in 1 to 3) - var/minions_chosen = pick_n_take(minions) - new minions_chosen (get_step(boss,pick_n_take(directions)), 1) - summoned_minions += 3; - - -//Mimic Ability -//Summons mimics of himself with magical papercraft -//Hitting a decoy hurts nearby people excluding the wizard himself -//Hitting the wizard himself destroys all decoys -/datum/action/boss/wizard_mimic - name = "Craft Mimicry" - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' - button_icon_state = "mimic_summon" - usage_probability = 30 - boss_cost = 40 - boss_type = /mob/living/simple_animal/hostile/boss/paper_wizard - say_when_triggered = "" - -/datum/action/boss/wizard_mimic/Trigger() - if(..()) - var/mob/living/target - if(!boss.client) //AI's target - target = boss.target - else //random mob - var/list/threats = boss.PossibleThreats() - if(threats.len) - target = pick(threats) - if(target) - var/mob/living/simple_animal/hostile/boss/paper_wizard/wiz = boss - var/directions = GLOB.cardinals.Copy() - for(var/i in 1 to 3) - var/mob/living/simple_animal/hostile/boss/paper_wizard/copy/C = new (get_step(target,pick_n_take(directions))) - wiz.copies += C - C.original = wiz - C.say("My craft defines me, you could even say it IS me!") - wiz.say("My craft defines me, you could even say it IS me!") - wiz.forceMove(get_step(target,pick_n_take(directions))) - wiz.minimum_distance = 1 //so he doesn't run away and ruin everything - wiz.retreat_distance = 0 - else - boss.atb.refund(boss_cost) - -/mob/living/simple_animal/hostile/boss/paper_wizard/copy - desc = "'Tis a ruse!" - health = 1 - maxHealth = 1 - alpha = 200 - boss_abilities = list() - melee_damage_lower = 1 - melee_damage_upper = 5 - minimum_distance = 0 - retreat_distance = 0 - ranged = 0 - loot = list() - var/mob/living/simple_animal/hostile/boss/paper_wizard/original - -//Hit a fake? eat pain! -/mob/living/simple_animal/hostile/boss/paper_wizard/copy/adjustHealth(amount, updating_health = TRUE, forced = FALSE) - if(amount > 0) //damage - if(original) - original.minimum_distance = 3 - original.retreat_distance = 3 - original.copies -= src - for(var/c in original.copies) - qdel(c) - for(var/mob/living/L in range(5,src)) - if(L == original || istype(L, type)) - continue - L.adjustBruteLoss(50) - qdel(src) - else - . = ..() - -//Hit the real guy? copies go bai-bai -/mob/living/simple_animal/hostile/boss/paper_wizard/adjustHealth(amount, updating_health = TRUE, forced = FALSE) - . = ..() - if(. > 0)//damage - minimum_distance = 3 - retreat_distance = 3 - for(var/copy in copies) - qdel(copy) - -/mob/living/simple_animal/hostile/boss/paper_wizard/copy/examine(mob/user) - . = ..() - qdel(src) //I see through your ruse! - -//fancy effects -/obj/effect/temp_visual/paper_scatter - name = "scattering paper" - desc = "Pieces of paper scattering to the wind." - layer = ABOVE_OPEN_TURF_LAYER - icon = 'icons/effects/effects.dmi' - icon_state = "paper_scatter" - anchored = TRUE - duration = 5 - randomdir = FALSE - -/obj/effect/temp_visual/paperwiz_dying - name = "craft portal" - desc = "A wormhole sucking the wizard into the void. Neat." - layer = ABOVE_OPEN_TURF_LAYER - icon = 'icons/effects/effects.dmi' - icon_state = "paperwiz_poof" - anchored = TRUE - duration = 18 - randomdir = FALSE - -/obj/effect/temp_visual/paperwiz_dying/Initialize() - . = ..() - visible_message("The wizard cries out in pain as a gate appears behind him, sucking him in!") - playsound(get_turf(src),'sound/magic/mandswap.ogg', 50, TRUE, TRUE) - playsound(get_turf(src),'sound/hallucinations/wail.ogg', 50, TRUE, TRUE) - -/obj/effect/temp_visual/paperwiz_dying/Destroy() - for(var/mob/M in range(7,src)) - shake_camera(M, 7, 1) - var/turf/T = get_turf(src) - playsound(T,'sound/magic/summon_magic.ogg', 50, TRUE, TRUE) - new /obj/effect/temp_visual/paper_scatter(T) - new /obj/item/clothing/suit/wizrobe/paper(T) - new /obj/item/clothing/head/collectable/paper(T) - return ..() diff --git a/code/modules/mob/living/simple_animal/hostile/dark_wizard.dm b/code/modules/mob/living/simple_animal/hostile/dark_wizard.dm deleted file mode 100644 index 5c3e60c8377b..000000000000 --- a/code/modules/mob/living/simple_animal/hostile/dark_wizard.dm +++ /dev/null @@ -1,41 +0,0 @@ -/mob/living/simple_animal/hostile/dark_wizard - name = "Dark Wizard" - desc = "Killing amateurs since the dawn of times." - icon = 'icons/mob/simple_human.dmi' - icon_state = "dark_wizard" - icon_living = "dark_wizard" - move_to_delay = 10 - projectiletype = /obj/projectile/temp/earth_bolt - projectilesound = 'sound/magic/ethereal_enter.ogg' - ranged = TRUE - ranged_message = "earth bolts" - ranged_cooldown_time = 20 - maxHealth = 50 - health = 50 - harm_intent_damage = 5 - obj_damage = 20 - melee_damage_lower = 5 - melee_damage_upper = 5 - attack_verb_continuous = "staves" - a_intent = INTENT_HARM - speak_emote = list("chants") - attack_sound = 'sound/weapons/bladeslice.ogg' - aggro_vision_range = 9 - turns_per_move = 5 - gold_core_spawnable = HOSTILE_SPAWN - faction = list(ROLE_WIZARD) - footstep_type = FOOTSTEP_MOB_SHOE - weather_immunities = list("lava","ash") - minbodytemp = 0 - maxbodytemp = INFINITY - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - loot = list(/obj/effect/decal/remains/human) - del_on_death = TRUE - -/obj/projectile/temp/earth_bolt - name = "earth bolt" - icon_state = "declone" - damage = 4 - damage_type = BURN - flag = "energy" - temperature = -100 // closer to the old temp loss diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 526763e875b7..70ce3f665bab 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -30,7 +30,7 @@ var/ranged_cooldown = 0 //What the current cooldown on ranged attacks is, generally world.time + ranged_cooldown_time var/ranged_cooldown_time = 30 //How long, in deciseconds, the cooldown of ranged attacks is var/ranged_ignores_vision = FALSE //if it'll fire ranged attacks even if it lacks vision on its target, only works with environment smash - var/check_friendly_fire = 0 // Should the ranged mob check for friendlies when shooting + var/check_friendly_fire = FALSE // Should the ranged mob check for friendlies when shooting var/retreat_distance = null //If our mob runs from players when they're too close, set in tile distance. By default, mobs do not retreat. var/minimum_distance = 1 //Minimum approach distance, so ranged mobs chase targets down, but still keep their distance set in tiles to the target, set higher to make mobs keep distance diff --git a/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm b/code/modules/mob/living/simple_animal/hostile/human/cat_butcher.dm similarity index 88% rename from code/modules/mob/living/simple_animal/hostile/cat_butcher.dm rename to code/modules/mob/living/simple_animal/hostile/human/cat_butcher.dm index 8da384aaca4b..0e265fc3b531 100644 --- a/code/modules/mob/living/simple_animal/hostile/cat_butcher.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/cat_butcher.dm @@ -1,41 +1,27 @@ -/mob/living/simple_animal/hostile/cat_butcherer +/mob/living/simple_animal/hostile/human/cat_butcherer name = "Cat Surgeon" desc = "Feline genemod physiological modification surgery is outlawed in Nanotrasen-controlled sectors. This doctor doesn't seem to care, and thus, is wanted for several warcrimes." - icon = 'icons/mob/simple_human.dmi' icon_state = "cat_butcher" icon_living = "cat_butcher" - icon_dead = "syndicate_dead" - icon_gib = "syndicate_gib" projectiletype = /obj/projectile/bullet/dart/tranq projectilesound = 'sound/items/syringeproj.ogg' - ranged = 1 + ranged = TRUE ranged_message = "fires the syringe gun at" ranged_cooldown_time = 30 speak_chance = 0 - turns_per_move = 5 - speed = 0 stat_attack = HARD_CRIT - robust_searching = 1 - maxHealth = 100 - health = 100 - harm_intent_damage = 5 melee_damage_lower = 15 melee_damage_upper = 15 attack_verb_continuous = "slashes at" attack_verb_simple = "slash at" attack_sound = 'sound/weapons/circsawhit.ogg' - a_intent = INTENT_HARM - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID loot = list(/obj/effect/mob_spawn/human/corpse/cat_butcher, /obj/item/circular_saw, /obj/item/gun/syringe) atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 15 faction = list("hostile") - check_friendly_fire = 1 - status_flags = CANPUSH - del_on_death = 1 + check_friendly_fire = TRUE var/impatience = 0 -/mob/living/simple_animal/hostile/cat_butcherer/CanAttack(atom/the_target) +/mob/living/simple_animal/hostile/human/cat_butcherer/CanAttack(atom/the_target) if(iscarbon(target)) var/mob/living/carbon/human/C = target if(C.getorgan(/obj/item/organ/ears/cat) && C.getorgan(/obj/item/organ/tail/cat) && C.has_trauma_type(/datum/brain_trauma/severe/pacifism))//he wont attack his creations @@ -45,7 +31,7 @@ return FALSE return ..() -/mob/living/simple_animal/hostile/cat_butcherer/AttackingTarget() +/mob/living/simple_animal/hostile/human/cat_butcherer/AttackingTarget() if(iscarbon(target)) var/mob/living/carbon/human/L = target if(!L.getorgan(/obj/item/organ/ears/cat) && L.stat >= UNCONSCIOUS) //target doesnt have cat ears diff --git a/code/modules/mob/living/simple_animal/hostile/frontiersman.dm b/code/modules/mob/living/simple_animal/hostile/human/frontiersman.dm similarity index 70% rename from code/modules/mob/living/simple_animal/hostile/frontiersman.dm rename to code/modules/mob/living/simple_animal/hostile/human/frontiersman.dm index 213cd8c2b822..040b6b26ae2a 100644 --- a/code/modules/mob/living/simple_animal/hostile/frontiersman.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/frontiersman.dm @@ -1,36 +1,18 @@ -/mob/living/simple_animal/hostile/frontier +/mob/living/simple_animal/hostile/human/frontier name = "Frontiersman" desc = "A frontiersman! A terrorist that would probably kill everyone without mercy." - icon = 'icons/mob/simple_human.dmi' icon_state = "frontiersmanmelee" icon_living = "frontiersmanmelee" icon_dead = "frontiersmanmelee_dead" - icon_gib = "syndicate_gib" - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID speak_chance = 0 - turns_per_move = 5 - speed = 0 - maxHealth = 100 - health = 100 - harm_intent_damage = 5 melee_damage_lower = 15 melee_damage_upper = 15 - attack_verb_continuous = "punches" - attack_verb_simple = "punch" - attack_sound = 'sound/weapons/punch1.ogg' - a_intent = INTENT_HARM loot = list(/obj/effect/mob_spawn/human/corpse/frontier, /obj/item/kitchen/knife) atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 15 faction = list(FACTION_ANTAG_FRONTIERSMEN) - status_flags = CANPUSH - del_on_death = 1 - footstep_type = FOOTSTEP_MOB_SHOE - - -/mob/living/simple_animal/hostile/frontier/ranged +/mob/living/simple_animal/hostile/human/frontier/ranged icon_state = "frontiersmanranged" icon_living = "frontiersmanranged" loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged, @@ -41,10 +23,10 @@ projectilesound = 'sound/weapons/gun/revolver/shot.ogg' casingtype = /obj/item/ammo_casing/a357 -/mob/living/simple_animal/hostile/frontier/ranged/neutered +/mob/living/simple_animal/hostile/human/frontier/ranged/neutered loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged) -/mob/living/simple_animal/hostile/frontier/ranged/mosin +/mob/living/simple_animal/hostile/human/frontier/ranged/mosin icon_state = "frontiersmanrangedrifle" icon_living = "frontiersmanrangedrifle" loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged, @@ -52,10 +34,10 @@ casingtype = /obj/item/ammo_casing/a8_50r projectilesound = 'sound/weapons/gun/rifle/mosin.ogg' -/mob/living/simple_animal/hostile/frontier/ranged/mosin/neutered +/mob/living/simple_animal/hostile/human/frontier/ranged/mosin/neutered loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged) -/mob/living/simple_animal/hostile/frontier/ranged/trooper +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper icon_state = "frontiersmanrangedelite" icon_living = "frontiersmanrangedelite" maxHealth = 170 @@ -65,10 +47,10 @@ loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper, /obj/item/gun/ballistic/shotgun/brimstone) -/mob/living/simple_animal/hostile/frontier/ranged/trooper/neutered +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/neutered loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper) -/mob/living/simple_animal/hostile/frontier/ranged/trooper/skm +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/skm icon_state = "frontiersmanrangedak47" icon_living = "frontiersmanrangedak47" projectilesound = 'sound/weapons/gun/rifle/skm.ogg' @@ -78,10 +60,10 @@ loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper, /obj/item/gun/ballistic/automatic/assault/skm) -/mob/living/simple_animal/hostile/frontier/ranged/trooper/skm/neutured +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/skm/neutured loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper) -/mob/living/simple_animal/hostile/frontier/ranged/trooper/rifle +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/rifle icon_state = "frontiersmanrangedmosin" icon_living = "frontiersmanrangedmosin" @@ -90,10 +72,10 @@ casingtype = /obj/item/ammo_casing/a8_50r projectilesound = 'sound/weapons/gun/rifle/mosin.ogg' -/mob/living/simple_animal/hostile/frontier/ranged/trooper/rifle/neutered +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/rifle/neutered loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper) -/mob/living/simple_animal/hostile/frontier/ranged/trooper/heavy +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/heavy icon_state = "frontiersmanrangedminigun" icon_living = "frontiersmanrangedminigun" projectilesound = 'sound/weapons/laser4.ogg' @@ -105,10 +87,10 @@ projectiletype = /obj/projectile/beam/weak/penetrator loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper/heavy) -/mob/living/simple_animal/hostile/frontier/ranged/trooper/heavy/neutered +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/heavy/neutered loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper/heavy/gunless) -/mob/living/simple_animal/hostile/frontier/ranged/officer +/mob/living/simple_animal/hostile/human/frontier/ranged/officer name = "Frontiersman Officer" icon_state = "frontiersmanofficer" icon_living = "frontiersmanofficer" @@ -119,10 +101,10 @@ loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/officer, /obj/item/gun/ballistic/automatic/pistol/APS) -/mob/living/simple_animal/hostile/frontier/ranged/officer/neutured +/mob/living/simple_animal/hostile/human/frontier/ranged/officer/neutured loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/officer) -/mob/living/simple_animal/hostile/frontier/ranged/officer/Aggro() +/mob/living/simple_animal/hostile/human/frontier/ranged/officer/Aggro() ..() summon_backup(15) say(pick("Help!!", "They're right here!!", "Don't let me die!!")) diff --git a/code/modules/mob/living/simple_animal/hostile/human/human.dm b/code/modules/mob/living/simple_animal/hostile/human/human.dm new file mode 100644 index 000000000000..633bd40090e8 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/human/human.dm @@ -0,0 +1,41 @@ +/mob/living/simple_animal/hostile/human + name = "crazed human" + desc = "A crazed human, they cannot be reasoned with" + icon = 'icons/mob/simple_human.dmi' + icon_state = "survivor_base" + icon_living = "survivor_base" + icon_dead = null + icon_gib = "syndicate_gib" + mob_biotypes = MOB_ORGANIC|MOB_HUMANOID + + speak_chance = 20 + speak_emote = list("groans") + + turns_per_move = 5 + speed = 0 + maxHealth = 100 + health = 100 + + robust_searching = TRUE + harm_intent_damage = 5 + melee_damage_lower = 10 + melee_damage_upper = 10 + attack_verb_continuous = "punches" + attack_verb_simple = "punch" + attack_sound = 'sound/weapons/punch1.ogg' + a_intent = INTENT_HARM + response_help_continuous = "pushes" + response_help_simple = "push" + + loot = list(/obj/effect/mob_spawn/human/corpse/damaged) + del_on_death = TRUE + + atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) + unsuitable_atmos_damage = 15 + minbodytemp = 180 + status_flags = CANPUSH + del_on_death = TRUE + + footstep_type = FOOTSTEP_MOB_SHOE + + faction = list("hermit") diff --git a/code/modules/mob/living/simple_animal/hostile/human/nanotrasen.dm b/code/modules/mob/living/simple_animal/hostile/human/nanotrasen.dm new file mode 100644 index 000000000000..6c1676d202ab --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/human/nanotrasen.dm @@ -0,0 +1,80 @@ +/mob/living/simple_animal/hostile/human/nanotrasen + name = "\improper Nanotrasen Private Security Officer" + desc = "An officer part of Nanotrasen's private security force, he seems rather unpleased to meet you." + icon_state = "nanotrasen" + icon_living = "nanotrasen" + speak_chance = 0 + stat_attack = HARD_CRIT + melee_damage_upper = 15 + loot = list(/obj/effect/mob_spawn/human/corpse/nanotrasensoldier) + atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) + faction = list(ROLE_DEATHSQUAD) + check_friendly_fire = TRUE + dodging = TRUE + +/mob/living/simple_animal/hostile/human/nanotrasen/screaming + icon_state = "nanotrasen" + icon_living = "nanotrasen" + +/mob/living/simple_animal/hostile/human/nanotrasen/screaming/Aggro() + ..() + summon_backup(15) + say("411 in progress, requesting backup!") + + +/mob/living/simple_animal/hostile/human/nanotrasen/ranged + icon_state = "nanotrasenranged" + icon_living = "nanotrasenranged" + ranged = 1 + retreat_distance = 3 + minimum_distance = 5 + casingtype = /obj/item/ammo_casing/c45 + projectilesound = 'sound/weapons/gun/pistol/shot_alt.ogg' + + +/mob/living/simple_animal/hostile/human/nanotrasen/ranged/smg + icon_state = "nanotrasenrangedsmg" + icon_living = "nanotrasenrangedsmg" + rapid = 3 + casingtype = /obj/item/ammo_casing/c46x30mm + projectilesound = 'sound/weapons/gun/smg/shot.ogg' + +/mob/living/simple_animal/hostile/human/nanotrasen/ranged/assault + name = "Nanotrasen Assault Officer" + desc = "A Nanotrasen Assault Officer. Prepare to die, if you've been found near Syndicate property." + icon_state = "nanotrasenrangedassault" + icon_living = "nanotrasenrangedassault" + icon_dead = null + icon_gib = "syndicate_gib" + ranged = TRUE + rapid = 4 + rapid_fire_delay = 1 + rapid_melee = 1 + retreat_distance = 2 + minimum_distance = 4 + casingtype = /obj/item/ammo_casing/c46x30mm + projectilesound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg' + loot = list(/obj/effect/mob_spawn/human/corpse/nanotrasenassaultsoldier) + +/mob/living/simple_animal/hostile/human/nanotrasen/elite + name = "Nanotrasen Elite Assault Officer" + desc = "Pray for your life, syndicate. Run while you can." + icon = 'icons/mob/simple_human.dmi' + icon_state = "nanotrasen_ert" + icon_living = "nanotrasen_ert" + maxHealth = 150 + health = 150 + melee_damage_lower = 13 + melee_damage_upper = 18 + ranged = TRUE + rapid = 3 + rapid_fire_delay = 5 + rapid_melee = 3 + retreat_distance = 0 + minimum_distance = 1 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + minbodytemp = 0 + projectiletype = /obj/projectile/beam/laser + projectilesound = 'sound/weapons/laser.ogg' + loot = list(/obj/effect/gibspawner/human) + faction = list(ROLE_DEATHSQUAD) diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/human/pirate.dm similarity index 67% rename from code/modules/mob/living/simple_animal/hostile/pirate.dm rename to code/modules/mob/living/simple_animal/hostile/human/pirate.dm index b0bc7941fd69..df10cfa6a2b4 100644 --- a/code/modules/mob/living/simple_animal/hostile/pirate.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/pirate.dm @@ -1,35 +1,17 @@ -/mob/living/simple_animal/hostile/pirate +/mob/living/simple_animal/hostile/human/pirate name = "Pirate" desc = "Does what he wants cause a pirate is free." - icon = 'icons/mob/simple_human.dmi' icon_state = "piratemelee" icon_living = "piratemelee" icon_dead = "pirate_dead" - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID speak_chance = 0 - turns_per_move = 5 - response_help_continuous = "pushes" - response_help_simple = "push" - speed = 0 - maxHealth = 100 - health = 100 - harm_intent_damage = 5 - melee_damage_lower = 10 - melee_damage_upper = 10 - attack_verb_continuous = "punches" - attack_verb_simple = "punch" - attack_sound = 'sound/weapons/punch1.ogg' - a_intent = INTENT_HARM atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 15 speak_emote = list("yarrs") loot = list(/obj/effect/mob_spawn/human/corpse/pirate, /obj/item/melee/transforming/energy/sword/saber/pirate) - del_on_death = 1 faction = list("pirate") - -/mob/living/simple_animal/hostile/pirate/melee +/mob/living/simple_animal/hostile/human/pirate/melee name = "Pirate Swashbuckler" icon_state = "piratemelee" icon_living = "piratemelee" @@ -44,7 +26,7 @@ footstep_type = FOOTSTEP_MOB_SHOE -/mob/living/simple_animal/hostile/pirate/melee/space +/mob/living/simple_animal/hostile/human/pirate/melee/space name = "Space Pirate Swashbuckler" icon_state = "piratespace" icon_living = "piratespace" @@ -53,23 +35,23 @@ minbodytemp = 0 speed = 1 -/mob/living/simple_animal/hostile/pirate/melee/space/Initialize() +/mob/living/simple_animal/hostile/human/pirate/melee/space/Initialize() . = ..() ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT) -/mob/living/simple_animal/hostile/pirate/melee/Initialize() +/mob/living/simple_animal/hostile/human/pirate/melee/Initialize() . = ..() sord = new(src) -/mob/living/simple_animal/hostile/pirate/melee/Destroy() +/mob/living/simple_animal/hostile/human/pirate/melee/Destroy() QDEL_NULL(sord) return ..() -/mob/living/simple_animal/hostile/pirate/melee/Initialize() +/mob/living/simple_animal/hostile/human/pirate/melee/Initialize() . = ..() set_light(2) -/mob/living/simple_animal/hostile/pirate/ranged +/mob/living/simple_animal/hostile/human/pirate/ranged name = "Pirate Gunner" icon_state = "pirateranged" icon_living = "pirateranged" @@ -84,7 +66,7 @@ loot = list(/obj/effect/mob_spawn/human/corpse/pirate/ranged, /obj/item/gun/energy/laser) -/mob/living/simple_animal/hostile/pirate/ranged/space +/mob/living/simple_animal/hostile/human/pirate/ranged/space name = "Space Pirate Gunner" icon_state = "piratespaceranged" icon_living = "piratespaceranged" @@ -93,6 +75,6 @@ minbodytemp = 0 speed = 1 -/mob/living/simple_animal/hostile/pirate/ranged/space/Initialize() +/mob/living/simple_animal/hostile/human/pirate/ranged/space/Initialize() . = ..() ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT) diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/human/skeleton.dm similarity index 87% rename from code/modules/mob/living/simple_animal/hostile/skeleton.dm rename to code/modules/mob/living/simple_animal/hostile/human/skeleton.dm index 978353978e9a..675c6fc99342 100644 --- a/code/modules/mob/living/simple_animal/hostile/skeleton.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/skeleton.dm @@ -1,20 +1,16 @@ -/mob/living/simple_animal/hostile/skeleton +/mob/living/simple_animal/hostile/human/skeleton name = "reanimated skeleton" desc = "A real bonefied skeleton, doesn't seem like it wants to socialize." - icon = 'icons/mob/simple_human.dmi' icon_state = "skeleton" icon_living = "skeleton" icon_dead = "skeleton" gender = NEUTER mob_biotypes = MOB_UNDEAD|MOB_HUMANOID - turns_per_move = 5 speak_emote = list("rattles") emote_see = list("rattles") - a_intent = INTENT_HARM maxHealth = 40 health = 40 speed = 1 - harm_intent_damage = 5 melee_damage_lower = 15 melee_damage_upper = 15 minbodytemp = 0 @@ -25,18 +21,15 @@ attack_sound = 'sound/hallucinations/growl1.ogg' atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) unsuitable_atmos_damage = 10 - robust_searching = 1 stat_attack = HARD_CRIT faction = list("skeleton") see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE deathmessage = "collapses into a pile of bones!" - del_on_death = 1 loot = list(/obj/effect/decal/remains/human) - footstep_type = FOOTSTEP_MOB_SHOE -/mob/living/simple_animal/hostile/skeleton/templar +/mob/living/simple_animal/hostile/human/skeleton/templar name = "undead templar" desc = "The reanimated remains of a holy templar knight." icon_state = "templar" @@ -58,7 +51,7 @@ /obj/item/clothing/head/helmet/chaplain, /obj/item/claymore/weak{name = "holy sword"}) -/mob/living/simple_animal/hostile/skeleton/ice +/mob/living/simple_animal/hostile/human/skeleton/ice name = "ice skeleton" desc = "A reanimated skeleton protected by a thick sheet of natural ice armor. Looks slow, though." speed = 5 @@ -68,7 +61,7 @@ color = rgb(114,228,250) loot = list(/obj/effect/decal/remains/human{color = rgb(114,228,250)}) -/mob/living/simple_animal/hostile/skeleton/plasmaminer +/mob/living/simple_animal/hostile/human/skeleton/plasmaminer name = "shambling miner" desc = "A plasma-soaked miner, their exposed limbs turned into a grossly incandescent bone seemingly made of plasma." icon_state = "plasma_miner" @@ -86,7 +79,7 @@ deathmessage = "collapses into a pile of bones, their suit dissolving among the plasma!" loot = list(/obj/effect/decal/remains/plasma) -/mob/living/simple_animal/hostile/skeleton/plasmaminer/jackhammer +/mob/living/simple_animal/hostile/human/skeleton/plasmaminer/jackhammer desc = "A plasma-soaked miner, their exposed limbs turned into a grossly incandescent bone seemingly made of plasma. They seem to still have their mining tool in their hand, gripping tightly." icon_state = "plasma_miner_tool" icon_living = "plasma_miner_tool" @@ -101,6 +94,6 @@ attack_sound = 'sound/weapons/sonic_jackhammer.ogg' loot = list(/obj/effect/decal/remains/plasma, /obj/item/pickaxe/drill/jackhammer) -/mob/living/simple_animal/hostile/skeleton/plasmaminer/Initialize() +/mob/living/simple_animal/hostile/human/skeleton/plasmaminer/Initialize() . = ..() set_light(2) diff --git a/code/modules/mob/living/simple_animal/hostile/survivors.dm b/code/modules/mob/living/simple_animal/hostile/human/survivors.dm similarity index 53% rename from code/modules/mob/living/simple_animal/hostile/survivors.dm rename to code/modules/mob/living/simple_animal/hostile/human/survivors.dm index d5759431d65a..f7abea96b222 100644 --- a/code/modules/mob/living/simple_animal/hostile/survivors.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/survivors.dm @@ -1,59 +1,41 @@ -/mob/living/simple_animal/hostile/asteroid/whitesands +/mob/living/simple_animal/hostile/human/hermit name = "Whitesands Inhabitant" desc = "If you can read this, yell at a coder!" - icon = 'icons/mob/simple_human.dmi' icon_state = "survivor_base" icon_living = "survivor_base" - icon_dead = null - icon_gib = "syndicate_gib" - mob_biotypes = MOB_ORGANIC - minbodytemp = 180 - unsuitable_atmos_damage = 15 atmos_requirements = list("min_oxy" = 1, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 999, "min_n2" = 0, "max_n2" = 0) - speak_chance = 20 - turns_per_move = 5 - response_help_continuous = "pushes" - response_help_simple = "push" - speed = 0 - maxHealth = 100 - health = 100 - harm_intent_damage = 5 - melee_damage_lower = 10 - melee_damage_upper = 10 - attack_verb_continuous = "punches" - attack_verb_simple = "punch" - attack_sound = 'sound/weapons/punch1.ogg' - a_intent = INTENT_HARM - unsuitable_atmos_damage = 15 - speak_emote = list("groans") loot = list( /obj/effect/mob_spawn/human/corpse/damaged/whitesands ) - del_on_death = 1 - faction = list("hermit") -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor/death(gibbed) +/mob/living/simple_animal/hostile/human/hermit/survivor/death(gibbed) move_force = MOVE_FORCE_DEFAULT move_resist = MOVE_RESIST_DEFAULT pull_force = PULL_FORCE_DEFAULT + ..() + /* if(prob(15)) - new /obj/item/crusher_trophy/shiny(loc) + new /obj/item/mob_trophy/shiny(loc) visible_message("You notice a glimmering nugget of shiny metal.") - ..() + */ -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor +/mob/living/simple_animal/hostile/human/hermit/survivor name = "Hermit Wanderer" desc =" A wild-eyed figure, wearing tattered mining equipment and boasting a malformed body, twisted by the heavy metals and high background radiation of the sandworlds." + loot = list( + /obj/effect/mob_spawn/human/corpse/damaged/whitesands/survivor + ) -/mob/living/simple_animal/hostile/asteroid/whitesands/survivor/random/Initialize() +/mob/living/simple_animal/hostile/human/hermit/survivor/random/Initialize() . = ..() if(prob(35)) - new /mob/living/simple_animal/hostile/asteroid/whitesands/ranged/hunter(loc) + new /mob/living/simple_animal/hostile/human/hermit/ranged/hunter(loc) + return INITIALIZE_HINT_QDEL if(prob(10)) - new /mob/living/simple_animal/hostile/asteroid/whitesands/ranged/gunslinger(loc) + new /mob/living/simple_animal/hostile/human/hermit/ranged/gunslinger(loc) return INITIALIZE_HINT_QDEL -/mob/living/simple_animal/hostile/asteroid/whitesands/ranged +/mob/living/simple_animal/hostile/human/hermit/ranged icon_state = "survivor_hunter" icon_living = "survivor_hunter" projectiletype = null @@ -64,14 +46,14 @@ retreat_distance = 5 minimum_distance = 5 -/mob/living/simple_animal/hostile/asteroid/whitesands/ranged/hunter +/mob/living/simple_animal/hostile/human/hermit/ranged/hunter name = "Hermit Hunter" desc ="A wild-eyed figure. Watch out- he has a gun, and he remembers just enough of his old life to use it!" loot = list( /obj/effect/mob_spawn/human/corpse/damaged/whitesands/hunter, ) -/mob/living/simple_animal/hostile/asteroid/whitesands/ranged/gunslinger +/mob/living/simple_animal/hostile/human/hermit/ranged/gunslinger name = "Hermit Soldier" desc = "The miner's rebellion, though mostly underground, recieved a few good weapon shipments from an off-sector source. You should probably start running." icon_state = "survivor_gunslinger" @@ -88,102 +70,25 @@ //survivor corpses /obj/effect/mob_spawn/human/corpse/damaged/whitesands + uniform = /obj/item/clothing/under/color/random + belt = /obj/item/storage/belt/fannypack + shoes = /obj/item/clothing/shoes/workboots/mining + suit = /obj/item/clothing/suit/hooded/survivor + l_pocket = /obj/item/radio + r_pocket = /obj/item/tank/internals/emergency_oxygen/engi var/survivor_type //room for alternatives inside the fuckoff grade init. /obj/effect/mob_spawn/human/corpse/damaged/whitesands/Initialize() //everything here should equal out to 100 for the sake of my sanity. - mob_species = pickweight(list( /datum/species/human = 50, - /datum/species/lizard = 25, + /datum/species/lizard = 20, + /datum/species/ipc = 10, /datum/species/elzuose = 10, - /datum/species/moth = 10, - /datum/species/spider = 3, - /datum/species/fly = 2 - ) + /datum/species/moth = 5, + /datum/species/spider = 5 ) + ) //to-do: learn how to make mobsprites for other survivors - //uniforms are random to show varied backgrounds, but similar goal - if(survivor_type == "survivor") - uniform = pickweight(list( - /obj/item/clothing/under/color/random = 65, - /obj/item/clothing/under/rank/cargo/miner/lavaland = 10, - /obj/item/clothing/under/rank/prisoner = 10, - /obj/item/clothing/under/rank/cargo/miner/lavaland/old = 5, - /obj/item/clothing/under/color/khaki/buster = 5, - /obj/item/clothing/under/rank/cargo/miner = 5 - ) - ) - else if (survivor_type == "hunter") - uniform = pickweight(list( - /obj/item/clothing/under/color/random = 50, - /obj/item/clothing/under/rank/cargo/miner/lavaland = 25, - /obj/item/clothing/under/rank/cargo/miner/lavaland/old = 15, - /obj/item/clothing/under/rank/security/officer/camo = 5, - /obj/item/clothing/under/utility = 5 - ) - ) - else if (survivor_type == "gunslinger") - uniform = pickweight(list( - /obj/item/clothing/under/rank/cargo/miner/lavaland = 35, - /obj/item/clothing/under/color/random = 25, - /obj/item/clothing/under/rank/cargo/miner/lavaland/old = 15, - /obj/item/clothing/under/rank/security/officer/camo = 10, - /obj/item/clothing/under/syndicate/camo = 10, - /obj/item/clothing/under/syndicate/combat = 5 - ) - ) - else - uniform = /obj/item/clothing/under/color/random - - //storage is semi-randomized, giving some variety - if(survivor_type == "survivor") - belt = pickweight(list( - /obj/item/storage/belt/fannypack = 40, - /obj/item/storage/belt/mining = 20, - /obj/item/storage/belt/mining/alt = 15, - /obj/item/storage/belt/utility = 10, - /obj/item/storage/belt/bandolier = 9, - /obj/item/storage/belt/utility/full = 5, - /obj/item/storage/belt/chameleon= 1, - ) - ) - else if(survivor_type == "hunter") - belt = pickweight(list( - /obj/item/storage/belt/mining = 30, - /obj/item/storage/belt/fannypack = 20, - /obj/item/storage/belt/mining/alt = 15, - /obj/item/storage/belt/mining/primitive = 15, - /obj/item/storage/belt/bandolier = 10, - /obj/item/storage/belt/military = 7, - /obj/item/storage/belt/mining/vendor = 3, - ) - ) - else if(survivor_type == "gunslinger") - belt = pickweight(list( - /obj/item/storage/belt/mining = 30, - /obj/item/storage/belt/bandolier = 30, - /obj/item/storage/belt/military = 20, - /obj/item/storage/belt/fannypack = 15, - /obj/item/storage/belt/mining/alt = 5, - /obj/item/storage/belt/mining/primitive = 5 - ) - ) - else - belt = /obj/item/storage/belt/fannypack - - //everyone wears the same suit - suit = /obj/item/clothing/suit/hooded/survivor - - if (survivor_type == "gunslinger") - if(prob(30)) - shoes = /obj/item/clothing/shoes/combat //but sometimes there are nicer shoes - else - shoes = /obj/item/clothing/shoes/workboots/mining - else - shoes = /obj/item/clothing/shoes/workboots/mining - - - //gloves are a tossup gloves = pickweight(list( @@ -260,35 +165,6 @@ if(prob(30)) //some pens maybe? backpack_contents += /obj/item/reagent_containers/hypospray/medipen/survival - //pockets - if(survivor_type == "survivor") //could also use fleshing out - if(prob(30)) - l_pocket = /obj/item/reagent_containers/food/snacks/meat/steak/goliath - else - l_pocket = /obj/item/tank/internals/emergency_oxygen/engi - if (prob(20)) - r_pocket = /obj/item/spacecash/bundle/mediumrand - else - r_pocket = null - - if(survivor_type == "hunter") - l_pocket = /obj/item/tank/internals/emergency_oxygen/engi - if (prob(20)) - r_pocket = /obj/item/reagent_containers/food/snacks/meat/steak/goliath - else if (prob(60)) - r_pocket = /obj/item/ammo_box/aac_300blk_stripper - else - r_pocket = null - - if(survivor_type == "gunslinger") - if(prob(50)) - l_pocket = /obj/item/ammo_box/magazine/skm_545_39 - r_pocket = /obj/item/tank/internals/emergency_oxygen/engi - - else - r_pocket = /obj/item/tank/internals/emergency_oxygen/engi - l_pocket = /obj/item/radio - //masks mask = pickweight(list( /obj/item/clothing/mask/gas = 40, @@ -298,7 +174,7 @@ ) ) - //the eyes are the window into the soul. I don't think these things have souls but whatever. + //the eyes are the window into the soul. if(prob(70)) glasses = pickweight(list( /obj/item/clothing/glasses/heat = 20, @@ -307,8 +183,6 @@ /obj/item/clothing/glasses = 20 ) ) - else - glasses = null //and of course, ears. if(prob(1)) //oh my god they can't hear the sandstorm coming they've got airpods in @@ -319,21 +193,91 @@ /obj/item/radio/headset/alt = 50 ) ) + //now for the fun stuff + switch(survivor_type) + if("survivor") + //uniforms are random to show varied backgrounds, but similar goal + uniform = pickweight(list( + /obj/item/clothing/under/color/random = 65, + /obj/item/clothing/under/rank/cargo/miner/lavaland = 10, + /obj/item/clothing/under/rank/prisoner = 10, + /obj/item/clothing/under/rank/cargo/miner/lavaland/old = 5, + /obj/item/clothing/under/color/khaki/buster = 5, + /obj/item/clothing/under/rank/cargo/miner = 5 + ) + ) + //storage is semi-randomized, giving some variety + belt = pickweight(list( + /obj/item/storage/belt/fannypack = 40, + /obj/item/storage/belt/mining = 20, + /obj/item/storage/belt/mining/alt = 15, + /obj/item/storage/belt/utility = 10, + /obj/item/storage/belt/bandolier = 9, + /obj/item/storage/belt/utility/full = 5, + /obj/item/storage/belt/chameleon= 1, + ) + ) + if(prob(30)) + l_pocket = /obj/item/reagent_containers/food/snacks/meat/steak/goliath + if(prob(20)) + r_pocket = /obj/item/spacecash/bundle/smallrand + + if("hunter") + uniform = pickweight(list( + /obj/item/clothing/under/color/random = 50, + /obj/item/clothing/under/rank/cargo/miner/lavaland = 25, + /obj/item/clothing/under/rank/cargo/miner/lavaland/old = 15, + /obj/item/clothing/under/rank/security/officer/camo = 5, + /obj/item/clothing/under/utility = 5 + ) + ) + belt = pickweight(list( + /obj/item/storage/belt/mining = 30, + /obj/item/storage/belt/fannypack = 20, + /obj/item/storage/belt/mining/alt = 15, + /obj/item/storage/belt/mining/primitive = 15, + /obj/item/storage/belt/bandolier = 10, + /obj/item/storage/belt/military = 7, + /obj/item/storage/belt/mining/vendor = 3, + ) + ) + if(prob(20)) + l_pocket = /obj/item/reagent_containers/food/snacks/meat/steak/goliath + else if(prob(60)) + l_pocket = /obj/item/ammo_box/aac_300blk_stripper + if(prob(20)) + new /obj/item/gun/ballistic/rifle/polymer(loc) + else + visible_message(span_warning("The hunter's weapon shatters as they impact the ground!")) + + if("gunslinger") + uniform = pickweight(list( + /obj/item/clothing/under/rank/cargo/miner/lavaland = 35, + /obj/item/clothing/under/color/random = 25, + /obj/item/clothing/under/rank/cargo/miner/lavaland/old = 15, + /obj/item/clothing/under/rank/security/officer/camo = 10, + /obj/item/clothing/under/syndicate/camo = 10, + /obj/item/clothing/under/syndicate/combat = 5 + ) + ) + belt = pickweight(list( + /obj/item/storage/belt/mining = 30, + /obj/item/storage/belt/bandolier = 30, + /obj/item/storage/belt/military = 20, + /obj/item/storage/belt/fannypack = 15, + /obj/item/storage/belt/mining/alt = 5, + /obj/item/storage/belt/mining/primitive = 5 + ) + ) + if(prob(30)) + shoes = /obj/item/clothing/shoes/combat //sometimes there are nicer shoes + if(prob(50)) + l_pocket = /obj/item/ammo_box/magazine/skm_545_39 + if(prob(20)) + new /obj/item/gun/ballistic/automatic/smg/skm_carbine(loc) + else + visible_message(span_warning("The gunslinger's weapon shatters as they impact the ground!")) - //exosuit bits - suit_store = null - if (survivor_type == "hunter") - if(prob(20)) - new /obj/item/gun/ballistic/rifle/polymer(loc) - else - visible_message("The hunter's weapon shatters as they impact the ground!") - suit_store = null - if(survivor_type == "gunslinger") - if(prob(20)) - new /obj/item/gun/ballistic/automatic/smg/skm_carbine(loc) - else - visible_message("The gunslinger's weapon shatters as they impact the ground!") - suit_store = null . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/human/syndicate.dm similarity index 62% rename from code/modules/mob/living/simple_animal/hostile/syndicate.dm rename to code/modules/mob/living/simple_animal/hostile/human/syndicate.dm index b98d14128e12..b4769b647aad 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/syndicate.dm @@ -1,12 +1,3 @@ -/* - CONTENTS - LINE 10 - BASE MOB - LINE 52 - SWORD AND SHIELD - LINE 164 - GUNS - LINE 267 - MISC -*/ - - ///////////////Base mob//////////// /obj/effect/light_emitter/red_energy_sword //used so there's a combination of both their head light and light coming off the energy sword set_luminosity = 2 @@ -14,65 +5,48 @@ light_color = COLOR_SOFT_RED -/mob/living/simple_animal/hostile/syndicate - name = "Syndicate Operative" - desc = "Death to Nanotrasen." - icon = 'icons/mob/simple_human.dmi' +/mob/living/simple_animal/hostile/human/syndicate + name = "Ramzi Clique Operative" + desc = "An ex-Syndicate pirate of the Ramzi Clique." icon_state = "syndicate" icon_living = "syndicate" - icon_dead = "syndicate_dead" - icon_gib = "syndicate_gib" - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID speak_chance = 0 - turns_per_move = 5 - speed = 0 stat_attack = HARD_CRIT - robust_searching = 1 - maxHealth = 100 - health = 100 - harm_intent_damage = 5 - melee_damage_lower = 10 - melee_damage_upper = 10 - attack_verb_continuous = "punches" - attack_verb_simple = "punch" - attack_sound = 'sound/weapons/punch1.ogg' - a_intent = INTENT_HARM loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier) atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) + maxbodytemp = 400 unsuitable_atmos_damage = 15 faction = list(FACTION_ANTAG_SYNDICATE) - check_friendly_fire = 1 - status_flags = CANPUSH - del_on_death = 1 + check_friendly_fire = TRUE dodging = TRUE rapid_melee = 2 - footstep_type = FOOTSTEP_MOB_SHOE ///////////////Melee//////////// -/mob/living/simple_animal/hostile/syndicate/space +/mob/living/simple_animal/hostile/human/syndicate/space icon_state = "syndicate_space" icon_living = "syndicate_space" - name = "Syndicate Commando" + name = "Ramzi Clique Commando" maxHealth = 170 health = 170 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 + maxbodytemp = 1000 speed = 1 -/mob/living/simple_animal/hostile/syndicate/space/Initialize() +/mob/living/simple_animal/hostile/human/syndicate/space/Initialize() . = ..() ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT) set_light(4) -/mob/living/simple_animal/hostile/syndicate/space/stormtrooper +/mob/living/simple_animal/hostile/human/syndicate/space/stormtrooper icon_state = "syndicate_stormtrooper" icon_living = "syndicate_stormtrooper" - name = "Syndicate Stormtrooper" + name = "Ramzi Clique Assault Trooper" maxHealth = 250 health = 250 -/mob/living/simple_animal/hostile/syndicate/melee //dude with a knife and no shields +/mob/living/simple_animal/hostile/human/syndicate/melee //dude with a knife and no shields melee_damage_lower = 15 melee_damage_upper = 15 icon_state = "syndicate_knife" @@ -84,31 +58,32 @@ status_flags = 0 var/projectile_deflect_chance = 0 -/mob/living/simple_animal/hostile/syndicate/melee/space +/mob/living/simple_animal/hostile/human/syndicate/melee/space icon_state = "syndicate_space_knife" icon_living = "syndicate_space_knife" - name = "Syndicate Commando" + name = "Ramzi Clique Commando" maxHealth = 170 health = 170 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 + maxbodytemp = 1000 speed = 1 projectile_deflect_chance = 50 -/mob/living/simple_animal/hostile/syndicate/melee/space/Initialize() +/mob/living/simple_animal/hostile/human/syndicate/melee/space/Initialize() . = ..() ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT) set_light(4) -/mob/living/simple_animal/hostile/syndicate/melee/space/stormtrooper +/mob/living/simple_animal/hostile/human/syndicate/melee/space/stormtrooper icon_state = "syndicate_stormtrooper_knife" icon_living = "syndicate_stormtrooper_knife" - name = "Syndicate Stormtrooper" + name = "Ramzi Clique Stormtrooper" maxHealth = 250 health = 250 projectile_deflect_chance = 50 -/mob/living/simple_animal/hostile/syndicate/melee/sword +/mob/living/simple_animal/hostile/human/syndicate/melee/sword melee_damage_lower = 30 melee_damage_upper = 30 icon_state = "syndicate_sword" @@ -122,52 +97,53 @@ var/obj/effect/light_emitter/red_energy_sword/sord projectile_deflect_chance = 50 -/mob/living/simple_animal/hostile/syndicate/melee/sword/Initialize() +/mob/living/simple_animal/hostile/human/syndicate/melee/sword/Initialize() . = ..() set_light(2) -/mob/living/simple_animal/hostile/syndicate/melee/sword/Destroy() +/mob/living/simple_animal/hostile/human/syndicate/melee/sword/Destroy() QDEL_NULL(sord) return ..() -/mob/living/simple_animal/hostile/syndicate/melee/bullet_act(obj/projectile/Proj) +/mob/living/simple_animal/hostile/human/syndicate/melee/bullet_act(obj/projectile/Proj) if(prob(projectile_deflect_chance)) visible_message("[src] blocks [Proj] with its shield!") return BULLET_ACT_BLOCK return ..() -/mob/living/simple_animal/hostile/syndicate/melee/sword/space +/mob/living/simple_animal/hostile/human/syndicate/melee/sword/space icon_state = "syndicate_space_sword" icon_living = "syndicate_space_sword" - name = "Syndicate Commando" + name = "Ramzi Clique Commando" maxHealth = 170 health = 170 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 + maxbodytemp = 1000 speed = 1 projectile_deflect_chance = 50 -/mob/living/simple_animal/hostile/syndicate/melee/sword/space/Initialize() +/mob/living/simple_animal/hostile/human/syndicate/melee/sword/space/Initialize() . = ..() ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT) sord = new(src) set_light(4) -/mob/living/simple_animal/hostile/syndicate/melee/sword/space/Destroy() +/mob/living/simple_animal/hostile/human/syndicate/melee/sword/space/Destroy() QDEL_NULL(sord) return ..() -/mob/living/simple_animal/hostile/syndicate/melee/sword/space/stormtrooper +/mob/living/simple_animal/hostile/human/syndicate/melee/sword/space/stormtrooper icon_state = "syndicate_stormtrooper_sword" icon_living = "syndicate_stormtrooper_sword" - name = "Syndicate Stormtrooper" + name = "Ramzi Clique Stormtrooper" maxHealth = 250 health = 250 projectile_deflect_chance = 50 ///////////////Guns//////////// -/mob/living/simple_animal/hostile/syndicate/ranged +/mob/living/simple_animal/hostile/human/syndicate/ranged ranged = 1 retreat_distance = 5 minimum_distance = 5 @@ -179,104 +155,107 @@ dodging = FALSE rapid_melee = 1 -/mob/living/simple_animal/hostile/syndicate/ranged/infiltrator //shuttle loan event +/mob/living/simple_animal/hostile/human/syndicate/ranged/infiltrator //shuttle loan event projectilesound = 'sound/weapons/gun/smg/shot_suppressed.ogg' loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier) -/mob/living/simple_animal/hostile/syndicate/ranged/space +/mob/living/simple_animal/hostile/human/syndicate/ranged/space icon_state = "syndicate_space_pistol" icon_living = "syndicate_space_pistol" - name = "Syndicate Commando" + name = "Ramzi Clique Commando" maxHealth = 170 health = 170 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 + maxbodytemp = 1000 speed = 1 -/mob/living/simple_animal/hostile/syndicate/ranged/space/Initialize() +/mob/living/simple_animal/hostile/human/syndicate/ranged/space/Initialize() . = ..() ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT) set_light(4) -/mob/living/simple_animal/hostile/syndicate/ranged/space/stormtrooper +/mob/living/simple_animal/hostile/human/syndicate/ranged/space/stormtrooper icon_state = "syndicate_stormtrooper_pistol" icon_living = "syndicate_stormtrooper_pistol" - name = "Syndicate Stormtrooper" + name = "Ramzi Clique Stormtrooper" maxHealth = 250 health = 250 -/mob/living/simple_animal/hostile/syndicate/ranged/smg +/mob/living/simple_animal/hostile/human/syndicate/ranged/smg rapid = 2 icon_state = "syndicate_smg" icon_living = "syndicate_smg" casingtype = /obj/item/ammo_casing/c45 projectilesound = 'sound/weapons/gun/smg/shot.ogg' -/mob/living/simple_animal/hostile/syndicate/ranged/smg/pilot //caravan ambush ruin - name = "Syndicate Salvage Pilot" +/mob/living/simple_animal/hostile/human/syndicate/ranged/smg/pilot //caravan ambush ruin + name = "Ramzi Clique Salvage Pilot" loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier) -/mob/living/simple_animal/hostile/syndicate/ranged/smg/space +/mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space icon_state = "syndicate_space_smg" icon_living = "syndicate_space_smg" - name = "Syndicate Commando" + name = "Ramzi Clique Commando" maxHealth = 170 health = 170 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 + maxbodytemp = 1000 speed = 1 -/mob/living/simple_animal/hostile/syndicate/ranged/smg/space/Initialize() +/mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space/Initialize() . = ..() ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT) set_light(4) -/mob/living/simple_animal/hostile/syndicate/ranged/smg/space/stormtrooper +/mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space/stormtrooper icon_state = "syndicate_stormtrooper_smg" icon_living = "syndicate_stormtrooper_smg" - name = "Syndicate Stormtrooper" + name = "Ramzi Clique Stormtrooper" maxHealth = 250 health = 250 -/mob/living/simple_animal/hostile/syndicate/ranged/shotgun +/mob/living/simple_animal/hostile/human/syndicate/ranged/shotgun rapid = 2 rapid_fire_delay = 6 minimum_distance = 3 icon_state = "syndicate_shotgun" icon_living = "syndicate_shotgun" - casingtype = /obj/item/ammo_casing/shotgun/buckshot //buckshot (up to 72.5 brute) fired in a two-round burst + casingtype = /obj/item/ammo_casing/shotgun/buckshot //buckshot fired in a two-round burst. This will two-tap unarmored players. -/mob/living/simple_animal/hostile/syndicate/ranged/shotgun/space +/mob/living/simple_animal/hostile/human/syndicate/ranged/shotgun/space icon_state = "syndicate_space_shotgun" icon_living = "syndicate_space_shotgun" - name = "Syndicate Commando" + name = "Ramzi Clique Commando" maxHealth = 170 health = 170 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 + maxbodytemp = 1000 speed = 1 -/mob/living/simple_animal/hostile/syndicate/ranged/shotgun/space/Initialize() +/mob/living/simple_animal/hostile/human/syndicate/ranged/shotgun/space/Initialize() . = ..() ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT) set_light(4) -/mob/living/simple_animal/hostile/syndicate/ranged/shotgun/space/stormtrooper +/mob/living/simple_animal/hostile/human/syndicate/ranged/shotgun/space/stormtrooper icon_state = "syndicate_stormtrooper_shotgun" icon_living = "syndicate_stormtrooper_shotgun" - name = "Syndicate Stormtrooper" + name = "Ramzi Clique Stormtrooper" maxHealth = 250 health = 250 ///////////////Misc//////////// -/mob/living/simple_animal/hostile/syndicate/civilian +/mob/living/simple_animal/hostile/human/syndicate/civilian minimum_distance = 10 retreat_distance = 10 obj_damage = 0 environment_smash = ENVIRONMENT_SMASH_NONE -/mob/living/simple_animal/hostile/syndicate/civilian/Aggro() +/mob/living/simple_animal/hostile/human/syndicate/civilian/Aggro() ..() summon_backup(15) say("GUARDS!!") @@ -302,6 +281,7 @@ faction = list(ROLE_SYNDICATE) atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 + maxbodytemp = 1000 mob_size = MOB_SIZE_TINY movement_type = FLYING limb_destroyer = 1 @@ -314,32 +294,3 @@ /mob/living/simple_animal/hostile/viscerator/Initialize() . = ..() AddComponent(/datum/component/swarming) - -/mob/living/simple_animal/hostile/syndicate/melee/sword/space/oldcode - melee_damage_lower = 20 - melee_damage_upper = 20 - icon = 'icons/mob/simple_human.dmi' - icon_state = "oldcode_syndicate_csaber" - icon_living = "oldcode_syndicate_csaber" - name = "Syndicate Spaceman" - desc = "Death to IS-Nanotrasen." - maxHealth = 170 - health = 170 - armour_penetration = 20 - light_color = LIGHT_COLOR_BLUE - sord = /obj/effect/light_emitter/blue_energy_sword - projectile_deflect_chance = 10 - -/mob/living/simple_animal/hostile/syndicate/ranged/space/oldcode - icon = 'icons/mob/simple_human.dmi' - icon_state = "oldcode_syndicate_gun" - icon_living = "oldcode_syndicate_gun" - name = "Syndicate Spaceman" - desc = "Death to IS-Nanotrasen." - maxHealth = 170 - health = 170 - -/obj/effect/light_emitter/blue_energy_sword - set_luminosity = 2 - set_cap = 2.5 - light_color = LIGHT_COLOR_BLUE diff --git a/code/modules/mob/living/simple_animal/hostile/zombie.dm b/code/modules/mob/living/simple_animal/hostile/human/zombie.dm similarity index 83% rename from code/modules/mob/living/simple_animal/hostile/zombie.dm rename to code/modules/mob/living/simple_animal/hostile/human/zombie.dm index 6f1db7aaf996..7a12465b98bb 100644 --- a/code/modules/mob/living/simple_animal/hostile/zombie.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/zombie.dm @@ -1,4 +1,4 @@ -/mob/living/simple_animal/hostile/zombie +/mob/living/simple_animal/hostile/human/zombie name = "Shambling Corpse" desc = "When there is no more room in hell, the dead will walk in outer space." icon = 'icons/mob/simple_human.dmi' @@ -19,16 +19,17 @@ atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 status_flags = CANPUSH + loot = list() del_on_death = 1 var/zombiejob = "Medical Doctor" var/infection_chance = 0 var/obj/effect/mob_spawn/human/corpse/delayed/corpse -/mob/living/simple_animal/hostile/zombie/Initialize(mapload) +/mob/living/simple_animal/hostile/human/zombie/Initialize(mapload) . = ..() INVOKE_ASYNC(src, PROC_REF(setup_visuals)) -/mob/living/simple_animal/hostile/zombie/proc/setup_visuals() +/mob/living/simple_animal/hostile/human/zombie/proc/setup_visuals() var/datum/preferences/dummy_prefs = new dummy_prefs.pref_species = new /datum/species/zombie dummy_prefs.randomise[RANDOM_BODY] = TRUE @@ -48,17 +49,17 @@ corpse.mob_species = /datum/species/zombie corpse.mob_name = name -/mob/living/simple_animal/hostile/zombie/AttackingTarget() +/mob/living/simple_animal/hostile/human/zombie/AttackingTarget() . = ..() if(. && ishuman(target) && prob(infection_chance)) try_to_zombie_infect(target) -/mob/living/simple_animal/hostile/zombie/drop_loot() +/mob/living/simple_animal/hostile/human/zombie/drop_loot() . = ..() corpse.forceMove(drop_location()) corpse.create() -/mob/living/simple_animal/hostile/zombie/kudzu +/mob/living/simple_animal/hostile/human/zombie/kudzu name = "shambling bramble" desc = "A shambling mass of vibrant vines and rotting flesh. " melee_damage_lower = 15 diff --git a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm index cf8a32af157c..2a60b3c52fc2 100644 --- a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm +++ b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm @@ -18,7 +18,7 @@ Featuring: */ -/mob/living/simple_animal/hostile/syndicate/mecha_pilot +/mob/living/simple_animal/hostile/human/syndicate/mecha_pilot name = "Syndicate Mecha Pilot" desc = "Death to Nanotrasen. This variant comes in MECHA DEATH flavour." wanted_objects = list() @@ -36,15 +36,15 @@ Featuring: var/smoke_chance = 20 //Chance to deploy smoke for crowd control var/retreat_chance = 40 //Chance to run away -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/no_mech +/mob/living/simple_animal/hostile/human/syndicate/mecha_pilot/no_mech spawn_mecha_type = null search_objects = 2 -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/no_mech/Initialize() +/mob/living/simple_animal/hostile/human/syndicate/mecha_pilot/no_mech/Initialize() . = ..() wanted_objects = typecacheof(/obj/mecha/combat, TRUE) -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/nanotrasen //nanotrasen are syndies! no it's just a weird path. +/mob/living/simple_animal/hostile/human/syndicate/mecha_pilot/nanotrasen //nanotrasen are syndies! no it's just a weird path. name = "\improper Nanotrasen Mecha Pilot" desc = "Death to the Syndicate. This variant comes in MECHA DEATH flavour." icon_living = "nanotrasen" @@ -52,7 +52,7 @@ Featuring: faction = list("nanotrasen") spawn_mecha_type = /obj/mecha/combat/marauder/loaded -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/no_mech/nanotrasen +/mob/living/simple_animal/hostile/human/syndicate/mecha_pilot/no_mech/nanotrasen name = "\improper Nanotrasen Mecha Pilot" desc = "Death to the Syndicate. This variant comes in MECHA DEATH flavour." icon_living = "nanotrasen" @@ -60,7 +60,7 @@ Featuring: faction = list("nanotrasen") -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/Initialize() +/mob/living/simple_animal/hostile/human/syndicate/mecha_pilot/Initialize() . = ..() if(spawn_mecha_type) var/obj/mecha/M = new spawn_mecha_type (get_turf(src)) @@ -68,7 +68,7 @@ Featuring: INVOKE_ASYNC(src, PROC_REF(enter_mecha), M) -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/enter_mecha(obj/mecha/M) +/mob/living/simple_animal/hostile/human/syndicate/mecha_pilot/proc/enter_mecha(obj/mecha/M) if(!M) return 0 LoseTarget() //Target was our mecha, so null it out @@ -93,7 +93,7 @@ Featuring: mecha.lights_action.Activate() -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/exit_mecha(obj/mecha/M) +/mob/living/simple_animal/hostile/human/syndicate/mecha_pilot/proc/exit_mecha(obj/mecha/M) if(!M) return 0 @@ -116,7 +116,7 @@ Featuring: walk(M,0)//end any lingering movement loops, to prevent the haunted mecha bug //Checks if a mecha is valid for theft -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/is_valid_mecha(obj/mecha/M) +/mob/living/simple_animal/hostile/human/syndicate/mecha_pilot/proc/is_valid_mecha(obj/mecha/M) if(!M) return 0 if(M.occupant) @@ -128,7 +128,7 @@ Featuring: return 1 -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/mecha_face_target(atom/A) +/mob/living/simple_animal/hostile/human/syndicate/mecha_pilot/proc/mecha_face_target(atom/A) if(mecha) var/dirto = get_dir(mecha,A) if(mecha.dir != dirto) //checking, because otherwise the mecha makes too many turn noises @@ -136,7 +136,7 @@ Featuring: -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/mecha_reload() +/mob/living/simple_animal/hostile/human/syndicate/mecha_pilot/proc/mecha_reload() if(mecha) for(var/equip in mecha.equipment) var/obj/item/mecha_parts/mecha_equipment/ME = equip @@ -144,7 +144,7 @@ Featuring: ME.rearm() -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/proc/get_mecha_equip_by_flag(flag = MECHA_RANGED) +/mob/living/simple_animal/hostile/human/syndicate/mecha_pilot/proc/get_mecha_equip_by_flag(flag = MECHA_RANGED) . = list() if(mecha) for(var/equip in mecha.equipment) @@ -156,7 +156,7 @@ Featuring: //Pick a ranged weapon/tool //Fire it -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/OpenFire(atom/A) +/mob/living/simple_animal/hostile/human/syndicate/mecha_pilot/OpenFire(atom/A) if(mecha) mecha_reload() mecha_face_target(A) @@ -171,7 +171,7 @@ Featuring: ..() -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/AttackingTarget() +/mob/living/simple_animal/hostile/human/syndicate/mecha_pilot/AttackingTarget() if(mecha) var/list/possible_weapons = get_mecha_equip_by_flag(MECHA_MELEE) if(possible_weapons.len) @@ -198,7 +198,7 @@ Featuring: return target.attack_animal(src) -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/handle_automated_action() +/mob/living/simple_animal/hostile/human/syndicate/mecha_pilot/handle_automated_action() if(..()) if(!mecha) for(var/obj/mecha/combat/C in range(src,vision_range)) @@ -245,12 +245,12 @@ Featuring: -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/death(gibbed) +/mob/living/simple_animal/hostile/human/syndicate/mecha_pilot/death(gibbed) if(mecha) mecha.aimob_exit_mech(src) ..() -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/gib() +/mob/living/simple_animal/hostile/human/syndicate/mecha_pilot/gib() if(mecha) mecha.aimob_exit_mech(src) ..() @@ -258,7 +258,7 @@ Featuring: //Yes they actually try and pull this shit //~simple animals~ -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/CanAttack(atom/the_target) +/mob/living/simple_animal/hostile/human/syndicate/mecha_pilot/CanAttack(atom/the_target) if(ismecha(the_target)) var/obj/mecha/M = the_target if(mecha) @@ -275,19 +275,19 @@ Featuring: . = ..() -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/EscapeConfinement() +/mob/living/simple_animal/hostile/human/syndicate/mecha_pilot/EscapeConfinement() if(mecha && loc == mecha) return 0 ..() -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/Move(NewLoc,Dir=0,step_x=0,step_y=0) +/mob/living/simple_animal/hostile/human/syndicate/mecha_pilot/Move(NewLoc,Dir=0,step_x=0,step_y=0) if(mecha && loc == mecha) return mecha.relaymove(src, Dir) return ..() -/mob/living/simple_animal/hostile/syndicate/mecha_pilot/Goto(target, delay, minimum_distance) +/mob/living/simple_animal/hostile/human/syndicate/mecha_pilot/Goto(target, delay, minimum_distance) if(mecha) walk_to(mecha, target, minimum_distance, mecha.step_in) else diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm index 5bdc5c882214..63519d29c7cd 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm @@ -41,7 +41,7 @@ Difficulty: Medium ranged_cooldown_time = 16 pixel_x = -16 base_pixel_x = -16 - crusher_loot = list(/obj/item/melee/transforming/cleaving_saw, /obj/item/gun/energy/kinetic_accelerator, /obj/item/crusher_trophy/miner_eye) + //mob_trophy = /obj/item/mob_trophy/miner_eye loot = list(/obj/item/melee/transforming/cleaving_saw, /obj/item/gun/energy/kinetic_accelerator) wander = FALSE del_on_death = TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index d62d695e1be7..1a0bbc10fac4 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -56,7 +56,7 @@ Difficulty: Hard pixel_x = -32 base_pixel_x = -32 del_on_death = TRUE - crusher_loot = list(/obj/structure/closet/crate/necropolis/bubblegum/crusher) + //mob_trophy = /obj/item/mob_trophy/demon_claws loot = list(/obj/structure/closet/crate/necropolis/bubblegum) blood_volume = BLOOD_VOLUME_MAXIMUM //BLEED FOR ME var/charging = FALSE @@ -504,7 +504,7 @@ Difficulty: Hard health = 1 maxHealth = 1 alpha = 127.5 - crusher_loot = null + mob_trophy = null loot = null achievement_type = null crusher_achievement_type = null diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/codename_claw.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/codename_claw.dm index cca8a649353f..3a4506b62562 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/codename_claw.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/codename_claw.dm @@ -21,7 +21,6 @@ ranged = TRUE speed = 4 move_to_delay = 4 - crusher_loot = list(/obj/item/card/id/ert/deathsquad, /obj/item/documents/nanotrasen) loot = list(/obj/item/card/id/ert/deathsquad, /obj/item/documents/nanotrasen) wander = FALSE blood_volume = BLOOD_VOLUME_NORMAL @@ -59,8 +58,8 @@ speed = 5 move_to_delay = 5 speak_emote = list("verbalizes") - crusher_loot = list(/obj/effect/spawner/clawloot) - loot = list(/obj/effect/spawner/clawloot/crusher) + mob_trophy = /obj/item/nullrod/armblade/tentacle + loot = list(/obj/effect/spawner/clawloot) health = 2250 maxHealth = 2250 shouldnt_move = TRUE //we want to show the transforming animation @@ -76,9 +75,6 @@ new /obj/item/gun/energy/pulse/pistol(get_turf(src)) qdel(src) -/obj/effect/spawner/clawloot/crusher/spawn_loot() - new /obj/item/nullrod/armblade/tentacle(get_turf(src)) //idk what to put here, memed is the loot person - return ..() ///LOOT END //PHASE ONE @@ -319,3 +315,102 @@ empulse(src, 5, 8) new /obj/effect/gibspawner/human(get_turf(src)) qdel(src) + +/obj/projectile/tentacle + name = "tentacle" + icon_state = "tentacle_end" + pass_flags = PASSTABLE + damage = 0 + damage_type = BRUTE + range = 8 + hitsound = 'sound/weapons/thudswoosh.ogg' + var/chain + +/obj/projectile/tentacle/fire(setAngle) + if(firer) + chain = firer.Beam(src, icon_state = "tentacle", emissive = FALSE) + ..() + +/obj/projectile/tentacle/proc/reset_throw(mob/living/carbon/human/H) + if(H.throw_mode) + H.throw_mode_off() //Don't annoy the changeling if he doesn't catch the item + +/obj/projectile/tentacle/proc/tentacle_grab(mob/living/carbon/human/H, mob/living/carbon/C) + if(H.Adjacent(C)) + if(H.get_active_held_item() && !H.get_inactive_held_item()) + H.swap_hand() + if(H.get_active_held_item()) + return + C.grabbedby(H) + C.grippedby(H, instant = TRUE) //instant aggro grab + +/obj/projectile/tentacle/proc/tentacle_stab(mob/living/carbon/human/H, mob/living/carbon/C) + if(H.Adjacent(C)) + for(var/obj/item/I in H.held_items) + if(I.get_sharpness()) + C.visible_message("[H] impales [C] with [H.p_their()] [I.name]!", "[H] impales you with [H.p_their()] [I.name]!") + C.apply_damage(I.force, BRUTE, BODY_ZONE_CHEST) + H.do_item_attack_animation(C, used_item = I) + H.add_mob_blood(C) + playsound(get_turf(H),I.hitsound,75,TRUE) + return + +/obj/projectile/tentacle/on_hit(atom/target, blocked = FALSE) + var/mob/living/carbon/human/H = firer + if(blocked >= 100) + return BULLET_ACT_BLOCK + if(isitem(target)) + var/obj/item/I = target + if(!I.anchored) + to_chat(firer, "You pull [I] towards yourself.") + H.throw_mode_on() + I.throw_at(H, 10, 2) + . = BULLET_ACT_HIT + + else if(isliving(target)) + var/mob/living/L = target + if(!L.anchored && !L.throwing)//avoid double hits + if(iscarbon(L)) + var/mob/living/carbon/C = L + var/firer_intent = INTENT_HARM + var/mob/M = firer + if(istype(M)) + firer_intent = M.a_intent + switch(firer_intent) + if(INTENT_HELP) + C.visible_message("[L] is pulled by [H]'s tentacle!","A tentacle grabs you and pulls you towards [H]!") + C.throw_at(get_step_towards(H,C), 8, 2) + return BULLET_ACT_HIT + + if(INTENT_DISARM) + var/obj/item/I = C.get_active_held_item() + if(I) + if(C.dropItemToGround(I)) + C.visible_message("[I] is yanked off [C]'s hand by [src]!","A tentacle pulls [I] away from you!") + on_hit(I) //grab the item as if you had hit it directly with the tentacle + return BULLET_ACT_HIT + else + to_chat(firer, "You can't seem to pry [I] off [C]'s hands!") + return BULLET_ACT_BLOCK + else + to_chat(firer, "[C] has nothing in hand to disarm!") + return BULLET_ACT_HIT + + if(INTENT_GRAB) + C.visible_message("[L] is grabbed by [H]'s tentacle!","A tentacle grabs you and pulls you towards [H]!") + C.throw_at(get_step_towards(H,C), 8, 2, H, TRUE, TRUE, callback=CALLBACK(src, PROC_REF(tentacle_grab), H, C)) + return BULLET_ACT_HIT + + if(INTENT_HARM) + C.visible_message("[L] is thrown towards [H] by a tentacle!","A tentacle grabs you and throws you towards [H]!") + C.throw_at(get_step_towards(H,C), 8, 2, H, TRUE, TRUE, callback=CALLBACK(src, PROC_REF(tentacle_stab), H, C)) + return BULLET_ACT_HIT + else + L.visible_message("[L] is pulled by [H]'s tentacle!","A tentacle grabs you and pulls you towards [H]!") + L.throw_at(get_step_towards(H,L), 8, 2) + . = BULLET_ACT_HIT + +/obj/projectile/tentacle/Destroy() + qdel(chain) + return ..() + diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index bd09f06f3521..863abf56dad1 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -50,7 +50,7 @@ Difficulty: Very Hard achievement_type = /datum/award/achievement/boss/colossus_kill crusher_achievement_type = /datum/award/achievement/boss/colossus_crusher score_achievement_type = /datum/award/score/colussus_score - crusher_loot = list(/obj/structure/closet/crate/necropolis/colossus/crusher) + //mob_trophy = /obj/item/mob_trophy/blaster_tubes loot = list(/obj/structure/closet/crate/necropolis/colossus) deathmessage = "disintegrates, leaving a glowing core in its wake." deathsound = 'sound/magic/demon_dies.ogg' diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/cult_templar.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/cult_templar.dm index 96fbc8b5c4ec..08ef1a7b21cb 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/cult_templar.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/cult_templar.dm @@ -24,7 +24,7 @@ vision_range = 10 damage_coeff = list(BRUTE = 1, BURN = 0.5, TOX = 0.5, CLONE = 0.5, STAMINA = 0, OXY = 0.5) loot = list(/obj/item/claymore/cursed, /obj/item/clothing/suit/space/hardsuit/cult/enchanted) - crusher_loot = list(/obj/item/claymore/cursed, /obj/item/clothing/suit/space/hardsuit/cult/enchanted, /obj/item/upgradescroll) + mob_trophy = list(/obj/item/claymore/cursed, /obj/item/clothing/suit/space/hardsuit/cult/enchanted, /obj/item/upgradescroll) wander = FALSE del_on_death = TRUE blood_volume = BLOOD_VOLUME_NORMAL diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm index 550c78532cd6..00a32a8dc449 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm @@ -28,7 +28,7 @@ Difficulty: Extremely Hard speed = 20 move_to_delay = 20 ranged = TRUE - crusher_loot = list(/obj/effect/decal/remains/plasma, /obj/item/crusher_trophy/ice_block_talisman) + //mob_trophy = /obj/item/mob_trophy/ice_block_talisman loot = list(/obj/effect/decal/remains/plasma) wander = FALSE del_on_death = TRUE @@ -323,47 +323,3 @@ Difficulty: Extremely Hard mineral_scan_pulse(T, world.view + 1) . = ..() -/obj/item/crusher_trophy/ice_block_talisman - name = "ice block talisman" - desc = "A glowing trinket that a demonic miner had on him, it seems he couldn't utilize it for whatever reason." - icon_state = "freeze_cube" - denied_type = /obj/item/crusher_trophy/ice_block_talisman - -/obj/item/crusher_trophy/ice_block_talisman/effect_desc() - return "waveform collapse to freeze a creature in a block of ice for a period, preventing them from moving" - -/obj/item/crusher_trophy/ice_block_talisman/on_mark_detonation(mob/living/target, mob/living/user) - target.apply_status_effect(/datum/status_effect/ice_block_talisman) - -/datum/status_effect/ice_block_talisman - id = "ice_block_talisman" - duration = 40 - status_type = STATUS_EFFECT_REFRESH - alert_type = /atom/movable/screen/alert/status_effect/ice_block_talisman - /// Stored icon overlay for the hit mob, removed when effect is removed - var/icon/cube - -/atom/movable/screen/alert/status_effect/ice_block_talisman - name = "Frozen Solid" - desc = "You're frozen inside an ice cube, and cannot move!" - icon_state = "frozen" - -/datum/status_effect/ice_block_talisman/on_apply() - RegisterSignal(owner, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(owner_moved)) - if(!owner.stat) - to_chat(owner, "You become frozen in a cube!") - cube = icon('icons/effects/freeze.dmi', "ice_cube") - var/icon/size_check = icon(owner.icon, owner.icon_state) - cube.Scale(size_check.Width(), size_check.Height()) - owner.add_overlay(cube) - return ..() - -/// Blocks movement from the status effect owner -/datum/status_effect/ice_block_talisman/proc/owner_moved() - return COMPONENT_MOVABLE_BLOCK_PRE_MOVE - -/datum/status_effect/ice_block_talisman/on_remove() - if(!owner.stat) - to_chat(owner, "The cube melts!") - owner.cut_overlay(cube) - UnregisterSignal(owner, COMSIG_MOVABLE_PRE_MOVE) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index 6fcf5ada7f4a..b7a2f0912653 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -54,10 +54,10 @@ Difficulty: Medium ranged = TRUE pixel_x = -32 base_pixel_x = -32 - crusher_loot = list(/obj/structure/closet/crate/necropolis/dragon/crusher) + //mob_trophy = /obj/item/mob_trophy/ash_spike loot = list(/obj/structure/closet/crate/necropolis/dragon) butcher_results = list(/obj/item/gem/amber = 1, /obj/item/stack/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/bone = 30) - guaranteed_butcher_results = list(/obj/item/stack/sheet/animalhide/ashdrake = 10, /obj/item/crusher_trophy/ash_spike = 1) + guaranteed_butcher_results = list(/obj/item/stack/sheet/animalhide/ashdrake = 10) var/swooping = NONE var/player_cooldown = 0 var/dungeon = FALSE //if true, on death will spawn a ghost role at a lank mark and open blast doors with a certain id @@ -583,7 +583,7 @@ Difficulty: Medium mouse_opacity = MOUSE_OPACITY_ICON damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) loot = list() - crusher_loot = list() + mob_trophy = list() butcher_results = list(/obj/item/stack/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/bone = 30) attack_action_types = list() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index 4df97bac4a6f..ba112bbf5e72 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -59,7 +59,7 @@ Difficulty: Hard ranged_cooldown_time = 40 aggro_vision_range = 21 //so it can see to one side of the arena to the other loot = list(/obj/item/hierophant_club) - crusher_loot = list(/obj/item/hierophant_club, /obj/item/crusher_trophy/vortex_talisman) + //mob_trophy = /obj/item/mob_trophy/vortex_talisman wander = FALSE gps_name = "Zealous Signal" achievement_type = /datum/award/achievement/boss/hierophant_kill diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm index 120b850cf428..37934c0367e5 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm @@ -28,7 +28,7 @@ layer = LARGE_MOB_LAYER //Looks weird with them slipping under mineral walls and cameras and shit otherwise mouse_opacity = MOUSE_OPACITY_OPAQUE // Easier to click on in melee, they're giant targets anyway flags_1 = PREVENT_CONTENTS_EXPLOSION_1 - var/list/crusher_loot + var/mob_trophy var/achievement_type var/crusher_achievement_type var/score_achievement_type @@ -71,10 +71,10 @@ if(health > 0) return else - var/datum/status_effect/crusher_damage/C = has_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING) + spawn_mob_trophy() + var/datum/status_effect/crusher_damage/crusher = has_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING) var/crusher_kill = FALSE - if(C && crusher_loot && C.total_damage >= maxHealth * 0.6) - spawn_crusher_loot() + if(crusher && mob_trophy && crusher.total_damage >= maxHealth * 0.6) crusher_kill = TRUE if(true_spawn && !(flags_1 & ADMIN_SPAWNED_1)) var/tab = "megafauna_kills" @@ -85,8 +85,8 @@ SSblackbox.record_feedback("tally", tab, 1, "[initial(name)]") ..() -/mob/living/simple_animal/hostile/megafauna/proc/spawn_crusher_loot() - loot = crusher_loot +/mob/living/simple_animal/hostile/megafauna/proc/spawn_mob_trophy() + loot += mob_trophy /mob/living/simple_animal/hostile/megafauna/gib() if(health > 0) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm index a2cceb5a3aaa..0c13b9d67f16 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm @@ -39,7 +39,7 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa for(var/t in swarmerTypes) . += GLOB.AISwarmerCapsByType[t] - +//this should. not be a simple mob i think /mob/living/simple_animal/hostile/megafauna/swarmer_swarm_beacon name = "swarmer beacon" desc = "That name is a bit of a mouthful, but stop paying attention to your mouth they're eating everything!" diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm index 59a58bd48d16..095ad0f8fca2 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm @@ -32,7 +32,7 @@ Difficulty: Hard loot = list() butcher_results = list() guaranteed_butcher_results = list(/obj/item/wendigo_blood = 1) - crusher_loot = list(/obj/item/crusher_trophy/demon_claws) + //mob_trophy = /obj/item/mob_trophy/demon_claws wander = FALSE del_on_death = FALSE blood_volume = BLOOD_VOLUME_NORMAL diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index ca595d4d682f..0568533c1e0c 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -205,7 +205,6 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca /mob/living/simple_animal/hostile/mimic/copy/ranged var/obj/item/gun/TrueGun = null - var/obj/item/gun/magic/Zapstick var/obj/item/gun/ballistic/Pewgun var/obj/item/gun/energy/Zapgun @@ -223,10 +222,6 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca move_to_delay = 2 * G.w_class + 1 projectilesound = G.fire_sound TrueGun = G - if(istype(G, /obj/item/gun/magic)) - Zapstick = G - var/obj/item/ammo_casing/magic/M = Zapstick.ammo_type - projectiletype = initial(M.projectile_type) if(istype(G, /obj/item/gun/ballistic)) Pewgun = G var/obj/item/ammo_box/magazine/M = Pewgun.mag_type @@ -245,11 +240,6 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca Zapgun.cell.use(shot.e_cost) Zapgun.update_appearance() ..() - else if(Zapstick) - if(Zapstick.charges) - Zapstick.charges-- - Zapstick.update_appearance() - ..() else if(Pewgun) if(Pewgun.chambered) if(Pewgun.chambered.BB) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm index eb8302536e50..d10b9b86fb9b 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm @@ -230,7 +230,7 @@ movement_type = FLYING robust_searching = 1 attack_same = TRUE // So we'll fight basilisks - crusher_loot = /obj/item/crusher_trophy/watcher_wing + //mob_trophy = /obj/item/mob_trophy/watcher_wing gold_core_spawnable = NO_SPAWN loot = list() butcher_results = list(/obj/item/stack/ore/diamond = 2, /obj/item/stack/sheet/sinew = 2, /obj/item/stack/sheet/bone = 1) @@ -294,8 +294,8 @@ light_power = 2.5 light_color = LIGHT_COLOR_LAVA projectiletype = /obj/projectile/temp/basilisk/magmawing - crusher_loot = /obj/item/crusher_trophy/magma_wing - crusher_drop_mod = 75 + //mob_trophy = /obj/item/mob_trophy/magma_wing + trophy_drop_mod = 75 /mob/living/simple_animal/hostile/asteroid/basilisk/watcher/icewing name = "icewing watcher" @@ -309,8 +309,8 @@ ranged_cooldown_time = 20 projectiletype = /obj/projectile/temp/basilisk/icewing butcher_results = list(/obj/item/stack/ore/diamond = 5, /obj/item/stack/sheet/bone = 1) //No sinew; the wings are too fragile to be usable - crusher_loot = /obj/item/crusher_trophy/ice_wing - crusher_drop_mod = 75 + //mob_trophy = /obj/item/mob_trophy/ice_wing + trophy_drop_mod = 75 /obj/projectile/temp/basilisk/magmawing name = "scorching blast" diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/brimdemon.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/brimdemon.dm index 1d9f6e174660..815bfca00028 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/brimdemon.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/brimdemon.dm @@ -37,7 +37,7 @@ light_color = LIGHT_COLOR_BLOOD_MAGIC light_power = 5 light_range = 1.4 - crusher_loot = /obj/item/crusher_trophy/brimdemon_fang + //mob_trophy = /obj/item/mob_trophy/brimdemon_fang /// Are we charging/firing? If yes stops our movement. var/firing = FALSE /// A list of all the beam parts. @@ -184,22 +184,6 @@ hit_mob.adjustFireLoss(5) to_chat(hit_mob, span_danger("You're damaged by [src]!")) -/obj/item/crusher_trophy/brimdemon_fang - name = "brimdemon's fang" - icon_state = "brimdemon_fang" - desc = "A fang from a brimdemon's corpse." - denied_type = /obj/item/crusher_trophy/brimdemon_fang - var/static/list/comic_phrases = list("BOOM", "BANG", "KABLOW", "KAPOW", "OUCH", "BAM", "KAPOW", "WHAM", "POW", "KABOOM") - var/static/list/damage_heal_order = list(BRUTE, BURN, OXY) - -/obj/item/crusher_trophy/brimdemon_fang/effect_desc() - return "mark detonation creates audiosensory effects on the target and slightly heals the wielder" - -/obj/item/crusher_trophy/brimdemon_fang/on_mark_detonation(mob/living/target, mob/living/user) - target.balloon_alert_to_viewers("[pick(comic_phrases)]!") - playsound(target, 'sound/creatures/brimdemon_crush.ogg', 100) - user.heal_ordered_damage(bonus_value * 0.4, damage_heal_order) - /obj/effect/decal/cleanable/brimdust name = "brimdust" desc = "Dust from a brimdemon. It is considered valuable for botanical and heating purposes." diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm index 7e2b1c3d990c..cb7eaad0e988 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm @@ -43,7 +43,7 @@ mob_biotypes = MOB_ORGANIC|MOB_BEAST mouse_opacity = MOUSE_OPACITY_ICON deathmessage = "explodes into gore!" - loot_drop = /obj/item/crusher_trophy/broodmother_tongue + //loot_drop = /obj/item/mob_trophy/broodmother_tongue attack_action_types = list(/datum/action/innate/elite_attack/tentacle_patch, /datum/action/innate/elite_attack/spawn_children, @@ -246,22 +246,6 @@ T = get_step(T, i) new /obj/effect/temp_visual/goliath_tentacle/broodmother(T, spawner) -// Broodmother's loot: Broodmother Tongue -/obj/item/crusher_trophy/broodmother_tongue - name = "broodmother tongue" - desc = "The tongue of a broodmother. If attached a certain way, makes for a suitable crusher trophy." - icon = 'icons/obj/lavaland/elite_trophies.dmi' - icon_state = "broodmother_tongue" - denied_type = /obj/item/crusher_trophy/broodmother_tongue - bonus_value = 35 - -/obj/item/crusher_trophy/broodmother_tongue/effect_desc() - return "waveform collapse to have a [bonus_value]% chance to summon a patch of goliath tentacles at the target's location" - -/obj/item/crusher_trophy/broodmother_tongue/on_mark_detonation(mob/living/target, mob/living/user) - if(rand(1, 100) <= bonus_value && target.stat != DEAD) - new /obj/effect/temp_visual/goliath_tentacle/broodmother/patch(get_turf(target), user) - /mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/rockplanet name = "baby gruboid" desc = "A young gruboid recently born. As a defense mechanism, they violently explode if killed." diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm index f0b6dc3e8d54..e6ea404aca09 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/legionnaire.dm @@ -38,7 +38,7 @@ mouse_opacity = MOUSE_OPACITY_ICON deathsound = 'sound/magic/curse.ogg' deathmessage = "'s arms reach out before it falls apart onto the floor, lifeless." - loot_drop = /obj/item/crusher_trophy/legionnaire_spine + loot_drop = /obj/item/mob_trophy/legionnaire_spine attack_action_types = list(/datum/action/innate/elite_attack/legionnaire_charge, /datum/action/innate/elite_attack/head_detach, @@ -278,23 +278,8 @@ transform *= 0.33 // Legionnaire's loot: Legionnaire Spine - -/obj/item/crusher_trophy/legionnaire_spine +/obj/item/mob_trophy/legionnaire_spine name = "legionnaire spine" desc = "The spine of a legionnaire. It almost feels like it's moving..." icon = 'icons/obj/lavaland/elite_trophies.dmi' icon_state = "legionnaire_spine" - denied_type = /obj/item/crusher_trophy/legionnaire_spine - bonus_value = 50//These skulls are a joke, so this bonus value had to be put on steroidal emergency treatment - -/obj/item/crusher_trophy/legionnaire_spine/effect_desc() - return "waveform collapse to have a [bonus_value]% chance to summon a loyal legion skull" - -/obj/item/crusher_trophy/legionnaire_spine/on_mark_detonation(mob/living/target, mob/living/user) - if(!rand(1, 100) <= bonus_value || target.stat == DEAD) - return - var/mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/A = new /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion(user.loc) - A.flags_1 |= (flags_1 & ADMIN_SPAWNED_1) - A.GiveTarget(target) - A.friends = user - A.faction = user.faction.Copy() diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm index ce3850d22f01..d8aedc292ca0 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm @@ -147,7 +147,7 @@ icon_dead = "goliath_dead" throw_message = "does nothing to the tough hide of the" pre_attack_icon = "goliath_preattack" - crusher_loot = /obj/item/crusher_trophy/goliath_tentacle + //mob_trophy = /obj/item/mob_trophy/goliath_tentacle butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/goliath = 2, /obj/item/stack/sheet/bone = 2, /obj/item/stack/sheet/sinew = 2, /obj/item/stack/ore/silver = 10) guaranteed_butcher_results = list(/obj/item/stack/sheet/animalhide/goliath_hide = 2) loot = list() @@ -249,11 +249,11 @@ maxHealth = 180 health = 180 speed = 4 - crusher_loot = /obj/item/crusher_trophy/elder_tentacle + //mob_trophy = /obj/item/mob_trophy/elder_tentacle pre_attack_icon = "ancient_goliath_preattack" throw_message = "does nothing to the rocky hide of the" guaranteed_butcher_results = list() - crusher_drop_mod = 75 + trophy_drop_mod = 75 wander = FALSE bonus_tame_chance = 10 var/list/cached_tentacle_turfs diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm index 1cbc7ec58d51..d637b19a2a08 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm @@ -50,8 +50,8 @@ OpenFire() return TRUE -/mob/living/simple_animal/hostile/asteroid/hivelord/spawn_crusher_loot() - loot += crusher_loot //we don't butcher +/mob/living/simple_animal/hostile/asteroid/hivelord/spawn_mob_trophy() + loot += mob_trophy //we don't butcher /mob/living/simple_animal/hostile/asteroid/hivelord/death(gibbed) mouse_opacity = MOUSE_OPACITY_ICON @@ -119,7 +119,7 @@ throw_message = "bounces harmlessly off of" loot = list(/obj/item/organ/regenerative_core/legion) brood_type = /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion - crusher_loot = /obj/item/crusher_trophy/legion_skull + mob_trophy = /obj/item/mob_trophy/legion_skull del_on_death = 1 stat_attack = HARD_CRIT robust_searching = 1 @@ -131,7 +131,7 @@ move_resist = MOVE_RESIST_DEFAULT pull_force = PULL_FORCE_DEFAULT if(prob(15)) - new /obj/item/crusher_trophy/legion_skull(loc) + new /obj/item/mob_trophy/legion_skull(loc) visible_message("One of the [src]'s skulls looks intact.") ..() @@ -150,7 +150,7 @@ icon_living = "dwarf_legion" icon_aggro = "dwarf_legion" icon_dead = "dwarf_legion" - crusher_loot = /obj/item/crusher_trophy/dwarf_skull + //mob_trophy = /obj/item/mob_trophy/dwarf_skull maxHealth = 150 health = 150 move_to_delay = 2 @@ -182,9 +182,6 @@ move_force = MOVE_FORCE_DEFAULT move_resist = MOVE_RESIST_DEFAULT pull_force = PULL_FORCE_DEFAULT - if(prob(75)) - new /obj/item/crusher_trophy/dwarf_skull(loc) - visible_message("One of the [src]'s skulls looks like it survived.") ..() //Legion skull @@ -316,14 +313,9 @@ move_resist = MOVE_RESIST_DEFAULT pull_force = PULL_FORCE_DEFAULT visible_message("[src] falls over with a mighty crash, the remaining legions within it falling apart!") - new /obj/item/crusher_trophy/legion_skull(loc) - new /obj/item/crusher_trophy/legion_skull(loc) - new /obj/item/crusher_trophy/legion_skull(loc) new /mob/living/simple_animal/hostile/asteroid/hivelord/legion(loc) new /mob/living/simple_animal/hostile/asteroid/hivelord/legion(loc) new /mob/living/simple_animal/hostile/asteroid/hivelord/legion(loc) - if(prob(45)) - new /obj/item/reagent_containers/glass/bottle/necropolis_seed(loc) ..(gibbed) /mob/living/simple_animal/hostile/big_legion/Initialize() @@ -339,7 +331,7 @@ icon_living = "snowlegion" icon_aggro = "snowlegion_alive" icon_dead = "snowlegion" - crusher_loot = /obj/item/crusher_trophy/legion_skull + mob_trophy = /obj/item/mob_trophy/legion_skull loot = list(/obj/item/organ/regenerative_core/legion) brood_type = /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/snow @@ -403,521 +395,38 @@ /obj/effect/mob_spawn/human/corpse/damaged/legioninfested/Initialize() //in an ideal world, these would generate, the legion would overlay over the corpse, and we'd get cool sprites mob_species = pickweight(list( - /datum/species/human = 31, - /datum/species/lizard = 26, - /datum/species/elzuose = 24, - /datum/species/spider = 7, - /datum/species/ipc = 7, - /datum/species/jelly = 4, - /datum/species/fly = 1 + /datum/species/human = 50, + /datum/species/lizard = 20, + /datum/species/ipc = 10, + /datum/species/elzuose = 10, + /datum/species/moth = 5, + /datum/species/spider = 5 ) ) var/type = pickweight(list( - "Miner" = 44, - "Waldo" = 3, - "Ashwalker" = 7, - "Soldier" = 5, - "Oldminer" = 8, - "Kobold" = 5, - "SRM" = 6, - "Operative" = 5, - pick("Shadow", "YeOlde") = 4 + "Miner" = 40, + "Assistant" = 10, + "Engineer" = 5, + "Doctor" = 5, + "Scientist" = 5, + "Cargo" = 5, + "Security" = 5 ) ) + switch(type) if("Miner") - if(prob(2)) - mob_species = /datum/species/plasmaman - uniform = /obj/item/clothing/under/plasmaman - head = /obj/item/clothing/head/helmet/space/plasmaman - belt = /obj/item/tank/internals/plasmaman/belt - else - uniform = /obj/item/clothing/under/rank/cargo/miner/lavaland - if (prob(4)) - belt = pickweight(list( - /obj/item/storage/belt/mining = 2, - /obj/item/storage/belt/mining/alt = 2 - ) - ) - else if(prob(10)) - belt = pickweight(list( - /obj/item/pickaxe = 8, - /obj/item/pickaxe/mini = 4, - /obj/item/pickaxe/silver = 2, - /obj/item/pickaxe/diamond = 1, - /obj/item/gun/energy/kinetic_accelerator = 1 - ) - ) - else - belt = /obj/item/tank/internals/emergency_oxygen/engi - if(mob_species != /datum/species/lizard) - shoes = /obj/item/clothing/shoes/workboots/mining - gloves = /obj/item/clothing/gloves/color/black - mask = /obj/item/clothing/mask/gas/explorer - if(prob(45)) - glasses = /obj/item/clothing/glasses/meson - if(prob(20)) - suit = pickweight(list( - /obj/item/clothing/suit/hooded/explorer = 18, - /obj/item/clothing/suit/hooded/cloak/goliath = 2 - ) - ) - if(prob(30)) - r_pocket = pickweight(list( - /obj/item/stack/marker_beacon = 20, - /obj/item/spacecash/bundle/mediumrand = 7, - /obj/item/reagent_containers/hypospray/medipen/survival = 2, - /obj/item/borg/upgrade/modkit/damage = 1 - ) - ) - if(prob(10)) - l_pocket = pickweight(list( - /obj/item/spacecash/bundle/mediumrand = 7, - /obj/item/reagent_containers/hypospray/medipen/survival = 2, - /obj/item/borg/upgrade/modkit/cooldown = 1 - ) - ) - if(prob(95)) - back = /obj/item/storage/backpack/explorer - backpack_contents = list(/obj/item/radio) - if(prob(70)) - backpack_contents += pickweight(list( - /obj/item/borg/upgrade/modkit/damage = 1, - /obj/item/borg/upgrade/modkit/trigger_guard = 1, - /obj/item/soap/nanotrasen = 1, - /obj/item/wormhole_jaunter = 1, - /obj/item/fulton_core = 1, - /obj/item/extraction_pack = 2, - /obj/item/stack/sheet/animalhide/goliath_hide = 3, - /obj/item/hivelordstabilizer = 2, - /obj/item/stack/marker_beacon/ten = 2, - /obj/item/mining_scanner = 2, - /obj/item/extinguisher/mini = 2, - /obj/item/kitchen/knife/combat/survival = 3, - /obj/item/flashlight/seclite=3, - /obj/item/stack/sheet/sinew = 3, - /obj/item/stack/sheet/bone = 3 - ) - ) - if(prob(70)) - backpack_contents += pickweight(list( - /obj/item/borg/upgrade/modkit/damage = 1, - /obj/item/borg/upgrade/modkit/trigger_guard = 1, - /obj/item/soap/nanotrasen = 1, - /obj/item/wormhole_jaunter = 1, - /obj/item/fulton_core = 1, - /obj/item/extraction_pack = 2, - /obj/item/stack/sheet/animalhide/goliath_hide = 3, - /obj/item/hivelordstabilizer = 2, - /obj/item/stack/marker_beacon/ten = 2, - /obj/item/mining_scanner = 2, - /obj/item/extinguisher/mini = 2, - /obj/item/kitchen/knife/combat/survival = 3, - /obj/item/flashlight/seclite = 3, - /obj/item/stack/sheet/sinew = 3, - /obj/item/stack/sheet/bone = 3 - ) - ) - if(prob(70)) - backpack_contents += pickweight(list( - /obj/item/borg/upgrade/modkit/damage = 1, - /obj/item/borg/upgrade/modkit/trigger_guard = 1, - /obj/item/soap/nanotrasen = 1, - /obj/item/wormhole_jaunter = 1, - /obj/item/fulton_core = 1, - /obj/item/extraction_pack = 2, - /obj/item/stack/sheet/animalhide/goliath_hide = 3, - /obj/item/hivelordstabilizer = 2, - /obj/item/stack/marker_beacon/ten = 2, - /obj/item/mining_scanner = 2, - /obj/item/extinguisher/mini = 2, - /obj/item/kitchen/knife/combat/survival = 3, - /obj/item/flashlight/seclite = 3, - /obj/item/stack/sheet/sinew = 3, - /obj/item/stack/sheet/bone = 3 - ) - ) - if(prob(30)) - backpack_contents += list( - /obj/item/reagent_containers/hypospray/medipen/survival = pickweight(list( - 1 = 3, - 2 = 2, - 3 = 1 - ) - ) - ) - else - back = /obj/item/kinetic_crusher - if("Oldminer") - suit = /obj/item/clothing/suit/hooded/explorer/old - mask = /obj/item/clothing/mask/gas/explorer/old - if(prob(95)) - glasses = /obj/item/clothing/glasses/meson - else - glasses = /obj/item/clothing/glasses/meson/night - suit_store = /obj/item/tank/internals/oxygen - gloves = /obj/item/clothing/gloves/explorer/old - uniform = /obj/item/clothing/under/rank/cargo/miner/lavaland/old - if(prob(85)) - back = /obj/item/storage/backpack/explorer //someone could totally make these backpacks a subtype and just have them be there. It'd cut down this file size a bit. - backpack_contents = list() - if(prob(70)) - backpack_contents += pickweight(list( - /obj/item/borg/upgrade/modkit/damage = 1, - /obj/item/borg/upgrade/modkit/trigger_guard = 1, - /obj/item/soap/nanotrasen = 1, - /obj/item/wormhole_jaunter = 1, - /obj/item/fulton_core = 1, - /obj/item/extraction_pack = 2, - /obj/item/stack/sheet/animalhide/goliath_hide = 3, - /obj/item/hivelordstabilizer = 2, - /obj/item/stack/marker_beacon/ten = 2, - /obj/item/mining_scanner = 2, - /obj/item/extinguisher/mini = 2, - /obj/item/kitchen/knife/combat/survival = 3, - /obj/item/flashlight/seclite=3, - /obj/item/stack/sheet/sinew = 3, - /obj/item/stack/sheet/bone = 3 - ) - ) - if(prob(70)) - backpack_contents += pickweight(list( - /obj/item/borg/upgrade/modkit/damage = 1, - /obj/item/borg/upgrade/modkit/trigger_guard = 1, - /obj/item/soap/nanotrasen = 1, - /obj/item/wormhole_jaunter = 1, - /obj/item/fulton_core = 1, - /obj/item/extraction_pack = 2, - /obj/item/stack/sheet/animalhide/goliath_hide = 3, - /obj/item/hivelordstabilizer = 2, - /obj/item/stack/marker_beacon/ten = 2, - /obj/item/mining_scanner = 2, - /obj/item/extinguisher/mini = 2, - /obj/item/kitchen/knife/combat/survival = 3, - /obj/item/flashlight/seclite=3, - /obj/item/stack/sheet/sinew = 3, - /obj/item/stack/sheet/bone = 3 - ) - ) - if(prob(70)) - backpack_contents += pickweight(list( - /obj/item/borg/upgrade/modkit/damage = 1, - /obj/item/borg/upgrade/modkit/trigger_guard = 1, - /obj/item/soap/nanotrasen = 1, - /obj/item/wormhole_jaunter = 1, - /obj/item/fulton_core = 1, - /obj/item/extraction_pack = 2, - /obj/item/stack/sheet/animalhide/goliath_hide = 3, - /obj/item/hivelordstabilizer = 2, - /obj/item/stack/marker_beacon/ten = 2, - /obj/item/mining_scanner = 2, - /obj/item/extinguisher/mini = 2, - /obj/item/kitchen/knife/combat/survival = 3, - /obj/item/flashlight/seclite=3, - /obj/item/stack/sheet/sinew = 3, - /obj/item/stack/sheet/bone = 3 - ) - ) - if(prob(30)) - backpack_contents += list( - /obj/item/reagent_containers/hypospray/medipen/survival = pickweight(list( - 1 = 3, - 2 = 2, - 3 = 1 - ) - ) - ) - else - back = /obj/item/kinetic_crusher/old - if(prob(30)) - belt = /obj/item/gun/energy/kinetic_accelerator/old - if(prob(30)) - r_pocket = pickweight(list( - /obj/item/stack/marker_beacon = 20, - /obj/item/spacecash/bundle/mediumrand = 7, - /obj/item/reagent_containers/hypospray/medipen/survival = 2, - /obj/item/borg/upgrade/modkit/damage = 1 - ) - ) - if(prob(30)) - l_pocket = pickweight(list( - /obj/item/spacecash/bundle/mediumrand = 5, - /obj/item/reagent_containers/hypospray/medipen/survival = 2, - /obj/item/borg/upgrade/modkit/cooldown = 1 - ) - ) - if("Ashwalker") - mob_species = /datum/species/lizard/ashwalker - uniform = /obj/item/clothing/under/costume/gladiator/ash_walker - if(prob(95)) - head = /obj/item/clothing/head/helmet/gladiator - else - head = /obj/item/clothing/head/helmet/skull - suit = /obj/item/clothing/suit/armor/bone - gloves = /obj/item/clothing/gloves/bracer - if(prob(45)) - back = pickweight(list( - /obj/item/spear/bonespear = 3, - /obj/item/fireaxe/boneaxe = 2 - ) - ) - if(prob(10)) - belt = /obj/item/storage/belt/mining/primitive - if(prob(30)) - r_pocket = /obj/item/restraints/legcuffs/bola/watcher - if(prob(30)) - l_pocket = /obj/item/kitchen/knife/combat/bone - if("Soldier") - mob_species = /datum/species/human - if(prob(90)) - uniform = /obj/item/clothing/under/solgov - suit = /obj/item/clothing/suit/armor/vest/bulletproof/solgov - shoes = /obj/item/clothing/shoes/jackboots - gloves = /obj/item/clothing/gloves/color/black - mask = /obj/item/clothing/mask/gas/sechailer - head = /obj/item/clothing/head/solgov/sonnensoldner - id = /obj/item/card/id/solgov - else - uniform = /obj/item/clothing/under/solgov - suit = /obj/item/clothing/suit/space/hardsuit/solgov - shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - mask = /obj/item/clothing/mask/gas/sechailer/swat - id = /obj/item/card/id/solgov - if(prob(85)) - back = /obj/item/storage/backpack - backpack_contents = list() - if(prob(75)) - backpack_contents += pickweight(list( - /obj/item/reagent_containers/hypospray/medipen/stimpack/traitor = 1, - /obj/item/storage/firstaid/tactical = 1, - /obj/item/gun/ballistic/automatic/pistol/solgov = 1, - /obj/item/gps = 1, - /obj/item/stock_parts/cell/gun/upgraded = 2, - /obj/item/ammo_box/magazine/pistol556mm = 3, - /obj/item/desk_flag/solgov = 3, - /obj/item/stack/marker_beacon/ten = 3, - /obj/item/detective_scanner = 2, - /obj/item/extinguisher/mini = 3, - /obj/item/kitchen/knife/combat = 3, - /obj/item/flashlight/seclite=3, - /obj/item/ammo_casing/shotgun = 3, - /obj/item/binoculars = 3, - /obj/item/clipboard = 3 - ) - ) - if(prob(75)) - backpack_contents += pickweight(list( - /obj/item/reagent_containers/hypospray/medipen/stimpack/traitor = 1, - /obj/item/storage/firstaid/tactical = 1, - /obj/item/gun/ballistic/automatic/pistol/solgov = 1, - /obj/item/gps = 1, - /obj/item/stock_parts/cell/gun/upgraded = 2, - /obj/item/ammo_box/magazine/pistol556mm = 3, - /obj/item/desk_flag/solgov = 3, - /obj/item/stack/marker_beacon/ten = 3, - /obj/item/detective_scanner = 2, - /obj/item/extinguisher/mini = 3, - /obj/item/kitchen/knife/combat = 3, - /obj/item/flashlight/seclite=3, - /obj/item/ammo_casing/shotgun = 3, - /obj/item/binoculars = 3, - /obj/item/clipboard = 3 - ) - ) - if(prob(75)) - backpack_contents += pickweight(list( - /obj/item/reagent_containers/hypospray/medipen/stimpack/traitor = 1, - /obj/item/storage/firstaid/tactical = 1, - /obj/item/gun/ballistic/automatic/pistol/solgov = 1, - /obj/item/gps = 1, - /obj/item/stock_parts/cell/gun/upgraded = 2, - /obj/item/ammo_box/magazine/pistol556mm = 3, - /obj/item/desk_flag/solgov = 3, - /obj/item/stack/marker_beacon/ten = 3, - /obj/item/detective_scanner = 2, - /obj/item/extinguisher/mini = 3, - /obj/item/kitchen/knife/combat = 3, - /obj/item/flashlight/seclite=3, - /obj/item/ammo_casing/shotgun = 3, - /obj/item/binoculars = 3, - /obj/item/clipboard = 3 - ) - ) - else - back = pickweight(list( - /obj/item/energyhalberd = 5, - /obj/item/gun/ballistic/rocketlauncher = 5 - ) - ) - if(prob(25)) - belt = /obj/item/storage/belt/military - if(prob(50)) - r_pocket = pickweight(list( - /obj/item/reagent_containers/hypospray/medipen/stimpack = 1, - /obj/item/kitchen/knife/letter_opener = 3, - /obj/item/radio = 3, - /obj/item/grenade/syndieminibomb/concussion = 1, - /obj/item/melee/transforming/energy/ctf/solgov = 1 - ) - ) - if(prob(50)) - l_pocket = pickweight(list( - /obj/item/reagent_containers/hypospray/medipen/stimpack = 1, - /obj/item/kitchen/knife/letter_opener = 3, - /obj/item/radio = 3, - /obj/item/grenade/syndieminibomb/concussion = 1, - /obj/item/melee/transforming/energy/ctf/solgov = 1 - ) - ) - if(prob(70)) - glasses = pickweight(list( - /obj/item/clothing/glasses/sunglasses = 3, - /obj/item/clothing/glasses/hud/health = 3, - /obj/item/clothing/glasses/hud/health/night = 1, - /obj/item/clothing/glasses/night = 2 - ) - ) - if("Kobold") - mob_species = /datum/species/lizard/ashwalker/kobold - uniform = /obj/item/clothing/under/costume/gladiator/ash_walker - if(prob(95)) - head = /obj/item/clothing/head/helmet/gladiator - else - head = /obj/item/clothing/head/helmet/skull - suit = /obj/item/clothing/suit/armor/bone - gloves = /obj/item/clothing/gloves/bracer - if(prob(5)) - back = pickweight(list( - /obj/item/spear/bonespear = 3, - /obj/item/fireaxe/boneaxe = 2 - ) - ) - if(prob(10)) - belt = /obj/item/storage/belt/mining/primitive - if(prob(30)) - r_pocket = /obj/item/kitchen/knife/combat/bone - if(prob(30)) - l_pocket = /obj/item/kitchen/knife/combat/bone - if("YeOlde") - mob_gender = FEMALE - uniform = /obj/item/clothing/under/costume/maid - gloves = /obj/item/clothing/gloves/color/white - shoes = /obj/item/clothing/shoes/laceup - head = /obj/item/clothing/head/helmet/knight - suit = /obj/item/clothing/suit/armor/riot/knight - back = /obj/item/shield/riot/buckler - belt = /obj/item/nullrod/claymore - r_pocket = /obj/item/tank/internals/emergency_oxygen - mask = /obj/item/clothing/mask/breath - if("Operative") - id_job = "Operative" - if(prob(40)) - outfit = /datum/outfit/syndicatecommandocorpse - else if(prob(5)) - outfit = /datum/outfit/syndicatestormtroopercorpse - else - outfit = /datum/outfit/syndicateramzicorpse - if("Waldo")//WE FINALLY FOUND HIM - name = "Waldo" - uniform = /obj/item/clothing/under/pants/jeans - suit = /obj/item/clothing/suit/striped_sweater - head = /obj/item/clothing/head/beanie/waldo - shoes = /obj/item/clothing/shoes/sneakers/brown - ears = /obj/item/radio/headset - glasses = /obj/item/clothing/glasses/regular/circle - back = /obj/item/storage/backpack/satchel/leather - backpack_contents = list() - if(prob(50)) - backpack_contents += pickweight(list( - /obj/item/book/granter/spell/knock = 1, - /obj/item/book/granter/spell/blind = 1, - /obj/item/shadowcloak = 1, - /obj/item/book/granter/spell/smoke = 2, - /obj/item/reagent_containers/syringe/mulligan = 2, - /obj/item/dice/d20 = 3, - /obj/item/dice/d20/fate/stealth/one_use = 1, - /obj/item/clothing/head/chameleon/broken = 3, - /obj/item/stack/marker_beacon/ten = 3, - /obj/item/grenade/smokebomb = 3, - /obj/item/grenade/flashbang = 3 - ) - ) - if(prob(50)) - backpack_contents += pickweight(list( - /obj/item/book/granter/spell/knock = 1, - /obj/item/book/granter/spell/blind = 1, - /obj/item/shadowcloak = 1, - /obj/item/book/granter/spell/smoke = 2, - /obj/item/reagent_containers/syringe/mulligan = 2, - /obj/item/dice/d20/fate/stealth/one_use = 1, - /obj/item/dice/d20 = 3, - /obj/item/clothing/head/chameleon/broken = 3, - /obj/item/stack/marker_beacon/ten = 3, - /obj/item/grenade/smokebomb = 3, - /obj/item/grenade/flashbang = 3 - ) - ) - if(prob(50)) - backpack_contents += pickweight(list( - /obj/item/book/granter/spell/knock = 1, - /obj/item/book/granter/spell/blind = 1, - /obj/item/shadowcloak = 1, - /obj/item/book/granter/spell/smoke = 2, - /obj/item/reagent_containers/syringe/mulligan = 2, - /obj/item/dice/d20/fate/stealth/one_use = 1, - /obj/item/clothing/head/chameleon/broken = 3, - /obj/item/stack/marker_beacon/ten = 3, - /obj/item/grenade/smokebomb = 3, - /obj/item/grenade/flashbang = 3 - ) - ) - if(prob(25)) - r_pocket = pickweight(list( - /obj/item/chameleon, - /obj/item/dnainjector/chameleonmut = 1, - /obj/item/flashlight/flashdark = 1 - ) - ) - if(prob(25)) - l_pocket = pickweight(list( - /obj/item/chameleon, - /obj/item/dnainjector/chameleonmut = 1, - /obj/item/flashlight/flashdark = 1 - ) - ) - if("Shadow") - mob_species = /datum/species/shadow - neck = /obj/item/clothing/accessory/medal/plasma/nobel_science - uniform = /obj/item/clothing/under/color/black - shoes = /obj/item/clothing/shoes/sneakers/black - suit = /obj/item/clothing/suit/toggle/labcoat - glasses = /obj/item/clothing/glasses/blindfold - back = /obj/item/tank/internals/oxygen - mask = /obj/item/clothing/mask/breath - if("SRM") - uniform = /obj/item/clothing/under/suit/roumain - shoes = /obj/item/clothing/shoes/workboots/mining - if(prob(50)) - suit = /obj/item/clothing/suit/armor/roumain/shadow - head = /obj/item/clothing/head/cowboy/sec/roumain/shadow - else - suit = /obj/item/clothing/suit/armor/roumain - head = /obj/item/clothing/head/cowboy/sec/roumain - if(prob(25)) - suit_store = /obj/item/gun/ballistic/shotgun/flamingarrow - r_pocket = /obj/item/book/manual/trickwines_4_brewers - belt = pick(list(/obj/item/kitchen/knife/hunting = 1, /obj/item/gun/ballistic/derringer = 1)) - back = /obj/item/storage/backpack/cultpack - backpack_contents = list() - if(prob(75)) - backpack_contents += list(/obj/item/ammo_box/c38_box = 1) - if(prob(75)) - backpack_contents += list(pick( - /obj/item/reagent_containers/food/drinks/breakawayflask/vintage/ashwine, - /obj/item/reagent_containers/food/drinks/breakawayflask/vintage/icewine, - /obj/item/reagent_containers/food/drinks/breakawayflask/vintage/shockwine, - /obj/item/reagent_containers/food/drinks/breakawayflask/vintage/hearthwine, - /obj/item/reagent_containers/food/drinks/breakawayflask/vintage/forcewine, - /obj/item/reagent_containers/food/drinks/breakawayflask/vintage/prismwine,) = 2) + outfit = /datum/outfit/generic/miner + if("Assistant") + outfit = /datum/outfit/generic + if("Engineer") + outfit = /datum/outfit/generic/engineer + if("Doctor") + outfit = /datum/outfit/generic/doctor + if("Scientist") + outfit = /datum/outfit/generic/science + if("Cargo") + outfit = /datum/outfit/generic/cargo + if("Security") + outfit = /datum/outfit/generic/security . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm new file mode 100644 index 000000000000..0dca4c21dade --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord_outfits.dm @@ -0,0 +1,479 @@ +/datum/outfit/generic/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + . = ..() + uniform = pickweight(list( + /obj/item/clothing/under/utility = 5, + /obj/item/clothing/under/utility/skirt = 5, + /obj/item/clothing/under/color/black = 1, + /obj/item/clothing/under/color/white = 1, + /obj/item/clothing/under/color/random = 1, + /obj/item/clothing/under/suit/white = 1, + /obj/item/clothing/under/suit/tan = 1, + /obj/item/clothing/under/suit/black_really = 1, + /obj/item/clothing/under/suit/navy = 1, + /obj/item/clothing/under/suit/burgundy = 1, + /obj/item/clothing/under/suit/charcoal = 1, + /obj/item/clothing/under/rank/civilian/lawyer/galaxy = 1, + /obj/item/clothing/under/suit/black/skirt = 1, + /obj/item/clothing/under/suit/black = 1, + /obj/item/clothing/under/dress/sailor = 1, + /obj/item/clothing/under/dress/striped = 1, + /obj/item/clothing/under/dress/skirt/blue = 1, + /obj/item/clothing/under/syndicate/tacticool = 1, + ) + ) + suit = pickweight(list( + /obj/item/clothing/suit/hooded/wintercoat = 1, + /obj/item/clothing/suit/jacket = 1, + /obj/item/clothing/suit/jacket/leather = 1, + /obj/item/clothing/suit/jacket/leather/overcoat = 1, + /obj/item/clothing/suit/jacket/leather/duster = 1, + /obj/item/clothing/suit/jacket/miljacket = 1, + /obj/item/clothing/suit/jacket/puffer = 1, + /obj/item/clothing/suit/gothcoat = 1, + /obj/item/clothing/suit/toggle/industrial = 1, + /obj/item/clothing/suit/toggle/hazard = 1, + ) + ) + back = pickweight(list( + /obj/item/storage/backpack = 1, + /obj/item/storage/backpack/satchel = 1, + /obj/item/storage/backpack/duffelbag = 1, + /obj/item/storage/backpack/messenger = 1, + /obj/item/storage/backpack/satchel/leather = 1 + ) + ) + if (prob(10)) + belt = pickweight(list( + /obj/item/gun/ballistic/automatic/pistol/candor = 2, + /obj/item/gun/ballistic/automatic/pistol/commander = 1, + /obj/item/gun/ballistic/automatic/pistol = 1, + /obj/item/gun/ballistic/revolver = 1, + /obj/item/gun/ballistic/revolver/firebrand = 1, + ) + ) + if(prob(50)) + gloves = pickweight(list( + /obj/item/clothing/gloves/color/black = 1, + /obj/item/clothing/gloves/fingerless = 1, + /obj/item/clothing/gloves/color/white = 1, + ) + ) + shoes = pickweight(list( + /obj/item/clothing/shoes/laceup = 1, + /obj/item/clothing/shoes/sandal = 1, + /obj/item/clothing/shoes/winterboots = 1, + /obj/item/clothing/shoes/workboots/mining = 1, + /obj/item/clothing/shoes/workboots = 1, + /obj/item/clothing/shoes/sneakers/black = 1, + /obj/item/clothing/shoes/sneakers/brown = 1, + /obj/item/clothing/shoes/sneakers/white = 1 + ) + ) + if(prob(50)) + head = pickweight(list( + /obj/item/clothing/head/beret = 3, + /obj/item/clothing/head/beret/grey = 3, + /obj/item/clothing/head/flatcap = 3, + /obj/item/clothing/head/beanie = 3, + /obj/item/clothing/head/cowboy = 3, + /obj/item/clothing/head/trapper = 2, + /obj/item/clothing/head/hardhat = 2, + /obj/item/clothing/head/hardhat/orange = 2, + /obj/item/clothing/head/hardhat/dblue = 2, + /obj/item/clothing/head/pirate = 1, + /obj/item/clothing/head/foilhat = 1 + ) + ) + if(prob(50)) + mask = pickweight(list( + /obj/item/clothing/mask/balaclava = 1, + /obj/item/clothing/mask/bandana/red = 1, + /obj/item/clothing/mask/gas = 3, + /obj/item/clothing/mask/breath = 3, + ) + ) + if(prob(25)) + neck = pickweight(list( + /obj/item/clothing/neck/scarf/red = 1, + /obj/item/clothing/neck/scarf/green = 1, + /obj/item/clothing/neck/scarf/darkblue = 1, + /obj/item/clothing/neck/shemagh = 1, + /obj/item/clothing/neck/stripedredscarf = 1, + /obj/item/clothing/neck/stripedgreenscarf = 1, + /obj/item/clothing/neck/stripedbluescarf = 1 + ) + ) + ears = pick(/obj/item/radio/headset, /obj/item/radio/headset/alt) + if(prob(50)) + glasses = pickweight(list( + /obj/item/clothing/glasses/regular = 1, + /obj/item/clothing/glasses/regular/circle = 1, + /obj/item/clothing/glasses/regular/jamjar = 1, + /obj/item/clothing/glasses/eyepatch = 1, + /obj/item/clothing/glasses/cheapsuns = 1, + /obj/item/clothing/glasses/regular/hipster = 1, + /obj/item/clothing/glasses/cold = 1, + /obj/item/clothing/glasses/heat = 1, + /obj/item/clothing/glasses/orange = 1, + ) + ) + if(prob(75)) + r_pocket = /obj/item/tank/internals/emergency_oxygen + if(prob(75)) + l_pocket = pick(/obj/item/radio, /obj/item/flashlight) + id = /obj/item/card/id + backpack_contents = list() + backpack_contents += pickweight(list( + /obj/item/dice/d20 = 1, + /obj/item/lipstick = 1, + /obj/item/clothing/mask/vape = 1, + /obj/item/clothing/mask/vape/cigar = 1, + /obj/item/reagent_containers/food/drinks/flask = 1, + /obj/item/lighter = 1, + /obj/item/toy/cards/deck = 1, + /obj/item/toy/eightball = 1, + /obj/item/storage/wallet = 1, + /obj/item/paicard = 1, + /obj/item/pen/fourcolor = 1, + /obj/item/paper_bin = 1, + /obj/item/cane = 1, + /obj/item/radio = 1, + /obj/item/dyespray = 1, + /obj/item/table_bell/brass = 1, + /obj/item/flashlight = 1, + /obj/item/crowbar/red = 1 + ) + ) + +/datum/outfit/generic + name = "Generic (Legion)" + box = /obj/item/storage/box/survival + random = TRUE + +/datum/outfit/generic/miner/pre_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + if(prob(75)) + uniform = pickweight(list( + /obj/item/clothing/under/rank/cargo/miner/lavaland = 5, + /obj/item/clothing/under/rank/cargo/miner = 4, + /obj/item/clothing/under/rank/cargo/miner/lavaland/old = 1, + ) + ) + if(prob(25)) + suit = pickweight(list( + /obj/item/clothing/suit/hooded/explorer = 18, + /obj/item/clothing/suit/hooded/explorer/old = 1, + /obj/item/clothing/suit/hooded/cloak/goliath = 1 + ) + ) + if(prob(75)) + back = /obj/item/storage/backpack/explorer + if(prob(75)) + belt = pickweight(list( + /obj/item/storage/belt/mining = 2, + /obj/item/storage/belt/mining/alt = 2 + ) + ) + else if(prob(75)) + belt = pickweight(list( + /obj/item/pickaxe = 16, + /obj/item/pickaxe/mini = 8, + /obj/item/pickaxe/silver = 4, + /obj/item/pickaxe/diamond = 2, + /obj/item/gun/energy/kinetic_accelerator = 2, + /obj/item/kinetic_crusher/old = 1 + ) + ) + if(prob(75)) + gloves = pickweight(list( + /obj/item/clothing/gloves/color/black = 9, + /obj/item/clothing/gloves/explorer/old = 1 + ) + ) + if(prob(75)) + shoes = /obj/item/clothing/shoes/workboots/mining + if(prob(75)) + mask = pickweight(list( + /obj/item/clothing/mask/gas/explorer = 9, + /obj/item/clothing/mask/gas/explorer/old = 1 + ) + ) + if(prob(50)) + glasses = /obj/item/clothing/glasses/meson + if(prob(50)) + r_pocket = pickweight(list( + /obj/item/stack/marker_beacon = 20, + /obj/item/spacecash/bundle/mediumrand = 7, + /obj/item/reagent_containers/hypospray/medipen/survival = 2, + /obj/item/borg/upgrade/modkit/damage = 1 + ) + ) + if(prob(25)) + l_pocket = pickweight(list( + /obj/item/spacecash/bundle/mediumrand = 5, + /obj/item/reagent_containers/hypospray/medipen/survival = 2, + /obj/item/borg/upgrade/modkit/cooldown = 1 + ) + ) + if(prob(75)) + for(var/count in 1 to 3) + if(prob(70)) + backpack_contents += pickweight(list( + /obj/item/borg/upgrade/modkit/damage = 1, + /obj/item/borg/upgrade/modkit/trigger_guard = 1, + /obj/item/soap/nanotrasen = 1, + /obj/item/wormhole_jaunter = 1, + /obj/item/fulton_core = 1, + /obj/item/extraction_pack = 2, + /obj/item/stack/sheet/animalhide/goliath_hide = 3, + /obj/item/hivelordstabilizer = 2, + /obj/item/stack/marker_beacon/ten = 2, + /obj/item/mining_scanner = 2, + /obj/item/extinguisher/mini = 2, + /obj/item/kitchen/knife/combat/survival = 3, + /obj/item/flashlight/seclite = 3, + /obj/item/stack/sheet/sinew = 3, + /obj/item/stack/sheet/bone = 3 + ) + ) + if(prob(30)) + backpack_contents += list( + /obj/item/reagent_containers/hypospray/medipen/survival = pickweight(list( + 1 = 3, + 2 = 2, + 3 = 1 + ) + ) + ) + else if (prob(75)) + backpack_contents = list() + back = pickweight(list( + /obj/item/kinetic_crusher = 9, + /obj/item/kinetic_crusher/old = 1 + ) + ) + +/datum/outfit/generic/miner + name = "Miner (Legion)" + +/datum/outfit/generic/engineer/pre_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + if(prob(75)) + uniform = pick(/obj/item/clothing/under/rank/engineering/engineer, /obj/item/clothing/under/rank/engineering/engineer/hazard, /obj/item/clothing/under/rank/security/officer/military/eng) + if(prob(75)) + suit = pick(/obj/item/clothing/suit/toggle/hazard, /obj/item/clothing/suit/hazardvest, /obj/item/clothing/suit/hooded/wintercoat/engineering) + if(prob(75)) + gloves = pick(/obj/item/clothing/gloves/color/yellow, /obj/item/clothing/gloves/color/fyellow, /obj/item/clothing/gloves/color/fyellow/old) + if(prob(75)) + belt = pick(/obj/item/storage/belt/utility/full, /obj/item/storage/belt/utility) + if(prob(50)) + head = /obj/item/clothing/head/welding + if(prob(75)) + ears = /obj/item/radio/headset/headset_eng + else if(prob(50)) + glasses = /obj/item/clothing/glasses/welding + if(prob(75)) + back = pick(/obj/item/storage/backpack/industrial, /obj/item/storage/backpack/satchel/eng, /obj/item/storage/backpack/duffelbag/engineering, /obj/item/storage/backpack/messenger/engi) + if(prob(10)) + back = /obj/item/fireaxe + for(var/i = 1 to 3) + if(prob(75)) + backpack_contents += pickweight(list( + /obj/item/stack/tape/industrial/electrical = 1, + /obj/item/electronics/apc = 1, + /obj/item/multitool = 1, + /obj/item/pipe_dispenser = 1, + /obj/item/tank/internals/emergency_oxygen/engi = 1, + /obj/item/holosign_creator/engineering = 1, + /obj/item/extinguisher/advanced = 1, + /obj/item/stack/sheet/metal/twenty = 1 + ) + ) + if(prob(75)) + accessory = /obj/item/clothing/accessory/armband/engine + +/datum/outfit/generic/engineer + name = "Mechanic (Legion)" + box = /obj/item/storage/box/survival/engineer + +/datum/outfit/generic/doctor/pre_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + if(prob(75)) + uniform = pick(/obj/item/clothing/under/rank/medical/doctor, /obj/item/clothing/under/rank/medical/doctor/blue) + if(prob(75)) + suit = pick(/obj/item/clothing/suit/toggle/labcoat, /obj/item/clothing/suit/apron/surgical ,/obj/item/clothing/suit/hooded/wintercoat/medical) + if(prob(75)) + back = pick(/obj/item/storage/backpack/medic, /obj/item/storage/backpack/satchel/med, /obj/item/storage/backpack/duffelbag/med, /obj/item/storage/backpack/messenger/med) + else if (prob(75)) + back = /obj/item/defibrillator/loaded + if(prob(75)) + belt = pickweight(list(/obj/item/storage/belt/medical = 5, /obj/item/defibrillator/compact/loaded = 1)) + if(prob(75)) + gloves = pick(/obj/item/clothing/gloves/color/white, /obj/item/clothing/gloves/color/latex/nitrile) + if(prob(75)) + mask = /obj/item/clothing/mask/surgical + if(prob(75)) + shoes = /obj/item/clothing/shoes/sneakers/white + if(prob(75)) + head = /obj/item/clothing/head/beret/med + if(prob(75)) + ears = /obj/item/radio/headset/headset_med + if(prob(75)) + glasses = pick(/obj/item/clothing/glasses/hud/health, /obj/item/clothing/glasses/hud/health/prescription) + for(var/i = 1 to 3) + if(prob(75)) + backpack_contents += pickweight(list( + /obj/item/reagent_containers/pill/patch/styptic = 5, + /obj/item/reagent_containers/pill/patch/silver_sulf = 5, + /obj/item/storage/firstaid/medical = 3, + /obj/item/reagent_containers/syringe = 3, + /obj/item/reagent_containers/glass/beaker = 2, + /obj/item/reagent_containers/dropper = 2, + /obj/item/reagent_containers/pill/charcoal = 2, + /obj/item/reagent_containers/medigel/styptic = 2, + /obj/item/reagent_containers/medigel/silver_sulf = 2, + /obj/item/reagent_containers/medigel/sterilizine = 1, + /obj/item/flashlight/pen = 1, + /obj/item/hypospray/mkii = 1, + /obj/item/healthanalyzer = 1, + ) + ) + if(prob(75)) + accessory = /obj/item/clothing/accessory/armband/medblue + +/datum/outfit/generic/doctor + name = "Medical Doctor (Legion)" + box = /obj/item/storage/box/survival/medical + +/datum/outfit/generic/science/pre_equip(mob/living/carbon/human/H) + ..() + if(prob(75)) + uniform = pick(/obj/item/clothing/under/rank/rnd/scientist, /obj/item/clothing/under/rank/rnd/roboticist) + if(prob(75)) + suit = pick(/obj/item/clothing/suit/toggle/labcoat/science, /obj/item/clothing/suit/hooded/wintercoat/science) + if(prob(75)) + back = pick(/obj/item/storage/backpack/science, /obj/item/storage/backpack/satchel/tox, /obj/item/storage/backpack/messenger/tox) + if(prob(75)) + shoes = /obj/item/clothing/shoes/sneakers/white + if(prob(75)) + gloves = /obj/item/clothing/gloves/color/white + if(prob(75)) + head = /obj/item/clothing/head/beret/sci + if(prob(75)) + ears = /obj/item/radio/headset/headset_sci + if(prob(75)) + glasses = pick(/obj/item/clothing/glasses/hud/diagnostic, /obj/item/clothing/glasses/science) + if(prob(1)) + neck = /obj/item/clothing/neck/tie/horrible + for(var/i = 1 to 3) + if(prob(75)) + backpack_contents += pickweight(list( + /obj/item/research_notes/loot/tiny = 3, + /obj/item/research_notes/loot/small = 3, + /obj/item/reagent_scanner = 3, + /obj/item/assembly/flash/handheld = 3, + /obj/item/stock_parts/capacitor/adv = 2, + /obj/item/stock_parts/scanning_module/adv = 2, + /obj/item/stock_parts/manipulator/nano = 2, + /obj/item/stock_parts/micro_laser/high = 2, + /obj/item/stock_parts/matter_bin/adv = 2, + /obj/item/survey_handheld = 1, + /obj/item/weldingtool/experimental = 1, + /obj/item/mmi/posibrain = 1, + /obj/item/reagent_containers/glass/beaker/plastic = 1, + /obj/item/organ/eyes/robotic/shield = 1, + /obj/item/organ/eyes/robotic/glow = 1, + ) + ) + if(prob(75)) + accessory = /obj/item/clothing/accessory/armband/science + + +/datum/outfit/generic/science + name = "Scientist (Legion)" + +/datum/outfit/generic/cargo/pre_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + if(prob(75)) + uniform = pick(/obj/item/clothing/under/rank/cargo/tech, /obj/item/clothing/under/shorts/grey) + if(prob(75)) + suit = pick(/obj/item/clothing/suit/hazardvest, /obj/item/clothing/suit/hooded/wintercoat/cargo) + if(prob(25)) + belt = /obj/item/gun/ballistic/automatic/zip_pistol + if(prob(75)) + gloves = /obj/item/clothing/gloves/fingerless + if(prob(75)) + shoes = /obj/item/clothing/shoes/sneakers/black + if(prob(75)) + head = /obj/item/clothing/head/soft + if(prob(75)) + ears = /obj/item/radio/headset/headset_cargo + for(var/i = 1 to 3) + if(prob(75)) + backpack_contents += pickweight(list( + /obj/item/spacecash/bundle/mediumrand = 5, + /obj/item/ammo_box/magazine/illestren_a850r = 5, + /obj/item/ammo_box/magazine/zip_ammo_9mm = 5, + /obj/item/modular_computer/tablet/preset/cargo = 3, + /obj/item/stack/tape = 3, + /obj/item/stack/tape/industrial = 3, + /obj/item/stack/sheet/plastic/five = 3, + /obj/item/grenade/frag = 1 + ) + ) + if(prob(75)) + accessory = /obj/item/clothing/accessory/armband/cargo + if(prob(25)) + suit = /obj/item/clothing/suit/armor/vest/scrap_armor + suit_store = /obj/item/gun/ballistic/rifle/illestren + +/datum/outfit/generic/cargo + name = "Cargo Technician (Legion)" + +/datum/outfit/generic/security/pre_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + if(prob(75)) + uniform = /obj/item/clothing/under/rank/security/officer + if(prob(75)) + suit = pick(/obj/item/clothing/suit/armor/vest, /obj/item/clothing/suit/armor/vest/security/officer, /obj/item/clothing/suit/armor/vest/bulletproof, /obj/item/clothing/suit/armor/vest/blueshirt) + if(prob(75)) + back = pick(/obj/item/storage/backpack/security, /obj/item/storage/backpack/satchel/sec, /obj/item/storage/backpack/duffelbag/sec, /obj/item/storage/backpack/messenger/sec) + if(prob(75)) + belt = pick(/obj/item/storage/belt/security, /obj/item/storage/belt/security/webbing) + if(prob(75)) + gloves = pick(/obj/item/clothing/gloves/color/black, /obj/item/clothing/gloves/tackler) + if(prob(75)) + shoes = /obj/item/clothing/shoes/jackboots + if(prob(75)) + head = pick(/obj/item/clothing/head/helmet/sec, /obj/item/clothing/head/helmet/blueshirt, /obj/item/clothing/head/helmet/bulletproof) + if(prob(75)) + mask = /obj/item/clothing/mask/gas/sechailer + if(prob(75)) + ears = /obj/item/radio/headset/headset_sec + if(prob(75)) + glasses = pick(/obj/item/clothing/glasses/hud/security, /obj/item/clothing/glasses/sunglasses) + if(prob(75)) + r_pocket = pick(/obj/item/flashlight/seclite, /obj/item/assembly/flash/handheld, /obj/item/restraints/handcuffs) + if(prob(50)) + suit_store = pick(/obj/item/gun/energy/e_gun, /obj/item/gun/energy/e_gun/smg, /obj/item/gun/energy/e_gun/iot) + for(var/i = 1 to 3) + if(prob(75)) + backpack_contents += pickweight(list( + /obj/item/restraints/handcuffs = 8, + /obj/item/assembly/flash/handheld = 5, + /obj/item/storage/box/evidence = 6, + /obj/item/flashlight/seclite = 4, + /obj/item/ammo_box/c9mm/rubbershot = 3, + /obj/item/ammo_box/c9mm = 1, + /obj/item/stock_parts/cell/gun = 3, + /obj/item/coin/antagtoken = 1, + /obj/item/grenade/stingbang = 1 + ) + ) + if(prob(75)) + accessory = /obj/item/clothing/accessory/armband/deputy + +/datum/outfit/generic/security + name = "Security Officer (Legion)" + box = /obj/item/storage/box/survival/security + diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice demon.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice demon.dm index 2315f6e61a4f..786cdaa80966 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice demon.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice demon.dm @@ -74,8 +74,6 @@ new /obj/item/assembly/signaler/anomaly/bluespace(loc) if(prob(5)) new /obj/item/gem/fdiamond(loc) - if(prob(10)) - new /obj/item/crusher_trophy/ice_wing(loc) return ..() /mob/living/simple_animal/hostile/asteroid/old_demon @@ -122,7 +120,7 @@ footstep_type = FOOTSTEP_MOB_CLAW /// Distance the demon will teleport from the target var/teleport_distance = 3 - crusher_drop_mod = 75 + trophy_drop_mod = 75 /obj/projectile/temp/basilisk/ice name = "ice blast" @@ -157,8 +155,6 @@ new /obj/item/assembly/signaler/anomaly/bluespace(loc) if(prob(20)) new /obj/item/gem/fdiamond(loc) - if(prob(50)) - new /obj/item/crusher_trophy/ice_crystal(loc) return ..() /mob/living/simple_animal/hostile/asteroid/ice_demon/random/Initialize() @@ -166,49 +162,3 @@ if(prob(15)) new /mob/living/simple_animal/hostile/asteroid/old_demon(loc) return INITIALIZE_HINT_QDEL - -/obj/item/crusher_trophy/ice_crystal - name = "frost gem" - icon = 'icons/obj/lavaland/elite_trophies.dmi' - desc = "The glowing remnant of an ancient ice demon- so cold that it hurts to touch." - icon_state = "ice_crystal" - denied_type = /obj/item/crusher_trophy/ice_crystal - -/obj/item/crusher_trophy/ice_crystal/effect_desc() - return "waveform collapse to freeze a creature in a block of ice for a period, preventing them from moving" - -/obj/item/crusher_trophy/ice_crystal/on_mark_detonation(mob/living/target, mob/living/user) - target.apply_status_effect(/datum/status_effect/ice_crystal) - -/datum/status_effect/ice_crystal - id = "ice_crystal" - duration = 20 - status_type = STATUS_EFFECT_REFRESH - alert_type = /atom/movable/screen/alert/status_effect/ice_crystal - /// Stored icon overlay for the hit mob, removed when effect is removed - var/icon/cube - -/atom/movable/screen/alert/status_effect/ice_crystal - name = "Frozen Solid" - desc = "You're frozen inside an ice cube, and cannot move!" - icon_state = "frozen" - -/datum/status_effect/ice_crystal/on_apply() - RegisterSignal(owner, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(owner_moved)) - if(!owner.stat) - to_chat(owner, "You become frozen in a cube!") - cube = icon('icons/effects/freeze.dmi', "ice_cube") - var/icon/size_check = icon(owner.icon, owner.icon_state) - cube.Scale(size_check.Width(), size_check.Height()) - owner.add_overlay(cube) - return ..() - -/// Blocks movement from the status effect owner -/datum/status_effect/ice_crystal/proc/owner_moved() - return COMPONENT_MOVABLE_BLOCK_PRE_MOVE - -/datum/status_effect/ice_crystal/on_remove() - if(!owner.stat) - to_chat(owner, "The cube melts!") - owner.cut_overlay(cube) - UnregisterSignal(owner, COMSIG_MOVABLE_PRE_MOVE) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice whelp.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice whelp.dm index ceef301b2349..7a4d8cb234c2 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice whelp.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/ice whelp.dm @@ -28,7 +28,7 @@ move_resist = MOVE_FORCE_VERY_STRONG butcher_results = list(/obj/item/stack/ore/diamond = 3, /obj/item/stack/sheet/sinew = 2, /obj/item/stack/sheet/bone = 10, /obj/item/stack/sheet/animalhide/ashdrake = 1) loot = list() - crusher_loot = /obj/item/crusher_trophy/tail_spike + //mob_trophy = /obj/item/mob_trophy/tail_spike deathmessage = "collapses on its side." deathsound = 'sound/magic/demon_dies.ogg' stat_attack = HARD_CRIT diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/lobstrosity.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/lobstrosity.dm index d95c21ec9bbb..074bda5cf91a 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/lobstrosity.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/lobstrosity.dm @@ -33,7 +33,7 @@ butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/rawcrab = 2, /obj/item/stack/sheet/bone = 2) robust_searching = TRUE footstep_type = FOOTSTEP_MOB_CLAW - crusher_loot = /obj/item/crusher_trophy/lobster_claw + //mob_trophy = /obj/item/mob_trophy/lobster_claw /mob/living/simple_animal/hostile/asteroid/lobstrosity/beach name = "tropical lobstrosity" @@ -42,15 +42,3 @@ icon_living = "lobstrosity" icon_dead = "lobstrosity_dead" -/obj/item/crusher_trophy/lobster_claw - name = "lobster claw" - icon_state = "lobster_claw" - desc = "A lobster claw." - denied_type = /obj/item/crusher_trophy/lobster_claw - bonus_value = 1 - -/obj/item/crusher_trophy/lobster_claw/effect_desc() - return "mark detonation to briefly stagger the target for [bonus_value] seconds" - -/obj/item/crusher_trophy/lobster_claw/on_mark_detonation(mob/living/target, mob/living/user) - target.apply_status_effect(/datum/status_effect/stagger, bonus_value SECONDS) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm index b66c71fd58b2..eaf546b3f627 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/mining_mobs.dm @@ -12,7 +12,7 @@ response_harm_simple = "strike" status_flags = 0 a_intent = INTENT_HARM - var/crusher_loot + var/mob_trophy var/throw_message = "bounces off of" var/throw_deflection = 20 //WS edit - Whitesands var/fromtendril = FALSE @@ -20,7 +20,7 @@ lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE mob_size = MOB_SIZE_LARGE var/icon_aggro = null - var/crusher_drop_mod = 25 + var/trophy_drop_mod = 25 var/datum/armor/armor //WS edit - Whitesands /mob/living/simple_animal/hostile/asteroid/Initialize(mapload) @@ -70,13 +70,12 @@ /mob/living/simple_animal/hostile/asteroid/death(gibbed) SSblackbox.record_feedback("tally", "mobs_killed_mining", 1, type) - var/datum/status_effect/crusher_damage/C = has_status_effect(STATUS_EFFECT_CRUSHERDAMAGETRACKING) - if(C && crusher_loot && prob((C.total_damage/maxHealth) * crusher_drop_mod)) //on average, you'll need to kill 4 creatures before getting the item - spawn_crusher_loot() + if(prob(trophy_drop_mod)) //on average, you'll need to kill 4 creatures before getting the item + spawn_mob_trophy() ..(gibbed) -/mob/living/simple_animal/hostile/asteroid/proc/spawn_crusher_loot() - butcher_results[crusher_loot] = 1 +/mob/living/simple_animal/hostile/asteroid/proc/spawn_mob_trophy() + butcher_results[mob_trophy] = 1 /mob/living/simple_animal/hostile/asteroid/handle_temperature_damage() if(bodytemperature < minbodytemp) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/polarbear.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/polarbear.dm index f9d15892f75d..2bcb3fe06f9a 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/polarbear.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/polarbear.dm @@ -27,7 +27,7 @@ butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/bear = 3, /obj/item/stack/sheet/bone = 2) guaranteed_butcher_results = list(/obj/item/stack/sheet/animalhide/goliath_hide/polar_bear_hide = 1) loot = list() - crusher_loot = /obj/item/crusher_trophy/bear_paw + //mob_trophy = /obj/item/mob_trophy/bear_paw stat_attack = HARD_CRIT robust_searching = TRUE footstep_type = FOOTSTEP_MOB_CLAW @@ -57,24 +57,6 @@ desc = "It seems sentient somehow." faction = list("neutral") -/obj/item/crusher_trophy/bear_paw - name = "polar bear paw" - desc = "It's a polar bear paw." - icon_state = "bear_paw" - icon ='icons/obj/lavaland/elite_trophies.dmi' - denied_type = /obj/item/crusher_trophy/bear_paw - -/obj/item/crusher_trophy/bear_paw/effect_desc() - return "doubled strikes when below 50% health" - -/obj/item/crusher_trophy/bear_paw/on_mark_detonation(mob/living/target, mob/living/user) - if(user.health / user.maxHealth > 0.5) - return - var/obj/item/I = user.get_active_held_item() - if(!I) - return - I.melee_attack_chain(user, target, null) - //elite bear /mob/living/simple_animal/hostile/asteroid/polarbear/warrior name = "polar warbear" @@ -91,29 +73,11 @@ icon_state = "warbear" icon_living = "warbear" icon_dead = "warbear_dead" - crusher_loot = /obj/item/crusher_trophy/war_paw - crusher_drop_mod = 75 + //mob_trophy = /obj/item/mob_trophy/war_paw + trophy_drop_mod = 75 butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/bear = 3, /obj/item/stack/sheet/bone = 2, /obj/item/stack/sheet/animalhide/goliath_hide/polar_bear_hide = 3) guaranteed_butcher_results = list(/obj/item/stack/sheet/animalhide/goliath_hide/polar_bear_hide = 3, /obj/item/bear_armor = 1) -/obj/item/crusher_trophy/war_paw - name = "Armored bear paw" - desc = "It's a paw from a true warrior. Still remembers the basics of CQB." - icon_state = "armor_paw" - icon ='icons/obj/lavaland/elite_trophies.dmi' - denied_type = /obj/item/crusher_trophy/war_paw - -/obj/item/crusher_trophy/war_paw/effect_desc() - return "doubled strikes when below 70% health" - -/obj/item/crusher_trophy/war_paw/on_mark_detonation(mob/living/target, mob/living/user) - if(user.health / user.maxHealth > 0.7) - return - var/obj/item/I = user.get_active_held_item() - if(!I) - return - I.melee_attack_chain(user, target, null) - /mob/living/simple_animal/hostile/asteroid/polarbear/random/Initialize() . = ..() if(prob(15)) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/wolf.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/wolf.dm index 7df8c04f0cf4..336616dfe110 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/wolf.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/wolf.dm @@ -30,9 +30,9 @@ move_force = MOVE_FORCE_WEAK move_resist = MOVE_FORCE_WEAK pull_force = MOVE_FORCE_WEAK - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 2, /obj/item/stack/sheet/sinew/wolf = 2, /obj/item/stack/sheet/bone = 2, /obj/item/crusher_trophy/wolf_ear = 0.5) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 2, /obj/item/stack/sheet/sinew/wolf = 2, /obj/item/stack/sheet/bone = 2, /obj/item/mob_trophy/wolf_ear = 0.5) loot = list() - crusher_loot = /obj/item/crusher_trophy/wolf_ear + mob_trophy = /obj/item/mob_trophy/wolf_ear stat_attack = HARD_CRIT knockdown_time = 1 SECONDS robust_searching = TRUE @@ -108,23 +108,10 @@ move_resist = MOVE_RESIST_DEFAULT pull_force = PULL_FORCE_DEFAULT if(prob(15)) - new /obj/item/crusher_trophy/wolf_ear(loc) + new /obj/item/mob_trophy/wolf_ear(loc) visible_message("You notice a damaged ear that might be salvagable.") ..() -/obj/item/crusher_trophy/wolf_ear - name = "wolf ear" - desc = "The battered remains of a wolf's ear. You could attach it to a crusher, or use the fur to craft a trophy." - icon = 'icons/obj/lavaland/elite_trophies.dmi' - icon_state = "torn_ear" - denied_type = /obj/item/crusher_trophy/wolf_ear - -/obj/item/crusher_trophy/wolf_ear/effect_desc() - return "waveform collapse to give the user a slight speed boost" - -/obj/item/crusher_trophy/wolf_ear/on_mark_detonation(mob/living/target, mob/living/user) - user.apply_status_effect(/datum/status_effect/speed_boost, 3 SECONDS) - //alpha wolf- smaller chance to spawn, practically a miniboss. Has the ability to do a short, untelegraphed lunge with a stun. Be careful! /mob/living/simple_animal/hostile/asteroid/wolf/alpha name = "alpha wolf" @@ -149,35 +136,12 @@ charge_frequency = 20 SECONDS butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 2, /obj/item/stack/sheet/sinew/wolf = 4, /obj/item/stack/sheet/sinew/wolf = 4, /obj/item/stack/sheet/bone = 5) loot = list() - crusher_loot = /obj/item/crusher_trophy/fang + mob_trophy = /obj/item/mob_trophy/fang /mob/living/simple_animal/hostile/asteroid/wolf/alpha/gib() move_force = MOVE_FORCE_DEFAULT move_resist = MOVE_RESIST_DEFAULT pull_force = PULL_FORCE_DEFAULT - if(prob(75)) - new /obj/item/crusher_trophy/fang(loc) - visible_message("You find an intact fang that looks salvagable.") - ..() - -/obj/item/crusher_trophy/fang - name = "battle-stained fang" - desc = "A wolf fang, displaying the wear and tear associated with a long and colorful life. Could be attached to a kinetic crusher or used to make a trophy." - icon = 'icons/obj/lavaland/elite_trophies.dmi' - icon_state = "fang" - denied_type = /obj/item/crusher_trophy/fang - var/bleed_stacks_per_hit = 5 - -/obj/item/crusher_trophy/fang/effect_desc() - return "waveform collapse to build up a small stack of bleeding, causing a burst of damage if applied repeatedly." - -/obj/item/crusher_trophy/fang/on_mark_detonation(mob/living/M, mob/living/user) - if(istype(M) && (M.mob_biotypes & MOB_ORGANIC)) - var/datum/status_effect/stacking/saw_bleed/bloodletting/B = M.has_status_effect(/datum/status_effect/stacking/saw_bleed/bloodletting) - if(!B) - M.apply_status_effect(/datum/status_effect/stacking/saw_bleed/bloodletting, bleed_stacks_per_hit) - else - B.add_stacks(bleed_stacks_per_hit) /mob/living/simple_animal/hostile/asteroid/wolf/random/Initialize() . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm b/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm deleted file mode 100644 index 4417e68e2ec1..000000000000 --- a/code/modules/mob/living/simple_animal/hostile/nanotrasen.dm +++ /dev/null @@ -1,59 +0,0 @@ -/mob/living/simple_animal/hostile/nanotrasen - name = "\improper Nanotrasen Private Security Officer" - desc = "An officer part of Nanotrasen's private security force, he seems rather unpleased to meet you." - icon = 'icons/mob/simple_human.dmi' - icon_state = "nanotrasen" - icon_living = "nanotrasen" - icon_dead = null - icon_gib = "syndicate_gib" - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - speak_chance = 0 - turns_per_move = 5 - speed = 0 - stat_attack = HARD_CRIT - robust_searching = 1 - maxHealth = 100 - health = 100 - harm_intent_damage = 5 - melee_damage_lower = 10 - melee_damage_upper = 15 - attack_verb_continuous = "punches" - attack_verb_simple = "punch" - attack_sound = 'sound/weapons/punch1.ogg' - a_intent = INTENT_HARM - loot = list(/obj/effect/mob_spawn/human/corpse/nanotrasensoldier) - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 15 - faction = list(ROLE_DEATHSQUAD) - check_friendly_fire = TRUE - status_flags = CANPUSH - del_on_death = TRUE - dodging = TRUE - footstep_type = FOOTSTEP_MOB_SHOE - -/mob/living/simple_animal/hostile/nanotrasen/screaming - icon_state = "nanotrasen" - icon_living = "nanotrasen" - -/mob/living/simple_animal/hostile/nanotrasen/screaming/Aggro() - ..() - summon_backup(15) - say("411 in progress, requesting backup!") - - -/mob/living/simple_animal/hostile/nanotrasen/ranged - icon_state = "nanotrasenranged" - icon_living = "nanotrasenranged" - ranged = 1 - retreat_distance = 3 - minimum_distance = 5 - casingtype = /obj/item/ammo_casing/c45 - projectilesound = 'sound/weapons/gun/pistol/shot_alt.ogg' - - -/mob/living/simple_animal/hostile/nanotrasen/ranged/smg - icon_state = "nanotrasenrangedsmg" - icon_living = "nanotrasenrangedsmg" - rapid = 3 - casingtype = /obj/item/ammo_casing/c46x30mm - projectilesound = 'sound/weapons/gun/smg/shot.ogg' diff --git a/code/modules/mob/living/simple_animal/hostile/stickman.dm b/code/modules/mob/living/simple_animal/hostile/stickman.dm deleted file mode 100644 index 1eb03b07650c..000000000000 --- a/code/modules/mob/living/simple_animal/hostile/stickman.dm +++ /dev/null @@ -1,61 +0,0 @@ -/mob/living/simple_animal/hostile/stickman - name = "Angry Stick Man" - desc = "A being from a realm with only 2 dimensions. At least it's trying to stay faced towards you." - icon_state = "stickman" - icon_living = "stickman" - icon_dead = "stickman_dead" - icon_gib = "syndicate_gib" - mob_biotypes = MOB_HUMANOID - gender = MALE - speak_chance = 0 - turns_per_move = 5 - speed = 0 - stat_attack = HARD_CRIT - robust_searching = 1 - environment_smash = ENVIRONMENT_SMASH_NONE - maxHealth = 100 - health = 100 - harm_intent_damage = 5 - obj_damage = 0 - melee_damage_lower = 10 - melee_damage_upper = 10 - attack_verb_continuous = "punches" - attack_verb_simple = "punch" - attack_sound = 'sound/weapons/punch1.ogg' - a_intent = INTENT_HARM - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 15 - faction = list("hostile","stickman") - check_friendly_fire = 1 - status_flags = CANPUSH - var/datum/action/boss/wizard_summon_minions/changesummons = /datum/action/boss/wizard_summon_minions - var/summoned_by_wizard = 0 - -/mob/living/simple_animal/hostile/stickman/ranged - ranged = 1 - retreat_distance = 5 - minimum_distance = 5 - icon_state = "stickmanranged" - icon_living = "stickmanranged" - casingtype = /obj/item/ammo_casing/c45 - projectilesound = 'sound/misc/bang.ogg' - loot = list(/obj/item/gun/ballistic/automatic/pistol/stickman) - - -/mob/living/simple_animal/hostile/stickman/dog - name = "Angry Stick Dog" - desc = "Stickman's best friend, if he could see him at least." - icon_state = "stickdog" - icon_living = "stickdog" - icon_dead = "stickdog_dead" - mob_biotypes = MOB_BEAST - -/mob/living/simple_animal/hostile/stickman/Initialize(mapload, wizard_summoned) - . = ..() - new /obj/effect/temp_visual/paper_scatter(src) - summoned_by_wizard = wizard_summoned - -/mob/living/simple_animal/hostile/stickman/death() - ..() - if(summoned_by_wizard == 1) - changesummons.summoned_minions -- diff --git a/code/modules/mob/living/simple_animal/hostile/wizard.dm b/code/modules/mob/living/simple_animal/hostile/wizard.dm deleted file mode 100644 index 0d97a1f18869..000000000000 --- a/code/modules/mob/living/simple_animal/hostile/wizard.dm +++ /dev/null @@ -1,82 +0,0 @@ -/mob/living/simple_animal/hostile/wizard - name = "Space Wizard" - desc = "EI NATH?" - icon = 'icons/mob/simple_human.dmi' - icon_state = "wizard" - icon_living = "wizard" - icon_dead = "wizard_dead" - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - speak_chance = 0 - turns_per_move = 3 - speed = 0 - maxHealth = 100 - health = 100 - harm_intent_damage = 5 - melee_damage_lower = 5 - melee_damage_upper = 5 - attack_verb_continuous = "punches" - attack_verb_simple = "punch" - attack_sound = 'sound/weapons/punch1.ogg' - a_intent = INTENT_HARM - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 15 - faction = list(ROLE_WIZARD) - status_flags = CANPUSH - - retreat_distance = 3 //out of fireball range - minimum_distance = 3 - del_on_death = 1 - loot = list(/obj/effect/mob_spawn/human/corpse/wizard, - /obj/item/staff) - - var/obj/effect/proc_holder/spell/aimed/fireball/fireball = null - var/obj/effect/proc_holder/spell/targeted/turf_teleport/blink/blink = null - var/obj/effect/proc_holder/spell/targeted/projectile/magic_missile/mm = null - - var/next_cast = 0 - - footstep_type = FOOTSTEP_MOB_SHOE - -/mob/living/simple_animal/hostile/wizard/Initialize() - . = ..() - fireball = new /obj/effect/proc_holder/spell/aimed/fireball - fireball.clothes_req = 0 - fireball.human_req = 0 - fireball.player_lock = 0 - AddSpell(fireball) - implants += new /obj/item/implant/exile(src) - - mm = new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile - mm.clothes_req = 0 - mm.human_req = 0 - mm.player_lock = 0 - AddSpell(mm) - - blink = new /obj/effect/proc_holder/spell/targeted/turf_teleport/blink - blink.clothes_req = 0 - blink.human_req = 0 - blink.player_lock = 0 - blink.outer_tele_radius = 3 - AddSpell(blink) - -/mob/living/simple_animal/hostile/wizard/handle_automated_action() - . = ..() - if(target && next_cast < world.time) - if((get_dir(src,target) in list(SOUTH,EAST,WEST,NORTH)) && fireball.cast_check(0,src)) //Lined up for fireball - src.setDir(get_dir(src,target)) - fireball.perform(list(target), user = src) - next_cast = world.time + 10 //One spell per second - return . - if(mm.cast_check(0,src)) - mm.choose_targets(src) - next_cast = world.time + 10 - return . - if(blink.cast_check(0,src)) //Spam Blink when you can - blink.choose_targets(src) - next_cast = world.time + 10 - return . - -/mob/living/simple_animal/hostile/wizard/planet - weather_immunities = list("lava","ash") - minbodytemp = 0 - maxbodytemp = INFINITY diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 131e3f971113..c7070a66bcdf 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -522,7 +522,7 @@ to_chat(src, "You don't have a free hand to examine this!") return FALSE //can only queue up one examine on something at a time - if(examined_thing in do_afters) + if(DOING_INTERACTION_WITH_TARGET(src, examined_thing)) return FALSE to_chat(src, "You start feeling around for something...") @@ -821,8 +821,10 @@ src << browse(null, t1) if(href_list["flavor_more"]) - usr << browse(text("[][]", name, replacetext(flavor_text, "\n", "
")), text("window=[];size=500x200", name)) - onclose(usr, "[name]") + var/datum/browser/popup = new(usr, "[name]'s flavor text", "[name]'s Flavor Text (expanded)", 500, 200) + popup.set_content(text("[][]", "[name]'s flavor text (expanded)", replacetext(flavor_text, "\n", "
"))) + popup.open() + return if(user != src) if(href_list["item"] && user.canUseTopic(src, BE_CLOSE, NO_DEXTERITY)) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 6873ee602dac..def2bde930e0 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -191,7 +191,7 @@ ///List of progress bars this mob is currently seeing for actions var/list/progressbars = null //for stacking do_after bars - ///For storing what do_after's someone has, in case we want to restrict them to only one of a certain do_after at a time + ///For storing what do_after's someone has, key = string, value = amount of interactions of that type happening. var/list/do_afters ///Allows a datum to intercept all click calls this mob is the source of diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm index d2e6a4f0dda2..01e3a4d33b1a 100644 --- a/code/modules/mob/say_vr.dm +++ b/code/modules/mob/say_vr.dm @@ -11,7 +11,7 @@ if(usr != src) to_chat(usr, span_warning("You can't set someone else's flavour text!")) - var/msg = sanitize(input(usr,"Set the flavor text in your 'examine' verb. Can also be used for OOC notes about your character.","Flavor Text",html_decode(flavor_text)) as message|null) + var/msg = input(usr, "A snippet of text shown when others examine you, describing what you may look like. This can also be used for OOC notes.", "Flavor Text", html_decode("flavor_text")) as message|null if(msg) msg = copytext(msg, 1, MAX_MESSAGE_LEN) @@ -22,10 +22,10 @@ /mob/proc/print_flavor_text() if(flavor_text && flavor_text != "") var/msg = replacetext(flavor_text, "\n", " ") - if(length(msg) <= 100) + if(length(msg) <= MAX_SHORTFLAVOR_LEN) return "[msg]" else - return "[copytext(msg, 1, 97)]... More..." + return "[copytext(msg, 1, MAX_SHORTFLAVOR_LEN)]... More..." /mob/proc/get_top_level_mob() if(istype(src.loc,/mob)&&src.loc!=src) diff --git a/code/modules/overmap/helm.dm b/code/modules/overmap/helm.dm index 59fdee827907..5b1f27fa2cb9 100644 --- a/code/modules/overmap/helm.dm +++ b/code/modules/overmap/helm.dm @@ -388,11 +388,11 @@ return to_chat(user, "You begin to manually override the local database...") - if(!do_after_mob(user, list(src), 2 SECONDS)) + if(!do_after(user, 2 SECONDS, list(src))) return COMPONENT_BLOCK_TOOL_ATTACK priority_announce("Illegal access to local ship database detected.", sender_override="[src.name]", zlevel=virtual_z()) - if(!do_after_mob(user, list(src), 10 SECONDS)) + if(!do_after(user, 10 SECONDS, list(src))) return COMPONENT_BLOCK_TOOL_ATTACK say("Warning, database corruption present, resetting local database state.") diff --git a/code/modules/overmap/ships/controlled_ship_datum.dm b/code/modules/overmap/ships/controlled_ship_datum.dm index b87d3efda187..ec4b78629027 100644 --- a/code/modules/overmap/ships/controlled_ship_datum.dm +++ b/code/modules/overmap/ships/controlled_ship_datum.dm @@ -436,6 +436,9 @@ SStgui.close_uis(helm) helm.say(helm_locked ? "Helm console is now locked." : "Helm console has been unlocked.") +/datum/overmap/ship/controlled/proc/get_faction() + return source_template.faction_name + /obj/item/key/ship name = "ship key" desc = "A key for locking and unlocking the helm of a ship, comes with a ball chain so it can be worn around the neck. Comes with a cute little shuttle-shaped keychain." diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 3684d5ad8159..f21f95692234 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -217,8 +217,8 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/power/apc/auto_name, 25) // this allows the APC to be embedded in a wall, yet still inside an area if (building) setDir(ndir) - tdir = dir // to fix Vars bug -//!!!!!!!!!!!!!! FUCK YOU SINGLE LINE OF CODE!! FUCK YOU YOU PIECE OF SHIT!!!!! setDir(SOUTH) + tdir = dir// to fix Vars bug + switch(tdir) if(NORTH) if((pixel_y != initial(pixel_y)) && (pixel_y != 23)) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 3f85acdddfe6..283d41524f79 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -542,7 +542,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list(new/datum/stack_recipe("cable restrain if(affecting && (!IS_ORGANIC_LIMB(affecting))) if(user == H) user.visible_message("[user] starts to fix some of the wires in [H]'s [parse_zone(affecting.body_zone)].", "You start fixing some of the wires in [H == user ? "your" : "[H]'s"] [parse_zone(affecting.body_zone)].") - if(!do_mob(user, H, 50)) + if(!do_after(user, 0.5 SECONDS, H)) return if(item_heal_robotic(H, user, 0, 15)) use(1) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index b4748c674fc6..e92efb779d67 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -857,8 +857,11 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/light/small/built, 28) if(!..()) //not caught by a mob shatter() -// update the icon state and description of the light +/obj/item/light/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) + shatter() + ..() +// update the icon state and description of the light /obj/item/light/proc/update() switch(status) if(LIGHT_OK) diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index e235e9328549..e63cd1298616 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -291,7 +291,6 @@ circuit = /obj/item/circuitboard/machine/pacman/super sheet_path = /obj/item/stack/sheet/mineral/uranium power_gen = 15000 - time_per_sheet = 85 /obj/machinery/power/port_gen/pacman/super/overheat() . =..() @@ -304,7 +303,6 @@ circuit = /obj/item/circuitboard/machine/pacman/mrs sheet_path = /obj/item/stack/sheet/mineral/diamond power_gen = 40000 - time_per_sheet = 80 /obj/machinery/power/port_gen/pacman/mrs/overheat() . =..() diff --git a/code/modules/projectiles/ammunition/_ammunition.dm b/code/modules/projectiles/ammunition/_ammunition.dm index 2bcd961427db..26597a64f33b 100644 --- a/code/modules/projectiles/ammunition/_ammunition.dm +++ b/code/modules/projectiles/ammunition/_ammunition.dm @@ -109,7 +109,7 @@ pixel_y = rand(-4, 4) pixel_z = 8 //bounce time var/angle_of_movement = !isnull(shooter) ? (rand(-3000, 3000) / 100) + dir2angle(turn(shooter.dir, 180)) : rand(-3000, 3000) / 100 - AddComponent(/datum/component/movable_physics, _horizontal_velocity = rand(400, 450) / 100, _vertical_velocity = rand(400, 450) / 100, _horizontal_friction = rand(20, 24) / 100, _z_gravity = PHYSICS_GRAV_STANDARD, _z_floor = 0, _angle_of_movement = angle_of_movement) + AddComponent(/datum/component/movable_physics, _horizontal_velocity = rand(400, 450) / 100, _vertical_velocity = rand(400, 450) / 100, _horizontal_friction = rand(20, 24) / 100, _z_gravity = PHYSICS_GRAV_STANDARD, _z_floor = 0, _angle_of_movement = angle_of_movement, _bounce_sound = bounce_sfx_override) /obj/item/ammo_casing/proc/bounce_away(still_warm = FALSE, bounce_delay = 3) diff --git a/code/modules/projectiles/ammunition/_firing.dm b/code/modules/projectiles/ammunition/_firing.dm index ee155db4e719..93fa4208d571 100644 --- a/code/modules/projectiles/ammunition/_firing.dm +++ b/code/modules/projectiles/ammunition/_firing.dm @@ -18,8 +18,6 @@ if(click_cooldown_override) user.changeNext_move(click_cooldown_override) - else - user.changeNext_move(CLICK_CD_RANGE) user.newtonian_move(get_dir(target, user)) update_appearance() 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/ammunition/special/magic.dm b/code/modules/projectiles/ammunition/special/magic.dm index e38df896bed1..046ae7dbc078 100644 --- a/code/modules/projectiles/ammunition/special/magic.dm +++ b/code/modules/projectiles/ammunition/special/magic.dm @@ -4,68 +4,3 @@ projectile_type = /obj/projectile/magic firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/magic heavy_metal = FALSE - -/obj/item/ammo_casing/magic/change - projectile_type = /obj/projectile/magic/change - -/obj/item/ammo_casing/magic/animate - projectile_type = /obj/projectile/magic/animate - -/obj/item/ammo_casing/magic/heal - projectile_type = /obj/projectile/magic/resurrection - harmful = FALSE - -/obj/item/ammo_casing/magic/death - projectile_type = /obj/projectile/magic/death - -/obj/item/ammo_casing/magic/teleport - projectile_type = /obj/projectile/magic/teleport - harmful = FALSE - -/obj/item/ammo_casing/magic/safety - projectile_type = /obj/projectile/magic/safety - harmful = FALSE - -/obj/item/ammo_casing/magic/door - projectile_type = /obj/projectile/magic/door - harmful = FALSE - -/obj/item/ammo_casing/magic/fireball - projectile_type = /obj/projectile/magic/aoe/fireball - -/obj/item/ammo_casing/magic/chaos - projectile_type = /obj/projectile/magic - -/obj/item/ammo_casing/magic/spellblade - projectile_type = /obj/projectile/magic/spellblade - -/obj/item/ammo_casing/magic/arcane_barrage - projectile_type = /obj/projectile/magic/arcane_barrage - -/obj/item/ammo_casing/magic/honk - projectile_type = /obj/projectile/bullet/honker - -/obj/item/ammo_casing/magic/locker - projectile_type = /obj/projectile/magic/locker - -/obj/item/ammo_casing/magic/flying - projectile_type = /obj/projectile/magic/flying - -/obj/item/ammo_casing/magic/bounty - projectile_type = /obj/projectile/magic/bounty - -/obj/item/ammo_casing/magic/antimagic - projectile_type = /obj/projectile/magic/antimagic - -/obj/item/ammo_casing/magic/sapping - projectile_type = /obj/projectile/magic/sapping - -/obj/item/ammo_casing/magic/necropotence - projectile_type = /obj/projectile/magic/necropotence - -/obj/item/ammo_casing/magic/wipe - projectile_type = /obj/projectile/magic/wipe - -/obj/item/ammo_casing/magic/nothing - projectile_type = /obj/projectile/magic/nothing - harmful = FALSE diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index 08a87e017aad..4c3c8b736c4d 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -98,7 +98,7 @@ if(istype(attacking_obj, /obj/item/ammo_box)) var/obj/item/ammo_box/attacking_box = attacking_obj for(var/obj/item/ammo_casing/casing_to_insert in attacking_box.stored_ammo) - if(!((instant_load && attacking_box.instant_load) || (stored_ammo.len >= max_ammo) || do_after_mob(user, list(attacking_box), 1 SECONDS))) + if(!((instant_load && attacking_box.instant_load) || (stored_ammo.len >= max_ammo) || do_after(user, 1 SECONDS, list(attacking_box)))) break var/did_load = give_round(casing_to_insert, replace_spent) if(!did_load) diff --git a/code/modules/projectiles/boxes_magazines/internal/_cylinder.dm b/code/modules/projectiles/boxes_magazines/internal/_cylinder.dm index 160e1bd5066d..f8ce8223748d 100644 --- a/code/modules/projectiles/boxes_magazines/internal/_cylinder.dm +++ b/code/modules/projectiles/boxes_magazines/internal/_cylinder.dm @@ -66,7 +66,7 @@ var/list/ammo_list_no_empty = ammo_list(FALSE) listclearnulls(ammo_list_no_empty) for(var/obj/item/ammo_casing/casing_to_insert in attacking_box.stored_ammo) - if(!((instant_load && attacking_box.instant_load) || (ammo_list_no_empty.len >= max_ammo) || do_after_mob(user, list(attacking_box), 1 SECONDS))) //stupid work around for revolvers + if(!((instant_load && attacking_box.instant_load) || (ammo_list_no_empty.len >= max_ammo) || do_after(user, 1 SECONDS, list(attacking_box)))) //stupid work around for revolvers break var/did_load = give_round(casing_to_insert, replace_spent) if(!did_load) diff --git a/code/modules/projectiles/boxes_magazines/internal/misc.dm b/code/modules/projectiles/boxes_magazines/internal/misc.dm index 1d4316560e92..55b749ac3333 100644 --- a/code/modules/projectiles/boxes_magazines/internal/misc.dm +++ b/code/modules/projectiles/boxes_magazines/internal/misc.dm @@ -1,9 +1,3 @@ -/obj/item/ammo_box/magazine/internal/hook - name = "hook internal tube" - ammo_type = /obj/item/ammo_casing/magic/hook - caliber = "hook" - max_ammo = 1 - /obj/item/ammo_box/magazine/internal/bow name = "bowstring" ammo_type = /obj/item/ammo_casing/caseless/arrow diff --git a/code/modules/projectiles/boxes_magazines/internal/rifle.dm b/code/modules/projectiles/boxes_magazines/internal/rifle.dm index 921ff98293a1..4f2f8c537958 100644 --- a/code/modules/projectiles/boxes_magazines/internal/rifle.dm +++ b/code/modules/projectiles/boxes_magazines/internal/rifle.dm @@ -6,13 +6,6 @@ max_ammo = 5 instant_load = TRUE -/obj/item/ammo_box/magazine/internal/boltaction/enchanted - max_ammo = 1 - ammo_type = /obj/item/ammo_casing/a8_50r - -/obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage - ammo_type = /obj/item/ammo_casing/magic/arcane_barrage - /obj/item/ammo_box/magazine/internal/boltaction/solgov name = "SSG-669C internal magazine" ammo_type = /obj/item/ammo_casing/caseless/a858 diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index ca4d0217b380..3edfd1382cf4 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -1,6 +1,3 @@ - -#define DUALWIELD_PENALTY_EXTRA_MULTIPLIER 1.6 - /obj/item/gun name = "gun" desc = "It's a gun. It's pretty terrible, though." @@ -27,25 +24,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 +154,7 @@ alight = new(src) muzzle_flash = new(src, muzzleflash_iconstate) build_zooming() + build_firemodes() /obj/item/gun/ComponentInitialize() . = ..() @@ -141,10 +169,21 @@ user.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/gun, multiplicative_slowdown = wield_slowdown) wield_time = world.time + wield_delay if(wield_time > 0) - if(do_mob(user, user, wield_delay, FALSE, TRUE, CALLBACK(src, PROC_REF(is_wielded)), ignore_loc_change = TRUE)) + if(do_after( + user, + wield_delay, + user, + FALSE, + TRUE, + CALLBACK(src, PROC_REF(is_wielded)), + timed_action_flags = IGNORE_USER_LOC_CHANGE + ) + ) wielded_fully = TRUE + return TRUE else wielded_fully = TRUE + return TRUE /obj/item/gun/proc/is_wielded() return wielded @@ -208,6 +247,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) @@ -220,252 +304,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 we have a cooldown, don't do anything, obviously + if(current_cooldown) + return - 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)) + //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(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(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(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) . = ..() @@ -657,7 +766,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. @@ -671,25 +780,26 @@ 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_mob(user, target, 100) || user.zone_selected != BODY_ZONE_PRECISE_MOUTH)) + if(!bypass_timer && (!do_after(user, 100, target) || user.zone_selected != BODY_ZONE_PRECISE_MOUTH)) if(user) if(user == target) 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) @@ -723,10 +833,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) @@ -738,6 +893,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) @@ -886,4 +1042,58 @@ azoom = new() azoom.gun = src -#undef DUALWIELD_PENALTY_EXTRA_MULTIPLIER +/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 ..() diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 4f3b80bf478a..e5345c0eab45 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -1,3 +1,8 @@ +#define EMPTY_GUN_HELPER(gun_type) \ + /obj/item/gun/ballistic/##gun_type/no_mag { \ + spawnwithmagazine = FALSE; \ + } + ///Subtype for any kind of ballistic gun ///This has a shitload of vars on it, and I'm sorry for that, but it does make making new subtypes really easy /obj/item/gun/ballistic @@ -53,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. @@ -63,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. @@ -121,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" @@ -186,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) @@ -212,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!") @@ -232,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)) @@ -244,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) @@ -298,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 @@ -346,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(.) @@ -366,7 +373,7 @@ CB.forceMove(drop_location()) var/angle_of_movement =(rand(-3000, 3000) / 100) + dir2angle(turn(user.dir, 180)) - CB.AddComponent(/datum/component/movable_physics, _horizontal_velocity = rand(350, 450) / 100, _vertical_velocity = rand(400, 450) / 100, _horizontal_friction = rand(20, 24) / 100, _z_gravity = PHYSICS_GRAV_STANDARD, _z_floor = 0, _angle_of_movement = angle_of_movement) + CB.AddComponent(/datum/component/movable_physics, _horizontal_velocity = rand(350, 450) / 100, _vertical_velocity = rand(400, 450) / 100, _horizontal_friction = rand(20, 24) / 100, _z_gravity = PHYSICS_GRAV_STANDARD, _z_floor = 0, _angle_of_movement = angle_of_movement, _bounce_sound = CB.bounce_sfx_override) num_unloaded++ SSblackbox.record_feedback("tally", "station_mess_created", 1, CB.name) @@ -425,7 +432,7 @@ GLOBAL_LIST_INIT(gun_saw_types, typecacheof(list( ///Handles all the logic of sawing off guns, /obj/item/gun/ballistic/proc/sawoff(mob/user, obj/item/saw) - if(!saw.get_sharpness() || !is_type_in_typecache(saw, GLOB.gun_saw_types) && !saw.tool_behaviour == TOOL_SAW) //needs to be sharp. Otherwise turned off eswords can cut this. + if(!saw.get_sharpness() || !is_type_in_typecache(saw, GLOB.gun_saw_types) && saw.tool_behaviour != TOOL_SAW) //needs to be sharp. Otherwise turned off eswords can cut this. return if(sawn_off) to_chat(user, "\The [src] is already shortened!") 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 094ea753af10..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 @@ -92,40 +62,40 @@ can_suppress = TRUE can_unsuppress = TRUE +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' @@ -134,18 +104,19 @@ 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 spread = -4 +EMPTY_GUN_HELPER(automatic/ebr) + /obj/item/gun/ballistic/automatic/gal name = "\improper CM-GAL-S" desc = "The standard issue DMR of CLIP. Dates back to the Xenofauna War, this particular model is in a carbine configuration, and, as such, is shorter than the standard model. Chambered in .308." @@ -154,7 +125,7 @@ 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 @@ -165,6 +136,8 @@ 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" @@ -181,5 +154,5 @@ 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 3bd143e98b43..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 @@ -85,7 +88,7 @@ if(!can_deploy) to_chat(user, "You need to brace against something to deploy [src]'s bipod! Either lie on the floor or stand next to a waist high object like a table!") return - if(!do_mob(user, src, deploy_time, FALSE, TRUE, CALLBACK(src, PROC_REF(is_wielded)))) + if(!do_after(user, deploy_time, src, FALSE, TRUE, CALLBACK(src, PROC_REF(is_wielded)))) to_chat(user, "You need to hold still to deploy [src]'s bipod!") return playsound(src, 'sound/machines/click.ogg', 75, TRUE) @@ -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 1cb86fec256d..c4d505bcb10c 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,18 +22,21 @@ 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" -/obj/item/gun/ballistic/automatic/pistol/no_mag - spawnwithmagazine = FALSE +EMPTY_GUN_HELPER(automatic/pistol) /obj/item/gun/ballistic/automatic/pistol/suppressed/Initialize(mapload) . = ..() @@ -63,21 +64,24 @@ 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 -/obj/item/gun/ballistic/automatic/pistol/candor/no_mag - spawnwithmagazine = FALSE +EMPTY_GUN_HELPER(automatic/pistol/candor) /obj/item/gun/ballistic/automatic/pistol/candor/factory //also give this to the srm, their candors should probably look factory fresh from how well taken care of they are desc = "A classic semi-automatic handgun, widely popular throughout the Frontier. An engraving on the slide marks it as a product of Hunter's Pride. This example has been kept in especially good shape, and may as well be fresh out of the workshop. Chambered in .45." item_state = "hp_generic_fresh" +EMPTY_GUN_HELPER(automatic/pistol/candor/factory) + /obj/item/gun/ballistic/automatic/pistol/candor/factory/update_overlays() . = ..() . += "[initial(icon_state)]_factory" -/obj/item/gun/ballistic/automatic/pistol/candor/factory/no_mag - spawnwithmagazine = FALSE +/obj/item/gun/ballistic/automatic/pistol/candor/phenex + name = "\improper HP Phenex" + desc = "A uniquely modified version of the Candor, famously created by Hunter's Pride. Named after the daemonic Phoenix of legend that the Ashen Huntsman had once slain, this hell-kissed weapon is more visually intimidating than its original counterpart, but mechanically acts the same. Chambered in .45." + icon_state = "phenex" + item_state = "hp_phenex" /obj/item/gun/ballistic/automatic/pistol/deagle name = "\improper Desert Eagle" @@ -86,7 +90,7 @@ 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' @@ -96,11 +100,13 @@ 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." @@ -120,25 +126,11 @@ 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) - -/obj/item/gun/ballistic/automatic/pistol/stickman - name = "flat gun" - desc = "A 2 dimensional gun.. what?" - icon_state = "flatgun" - manufacturer = MANUFACTURER_NONE + 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/pickup(mob/living/user) - SHOULD_CALL_PARENT(0) - to_chat(user, "As you try to pick up [src], it slips out of your grip..") - if(prob(50)) - to_chat(user, "..and vanishes from your vision! Where the hell did it go?") - qdel(src) - user.update_icons() - else - to_chat(user, "..and falls into view. Whew, that was a close one.") - user.dropItemToGround(src) /obj/item/gun/ballistic/automatic/pistol/commander name = "\improper Commander" @@ -154,8 +146,7 @@ eject_sound = 'sound/weapons/gun/pistol/mag_release.ogg' eject_empty_sound = 'sound/weapons/gun/pistol/mag_release.ogg' -/obj/item/gun/ballistic/automatic/pistol/commander/no_mag - spawnwithmagazine = FALSE +EMPTY_GUN_HELPER(automatic/pistol/commander) /obj/item/gun/ballistic/automatic/pistol/commander/inteq name = "\improper Commissioner" @@ -164,8 +155,7 @@ item_state = "commander-inteq" manufacturer = MANUFACTURER_INTEQ -/obj/item/gun/ballistic/automatic/pistol/commander/inteq/no_mag - spawnwithmagazine = FALSE +EMPTY_GUN_HELPER(automatic/pistol/commander/inteq) /obj/item/gun/ballistic/automatic/pistol/commissar name = "\improper Commissar" @@ -235,6 +225,8 @@ 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" @@ -245,7 +237,7 @@ 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' @@ -272,12 +264,6 @@ to_chat(user, "Theres no magazine to replace!") return -/obj/item/gun/ballistic/automatic/pistol/disposable/pizza - name = "pizza disposable gun" - desc = "How horrible. Whoever you point at with this won't be very cheesed to meet you." //this is a warcrime against italians // IF YOU'RE GOING TO DO US DIRTY SPELL IT RIGHT - icon_state = "disposable_pizza" - custom_materials = list(/datum/material/pizza=2000) - //not technically a pistol but whatever /obj/item/gun/ballistic/derringer name = ".38 Derringer" diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index 6663f2cbceab..c581c79442de 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 @@ -85,7 +88,7 @@ continue casing_to_eject.forceMove(drop_location()) var/angle_of_movement =(rand(-3000, 3000) / 100) + dir2angle(turn(user.dir, 180)) - casing_to_eject.AddComponent(/datum/component/movable_physics, _horizontal_velocity = rand(450, 550) / 100, _vertical_velocity = rand(400, 450) / 100, _horizontal_friction = rand(20, 24) / 100, _z_gravity = PHYSICS_GRAV_STANDARD, _z_floor = 0, _angle_of_movement = angle_of_movement) + casing_to_eject.AddComponent(/datum/component/movable_physics, _horizontal_velocity = rand(450, 550) / 100, _vertical_velocity = rand(400, 450) / 100, _horizontal_friction = rand(20, 24) / 100, _z_gravity = PHYSICS_GRAV_STANDARD, _z_floor = 0, _angle_of_movement = angle_of_movement, _bounce_sound = casing_to_eject.bounce_sfx_override) num_unloaded++ SSblackbox.record_feedback("tally", "station_mess_created", 1, casing_to_eject.name) @@ -98,13 +101,13 @@ for(var/i in 1 to num_to_unload) var/doafter_time = 0.4 SECONDS - if(!do_mob(user,user,doafter_time)) + if(!do_after(user, doafter_time, user)) break - if(!eject_casing()) + if(!eject_casing(user)) doafter_time = 0 SECONDS else num_unloaded++ - if(!do_mob(user,user,doafter_time)) + if(!do_after(user, doafter_time, user)) break chamber_round(TRUE, TRUE) @@ -122,8 +125,9 @@ to_chat(user, "There's nothing in the gate to eject from [src]!") return FALSE playsound(src, eject_sound, eject_sound_volume, eject_sound_vary) + casing_to_eject.forceMove(drop_location()) var/angle_of_movement =(rand(-3000, 3000) / 100) + dir2angle(turn(user.dir, 180)) - casing_to_eject.AddComponent(/datum/component/movable_physics, _horizontal_velocity = rand(350, 450) / 100, _vertical_velocity = rand(400, 450) / 100, _horizontal_friction = rand(20, 24) / 100, _z_gravity = PHYSICS_GRAV_STANDARD, _z_floor = 0, _angle_of_movement = angle_of_movement) + casing_to_eject.AddComponent(/datum/component/movable_physics, _horizontal_velocity = rand(350, 450) / 100, _vertical_velocity = rand(400, 450) / 100, _horizontal_friction = rand(20, 24) / 100, _z_gravity = PHYSICS_GRAV_STANDARD, _z_floor = 0, _angle_of_movement = angle_of_movement, _bounce_sound = casing_to_eject.bounce_sfx_override) SSblackbox.record_feedback("tally", "station_mess_created", 1, casing_to_eject.name) if(!gate_loaded) @@ -169,7 +173,7 @@ else if(slot) if(!slot.BB && allow_ejection) - if(do_mob(user,user,doafter_time)) + if(!do_after(user, doafter_time, user)) eject_casing(user) rounds = magazine.ammo_list() @@ -213,7 +217,7 @@ var/doafter_time = 0.8 SECONDS if(magazine.instant_load && attacking_box.instant_load) doafter_time = 0 SECONDS - if(!do_mob(user,user,doafter_time)) + if(!do_after(user, doafter_time, user)) break if(!insert_casing(user, casing_to_insert, FALSE)) break @@ -230,7 +234,7 @@ if(!casing_to_insert || (magazine.caliber && casing_to_insert.caliber != magazine.caliber) || (!magazine.caliber && casing_to_insert.type != magazine.ammo_type)) break var/doafter_time = 0.4 SECONDS - if(!do_mob(user,user,doafter_time)) + if(!do_after(user, doafter_time, user)) break if(!insert_casing(null, casing_to_insert, FALSE)) doafter_time = 0 SECONDS @@ -238,7 +242,7 @@ num_loaded++ attacking_box.update_appearance() attacking_box.stored_ammo -= casing_to_insert - if(!do_mob(user,user,doafter_time)) + if(!do_after(user, doafter_time, user)) break switch(gate_load_direction) if(REVOLVER_AUTO_ROTATE_RIGHT_LOADING) @@ -278,8 +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) - //playsound(src, rack_sound, rack_sound_volume, rack_sound_vary) + 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,17 +465,12 @@ /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.") playsound(src, 'sound/items/handling/ammobox_pickup.ogg', 20, FALSE) return + /obj/item/gun/ballistic/revolver/detective name = "\improper HP Detective Special" desc = "A small law enforcement firearm. Originally commissioned by Nanotrasen for their Private Investigation division, it has become extremely popular among independent civilians as a cheap, compact sidearm. Uses .38 Special rounds." @@ -485,12 +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) @@ -577,19 +586,22 @@ 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." @@ -667,18 +679,6 @@ user.apply_damage(300, BRUTE, affecting) user.visible_message("[user.name] fires [src] at [user.p_their()] head!", "You fire [src] at your head!", "You hear a gunshot!") -/obj/item/gun/ballistic/revolver/russian/soul - name = "cursed Russian revolver" - desc = "To play with this revolver requires wagering your very soul." - -/obj/item/gun/ballistic/revolver/russian/soul/shoot_self(mob/living/user) - ..() - var/obj/item/soulstone/anybody/revolver/SS = new /obj/item/soulstone/anybody/revolver(get_turf(src)) - if(!SS.transfer_soul("FORCE", user)) //Something went wrong - qdel(SS) - return - user.visible_message("[user.name]'s soul is captured by \the [src]!", "You've lost the gamble! Your soul is forfeit!") - /obj/item/gun/ballistic/revolver/firebrand name = "\improper HP Firebrand" desc = "An archaic precursor to revolver-type firearms, this gun was rendered completely obsolete millennia ago. While fast to fire, it is extremely inaccurate. Uses .357 ammo." @@ -688,7 +688,7 @@ spread = 20 manufacturer = MANUFACTURER_HUNTERSPRIDE spread_unwielded = 50 - fire_delay = 0 + fire_delay = 0 SECONDS gate_offset = 4 semi_auto = TRUE safety_wording = "safety" @@ -714,6 +714,7 @@ ) recoil = 0 //weaker than normal revolver, no recoil + spread_unwielded = 10 /obj/item/gun/ballistic/revolver/shadow/ComponentInitialize() . = ..() @@ -724,4 +725,4 @@ // if you go through the pain of not only using this shitty gun, but also with the fucking gunslinger quirk, you deserve this bonus. not a BIG bonus, but enough as an incentive to make people actually take the quirk. if(chambered.BB && (HAS_TRAIT(user, TRAIT_GUNSLINGER))) chambered.BB.damage += 5 - chambered.armour_penetration += 5 + chambered.BB.armour_penetration += 5 diff --git a/code/modules/projectiles/guns/ballistic/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm index 24cf3323048a..45b1e8b2debd 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 @@ -67,10 +70,6 @@ . = ..() . += "The bolt is [bolt_locked ? "open" : "closed"]." -/////////////////////// -// BOLT ACTION RIFLE // -/////////////////////// - /obj/item/gun/ballistic/rifle/illestren name = "\improper HP Illestren" desc = "A sturdy and conventional bolt-action rifle. One of Hunter's Pride's most successful firearms, the Illestren is popular among colonists, pirates, snipers, and countless others. Chambered in 8x50mmR." @@ -89,18 +88,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." @@ -160,57 +159,6 @@ manufacturer = MANUFACTURER_HUNTERSPRIDE -/obj/item/gun/ballistic/rifle/illestren/enchanted - name = "enchanted bolt-action rifle" - desc = "Careful not to lose your head." - var/guns_left = 30 - mag_type = /obj/item/ammo_box/magazine/internal/boltaction/enchanted - can_be_sawn_off = FALSE - manufacturer = MANUFACTURER_NONE - -/obj/item/gun/ballistic/rifle/illestren/enchanted/arcane_barrage - name = "arcane barrage" - desc = "Pew Pew Pew." - fire_sound = 'sound/weapons/emitter.ogg' - icon = 'icons/obj/guns/projectile.dmi' - lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' - icon_state = "arcane_barrage" - item_state = "arcane_barrage" - slot_flags = null - can_bayonet = FALSE - item_flags = NEEDS_PERMIT | DROPDEL | ABSTRACT | NOBLUDGEON - flags_1 = NONE - trigger_guard = TRIGGER_GUARD_ALLOW_ALL - - mag_type = /obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage - -/obj/item/gun/ballistic/rifle/illestren/enchanted/dropped() - . = ..() - guns_left = 0 - -/obj/item/gun/ballistic/rifle/illestren/enchanted/proc/discard_gun(mob/living/user) - user.throw_item(pick(oview(7,get_turf(user)))) - -/obj/item/gun/ballistic/rifle/illestren/enchanted/arcane_barrage/discard_gun(mob/living/user) - qdel(src) - -/obj/item/gun/ballistic/rifle/illestren/enchanted/attack_self() - return - -/obj/item/gun/ballistic/rifle/illestren/enchanted/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) - . = ..() - if(!.) - return - if(guns_left) - var/obj/item/gun/ballistic/rifle/illestren/enchanted/gun = new type - gun.guns_left = guns_left - 1 - discard_gun(user) - user.swap_hand() - user.put_in_hands(gun) - else - user.dropItemToGround(src, TRUE) - /obj/item/gun/ballistic/rifle/polymer name = "polymer survivor rifle" desc = "A bolt-action rifle made of scrap, desperation, and luck. Likely to shatter at any moment. Chambered in .300 Blackout." diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 4502f7fe9b2c..bfe2e88bf804 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,17 +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 + 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(.) @@ -98,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) . = ..() @@ -139,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 @@ -196,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' @@ -210,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 @@ -224,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 @@ -231,6 +242,8 @@ wield_slowdown = 0.6 wield_delay = 0.65 SECONDS +EMPTY_GUN_HELPER(shotgun/bulldog) + /obj/item/gun/ballistic/shotgun/bulldog/inteq name = "\improper Mastiff Shotgun" desc = "A variation of the Bulldog, seized from Syndicate armories by deserting troopers then modified to IRMG's standards." @@ -239,6 +252,8 @@ mag_type = /obj/item/ammo_box/magazine/m12g manufacturer = MANUFACTURER_INTEQ +EMPTY_GUN_HELPER(shotgun/bulldog/inteq) + /obj/item/gun/ballistic/shotgun/bulldog/suns name = "\improper Bulldog-C Shotgun" desc = "A variation of the Bulldog manufactured by Scarborough Arms for SUNS. Its shorter barrel is intended to provide additional maneuverability in personal defense scenarios." @@ -254,8 +269,10 @@ 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 // @@ -304,7 +321,7 @@ for(var/obj/item/ammo_casing/casing_bullet in get_ammo_list(FALSE, TRUE)) casing_bullet.forceMove(drop_location()) var/angle_of_movement =(rand(-3000, 3000) / 100) + dir2angle(turn(user.dir, 180)) - casing_bullet.AddComponent(/datum/component/movable_physics, _horizontal_velocity = rand(450, 550) / 100, _vertical_velocity = rand(400, 450) / 100, _horizontal_friction = rand(20, 24) / 100, _z_gravity = PHYSICS_GRAV_STANDARD, _z_floor = 0, _angle_of_movement = angle_of_movement) + casing_bullet.AddComponent(/datum/component/movable_physics, _horizontal_velocity = rand(450, 550) / 100, _vertical_velocity = rand(400, 450) / 100, _horizontal_friction = rand(20, 24) / 100, _z_gravity = PHYSICS_GRAV_STANDARD, _z_floor = 0, _angle_of_movement = angle_of_movement, _bounce_sound = casing_bullet.bounce_sfx_override) num_unloaded++ SSblackbox.record_feedback("tally", "station_mess_created", 1, casing_bullet.name) @@ -435,52 +452,6 @@ sawn_off = TRUE slot_flags = ITEM_SLOT_BELT -/obj/item/gun/ballistic/shotgun/doublebarrel/hook - name = "hook modified sawn-off shotgun" - desc = "Range isn't an issue when you can bring your victim to you." - icon_state = "hookshotgun" - icon = 'icons/obj/guns/projectile.dmi' - item_state = "shotgun" - load_sound = 'sound/weapons/gun/shotgun/insert_shell.ogg' - mag_type = /obj/item/ammo_box/magazine/internal/shot/bounty - w_class = WEIGHT_CLASS_BULKY - weapon_weight = WEAPON_MEDIUM - can_be_sawn_off = FALSE - force = 16 //it has a hook on it - attack_verb = list("slashed", "hooked", "stabbed") - hitsound = 'sound/weapons/bladeslice.ogg' - //our hook gun! - var/obj/item/gun/magic/hook/bounty/hook - var/toggled = FALSE - -/obj/item/gun/ballistic/shotgun/doublebarrel/hook/Initialize() - . = ..() - hook = new /obj/item/gun/magic/hook/bounty(src) - -/obj/item/gun/ballistic/shotgun/doublebarrel/hook/AltClick(mob/user) - if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) - return - if(toggled) - to_chat(user,"You switch to the shotgun.") - fire_sound = initial(fire_sound) - else - to_chat(user,"You switch to the hook.") - fire_sound = 'sound/weapons/batonextend.ogg' - toggled = !toggled - -/obj/item/gun/ballistic/shotgun/doublebarrel/hook/examine(mob/user) - . = ..() - if(toggled) - . += "Alt-click to switch to the shotgun." - else - . += "Alt-click to switch to the hook." - -/obj/item/gun/ballistic/shotgun/doublebarrel/hook/afterattack(atom/target, mob/living/user, flag, params) - if(toggled) - hook.afterattack(target, user, flag, params) - else - return ..() - /obj/item/gun/ballistic/shotgun/automatic/combat/compact/compact name = "compact compact combat shotgun" desc = "A compact version of the compact version of the semi automatic combat shotgun. For when you want a gun the same size as your brain." @@ -543,7 +514,7 @@ 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 @@ -576,7 +547,7 @@ 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 @@ -738,10 +709,10 @@ 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 23ec4247a5da..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,14 +60,12 @@ 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 -/obj/item/gun/ballistic/automatic/smg/c20r/ComponentInitialize() - . = ..() - AddComponent(/datum/component/automatic_fire, 0.13 SECONDS) +EMPTY_GUN_HELPER(automatic/smg/c20r) /obj/item/gun/ballistic/automatic/smg/c20r/Initialize() . = ..() @@ -87,28 +90,23 @@ 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' @@ -122,10 +120,7 @@ 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" @@ -134,14 +129,10 @@ 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." @@ -149,67 +140,76 @@ 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" @@ -219,20 +219,18 @@ 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 @@ -251,12 +249,10 @@ fire_sound = 'sound/weapons/gun/smg/smg_heavy.ogg' manufacturer = MANUFACTURER_MINUTEMAN -/obj/item/gun/ballistic/automatic/smg/cm5/ComponentInitialize() - . = ..() - AddComponent(/datum/component/automatic_fire, 0.13 SECONDS) + fire_select_icon_state_prefix = "clip_" + adjust_fire_select_icon_state_on_safety = TRUE -/obj/item/gun/ballistic/automatic/smg/cm5/no_mag - spawnwithmagazine = FALSE +EMPTY_GUN_HELPER(automatic/smg/cm5) /obj/item/gun/ballistic/automatic/smg/cm5/compact name = "\improper CM-5c" @@ -265,15 +261,13 @@ 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." @@ -321,7 +315,6 @@ /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 @@ -355,26 +348,19 @@ /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() . = ..() @@ -417,8 +403,3 @@ 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/guns/magic.dm b/code/modules/projectiles/guns/magic.dm deleted file mode 100644 index 1f8be937b645..000000000000 --- a/code/modules/projectiles/guns/magic.dm +++ /dev/null @@ -1,85 +0,0 @@ -/obj/item/gun/magic - name = "staff of nothing" - desc = "This staff is boring to watch because even though it came first you've seen everything it can do in other staves for years." - icon = 'icons/obj/guns/magic.dmi' - icon_state = "staffofnothing" - item_state = "staff" - lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' //not really a gun and some toys use these inhands - righthand_file = 'icons/mob/inhands/items_righthand.dmi' - fire_sound = 'sound/weapons/emitter.ogg' - flags_1 = CONDUCT_1 - w_class = WEIGHT_CLASS_HUGE - var/checks_antimagic = TRUE - var/max_charges = 6 - var/charges = 0 - var/recharge_rate = 4 - var/charge_tick = 0 - var/can_charge = TRUE - var/ammo_type - var/no_den_usage - trigger_guard = TRIGGER_GUARD_ALLOW_ALL // Has no trigger at all, uses magic instead - -/obj/item/gun/magic/process_fire(atom/target, mob/living/user, message, params, zone_override, bonus_spread) - if(no_den_usage) - var/area/A = get_area(user) - if(istype(A, /area/wizard_station)) - add_fingerprint(user) - to_chat(user, "You know better than to violate the security of The Den, best wait until you leave to use [src].") - return - else - no_den_usage = 0 - if(checks_antimagic && user.anti_magic_check(TRUE, FALSE, FALSE, 0, TRUE)) - add_fingerprint(user) - to_chat(user, "Something is interfering with [src].") - return - . = ..() - -/obj/item/gun/magic/can_shoot() - return charges - -/obj/item/gun/magic/recharge_newshot() - if (charges && chambered && !chambered.BB) - chambered.newshot() - -/obj/item/gun/magic/process_chamber(atom/shooter) - if(chambered && !chambered.BB) //if BB is null, i.e the shot has been fired... - charges--//... drain a charge - recharge_newshot() - -/obj/item/gun/magic/Initialize() - . = ..() - charges = max_charges - if(ammo_type) - chambered = new ammo_type(src) - if(can_charge) - START_PROCESSING(SSobj, src) - - -/obj/item/gun/magic/Destroy() - if(can_charge) - STOP_PROCESSING(SSobj, src) - return ..() - - -/obj/item/gun/magic/process() - if (charges >= max_charges) - charge_tick = 0 - return - charge_tick++ - if(charge_tick < recharge_rate) - return 0 - charge_tick = 0 - charges++ - if(charges == 1) - recharge_newshot() - return 1 - - -/obj/item/gun/magic/shoot_with_empty_chamber(mob/living/user as mob|obj) - to_chat(user, "The [name] whizzles quietly.") - -/obj/item/gun/magic/vv_edit_var(var_name, var_value) - . = ..() - switch(var_name) - if(NAMEOF(src, charges)) - recharge_newshot() diff --git a/code/modules/projectiles/guns/magic/staff.dm b/code/modules/projectiles/guns/magic/staff.dm deleted file mode 100644 index e8f1683d21a1..000000000000 --- a/code/modules/projectiles/guns/magic/staff.dm +++ /dev/null @@ -1,142 +0,0 @@ -/obj/item/gun/magic/staff - slot_flags = ITEM_SLOT_BACK - lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' - item_flags = NEEDS_PERMIT | NO_MAT_REDEMPTION - -/obj/item/gun/magic/staff/change - name = "staff of change" - desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself." - fire_sound = 'sound/magic/staff_change.ogg' - ammo_type = /obj/item/ammo_casing/magic/change - icon_state = "staffofchange" - item_state = "staffofchange" - -/obj/item/gun/magic/staff/animate - name = "staff of animation" - desc = "An artefact that spits bolts of life-force which causes objects which are hit by it to animate and come to life! This magic doesn't affect machines." - fire_sound = 'sound/magic/staff_animation.ogg' - ammo_type = /obj/item/ammo_casing/magic/animate - icon_state = "staffofanimation" - item_state = "staffofanimation" - -/obj/item/gun/magic/staff/healing - name = "staff of healing" - desc = "An artefact that spits bolts of restoring magic which can remove ailments of all kinds and even raise the dead." - fire_sound = 'sound/magic/staff_healing.ogg' - ammo_type = /obj/item/ammo_casing/magic/heal - icon_state = "staffofhealing" - item_state = "staffofhealing" - -/obj/item/gun/magic/staff/healing/handle_suicide() //Stops people trying to commit suicide to heal themselves - return - -/obj/item/gun/magic/staff/chaos - name = "staff of chaos" - desc = "An artefact that spits bolts of chaotic magic that can potentially do anything." - fire_sound = 'sound/magic/staff_chaos.ogg' - ammo_type = /obj/item/ammo_casing/magic/chaos - icon_state = "staffofchaos" - item_state = "staffofchaos" - max_charges = 10 - recharge_rate = 2 - no_den_usage = 1 - var/allowed_projectile_types = list(/obj/projectile/magic/change, /obj/projectile/magic/animate, /obj/projectile/magic/resurrection, - /obj/projectile/magic/death, /obj/projectile/magic/teleport, /obj/projectile/magic/door, /obj/projectile/magic/aoe/fireball, - /obj/projectile/magic/spellblade, /obj/projectile/magic/arcane_barrage, /obj/projectile/magic/locker, /obj/projectile/magic/flying, - /obj/projectile/magic/bounty, /obj/projectile/magic/antimagic, /obj/projectile/magic/fetch, /obj/projectile/magic/sapping, - /obj/projectile/magic/necropotence, /obj/projectile/magic, /obj/projectile/temp/chill, /obj/projectile/magic/wipe) - -/obj/item/gun/magic/staff/chaos/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) - chambered.projectile_type = pick(allowed_projectile_types) - . = ..() - -/obj/item/gun/magic/staff/door - name = "staff of door creation" - desc = "An artefact that spits bolts of transformative magic that can create doors in walls." - fire_sound = 'sound/magic/staff_door.ogg' - ammo_type = /obj/item/ammo_casing/magic/door - icon_state = "staffofdoor" - item_state = "staffofdoor" - max_charges = 10 - recharge_rate = 2 - no_den_usage = 1 - -/obj/item/gun/magic/staff/honk - name = "staff of the honkmother" - desc = "Honk." - fire_sound = 'sound/items/airhorn.ogg' - ammo_type = /obj/item/ammo_casing/magic/honk - icon_state = "honker" - item_state = "honker" - max_charges = 4 - recharge_rate = 8 - -/obj/item/gun/magic/staff/spellblade - name = "spellblade" - desc = "A deadly combination of laziness and boodlust, this blade allows the user to dismember their enemies without all the hard work of actually swinging the sword." - fire_sound = 'sound/magic/fireball.ogg' - ammo_type = /obj/item/ammo_casing/magic/spellblade - icon_state = "spellblade" - item_state = "spellblade" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - hitsound = 'sound/weapons/rapierhit.ogg' - force = 20 - armour_penetration = 75 - block_chance = 50 - sharpness = IS_SHARP - max_charges = 4 - -/obj/item/gun/magic/staff/spellblade/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 15, 125, 0, hitsound) - -/obj/item/gun/magic/staff/spellblade/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(attack_type == PROJECTILE_ATTACK) - final_block_chance = 0 - return ..() - -/obj/item/gun/magic/staff/locker - name = "staff of the locker" - desc = "An artefact that expells encapsulating bolts, for incapacitating thy enemy." - fire_sound = 'sound/magic/staff_change.ogg' - ammo_type = /obj/item/ammo_casing/magic/locker - icon_state = "locker" - item_state = "locker" - max_charges = 6 - recharge_rate = 4 - -//yes, they don't have sounds. they're admin staves, and their projectiles will play the chaos bolt sound anyway so why bother? - -/obj/item/gun/magic/staff/flying - name = "staff of flying" - desc = "An artefact that spits bolts of graceful magic that can make something fly." - fire_sound = 'sound/magic/staff_healing.ogg' - ammo_type = /obj/item/ammo_casing/magic/flying - icon_state = "staffofflight" - item_state = "staffofflight" - -/obj/item/gun/magic/staff/sapping - name = "staff of sapping" - desc = "An artefact that spits bolts of sapping magic that can make something sad." - fire_sound = 'sound/magic/staff_change.ogg' - ammo_type = /obj/item/ammo_casing/magic/sapping - icon_state = "staffofsapping" - item_state = "staffofsapping" - -/obj/item/gun/magic/staff/necropotence - name = "staff of necropotence" - desc = "An artefact that spits bolts of death magic that can repurpose the soul." - fire_sound = 'sound/magic/staff_change.ogg' - ammo_type = /obj/item/ammo_casing/magic/necropotence - icon_state = "staffofnecropotence" - item_state = "staffofnecropotence" - -/obj/item/gun/magic/staff/wipe - name = "staff of possession" - desc = "An artefact that spits bolts of mind-unlocking magic that can let ghosts invade the victim's mind." - fire_sound = 'sound/magic/staff_change.ogg' - ammo_type = /obj/item/ammo_casing/magic/wipe - icon_state = "staffofwipe" - item_state = "staffofwipe" diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm deleted file mode 100644 index c6a25127878a..000000000000 --- a/code/modules/projectiles/guns/magic/wand.dm +++ /dev/null @@ -1,266 +0,0 @@ -//For use in prob() to determine if an empty wand will shoot once then break. -#define WAND_WREST_CHANCE (1/121) - -/obj/item/gun/magic/wand - name = "wand" - desc = "You shouldn't have this." - ammo_type = /obj/item/ammo_casing/magic - icon_state = "nothingwand" - item_state = "wand" - base_icon_state = "nothingwand" - w_class = WEIGHT_CLASS_SMALL - can_charge = FALSE - max_charges = 100 //100, 50, 50, 34 (max charge distribution by 25%ths) - var/variable_charges = TRUE - -/obj/item/gun/magic/wand/Initialize() - if(prob(75) && variable_charges) //25% chance of listed max charges, 50% chance of 1/2 max charges, 25% chance of 1/3 max charges - if(prob(33)) - max_charges = CEILING(max_charges / 3, 1) - else - max_charges = CEILING(max_charges / 2, 1) - return ..() - -/obj/item/gun/magic/wand/examine(mob/user) - . = ..() - . += "Has [charges] charge\s remaining." - -/obj/item/gun/magic/wand/update_icon_state() - icon_state = "[base_icon_state][charges ? null : "-drained"]" - return ..() - -/obj/item/gun/magic/wand/attack(atom/target, mob/living/user) - if(target == user) - return - ..() - -/obj/item/gun/magic/wand/afterattack(atom/target, mob/living/user) - var/wrested = FALSE - if(!charges) - wrested = shoot_with_empty_chamber(user) - if(!wrested) - return - if(target == user) - if(no_den_usage) - var/area/A = get_area(user) - if(istype(A, /area/wizard_station)) - to_chat(user, "You know better than to violate the security of The Den, best wait until you leave to use [src].") - return - else - no_den_usage = 0 - zap_self(user) - else - . = ..() - if(wrested) - to_chat(user,"[src] overloads and disintegrates.") - qdel(src) - return - update_appearance() - -/obj/item/gun/magic/wand/shoot_with_empty_chamber(mob/living/user) - if(prob(100*WAND_WREST_CHANCE)) - to_chat(user,"You manage to activate [src] one last time.") - charges++ - recharge_newshot() - return TRUE - return ..() - -/obj/item/gun/magic/wand/proc/zap_self(mob/living/user) - user.visible_message("[user] zaps [user.p_them()]self with [src].") - playsound(user, fire_sound, 50, TRUE) - user.log_message("zapped [user.p_them()]self with a [src]", LOG_ATTACK) - - -///////////////////////////////////// -//WAND OF DEATH -///////////////////////////////////// - -/obj/item/gun/magic/wand/death - name = "wand of death" - desc = "This deadly wand overwhelms the victim's body with pure energy, slaying them without fail." - fire_sound = 'sound/magic/wandodeath.ogg' - ammo_type = /obj/item/ammo_casing/magic/death - icon_state = "deathwand" - base_icon_state = "deathwand" - max_charges = 3 //3, 2, 2, 1 - -/obj/item/gun/magic/wand/death/zap_self(mob/living/user) - ..() - charges-- - if(user.anti_magic_check()) - user.visible_message("[src] has no effect on [user]!") - return - if(isliving(user)) - var/mob/living/L = user - if(L.mob_biotypes & MOB_UNDEAD) //negative energy heals the undead - user.revive(full_heal = TRUE, admin_revive = TRUE) - to_chat(user, "You feel great!") - return - to_chat(user, "You irradiate yourself with pure negative energy! \ - [pick("Do not pass go. Do not collect 200 zorkmids.","You feel more confident in your spell casting skills.","You Die...","Do you want your possessions identified?")]\ - ") - user.death(FALSE) - -/obj/item/gun/magic/wand/death/debug - desc = "In some obscure circles, this is known as the 'cloning tester's friend'." - max_charges = 500 - variable_charges = FALSE - can_charge = TRUE - recharge_rate = 1 - - -///////////////////////////////////// -//WAND OF HEALING -///////////////////////////////////// - -/obj/item/gun/magic/wand/resurrection - name = "wand of healing" - desc = "This wand uses healing magics to heal and revive. They are rarely utilized within the Wizard Federation for some reason." - ammo_type = /obj/item/ammo_casing/magic/heal - fire_sound = 'sound/magic/staff_healing.ogg' - icon_state = "revivewand" - base_icon_state = "revivewand" - max_charges = 10 //10, 5, 5, 4 - -/obj/item/gun/magic/wand/resurrection/zap_self(mob/living/user) - ..() - charges-- - if(user.anti_magic_check()) - user.visible_message("[src] has no effect on [user]!") - return - if(isliving(user)) - var/mob/living/L = user - if(L.mob_biotypes & MOB_UNDEAD) //positive energy harms the undead - to_chat(user, "You irradiate yourself with pure positive energy! \ - [pick("Do not pass go. Do not collect 200 zorkmids.","You feel more confident in your spell casting skills.","You Die...","Do you want your possessions identified?")]\ - ") - user.death(0) - return - user.revive(full_heal = TRUE, admin_revive = TRUE) - to_chat(user, "You feel great!") - -/obj/item/gun/magic/wand/resurrection/debug //for testing - desc = "Is it possible for something to be even more powerful than regular magic? This wand is." - max_charges = 500 - variable_charges = FALSE - can_charge = TRUE - recharge_rate = 1 - -///////////////////////////////////// -//WAND OF POLYMORPH -///////////////////////////////////// - -/obj/item/gun/magic/wand/polymorph - name = "wand of polymorph" - desc = "This wand is attuned to chaos and will radically alter the victim's form." - ammo_type = /obj/item/ammo_casing/magic/change - icon_state = "polywand" - base_icon_state = "polywand" - fire_sound = 'sound/magic/staff_change.ogg' - max_charges = 10 //10, 5, 5, 4 - -/obj/item/gun/magic/wand/polymorph/zap_self(mob/living/user) - ..() //because the user mob ceases to exists by the time wabbajack fully resolves - - wabbajack(user) - charges-- - -///////////////////////////////////// -//WAND OF TELEPORTATION -///////////////////////////////////// - -/obj/item/gun/magic/wand/teleport - name = "wand of teleportation" - desc = "This wand will wrench targets through space and time to move them somewhere else." - ammo_type = /obj/item/ammo_casing/magic/teleport - fire_sound = 'sound/magic/wand_teleport.ogg' - icon_state = "telewand" - base_icon_state = "telewand" - max_charges = 10 //10, 5, 5, 4 - no_den_usage = TRUE - -/obj/item/gun/magic/wand/teleport/zap_self(mob/living/user) - if(do_teleport(user, user, 10, channel = TELEPORT_CHANNEL_MAGIC)) - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(3, user.loc) - smoke.start() - charges-- - ..() - -/obj/item/gun/magic/wand/safety - name = "wand of safety" - desc = "This wand will use the lightest of bluespace currents to gently place the target somewhere safe." - ammo_type = /obj/item/ammo_casing/magic/safety - fire_sound = 'sound/magic/wand_teleport.ogg' - icon_state = "telewand" - base_icon_state = "telewand" - max_charges = 10 //10, 5, 5, 4 - no_den_usage = FALSE - -/obj/item/gun/magic/wand/safety/zap_self(mob/living/user) - var/turf/origin = get_turf(user) - var/turf/destination = find_safe_turf() - - if(do_teleport(user, destination, channel=TELEPORT_CHANNEL_MAGIC)) - for(var/t in list(origin, destination)) - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(0, t) - smoke.start() - ..() - -/obj/item/gun/magic/wand/safety/debug - desc = "This wand has 'find_safe_turf()' engraved into its blue wood. Perhaps it's a secret message?" - max_charges = 500 - variable_charges = FALSE - can_charge = TRUE - recharge_rate = 1 - - -///////////////////////////////////// -//WAND OF DOOR CREATION -///////////////////////////////////// - -/obj/item/gun/magic/wand/door - name = "wand of door creation" - desc = "This particular wand can create doors in any wall for the unscrupulous wizard who shuns teleportation magics." - ammo_type = /obj/item/ammo_casing/magic/door - icon_state = "doorwand" - base_icon_state = "doorwand" - fire_sound = 'sound/magic/staff_door.ogg' - max_charges = 20 //20, 10, 10, 7 - no_den_usage = 1 - -/obj/item/gun/magic/wand/door/zap_self(mob/living/user) - to_chat(user, "You feel vaguely more open with your feelings.") - charges-- - ..() - -///////////////////////////////////// -//WAND OF FIREBALL -///////////////////////////////////// - -/obj/item/gun/magic/wand/fireball - name = "wand of fireball" - desc = "This wand shoots scorching balls of fire that explode into destructive flames." - fire_sound = 'sound/magic/fireball.ogg' - ammo_type = /obj/item/ammo_casing/magic/fireball - icon_state = "firewand" - base_icon_state = "firewand" - max_charges = 8 //8, 4, 4, 3 - -/obj/item/gun/magic/wand/fireball/zap_self(mob/living/user) - ..() - explosion(user.loc, -1, 0, 2, 3, 0, flame_range = 2) - charges-- - -///////////////////////////////////// -//WAND OF NOTHING -///////////////////////////////////// - -/obj/item/gun/magic/wand/nothing - name = "wand of nothing" - desc = "It's not just a stick, it's a MAGIC stick?" - ammo_type = /obj/item/ammo_casing/magic/nothing - - -#undef WAND_WREST_CHANCE diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 829393d4d115..0b9bcb8da4f7 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -1,7 +1,3 @@ - -#define MOVES_HITSCAN -1 //Not actually hitscan but close as we get without actual hitscan. -#define MUZZLE_EFFECT_PIXEL_INCREMENT 17 //How many pixels to move the muzzle flash up so your character doesn't look like they're shitting out lasers. - /obj/projectile name = "projectile" icon = 'icons/obj/projectiles.dmi' 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/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm deleted file mode 100644 index 458c19d053da..000000000000 --- a/code/modules/projectiles/projectile/magic.dm +++ /dev/null @@ -1,736 +0,0 @@ -/obj/projectile/magic - name = "bolt" - icon_state = "energy" - damage = 0 - damage_type = OXY - nodamage = TRUE - armour_penetration = 100 - flag = "magic" - -/obj/projectile/magic/death - name = "bolt of death" - icon_state = "pulse1_bl" - -/obj/projectile/magic/death/on_hit(target) - . = ..() - if(ismob(target)) - var/mob/M = target - if(M.anti_magic_check()) - M.visible_message("[src] vanishes on contact with [target]!") - return BULLET_ACT_BLOCK - if(isliving(M)) - var/mob/living/L = M - if(L.mob_biotypes & MOB_UNDEAD) //negative energy heals the undead - if(L.hellbound && L.stat == DEAD) - return BULLET_ACT_BLOCK - if(L.revive(full_heal = TRUE, admin_revive = TRUE)) - L.grab_ghost(force = TRUE) - to_chat(L, "You rise with a start, you're undead!!!") - else if(L.stat != DEAD) - to_chat(L, "You feel great!") - else - L.death(0) - else - M.death(0) - -/obj/projectile/magic/resurrection - name = "bolt of resurrection" - icon_state = "ion" - damage = 0 - damage_type = OXY - nodamage = TRUE - -/obj/projectile/magic/resurrection/on_hit(mob/living/carbon/target) - . = ..() - if(isliving(target)) - if(target.anti_magic_check()) - target.visible_message("[src] vanishes on contact with [target]!") - return BULLET_ACT_BLOCK - if(target.mob_biotypes & MOB_UNDEAD) //positive energy harms the undead - target.death(0) - else - if(target.hellbound && target.stat == DEAD) - return BULLET_ACT_BLOCK - if(target.revive(full_heal = TRUE, admin_revive = TRUE)) - target.grab_ghost(force = TRUE) // even suicides - to_chat(target, "You rise with a start, you're alive!!!") - else if(target.stat != DEAD) - to_chat(target, "You feel great!") - -/obj/projectile/magic/teleport - name = "bolt of teleportation" - icon_state = "bluespace" - damage = 0 - damage_type = OXY - nodamage = TRUE - var/inner_tele_radius = 0 - var/outer_tele_radius = 6 - -/obj/projectile/magic/teleport/on_hit(mob/target) - . = ..() - if(ismob(target)) - var/mob/M = target - if(M.anti_magic_check()) - M.visible_message("[src] fizzles on contact with [target]!") - return BULLET_ACT_BLOCK - var/teleammount = 0 - var/teleloc = target - if(!isturf(target)) - teleloc = target.loc - for(var/atom/movable/stuff in teleloc) - if(!stuff.anchored && stuff.loc && !isobserver(stuff)) - if(do_teleport(stuff, stuff, 10, channel = TELEPORT_CHANNEL_MAGIC)) - teleammount++ - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(max(round(4 - teleammount),0), stuff.loc) //Smoke drops off if a lot of stuff is moved for the sake of sanity - smoke.start() - -/obj/projectile/magic/safety - name = "bolt of safety" - icon_state = "bluespace" - damage = 0 - damage_type = OXY - nodamage = TRUE - -/obj/projectile/magic/safety/on_hit(atom/target) - . = ..() - if(ismob(target)) - var/mob/M = target - if(M.anti_magic_check()) - M.visible_message("[src] fizzles on contact with [target]!") - return BULLET_ACT_BLOCK - if(isturf(target)) - return BULLET_ACT_HIT - - var/turf/origin_turf = get_turf(target) - var/turf/destination_turf = find_safe_turf() - - if(do_teleport(target, destination_turf, channel=TELEPORT_CHANNEL_MAGIC)) - for(var/t in list(origin_turf, destination_turf)) - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(0, t) - smoke.start() - -/obj/projectile/magic/door - name = "bolt of door creation" - icon_state = "energy" - damage = 0 - damage_type = OXY - nodamage = TRUE - var/list/door_types = list(/obj/structure/mineral_door/wood, /obj/structure/mineral_door/iron, /obj/structure/mineral_door/silver, /obj/structure/mineral_door/gold, /obj/structure/mineral_door/uranium, /obj/structure/mineral_door/sandstone, /obj/structure/mineral_door/transparent/plasma, /obj/structure/mineral_door/transparent/diamond) - -/obj/projectile/magic/door/on_hit(atom/target) - . = ..() - if(istype(target, /obj/machinery/door)) - OpenDoor(target) - else - var/turf/T = get_turf(target) - if(isclosedturf(T) && !isindestructiblewall(T)) - CreateDoor(T) - -/obj/projectile/magic/door/proc/CreateDoor(turf/T) - var/door_type = pick(door_types) - var/obj/structure/mineral_door/D = new door_type(T) - T.ChangeTurf(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) - D.Open() - -/obj/projectile/magic/door/proc/OpenDoor(obj/machinery/door/D) - if(istype(D, /obj/machinery/door/airlock)) - var/obj/machinery/door/airlock/A = D - A.locked = FALSE - D.open() - -/obj/projectile/magic/change - name = "bolt of change" - icon_state = "ice_1" - damage = 0 - damage_type = BURN - nodamage = TRUE - -/obj/projectile/magic/change/on_hit(atom/change) - . = ..() - if(ismob(change)) - var/mob/M = change - if(M.anti_magic_check()) - M.visible_message("[src] fizzles on contact with [M]!") - qdel(src) - return BULLET_ACT_BLOCK - wabbajack(change) - qdel(src) - -/proc/wabbajack(mob/living/M) - if(!istype(M) || M.stat == DEAD || M.notransform || (GODMODE & M.status_flags)) - return - - M.notransform = TRUE - ADD_TRAIT(M, TRAIT_IMMOBILIZED, MAGIC_TRAIT) - ADD_TRAIT(M, TRAIT_HANDS_BLOCKED, MAGIC_TRAIT) - M.icon = null - M.cut_overlays() - M.invisibility = INVISIBILITY_ABSTRACT - - var/list/contents = M.contents.Copy() - - if(iscyborg(M)) - var/mob/living/silicon/robot/Robot = M - // Disconnect AI's in shells - if(Robot.connected_ai) - Robot.connected_ai.disconnect_shell() - if(Robot.mmi) - qdel(Robot.mmi) - Robot.notify_ai(NEW_BORG) - else - for(var/obj/item/W in contents) - if(!M.dropItemToGround(W)) - qdel(W) - - var/mob/living/new_mob - - var/randomize = pick("monkey","robot","slime","xeno","humanoid","animal") - switch(randomize) - if("monkey") - new_mob = new /mob/living/carbon/monkey(M.loc) - - if("robot") - var/robot = pick(200;/mob/living/silicon/robot, - /mob/living/silicon/robot/modules/syndicate, - /mob/living/silicon/robot/modules/syndicate/medical, - /mob/living/silicon/robot/modules/syndicate/saboteur, - 200;/mob/living/simple_animal/drone/polymorphed) - new_mob = new robot(M.loc) - if(issilicon(new_mob)) - new_mob.gender = M.gender - new_mob.invisibility = 0 - new_mob.job = "Cyborg" - var/mob/living/silicon/robot/Robot = new_mob - Robot.lawupdate = FALSE - Robot.connected_ai = null - Robot.mmi.transfer_identity(M) //Does not transfer key/client. - Robot.clear_inherent_laws(0) - Robot.clear_zeroth_law(0) - - if("slime") - new_mob = new /mob/living/simple_animal/slime/random(M.loc) - - if("xeno") - var/Xe - if(M.ckey) - Xe = pick(/mob/living/carbon/alien/humanoid/hunter,/mob/living/carbon/alien/humanoid/sentinel) - else - Xe = pick(/mob/living/carbon/alien/humanoid/hunter,/mob/living/simple_animal/hostile/alien/sentinel) - new_mob = new Xe(M.loc) - - if("animal") - var/path = pick(/mob/living/simple_animal/hostile/carp, - /mob/living/simple_animal/hostile/bear, - /mob/living/simple_animal/hostile/mushroom, - /mob/living/simple_animal/hostile/statue, - /mob/living/simple_animal/hostile/retaliate/bat, - /mob/living/simple_animal/hostile/retaliate/goat, - /mob/living/simple_animal/hostile/killertomato, - /mob/living/simple_animal/hostile/poison/giant_spider, - /mob/living/simple_animal/hostile/poison/giant_spider/hunter, - /mob/living/simple_animal/hostile/blob/blobbernaut/independent, - /mob/living/simple_animal/hostile/carp/ranged, - /mob/living/simple_animal/hostile/carp/ranged/chaos, - /mob/living/simple_animal/hostile/asteroid/basilisk/watcher, - /mob/living/simple_animal/hostile/asteroid/goliath/beast, - /mob/living/simple_animal/hostile/headcrab, - /mob/living/simple_animal/hostile/morph, - /mob/living/simple_animal/hostile/stickman, - /mob/living/simple_animal/hostile/stickman/dog, - /mob/living/simple_animal/hostile/megafauna/dragon/lesser, - /mob/living/simple_animal/hostile/gorilla, - /mob/living/simple_animal/parrot, - /mob/living/simple_animal/pet/dog/corgi, - /mob/living/simple_animal/crab, - /mob/living/simple_animal/pet/dog/pug, - /mob/living/simple_animal/pet/cat, - /mob/living/simple_animal/mouse, - /mob/living/simple_animal/chicken, - /mob/living/simple_animal/cow, - /mob/living/simple_animal/hostile/lizard, - /mob/living/simple_animal/pet/fox, - /mob/living/simple_animal/butterfly, - /mob/living/simple_animal/pet/cat/cak, - /mob/living/simple_animal/chick) - new_mob = new path(M.loc) - - if("humanoid") - new_mob = new /mob/living/carbon/human(M.loc) - - if(prob(50)) - var/list/chooseable_races = list() - for(var/speciestype in subtypesof(/datum/species)) - var/datum/species/S = speciestype - if(initial(S.changesource_flags) & WABBAJACK) - chooseable_races += speciestype - - if(chooseable_races.len) - new_mob.set_species(pick(chooseable_races)) - - var/datum/preferences/A = new() //Randomize appearance for the human - A.copy_to(new_mob, icon_updates=0) - - var/mob/living/carbon/human/H = new_mob - H.update_hair() - H.update_body_parts(TRUE) - H.dna.update_dna_identity() - - if(!new_mob) - return - - // Some forms can still wear some items - for(var/obj/item/W in contents) - new_mob.equip_to_appropriate_slot(W) - - M.log_message("became [new_mob.real_name]", LOG_ATTACK, color="orange") - - new_mob.a_intent = INTENT_HARM - - M.wabbajack_act(new_mob) - - to_chat(new_mob, "Your form morphs into that of a [randomize].") - - var/poly_msg = get_policy(POLICY_POLYMORPH) - if(poly_msg) - to_chat(new_mob, poly_msg) - - M.transfer_observers_to(new_mob) - - qdel(M) - return new_mob - -/obj/projectile/magic/animate - name = "bolt of animation" - icon_state = "red_1" - damage = 0 - damage_type = BURN - nodamage = TRUE - -/obj/projectile/magic/animate/on_hit(atom/target, blocked = FALSE) - target.animate_atom_living(firer) - ..() - -/atom/proc/animate_atom_living(mob/living/owner = null) - if((isitem(src) || isstructure(src)) && !is_type_in_list(src, GLOB.protected_objects)) - if(istype(src, /obj/structure/statue/petrified)) - var/obj/structure/statue/petrified/P = src - if(P.petrified_mob) - var/mob/living/L = P.petrified_mob - var/mob/living/simple_animal/hostile/statue/S = new(P.loc, owner) - S.name = "statue of [L.name]" - if(owner) - S.faction = list("[REF(owner)]") - S.icon = P.icon - S.icon_state = P.icon_state - S.copy_overlays(P, TRUE) - S.color = P.color - S.atom_colours = P.atom_colours.Copy() - if(L.mind) - L.mind.transfer_to(S) - if(owner) - to_chat(S, "You are an animate statue. You cannot move when monitored, but are nearly invincible and deadly when unobserved! Do not harm [owner], your creator.") - P.forceMove(S) - return - else - var/obj/O = src - if(istype(O, /obj/item/gun)) - new /mob/living/simple_animal/hostile/mimic/copy/ranged(loc, src, owner) - else - new /mob/living/simple_animal/hostile/mimic/copy(loc, src, owner) - - else if(istype(src, /mob/living/simple_animal/hostile/mimic/copy)) - // Change our allegiance! - var/mob/living/simple_animal/hostile/mimic/copy/C = src - if(owner) - C.ChangeOwner(owner) - -/obj/projectile/magic/spellblade - name = "blade energy" - icon_state = "lavastaff" - damage = 15 - damage_type = BURN - flag = "magic" - dismemberment = 50 - nodamage = FALSE - -/obj/projectile/magic/spellblade/on_hit(target) - if(ismob(target)) - var/mob/M = target - if(M.anti_magic_check()) - M.visible_message("[src] vanishes on contact with [target]!") - qdel(src) - return BULLET_ACT_BLOCK - . = ..() - -/obj/projectile/magic/arcane_barrage - name = "arcane bolt" - icon_state = "arcane_barrage" - damage = 20 - damage_type = BURN - nodamage = FALSE - armour_penetration = 0 - flag = "magic" - hitsound = 'sound/weapons/barragespellhit.ogg' - -/obj/projectile/magic/arcane_barrage/on_hit(target) - if(ismob(target)) - var/mob/M = target - if(M.anti_magic_check()) - M.visible_message("[src] vanishes on contact with [target]!") - qdel(src) - return BULLET_ACT_BLOCK - . = ..() - - -/obj/projectile/magic/locker - name = "locker bolt" - icon_state = "locker" - nodamage = TRUE - flag = "magic" - var/weld = TRUE - var/created = FALSE //prevents creation of more then one locker if it has multiple hits - var/locker_suck = TRUE - var/obj/structure/closet/locker_temp_instance = /obj/structure/closet/decay - -/obj/projectile/magic/locker/Initialize() - . = ..() - locker_temp_instance = new(src) - -/obj/projectile/magic/locker/prehit_pierce(atom/A) - . = ..() - if(isliving(A) && locker_suck) - var/mob/living/M = A - if(M.anti_magic_check()) // no this doesn't check if ..() returned to phase through do I care no it's magic ain't gotta explain shit - M.visible_message("[src] vanishes on contact with [A]!") - return PROJECTILE_DELETE_WITHOUT_HITTING - if(!locker_temp_instance.insertion_allowed(M)) - return - M.forceMove(src) - return PROJECTILE_PIERCE_PHASE - -/obj/projectile/magic/locker/on_hit(target) - if(created) - return ..() - if(LAZYLEN(contents)) - for(var/atom/movable/AM in contents) - locker_temp_instance.insert(AM) - locker_temp_instance.welded = weld - locker_temp_instance.update_appearance() - created = TRUE - return ..() - -/obj/projectile/magic/locker/Destroy() - locker_suck = FALSE - RemoveElement(/datum/element/connect_loc, projectile_connections) //We do this manually so the forcemoves don't "hit" us. This behavior is kinda dumb, someone refactor this - for(var/atom/movable/AM in contents) - AM.forceMove(get_turf(src)) - . = ..() - -/obj/structure/closet/decay - breakout_time = 600 - icon_welded = null - var/magic_icon = "cursed" - var/weakened_icon = "decursed" - var/auto_destroy = TRUE - -/obj/structure/closet/decay/Initialize() - . = ..() - if(auto_destroy) - addtimer(CALLBACK(src, PROC_REF(bust_open)), 5 MINUTES) - addtimer(CALLBACK(src, PROC_REF(magicly_lock)), 5) - -/obj/structure/closet/decay/proc/magicly_lock() - if(!welded) - return - icon_state = magic_icon - update_appearance() - -/obj/structure/closet/decay/after_weld(weld_state) - if(weld_state) - unmagify() - -/obj/structure/closet/decay/proc/decay() - animate(src, alpha = 0, time = 30) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), src), 30) - -/obj/structure/closet/decay/open(mob/living/user, force = FALSE) - . = ..() - if(.) - if(icon_state == magic_icon) //check if we used the magic icon at all before giving it the lesser magic icon - unmagify() - else - addtimer(CALLBACK(src, PROC_REF(decay)), 15 SECONDS) - -/obj/structure/closet/decay/proc/unmagify() - icon_state = weakened_icon - update_appearance() - addtimer(CALLBACK(src, PROC_REF(decay)), 15 SECONDS) - icon_welded = "welded" - -/obj/projectile/magic/flying - name = "bolt of flying" - icon_state = "flight" - -/obj/projectile/magic/flying/on_hit(target) - . = ..() - if(isliving(target)) - var/mob/living/L = target - if(L.anti_magic_check()) - L.visible_message("[src] vanishes on contact with [target]!") - return BULLET_ACT_BLOCK - var/atom/throw_target = get_edge_target_turf(L, angle2dir(Angle)) - L.throw_at(throw_target, 200, 4) - -/obj/projectile/magic/bounty - name = "bolt of bounty" - icon_state = "bounty" - -/obj/projectile/magic/bounty/on_hit(target) - . = ..() - if(isliving(target)) - var/mob/living/L = target - if(L.anti_magic_check() || !firer) - L.visible_message("[src] vanishes on contact with [target]!") - return BULLET_ACT_BLOCK - L.apply_status_effect(STATUS_EFFECT_BOUNTY, firer) - -/obj/projectile/magic/antimagic - name = "bolt of antimagic" - icon_state = "antimagic" - -/obj/projectile/magic/antimagic/on_hit(target) - . = ..() - if(isliving(target)) - var/mob/living/L = target - if(L.anti_magic_check()) - L.visible_message("[src] vanishes on contact with [target]!") - return BULLET_ACT_BLOCK - L.apply_status_effect(STATUS_EFFECT_ANTIMAGIC) - -/obj/projectile/magic/fetch - name = "bolt of fetching" - icon_state = "fetch" - -/obj/projectile/magic/fetch/on_hit(target) - . = ..() - if(isliving(target)) - var/mob/living/L = target - if(L.anti_magic_check() || !firer) - L.visible_message("[src] vanishes on contact with [target]!") - return BULLET_ACT_BLOCK - var/atom/throw_target = get_edge_target_turf(L, get_dir(L, firer)) - L.throw_at(throw_target, 200, 4) - -/obj/projectile/magic/sapping - name = "bolt of sapping" - icon_state = "sapping" - -/obj/projectile/magic/sapping/on_hit(target) - . = ..() - if(ismob(target)) - var/mob/M = target - if(M.anti_magic_check()) - M.visible_message("[src] vanishes on contact with [target]!") - return BULLET_ACT_BLOCK - SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, src, /datum/mood_event/sapped) - -/obj/projectile/magic/necropotence - name = "bolt of necropotence" - icon_state = "necropotence" - -/obj/projectile/magic/necropotence/on_hit(target) - . = ..() - if(isliving(target)) - var/mob/living/L = target - if(L.anti_magic_check() || !L.mind || !L.mind.hasSoul) - L.visible_message("[src] vanishes on contact with [target]!") - return BULLET_ACT_BLOCK - to_chat(L, "Your body feels drained and there is a burning pain in your chest.") - L.maxHealth -= 20 - L.health = min(L.health, L.maxHealth) - if(L.maxHealth <= 0) - to_chat(L, "Your weakened soul is completely consumed by the [src]!") - L.mind.hasSoul = FALSE - for(var/obj/effect/proc_holder/spell/spell in L.mind.spell_list) - spell.charge_counter = spell.charge_max - spell.recharging = FALSE - spell.update_appearance() - -/obj/projectile/magic/fortify - name = "bolt of light" - icon_state = "spark" - -/obj/projectile/magic/fortify/on_hit(target) - . = ..() - if(isliving(target)) - var/mob/living/L = target - if(L.anti_magic_check() || !L.mind || !L.mind.hasSoul) - L.visible_message("[src] vanishes on contact with [target]!") - return BULLET_ACT_BLOCK - to_chat(L, "You feel your body flood with magical strength! Your flesh feels cleansed, and somehow... tougher.") - L.maxHealth += 20 - L.heal_overall_damage(20, 20) - L.apply_damage(-200, CLONE)//cleanses cellular damage - if(L.mind.hasSoul == FALSE)//restores consumed souls - to_chat(L, "You feel a warm light in your chest... the [src] has restored something you'd long forgotten.") - L.mind.hasSoul = TRUE - if(L.hellbound == 1) - L.hellbound = 0//devil economy in shambles - for(var/obj/effect/proc_holder/spell/spell in L.mind.spell_list) - spell.charge_counter = spell.charge_max - spell.recharging = FALSE - spell.update_appearance() - -/obj/projectile/magic/wipe - name = "bolt of possession" - icon_state = "wipe" - -/obj/projectile/magic/wipe/on_hit(target) - . = ..() - if(iscarbon(target)) - var/mob/living/carbon/M = target - if(M.anti_magic_check()) - M.visible_message("[src] vanishes on contact with [target]!") - return BULLET_ACT_BLOCK - for(var/x in M.get_traumas())//checks to see if the victim is already going through possession - if(istype(x, /datum/brain_trauma/special/imaginary_friend/trapped_owner)) - M.visible_message("[src] vanishes on contact with [target]!") - return BULLET_ACT_BLOCK - to_chat(M, "Your mind has been opened to possession!") - possession_test(M) - return BULLET_ACT_HIT - -/obj/projectile/magic/wipe/proc/possession_test(mob/living/carbon/M) - var/datum/brain_trauma/special/imaginary_friend/trapped_owner/trauma = M.gain_trauma(/datum/brain_trauma/special/imaginary_friend/trapped_owner) - var/poll_message = "Do you want to play as [M.real_name]?" - if(M.mind && M.mind.assigned_role) - poll_message = "[poll_message] Job:[M.mind.assigned_role]." - if(M.mind && M.mind.special_role) - poll_message = "[poll_message] Status:[M.mind.special_role]." - else if(M.mind) - var/datum/antagonist/A = M.mind.has_antag_datum(/datum/antagonist/) - if(A) - poll_message = "[poll_message] Status:[A.name]." - var/list/mob/dead/observer/candidates = pollCandidatesForMob(poll_message, ROLE_PAI, null, FALSE, 100, M) - if(M.stat == DEAD)//boo. - return - if(LAZYLEN(candidates)) - var/mob/dead/observer/C = pick(candidates) - to_chat(M, "You have been noticed by a ghost and it has possessed you!") - var/oldkey = M.key - M.ghostize(0) - M.key = C.key - trauma.friend.key = oldkey - trauma.friend.reset_perspective(null) - trauma.friend.Show() - trauma.friend_initialized = TRUE - else - to_chat(M, "Your mind has managed to go unnoticed in the spirit world.") - qdel(trauma) - -/obj/projectile/magic/aoe - name = "Area Bolt" - desc = "What the fuck does this do?!" - damage = 0 - var/proxdet = TRUE - -/obj/projectile/magic/aoe/Range() - if(proxdet) - for(var/mob/living/L in range(1, get_turf(src))) - if(L.stat != DEAD && L != firer && !L.anti_magic_check()) - return Bump(L) - ..() - - -/obj/projectile/magic/aoe/lightning - name = "lightning bolt" - icon_state = "tesla_projectile" //Better sprites are REALLY needed and appreciated!~ - damage = 15 - damage_type = BURN - nodamage = FALSE - speed = 0.3 - flag = "magic" - - var/zap_power = 20000 - var/zap_range = 15 - var/zap_flags = ZAP_MOB_DAMAGE | ZAP_MOB_STUN | ZAP_OBJ_DAMAGE - var/chain - var/mob/living/caster - -/obj/projectile/magic/aoe/lightning/fire(setAngle) - if(caster) - chain = caster.Beam(src, icon_state = "lightning[rand(1, 12)]", time = INFINITY, maxdistance = INFINITY) - ..() - -/obj/projectile/magic/aoe/lightning/on_hit(target) - . = ..() - if(ismob(target)) - var/mob/M = target - if(M.anti_magic_check()) - visible_message("[src] fizzles on contact with [target]!") - qdel(src) - return BULLET_ACT_BLOCK - tesla_zap(src, zap_range, zap_power, zap_flags) - qdel(src) - -/obj/projectile/magic/aoe/lightning/Destroy() - qdel(chain) - . = ..() - -/obj/projectile/magic/aoe/fireball - name = "bolt of fireball" - icon_state = "fireball" - damage = 10 - damage_type = BRUTE - nodamage = FALSE - - //explosion values - var/exp_heavy = 0 - var/exp_light = 2 - var/exp_flash = 3 - var/exp_fire = 2 - -/obj/projectile/magic/aoe/fireball/on_hit(target) - . = ..() - if(ismob(target)) - var/mob/living/M = target - if(M.anti_magic_check()) - visible_message("[src] vanishes into smoke on contact with [target]!") - return BULLET_ACT_BLOCK - M.take_overall_damage(0,10) //between this 10 burn, the 10 brute, the explosion brute, and the onfire burn, your at about 65 damage if you stop drop and roll immediately - var/turf/T = get_turf(target) - explosion(T, -1, exp_heavy, exp_light, exp_flash, 0, flame_range = exp_fire) - -/obj/projectile/magic/aoe/fireball/infernal - name = "infernal fireball" - exp_heavy = -1 - exp_light = -1 - exp_flash = 4 - exp_fire= 5 - -/obj/projectile/magic/aoe/fireball/infernal/on_hit(target) - . = ..() - if(ismob(target)) - var/mob/living/M = target - if(M.anti_magic_check()) - return BULLET_ACT_BLOCK - var/turf/T = get_turf(target) - for(var/i=0, i<50, i+=10) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(explosion), T, -1, exp_heavy, exp_light, exp_flash, FALSE, FALSE, exp_fire), i) - -//still magic related, but a different path - -/obj/projectile/temp/chill - name = "bolt of chills" - icon_state = "ice_2" - damage = 0 - damage_type = BURN - nodamage = FALSE - armour_penetration = 100 - temperature = -200 // Cools you down greatly per hit - flag = "magic" - -/obj/projectile/magic/nothing - name = "bolt of nothing" diff --git a/code/modules/projectiles/projectile/magic/spellcard.dm b/code/modules/projectiles/projectile/magic/spellcard.dm deleted file mode 100644 index 464586d2f8a4..000000000000 --- a/code/modules/projectiles/projectile/magic/spellcard.dm +++ /dev/null @@ -1,6 +0,0 @@ -/obj/projectile/spellcard - name = "enchanted card" - desc = "A piece of paper enchanted to give it extreme durability and stiffness, along with a very hot burn to anyone unfortunate enough to get hit by a charged one." - icon_state = "spellcard" - damage_type = BURN - damage = 2 diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index f62a3a32035d..86f4e05226e4 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -389,7 +389,7 @@ for(var/addiction in cached_addictions) var/datum/reagent/A = addiction if(istype(R, A)) - A.addiction_stage = -15 // you're satisfied for a good while. + A.addiction_stage = -30 // you're satisfied for a good while. need_mob_update += R.on_mob_life(C) if(can_overdose) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 2c0ecef181a1..09812ef20cf3 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -327,12 +327,6 @@ color = "#FFFFFF" // rgb: 255,255,255 taste_description = "salt" -/datum/reagent/consumable/sodiumchloride/expose_mob(mob/living/M, method=TOUCH, reac_volume) - if(!istype(M)) - return - if(M.has_bane(BANE_SALT)) - M.mind.disrupt_spells(-200) - /datum/reagent/consumable/sodiumchloride/expose_turf(turf/T, reac_volume) //Creates an umbra-blocking salt pile if(!istype(T)) return diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index d727cbfd0fa6..02d8850f8776 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -795,12 +795,6 @@ C.blood_volume += 0.5 ..() -/datum/reagent/iron/expose_mob(mob/living/M, method=TOUCH, reac_volume) - if(M.has_bane(BANE_IRON)) //If the target is weak to cold iron, then poison them. - if(holder && holder.chem_temp < 100) // COLD iron. - M.reagents.add_reagent(/datum/reagent/toxin, reac_volume) - ..() - /datum/reagent/gold name = "Gold" description = "Gold is a dense, soft, shiny metal and the most malleable and ductile metal known." @@ -817,11 +811,6 @@ taste_description = "expensive yet reasonable metal" material = /datum/material/silver -/datum/reagent/silver/expose_mob(mob/living/M, method=TOUCH, reac_volume) - if(M.has_bane(BANE_SILVER)) - M.reagents.add_reagent(/datum/reagent/toxin, reac_volume) - ..() - /datum/reagent/uranium name ="Uranium" description = "A jade-green metallic chemical element in the actinide series, weakly radioactive." diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 91927581095c..e03c84dd7840 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -255,11 +255,13 @@ name = "Mindbreaker Toxin" description = "A powerful hallucinogen. Not a thing to be messed with. For some mental patients. it counteracts their symptoms and anchors them to reality." color = "#B31008" // rgb: 139, 166, 233 + metabolization_rate = 0.1 * REAGENTS_METABOLISM toxpwr = 0 taste_description = "sourness" /datum/reagent/toxin/mindbreaker/on_mob_life(mob/living/carbon/M) - M.hallucination += 5 + if(!M.has_quirk(/datum/quirk/insanity)) + M.hallucination += 5 return ..() /datum/reagent/toxin/plantbgone diff --git a/code/modules/reagents/chemistry/reagents/trickwine_reagents.dm b/code/modules/reagents/chemistry/reagents/trickwine_reagents.dm index df76f85b1f64..88f1871e6a28 100644 --- a/code/modules/reagents/chemistry/reagents/trickwine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/trickwine_reagents.dm @@ -180,15 +180,13 @@ /datum/reagent/consumable/ethanol/trickwine/prism_wine/on_mob_metabolize(mob/living/carbon/human/M) ..() ADD_TRAIT(M, TRAIT_REFLECTIVE, "trickwine") - if(M.physiology.burn_mod <= initial(M.physiology.burn_mod)) - M.physiology.burn_mod *= 0.5 + M.physiology.burn_mod *= 0.5 M.add_filter("prism-wine", 2, list("type"="outline", "color"="#8FD7DF", "size"=1)) M.visible_message("[M] seems to shimmer with power!") /datum/reagent/consumable/ethanol/trickwine/prism_wine/on_mob_end_metabolize(mob/living/carbon/human/M) REMOVE_TRAIT(M, TRAIT_REFLECTIVE, "trickwine") - if(M.physiology.burn_mod > initial(M.physiology.burn_mod)) - M.physiology.burn_mod *= 2 + M.physiology.burn_mod *= 2 M.remove_filter("prism-wine") M.visible_message("[M] has returned to normal!") ..() diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index 10cd8ffc72eb..e7494191d1df 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -56,7 +56,7 @@ /datum/chemical_reaction/adamantinesolidification/on_reaction(datum/reagents/holder, created_volume) var/location = get_turf(holder.my_atom) for(var/i = 1, i <= created_volume, i++) - new /obj/item/stack/sheet/mineral/adamantine(location) + new /obj/item/stack/sheet/mineral/hidden/hellstone(location) /datum/chemical_reaction/silversolidification required_reagents = list(/datum/reagent/silver = 20, /datum/reagent/consumable/frostoil = 5, /datum/reagent/carbon = 10) diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index 97290d54213f..d3bf1e211290 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -425,7 +425,7 @@ required_other = TRUE /datum/chemical_reaction/slime/adamantine/on_reaction(datum/reagents/holder) - new /obj/item/stack/sheet/mineral/adamantine(get_turf(holder.my_atom)) + new /obj/item/stack/sheet/mineral/hidden/hellstone(get_turf(holder.my_atom)) ..() //Bluespace diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm index 5916fee4b44a..df7949c9c654 100644 --- a/code/modules/reagents/reagent_containers/bottle.dm +++ b/code/modules/reagents/reagent_containers/bottle.dm @@ -275,13 +275,6 @@ desc = "A small bottle containing Bio Virus Antidote Kit." list_reagents = list(/datum/reagent/vaccine/fungal_tb = 30) -/obj/item/reagent_containers/glass/bottle/necropolis_seed - name = "bowl of blood" - desc = "A clay bowl containing a fledgling spire, preserved in blood. When consumed, allows the user to transform into an avatar of the Necropolis. A robust virologist may be able to unlock its full potential..." - icon = 'icons/obj/chemical/mortar.dmi' - icon_state = "mortar_bone" - spawned_disease = /datum/disease/advance/necropolis - //Oldstation.dmm chemical storage bottles /obj/item/reagent_containers/glass/bottle/hydrogen @@ -440,39 +433,3 @@ /obj/item/reagent_containers/glass/bottle/morphine/sleeper cap_on = FALSE - -//types of syrups - -/obj/item/reagent_containers/food/drinks/bottle/syrup_bottle/caramel - name = "bottle of caramel syrup" - desc = "A pump bottle containing caramalized sugar, also known as caramel. Do not lick." - list_reagents = list(/datum/reagent/consumable/caramel = 50) - -/obj/item/reagent_containers/food/drinks/bottle/syrup_bottle/liqueur - name = "bottle of coffee liqueur syrup" - desc = "A pump bottle containing mexican coffee-flavoured liqueur syrup. In production since 1936, HONK." - list_reagents = list(/datum/reagent/consumable/ethanol/kahlua = 50) - -//Coffeepots: for reference, a standard cup is 30u, to allow 20u for sugar/sweetener/milk/creamer -/obj/item/reagent_containers/food/drinks/bottle/coffeepot - icon = 'icons/obj/food/containers.dmi' - name = "coffeepot" - desc = "A large pot for dispensing that ambrosia of corporate life known to mortals only as coffee. Contains 4 standard cups." - volume = 120 - icon_state = "coffeepot" - fill_icon_state = "coffeepot" - fill_icon_thresholds = list(0, 1, 30, 60, 100) - -/obj/item/reagent_containers/glass/coffee_cup - name = "coffee cup" - desc = "A heat-formed plastic coffee cup. Can theoretically be used for other hot drinks, if you're feeling adventurous." - icon = 'icons/obj/machines/coffeemaker.dmi' - icon_state = "coffee_cup_e" - base_icon_state = "coffee_cup" - possible_transfer_amounts = list(10) - volume = 30 - spillable = TRUE - -/obj/item/reagent_containers/glass/coffee_cup/update_icon_state() - icon_state = reagents.total_volume ? base_icon_state : "[base_icon_state]_e" - return ..() diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 58e46dcb1048..b0c949d122f9 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -40,7 +40,7 @@ if(M != user) M.visible_message("[user] attempts to feed [M] something from [src].", \ "[user] attempts to feed you something from [src].") - if(!do_mob(user, M)) + if(!do_after(user, target = M)) return if(!reagents || !reagents.total_volume) return // The drink might be empty after the delay, such as by spam-feeding diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 7efe82893918..11cbd03c9787 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -490,7 +490,7 @@ if(L != user) L.visible_message("[user] is trying to inject [L] with [src]!", \ "[user] is trying to inject [L] with [src]!") - if(!do_mob(user, L, inject_wait)) + if(!do_after(user, inject_wait, L)) return if(!penetrates && !L.can_inject(user, 1)) return @@ -501,7 +501,7 @@ L.visible_message("[user] uses the [src] on [L]!", \ "[user] uses the [src] on [L]!") else - if(!do_mob(user, L, inject_self)) + if(!do_after(user, inject_self, L)) return if(!penetrates && !L.can_inject(user, 1)) return @@ -526,7 +526,7 @@ if(L != user) L.visible_message("[user] is trying to spray [L] with [src]!", \ "[user] is trying to spray [L] with [src]!") - if(!do_mob(user, L, spray_wait)) + if(!do_after(user, spray_wait, L)) return if(!penetrates && !L.can_inject(user, 1)) return @@ -537,7 +537,7 @@ L.visible_message("[user] uses the [src] on [L]!", \ "[user] uses the [src] on [L]!") else - if(!do_mob(user, L, spray_self)) + if(!do_after(user, spray_self, L)) return if(!penetrates && !L.can_inject(user, 1)) return diff --git a/code/modules/reagents/reagent_containers/medigel.dm b/code/modules/reagents/reagent_containers/medigel.dm index 193d588bcbb5..7e85c0c6d1ca 100644 --- a/code/modules/reagents/reagent_containers/medigel.dm +++ b/code/modules/reagents/reagent_containers/medigel.dm @@ -48,7 +48,7 @@ if(M == user) M.visible_message("[user] attempts to [apply_method] [src] on [user.p_them()]self.") if(self_delay) - if(!do_mob(user, M, self_delay)) + if(!do_after(user, self_delay, M)) return if(!reagents || !reagents.total_volume) return @@ -58,7 +58,7 @@ log_combat(user, M, "attempted to apply", src, reagents.log_list()) M.visible_message("[user] attempts to [apply_method] [src] on [M].", \ "[user] attempts to [apply_method] [src] on you.") - if(!do_mob(user, M)) + if(!do_after(user, target = M)) return if(!reagents || !reagents.total_volume) return diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 77b8bc8f318c..9cac6c3a52a2 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -34,14 +34,14 @@ if(M == user) M.visible_message("[user] attempts to [apply_method] [src].") if(self_delay) - if(!do_mob(user, M, self_delay)) + if(!do_after(user, self_delay, M)) return FALSE to_chat(M, "You [apply_method] [src].") else M.visible_message("[user] attempts to force [M] to [apply_method] [src].", \ "[user] attempts to force you to [apply_method] [src].") - if(!do_mob(user, M)) + if(!do_after(user, target = M)) return FALSE M.visible_message("[user] forces [M] to [apply_method] [src].", \ "[user] forces you to [apply_method] [src].") diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index f0901e416b25..5d11dcb720ee 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -86,7 +86,7 @@ target.visible_message("[user] is trying to take a blood sample from [target]!", \ "[user] is trying to take a blood sample from you!") busy = TRUE - if(!do_mob(user, target, extra_checks=CALLBACK(L, TYPE_PROC_REF(/mob/living, can_inject), user, TRUE))) + if(!do_after(user, target = target, extra_checks=CALLBACK(L, TYPE_PROC_REF(/mob/living, can_inject), user, TRUE))) busy = FALSE return if(reagents.total_volume >= reagents.maximum_volume) @@ -136,7 +136,7 @@ if(L != user) L.visible_message("[user] is trying to inject [L]!", \ "[user] is trying to inject you!") - if(!do_mob(user, L, extra_checks=CALLBACK(L, TYPE_PROC_REF(/mob/living, can_inject), user, TRUE))) + if(!do_after(user, target = L, extra_checks=CALLBACK(L, TYPE_PROC_REF(/mob/living, can_inject), user, TRUE))) return if(!reagents.total_volume) return diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index 9f2861218418..111428528242 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -131,7 +131,7 @@ user.visible_message("[user] starts climbing into [src].", "You start climbing into [src]...") else target.visible_message("[user] starts putting [target] into [src].", "[user] starts putting you into [src]!") - if(do_mob(user, target, 20)) + if(do_after(user, 2 SECONDS, target)) if (!loc) return target.forceMove(src) diff --git a/code/modules/religion/rites.dm b/code/modules/religion/rites.dm index 1c1caa5de1d6..67b337400315 100644 --- a/code/modules/religion/rites.dm +++ b/code/modules/religion/rites.dm @@ -18,7 +18,7 @@ return FALSE to_chat(user, "You begin to perform the rite of [name]...") if(!ritual_invocations) - if(do_after(user, target = user, delay = ritual_length)) + if(do_after(user, ritual_length)) return TRUE return FALSE var/first_invoke = TRUE diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 9bdc513289e1..5e45c756c881 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -138,16 +138,15 @@ other types of metals and chemistry for reagents). blueprints[1] = new /datum/design/c10mm() -/obj/item/disk/design_disk/adv/disposable_gun +/obj/item/disk/design_disk/disposable_gun name = "design disk - disposable gun" desc = "A design disk containing designs for a cheap and disposable gun." illustration = "gun" max_blueprints = 2 -/obj/item/disk/design_disk/adv/disposable_gun/Initialize() +/obj/item/disk/design_disk/disposable_gun/Initialize() . = ..() blueprints[1] = new /datum/design/disposable_gun() - blueprints[2] = new /datum/design/pizza_disposable_gun() /obj/item/disk/design_disk/clip_mechs name = "design disk - CLIP mecha modifications" diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 8a0c572015db..e39d48e5cc77 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -1191,6 +1191,14 @@ build_path = /obj/item/assembly/control category = list("initial","Misc") +/datum/design/holofield_control + name = "Holofield Controller" + id = "holofield" + build_type = AUTOLATHE + materials = list(/datum/material/iron = 100, /datum/material/glass = 50) + build_path = /obj/item/assembly/control/shieldwallgen + category = list("initial","Misc") + /datum/design/trashbag name="Trash Bag" id="trashbag" diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index e12db8a59738..6955bf525d29 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -9,6 +9,13 @@ build_path = /obj/item/circuitboard/machine/smes category = list ("Engineering Machinery") +/datum/design/board/ssu + name = "Machine Design (Suit Storage Unit Board)" + desc = "The circuit board for a suit storage unit." + id = "ssu" + build_path = /obj/item/circuitboard/machine/suit_storage_unit + category = list ("Engineering Machinery") + /datum/design/board/circulator name = "Machine Design (Circulator Board)" desc = "The circuit board for a circulator." diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index dfd373dcd3d7..46dddeb0c586 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -445,7 +445,7 @@ id = "honk_torso" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/honker_torso - materials = list(/datum/material/iron=20000,/datum/material/glass = 10000,/datum/material/bananium=10000) + materials = list(/datum/material/iron=20000,/datum/material/glass = 10000,/datum/material/hellstone=10000) construction_time = 300 category = list("H.O.N.K") @@ -454,7 +454,7 @@ id = "honk_head" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/honker_head - materials = list(/datum/material/iron=10000,/datum/material/glass = 5000,/datum/material/bananium=5000) + materials = list(/datum/material/iron=10000,/datum/material/glass = 5000,/datum/material/hellstone=5000) construction_time = 200 category = list("H.O.N.K") @@ -463,7 +463,7 @@ id = "honk_left_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/honker_left_arm - materials = list(/datum/material/iron=15000,/datum/material/bananium=5000) + materials = list(/datum/material/iron=15000,/datum/material/hellstone=5000) construction_time = 200 category = list("H.O.N.K") @@ -472,7 +472,7 @@ id = "honk_right_arm" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/honker_right_arm - materials = list(/datum/material/iron=15000,/datum/material/bananium=5000) + materials = list(/datum/material/iron=15000,/datum/material/hellstone=5000) construction_time = 200 category = list("H.O.N.K") @@ -481,7 +481,7 @@ id = "honk_left_leg" build_type = MECHFAB build_path =/obj/item/mecha_parts/part/honker_left_leg - materials = list(/datum/material/iron=20000,/datum/material/bananium=5000) + materials = list(/datum/material/iron=20000,/datum/material/hellstone=5000) construction_time = 200 category = list("H.O.N.K") @@ -490,7 +490,7 @@ id = "honk_right_leg" build_type = MECHFAB build_path = /obj/item/mecha_parts/part/honker_right_leg - materials = list(/datum/material/iron=20000,/datum/material/bananium=5000) + materials = list(/datum/material/iron=20000,/datum/material/hellstone=5000) construction_time = 200 category = list("H.O.N.K") @@ -657,7 +657,7 @@ id = "mech_mousetrap_mortar" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar - materials = list(/datum/material/iron=20000,/datum/material/bananium=5000) + materials = list(/datum/material/iron=20000,/datum/material/hellstone=5000) construction_time = 300 category = list("Exosuit Equipment") @@ -666,7 +666,7 @@ id = "mech_banana_mortar" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar - materials = list(/datum/material/iron=20000,/datum/material/bananium=5000) + materials = list(/datum/material/iron=20000,/datum/material/hellstone=5000) construction_time = 300 category = list("Exosuit Equipment") @@ -675,7 +675,7 @@ id = "mech_honker" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/honker - materials = list(/datum/material/iron=20000,/datum/material/bananium=10000) + materials = list(/datum/material/iron=20000,/datum/material/hellstone=10000) construction_time = 500 category = list("Exosuit Equipment") @@ -684,7 +684,7 @@ id = "mech_punching_face" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/punching_glove - materials = list(/datum/material/iron=20000,/datum/material/bananium=7500) + materials = list(/datum/material/iron=20000,/datum/material/hellstone=7500) construction_time = 400 category = list("Exosuit Equipment") @@ -769,7 +769,7 @@ id = "borg_transform_clown" build_type = MECHFAB build_path = /obj/item/borg/upgrade/transform/clown - materials = list(/datum/material/iron = 15000, /datum/material/glass = 15000, /datum/material/bananium = 1000) + materials = list(/datum/material/iron = 15000, /datum/material/glass = 15000, /datum/material/hellstone = 1000) construction_time = 120 category = list("Cyborg Upgrade Modules") diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 343ff920df20..95a03b829608 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -476,7 +476,7 @@ desc = "Makes death amusing." id = "implant_trombone" build_type = PROTOLATHE - materials = list(/datum/material/glass = 500, /datum/material/bananium = 500) + materials = list(/datum/material/glass = 500, /datum/material/hellstone = 500) build_path = /obj/item/implantcase/sad_trombone category = list("Medical Designs") diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm index eeca189ef2dc..816cd4f9fdbf 100644 --- a/code/modules/research/designs/misc_designs.dm +++ b/code/modules/research/designs/misc_designs.dm @@ -130,7 +130,7 @@ desc = "Damn son, where'd you find this?" id = "air_horn" build_type = PROTOLATHE - materials = list(/datum/material/iron = 4000, /datum/material/bananium = 1000) + materials = list(/datum/material/iron = 4000, /datum/material/hellstone = 1000) build_path = /obj/item/bikehorn/airhorn category = list("Equipment") diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 5edbb4df1158..45d65ebf0753 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -650,14 +650,6 @@ build_path = /obj/item/gun/ballistic/automatic/pistol/disposable category = list("Imported") -/datum/design/pizza_disposable_gun - name = "Pizza Disposable Gun" - id = "disposable_pizza" - build_type = AUTOLATHE - materials = list(/datum/material/pizza = 4000) - build_path = /obj/item/gun/ballistic/automatic/pistol/disposable/pizza - category = list("Imported") - //SRM Ballistics /datum/design/doublebarrel name = "Double Barrel Shotgun" diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 9016d60515e7..ce473ad739cb 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -355,16 +355,6 @@ C.name = "Cup of Suspicious Liquid" C.desc = "It has a large hazard symbol printed on the side in fading ink." investigate_log("Experimentor has made a cup of [chosenchem] coffee.", INVESTIGATE_EXPERIMENTOR) - else if(prob(EFFECT_PROB_VERYLOW-badThingCoeff)) - var/turf/start = get_turf(src) - var/mob/M = locate(/mob/living) in view(src, 3) - var/turf/MT = get_turf(M) - if(MT) - visible_message("[src] dangerously overheats, launching a flaming fuel orb!") - investigate_log("Experimentor has launched a fireball at [M]!", INVESTIGATE_EXPERIMENTOR) - var/obj/projectile/magic/aoe/fireball/FB = new /obj/projectile/magic/aoe/fireball(start) - FB.preparePixelProjectile(MT, start) - FB.fire() else if(prob(EFFECT_PROB_LOW-badThingCoeff)) visible_message("[src] malfunctions, melting [exp_on] and releasing a burst of flame!") explosion(loc, -1, 0, 0, 0, 0, flame_range = 2) diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index af76ef1d00fa..eaa696c8d775 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -183,7 +183,7 @@ prereq_ids = list("base") design_ids = list("solarcontrol", "solarassembly", "recharger", "powermonitor", "rped", "pacman", "adv_capacitor", "adv_scanning", "emitter", "high_cell", "adv_matter_bin", "scanner_gate", "atmosalerts", "atmos_control", "recycler", "autolathe", "high_micro_laser", "nano_mani", "mesons", "welding_goggles", "thermomachine", "rad_collector", "tesla_coil", "grounding_rod", - "apc_control", "cell_charger", "power control", "airlock_board", "firelock_board", "aac_electronics", "airalarm_electronics", "firealarm_electronics", "cell_charger", "stack_console", "stack_machine", + "apc_control", "cell_charger", "ssu", "power control", "airlock_board", "firelock_board", "aac_electronics", "airalarm_electronics", "firealarm_electronics", "cell_charger", "stack_console", "stack_machine", "oxygen_tank", "plasma_tank", "emergency_oxygen", "emergency_oxygen_engi", "plasmaman_tank_belt", "pneumatic_seal", "shieldwallgen", "shieldwallgen_atmos") //WS edit, solar assemblies from lathe research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) export_price = 5000 diff --git a/code/modules/research/xenobiology/crossbreeding/_weapons.dm b/code/modules/research/xenobiology/crossbreeding/_weapons.dm index 29ea3fbd4298..ac663059d0c0 100644 --- a/code/modules/research/xenobiology/crossbreeding/_weapons.dm +++ b/code/modules/research/xenobiology/crossbreeding/_weapons.dm @@ -65,54 +65,3 @@ Slimecrossing Weapons /obj/item/shield/adamantineshield/ComponentInitialize() . = ..() AddComponent(/datum/component/two_handed, require_twohands=TRUE, force_wielded=15) - -//Bloodchiller - Chilling Green -/obj/item/gun/magic/bloodchill - name = "blood chiller" - desc = "A horrifying weapon made of your own bone and blood vessels. It shoots slowing globules of your own blood. Ech." - icon = 'icons/obj/slimecrossing.dmi' - icon_state = "bloodgun" - item_state = "bloodgun" - lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' - item_flags = ABSTRACT | DROPDEL - w_class = WEIGHT_CLASS_HUGE - slot_flags = NONE - force = 5 - max_charges = 1 //Recharging costs blood. - recharge_rate = 1 - ammo_type = /obj/item/ammo_casing/magic/bloodchill - fire_sound = 'sound/effects/attackblob.ogg' - -/obj/item/gun/magic/bloodchill/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT) - -/obj/item/gun/magic/bloodchill/process() - charge_tick++ - if(charge_tick < recharge_rate || charges >= max_charges) - return 0 - charge_tick = 0 - var/mob/living/M = loc - if(istype(M) && M.blood_volume >= 20) - charges++ - M.blood_volume -= 20 - if(charges == 1) - recharge_newshot() - return 1 - -/obj/item/ammo_casing/magic/bloodchill - projectile_type = /obj/projectile/magic/bloodchill - -/obj/projectile/magic/bloodchill - name = "blood ball" - icon_state = "pulse0_bl" - damage = 0 - damage_type = OXY - nodamage = TRUE - hitsound = 'sound/effects/splat.ogg' - -/obj/projectile/magic/bloodchill/on_hit(mob/living/target) - . = ..() - if(isliving(target)) - target.apply_status_effect(/datum/status_effect/bloodchill) diff --git a/code/modules/research/xenobiology/crossbreeding/charged.dm b/code/modules/research/xenobiology/crossbreeding/charged.dm index 501ff548e08f..25aa79302918 100644 --- a/code/modules/research/xenobiology/crossbreeding/charged.dm +++ b/code/modules/research/xenobiology/crossbreeding/charged.dm @@ -146,7 +146,7 @@ Charged extracts: effect_desc = "Creates bananium. Oh no." /obj/item/slimecross/charged/pyrite/do_effect(mob/user) - new /obj/item/stack/sheet/mineral/bananium(get_turf(user), 10) + new /obj/item/stack/sheet/mineral/hidden/hellstone(get_turf(user), 10) user.visible_message("[src] solidifies with a horrifying banana stench!") ..() diff --git a/code/modules/research/xenobiology/crossbreeding/chilling.dm b/code/modules/research/xenobiology/crossbreeding/chilling.dm index 89fa16cca7f5..9fe7857c073b 100644 --- a/code/modules/research/xenobiology/crossbreeding/chilling.dm +++ b/code/modules/research/xenobiology/crossbreeding/chilling.dm @@ -235,29 +235,6 @@ Chilling extracts: user.visible_message("[src] lets out a peaceful ring as it shatters, but nothing happens...") ..() -/obj/item/slimecross/chilling/green - colour = "green" - effect_desc = "Creates a bone gun in the hand it is used in, which uses blood as ammo." - -/obj/item/slimecross/chilling/green/do_effect(mob/user) - var/which_hand = "l_hand" - if(!(user.active_hand_index % 2)) - which_hand = "r_hand" - var/mob/living/L = user - if(!istype(user)) - return - var/obj/item/held = L.get_active_held_item() //This should be itself, but just in case... - L.dropItemToGround(held) - var/obj/item/gun/magic/bloodchill/gun = new(user) - if(!L.put_in_hands(gun)) - qdel(gun) - user.visible_message("[src] flash-freezes [user]'s arm, cracking the flesh horribly!") - else - user.visible_message("[src] chills and snaps off the front of the bone on [user]'s arm, leaving behind a strange, gun-like structure!") - user.emote("scream") - L.apply_damage(30,BURN,which_hand) - ..() - /obj/item/slimecross/chilling/pink colour = "pink" effect_desc = "Creates a slime corgi puppy." diff --git a/code/modules/research/xenobiology/crossbreeding/regenerative.dm b/code/modules/research/xenobiology/crossbreeding/regenerative.dm index 7cb7f8677408..75a1201d924a 100644 --- a/code/modules/research/xenobiology/crossbreeding/regenerative.dm +++ b/code/modules/research/xenobiology/crossbreeding/regenerative.dm @@ -41,12 +41,12 @@ Regenerative extracts: to_chat(user, "[src] will not work on the dead!") return if(H != user) - if(!do_mob(user, H, slime_delay)) // 1 second delay + if(!do_after(user, slime_delay, H)) // 1 second delay return FALSE user.visible_message("[user] crushes the [src] over [H], the milky goo quickly regenerating some of [H.p_their()] injuries!", "You squeeze the [src], and it bursts over [H], the milky goo regenerating some of [H.p_their()] injuries.") else - if(!do_mob(user, H, (slime_delay * 1.5))) // 1.5 second delay + if(!do_after(user, (slime_delay * 1.5), H)) // 1.5 second delay return FALSE user.visible_message("[user] crushes the [src] over [user.p_them()]self, the milky goo quickly regenerating some of [user.p_their()] injuries!", "You squeeze the [src], and it bursts in your hand, splashing you with milky goo which quickly regenerates some of your injuries!") diff --git a/code/modules/ruins/icemoonruin_code/hotsprings.dm b/code/modules/ruins/icemoonruin_code/hotsprings.dm deleted file mode 100644 index dd4d39e91a20..000000000000 --- a/code/modules/ruins/icemoonruin_code/hotsprings.dm +++ /dev/null @@ -1,56 +0,0 @@ -GLOBAL_LIST_EMPTY(cursed_minds) - -/** - * Turns whoever enters into a mob or random person - * - * If mob is chosen, turns the person into a random animal type - * If appearance is chosen, turns the person into a random human with a random species - * This changes name, and changes their DNA as well - * Random species is same as wizard swap event so people don't get killed ex: plasmamen - * Once the spring is used, it cannot be used by the same mind ever again - * After usage, teleports the user back to a random safe turf (so mobs are not killed by ice moon atmosphere) - * - */ - -/turf/open/water/cursed_spring - baseturfs = /turf/open/water/cursed_spring - planetary_atmos = TRUE - initial_gas_mix = ICEMOON_DEFAULT_ATMOS - -/turf/open/water/cursed_spring/Entered(atom/movable/thing, atom/oldLoc) - . = ..() - if(!isliving(thing)) - return - var/mob/living/L = thing - if(!L.client) - return - if(GLOB.cursed_minds[L.mind]) - return - GLOB.cursed_minds[L.mind] = TRUE - RegisterSignal(L.mind, COMSIG_PARENT_QDELETING, PROC_REF(remove_from_cursed)) - var/random_choice = pick("Mob", "Appearance") - switch(random_choice) - if("Mob") - L = wabbajack(L, "animal") - if("Appearance") - var/mob/living/carbon/human/H = wabbajack(L, "humanoid") - randomize_human(H) - var/list/all_species = list() - for(var/stype in subtypesof(/datum/species)) - var/datum/species/S = stype - if(initial(S.changesource_flags) & RACE_SWAP) - all_species += stype - var/random_race = pick(all_species) - H.set_species(random_race) - H.dna.unique_enzymes = H.dna.generate_unique_enzymes() - L = H - var/turf/T = find_safe_turf() - L.forceMove(T) - to_chat(L, "You blink and find yourself in [get_area_name(T)].") - -/** - * Deletes minds from the cursed minds list after their deletion - * - */ -/turf/open/water/cursed_spring/proc/remove_from_cursed(datum/mind/M) - GLOB.cursed_minds -= M diff --git a/code/modules/ruins/lavaland_ruin_code.dm b/code/modules/ruins/lavaland_ruin_code.dm index 1115224a6733..7f050c3ac5e5 100644 --- a/code/modules/ruins/lavaland_ruin_code.dm +++ b/code/modules/ruins/lavaland_ruin_code.dm @@ -75,7 +75,7 @@ /obj/effect/mob_spawn/human/lavaland_syndicate/comms/space/Initialize() . = ..() if(prob(90)) //only has a 10% chance of existing, otherwise it'll just be a NPC syndie. - new /mob/living/simple_animal/hostile/syndicate/ranged(get_turf(src)) + new /mob/living/simple_animal/hostile/human/syndicate/ranged(get_turf(src)) return INITIALIZE_HINT_QDEL /datum/outfit/lavaland_syndicate/comms diff --git a/code/modules/ruins/spaceruin_code/forgottenship.dm b/code/modules/ruins/spaceruin_code/forgottenship.dm index def148f22239..57b9f64bf60f 100644 --- a/code/modules/ruins/spaceruin_code/forgottenship.dm +++ b/code/modules/ruins/spaceruin_code/forgottenship.dm @@ -81,45 +81,3 @@ GLOBAL_VAR_INIT(fscpassword, generate_password()) area_flags = NOTELEPORT | UNIQUE_AREA //Cybersun hardsuit - -//Special NT NPCs - -/mob/living/simple_animal/hostile/nanotrasen/ranged/assault - name = "Nanotrasen Assault Officer" - desc = "A Nanotrasen Assault Officer. Prepare to die, if you've been found near Syndicate property." - icon_state = "nanotrasenrangedassault" - icon_living = "nanotrasenrangedassault" - icon_dead = null - icon_gib = "syndicate_gib" - ranged = TRUE - rapid = 4 - rapid_fire_delay = 1 - rapid_melee = 1 - retreat_distance = 2 - minimum_distance = 4 - casingtype = /obj/item/ammo_casing/c46x30mm - projectilesound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg' - loot = list(/obj/effect/mob_spawn/human/corpse/nanotrasenassaultsoldier) - -/mob/living/simple_animal/hostile/nanotrasen/elite - name = "Nanotrasen Elite Assault Officer" - desc = "Pray for your life, syndicate. Run while you can." - icon = 'icons/mob/simple_human.dmi' - icon_state = "nanotrasen_ert" - icon_living = "nanotrasen_ert" - maxHealth = 150 - health = 150 - melee_damage_lower = 13 - melee_damage_upper = 18 - ranged = TRUE - rapid = 3 - rapid_fire_delay = 5 - rapid_melee = 3 - retreat_distance = 0 - minimum_distance = 1 - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 0 - projectiletype = /obj/projectile/beam/laser - projectilesound = 'sound/weapons/laser.ogg' - loot = list(/obj/effect/gibspawner/human) - faction = list(ROLE_DEATHSQUAD) diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index 2603d9ea3e24..1ddb26efba88 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -1,134 +1,5 @@ // Special objects for shuttle templates go here if nowhere else -// Wabbajack statue, a sleeping frog statue that shoots bolts of change if -// living carbons are put on its altar/tables - -/obj/machinery/power/emitter/energycannon/magical - name = "wabbajack statue" - desc = "Who am I? What is my purpose in life? What do I mean by who am I?" - projectile_type = /obj/projectile/magic/change - icon = 'icons/obj/machines/magic_emitter.dmi' - icon_state = "wabbajack_statue" - icon_state_on = "wabbajack_statue_on" - base_icon_state = "wabbajack_statue" - active = FALSE - allow_switch_interact = FALSE - var/list/active_tables = list() - var/tables_required = 2 - -/obj/machinery/power/emitter/energycannon/magical/Initialize() - . = ..() - if(prob(50)) - desc = "Oh no, not again." - update_appearance() - -/obj/machinery/power/emitter/energycannon/magical/update_icon_state() - . = ..() - icon_state = active ? icon_state_on : initial(icon_state) - -/obj/machinery/power/emitter/energycannon/magical/process() - . = ..() - if(active_tables.len >= tables_required) - if(!active) - visible_message("\ - [src] opens its eyes.") - active = TRUE - else - if(active) - visible_message("\ - [src] closes its eyes.") - active = FALSE - update_appearance() - -/obj/machinery/power/emitter/energycannon/magical/attackby(obj/item/W, mob/user, params) - return - -/obj/machinery/power/emitter/energycannon/magical/ex_act(severity) - return - -/obj/machinery/power/emitter/energycannon/magical/emag_act(mob/user) - return - -/obj/structure/table/abductor/wabbajack - name = "wabbajack altar" - desc = "Whether you're sleeping or waking, it's going to be quite chaotic." - max_integrity = 1000 - verb_say = "chants" - var/obj/machinery/power/emitter/energycannon/magical/our_statue - var/list/mob/living/sleepers = list() - var/never_spoken = TRUE - flags_1 = NODECONSTRUCT_1 - -/obj/structure/table/abductor/wabbajack/Initialize(mapload) - . = ..() - START_PROCESSING(SSobj, src) - -/obj/structure/table/abductor/wabbajack/Destroy() - STOP_PROCESSING(SSobj, src) - . = ..() - -/obj/structure/table/abductor/wabbajack/process() - var/area = orange(4, src) - if(!our_statue) - for(var/obj/machinery/power/emitter/energycannon/magical/M in area) - our_statue = M - break - - if(!our_statue) - name = "inert [initial(name)]" - return - else - name = initial(name) - - var/turf/T = get_turf(src) - var/list/found = list() - for(var/mob/living/carbon/C in T) - if(C.stat != DEAD) - found += C - - // New sleepers - for(var/i in found - sleepers) - var/mob/living/L = i - L.add_atom_colour("#800080", TEMPORARY_COLOUR_PRIORITY) - L.visible_message("A strange purple glow wraps itself around [L] as [L.p_they()] suddenly fall[L.p_s()] unconscious.", - "[desc]") - // Don't let them sit suround unconscious forever - addtimer(CALLBACK(src, PROC_REF(sleeper_dreams), L), 100) - - // Existing sleepers - for(var/i in found) - var/mob/living/L = i - L.SetSleeping(200) - - // Missing sleepers - for(var/i in sleepers - found) - var/mob/living/L = i - L.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, "#800080") - L.visible_message("The glow from [L] fades \ - away.") - L.grab_ghost() - - sleepers = found - - if(sleepers.len) - our_statue.active_tables |= src - if(never_spoken || prob(5)) - say(desc) - never_spoken = FALSE - else - our_statue.active_tables -= src - -/obj/structure/table/abductor/wabbajack/proc/sleeper_dreams(mob/living/sleeper) - if(sleeper in sleepers) - to_chat(sleeper, "While you slumber, you have the strangest dream, like you can see yourself from the outside.") - sleeper.ghostize(TRUE) - -/obj/structure/table/abductor/wabbajack/left - desc = "You sleep so it may wake." - -/obj/structure/table/abductor/wabbajack/right - desc = "It wakes so you may sleep." - // Bar staff, GODMODE mobs(as long as they stay in the shuttle) that just want to make sure people have drinks // and a good time. diff --git a/code/modules/spells/spell_types/aimed.dm b/code/modules/spells/spell_types/aimed.dm index 9e30c708774d..46737c5b5a99 100644 --- a/code/modules/spells/spell_types/aimed.dm +++ b/code/modules/spells/spell_types/aimed.dm @@ -2,7 +2,7 @@ /obj/effect/proc_holder/spell/aimed name = "aimed projectile spell" base_icon_state = "projectile" - var/projectile_type = /obj/projectile/magic/teleport + var/projectile_type = /obj/projectile var/deactive_msg = "You discharge your projectile..." var/active_msg = "You charge your projectile!" var/active_icon_state = "projectile" @@ -106,7 +106,7 @@ projectile_var_overrides = list("zap_range" = 15, "zap_power" = 20000, "zap_flags" = ZAP_MOB_DAMAGE) active_msg = "You energize your hands with arcane lightning!" deactive_msg = "You let the energy flow out of your hands back into yourself..." - projectile_type = /obj/projectile/magic/aoe/lightning + projectile_type = /obj/projectile/magic /obj/effect/proc_holder/spell/aimed/fireball name = "Fireball" @@ -118,7 +118,7 @@ invocation_type = INVOCATION_SHOUT range = 20 cooldown_min = 20 //10 deciseconds reduction per rank - projectile_type = /obj/projectile/magic/aoe/fireball + projectile_type = /obj/projectile/magic base_icon_state = "fireball" action_icon_state = "fireball0" sound = 'sound/magic/fireball.ogg' @@ -130,60 +130,3 @@ var/range = 6 + 2*spell_level projectile_var_overrides = list("range" = range) return ..() - -/obj/effect/proc_holder/spell/aimed/spell_cards - name = "Spell Cards" - desc = "Blazing hot rapid-fire homing cards. Send your foes to the shadow realm with their mystical power!" - school = "evocation" - charge_max = 50 - clothes_req = FALSE - invocation = "Sigi'lu M'Fan 'Tasia" - invocation_type = INVOCATION_SHOUT - range = 40 - cooldown_min = 10 - projectile_amount = 5 - projectiles_per_fire = 7 - projectile_type = /obj/projectile/spellcard - base_icon_state = "spellcard" - action_icon_state = "spellcard0" - var/datum/weakref/current_target_weakref - var/projectile_turnrate = 10 - var/projectile_pixel_homing_spread = 32 - var/projectile_initial_spread_amount = 30 - var/projectile_location_spread_amount = 12 - var/datum/component/lockon_aiming/lockon_component - ranged_clickcd_override = TRUE - -/obj/effect/proc_holder/spell/aimed/spell_cards/on_activation(mob/M) - QDEL_NULL(lockon_component) - lockon_component = M.AddComponent(/datum/component/lockon_aiming, 5, typecacheof(list(/mob/living)), 1, null, CALLBACK(src, PROC_REF(on_lockon_component))) - -/obj/effect/proc_holder/spell/aimed/spell_cards/proc/on_lockon_component(list/locked_weakrefs) - if(!length(locked_weakrefs)) - current_target_weakref = null - return - current_target_weakref = locked_weakrefs[1] - var/atom/A = current_target_weakref.resolve() - if(A) - var/mob/M = lockon_component.parent - M.face_atom(A) - -/obj/effect/proc_holder/spell/aimed/spell_cards/on_deactivation(mob/M) - QDEL_NULL(lockon_component) - -/obj/effect/proc_holder/spell/aimed/spell_cards/ready_projectile(obj/projectile/P, atom/target, mob/user, iteration) - if(current_target_weakref) - var/atom/A = current_target_weakref.resolve() - if(A && get_dist(A, user) < 7) - P.homing_turn_speed = projectile_turnrate - P.homing_inaccuracy_min = projectile_pixel_homing_spread - P.homing_inaccuracy_max = projectile_pixel_homing_spread - P.set_homing_target(current_target_weakref.resolve()) - var/rand_spr = rand() - var/total_angle = projectile_initial_spread_amount * 2 - var/adjusted_angle = total_angle - ((projectile_initial_spread_amount / projectiles_per_fire) * 0.5) - var/one_fire_angle = adjusted_angle / projectiles_per_fire - var/current_angle = iteration * one_fire_angle * rand_spr - (projectile_initial_spread_amount / 2) - P.pixel_x = rand(-projectile_location_spread_amount, projectile_location_spread_amount) - P.pixel_y = rand(-projectile_location_spread_amount, projectile_location_spread_amount) - P.preparePixelProjectile(target, user, null, current_angle) diff --git a/code/modules/spells/spell_types/charge.dm b/code/modules/spells/spell_types/charge.dm index 57325e685f4d..225c36580e49 100644 --- a/code/modules/spells/spell_types/charge.dm +++ b/code/modules/spells/spell_types/charge.dm @@ -51,20 +51,6 @@ I.used = FALSE charged_item = I break - else if(istype(item, /obj/item/gun/magic)) - var/obj/item/gun/magic/I = item - if(prob(80) && !I.can_charge) - I.max_charges-- - if(I.max_charges <= 0) - I.max_charges = 0 - burnt_out = TRUE - I.charges = I.max_charges - if(istype(item, /obj/item/gun/magic/wand) && I.max_charges != 0) - var/obj/item/gun/magic/W = item - W.icon_state = initial(W.icon_state) - I.recharge_newshot() - charged_item = I - break else if(istype(item, /obj/item/stock_parts/cell)) var/obj/item/stock_parts/cell/C = item if(!C.self_recharge) diff --git a/code/modules/spells/spell_types/devil.dm b/code/modules/spells/spell_types/devil.dm index 6631d943a3aa..421b7f40f11c 100644 --- a/code/modules/spells/spell_types/devil.dm +++ b/code/modules/spells/spell_types/devil.dm @@ -84,7 +84,7 @@ invocation_type = INVOCATION_SHOUT range = 2 - projectile_type = /obj/projectile/magic/aoe/fireball/infernal + projectile_type = /obj/projectile/magic action_background_icon_state = "bg_demon" @@ -107,7 +107,7 @@ if(istype(user.loc, /obj/effect/dummy/phased_mob/slaughter/)) if(valid_location(user)) to_chat(user, "You are now phasing in.") - if(do_mob(user,user,150)) + if(do_after(user, 1.5 SECONDS, user)) if(valid_location(user)) user.infernalphasein() else @@ -121,7 +121,7 @@ user.notransform = TRUE user.fakefire() to_chat(src, "You begin to phase back into sinful flames.") - if(do_mob(user,user,150)) + if(do_after(user, 1.5 SECONDS, user)) user.infernalphaseout() else to_chat(user, "You must remain still while exiting.") diff --git a/code/modules/spells/spell_types/infinite_guns.dm b/code/modules/spells/spell_types/infinite_guns.dm deleted file mode 100644 index 3f400a8fb4bc..000000000000 --- a/code/modules/spells/spell_types/infinite_guns.dm +++ /dev/null @@ -1,27 +0,0 @@ -/obj/effect/proc_holder/spell/targeted/infinite_guns - name = "Lesser Summon Guns" - desc = "Why reload when you have infinite guns? Summons an unending stream of bolt action rifles that deal little damage, but will knock targets down. Requires both hands free to use. Learning this spell makes you unable to learn Arcane Barrage." - invocation_type = "none" - include_user = TRUE - range = -1 - - school = "conjuration" - charge_max = 750 - clothes_req = TRUE - cooldown_min = 10 //Gun wizard - action_icon_state = "bolt_action" - var/summon_path = /obj/item/gun/ballistic/rifle/illestren/enchanted - -/obj/effect/proc_holder/spell/targeted/infinite_guns/cast(list/targets, mob/user = usr) - for(var/mob/living/carbon/C in targets) - C.drop_all_held_items() - var/GUN = new summon_path - C.put_in_hands(GUN) - -/obj/effect/proc_holder/spell/targeted/infinite_guns/gun - -/obj/effect/proc_holder/spell/targeted/infinite_guns/arcane_barrage - name = "Arcane Barrage" - desc = "Fire a torrent of arcane energy at your foes with this (powerful) spell. Deals much more damage than Lesser Summon Guns, but won't knock targets down. Requires both hands free to use. Learning this spell makes you unable to learn Lesser Summon Gun." - action_icon_state = "arcane_barrage" - summon_path = /obj/item/gun/ballistic/rifle/illestren/enchanted/arcane_barrage diff --git a/code/modules/spells/spell_types/lichdom.dm b/code/modules/spells/spell_types/lichdom.dm index c8d1c4a7c027..720670e3fc21 100644 --- a/code/modules/spells/spell_types/lichdom.dm +++ b/code/modules/spells/spell_types/lichdom.dm @@ -49,7 +49,7 @@ playsound(user, 'sound/effects/pope_entry.ogg', 100) - if(!do_after(M, 50, needhand=FALSE, target=marked_item)) + if(!do_after(M, 50, target=marked_item, timed_action_flags = IGNORE_HELD_ITEM)) to_chat(M, "Your soul snaps back to your body as you stop ensouling [marked_item]!") return diff --git a/code/modules/spells/spell_types/lightning.dm b/code/modules/spells/spell_types/lightning.dm index 3231d22170e1..85f211511135 100644 --- a/code/modules/spells/spell_types/lightning.dm +++ b/code/modules/spells/spell_types/lightning.dm @@ -28,7 +28,7 @@ halo = halo || mutable_appearance('icons/effects/effects.dmi', "electricity", EFFECTS_LAYER) user.add_overlay(halo) playsound(get_turf(user), Snd, 50, FALSE) - if(do_mob(user,user,100,1)) + if(do_after(user, 10 SECONDS, user, timed_action_flags = (IGNORE_USER_LOC_CHANGE|IGNORE_TARGET_LOC_CHANGE|IGNORE_HELD_ITEM))) if(ready && cast_check(skipcharge=1)) choose_targets() else diff --git a/code/modules/spells/spell_types/rightandwrong.dm b/code/modules/spells/spell_types/rightandwrong.dm index e79ffb8a491e..ed6d9a9b957d 100644 --- a/code/modules/spells/spell_types/rightandwrong.dm +++ b/code/modules/spells/spell_types/rightandwrong.dm @@ -49,60 +49,8 @@ GLOBAL_LIST_INIT(summoned_guns, list( /obj/item/gun/energy/laser/scatter, /obj/item/gun/energy/gravity_gun)) -//if you add anything that isn't covered by the typepaths below, add it to summon_magic_objective_types -GLOBAL_LIST_INIT(summoned_magic, list( - /obj/item/book/granter/spell/fireball, - /obj/item/book/granter/spell/smoke, - /obj/item/book/granter/spell/blind, - /obj/item/book/granter/spell/mindswap, - /obj/item/book/granter/spell/forcewall, - /obj/item/book/granter/spell/knock, - /obj/item/book/granter/spell/barnyard, - /obj/item/book/granter/spell/charge, - /obj/item/book/granter/spell/summonitem, - /obj/item/gun/magic/wand/nothing, - /obj/item/gun/magic/wand/death, - /obj/item/gun/magic/wand/resurrection, - /obj/item/gun/magic/wand/polymorph, - /obj/item/gun/magic/wand/teleport, - /obj/item/gun/magic/wand/door, - /obj/item/gun/magic/wand/fireball, - /obj/item/gun/magic/staff/healing, - /obj/item/gun/magic/staff/door, - /obj/item/scrying, - /obj/item/voodoo, - /obj/item/warpwhistle, - /obj/item/clothing/suit/space/hardsuit/shielded/wizard, - /obj/item/immortality_talisman, - /obj/item/melee/ghost_sword)) - -GLOBAL_LIST_INIT(summoned_special_magic, list( - /obj/item/gun/magic/staff/change, - /obj/item/gun/magic/staff/animate, - /obj/item/storage/belt/wands/full, - /obj/item/antag_spawner/contract, - /obj/item/gun/magic/staff/chaos, - /obj/item/necromantic_stone, - /obj/item/blood_contract)) - -//everything above except for single use spellbooks, because they are counted separately (and are for basic bitches anyways) -GLOBAL_LIST_INIT(summoned_magic_objectives, list( - /obj/item/antag_spawner/contract, - /obj/item/blood_contract, - /obj/item/clothing/suit/space/hardsuit/shielded/wizard, - /obj/item/gun/magic, - /obj/item/immortality_talisman, - /obj/item/melee/ghost_sword, - /obj/item/necromantic_stone, - /obj/item/scrying, - /obj/item/spellbook, - /obj/item/storage/belt/wands/full, - /obj/item/voodoo, - /obj/item/warpwhistle)) - // If true, it's the probability of triggering "survivor" antag. GLOBAL_VAR_INIT(summon_guns_triggered, FALSE) -GLOBAL_VAR_INIT(summon_magic_triggered, FALSE) /proc/give_guns(mob/living/carbon/human/H) if(H.stat == DEAD || !(H.client)) @@ -125,54 +73,19 @@ GLOBAL_VAR_INIT(summon_magic_triggered, FALSE) to_chat(H, "\A [G] appears [in_hand ? "in your hand" : "at your feet"]!") -/proc/give_magic(mob/living/carbon/human/H) - if(H.stat == DEAD || !(H.client)) - return - if(H.mind) - if(iswizard(H) || H.mind.has_antag_datum(/datum/antagonist/survivalist/magic)) - return - - if(prob(GLOB.summon_magic_triggered) && !(H.mind.has_antag_datum(/datum/antagonist))) - H.mind.add_antag_datum(/datum/antagonist/survivalist/magic) - H.log_message("was made into a survivalist, and trusts no one!", LOG_ATTACK, color="red") - - var/magic_type = pick(GLOB.summoned_magic) - var/lucky = FALSE - if(prob(SPECIALIST_MAGIC_PROB)) - magic_type = pick(GLOB.summoned_special_magic) - lucky = TRUE - - var/obj/item/M = new magic_type(get_turf(H)) - playsound(get_turf(H),'sound/magic/summon_magic.ogg', 50, TRUE) - - var/in_hand = H.put_in_hands(M) - - to_chat(H, "\A [M] appears [in_hand ? "in your hand" : "at your feet"]!") - if(lucky) - to_chat(H, "You feel incredibly lucky.") - - -/proc/rightandwrong(summon_type, mob/user, survivor_probability) - if(user) //in this case either someone holding a spellbook or a badmin - to_chat(user, "You summoned [summon_type]!") - message_admins("[ADMIN_LOOKUPFLW(user)] summoned [summon_type]!") - log_game("[key_name(user)] summoned [summon_type]!") +/proc/rightandwrong(mob/user, survivor_probability) + if(user) //in this case someone is a badmin + to_chat(user, "You summoned guns!") + message_admins("[ADMIN_LOOKUPFLW(user)] summoned guns!") + log_game("[key_name(user)] summoned guns!") - if(summon_type == SUMMON_MAGIC) - GLOB.summon_magic_triggered = survivor_probability - else if(summon_type == SUMMON_GUNS) - GLOB.summon_guns_triggered = survivor_probability - else - CRASH("Bad summon_type given: [summon_type]") + GLOB.summon_guns_triggered = survivor_probability for(var/mob/living/carbon/human/H in GLOB.player_list) var/turf/T = get_turf(H) if(T && is_away_level(T)) continue - if(summon_type == SUMMON_MAGIC) - give_magic(H) - else - give_guns(H) + give_guns(H) /proc/summonevents() if(!SSevents.wizardmode) diff --git a/code/modules/spells/spell_types/shapeshift.dm b/code/modules/spells/spell_types/shapeshift.dm index 65eb0cebb2b3..254a43dc23af 100644 --- a/code/modules/spells/spell_types/shapeshift.dm +++ b/code/modules/spells/spell_types/shapeshift.dm @@ -19,7 +19,6 @@ var/mob/living/shapeshift_type var/list/possible_shapes = list(/mob/living/simple_animal/mouse,\ /mob/living/simple_animal/pet/dog/corgi,\ - /mob/living/simple_animal/hostile/carp/ranged/chaos,\ /mob/living/simple_animal/bot/secbot/ed209,\ /mob/living/simple_animal/hostile/poison/giant_spider/hunter/viper,\ /mob/living/simple_animal/hostile/construct/juggernaut) 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/code/modules/surgery/surgery_helpers.dm b/code/modules/surgery/surgery_helpers.dm index c4a769c43ed5..c28ce0855933 100644 --- a/code/modules/surgery/surgery_helpers.dm +++ b/code/modules/surgery/surgery_helpers.dm @@ -85,7 +85,7 @@ /proc/attempt_cancel_surgery(datum/surgery/S, obj/item/I, mob/living/M, mob/user) var/selected_zone = user.zone_selected to_chat(user, "You begin to cancel \the [S].") - if (!do_mob(user, M, 3 SECONDS)) + if (!do_after(user, 3 SECONDS, M)) return if(S.status == 1) diff --git a/code/modules/unit_tests/outfit_sanity.dm b/code/modules/unit_tests/outfit_sanity.dm index aca1d210fbf0..4dc12b4dc6e3 100644 --- a/code/modules/unit_tests/outfit_sanity.dm +++ b/code/modules/unit_tests/outfit_sanity.dm @@ -3,7 +3,10 @@ /* We don't check the result of equip_to_slot_or_del because it returns false for random jumpsuits, as they delete themselves on init */ \ var/obj/item/outfit_item = H.get_item_by_slot(##slot_name); \ if (!outfit_item) { \ - TEST_FAIL("[outfit.name]'s [#outfit_key] is invalid! Could not equip a [outfit.##outfit_key] into that slot."); \ + if (outfit.random != TRUE) \ + TEST_FAIL("[outfit.name]'s [#outfit_key] is invalid! Could not equip a [outfit.##outfit_key] into that slot."); \ + else \ + log_world("[outfit.name]'s [#outfit_key] is invalid! Could not equip a [outfit.##outfit_key] into that slot."); \ } \ } @@ -61,6 +64,10 @@ var/number = backpack_contents[path] || 1 for (var/_ in 1 to number) if (!H.equip_to_slot_or_del(new path(H), ITEM_SLOT_BACKPACK, TRUE)) - TEST_FAIL("[outfit.name]'s backpack_contents are invalid! Couldn't add [path] to backpack.") + if (outfit.random != TRUE) + TEST_FAIL("[outfit.name]'s backpack_contents are invalid! Couldn't add [path] to backpack.") + else + log_world("[outfit.name]'s backpack_contents are invalid! Couldn't add [path] to backpack.") + #undef CHECK_OUTFIT_SLOT diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index f58f94df84dd..eaa0a631ec5d 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -1712,13 +1712,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) item = /obj/item/flashlight/lantern/syndicate restricted_species = list("moth") //End WS edit -/datum/uplink_item/race_restricted/syndigenetics - name = "Fire Breath" - desc = "One of our subsidiaries, 23AndMe, have recently found the formula of backtracking lizard's genetic trail and giving them the ability to breathe fire, much like their dragon ancestors." - cost = 5 - item = /obj/item/dnainjector/firebreath - restricted_species = list("lizard") - /datum/uplink_item/race_restricted/razorwing name = "Razorwing Implant" desc = "Put those wings to good use! This implant makes your wingtips razor sharp and gives you the ability to flourish them, slicing anyone in range." diff --git a/code/modules/vehicles/cars/car.dm b/code/modules/vehicles/cars/car.dm index 6b53fa9a02c3..d3040f862863 100644 --- a/code/modules/vehicles/cars/car.dm +++ b/code/modules/vehicles/cars/car.dm @@ -80,7 +80,7 @@ if(occupant_amount() >= max_occupants) return FALSE var/atom/old_loc = loc - if(do_mob(forcer, M, get_enter_delay(M), extra_checks=CALLBACK(src, TYPE_PROC_REF(/obj/vehicle/sealed/car, is_car_stationary), old_loc))) + if(do_after(forcer, get_enter_delay(M), M, extra_checks=CALLBACK(src, TYPE_PROC_REF(/obj/vehicle/sealed/car, is_car_stationary), old_loc))) mob_forced_enter(M, silent) return TRUE return FALSE diff --git a/code/modules/vehicles/sealed.dm b/code/modules/vehicles/sealed.dm index 6751ddfe3580..22b1eb42becb 100644 --- a/code/modules/vehicles/sealed.dm +++ b/code/modules/vehicles/sealed.dm @@ -29,7 +29,7 @@ return FALSE if(occupant_amount() >= max_occupants) return FALSE - if(do_after(M, get_enter_delay(M), FALSE, src, TRUE)) + if(do_after(M, get_enter_delay(M), src, progress = TRUE, timed_action_flags = IGNORE_HELD_ITEM)) mob_enter(M) return TRUE return FALSE diff --git a/code/modules/vending/assist.dm b/code/modules/vending/assist.dm index 8a1c86cc9536..cb3cd0053d8a 100644 --- a/code/modules/vending/assist.dm +++ b/code/modules/vending/assist.dm @@ -10,8 +10,7 @@ /obj/item/stock_parts/manipulator = 3, /obj/item/stock_parts/micro_laser = 3, /obj/item/stock_parts/scanning_module = 3, - /obj/item/stock_parts/capacitor = 3) - contraband = list( + /obj/item/stock_parts/capacitor = 3, /obj/item/assembly/timer = 2, /obj/item/assembly/voice = 2, /obj/item/assembly/health = 2, diff --git a/code/modules/vending/autodrobe.dm b/code/modules/vending/autodrobe.dm index b1d85fb3fcbb..367c309d59a1 100644 --- a/code/modules/vending/autodrobe.dm +++ b/code/modules/vending/autodrobe.dm @@ -109,13 +109,9 @@ /obj/item/clothing/suit/changshan_blue = 1, /obj/item/clothing/suit/cheongsam_red = 1, /obj/item/clothing/suit/cheongsam_blue = 1, - /obj/item/gohei = 1) - contraband = list( + /obj/item/gohei = 1, /obj/item/clothing/suit/judgerobe = 1, /obj/item/clothing/head/powdered_wig = 1, - /obj/item/clothing/accessory/fan_mime_pin = 1, - /obj/item/clothing/accessory/fan_clown_pin = 1, - /obj/item/gun/magic/wand/nothing = 2, /obj/item/clothing/glasses/sunglasses/garb = 2, /obj/item/clothing/glasses/blindfold = 1, /obj/item/clothing/mask/muzzle = 2) diff --git a/code/modules/vending/cigarette.dm b/code/modules/vending/cigarette.dm index 7dd0b6004ea7..3cff7d3c361d 100644 --- a/code/modules/vending/cigarette.dm +++ b/code/modules/vending/cigarette.dm @@ -11,19 +11,19 @@ /obj/item/storage/fancy/cigarettes/cigpack_robust = 3, /obj/item/storage/fancy/cigarettes/cigpack_carp = 3, /obj/item/storage/fancy/cigarettes/cigpack_midori = 3, + /obj/item/storage/fancy/cigarettes/dromedaryco = 3, + /obj/item/clothing/mask/vape = 5, /obj/item/storage/box/matches = 10, /obj/item/lighter/greyscale = 4, /obj/item/storage/fancy/rollingpapers = 5) - contraband = list( - /obj/item/clothing/mask/vape = 5, - /obj/item/clothing/mask/vape/cigar = 3) //WS edit - E-Cigars premium = list( /obj/item/storage/fancy/cigarettes/cigpack_robustgold = 3, - /obj/item/storage/box/gum/nicotine = 2, + /obj/item/storage/box/gum/nicotine = 3, /obj/item/lighter = 3, /obj/item/storage/fancy/cigarettes/cigars = 1, /obj/item/storage/fancy/cigarettes/cigars/havana = 1, - /obj/item/storage/fancy/cigarettes/cigars/cohiba = 1) + /obj/item/storage/fancy/cigarettes/cigars/cohiba = 1, + /obj/item/clothing/mask/vape/cigar = 3) refill_canister = /obj/item/vending_refill/cigarette default_price = 75 extra_price = 250 diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm index 8a7199968774..e9eef49a0e3a 100644 --- a/code/modules/vending/clothesmate.dm +++ b/code/modules/vending/clothesmate.dm @@ -104,19 +104,16 @@ /obj/item/clothing/suit/apron/purple_bartender = 2, /obj/item/clothing/under/rank/civilian/bartender/purple = 2, /obj/item/clothing/suit/toggle/suspenders/blue = 2, - /obj/item/clothing/suit/toggle/suspenders/gray = 2) - contraband = list( - /obj/item/clothing/under/syndicate/tacticool = 1, - /obj/item/clothing/under/syndicate/tacticool/skirt = 1, + /obj/item/clothing/suit/toggle/suspenders/gray = 2, + /obj/item/clothing/under/syndicate/tacticool = 2, + /obj/item/clothing/under/syndicate/tacticool/skirt = 2, /obj/item/clothing/mask/balaclava = 1, /obj/item/clothing/head/trapper = 1, /obj/item/storage/belt/fannypack/black = 2, /obj/item/clothing/suit/jacket/letterman_syndie = 1, /obj/item/clothing/under/costume/jabroni = 1, /obj/item/clothing/suit/vapeshirt = 1, - /obj/item/clothing/under/costume/geisha = 1, - /obj/item/clothing/under/rank/centcom/officer/replica = 1, - /obj/item/clothing/under/rank/centcom/officer_skirt/replica = 1) + /obj/item/clothing/under/costume/geisha = 1) premium = list( /obj/item/clothing/under/suit/checkered = 1, /obj/item/clothing/suit/jacket/leather = 1, diff --git a/code/modules/vending/coffee.dm b/code/modules/vending/coffee.dm index 3e45b431b16d..9c4851c134a5 100644 --- a/code/modules/vending/coffee.dm +++ b/code/modules/vending/coffee.dm @@ -7,11 +7,11 @@ products = list( /obj/item/reagent_containers/food/drinks/coffee = 6, /obj/item/reagent_containers/food/drinks/mug/tea = 6, - /obj/item/reagent_containers/food/drinks/mug/coco = 3) + /obj/item/reagent_containers/food/drinks/mug/coco = 3, + /obj/item/reagent_containers/food/drinks/ice = 6) premium = list( /obj/item/reagent_containers/food/drinks/cafelatte = 3, /obj/item/reagent_containers/food/drinks/soylatte = 3) - contraband = list(/obj/item/reagent_containers/food/drinks/ice = 12) refill_canister = /obj/item/vending_refill/coffee default_price = 45 extra_price = 150 diff --git a/code/modules/vending/cola.dm b/code/modules/vending/cola.dm index 2ce937979e74..4a9f4a456eee 100644 --- a/code/modules/vending/cola.dm +++ b/code/modules/vending/cola.dm @@ -15,8 +15,7 @@ /obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime = 10, /obj/item/reagent_containers/food/drinks/soda_cans/sol_dry = 10, /obj/item/reagent_containers/food/drinks/waterbottle = 10, - /obj/item/reagent_containers/food/drinks/soda_cans/efuel = 5) - contraband = list( + /obj/item/reagent_containers/food/drinks/soda_cans/efuel = 5, /obj/item/reagent_containers/food/drinks/soda_cans/thirteenloko = 6, /obj/item/reagent_containers/food/drinks/soda_cans/shamblers = 6) premium = list( diff --git a/code/modules/vending/drinnerware.dm b/code/modules/vending/drinnerware.dm index 7ff7d80ddccd..5dbd8ea733db 100644 --- a/code/modules/vending/drinnerware.dm +++ b/code/modules/vending/drinnerware.dm @@ -17,11 +17,8 @@ /obj/item/kitchen/rollingpin = 2, /obj/item/kitchen/knife = 2, /obj/item/kitchen/knife/pizza_cutter = 2, - /obj/item/book/granter/crafting_recipe/cooking_sweets_101 = 2) - contraband = list( - /obj/item/kitchen/rollingpin = 2, - /obj/item/kitchen/knife/butcher = 2, - /obj/item/shovel/spoon = 2) // ST - Only a spoonfull + /obj/item/book/granter/crafting_recipe/cooking_sweets_101 = 2, + /obj/item/kitchen/knife/butcher = 1) refill_canister = /obj/item/vending_refill/dinnerware default_price = 50 extra_price = 250 diff --git a/code/modules/vending/engivend.dm b/code/modules/vending/engivend.dm index 096bffb1adf7..fb096656c1c3 100644 --- a/code/modules/vending/engivend.dm +++ b/code/modules/vending/engivend.dm @@ -16,8 +16,8 @@ /obj/item/electronics/airalarm = 10, /obj/item/electronics/advanced_airlock_controller = 10, /obj/item/electronics/firealarm = 10, - /obj/item/electronics/firelock = 10) - contraband = list(/obj/item/stock_parts/cell/potato = 3) + /obj/item/electronics/firelock = 10, + /obj/item/stock_parts/cell/potato = 3) premium = list(/obj/item/storage/belt/utility = 3, /obj/item/construction/rcd/loaded = 2, /obj/item/storage/box/smart_metal_foam = 1) diff --git a/code/modules/vending/games.dm b/code/modules/vending/games.dm index d209c93eae8e..d27a1f6ffe6e 100644 --- a/code/modules/vending/games.dm +++ b/code/modules/vending/games.dm @@ -14,7 +14,6 @@ /obj/item/instrument/piano_synth/headphones = 4, /obj/item/camera = 3, /obj/item/dyespray = 3) - contraband = list(/obj/item/dice/fudge = 9) premium = list( /obj/item/melee/skateboard/pro = 3, /obj/item/melee/skateboard/hoverboard = 1) diff --git a/code/modules/vending/medical.dm b/code/modules/vending/medical.dm index 1fff1bd03398..5a35a75a4495 100644 --- a/code/modules/vending/medical.dm +++ b/code/modules/vending/medical.dm @@ -27,15 +27,12 @@ /obj/item/reagent_containers/medigel/sterilizine = 1, /obj/item/sensor_device = 1, /obj/item/pinpointer/crew = 1) - contraband = list( - /obj/item/reagent_containers/pill/tox = 2, - /obj/item/reagent_containers/pill/morphine = 2, - /obj/item/reagent_containers/pill/charcoal = 4, - /obj/item/storage/box/hug/medical = 1) + contraband = list(/obj/item/reagent_containers/pill/tox = 2) premium = list( /obj/item/clothing/glasses/hud/health = 1, /obj/item/clothing/glasses/hud/health/prescription = 1, - /obj/item/shears = 1) + /obj/item/shears = 1, + /obj/item/storage/box/hug/medical = 1) armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF refill_canister = /obj/item/vending_refill/medical diff --git a/code/modules/vending/medical_wall.dm b/code/modules/vending/medical_wall.dm index cf0bca7c3bdb..dd498ffded07 100644 --- a/code/modules/vending/medical_wall.dm +++ b/code/modules/vending/medical_wall.dm @@ -11,11 +11,11 @@ /obj/item/reagent_containers/pill/charcoal = 1, /obj/item/reagent_containers/medigel/styptic = 1, /obj/item/reagent_containers/medigel/silver_sulf = 1, - /obj/item/reagent_containers/medigel/sterilizine = 1 + /obj/item/reagent_containers/medigel/sterilizine = 1, + /obj/item/reagent_containers/pill/morphine = 1 ) contraband = list( /obj/item/reagent_containers/pill/tox = 1, - /obj/item/reagent_containers/pill/morphine = 1, /obj/item/storage/box/gum/happiness = 1 ) armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) diff --git a/code/modules/vending/megaseed.dm b/code/modules/vending/megaseed.dm index 899bbac5ea87..4d59628f5fd2 100644 --- a/code/modules/vending/megaseed.dm +++ b/code/modules/vending/megaseed.dm @@ -42,12 +42,12 @@ /obj/item/seeds/tower = 3, /obj/item/seeds/watermelon = 3, /obj/item/seeds/wheat = 3, - /obj/item/seeds/whitebeet = 3) + /obj/item/seeds/whitebeet = 3, + /obj/item/seeds/plump = 3) contraband = list(/obj/item/seeds/amanita = 2, /obj/item/seeds/glowshroom = 2, /obj/item/seeds/liberty = 2, /obj/item/seeds/nettle = 2, - /obj/item/seeds/plump = 2, /obj/item/seeds/reishi = 2, /obj/item/seeds/cannabis = 3, /obj/item/seeds/starthistle = 2, diff --git a/code/modules/vending/nutrimax.dm b/code/modules/vending/nutrimax.dm index 1849750d3fce..0aaa47461406 100644 --- a/code/modules/vending/nutrimax.dm +++ b/code/modules/vending/nutrimax.dm @@ -15,8 +15,7 @@ /obj/item/storage/bag/plants = 5, /obj/item/cultivator = 3, /obj/item/shovel/spade = 3, - /obj/item/plant_analyzer = 4) - contraband = list( + /obj/item/plant_analyzer = 4, /obj/item/reagent_containers/glass/bottle/ammonia = 10, /obj/item/reagent_containers/glass/bottle/diethylamine = 5) refill_canister = /obj/item/vending_refill/hydronutrients diff --git a/code/modules/vending/plasmaresearch.dm b/code/modules/vending/plasmaresearch.dm index 650d9878ad36..a638bfc81d8a 100644 --- a/code/modules/vending/plasmaresearch.dm +++ b/code/modules/vending/plasmaresearch.dm @@ -10,7 +10,7 @@ /obj/item/assembly/timer = 6, /obj/item/assembly/signaler = 6, /obj/item/assembly/prox_sensor = 6, - /obj/item/assembly/igniter = 6) - contraband = list(/obj/item/assembly/health = 3) + /obj/item/assembly/igniter = 6, + /obj/item/assembly/health = 3) default_price = 400 extra_price = 600 diff --git a/code/modules/vending/security.dm b/code/modules/vending/security.dm index 0141967beff3..95afc6f2eb92 100644 --- a/code/modules/vending/security.dm +++ b/code/modules/vending/security.dm @@ -14,8 +14,7 @@ /obj/item/flashlight/seclite = 4, /obj/item/ammo_box/c9mm/rubbershot = 3, /obj/item/ammo_box/c9mm = 1, - /obj/item/stock_parts/cell/gun = 3) - contraband = list( + /obj/item/stock_parts/cell/gun = 3, /obj/item/clothing/glasses/sunglasses = 2) premium = list( /obj/item/storage/belt/security/webbing = 5, diff --git a/code/modules/vending/snack.dm b/code/modules/vending/snack.dm index 0785df82f14d..d0130d7358fc 100644 --- a/code/modules/vending/snack.dm +++ b/code/modules/vending/snack.dm @@ -14,8 +14,7 @@ /obj/item/reagent_containers/food/snacks/no_raisin = 6, /obj/item/reagent_containers/food/drinks/dry_ramen = 3, /obj/item/storage/box/gum = 3, - /obj/item/reagent_containers/food/snacks/energybar = 6) - contraband = list( + /obj/item/reagent_containers/food/snacks/energybar = 6, /obj/item/reagent_containers/food/snacks/syndicake = 6, /obj/item/reagent_containers/food/snacks/candy/bronx = 1) refill_canister = /obj/item/vending_refill/snack diff --git a/code/modules/vending/sovietsoda.dm b/code/modules/vending/sovietsoda.dm index f9eff36e5e6c..213a3d01df0a 100644 --- a/code/modules/vending/sovietsoda.dm +++ b/code/modules/vending/sovietsoda.dm @@ -4,8 +4,9 @@ icon_state = "sovietsoda" light_mask = "soviet-light-mask" product_ads = "Have you fulfilled your nutrition quota today?;Very nice!;We are simple people, for this is all we eat.;If there is a person, there is a problem. If there is no person, then there is no problem." - products = list(/obj/item/reagent_containers/food/drinks/drinkingglass/filled/soda = 30) - contraband = list(/obj/item/reagent_containers/food/drinks/drinkingglass/filled/cola = 20) + products = list( + /obj/item/reagent_containers/food/drinks/drinkingglass/filled/soda = 30, + /obj/item/reagent_containers/food/drinks/drinkingglass/filled/cola = 20) resistance_flags = FIRE_PROOF refill_canister = /obj/item/vending_refill/sovietsoda default_price = 1 diff --git a/code/modules/vending/toys.dm b/code/modules/vending/toys.dm index c86049ab75ef..8fefa1015536 100644 --- a/code/modules/vending/toys.dm +++ b/code/modules/vending/toys.dm @@ -16,11 +16,10 @@ /obj/item/toy/foamblade = 10, /obj/item/toy/balloon/syndicate = 10, /obj/item/clothing/suit/syndicatefake = 5, - /obj/item/clothing/head/syndicatefake = 5) - contraband = list( + /obj/item/clothing/head/syndicatefake = 5, /obj/item/gun/ballistic/shotgun/toy/crossbow = 10, - /obj/item/gun/ballistic/automatic/smg/c20r/toy = 10, - /obj/item/gun/ballistic/automatic/hmg/l6_saw/toy = 10, + /obj/item/gun/ballistic/automatic/smg/c20r/toy = 5, + /obj/item/gun/ballistic/automatic/hmg/l6_saw/toy = 5, /obj/item/toy/katana = 10, /obj/item/dualsaber/toy = 5) armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) diff --git a/code/modules/vending/youtool.dm b/code/modules/vending/youtool.dm index 6e75c75c7eae..98a5331b2744 100644 --- a/code/modules/vending/youtool.dm +++ b/code/modules/vending/youtool.dm @@ -15,8 +15,9 @@ /obj/item/flashlight/glowstick = 3, /obj/item/flashlight/glowstick/red = 3, /obj/item/flashlight = 3, - /obj/item/clothing/ears/earmuffs = 1) - contraband = list(/obj/item/clothing/gloves/color/fyellow = 2) + /obj/item/clothing/ears/earmuffs = 1, + /obj/item/clothing/gloves/color/fyellow = 2 + ) premium = list(/obj/item/storage/belt/utility = 2, /obj/item/multitool = 2, /obj/item/weldingtool/hugetank = 1, diff --git a/html/changelogs/AutoChangeLog-pr-2632.yml b/html/changelogs/AutoChangeLog-pr-2632.yml deleted file mode 100644 index cae83fa711b8..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2632.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: Thera-Pissed -changes: - - {tweak: SSUs draw power to decontaminate} - - {balance: 'lights no longer take 60% of a ships power, machines use more to account - for this.'} - - {code_imp: added standardized defines for power usage} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-2877.yml b/html/changelogs/AutoChangeLog-pr-2877.yml new file mode 100644 index 000000000000..42882de45c2d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2877.yml @@ -0,0 +1,5 @@ +author: FalloutFalcon +changes: + - {rscdel: Removed alot of magic cruft} + - {code_imp: Sorts gun defines into there own file} +delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-2880.yml b/html/changelogs/AutoChangeLog-pr-2880.yml deleted file mode 100644 index 900963df3140..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2880.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Spyroshark, Sun-Soaked -changes: - - {rscadd: 'A movable physics subsystem, deployed using a component.'} - - {rscadd: Bullet casings now drop using movable physics} - - {code_imp: ports NO_PIXEL_RANDOM_DROP from TG.} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-2940.yml b/html/changelogs/AutoChangeLog-pr-2940.yml deleted file mode 100644 index b6b82e6cb9a2..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2940.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Gristlebee -changes: - - {rscadd: 'Generic Ammo Boxes, printable in the autolathe'} - - {rscadd: Ammo cans are printable in the autolathe} - - {bugfix: Ammo boxes sometimes not properly updating their materials} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3025.yml b/html/changelogs/AutoChangeLog-pr-3025.yml deleted file mode 100644 index 58b6c0c1a6c7..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3025.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Mirag19 -changes: - - {bugfix: Fix revolver ammo check} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3082.yml b/html/changelogs/AutoChangeLog-pr-3082.yml new file mode 100644 index 000000000000..fd21b0f418a1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3082.yml @@ -0,0 +1,4 @@ +author: Sun-Soaked +changes: + - {bugfix: removes a comment from apc.dm that was causing strange errors.} +delete-after: true diff --git a/html/changelogs/archive/2024-05.yml b/html/changelogs/archive/2024-05.yml index b579a33698da..9e6c28996774 100644 --- a/html/changelogs/archive/2024-05.yml +++ b/html/changelogs/archive/2024-05.yml @@ -126,3 +126,61 @@ - bugfix: mech laser cargo crate is no longer unbuyable Zevotech: - rscdel: Plastic flaps no longer block atmos +2024-05-28: + Anticept: + - tweak: All pacman and its variants now have the same sheet burn times. Superpacmans + are no longer the vastly inferior generator. + Gristlebee: + - rscadd: Generic Ammo Boxes, printable in the autolathe + - rscadd: Ammo cans are printable in the autolathe + - bugfix: Ammo boxes sometimes not properly updating their materials + - rscdel: Elzu can no longer change their color with the multitool or emag. + Martinpachu: + - rscadd: Double bedsheets, fit for double beds, are now craftable via cloth. + Mirag19: + - bugfix: Fix revolver ammo check + Skies-Of-Blue: + - bugfix: fbp and rilena hoodies now work as intended + SomeguyManperson: + - bugfix: melee hermits now pull from the "survivor" loot variant rather than no + loot variant + - bugfix: hermits can no longer commit mitosis + - tweak: hermit loot has been compactified, defaults are now declared in the object + rather than initialize, and variant-specific loot now uses a switch statement + - bugfix: all hermits now have pocket loot randomized as intended + - tweak: reduces the cash bundle melee hermits can drop from a medium random (500-3000) + to small random (100-500) bundle since they are quite common + - bugfix: prismwine's burn resistance can no longer end up stacking + Spyroshark, Sun-Soaked: + - rscadd: A movable physics subsystem, deployed using a component. + - rscadd: Bullet casings now drop using movable physics + - code_imp: ports NO_PIXEL_RANDOM_DROP from TG. + Thera-Pissed: + - tweak: SSUs draw power to decontaminate + - balance: lights no longer take 60% of a ships power, machines use more to account + for this. + - code_imp: added standardized defines for power usage + Zevotech: + - rscdel: Clown and mime fan quirks have been removed + - rscdel: Removes the clown and mime fan pins +2024-05-29: + Apogee-dev: + - tweak: Syndicate mobs have been renamed to Ramzi Clique mobs. New sprites will + come later. + Gristlebee: + - rscadd: Holopads now display the location of the last holopad that called them + on examine. + - code_imp: Span macros for hologram.dm + - rscadd: Autolathe can print holofield controllers. + - rscadd: You can sync blastdoors and holofields to a controller in a button with + a multitool + - code_imp: span macros for blast doors, buttons and holofields +2024-05-30: + PositiveEntropy: + - rscadd: Solarian Marine Bi-ologists now have proper representation in the form + of a cute cloak! +2024-05-31: + Gristlebee: + - bugfix: Auto unloading for gate loaded revolvers + INFRARED_BARON, PositiveEntropy: + - imageadd: Resprites nearly every mech! diff --git a/html/changelogs/archive/2024-06.yml b/html/changelogs/archive/2024-06.yml new file mode 100644 index 000000000000..1a993f9a46ac --- /dev/null +++ b/html/changelogs/archive/2024-06.yml @@ -0,0 +1,133 @@ +2024-06-01: + FalloutFalcon: + - rscadd: Added new more varied legion corpses + - rscdel: Removed lot of the crappy legion corpses + - balance: rebalanced most of the old legion corpses + - refactor: moved most legion corpse loot behavior to outfits + - tweak: tweaked the new ore + Gristlebee: + - rscadd: Suit Storage Unit construction + - rscadd: Added suit storage unit circuit boards to industrial engineering tech + - tweak: Suit storage unit examines + - tweak: span class to span macros in suit_storage.dm + INFRARED_BARON: + - imageadd: All mechs have been successfully resprited, including the Mauler, Marauder + and Seraph now! + Skies-Of-Blue: + - tweak: mugs referencing an ancient terran empire have been confiscated by the + confederation. Please enjoy your complementary, generic mug in compensation + - bugfix: rds based delusions now pass without the player having to relog, thank + god + - bugfix: rds can once again be treated with mindbreaker toxin (hopefully) + - tweak: the pool of possible delusions has been changed to better reflect shiptest's + narrative + - rscadd: a base ramzi sprite to simple_human.dmi to be used in the changed delusion + pool + - rscdel: chat warning message for rds users not to grief. Just be cool about it, + okay? + SomeguyManperson: + - bugfix: fueled thruster throttling now works right + Sun-Soaked: + - rscadd: World icon element. + - rscadd: World icons for combat knives. + thgvr: + - rscadd: Roundstart ships no longer spawn +2024-06-02: + Skies-Of-Blue: + - rscdel: removes the roundjoin "welcome to /tg/ station" audio clip + SomeguyManperson: + - bugfix: black market secret documents are no longer default documents + - balance: the shoddy survivor suits found on hermits are now actually worse than + the EXOCOM explorer suits +2024-06-03: + Apogee-dev: + - balance: security belts and webbings can no longer store bulk ammo boxes, only + magazines + - tweak: Ship-specific access restrictions have been enabled. + - tweak: Pirate ships no longer spawn docked to the outpost. + FalloutFalcon: + - bugfix: Fixed plant analyzer examine block styling + - tweak: rewrites trickwine for brewers + - rscadd: You can trip landmines with a well placed throw + - rscadd: New interaction with throwing things at bottles, lights, and bear traps + - bugfix: The end of finalize no longer gets called twice and targeting items seems + like an intended behavior that was lost + - rscdel: Removed goofball legion disease + - refactor: spawning guns without mags are handled with a define + - refactor: refactored hostile humans + - bugfix: fixed free smart fridge circuit board from drying rack + - rscadd: Smokers rejoice! You can now pick your favorite type of nicotine delivery + system. + - rscadd: Smokers have a choice between most brands of cigarette, cigars, a vape, + or a pipe! + - code_imp: sorted code owner stuff and added me to some files + - bugfix: fixed create and destroy test fail + - tweak: tweaked id card examine information and formating + - bugfix: human examine bug when middle aged + - rscdel: Removed moths getting one shot by a flyswatter + - code_imp: camera/autoname/LateInitialize() optimization + - tweak: granularizes a handful of tool and machine supply packs! + - admin: Improved the silly little menu, HA HA I have messed up your muscle memory!! + u + Gristlebee: + - tweak: Defib crate now contains a single defib, priced 750 + - tweak: Granularizes mech equipment + - tweak: mech cargo pack descs + - rscadd: Asteroid ore veins + Hardly: + - rscadd: Added some style to the flavor text popup + - bugfix: Fixed flavor text not accepting certain characters or new lines + - tweak: Changed up Flavor Text editing text a bit + - tweak: Flavor text's max length has been chopped from 4096 to 1024 + Sadhorizon: + - tweak: Moved most of contraband items out of vendor contraband. + - rscadd: Added DromaderyCo packets to the cigarette vendors. + - tweak: Increased nicotine amount to three in the cigarette vendors. + Skies-Of-Blue: + - balance: chemical mindbreaker is now ten times as potent! Be gay, do crime, and + hallucinate in the process + SomeguyManperson: + - bugfix: hallucination anomalies now trigger if you aren't wearing proper protection + (as opposed to only triggering if you are) + - bugfix: gun sawing can now only be done with proper equipment (usually a saw)) + - bugfix: bandoliers now hold the correct amount of bullets (several more) + - balance: the brimstone can now be pumped faster. Enjoy your rilena. + Sun-Soaked: + - bugfix: shoutgun casing bounce sfx now plays as intended. oopsies. + - rscdel: Removes sexy clown costumes from spawners + - config: tweak option removed from changelog template + Zevotech: + - rscdel: Removed nonfunctioning coffee machines and their cargo packs + - rscadd: Adds the Elzuose color salve, a product that allows Elzuose to change + their glow color upon application. + '[Watermelon914](https://github.com/Watermelon914)': + - code_imp: ports little itty bitty sendsignal optimization from tg + meemofcourse: + - balance: The Elder's Illesterns and Arrows are now factory-variant. + - bugfix: The Runner should be able to dock now. + 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 +2024-06-07: + Sun-Soaked: + - bugfix: combat knives and their subtypes now once again have sprites. + Zevotech: + - rscadd: remapped and renamed ashwalker_shrine into lavaland_surface_buried_shrine + - rscadd: Necropolis walls have been renamed to thick stone walls. + rye-rice: + - 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 diff --git a/icons/effects/ore_visuals.dmi b/icons/effects/ore_visuals.dmi index 1353a2d814ad..b64b8f0427e2 100644 Binary files a/icons/effects/ore_visuals.dmi and b/icons/effects/ore_visuals.dmi differ 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/mecha/mecha.dmi b/icons/mecha/mecha.dmi index 08f0c94505ee..b894d9191225 100644 Binary files a/icons/mecha/mecha.dmi and b/icons/mecha/mecha.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 diff --git a/icons/mob/clothing/belt.dmi b/icons/mob/clothing/belt.dmi index 398d4589ad71..f334af20104e 100644 Binary files a/icons/mob/clothing/belt.dmi and b/icons/mob/clothing/belt.dmi differ diff --git a/icons/mob/clothing/belt_mirror.dmi b/icons/mob/clothing/belt_mirror.dmi index 6b27c56c8b35..bc048fc920c9 100644 Binary files a/icons/mob/clothing/belt_mirror.dmi and b/icons/mob/clothing/belt_mirror.dmi differ diff --git a/icons/mob/clothing/neck.dmi b/icons/mob/clothing/neck.dmi index 9443ebfbc615..a22e958effd8 100644 Binary files a/icons/mob/clothing/neck.dmi and b/icons/mob/clothing/neck.dmi differ diff --git a/icons/mob/inhands/misc/sheets_lefthand.dmi b/icons/mob/inhands/misc/sheets_lefthand.dmi index 8a5431217705..4d7c351d35f9 100644 Binary files a/icons/mob/inhands/misc/sheets_lefthand.dmi and b/icons/mob/inhands/misc/sheets_lefthand.dmi differ diff --git a/icons/mob/inhands/misc/sheets_righthand.dmi b/icons/mob/inhands/misc/sheets_righthand.dmi index 24256299f2e8..c19a179e689b 100644 Binary files a/icons/mob/inhands/misc/sheets_righthand.dmi and b/icons/mob/inhands/misc/sheets_righthand.dmi differ diff --git a/icons/mob/inhands/weapons/guns_lefthand.dmi b/icons/mob/inhands/weapons/guns_lefthand.dmi index ef1b09fccc53..d356f95fd272 100644 Binary files a/icons/mob/inhands/weapons/guns_lefthand.dmi and b/icons/mob/inhands/weapons/guns_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/guns_righthand.dmi b/icons/mob/inhands/weapons/guns_righthand.dmi index 827bd71ad50e..b69fb6ff8f74 100644 Binary files a/icons/mob/inhands/weapons/guns_righthand.dmi and b/icons/mob/inhands/weapons/guns_righthand.dmi differ diff --git a/icons/mob/simple_human.dmi b/icons/mob/simple_human.dmi index 8cbc0f841bcb..133544acc999 100644 Binary files a/icons/mob/simple_human.dmi and b/icons/mob/simple_human.dmi differ diff --git a/icons/obj/clothing/cloaks.dmi b/icons/obj/clothing/cloaks.dmi index 48f09da9a178..4e863875c47f 100644 Binary files a/icons/obj/clothing/cloaks.dmi and b/icons/obj/clothing/cloaks.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 2ee023557f56..fb23d4bc2afe 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/suits/hooded.dmi b/icons/obj/clothing/suits/hooded.dmi index 06d98acf2358..5b04aa13aaa7 100644 Binary files a/icons/obj/clothing/suits/hooded.dmi and b/icons/obj/clothing/suits/hooded.dmi differ diff --git a/icons/obj/dyespray.dmi b/icons/obj/dyespray.dmi index eb056036799a..1d1813f38c50 100644 Binary files a/icons/obj/dyespray.dmi and b/icons/obj/dyespray.dmi differ diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi index 690ed5d86d2f..9068f301647f 100644 Binary files a/icons/obj/guns/projectile.dmi and b/icons/obj/guns/projectile.dmi differ diff --git a/icons/obj/machines/coffeemaker.dmi b/icons/obj/machines/coffeemaker.dmi deleted file mode 100644 index 246159f1c54f..000000000000 Binary files a/icons/obj/machines/coffeemaker.dmi and /dev/null differ diff --git a/icons/obj/ores.dmi b/icons/obj/ores.dmi index f3451a8432dd..1e6c41a90c05 100644 Binary files a/icons/obj/ores.dmi and b/icons/obj/ores.dmi differ diff --git a/icons/obj/stack_objects.dmi b/icons/obj/stack_objects.dmi index 0989e1834f70..80350d2bfaa3 100644 Binary files a/icons/obj/stack_objects.dmi and b/icons/obj/stack_objects.dmi differ diff --git a/icons/obj/world/melee.dmi b/icons/obj/world/melee.dmi new file mode 100644 index 000000000000..ff8e2114e827 Binary files /dev/null and b/icons/obj/world/melee.dmi differ diff --git a/icons/turf/walls/bananium_wall.dmi b/icons/turf/walls/bananium_wall.dmi deleted file mode 100644 index 48a58fe20619..000000000000 Binary files a/icons/turf/walls/bananium_wall.dmi and /dev/null differ diff --git a/shiptest.dme b/shiptest.dme index 186a349e8b9f..630c5d479767 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -52,6 +52,7 @@ #include "code\__DEFINES\directional.dm" #include "code\__DEFINES\diseases.dm" #include "code\__DEFINES\DNA.dm" +#include "code\__DEFINES\do_afters.dm" #include "code\__DEFINES\dye_keys.dm" #include "code\__DEFINES\economy.dm" #include "code\__DEFINES\events.dm" @@ -142,6 +143,7 @@ #include "code\__DEFINES\tgs.dm" #include "code\__DEFINES\tgui.dm" #include "code\__DEFINES\time.dm" +#include "code\__DEFINES\timed_action.dm" #include "code\__DEFINES\tools.dm" #include "code\__DEFINES\traits.dm" #include "code\__DEFINES\turfs.dm" @@ -615,7 +617,6 @@ #include "code\datums\diseases\advance\symptoms\itching.dm" #include "code\datums\diseases\advance\symptoms\nanites.dm" #include "code\datums\diseases\advance\symptoms\narcolepsy.dm" -#include "code\datums\diseases\advance\symptoms\necropolis.dm" #include "code\datums\diseases\advance\symptoms\oxygen.dm" #include "code\datums\diseases\advance\symptoms\sensory.dm" #include "code\datums\diseases\advance\symptoms\shedding.dm" @@ -655,6 +656,7 @@ #include "code\datums\elements\update_icon_blocker.dm" #include "code\datums\elements\update_icon_updates_onmob.dm" #include "code\datums\elements\waddling.dm" +#include "code\datums\elements\world_icon.dm" #include "code\datums\elements\decals\_decals.dm" #include "code\datums\elements\decals\blood.dm" #include "code\datums\helper_datums\events.dm" @@ -1350,7 +1352,6 @@ #include "code\game\objects\structures\fireplace.dm" #include "code\game\objects\structures\flora.dm" #include "code\game\objects\structures\fluff.dm" -#include "code\game\objects\structures\fugitive_role_spawners.dm" #include "code\game\objects\structures\ghost_role_spawners.dm" #include "code\game\objects\structures\girders.dm" #include "code\game\objects\structures\grille.dm" @@ -1684,7 +1685,6 @@ #include "code\modules\antagonists\cult\rune_spawn_action.dm" #include "code\modules\antagonists\cult\runes.dm" #include "code\modules\antagonists\devil\devil.dm" -#include "code\modules\antagonists\devil\devil_helpers.dm" #include "code\modules\antagonists\devil\imp\imp.dm" #include "code\modules\antagonists\devil\sintouched\objectives.dm" #include "code\modules\antagonists\devil\sintouched\sintouched.dm" @@ -1703,7 +1703,6 @@ #include "code\modules\antagonists\ert\nanotrasen.dm" #include "code\modules\antagonists\ert\solgov.dm" #include "code\modules\antagonists\ert\syndicate.dm" -#include "code\modules\antagonists\fugitive\fugitive_outfits.dm" #include "code\modules\antagonists\gang\outfits.dm" #include "code\modules\antagonists\greentext\greentext.dm" #include "code\modules\antagonists\magic_servant\servant.dm" @@ -2132,7 +2131,6 @@ #include "code\modules\events\wizard\invincible.dm" #include "code\modules\events\wizard\lava.dm" #include "code\modules\events\wizard\madness.dm" -#include "code\modules\events\wizard\magicarp.dm" #include "code\modules\events\wizard\petsplosion.dm" #include "code\modules\events\wizard\race.dm" #include "code\modules\events\wizard\rpgloot.dm" @@ -2183,7 +2181,6 @@ #include "code\modules\food_and_drinks\food\snacks\dough.dm" #include "code\modules\food_and_drinks\food\snacks\meat.dm" #include "code\modules\food_and_drinks\kitchen_machinery\big_mortar.dm" -#include "code\modules\food_and_drinks\kitchen_machinery\coffeemaker.dm" #include "code\modules\food_and_drinks\kitchen_machinery\cutting_board.dm" #include "code\modules\food_and_drinks\kitchen_machinery\deep_fryer.dm" #include "code\modules\food_and_drinks\kitchen_machinery\food_cart.dm" @@ -2421,6 +2418,7 @@ #include "code\modules\mining\equipment\regenerative_core.dm" #include "code\modules\mining\equipment\resonator.dm" #include "code\modules\mining\equipment\survival_pod.dm" +#include "code\modules\mining\equipment\trophies.dm" #include "code\modules\mining\equipment\wormhole_jaunter.dm" #include "code\modules\mining\laborcamp\laborstacker.dm" #include "code\modules\mining\lavaland\ash_flora.dm" @@ -2708,13 +2706,10 @@ #include "code\modules\mob\living\simple_animal\hostile\bear.dm" #include "code\modules\mob\living\simple_animal\hostile\bees.dm" #include "code\modules\mob\living\simple_animal\hostile\carp.dm" -#include "code\modules\mob\living\simple_animal\hostile\cat_butcher.dm" #include "code\modules\mob\living\simple_animal\hostile\clown.dm" #include "code\modules\mob\living\simple_animal\hostile\cockroach.dm" -#include "code\modules\mob\living\simple_animal\hostile\dark_wizard.dm" #include "code\modules\mob\living\simple_animal\hostile\eyeballs.dm" #include "code\modules\mob\living\simple_animal\hostile\faithless.dm" -#include "code\modules\mob\living\simple_animal\hostile\frontiersman.dm" #include "code\modules\mob\living\simple_animal\hostile\giant_spider.dm" #include "code\modules\mob\living\simple_animal\hostile\goose.dm" #include "code\modules\mob\living\simple_animal\hostile\headcrab.dm" @@ -2725,26 +2720,26 @@ #include "code\modules\mob\living\simple_animal\hostile\mecha_pilot.dm" #include "code\modules\mob\living\simple_animal\hostile\mimic.dm" #include "code\modules\mob\living\simple_animal\hostile\mushroom.dm" -#include "code\modules\mob\living\simple_animal\hostile\nanotrasen.dm" #include "code\modules\mob\living\simple_animal\hostile\netherworld.dm" -#include "code\modules\mob\living\simple_animal\hostile\pirate.dm" #include "code\modules\mob\living\simple_animal\hostile\regalrat.dm" -#include "code\modules\mob\living\simple_animal\hostile\skeleton.dm" #include "code\modules\mob\living\simple_animal\hostile\space_dragon.dm" #include "code\modules\mob\living\simple_animal\hostile\statue.dm" -#include "code\modules\mob\living\simple_animal\hostile\stickman.dm" -#include "code\modules\mob\living\simple_animal\hostile\survivors.dm" -#include "code\modules\mob\living\simple_animal\hostile\syndicate.dm" #include "code\modules\mob\living\simple_animal\hostile\tree.dm" #include "code\modules\mob\living\simple_animal\hostile\venus_human_trap.dm" -#include "code\modules\mob\living\simple_animal\hostile\wizard.dm" #include "code\modules\mob\living\simple_animal\hostile\wumborian_fugu.dm" -#include "code\modules\mob\living\simple_animal\hostile\zombie.dm" #include "code\modules\mob\living\simple_animal\hostile\bosses\boss.dm" -#include "code\modules\mob\living\simple_animal\hostile\bosses\paperwizard.dm" #include "code\modules\mob\living\simple_animal\hostile\gorilla\emotes.dm" #include "code\modules\mob\living\simple_animal\hostile\gorilla\gorilla.dm" #include "code\modules\mob\living\simple_animal\hostile\gorilla\visuals_icons.dm" +#include "code\modules\mob\living\simple_animal\hostile\human\cat_butcher.dm" +#include "code\modules\mob\living\simple_animal\hostile\human\frontiersman.dm" +#include "code\modules\mob\living\simple_animal\hostile\human\human.dm" +#include "code\modules\mob\living\simple_animal\hostile\human\nanotrasen.dm" +#include "code\modules\mob\living\simple_animal\hostile\human\pirate.dm" +#include "code\modules\mob\living\simple_animal\hostile\human\skeleton.dm" +#include "code\modules\mob\living\simple_animal\hostile\human\survivors.dm" +#include "code\modules\mob\living\simple_animal\hostile\human\syndicate.dm" +#include "code\modules\mob\living\simple_animal\hostile\human\zombie.dm" #include "code\modules\mob\living\simple_animal\hostile\jungle\_jungle_mobs.dm" #include "code\modules\mob\living\simple_animal\hostile\jungle\leaper.dm" #include "code\modules\mob\living\simple_animal\hostile\jungle\mega_arachnid.dm" @@ -2768,6 +2763,7 @@ #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\goldgrub.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\goliath.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\gutlunch.dm" +#include "code\modules\mob\living\simple_animal\hostile\mining_mobs\hivelord_outfits.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\hivelord.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\ice demon.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\ice whelp.dm" @@ -3032,7 +3028,6 @@ #include "code\modules\projectiles\guns\ballistic.dm" #include "code\modules\projectiles\guns\energy.dm" #include "code\modules\projectiles\guns\gunhud.dm" -#include "code\modules\projectiles\guns\magic.dm" #include "code\modules\projectiles\guns\powered.dm" #include "code\modules\projectiles\guns\ballistic\assault.dm" #include "code\modules\projectiles\guns\ballistic\automatic.dm" @@ -3055,8 +3050,6 @@ #include "code\modules\projectiles\guns\energy\special.dm" #include "code\modules\projectiles\guns\energy\stun.dm" #include "code\modules\projectiles\guns\faction\gezena\energy_gunsword.dm" -#include "code\modules\projectiles\guns\magic\staff.dm" -#include "code\modules\projectiles\guns\magic\wand.dm" #include "code\modules\projectiles\guns\misc\beam_rifle.dm" #include "code\modules\projectiles\guns\misc\blastcannon.dm" #include "code\modules\projectiles\guns\misc\bow.dm" @@ -3066,7 +3059,6 @@ #include "code\modules\projectiles\guns\misc\syringe_gun.dm" #include "code\modules\projectiles\projectile\beams.dm" #include "code\modules\projectiles\projectile\bullets.dm" -#include "code\modules\projectiles\projectile\magic.dm" #include "code\modules\projectiles\projectile\bullets\_incendiary.dm" #include "code\modules\projectiles\projectile\bullets\dart_syringe.dm" #include "code\modules\projectiles\projectile\bullets\dnainjector.dm" @@ -3088,7 +3080,6 @@ #include "code\modules\projectiles\projectile\energy\nuclear_particle.dm" #include "code\modules\projectiles\projectile\energy\stun.dm" #include "code\modules\projectiles\projectile\energy\tesla.dm" -#include "code\modules\projectiles\projectile\magic\spellcard.dm" #include "code\modules\projectiles\projectile\reusable\_reusable.dm" #include "code\modules\projectiles\projectile\reusable\arrow.dm" #include "code\modules\projectiles\projectile\reusable\foam_dart.dm" @@ -3256,7 +3247,6 @@ #include "code\modules\research\xenobiology\crossbreeding\stabilized.dm" #include "code\modules\ruins\lavaland_ruin_code.dm" #include "code\modules\ruins\rockplanet_ruin_code.dm" -#include "code\modules\ruins\icemoonruin_code\hotsprings.dm" #include "code\modules\ruins\icemoonruin_code\hydroponicslab.dm" #include "code\modules\ruins\icemoonruin_code\library.dm" #include "code\modules\ruins\icemoonruin_code\wrath.dm" @@ -3316,7 +3306,6 @@ #include "code\modules\spells\spell_types\forcewall.dm" #include "code\modules\spells\spell_types\genetic.dm" #include "code\modules\spells\spell_types\godhand.dm" -#include "code\modules\spells\spell_types\infinite_guns.dm" #include "code\modules\spells\spell_types\inflict_handler.dm" #include "code\modules\spells\spell_types\knock.dm" #include "code\modules\spells\spell_types\lichdom.dm" diff --git a/sound/machines/coffeemaker_brew.ogg b/sound/machines/coffeemaker_brew.ogg deleted file mode 100644 index a8e25c09867a..000000000000 Binary files a/sound/machines/coffeemaker_brew.ogg and /dev/null differ diff --git a/sound/voice/ApproachingTG.ogg b/sound/voice/ApproachingTG.ogg deleted file mode 100644 index 3f8bc1c48801..000000000000 Binary files a/sound/voice/ApproachingTG.ogg and /dev/null differ diff --git a/tools/UpdatePaths/Scripts/2972_human_hostile.txt b/tools/UpdatePaths/Scripts/2972_human_hostile.txt new file mode 100644 index 000000000000..297ba2df7bb9 --- /dev/null +++ b/tools/UpdatePaths/Scripts/2972_human_hostile.txt @@ -0,0 +1,7 @@ +/mob/living/simple_animal/hostile/pirate/@SUBTYPES: /mob/living/simple_animal/hostile/human/pirate/@SUBTYPES {@OLD} +/mob/living/simple_animal/hostile/frontier/@SUBTYPES: /mob/living/simple_animal/hostile/human/frontier/@SUBTYPES {@OLD} +/mob/living/simple_animal/hostile/nanotrasen/@SUBTYPES: /mob/living/simple_animal/hostile/human/nanotrasen/@SUBTYPES {@OLD} +/mob/living/simple_animal/hostile/skeleton/@SUBTYPES: /mob/living/simple_animal/hostile/human/skeleton/@SUBTYPES {@OLD} +/mob/living/simple_animal/hostile/asteroid/whitesands/@SUBTYPES: /mob/living/simple_animal/hostile/human/hermit/@SUBTYPES {@OLD} +/mob/living/simple_animal/hostile/cat_butcherer/@SUBTYPES: /mob/living/simple_animal/hostile/human/cat_butcherer/@SUBTYPES {@OLD} +/mob/living/simple_animal/hostile/syndicate/@SUBTYPES:: /mob/living/simple_animal/hostile/human/syndicate/@SUBTYPES {@OLD}