diff --git a/_maps/RandomRuins/RockRuins/rockplanet_nomadcrash.dmm b/_maps/RandomRuins/RockRuins/rockplanet_nomadcrash.dmm new file mode 100644 index 000000000000..7ca31921e401 --- /dev/null +++ b/_maps/RandomRuins/RockRuins/rockplanet_nomadcrash.dmm @@ -0,0 +1,4760 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aw" = ( +/obj/structure/bonfire/prelit, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"aL" = ( +/obj/structure/door_assembly/door_assembly_centcom{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"aN" = ( +/obj/machinery/space_heater, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 10 + }, +/turf/open/floor/plasteel/rockvault, +/area/ruin/rockplanet/nanotrasen) +"aX" = ( +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"ba" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock{ + dir = 4; + name = "Crew Berth" + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ruin/rockplanet/nanotrasen) +"bv" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/rockplanet/hull_plating, +/area/overmap_encounter/planetoid/rockplanet/explored) +"cd" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "9-10" + }, +/turf/open/floor/plasteel/rockvault, +/area/ruin/rockplanet/nanotrasen) +"cl" = ( +/obj/machinery/power/shuttle/engine/electric{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/engine/hull/interior, +/area/ruin/rockplanet/nanotrasen) +"cr" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"cO" = ( +/obj/structure/chair/plastic{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/rockplanet/hull_plating, +/area/overmap_encounter/planetoid/rockplanet/explored) +"cP" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/rock{ + icon_state = "redrocks2" + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"cU" = ( +/obj/effect/turf_decal/weather/dirt/corner{ + dir = 8 + }, +/obj/structure/barricade/sandbags, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"df" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/rockvault, +/area/ruin/rockplanet/nanotrasen) +"dB" = ( +/turf/open/floor/plasteel/tech/grid, +/area/ruin/rockplanet/nanotrasen) +"dJ" = ( +/obj/structure/flora/rock{ + icon_state = "redrock2" + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"dM" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/railing, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"ei" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/door_assembly/door_assembly_hatch{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"eo" = ( +/turf/open/floor/plating/asteroid/rockplanet/plating/scorched, +/area/overmap_encounter/planetoid/rockplanet/explored) +"fc" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/frame/machine, +/turf/open/floor/plating{ + icon_state = "wet_cracked2" + }, +/area/ruin/rockplanet/nanotrasen) +"fd" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/barricade/sandbags, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"fe" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/sink{ + pixel_y = 30 + }, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"fw" = ( +/obj/machinery/power/port_gen/pacman, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"fF" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4; + name = "Helm" + }, +/turf/open/floor/plasteel/tech, +/area/ruin/rockplanet/nanotrasen) +"fK" = ( +/obj/effect/turf_decal/weather/dirt/corner{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"fM" = ( +/obj/machinery/door/airlock/external{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ruin/rockplanet/nanotrasen) +"ga" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/layer2{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister, +/turf/open/floor/plasteel/rockvault, +/area/ruin/rockplanet/nanotrasen) +"gn" = ( +/obj/structure/flora/rock/asteroid, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"gs" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/spline/fancy/opaque/bottlegreen{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit{ + icon_state = "plastic" + }, +/area/ruin/rockplanet/nanotrasen) +"gO" = ( +/obj/structure/table/reinforced, +/obj/item/radio/intercom/wideband/table{ + dir = 4; + pixel_x = 3 + }, +/obj/effect/decal/cleanable/glass/plasma, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"gY" = ( +/turf/open/floor/plating/asteroid/rockplanet/mud, +/area/overmap_encounter/planetoid/rockplanet/explored) +"ha" = ( +/obj/structure/cable{ + icon_state = "2-5" + }, +/turf/open/floor/plating/asteroid/rockplanet/plating/scorched, +/area/overmap_encounter/planetoid/rockplanet/explored) +"hc" = ( +/obj/effect/gibspawner, +/turf/open/floor/plasteel/tech, +/area/ruin/rockplanet/nanotrasen) +"hm" = ( +/obj/structure/bed/pod, +/obj/effect/mob_spawn/human/corpse/damaged, +/obj/structure/curtain/cloth, +/turf/open/floor/plasteel/rockvault, +/area/ruin/rockplanet/nanotrasen) +"hy" = ( +/obj/effect/turf_decal/spline/fancy/opaque/yellow{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/item/stack/sheet/metal/five, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"hV" = ( +/obj/structure/flora/rock{ + icon_state = "basalt" + }, +/turf/open/floor/plating/asteroid/rockplanet/mud, +/area/overmap_encounter/planetoid/rockplanet/explored) +"il" = ( +/obj/effect/turf_decal/spline/fancy/opaque/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"ip" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/door/airlock/public/glass{ + dir = 8 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ruin/rockplanet/nanotrasen) +"is" = ( +/obj/item/chair/greyscale, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"iN" = ( +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"iZ" = ( +/obj/effect/turf_decal/spline/fancy/opaque/yellow{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ruin/rockplanet/nanotrasen) +"jl" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/structure/girder/displaced, +/obj/effect/decal/cleanable/glass/plasma, +/turf/open/floor/plasteel/tech, +/area/ruin/rockplanet/nanotrasen) +"jm" = ( +/turf/closed/mineral/random/rockplanet, +/area/overmap_encounter/planetoid/rockplanet/explored) +"jw" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/structure/barricade/sandbags, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"jC" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/magmawing, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"jD" = ( +/obj/effect/turf_decal/weather/dirt/corner, +/obj/structure/flora/rock{ + icon_state = "redrock2" + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"jI" = ( +/obj/structure/fence/door{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/rockplanet/plating/scorched, +/area/overmap_encounter/planetoid/rockplanet/explored) +"kf" = ( +/obj/structure/table_frame, +/turf/open/floor/plating/ashplanet/rocky, +/area/ruin/rockplanet/nanotrasen) +"kN" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"kS" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible/layer2{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "2-9" + }, +/turf/open/floor/plasteel/rockvault, +/area/ruin/rockplanet/nanotrasen) +"kV" = ( +/obj/structure/flora/rock{ + icon_state = "redrocks2" + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"lg" = ( +/turf/closed/wall, +/area/ruin/rockplanet/nanotrasen) +"lw" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"lz" = ( +/obj/machinery/power/smes/shuttle/precharged, +/turf/open/floor/plating/asteroid/rockplanet/plating/scorched, +/area/overmap_encounter/planetoid/rockplanet/explored) +"mu" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"mz" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/spline/fancy/opaque/bottlegreen, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit{ + icon_state = "panelscorched" + }, +/area/ruin/rockplanet/nanotrasen) +"mW" = ( +/obj/structure/barricade/sandbags, +/turf/open/floor/plating/asteroid/rockplanet/mud, +/area/overmap_encounter/planetoid/rockplanet/explored) +"nf" = ( +/turf/open/floor/plating/asteroid/rockplanet/plasteel, +/area/overmap_encounter/planetoid/rockplanet/explored) +"nB" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/effect/turf_decal/weather/dirt/corner{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"on" = ( +/turf/closed/mineral/random/rockplanet, +/area/ruin/rockplanet/nanotrasen) +"oq" = ( +/obj/machinery/atmospherics/components/binary/pump/on/layer2{ + dir = 8; + name = "Air to Distro" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating/asteroid/rockplanet/plasteel, +/area/overmap_encounter/planetoid/rockplanet/explored) +"or" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/frame/machine, +/obj/effect/spawner/lootdrop/salvage_matter_bin, +/turf/open/floor/plating/asteroid/rockplanet/plasteel, +/area/overmap_encounter/planetoid/rockplanet/explored) +"oz" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/rockplanet/nanotrasen) +"oI" = ( +/obj/effect/turf_decal/spline/fancy/opaque/yellow{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/arrowaxe_small/center{ + dir = 8 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ruin/rockplanet/nanotrasen) +"oW" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/plasteel/rockvault, +/area/ruin/rockplanet/nanotrasen) +"oZ" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"pb" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"po" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"pH" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"pJ" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"pV" = ( +/obj/machinery/atmospherics/components/binary/pump/on/layer2{ + dir = 8; + name = "Air to Distro" + }, +/turf/open/floor/plating/asteroid/rockplanet/wet/atmos, +/area/ruin/rockplanet/nanotrasen) +"qp" = ( +/obj/effect/turf_decal/spline/fancy/opaque/yellow{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/tech/techmaint, +/area/ruin/rockplanet/nanotrasen) +"qL" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"qM" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"qU" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/metal/ten, +/obj/item/stack/cable_coil/random/five, +/obj/item/stack/cable_coil/random/five, +/obj/structure/cable/yellow{ + icon_state = "4-5" + }, +/turf/open/floor/plasteel/rockvault, +/area/ruin/rockplanet/nanotrasen) +"rc" = ( +/obj/effect/turf_decal/weather/dirt/corner{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"rD" = ( +/obj/structure/frame/machine, +/turf/open/floor/plating/dirt/jungle/lit, +/area/ruin/rockplanet/nanotrasen) +"rH" = ( +/obj/effect/turf_decal/weather/dirt/corner{ + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt/corner{ + dir = 8 + }, +/obj/structure/flora/driftlog, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"rW" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt/corner{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"rY" = ( +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/frame/machine, +/obj/machinery/light/small/directional/north, +/obj/effect/spawner/lootdrop/salvage_matter_bin, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"sn" = ( +/obj/structure/frame/machine, +/obj/item/stock_parts/manipulator/femto, +/turf/open/floor/plating/asteroid/rockplanet/plasteel, +/area/overmap_encounter/planetoid/rockplanet/explored) +"sy" = ( +/obj/effect/turf_decal/weather/dirt/corner{ + dir = 1 + }, +/obj/structure/railing, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"sK" = ( +/obj/effect/turf_decal/weather/dirt/corner, +/obj/effect/turf_decal/weather/dirt/corner{ + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt/corner{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"sR" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/closed/wall/mineral/sandstone, +/area/ruin/rockplanet/nanotrasen) +"sX" = ( +/obj/structure/cable/yellow{ + icon_state = "5-8" + }, +/turf/open/floor/plating/asteroid/rockplanet/wet/atmos, +/area/ruin/rockplanet/nanotrasen) +"sZ" = ( +/turf/closed/wall/rust, +/area/overmap_encounter/planetoid/rockplanet/explored) +"tA" = ( +/obj/structure/flora/tree/dead/tall/grey, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"tI" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/structure/flora/rock{ + icon_state = "redrocks1" + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"tN" = ( +/turf/closed/wall, +/area/overmap_encounter/planetoid/rockplanet/explored) +"tX" = ( +/obj/machinery/holopad/emergency/command, +/turf/open/floor/plasteel/tech, +/area/ruin/rockplanet/nanotrasen) +"uh" = ( +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"uo" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/obj/item/stack/cable_coil/random/five, +/obj/item/wirecutters, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"uu" = ( +/obj/machinery/door/airlock/engineering{ + dir = 1; + name = "Engineering" + }, +/turf/closed/wall, +/area/overmap_encounter/planetoid/rockplanet/explored) +"uB" = ( +/turf/open/floor/plasteel/tech, +/area/ruin/rockplanet/nanotrasen) +"uD" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"uK" = ( +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 6 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ruin/rockplanet/nanotrasen) +"uL" = ( +/obj/effect/turf_decal/weather/dirt/corner{ + dir = 1 + }, +/obj/structure/barricade/sandbags, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"uN" = ( +/obj/structure/table, +/obj/item/crowbar/large, +/obj/item/clothing/mask/breath{ + pixel_x = 14; + pixel_y = 7 + }, +/obj/item/clothing/mask/breath{ + pixel_x = 14; + pixel_y = 4 + }, +/obj/item/clothing/mask/breath{ + pixel_x = 14; + pixel_y = 1 + }, +/obj/item/stock_parts/capacitor/adv{ + pixel_x = -5; + pixel_y = 11 + }, +/turf/open/floor/plasteel/rockvault, +/area/ruin/rockplanet/nanotrasen) +"uT" = ( +/obj/structure/flora/tree/cactus, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"vi" = ( +/obj/structure/flora/rock{ + icon_state = "redrocks3" + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"vl" = ( +/mob/living/simple_animal/hostile/asteroid/goliath/beast/rockplanet, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"vw" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-10" + }, +/turf/open/floor/plasteel/rockvault, +/area/ruin/rockplanet/nanotrasen) +"vF" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"vL" = ( +/obj/structure/flora/rock{ + icon_state = "redrocks1" + }, +/turf/open/floor/plating/asteroid/rockplanet/wet/atmos, +/area/overmap_encounter/planetoid/rockplanet/explored) +"vM" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/floor/plating/asteroid/rockplanet/grass, +/area/overmap_encounter/planetoid/rockplanet/explored) +"vN" = ( +/obj/effect/turf_decal/spline/fancy/opaque/yellow{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"vS" = ( +/turf/open/floor/plating/asteroid/rockplanet/hull_plating, +/area/overmap_encounter/planetoid/rockplanet/explored) +"vW" = ( +/obj/effect/turf_decal/weather/dirt/corner, +/obj/effect/turf_decal/weather/dirt/corner{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"wf" = ( +/turf/open/floor/plasteel/rockvault, +/area/ruin/rockplanet/nanotrasen) +"wq" = ( +/obj/effect/turf_decal/weather/dirt/corner{ + dir = 8 + }, +/obj/structure/railing, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"wW" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"xk" = ( +/obj/effect/turf_decal/techfloor, +/obj/structure/cable{ + icon_state = "0-1" + }, +/obj/machinery/computer/monitor{ + dir = 1; + icon_state = "computer_broken" + }, +/obj/machinery/light/small/broken/directional/south, +/turf/open/floor/plasteel/tech, +/area/ruin/rockplanet/nanotrasen) +"xG" = ( +/obj/structure/cable{ + icon_state = "0-1" + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/rack, +/turf/open/floor/plasteel/rockvault, +/area/ruin/rockplanet/nanotrasen) +"yb" = ( +/obj/effect/turf_decal/weather/dirt/corner{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"yn" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/rockplanet/grass, +/area/overmap_encounter/planetoid/rockplanet/explored) +"yw" = ( +/obj/structure/flora/rock/asteroid{ + icon_state = "asteroid2" + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"zg" = ( +/obj/effect/turf_decal/spline/fancy/opaque/bottlegreen{ + dir = 1 + }, +/obj/effect/decal/cleanable/glass/plasma, +/turf/open/floor/plating/asteroid/rockplanet/lit{ + icon_state = "plastic" + }, +/area/ruin/rockplanet/nanotrasen) +"zh" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/spline/fancy/opaque/bottlegreen, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit{ + icon_state = "plastic" + }, +/area/ruin/rockplanet/nanotrasen) +"zp" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/obj/machinery/telecomms/receiver, +/turf/open/floor/plating{ + icon_state = "wet_cracked0" + }, +/area/ruin/rockplanet/nanotrasen) +"zw" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating/asteroid/rockplanet/plasteel, +/area/overmap_encounter/planetoid/rockplanet/explored) +"zx" = ( +/obj/machinery/power/smes/shuttle/precharged{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"zz" = ( +/obj/machinery/atmospherics/components/unary/tank/air{ + dir = 4; + piping_layer = 2 + }, +/turf/open/floor/plating/asteroid/rockplanet/wet/atmos, +/area/ruin/rockplanet/nanotrasen) +"zF" = ( +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/turf/closed/mineral/random/rockplanet, +/area/overmap_encounter/planetoid/rockplanet/explored) +"zH" = ( +/obj/structure/fence/door{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/obj/structure/curtain/cloth/grey, +/turf/open/floor/plating/asteroid/rockplanet/wet/atmos, +/area/ruin/rockplanet/nanotrasen) +"zU" = ( +/obj/item/banner/medical/mundane, +/turf/open/floor/plasteel/rockvault, +/area/ruin/rockplanet/nanotrasen) +"Ab" = ( +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/rockplanet/wet/atmos, +/area/ruin/rockplanet/nanotrasen) +"AS" = ( +/obj/effect/turf_decal/weather/dirt/corner{ + dir = 4 + }, +/obj/effect/turf_decal/weather/dirt/corner{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"AX" = ( +/obj/effect/turf_decal/spline/fancy/opaque/yellow{ + dir = 4 + }, +/obj/machinery/light/small/broken/directional/east, +/obj/effect/turf_decal/arrowaxe_small/left{ + dir = 8 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ruin/rockplanet/nanotrasen) +"Ba" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/turf/open/floor/plating/asteroid/rockplanet/plasteel, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Bc" = ( +/obj/machinery/power/smes/shuttle/precharged{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"Bt" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"BA" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/barricade/sandbags, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"BX" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt/corner{ + dir = 4 + }, +/obj/structure/barricade/sandbags, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Cm" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/closed/wall/mineral/sandstone, +/area/ruin/rockplanet/nanotrasen) +"CC" = ( +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating/dirt/jungle/lit, +/area/ruin/rockplanet/nanotrasen) +"CN" = ( +/turf/open/floor/plating/asteroid/rockplanet/stairs, +/area/overmap_encounter/planetoid/rockplanet/explored) +"CT" = ( +/obj/effect/turf_decal/weather/dirt/corner, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"DJ" = ( +/obj/structure/flora/rock/asteroid{ + icon_state = "asteroid2" + }, +/obj/structure/flora/driftlog, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"DP" = ( +/obj/effect/turf_decal/weather/dirt/corner, +/obj/effect/turf_decal/weather/dirt/corner{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"DR" = ( +/obj/structure/closet/crate, +/obj/item/weldingtool/mini, +/obj/item/clothing/mask/gas/welding, +/obj/item/reagent_containers/glass/bottle/welding_fuel, +/obj/item/reagent_containers/glass/bottle/welding_fuel, +/obj/item/reagent_containers/glass/bottle/welding_fuel, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"Ec" = ( +/turf/open/floor/plating/dirt/jungle/lit, +/area/ruin/rockplanet/nanotrasen) +"Em" = ( +/obj/structure/rack, +/obj/item/storage/firstaid{ + pixel_x = 3; + pixel_y = 8 + }, +/obj/item/reagent_containers/glass/rag{ + pixel_x = -3 + }, +/turf/open/floor/plating/asteroid/rockplanet/wet/atmos, +/area/ruin/rockplanet/nanotrasen) +"En" = ( +/obj/effect/decal/cleanable/robot_debris/gib, +/turf/open/floor/plating/asteroid/rockplanet/wet/atmos, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Er" = ( +/obj/structure/flora/rock{ + icon_state = "basalt2" + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Ew" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ruin/rockplanet/nanotrasen) +"EF" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/ruin/rockplanet/nanotrasen) +"EI" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/effect/gibspawner, +/obj/effect/decal/remains/human, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/turf/open/floor/plasteel/tech, +/area/ruin/rockplanet/nanotrasen) +"EK" = ( +/obj/effect/turf_decal/weather/dirt/corner, +/obj/structure/barricade/sandbags, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"EL" = ( +/obj/structure/table_frame, +/turf/open/floor/plasteel/rockvault, +/area/ruin/rockplanet/nanotrasen) +"EM" = ( +/obj/structure/frame, +/obj/item/stock_parts/micro_laser/high, +/turf/open/floor/engine/hull/interior, +/area/ruin/rockplanet/nanotrasen) +"Fk" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/rockplanet/wet/atmos, +/area/ruin/rockplanet/nanotrasen) +"FI" = ( +/obj/effect/turf_decal/spline/fancy/opaque/yellow{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ruin/rockplanet/nanotrasen) +"FJ" = ( +/turf/open/floor/plating/asteroid/rockplanet/wet/atmos, +/area/ruin/rockplanet/nanotrasen) +"FP" = ( +/obj/structure/frame/machine, +/turf/open/floor/plating/asteroid/rockplanet/plating/scorched, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Gu" = ( +/obj/structure/closet/crate, +/obj/item/gun/energy/laser, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"GA" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"GB" = ( +/obj/effect/turf_decal/spline/fancy/opaque/bottlegreen{ + dir = 5 + }, +/obj/item/chair/stool/bar, +/turf/open/floor/plating/asteroid/rockplanet/lit{ + icon_state = "plastic" + }, +/area/ruin/rockplanet/nanotrasen) +"GK" = ( +/turf/open/floor/plating/asteroid/rockplanet/wet/atmos, +/area/overmap_encounter/planetoid/rockplanet/explored) +"He" = ( +/obj/effect/turf_decal/weather/dirt/corner{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/rockplanet/pond, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Hi" = ( +/obj/effect/turf_decal/weather/dirt/corner{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Hr" = ( +/obj/structure/rack, +/obj/item/ammo_box/magazine/m45, +/obj/item/ammo_box/magazine/m45{ + pixel_x = -5 + }, +/obj/item/ammo_box/magazine/m45{ + pixel_x = 7 + }, +/obj/item/gun/ballistic/automatic/pistol/m1911/no_mag, +/turf/open/floor/plating/ashplanet/rocky, +/area/ruin/rockplanet/nanotrasen) +"HG" = ( +/obj/structure/flora/driftlog, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"HL" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/freezer{ + dir = 8; + name = "Head" + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ruin/rockplanet/nanotrasen) +"Io" = ( +/obj/structure/railing{ + dir = 10 + }, +/turf/open/floor/plating/asteroid/rockplanet/hull_plating, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Ir" = ( +/obj/structure/railing, +/obj/structure/closet/crate, +/obj/item/gun/energy/laser, +/obj/item/stock_parts/cell/high, +/turf/open/floor/plating/asteroid/rockplanet/hull_plating, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Iw" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/turf_decal/weather/dirt/corner{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"IG" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/rockvault, +/area/ruin/rockplanet/nanotrasen) +"IH" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"IX" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/effect/turf_decal/weather/dirt/corner, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"IY" = ( +/obj/effect/decal/cleanable/glass/plasma, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"Jf" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/turf/open/floor/plating, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Jy" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-6" + }, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"JA" = ( +/obj/effect/turf_decal/weather/dirt/corner, +/obj/structure/flora/rock{ + icon_state = "redrocks3" + }, +/obj/effect/turf_decal/weather/dirt/corner{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"JL" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/rockplanet/grass, +/area/overmap_encounter/planetoid/rockplanet/explored) +"JN" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"Kl" = ( +/obj/effect/turf_decal/weather/dirt/corner, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Kn" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"KA" = ( +/obj/structure/railing{ + dir = 6 + }, +/obj/structure/chair/plastic{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/rockplanet/hull_plating, +/area/overmap_encounter/planetoid/rockplanet/explored) +"KL" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/rockvault, +/area/ruin/rockplanet/nanotrasen) +"KN" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"KW" = ( +/obj/effect/decal/cleanable/robot_debris/gib, +/obj/item/stack/sheet/metal/five{ + pixel_x = 3; + pixel_y = 9 + }, +/turf/open/floor/plating/asteroid/rockplanet/wet/atmos, +/area/overmap_encounter/planetoid/rockplanet/explored) +"KX" = ( +/obj/structure/barricade/sandbags, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Le" = ( +/obj/effect/turf_decal/spline/plain/transparent/green{ + dir = 4; + icon_state = "spline_plain_cee" + }, +/obj/structure/frame/machine, +/obj/effect/spawner/lootdrop/salvage_matter_bin, +/turf/open/floor/plasteel/tech/grid, +/area/ruin/rockplanet/nanotrasen) +"Lk" = ( +/turf/open/floor/plasteel/grimy, +/area/ruin/rockplanet/nanotrasen) +"Ly" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"LA" = ( +/obj/structure/cable{ + icon_state = "4-10" + }, +/turf/open/floor/plating/asteroid/rockplanet/plating/scorched, +/area/overmap_encounter/planetoid/rockplanet/explored) +"LN" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"LW" = ( +/obj/structure/rack, +/obj/machinery/recharger{ + pixel_x = 5; + pixel_y = 7 + }, +/obj/item/stock_parts/cell{ + pixel_x = -7; + pixel_y = 8 + }, +/obj/item/stock_parts/cell{ + pixel_x = -7; + pixel_y = 2 + }, +/turf/open/floor/plasteel/rockvault, +/area/ruin/rockplanet/nanotrasen) +"LX" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/structure/cursed_money{ + pixel_x = 3; + pixel_y = 10 + }, +/turf/open/floor/plasteel/tech, +/area/ruin/rockplanet/nanotrasen) +"Md" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Me" = ( +/obj/structure/table, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = 10; + pixel_y = 10 + }, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = 1; + pixel_y = 7 + }, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = 10; + pixel_y = 3 + }, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = 1; + pixel_y = 3 + }, +/turf/open/floor/plasteel/rockvault, +/area/ruin/rockplanet/nanotrasen) +"Mi" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/rockplanet/pond, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Ms" = ( +/obj/structure/flora/rock{ + icon_state = "basalt" + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"MV" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"MW" = ( +/obj/structure/salvageable/autolathe, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plasteel/rockvault, +/area/ruin/rockplanet/nanotrasen) +"NV" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/obj/structure/railing/corner{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Oc" = ( +/obj/structure/cable/yellow{ + icon_state = "4-5" + }, +/turf/open/floor/plasteel/rockvault, +/area/ruin/rockplanet/nanotrasen) +"Op" = ( +/turf/closed/wall/yesdiag, +/area/ruin/rockplanet/nanotrasen) +"Or" = ( +/mob/living/simple_animal/hostile/asteroid/basilisk/whitesands, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Ot" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/general/visible/layer2{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/ruin/rockplanet/nanotrasen) +"Ox" = ( +/obj/effect/turf_decal/spline/fancy/opaque/yellow{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/techfloor/hole, +/turf/open/floor/plasteel/tech/techmaint, +/area/ruin/rockplanet/nanotrasen) +"OM" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/turf/open/floor/plating/asteroid/rockplanet/pond, +/area/overmap_encounter/planetoid/rockplanet/explored) +"OP" = ( +/obj/structure/rack, +/obj/item/storage/fancy/cigarettes/cigars, +/obj/item/lighter/greyscale, +/turf/open/floor/plating/asteroid/rockplanet/plasteel, +/area/overmap_encounter/planetoid/rockplanet/explored) +"OS" = ( +/obj/structure/rack, +/obj/item/reagent_containers/glass/bottle/morphine{ + pixel_x = 4; + pixel_y = 6 + }, +/obj/item/reagent_containers/hypospray/medipen/morphine{ + pixel_y = -3 + }, +/turf/open/floor/plasteel/rockvault, +/area/ruin/rockplanet/nanotrasen) +"OY" = ( +/obj/item/reagent_containers/glass/bucket/wooden{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/item/stack/sheet/cotton/cloth/ten{ + pixel_x = -15; + pixel_y = 8 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/floor/plating/asteroid/rockplanet/grass, +/area/overmap_encounter/planetoid/rockplanet/explored) +"OZ" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Pn" = ( +/obj/machinery/power/smes/engineering{ + charge = 1000 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plating/ashplanet/rocky, +/area/ruin/rockplanet/nanotrasen) +"PD" = ( +/obj/structure/bed{ + icon_state = "dirty_mattress"; + name = "dirty mattress" + }, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"PH" = ( +/obj/structure/frame/machine, +/turf/open/floor/plating/asteroid/rockplanet/hull_plating, +/area/overmap_encounter/planetoid/rockplanet/explored) +"PI" = ( +/obj/effect/turf_decal/weather/dirt, +/turf/open/floor/plating/asteroid/rockplanet/pond, +/area/overmap_encounter/planetoid/rockplanet/explored) +"PX" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/table, +/obj/machinery/computer/secure_data/laptop{ + dir = 8; + pixel_x = 2; + pixel_y = 6 + }, +/turf/open/floor/plating/asteroid/rockplanet/hull_plating, +/area/ruin/rockplanet/nanotrasen) +"Qc" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/command{ + dir = 8; + name = "Bridge"; + req_access_txt = "19" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ruin/rockplanet/nanotrasen) +"Qv" = ( +/turf/template_noop, +/area/template_noop) +"Rj" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/obj/effect/decal/cleanable/glass/plasma, +/turf/open/floor/plasteel/tech, +/area/ruin/rockplanet/nanotrasen) +"Rk" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel, +/area/ruin/rockplanet/nanotrasen) +"Rn" = ( +/obj/machinery/power/shuttle/engine/electric, +/turf/open/floor/plating/asteroid/rockplanet/hull_plating, +/area/overmap_encounter/planetoid/rockplanet/explored) +"RB" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 10 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"RM" = ( +/obj/effect/turf_decal/weather/dirt/corner{ + dir = 1 + }, +/obj/structure/flora/rock{ + icon_state = "redrocks3" + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"RN" = ( +/obj/structure/fence/door{ + dir = 4 + }, +/obj/structure/curtain/cloth/grey, +/turf/open/floor/plating/asteroid/rockplanet/wet/atmos, +/area/ruin/rockplanet/nanotrasen) +"Sh" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 5 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Si" = ( +/obj/machinery/power/shieldwallgen/atmos{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/rockplanet/hull_plating, +/area/overmap_encounter/planetoid/rockplanet/explored) +"So" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/obj/item/stack/sheet/metal/five, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"SH" = ( +/obj/effect/turf_decal/weather/dirt/corner{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"SN" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 8 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Tb" = ( +/obj/structure/mecha_wreckage/ripley/firefighter, +/turf/open/floor/plating/asteroid/rockplanet/plating/scorched, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Tn" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel, +/area/ruin/rockplanet/nanotrasen) +"TJ" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/engineering{ + dir = 1; + name = "Engineering" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/patterned/grid, +/area/ruin/rockplanet/nanotrasen) +"TL" = ( +/obj/effect/turf_decal/spline/fancy/opaque/yellow{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"TT" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Ui" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/techfloor, +/obj/structure/frame/computer{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ruin/rockplanet/nanotrasen) +"UX" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/maintenance_hatch{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"Vy" = ( +/obj/effect/decal/cleanable/xenoblood/xgibs, +/turf/open/floor/plating/asteroid/rockplanet/wet/atmos, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Wl" = ( +/obj/structure/barricade/sandbags, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Wm" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/structure/flora/driftlog, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Xb" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 9 + }, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Xj" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/rockplanet/plasteel, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Xk" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light/small/broken/directional/south, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"Xq" = ( +/obj/structure/flora/rock{ + icon_state = "redrocks1" + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Xy" = ( +/obj/machinery/door/airlock/external{ + dir = 4 + }, +/turf/open/floor/engine/hull/interior, +/area/ruin/rockplanet/nanotrasen) +"XH" = ( +/turf/open/floor/plating/asteroid/rockplanet/pond, +/area/overmap_encounter/planetoid/rockplanet/explored) +"XK" = ( +/turf/closed/wall/rust, +/area/ruin/rockplanet/nanotrasen) +"XX" = ( +/obj/structure/mineral_door/sandstone, +/turf/open/floor/plating/dirt/jungle/lit, +/area/ruin/rockplanet/nanotrasen) +"Yl" = ( +/obj/structure/table, +/obj/item/modular_computer/laptop{ + pixel_x = 3; + pixel_y = 8 + }, +/turf/open/floor/plasteel/rockvault, +/area/ruin/rockplanet/nanotrasen) +"Ym" = ( +/turf/closed/wall/yesdiag, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Yq" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/door_assembly/door_assembly_com{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ruin/rockplanet/nanotrasen) +"Yy" = ( +/mob/living/simple_animal/hostile/asteroid/gutlunch, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"YC" = ( +/obj/structure/toilet{ + dir = 8 + }, +/obj/structure/curtain, +/turf/open/floor/plating, +/area/ruin/rockplanet/nanotrasen) +"YQ" = ( +/turf/closed/wall/mineral/sandstone, +/area/ruin/rockplanet/nanotrasen) +"YT" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/light/small/broken/directional/south, +/turf/open/floor/plasteel/telecomms_floor, +/area/ruin/rockplanet/nanotrasen) +"YW" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/manifold/general/visible/layer2, +/obj/structure/cable/yellow{ + icon_state = "1-10" + }, +/turf/open/floor/plating/asteroid/rockplanet/wet/atmos, +/area/ruin/rockplanet/nanotrasen) +"Zc" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "6-8" + }, +/turf/open/floor/plasteel/rockvault, +/area/ruin/rockplanet/nanotrasen) +"Ze" = ( +/obj/structure/closet/crate, +/obj/item/storage/toolbox/emergency, +/obj/item/storage/toolbox/emergency, +/obj/item/stack/sheet/metal/ten, +/turf/open/floor/plating/asteroid/rockplanet/plasteel, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Zf" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/machinery/light/small/broken/directional/south, +/obj/structure/rack, +/obj/item/stock_parts/subspace/crystal{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/stock_parts/subspace/filter, +/obj/item/circuitboard/machine/telecomms/relay, +/turf/open/floor/plating{ + icon_state = "wet_cracked2" + }, +/area/ruin/rockplanet/nanotrasen) +"Zy" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/rockplanet/nanotrasen) +"ZE" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/turf_decal/weather/dirt/corner{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"ZO" = ( +/obj/structure/rack, +/turf/open/floor/plasteel/rockvault, +/area/ruin/rockplanet/nanotrasen) +"ZS" = ( +/obj/effect/turf_decal/weather/dirt{ + dir = 6 + }, +/obj/effect/turf_decal/weather/dirt/corner{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"ZZ" = ( +/obj/effect/turf_decal/spline/fancy/opaque/bottlegreen{ + dir = 1 + }, +/obj/machinery/light/small/broken/directional/north, +/obj/structure/table_frame, +/turf/open/floor/plating/asteroid/rockplanet/lit{ + icon_state = "plastic" + }, +/area/ruin/rockplanet/nanotrasen) + +(1,1,1) = {" +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +iN +iN +iN +iN +iN +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +"} +(2,1,1) = {" +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +iN +iN +iN +Kl +Hi +iN +vi +iN +iN +iN +iN +Kl +Hi +iN +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +"} +(3,1,1) = {" +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +iN +iN +iN +iN +Kl +pJ +Md +TT +iN +iN +iN +iN +iN +iN +aX +Ly +Hi +iN +iN +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +"} +(4,1,1) = {" +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +iN +kV +iN +vi +iN +aX +gY +gY +TT +iN +iN +iN +iN +iN +iN +aX +gY +Ly +Hi +iN +iN +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +"} +(5,1,1) = {" +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +iN +iN +iN +iN +iN +aX +gY +gY +TT +iN +HG +iN +iN +iN +iN +rc +RB +gY +TT +iN +iN +iN +Qv +Qv +Qv +Qv +Qv +Qv +Qv +"} +(6,1,1) = {" +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +iN +iN +uT +iN +Er +aX +gY +pH +yb +iN +iN +iN +Kl +Hi +iN +iN +aX +gY +TT +iN +iN +iN +Qv +Qv +Qv +Qv +Qv +Qv +Qv +"} +(7,1,1) = {" +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +iN +iN +iN +iN +iN +iN +aX +gY +TT +iN +iN +iN +iN +rc +yb +iN +iN +aX +gY +TT +iN +iN +iN +Qv +Qv +Qv +Qv +Qv +Qv +Qv +"} +(8,1,1) = {" +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +iN +iN +tA +dJ +iN +iN +DP +KN +sK +Hi +iN +iN +iN +iN +iN +vl +Kl +Md +gY +TT +iN +iN +kV +iN +Qv +Qv +Qv +Qv +Qv +Qv +"} +(9,1,1) = {" +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +iN +iN +iN +iN +iN +iN +aX +gY +wW +TT +iN +iN +Yy +iN +iN +iN +aX +gY +gY +TT +iN +iN +iN +iN +Qv +Qv +Qv +Qv +Qv +Qv +"} +(10,1,1) = {" +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +iN +iN +iN +iN +iN +iN +aX +gY +gY +TT +iN +iN +iN +iN +iN +vi +DP +SN +gY +TT +vi +iN +iN +iN +Qv +Qv +Qv +Qv +Qv +Qv +"} +(11,1,1) = {" +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +jm +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +iN +Ms +iN +iN +iN +Kl +Md +gY +gY +TT +iN +iN +iN +iN +iN +iN +aX +gY +gY +TT +iN +iN +iN +iN +Qv +Qv +Qv +Qv +Qv +Qv +"} +(12,1,1) = {" +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +jm +jm +jm +jm +jm +Qv +Qv +Qv +Qv +iN +iN +iN +iN +iN +kV +aX +gY +gY +gY +TT +iN +KX +KX +KX +KX +iN +aX +gY +gY +TT +iN +iN +Ms +iN +Qv +Qv +Qv +Qv +Qv +Qv +"} +(13,1,1) = {" +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +Qv +Qv +iN +iN +iN +iN +iN +iN +aX +gY +gY +gY +TT +KX +iN +iN +iN +iN +EK +Md +gY +pH +yb +iN +iN +iN +iN +iN +Qv +Qv +Qv +Qv +Qv +"} +(14,1,1) = {" +Qv +Qv +Qv +Qv +Qv +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +Qv +Xq +iN +iN +KX +KX +KX +BA +gY +gY +pH +yb +iN +iN +iN +gn +DJ +aX +gY +gY +TT +iN +iN +iN +iN +iN +vi +Qv +Qv +Qv +Qv +Qv +"} +(15,1,1) = {" +Qv +Qv +Qv +Qv +Qv +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +iN +KX +iN +iN +iN +rc +RB +gY +TT +iN +iN +iN +yw +aw +iN +aX +gY +mW +fd +iN +iN +Yy +iN +iN +iN +Qv +Qv +Qv +Qv +Qv +"} +(16,1,1) = {" +Qv +Qv +Qv +Qv +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +iN +iN +iN +iN +iN +iN +aX +gY +TT +iN +iN +iN +HG +yw +vi +DP +qM +nB +uL +iN +Xq +iN +iN +iN +iN +iN +Qv +Qv +Qv +Qv +"} +(17,1,1) = {" +Qv +Qv +Qv +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +iN +Er +iN +iN +iN +vi +aX +gY +TT +iN +iN +iN +iN +Kl +Hi +aX +gY +Ly +cU +iN +iN +iN +iN +Er +iN +iN +Qv +Qv +Qv +Qv +"} +(18,1,1) = {" +Qv +Qv +Qv +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +iN +iN +iN +iN +iN +iN +aX +pH +sy +bv +bv +Io +TT +aX +TT +aX +gY +gY +TT +KX +iN +iN +iN +iN +tA +iN +Qv +Qv +Qv +Qv +"} +(19,1,1) = {" +Qv +Qv +Qv +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +iN +iN +Yy +iN +iN +Or +rc +vW +wq +vS +cO +Ir +TT +aX +Ly +Iw +gY +gY +Ly +Wl +pJ +Hi +vi +iN +iN +dJ +jm +jm +jm +Qv +"} +(20,1,1) = {" +Qv +Qv +Qv +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +iN +iN +iN +iN +gn +iN +Kl +Md +dM +vS +PX +KA +TT +aX +gY +rW +RB +gY +Ym +sZ +jI +Ym +tN +iN +jm +jm +jm +jm +jm +Qv +"} +(21,1,1) = {" +Qv +Qv +Qv +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +iN +iN +iN +iN +Kl +Md +gY +dM +vS +CN +CN +TT +rc +OZ +vW +Md +Ym +sZ +Ba +nf +tN +jm +jm +jm +jm +jm +jm +jm +Qv +"} +(22,1,1) = {" +Qv +Qv +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +iN +iN +Xq +iN +aX +gY +gY +NV +vF +CT +SH +iN +iN +iN +aX +gY +gY +vS +nf +Tb +Ym +jm +jm +jm +jm +jm +jm +Qv +Qv +"} +(23,1,1) = {" +Qv +Qv +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +iN +iN +iN +iN +iN +iN +iN +aX +gY +gY +TT +Kl +Md +TT +iN +iN +iN +aX +gY +gY +mu +Si +sZ +jm +jm +jm +jm +jm +jm +jm +Qv +Qv +"} +(24,1,1) = {" +Qv +Qv +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +iN +iN +iN +iN +kV +iN +iN +iN +aX +gY +gY +TT +aX +gY +jC +iN +iN +iN +DP +lw +gY +rW +tI +jm +jm +jm +jm +jm +jm +jm +jm +Qv +Qv +"} +(25,1,1) = {" +Qv +Qv +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +iN +iN +vi +iN +iN +iN +iN +iN +vi +aX +IH +gY +TT +Wm +gY +TT +Kl +Hi +iN +aX +gY +Xb +rH +jm +jm +jm +jm +jm +jm +jm +jm +jm +Qv +Qv +"} +(26,1,1) = {" +Qv +Qv +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +iN +iN +iN +iN +Er +iN +iN +iN +iN +rc +ZE +gY +TT +aX +gY +TT +aX +TT +Kl +Md +gY +gY +Ly +jm +jm +jm +jm +jm +jm +jm +jm +jm +Qv +Qv +"} +(27,1,1) = {" +Qv +Qv +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +iN +uT +iN +iN +iN +iN +iN +iN +vl +iN +iN +aX +gY +TT +rc +OZ +yb +aX +Ly +Md +gY +gY +EM +XK +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +Qv +"} +(28,1,1) = {" +Qv +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +iN +iN +iN +iN +iN +iN +iN +iN +iN +iN +jD +Md +gY +Ly +JA +pJ +pJ +Md +gY +gY +lg +cl +Bc +XK +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +Qv +"} +(29,1,1) = {" +Qv +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +pJ +iN +iN +iN +iN +iN +Xq +iN +iN +iN +iN +aX +gY +gY +gY +oZ +gY +gY +gY +gY +Bt +lg +zx +Xk +XK +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +Qv +"} +(30,1,1) = {" +Qv +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +vM +Sh +Hi +iN +iN +tA +iN +iN +iN +Er +Kl +Md +gY +gY +YQ +Xy +XK +YQ +XX +XK +XK +XK +kN +pb +XK +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +Qv +"} +(31,1,1) = {" +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +PI +gY +gY +Ly +Hi +iN +iN +iN +iN +iN +iN +aX +gY +gY +mu +YQ +uh +XK +zg +zh +lg +Le +XK +XK +UX +XK +on +Zy +Zy +jm +jm +jm +jm +jm +jm +Qv +Qv +"} +(32,1,1) = {" +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +He +OM +gY +yn +Ly +Hi +iN +iN +vi +iN +iN +aX +gY +cr +ZS +YQ +dB +lg +ZZ +mz +lg +YT +lg +fw +oz +Kn +ga +LW +Zy +on +jm +jm +jm +jm +jm +Qv +Qv +"} +(33,1,1) = {" +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +XH +He +OM +JL +hV +TT +iN +iN +iN +iN +iN +cP +gY +YQ +YQ +YQ +fM +lg +GB +gs +lg +ei +XK +Rk +Jy +wf +df +Oc +Hr +Zy +on +jm +jm +jm +jm +Qv +Qv +"} +(34,1,1) = {" +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +XH +PI +OY +vM +TT +uT +kV +iN +Kl +pJ +Iw +gY +Cm +Zf +lg +uK +XK +XK +ip +lg +qL +XK +rY +Ot +kS +YW +Zc +wf +qU +on +jm +jm +jm +jm +Qv +Qv +"} +(35,1,1) = {" +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +XH +He +Mi +jm +yb +iN +iN +iN +aX +gY +uD +YQ +sR +Ec +CC +GA +Ox +hy +vN +FI +qp +TJ +Tn +EF +Zy +IG +Ab +cd +sX +on +jm +jm +jm +jm +Qv +Qv +"} +(36,1,1) = {" +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +XH +jm +jm +iN +Or +iN +Kl +AS +OZ +ZE +YQ +zp +Ec +fc +rD +TL +AX +oI +il +iZ +XK +lg +aL +Zy +pV +Fk +vw +wf +on +jm +jm +jm +jm +Qv +Qv +"} +(37,1,1) = {" +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +iN +iN +iN +iN +aX +Ly +Hi +aX +YQ +rD +uo +lg +lg +ba +XK +Qc +lg +HL +XK +uh +uh +on +zz +KL +Pn +xG +on +jm +jm +jm +jm +Qv +Qv +"} +(38,1,1) = {" +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +iN +iN +iN +iN +KX +aX +gY +IX +Md +YQ +So +fK +XK +uh +MV +lg +Ew +lg +fe +lg +Gu +on +Zy +Zy +zH +Zy +Zy +on +on +jm +jm +jm +Qv +Qv +"} +(39,1,1) = {" +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +iN +iN +iN +Er +iN +BA +mW +uD +gY +XK +DR +lg +lg +Lk +PD +lg +Ew +lg +YC +lg +lg +Zy +Yl +FJ +KL +MW +Em +ZO +Zy +jm +jm +Qv +Qv +Qv +"} +(40,1,1) = {" +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +Xq +iN +iN +Kl +pJ +Md +gY +BX +jw +Op +XK +Op +XK +XK +lg +lg +Yq +XK +XK +XK +jm +Zy +kf +wf +Fk +wf +FJ +wf +Zy +jm +jm +Qv +Qv +Qv +"} +(41,1,1) = {" +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +iN +iN +iN +vi +aX +gY +gY +gY +Ly +AS +OZ +RB +gY +XK +LN +is +uB +EI +JN +xk +lg +jm +on +uN +FJ +aN +oW +wf +zU +on +jm +jm +Qv +Qv +Qv +"} +(42,1,1) = {" +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +iN +iN +iN +iN +Kl +Md +gY +po +gY +gY +TT +iN +kV +jm +jm +LX +hc +uh +tX +fF +Ui +lg +jm +on +Me +wf +FJ +wf +wf +FJ +Zy +jm +Qv +Qv +Qv +Qv +"} +(43,1,1) = {" +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +iN +iN +Yy +Kl +Md +Ym +sZ +gY +gY +pH +RM +iN +iN +jm +jm +jm +zF +IY +jl +gO +Rj +lg +jm +on +EL +FJ +wf +hm +OS +hm +Zy +jm +Qv +Qv +Qv +Qv +"} +(44,1,1) = {" +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +iN +vi +iN +iN +aX +Ym +tN +Bt +gY +gY +TT +iN +iN +iN +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +on +on +RN +Zy +Zy +on +on +jm +Qv +Qv +Qv +Qv +"} +(45,1,1) = {" +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +iN +iN +tA +iN +aX +uu +eo +eo +tN +Ym +TT +iN +Ms +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +vL +GK +GK +GK +GK +GK +jm +jm +Qv +Qv +Qv +Qv +Qv +"} +(46,1,1) = {" +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +iN +iN +iN +Ym +sZ +nf +nf +nf +Ze +sZ +TT +iN +iN +jm +jm +jm +jm +jm +jm +jm +jm +jm +GK +GK +Vy +GK +GK +jm +jm +jm +jm +jm +Qv +Qv +Qv +Qv +Qv +"} +(47,1,1) = {" +Qv +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +iN +iN +iN +sZ +sZ +sZ +nf +Xj +OP +tN +Ym +TT +kV +iN +jm +jm +jm +jm +jm +jm +jm +jm +GK +GK +GK +GK +GK +jm +jm +jm +jm +jm +jm +Qv +Qv +Qv +Qv +Qv +"} +(48,1,1) = {" +Qv +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +iN +iN +iN +tN +ha +zw +oq +or +Jf +Ym +OZ +yb +iN +jm +jm +jm +jm +jm +jm +jm +GK +GK +GK +KW +GK +GK +GK +jm +jm +jm +jm +jm +jm +Qv +Qv +Qv +Qv +Qv +"} +(49,1,1) = {" +Qv +Qv +Qv +jm +jm +jm +iN +iN +iN +iN +Ms +iN +sZ +LA +eo +sZ +sn +Jf +Ym +iN +iN +iN +dJ +jm +jm +jm +jm +jm +En +GK +GK +GK +GK +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +Qv +Qv +Qv +Qv +Qv +"} +(50,1,1) = {" +Qv +Qv +Qv +jm +jm +jm +dJ +iN +iN +iN +iN +iN +PH +lz +eo +sZ +Jf +Ym +iN +iN +iN +Qv +jm +jm +jm +jm +jm +Vy +GK +GK +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +Qv +Qv +Qv +Qv +Qv +Qv +"} +(51,1,1) = {" +Qv +Qv +Qv +Qv +jm +Qv +iN +iN +iN +vi +iN +iN +Rn +FP +sZ +Ym +iN +iN +vi +iN +Qv +Qv +jm +jm +jm +GK +GK +GK +GK +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +Qv +Qv +Qv +Qv +Qv +Qv +Qv +"} +(52,1,1) = {" +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +iN +iN +iN +iN +vS +tN +Ym +iN +kV +Yy +iN +iN +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +"} +(53,1,1) = {" +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +iN +iN +uT +iN +sZ +Ym +iN +iN +tA +iN +iN +Qv +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +"} +(54,1,1) = {" +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +iN +iN +iN +iN +vi +iN +iN +Qv +Qv +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +"} +(55,1,1) = {" +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +iN +iN +Er +iN +iN +Qv +Qv +Qv +Qv +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +"} +(56,1,1) = {" +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +iN +iN +iN +iN +Qv +Qv +Qv +Qv +Qv +Qv +Qv +jm +jm +jm +jm +jm +jm +jm +jm +jm +jm +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +"} +(57,1,1) = {" +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +jm +jm +jm +jm +jm +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +"} +(58,1,1) = {" +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +Qv +"} diff --git a/_maps/map_catalogue.txt b/_maps/map_catalogue.txt index e4f2881948b3..defa6335817d 100644 --- a/_maps/map_catalogue.txt +++ b/_maps/map_catalogue.txt @@ -290,6 +290,10 @@ Find the key for using this catalogue in "map_catalogue_key.txt" Size = (x = 9)(y = 9)(z = 1) Tags = "Boss Combat Challenge", "Major Loot", "Hazardous", "Inhospitable" + File Name = "_maps\RandomRuins\RockRuins\rockplanet_nomadcrash.dmm" + Size = (x = 58)(y = 48)(z = 1) + Tags = "Medium Combat Challenge", "Medium Loot", "Hazardous", "Hospitable" + SandRuins: File Name = "_maps\RandomRuins\Ruins\whitesands_surface_assaultpodcrash.dmm" @@ -507,6 +511,10 @@ Find the key for using this catalogue in "map_catalogue_key.txt" Size = (x = 37)(y = 43)(z = 1) Tags = "Medium Combat Challenge", "Medium Loot", "Liveable" + File Name = "_maps\RandomRuins\BeachRuins\beach_float_resort.dmm" + Size = (x = 38)(y = 52)(z = 1) + Tags = "No Combat", "Minor Loot", "Liveable" + Deprecated: File Name = "_maps\RandomRuins\deprecated\jungle_surface_tumblr_sexyman.dmm" Size = (x = 30)(y = 20)(z = 1) @@ -565,7 +573,7 @@ Find the key for using this catalogue in "map_catalogue_key.txt" Tags = "No Combat", "Medium Loot", "Shelter" - Waste Ruins: + Waste Ruins: File name ="_maps\RandomRuins\wasteruins\wasteplanet_clowncrash.dmm" Size = (x = 11)(y = 12)(z = 1) Tags = "No Combat", "Minor Loot", "Shelter" "hospitable" diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 36da2cc3ae7d..7df3a453acfb 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -134,8 +134,11 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list(/obj/item/gun))) #define EMBED_POINTY_SUPERIOR list("embed_chance" = 100, "ignore_throwspeed_threshold" = TRUE) //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 //Gun trigger guards #define TRIGGER_GUARD_ALLOW_ALL -1 diff --git a/code/__DEFINES/keybinding.dm b/code/__DEFINES/keybinding.dm index a1494018d434..97b9c9d82aad 100644 --- a/code/__DEFINES/keybinding.dm +++ b/code/__DEFINES/keybinding.dm @@ -42,6 +42,7 @@ //Human #define COMSIG_KB_HUMAN_QUICKEQUIP_DOWN "keybinding_human_quickequip_down" #define COMSIG_KB_HUMAN_QUICKEQUIPBELT_DOWN "keybinding_human_quickequipbelt_down" +#define COMSIG_KB_HUMAN_UNIQUEACTION "keybinding_uniqueaction" #define COMSIG_KB_HUMAN_BAGEQUIP_DOWN "keybinding_human_bagequip_down" #define COMSIG_KB_HUMAN_EQUIPMENTSWAP_DOWN "keybinding_human_equipmentswap_down" #define COMSIG_KB_HUMAN_SUITEQUIP_DOWN "keybinding_human_suitequip_down" diff --git a/code/__DEFINES/obj_flags.dm b/code/__DEFINES/obj_flags.dm index 570edb76d8c4..865470774039 100644 --- a/code/__DEFINES/obj_flags.dm +++ b/code/__DEFINES/obj_flags.dm @@ -64,3 +64,13 @@ /// Flags for the pod_flags var on /obj/structure/closet/supplypod #define FIRST_SOUNDS (1<<0) // If it shouldn't play sounds the first time it lands, used for reverse mode + + +// Bullet hit sounds +#define PROJECTILE_HITSOUND_FLESH (1<<0) +#define PROJECTILE_HITSOUND_NON_LIVING (1<<1) +#define PROJECTILE_HITSOUND_GLASS (1<<2) +#define PROJECTILE_HITSOUND_STONE (1<<3) +#define PROJECTILE_HITSOUND_METAL (1<<4) +#define PROJECTILE_HITSOUND_WOOD (1<<5) +#define PROJECTILE_HITSOUND_SNOW (1<<6) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 56f75905b7c4..1048aaa5c861 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -39,7 +39,6 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/moth_markings, GLOB.moth_markings_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/spider_legs, GLOB.spider_legs_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/spider_spinneret, GLOB.spider_spinneret_list) - init_sprite_accessory_subtypes(/datum/sprite_accessory/spider_mandibles, GLOB.spider_mandibles_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/kepori_feathers, GLOB.kepori_feathers_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/kepori_body_feathers, GLOB.kepori_body_feathers_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/kepori_tail_feathers, GLOB.kepori_tail_feathers_list) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index e824b3d82273..8838ba324530 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -78,8 +78,6 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/spider_legs, GLOB.spider_legs_list) if(!GLOB.spider_spinneret_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/spider_spinneret, GLOB.spider_spinneret_list) - if(!GLOB.spider_mandibles_list.len) - init_sprite_accessory_subtypes(/datum/sprite_accessory/spider_mandibles, GLOB.spider_mandibles_list) if(!GLOB.kepori_feathers_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/kepori_feathers, GLOB.kepori_feathers_list) if(!GLOB.kepori_tail_feathers_list.len) @@ -118,7 +116,6 @@ "moth_wings" = pick(GLOB.moth_wings_list), "face_markings" = pick(GLOB.face_markings_list), "spider_legs" = pick(GLOB.spider_legs_list), - "spider_mandibles" = pick(GLOB.spider_mandibles_list), "spider_spinneret" = pick(GLOB.spider_spinneret_list), "spines" = pick(GLOB.spines_list), "squid_face" = pick(GLOB.squid_face_list), @@ -244,7 +241,7 @@ GLOBAL_LIST_EMPTY(species_list) 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) +/proc/do_mob(mob/user , mob/target, time = 3 SECONDS, uninterruptible = FALSE, progress = TRUE, datum/callback/extra_checks = null, ignore_loc_change = FALSE) if(!user || !target) return FALSE @@ -284,7 +281,12 @@ GLOBAL_LIST_EMPTY(species_list) drifting = FALSE user_loc = user.loc - if((!drifting && user.loc != user_loc) || target.loc != target_loc || user.get_active_held_item() != holding || user.incapacitated() || (extra_checks && !extra_checks.Invoke())) + + 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)) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index efd551badefb..d8aa5e22b1de 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -32,6 +32,27 @@ else if(dx<0) .+=360 + +////Tile coordinates (x, y) to absolute coordinates (in number of pixels). Center of a tile is generally assumed to be (16,16), but can be offset. +#define ABS_COOR(c) (((c - 1) * 32) + 16) +#define ABS_COOR_OFFSET(c, o) (((c - 1) * 32) + o) + +/proc/get_angle_with_scatter(atom/start, atom/end, scatter, x_offset = 16, y_offset = 16) + var/end_apx + var/end_apy + if(isliving(end)) //Center mass. + end_apx = ABS_COOR(end.x) + end_apy = ABS_COOR(end.y) + else //Exact pixel. + end_apx = ABS_COOR_OFFSET(end.x, x_offset) + end_apy = ABS_COOR_OFFSET(end.y, y_offset) + scatter = ((rand(0, min(scatter, 45))) * (prob(50) ? 1 : -1)) //Up to 45 degrees deviation to either side. + . = round((90 - ATAN2(end_apx - ABS_COOR(start.x), end_apy - ABS_COOR(start.y))), 1) + scatter + if(. < 0) + . += 360 + else if(. >= 360) + . -= 360 + /proc/Get_Pixel_Angle(y, x)//for getting the angle when animating something's pixel_x and pixel_y if(!y) return (x>=0)?90:270 diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index 66196b1a6dd6..aca090086487 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -43,7 +43,6 @@ GLOBAL_LIST_EMPTY(ipc_chassis_list) GLOBAL_LIST_INIT(ipc_brain_list, list("Posibrain", "Man-Machine Interface")) GLOBAL_LIST_EMPTY(spider_legs_list) GLOBAL_LIST_EMPTY(spider_spinneret_list) -GLOBAL_LIST_EMPTY(spider_mandibles_list) GLOBAL_LIST_EMPTY(kepori_feathers_list) GLOBAL_LIST_EMPTY(kepori_body_feathers_list) GLOBAL_LIST_EMPTY(kepori_tail_feathers_list) @@ -128,7 +127,7 @@ GLOBAL_LIST_INIT(ai_core_display_screens, sortList(list( "Helios", "House", "Inverted", - "Lamp", //WS edit, moff ai display + "Lamp", "Matrix", "Monochrome", "Murica", diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index 28ab56d05211..f9c5c9c86399 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -134,17 +134,6 @@ SUBSYSTEM_DEF(mapping) for(var/datum/planet_type/type as anything in subtypesof(/datum/planet_type)) planet_types[initial(type.planet)] = new type - // Still supporting bans by filename - // I hate this so much. I want to kill it because I don't think ANYONE uses this - // Couldn't you just remove it on a fork or something??? come onnnnnnnnnnnn stop EXISTING already - var/list/banned = generateMapList("[global.config.directory]/lavaruinblacklist.txt") - banned += generateMapList("[global.config.directory]/spaceruinblacklist.txt") - banned += generateMapList("[global.config.directory]/iceruinblacklist.txt") - banned += generateMapList("[global.config.directory]/sandruinblacklist.txt") - banned += generateMapList("[global.config.directory]/jungleruinblacklist.txt") - banned += generateMapList("[global.config.directory]/rockruinblacklist.txt") - banned += generateMapList("[global.config.directory]/wasteruinblacklist.txt") - for(var/item in sortList(subtypesof(/datum/map_template/ruin), /proc/cmp_ruincost_priority)) var/datum/map_template/ruin/ruin_type = item // screen out the abstract subtypes @@ -152,9 +141,6 @@ SUBSYSTEM_DEF(mapping) continue var/datum/map_template/ruin/R = new ruin_type() - if(R.mappath in banned) - continue - map_templates[R.name] = R ruins_templates[R.name] = R ruin_types_list[R.ruin_type] += list(R.name = R) diff --git a/code/datums/components/fullauto.dm b/code/datums/components/fullauto.dm index bc55b9b76fc9..a6959425acba 100644 --- a/code/datums/components/fullauto.dm +++ b/code/datums/components/fullauto.dm @@ -243,9 +243,8 @@ if(!can_shoot()) shoot_with_empty_chamber(shooter) return FALSE - var/obj/item/bodypart/other_hand = shooter.has_hand_for_held_index(shooter.get_inactive_hand_index()) - if(weapon_weight == WEAPON_HEAVY && (shooter.get_inactive_held_item() || !other_hand)) - to_chat(shooter, "You need two hands to fire [src]!") + if(weapon_weight == WEAPON_HEAVY && (!wielded)) + to_chat(shooter, "You need a more secure grip to fire [src]!") return FALSE return TRUE @@ -260,6 +259,9 @@ SIGNAL_HANDLER if(semicd || 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) return NONE diff --git a/code/datums/keybinding/carbon.dm b/code/datums/keybinding/carbon.dm index 29e53039fa86..568a56e368df 100644 --- a/code/datums/keybinding/carbon.dm +++ b/code/datums/keybinding/carbon.dm @@ -22,7 +22,7 @@ return TRUE /datum/keybinding/carbon/hold_throw_mode - hotkey_keys = list("Space") +// hotkey_keys = list("Space") name = "hold_throw_mode" full_name = "Hold throw mode" description = "Hold this to turn on throw mode, and release it to turn off throw mode" diff --git a/code/datums/keybinding/human.dm b/code/datums/keybinding/human.dm index 41b698059bb4..e4ce3478e73a 100644 --- a/code/datums/keybinding/human.dm +++ b/code/datums/keybinding/human.dm @@ -20,6 +20,22 @@ H.quick_equip() return TRUE +/datum/keybinding/human/unique_action + hotkey_keys = list("Space") + name = "unique_action" + full_name = "Perform unique action" + description = "" + keybind_signal = COMSIG_KB_HUMAN_UNIQUEACTION + + +/datum/keybinding/human/unique_action/down(client/user) + . = ..() + if(.) + return + var/mob/living/carbon/human/current_human = user.mob + current_human.do_unique_action() + return TRUE + /datum/keybinding/human/quick_equip_belt hotkey_keys = list("ShiftE") name = "quick_equip_belt" diff --git a/code/datums/ruins/beachplanet.dm b/code/datums/ruins/beachplanet.dm index f67112e4c52f..dae334aefae1 100644 --- a/code/datums/ruins/beachplanet.dm +++ b/code/datums/ruins/beachplanet.dm @@ -1,4 +1,4 @@ -// Hey! Listen! Update \config\beachruinblacklist.txt with your new ruins! +// Hey! Listen! Update _maps\map_catalogue.txt with your new ruins! /datum/map_template/ruin/beachplanet prefix = "_maps/RandomRuins/BeachRuins/" diff --git a/code/datums/ruins/icemoon.dm b/code/datums/ruins/icemoon.dm index afd841ff802e..a38ad6a1f86b 100644 --- a/code/datums/ruins/icemoon.dm +++ b/code/datums/ruins/icemoon.dm @@ -1,4 +1,4 @@ -// Hey! Listen! Update \config\iceruinblacklist.txt with your new ruins! +// Hey! Listen! Update _maps\map_catalogue.txt with your new ruins! /datum/map_template/ruin/icemoon prefix = "_maps/RandomRuins/IceRuins/" diff --git a/code/datums/ruins/jungle.dm b/code/datums/ruins/jungle.dm index b6147faac1cd..b340bf2f9ac1 100644 --- a/code/datums/ruins/jungle.dm +++ b/code/datums/ruins/jungle.dm @@ -1,4 +1,4 @@ -// Hey! Listen! Update \config\jungleruinblacklist.txt with your new ruins! +// Hey! Listen! Update _maps\map_catalogue.txt with your new ruins! /datum/map_template/ruin/jungle prefix = "_maps/RandomRuins/JungleRuins/" diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm index 13d884187ad9..0c46f33ccacb 100644 --- a/code/datums/ruins/lavaland.dm +++ b/code/datums/ruins/lavaland.dm @@ -1,4 +1,4 @@ -// Hey! Listen! Update \config\lavaruinblacklist.txt with your new ruins! +// Hey! Listen! Update _maps\map_catalogue.txt with your new ruins! /datum/map_template/ruin/lavaland prefix = "_maps/RandomRuins/LavaRuins/" diff --git a/code/datums/ruins/rockplanet.dm b/code/datums/ruins/rockplanet.dm index 5d8e74000564..269198a16ed4 100644 --- a/code/datums/ruins/rockplanet.dm +++ b/code/datums/ruins/rockplanet.dm @@ -1,4 +1,4 @@ -// Hey! Listen! Update \config\rockruinblacklist.txt with your new ruins! +// Hey! Listen! Update _maps\map_catalogue.txt with your new ruins! /datum/map_template/ruin/rockplanet prefix = "_maps/RandomRuins/RockRuins/" @@ -93,3 +93,9 @@ description = "Nanotrasen's gotta lay off some personnel, and this facility hasn't been worth the effort so far" id = "rockplanet_budgetcuts" suffix = "rockplanet_budgetcuts.dmm" + +/datum/map_template/ruin/rockplanet/nomadcrash + name = "Nomad Crash" + description = "A Crashed Arrow & Axe Interceptor. A long forgotten Crew. They tried their best to survive..." + id = "rockplanet_nomadcrash" + suffix = "rockplanet_nomadcrash.dmm" diff --git a/code/datums/ruins/space.dm b/code/datums/ruins/space.dm index 5aba2df7d5ce..f754aba26329 100644 --- a/code/datums/ruins/space.dm +++ b/code/datums/ruins/space.dm @@ -1,4 +1,4 @@ -// Hey! Listen! Update \config\spaceruinblacklist.txt with your new ruins! +// Hey! Listen! Update _maps\map_catalogue.txt with your new ruins! /datum/map_template/ruin/space prefix = "_maps/RandomRuins/SpaceRuins/" diff --git a/code/datums/ruins/wasteplanet.dm b/code/datums/ruins/wasteplanet.dm index 38c07d74cdfc..80bf701526be 100644 --- a/code/datums/ruins/wasteplanet.dm +++ b/code/datums/ruins/wasteplanet.dm @@ -1,4 +1,4 @@ -// Hey! Listen! Update \config\wasteruinblacklist.txt with your new ruins! +// Hey! Listen! Update _maps\map_catalogue.txt with your new ruins! /datum/map_template/ruin/wasteplanet prefix = "_maps/RandomRuins/WasteRuins/" diff --git a/code/datums/ruins/whitesands.dm b/code/datums/ruins/whitesands.dm index 062a64db559a..eaf742ce2a29 100644 --- a/code/datums/ruins/whitesands.dm +++ b/code/datums/ruins/whitesands.dm @@ -1,4 +1,4 @@ -// Hey! Listen! Update \config\sandruinblacklist.txt with your new ruins! +// Hey! Listen! Update _maps\map_catalogue.txt with your new ruins! /datum/map_template/ruin/whitesands prefix = "_maps/RandomRuins/SandRuins/" diff --git a/code/game/area/areas/ruins/rockplanet.dm b/code/game/area/areas/ruins/rockplanet.dm index cabadd3f252d..a869f0c53816 100644 --- a/code/game/area/areas/ruins/rockplanet.dm +++ b/code/game/area/areas/ruins/rockplanet.dm @@ -1,7 +1,17 @@ /**********************Rock Planet Areas**************************/ -/area/mine/rockplanet +//syndicate +/area/ruin/rockplanet/syndicate name = "Abandoned Syndicate Mining Facility" + icon_state = "green" -/area/mine/rockplanet_nanotrasen +//budgetcuts +/area/ruin/rockplanet/nanotrasen name = "Abandoned Mining Facility" + icon_state = "green" + +//nomad +/area/ruin/rockplanet/nomad + name = "Abandoned Crash Site" + always_unpowered = FALSE + icon_state = "red" diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 084736fb7069..af81665d8c46 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -156,6 +156,10 @@ ///Default Y pixel offset var/base_pixel_y + ///Wanted sound when hit by a projectile + var/hitsound_type = PROJECTILE_HITSOUND_NON_LIVING + ///volume wanted for being hit + var/hitsound_volume = 50 /** * Called when an atom is created in byond (built in engine proc) * @@ -587,6 +591,33 @@ SEND_SIGNAL(src, COMSIG_ATOM_BULLET_ACT, P, def_zone) . = P.on_hit(src, 0, def_zone, piercing_hit) +/atom/proc/bullet_hit_sfx(obj/projectile/hitting_projectile) + var/selected_sound = "" + + if(!hitsound_volume) + return FALSE + if(!hitsound_volume) + return FALSE + + switch(hitsound_type) + if(PROJECTILE_HITSOUND_FLESH) + selected_sound = hitting_projectile.hitsound + if(PROJECTILE_HITSOUND_NON_LIVING) + selected_sound = hitting_projectile.hitsound_non_living + if(PROJECTILE_HITSOUND_GLASS) + selected_sound = hitting_projectile.hitsound_glass + if(PROJECTILE_HITSOUND_STONE) + selected_sound = hitting_projectile.hitsound_stone + if(PROJECTILE_HITSOUND_METAL) + selected_sound = hitting_projectile.hitsound_metal + if(PROJECTILE_HITSOUND_WOOD) + selected_sound = hitting_projectile.hitsound_wood + if(PROJECTILE_HITSOUND_SNOW) + selected_sound = hitting_projectile.hitsound_snow + + playsound(src, selected_sound, hitsound_volume, TRUE) + return TRUE + ///Return true if we're inside the passed in atom /atom/proc/in_contents_of(container)//can take class or object instance as argument if(ispath(container)) diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index bc793eb60d82..3af464033b52 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -95,6 +95,8 @@ Class Procs: anchored = TRUE interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_UI_INTERACT + hitsound_type = PROJECTILE_HITSOUND_METAL + var/machine_stat = NONE var/use_power = IDLE_POWER_USE //0 = dont run the auto diff --git a/code/game/machinery/computer/_computer.dm b/code/game/machinery/computer/_computer.dm index 49b13bb0c2c9..bdbadf79a943 100644 --- a/code/game/machinery/computer/_computer.dm +++ b/code/game/machinery/computer/_computer.dm @@ -21,6 +21,8 @@ ///Does this computer have a unique icon_state? Prevents the changing of icons from alternative computer construction var/unique_icon = FALSE + hitsound_type = PROJECTILE_HITSOUND_GLASS + /obj/machinery/computer/Initialize(mapload, obj/item/circuitboard/C) . = ..() power_change() diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index e10f0786489c..149e1a4f12a2 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -24,6 +24,8 @@ var/cable = 1 var/list/debris = list() + hitsound_type = PROJECTILE_HITSOUND_GLASS + /obj/machinery/door/window/Initialize(mapload, set_dir) . = ..() flags_1 &= ~PREVENT_CLICK_UNDER_1 diff --git a/code/game/objects/effects/decals/turfdecal/flooring_decals.dm b/code/game/objects/effects/decals/turfdecal/flooring_decals.dm index cfbc81a631a1..b5c6f9fe0eec 100644 --- a/code/game/objects/effects/decals/turfdecal/flooring_decals.dm +++ b/code/game/objects/effects/decals/turfdecal/flooring_decals.dm @@ -1092,3 +1092,17 @@ TURF_DECAL_COLOR_HELPER(transparent/inteqbrown, "#4b2a18", 140) /obj/effect/turf_decal/hardline_big/seven icon_state = "hardline_big-7" + +//ARROW & AXE DOCKYARDS + +/obj/effect/turf_decal/arrowaxe_small + name = "small arrow & axe logo" + +/obj/effect/turf_decal/arrowaxe_small/left + icon_state = "arrowaxe-left" + +/obj/effect/turf_decal/arrowaxe_small/center + icon_state = "arrowaxe-center" + +/obj/effect/turf_decal/arrowaxe_small/right + icon_state = "arrowaxe-right" diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index d825f49c811d..8f2a0eb60262 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -544,3 +544,16 @@ /obj/effect/constructing_effect/proc/end() qdel(src) + +/obj/effect/muzzle_flash + icon = 'icons/obj/projectiles.dmi' + icon_state = "muzzle_flash" + layer = ABOVE_MOB_LAYER + plane = GAME_PLANE + appearance_flags = KEEP_APART|TILE_BOUND + var/applied = FALSE + +/obj/effect/muzzle_flash/Initialize(mapload, new_icon_state) + . = ..() + if(new_icon_state) + icon_state = new_icon_state diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index e13cca64caf9..7c68edad2b61 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -453,14 +453,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb SEND_SIGNAL(src, COMSIG_ITEM_HIT_REACT, args) if((prob(final_block_chance) && COOLDOWN_FINISHED(src, block_cooldown)) || (prob(final_block_chance) && istype(src, /obj/item/shield))) owner.visible_message("[owner] blocks [attack_text] with [src]!") - var/rand_ricochet = pick(list( - 'sound/weapons/effects/ric1.ogg', - 'sound/weapons/effects/ric2.ogg', - 'sound/weapons/effects/ric3.ogg', - 'sound/weapons/effects/ric4.ogg', - 'sound/weapons/effects/ric5.ogg' - )) - playsound(src, rand_ricochet, 100) + playsound(src, 'sound/weapons/effects/deflect.ogg', 100) if(!istype(src, /obj/item/shield)) COOLDOWN_START(src, block_cooldown, block_cooldown_time) return 1 @@ -1099,6 +1092,10 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb if(SEND_SIGNAL(src, COMSIG_ITEM_OFFER_TAKEN, offerer, taker) & COMPONENT_OFFER_INTERRUPT) return TRUE +///Intended for interactions with guns, like racking +/obj/item/proc/unique_action(mob/living/user) + return + /** * Returns null if this object cannot be used to interact with physical writing mediums such as paper. * Returns a list of key attributes for this object interacting with paper otherwise. diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 61acce5c9d0a..9187aac8c808 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -68,13 +68,13 @@ if(3) take_damage(rand(10, 90), BRUTE, "bomb", 0) -/obj/bullet_act(obj/projectile/P) +/obj/bullet_act(obj/projectile/hitting_projectile) . = ..() - playsound(src, P.hitsound, 50, TRUE) - if(P.suppressed != SUPPRESSED_VERY) - visible_message("[src] is hit by \a [P]!", null, null, COMBAT_MESSAGE_RANGE) + bullet_hit_sfx(hitting_projectile) + if(hitting_projectile.suppressed != SUPPRESSED_VERY) + visible_message("[src] is hit by \a [hitting_projectile]!", null, null, COMBAT_MESSAGE_RANGE) if(!QDELETED(src)) //Bullet on_hit effect might have already destroyed this object - take_damage(P.damage, P.damage_type, P.flag, 0, turn(P.dir, 180), P.armour_penetration) + take_damage(hitting_projectile.damage, hitting_projectile.damage_type, hitting_projectile.flag, 0, turn(hitting_projectile.dir, 180), hitting_projectile.armour_penetration) ///Called to get the damage that hulks will deal to the obj. /obj/proc/hulk_damage() diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index c0198939c24a..69efcd42af15 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -7,6 +7,8 @@ flags_ricochet = RICOCHET_HARD ricochet_chance_mod = 0.5 + hitsound_type = PROJECTILE_HITSOUND_METAL + var/climb_time = 20 var/climbable = FALSE var/mob/living/structureclimber diff --git a/code/game/objects/structures/beds_chairs/pew.dm b/code/game/objects/structures/beds_chairs/pew.dm index b7aa1f65d2bd..8e5cf9a19493 100644 --- a/code/game/objects/structures/beds_chairs/pew.dm +++ b/code/game/objects/structures/beds_chairs/pew.dm @@ -9,6 +9,8 @@ buildstackamount = 3 item_chair = null + hitsound_type = PROJECTILE_HITSOUND_WOOD + /obj/structure/chair/pew/left name = "left wooden pew end" icon_state = "pewend_left" diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index 700d55361d90..ebfda776726f 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -6,6 +6,8 @@ density = TRUE anchored = TRUE + hitsound_type = PROJECTILE_HITSOUND_WOOD + /obj/structure/dresser/attackby(obj/item/I, mob/user, params) if(I.tool_behaviour == TOOL_WRENCH) to_chat(user, "You begin to [anchored ? "unwrench" : "wrench"] [src].") diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index 2c56b9d7a095..ed408da5487b 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -3,6 +3,8 @@ max_integrity = 40 anchored = TRUE + hitsound_type = PROJECTILE_HITSOUND_NON_LIVING + /obj/structure/flora/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) @@ -22,6 +24,8 @@ layer = FLY_LAYER var/log_amount = 10 + hitsound_type = PROJECTILE_HITSOUND_WOOD + /obj/structure/flora/tree/ComponentInitialize() . = ..() AddComponent(/datum/component/largetransparency) @@ -52,6 +56,8 @@ density = FALSE pixel_x = -16 + hitsound_type = PROJECTILE_HITSOUND_WOOD + /obj/structure/flora/tree/pine name = "pine tree" desc = "A coniferous pine tree." @@ -370,6 +376,8 @@ icon_state = "random_plant" var/list/static/states + hitsound_type = PROJECTILE_HITSOUND_STONE + /obj/item/kirbyplants/random/Initialize() . = ..() icon = 'icons/obj/flora/plants.dmi' @@ -424,6 +432,8 @@ max_integrity = 100 var/obj/item/stack/mineResult = /obj/item/stack/ore/glass/basalt + hitsound_type = PROJECTILE_HITSOUND_STONE + /obj/structure/flora/rock/Initialize() . = ..() icon_state = "[base_icon_state][rand(1,3)]" diff --git a/code/game/objects/structures/lavaland/necropolis_tendril.dm b/code/game/objects/structures/lavaland/necropolis_tendril.dm index d06d5e167157..970aa5c19317 100644 --- a/code/game/objects/structures/lavaland/necropolis_tendril.dm +++ b/code/game/objects/structures/lavaland/necropolis_tendril.dm @@ -15,6 +15,8 @@ anchored = TRUE resistance_flags = FIRE_PROOF | LAVA_PROOF + hitsound_type = PROJECTILE_HITSOUND_FLESH + var/gps = null var/obj/effect/light_emitter/tendril/emitted_light diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 16189291abc0..94c556f41383 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -339,6 +339,8 @@ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100) var/list/debris = list() + hitsound_type = PROJECTILE_HITSOUND_GLASS + /obj/structure/table/glass/Initialize() . = ..() debris += new frame @@ -424,6 +426,8 @@ smoothing_groups = list(SMOOTH_GROUP_WOOD_TABLES) //Don't smooth with SMOOTH_GROUP_TABLES canSmoothWith = list(SMOOTH_GROUP_WOOD_TABLES) + hitsound_type = PROJECTILE_HITSOUND_WOOD + /obj/structure/table/wood/narsie_act(total_override = TRUE) if(!total_override) ..() @@ -776,6 +780,8 @@ armor = list("melee" = 10, "bullet" = 30, "laser" = 30, "energy" = 100, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70) //trolld can_flip = FALSE //same as reinforced and theres no sprites for it + hitsound_type = PROJECTILE_HITSOUND_WOOD + /obj/structure/table/wood/reinforced/deconstruction_hints(mob/user) if(deconstruction_ready) return "The top cover has been pried loose and the main frame's bolts are exposed." diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 92a72b7261be..06ec0ac2fbf4 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -30,6 +30,8 @@ flags_ricochet = RICOCHET_HARD ricochet_chance_mod = 0.4 + hitsound_type = PROJECTILE_HITSOUND_GLASS + /obj/structure/window/examine(mob/user) . = ..() if(flags_1 & NODECONSTRUCT_1) diff --git a/code/game/sound.dm b/code/game/sound.dm index 09affc888bf0..9b53f3d2b010 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -245,8 +245,62 @@ distance_multiplier - Can be used to multiply the distance at which the sound is soundin = pick('sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg') if ("pageturn") soundin = pick('sound/effects/pageturn1.ogg', 'sound/effects/pageturn2.ogg','sound/effects/pageturn3.ogg') - if ("ricochet") - soundin = pick('sound/weapons/effects/ric1.ogg', 'sound/weapons/effects/ric2.ogg','sound/weapons/effects/ric3.ogg','sound/weapons/effects/ric4.ogg','sound/weapons/effects/ric5.ogg') +//gun related stuff start + if ("bullet_hit") + soundin = pick('sound/weapons/gun/hit/bullet_impact1.ogg', 'sound/weapons/gun/hit/bullet_impact2.ogg','sound/weapons/gun/hit/bullet_impact3.ogg') + if ("bullet_impact") + soundin = pick('sound/weapons/gun/hit/bullet_ricochet1.ogg', 'sound/weapons/gun/hit/bullet_ricochet2.ogg','sound/weapons/gun/hit/bullet_ricochet3.ogg','sound/weapons/gun/hit/bullet_ricochet4.ogg','sound/weapons/gun/hit/bullet_ricochet5.ogg','sound/weapons/gun/hit/bullet_ricochet6.ogg','sound/weapons/gun/hit/bullet_ricochet7.ogg','sound/weapons/gun/hit/bullet_ricochet8.ogg') + if ("bullet_bounce") + soundin = pick('sound/weapons/gun/hit/bullet_bounce1.ogg', 'sound/weapons/gun/hit/bullet_bounce2.ogg','sound/weapons/gun/hit/bullet_bounce3.ogg','sound/weapons/gun/hit/bullet_bounce4.ogg','sound/weapons/gun/hit/bullet_bounce5.ogg') + if("bullet_miss") + soundin = pick('sound/weapons/gun/hit/bullet_miss1.ogg', 'sound/weapons/gun/hit/bullet_miss2.ogg', 'sound/weapons/gun/hit/bullet_miss3.ogg') + if("bullet_hit_glass") + soundin = pick( + 'sound/weapons/gun/hit/bullet_glass_01.ogg', + 'sound/weapons/gun/hit/bullet_glass_02.ogg', + 'sound/weapons/gun/hit/bullet_glass_03.ogg', + 'sound/weapons/gun/hit/bullet_glass_04.ogg', + 'sound/weapons/gun/hit/bullet_glass_05.ogg', + 'sound/weapons/gun/hit/bullet_glass_06.ogg', + 'sound/weapons/gun/hit/bullet_glass_07.ogg', + ) + if("bullet_hit_stone") + soundin = pick( + 'sound/weapons/gun/hit/bullet_masonry_01.ogg', + 'sound/weapons/gun/hit/bullet_masonry_02.ogg', + 'sound/weapons/gun/hit/bullet_masonry_03.ogg', + 'sound/weapons/gun/hit/bullet_masonry_04.ogg', + 'sound/weapons/gun/hit/bullet_masonry_05.ogg', + 'sound/weapons/gun/hit/bullet_masonry_06.ogg', + ) + if("bullet_hit_metal") + soundin = pick( + 'sound/weapons/gun/hit/bullet_metal_01.ogg', + 'sound/weapons/gun/hit/bullet_metal_02.ogg', + 'sound/weapons/gun/hit/bullet_metal_03.ogg', + 'sound/weapons/gun/hit/bullet_metal_04.ogg', + 'sound/weapons/gun/hit/bullet_metal_05.ogg', + 'sound/weapons/gun/hit/bullet_metal_06.ogg', + ) + if("bullet_hit_wood") + soundin = pick( + 'sound/weapons/gun/hit/bullet_wood_01.ogg', + 'sound/weapons/gun/hit/bullet_wood_02.ogg', + 'sound/weapons/gun/hit/bullet_wood_03.ogg', + 'sound/weapons/gun/hit/bullet_wood_04.ogg', + 'sound/weapons/gun/hit/bullet_wood_05.ogg', + 'sound/weapons/gun/hit/bullet_wood_06.ogg', + ) + if("bullet_hit_snow") + soundin = pick( + 'sound/weapons/gun/hit/bullet_snow_01.ogg', + 'sound/weapons/gun/hit/bullet_snow_02.ogg', + 'sound/weapons/gun/hit/bullet_snow_03.ogg', + 'sound/weapons/gun/hit/bullet_snow_04.ogg', + 'sound/weapons/gun/hit/bullet_snow_05.ogg', + 'sound/weapons/gun/hit/bullet_snow_06.ogg', + ) +// gun related stuff end if ("terminal_type") soundin = pick('sound/machines/terminal_button01.ogg', 'sound/machines/terminal_button02.ogg', 'sound/machines/terminal_button03.ogg', \ 'sound/machines/terminal_button04.ogg', 'sound/machines/terminal_button05.ogg', 'sound/machines/terminal_button06.ogg', \ @@ -257,8 +311,6 @@ distance_multiplier - Can be used to multiply the distance at which the sound is soundin = pick('sound/hallucinations/im_here1.ogg', 'sound/hallucinations/im_here2.ogg') if ("can_open") soundin = pick('sound/effects/can_open1.ogg', 'sound/effects/can_open2.ogg', 'sound/effects/can_open3.ogg') - if("bullet_miss") - soundin = pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg') if("revolver_spin") soundin = pick('sound/weapons/gun/revolver/spin1.ogg', 'sound/weapons/gun/revolver/spin2.ogg', 'sound/weapons/gun/revolver/spin3.ogg') if("law") diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm index aaaf430d37ee..d2d99ed67966 100644 --- a/code/game/turfs/closed/minerals.dm +++ b/code/game/turfs/closed/minerals.dm @@ -30,6 +30,8 @@ var/x_offset = -4 var/y_offset = -4 + hitsound_type = PROJECTILE_HITSOUND_STONE + /turf/closed/mineral/Initialize(mapload, inherited_virtual_z) . = ..() if(has_borders) diff --git a/code/game/turfs/closed/wall/mineral_walls.dm b/code/game/turfs/closed/wall/mineral_walls.dm index 77259ba448d2..720a95afd0e1 100644 --- a/code/game/turfs/closed/wall/mineral_walls.dm +++ b/code/game/turfs/closed/wall/mineral_walls.dm @@ -7,6 +7,8 @@ var/last_event = 0 var/active = null + hitsound_type = PROJECTILE_HITSOUND_METAL + /turf/closed/wall/mineral/gold name = "gold wall" desc = "A wall with gold plating. Swag!" @@ -60,6 +62,8 @@ connector_icon_state = "diamond_wall_connector" no_connector_typecache = list(/turf/closed/wall/mineral/diamond, /obj/structure/falsewall/diamond) + hitsound_type = PROJECTILE_HITSOUND_GLASS + /turf/closed/wall/mineral/diamond/yesdiag icon_state = "diamond_wall-255" smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS @@ -97,6 +101,8 @@ connector_icon_state = "sandstone_wall_connector" no_connector_typecache = list(/turf/closed/wall/mineral/sandstone, /obj/structure/falsewall/sandstone) + hitsound_type = PROJECTILE_HITSOUND_NON_LIVING + /turf/closed/wall/mineral/sandstone/yesdiag icon_state = "sandstone_wall-255" smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS @@ -181,6 +187,8 @@ connector_icon_state = "plasma_wall_connector" no_connector_typecache = list(/turf/closed/wall/mineral/plasma, /obj/structure/falsewall/plasma) + hitsound_type = PROJECTILE_HITSOUND_GLASS + /turf/closed/wall/mineral/plasma/yesdiag icon_state = "plasma_wall-255" smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS @@ -230,6 +238,8 @@ connector_icon_state = "wood_wall_connector" no_connector_typecache = list(/turf/closed/wall/mineral/wood, /obj/structure/falsewall/wood) + hitsound_type = PROJECTILE_HITSOUND_WOOD + /turf/closed/wall/mineral/wood/yesdiag icon_state = "wood_wall-255" smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS | SMOOTH_CONNECTORS @@ -298,6 +308,8 @@ bullet_sizzle = TRUE bullet_bounce_sound = null + hitsound_type = PROJECTILE_HITSOUND_SNOW + /turf/closed/wall/mineral/snow/yesdiag icon_state = "snow_wall-255" smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS @@ -331,6 +343,8 @@ smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_TITANIUM_WALLS) canSmoothWith = list(SMOOTH_GROUP_TITANIUM_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTLE_PARTS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_WINDOW_FULLTILE) + hitsound_type = PROJECTILE_HITSOUND_NON_LIVING + /turf/closed/wall/mineral/titanium/exterior smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_TITANIUM_WALLS_EXTERIOR) canSmoothWith = list(SMOOTH_GROUP_TITANIUM_WALLS_EXTERIOR, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTLE_PARTS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_WINDOW_FULLTILE) @@ -407,6 +421,8 @@ smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_PLASTITANIUM_WALLS) canSmoothWith = list(SMOOTH_GROUP_PLASTITANIUM_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTLE_PARTS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_WINDOW_FULLTILE) + hitsound_type = PROJECTILE_HITSOUND_NON_LIVING + /turf/closed/wall/mineral/plastitanium/nodiagonal icon = 'icons/turf/walls/plastitanium_wall.dmi' icon_state = "map-shuttle_nd" diff --git a/code/game/turfs/open/floor/plating/rockplanet.dm b/code/game/turfs/open/floor/plating/rockplanet.dm index 1bd9f537c9af..1fbf75b2e2f2 100644 --- a/code/game/turfs/open/floor/plating/rockplanet.dm +++ b/code/game/turfs/open/floor/plating/rockplanet.dm @@ -33,6 +33,9 @@ icon_state = "wet_soft0" base_icon_state = "wet_soft" +/turf/open/floor/plating/asteroid/rockplanet/wet/atmos + initial_gas_mix = OPENTURF_DEFAULT_ATMOS + /turf/open/floor/plating/asteroid/rockplanet/wet/lit light_range = 2 light_power = 0.6 @@ -46,3 +49,37 @@ light_range = 2 light_power = 0.6 light_color = COLOR_VERY_LIGHT_GRAY + +/turf/open/floor/plating/asteroid/rockplanet/grass + name = "dry grass" + desc = "A patch of dry grass." + icon_state = "grass0" + +/turf/open/floor/plating/asteroid/rockplanet/mud + name = "mud" + icon_state = "greenerdirt" + +/turf/open/floor/plating/asteroid/rockplanet/pond + name = "pond" + icon_state = "riverwater" + +/turf/open/floor/plating/asteroid/rockplanet/plating + name = "exterior plating" + icon_state = "plating" + +/turf/open/floor/plating/asteroid/rockplanet/plating/scorched + name = "exterior plating" + icon_state = "panelscorched" + +/turf/open/floor/plating/asteroid/rockplanet/stairs + name = "exterior stairs" + icon_state = "stairs" + +/turf/open/floor/plating/asteroid/rockplanet/hull_plating + name = "exterior hull plating" + icon_state = "regular_hull" + +/turf/open/floor/plating/asteroid/rockplanet/plasteel + name = "exterior floor" + icon_state = "tiled_gray" + icon = 'icons/turf/floors/tiles.dmi' diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index b3305f725e0e..eade8de308d7 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -33,7 +33,7 @@ GLOBAL_LIST_EMPTY(created_baseturf_lists) var/requires_activation //add to air processing after initialize? var/changing_turf = FALSE - var/bullet_bounce_sound = 'sound/weapons/gun/general/mag_bullet_remove.ogg' //sound played when a shell casing is ejected ontop of the turf. + var/list/bullet_bounce_sound = list('sound/weapons/gun/general/bulletcasing_bounce1.ogg', 'sound/weapons/gun/general/bulletcasing_bounce2.ogg', 'sound/weapons/gun/general/bulletcasing_bounce3.ogg') var/bullet_sizzle = FALSE //used by ammo_casing/bounce_away() to determine if the shell casing should make a sizzle sound when it's ejected over the turf //IE if the turf is supposed to be water, set TRUE. @@ -76,6 +76,8 @@ GLOBAL_LIST_EMPTY(created_baseturf_lists) ///the holodeck can load onto this turf if TRUE var/holodeck_compatible = FALSE + hitsound_volume = 90 + /turf/vv_edit_var(var_name, new_value) var/static/list/banned_edits = list("x", "y", "z") if(var_name in banned_edits) @@ -669,3 +671,7 @@ GLOBAL_LIST_EMPTY(created_baseturf_lists) . += "[/obj/effect/turf_decal]{\n\ticon = '[decal.pic.icon]';\n\ticon_state = \"[decal.pic.icon_state]\";\n\tdir = [decal.pic.dir];\n\tcolor = \"[decal.pic.color]\"\n\t}" first = FALSE return + +/turf/bullet_act(obj/projectile/hitting_projectile) + . = ..() + bullet_hit_sfx(hitting_projectile) diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index 343289191fb6..c1845945485f 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -38,7 +38,6 @@ H.dna.features["moth_fluff"] = pick(GLOB.moth_fluff_list) H.dna.features["spider_legs"] = pick(GLOB.spider_legs_list) H.dna.features["spider_spinneret"] = pick(GLOB.spider_spinneret_list) - H.dna.features["spider_mandibles"] = pick(GLOB.spider_mandibles_list) H.dna.features["squid_face"] = pick(GLOB.squid_face_list) H.dna.features["kepori_feathers"] = pick(GLOB.kepori_feathers_list) H.dna.features["kepori_body_feathers"] = pick(GLOB.kepori_body_feathers_list) diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index 7323160deceb..5dc59564a41e 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -173,7 +173,7 @@ /obj/item/cult_bastard/IsReflect() if(spinning) - playsound(src, pick('sound/weapons/effects/ric1.ogg', 'sound/weapons/effects/ric2.ogg', 'sound/weapons/effects/ric3.ogg', 'sound/weapons/effects/ric4.ogg', 'sound/weapons/effects/ric5.ogg'), 100, TRUE) + playsound(src, 'sound/weapons/effects/deflect.ogg', 100, TRUE) return TRUE else ..() @@ -182,7 +182,7 @@ if(prob(final_block_chance)) if(attack_type == PROJECTILE_ATTACK) owner.visible_message("[owner] deflects [attack_text] with [src]!") - playsound(src, pick('sound/weapons/effects/ric1.ogg', 'sound/weapons/effects/ric2.ogg', 'sound/weapons/effects/ric3.ogg', 'sound/weapons/effects/ric4.ogg', 'sound/weapons/effects/ric5.ogg'), 100, TRUE) + playsound(src, 'sound/weapons/effects/deflect.ogg', 100, TRUE) return TRUE else playsound(src, 'sound/weapons/parry.ogg', 75, TRUE) @@ -666,7 +666,7 @@ if(prob(final_block_chance)) if(attack_type == PROJECTILE_ATTACK) owner.visible_message("[owner] deflects [attack_text] with [src]!") - playsound(src, pick('sound/weapons/effects/ric1.ogg', 'sound/weapons/effects/ric2.ogg', 'sound/weapons/effects/ric3.ogg', 'sound/weapons/effects/ric4.ogg', 'sound/weapons/effects/ric5.ogg'), 100, TRUE) + playsound(src, 'sound/weapons/effects/deflect.ogg', 100, TRUE) return TRUE else playsound(src, 'sound/weapons/parry.ogg', 100, TRUE) diff --git a/code/modules/cargo/packs/ammo.dm b/code/modules/cargo/packs/ammo.dm index 9bb96a14be5c..33a5ee37be02 100644 --- a/code/modules/cargo/packs/ammo.dm +++ b/code/modules/cargo/packs/ammo.dm @@ -22,6 +22,15 @@ /obj/item/ammo_box/magazine/m45) cost = 1500 +/datum/supply_pack/ammo/m45_speedloader + name = ".45 ACP Speedloader Crate" + desc = "Contains four .45 ACP speedloaders for revolvers, each containing six rounds." + contains = list(/obj/item/ammo_box/c45_speedloader, + /obj/item/ammo_box/c45_speedloader, + /obj/item/ammo_box/c45_speedloader, + /obj/item/ammo_box/c45_speedloader) + cost = 1500 + /datum/supply_pack/ammo/c38_mag name = ".38 Speedloader Crate" desc = "Contains four .38 speedloaders for revolvers, each containing six rounds." diff --git a/code/modules/cargo/packs/gun.dm b/code/modules/cargo/packs/gun.dm index b91fe38e0390..6ca715889855 100644 --- a/code/modules/cargo/packs/gun.dm +++ b/code/modules/cargo/packs/gun.dm @@ -39,12 +39,18 @@ /obj/item/gun/ballistic/revolver) /datum/supply_pack/gun/detrevolver - name = "Revolver crate" + name = "Hunter's Pride Detective Revolver crate" desc = "Contains two concealable Solarian revolvers, chambered in .38." cost = 2000 contains = list(/obj/item/gun/ballistic/revolver/detective, /obj/item/gun/ballistic/revolver/detective) +/datum/supply_pack/gun/cattlemanrevolver + name = "Cattleman Revolver crate" + desc = "Contains two concealable Cattleman revolvers, chambered in .45 ACP." + cost = 2500 + contains = list(/obj/item/gun/ballistic/revolver/cattleman, + /obj/item/gun/ballistic/revolver/cattleman) /* diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index f1fe218b175b..69ea5e634cda 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -609,7 +609,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("spider_legs" in pref_species.default_features) if(!mutant_category) dat += APPEARANCE_CATEGORY_COLUMN - dat += "

Spider Extra Legs Variant

" + dat += "

Extra Legs

" dat += "[features["spider_legs"]]
" @@ -621,7 +621,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("spider_spinneret" in pref_species.default_features) if(!mutant_category) dat += APPEARANCE_CATEGORY_COLUMN - dat += "

Spider Spinneret Markings

" + dat += "

Spinneret

" dat += "[features["spider_spinneret"]]
" @@ -630,18 +630,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "" mutant_category = 0 - if("spider_mandibles" in pref_species.default_features) - if(!mutant_category) - dat += APPEARANCE_CATEGORY_COLUMN - dat += "

Spider Mandible Variant

" - - dat += "[features["spider_mandibles"]]
" - - mutant_category++ - if(mutant_category >= MAX_MUTANT_ROWS) - dat += "" - mutant_category = 0 - if("squid_face" in pref_species.default_features) if(!mutant_category) dat += APPEARANCE_CATEGORY_COLUMN @@ -1906,18 +1894,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(new_spider_spinneret) features["spider_spinneret"] = new_spider_spinneret - if("spider_mandibles") - var/new_spider_mandibles - new_spider_mandibles = input(user, "Choose your character's variant of mandibles:", "Character Preference") as null|anything in GLOB.spider_mandibles_list - if (new_spider_mandibles) - features["spider_mandibles"] = new_spider_mandibles - - if("squid_face") - var/new_squid_face - new_squid_face = input(user, "Choose your character's face type:", "Character Preference") as null|anything in GLOB.squid_face_list - if (new_squid_face) - features["squid_face"] = new_squid_face - if("ipc_screen") var/new_ipc_screen diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 26cea413adb3..b08ba8588f69 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -503,52 +503,51 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car underwear = sanitize_inlist(underwear, GLOB.underwear_list) undershirt = sanitize_inlist(undershirt, GLOB.undershirt_list) - socks = sanitize_inlist(socks, GLOB.socks_list) - age = sanitize_integer(age, pref_species.species_age_min, pref_species.species_age_max, initial(age)) + socks = sanitize_inlist(socks, GLOB.socks_list) + age = sanitize_integer(age, pref_species.species_age_min, pref_species.species_age_max, initial(age)) hair_color = sanitize_hexcolor(hair_color) - facial_hair_color = sanitize_hexcolor(facial_hair_color) - underwear_color = sanitize_hexcolor(underwear_color) - eye_color = sanitize_hexcolor(eye_color) - skin_tone = sanitize_inlist(skin_tone, GLOB.skin_tones) + facial_hair_color = sanitize_hexcolor(facial_hair_color) + underwear_color = sanitize_hexcolor(underwear_color) + eye_color = sanitize_hexcolor(eye_color) + skin_tone = sanitize_inlist(skin_tone, GLOB.skin_tones) backpack = sanitize_inlist(backpack, GLOB.backpacklist, initial(backpack)) - jumpsuit_style = sanitize_inlist(jumpsuit_style, GLOB.jumpsuitlist, initial(jumpsuit_style)) - exowear = sanitize_inlist(exowear, GLOB.exowearlist, initial(exowear)) - uplink_spawn_loc = sanitize_inlist(uplink_spawn_loc, GLOB.uplink_spawn_loc_list, initial(uplink_spawn_loc)) - fbp = sanitize_integer(fbp, FALSE, TRUE, FALSE) - features["grad_style"] = sanitize_inlist(features["grad_style"], GLOB.hair_gradients_list) - features["grad_color"] = sanitize_hexcolor(features["grad_color"]) - features["body_size"] = sanitize_inlist(features["body_size"], GLOB.body_sizes, "Normal") - features["mcolor"] = sanitize_hexcolor(features["mcolor"]) - features["mcolor2"] = sanitize_hexcolor(features["mcolor2"]) - features["ethcolor"] = copytext_char(features["ethcolor"], 1, 7) - features["tail_lizard"] = sanitize_inlist(features["tail_lizard"], GLOB.tails_list_lizard) - features["tail_human"] = sanitize_inlist(features["tail_human"], GLOB.tails_list_human, "None") - features["face_markings"] = sanitize_inlist(features["face_markings"], GLOB.face_markings_list) - features["horns"] = sanitize_inlist(features["horns"], GLOB.horns_list) - features["ears"] = sanitize_inlist(features["ears"], GLOB.ears_list, "None") - features["frills"] = sanitize_inlist(features["frills"], GLOB.frills_list) - features["spines"] = sanitize_inlist(features["spines"], GLOB.spines_list) - features["body_markings"] = sanitize_inlist(features["body_markings"], GLOB.body_markings_list) - features["feature_lizard_legs"] = sanitize_inlist(features["legs"], GLOB.legs_list, "Normal Legs") - features["moth_wings"] = sanitize_inlist(features["moth_wings"], GLOB.moth_wings_list, "Plain") - features["moth_fluff"] = sanitize_inlist(features["moth_fluff"], GLOB.moth_fluff_list, "Plain") - features["spider_legs"] = sanitize_inlist(features["spider_legs"], GLOB.spider_legs_list, "Plain") - features["spider_spinneret"] = sanitize_inlist(features["spider_spinneret"], GLOB.spider_spinneret_list, "Plain") - features["spider_mandibles"] = sanitize_inlist(features["spider_mandibles"], GLOB.spider_mandibles_list, "Plain") - features["moth_markings"] = sanitize_inlist(features["moth_markings"], GLOB.moth_markings_list, "None") - features["squid_face"] = sanitize_inlist(features["squid_face"], GLOB.squid_face_list, "Squidward") - features["ipc_screen"] = sanitize_inlist(features["ipc_screen"], GLOB.ipc_screens_list) - features["ipc_antenna"] = sanitize_inlist(features["ipc_antenna"], GLOB.ipc_antennas_list) - features["ipc_chassis"] = sanitize_inlist(features["ipc_chassis"], GLOB.ipc_chassis_list) - features["ipc_brain"] = sanitize_inlist(features["ipc_brain"], GLOB.ipc_brain_list) - features["kepori_feathers"] = sanitize_inlist(features["kepori_feathers"], GLOB.kepori_feathers_list, "Plain") - features["kepori_body_feathers"] = sanitize_inlist(features["kepori_body_feathers"], GLOB.kepori_body_feathers_list, "Plain") - features["kepori_tail_feathers"] = sanitize_inlist(features["kepori_tail_feathers"], GLOB.kepori_tail_feathers_list, "Fan") - features["vox_head_quills"] = sanitize_inlist(features["vox_head_quills"], GLOB.vox_head_quills_list, "None") - features["vox_neck_quills"] = sanitize_inlist(features["vox_neck_quills"], GLOB.vox_neck_quills_list, "None") - features["elzu_horns"] = sanitize_inlist(features["elzu_horns"], GLOB.elzu_horns_list) - features["tail_elzu"] = sanitize_inlist(features["tail_elzu"], GLOB.tails_list_elzu) - features["flavor_text"] = sanitize_text(features["flavor_text"], initial(features["flavor_text"])) + jumpsuit_style = sanitize_inlist(jumpsuit_style, GLOB.jumpsuitlist, initial(jumpsuit_style)) + exowear = sanitize_inlist(exowear, GLOB.exowearlist, initial(exowear)) + uplink_spawn_loc = sanitize_inlist(uplink_spawn_loc, GLOB.uplink_spawn_loc_list, initial(uplink_spawn_loc)) + fbp = sanitize_integer(fbp, FALSE, TRUE, FALSE) + features["grad_style"] = sanitize_inlist(features["grad_style"], GLOB.hair_gradients_list) + features["grad_color"] = sanitize_hexcolor(features["grad_color"]) + features["body_size"] = sanitize_inlist(features["body_size"], GLOB.body_sizes, "Normal") + features["mcolor"] = sanitize_hexcolor(features["mcolor"]) + features["mcolor2"] = sanitize_hexcolor(features["mcolor2"]) + features["ethcolor"] = copytext_char(features["ethcolor"], 1, 7) + features["tail_lizard"] = sanitize_inlist(features["tail_lizard"], GLOB.tails_list_lizard) + features["tail_human"] = sanitize_inlist(features["tail_human"], GLOB.tails_list_human, "None") + features["face_markings"] = sanitize_inlist(features["face_markings"], GLOB.face_markings_list) + features["horns"] = sanitize_inlist(features["horns"], GLOB.horns_list) + features["ears"] = sanitize_inlist(features["ears"], GLOB.ears_list, "None") + features["frills"] = sanitize_inlist(features["frills"], GLOB.frills_list) + features["spines"] = sanitize_inlist(features["spines"], GLOB.spines_list) + features["body_markings"] = sanitize_inlist(features["body_markings"], GLOB.body_markings_list) + features["feature_lizard_legs"] = sanitize_inlist(features["legs"], GLOB.legs_list, "Normal Legs") + features["moth_wings"] = sanitize_inlist(features["moth_wings"], GLOB.moth_wings_list, "Plain") + features["moth_fluff"] = sanitize_inlist(features["moth_fluff"], GLOB.moth_fluff_list, "Plain") + features["spider_legs"] = sanitize_inlist(features["spider_legs"], GLOB.spider_legs_list, "Plain") + features["spider_spinneret"] = sanitize_inlist(features["spider_spinneret"], GLOB.spider_spinneret_list, "Plain") + features["moth_markings"] = sanitize_inlist(features["moth_markings"], GLOB.moth_markings_list, "None") + features["squid_face"] = sanitize_inlist(features["squid_face"], GLOB.squid_face_list, "Squidward") + features["ipc_screen"] = sanitize_inlist(features["ipc_screen"], GLOB.ipc_screens_list) + features["ipc_antenna"] = sanitize_inlist(features["ipc_antenna"], GLOB.ipc_antennas_list) + features["ipc_chassis"] = sanitize_inlist(features["ipc_chassis"], GLOB.ipc_chassis_list) + features["ipc_brain"] = sanitize_inlist(features["ipc_brain"], GLOB.ipc_brain_list) + features["kepori_feathers"] = sanitize_inlist(features["kepori_feathers"], GLOB.kepori_feathers_list, "Plain") + features["kepori_body_feathers"] = sanitize_inlist(features["kepori_body_feathers"], GLOB.kepori_body_feathers_list, "Plain") + features["kepori_tail_feathers"] = sanitize_inlist(features["kepori_tail_feathers"], GLOB.kepori_tail_feathers_list, "Fan") + features["vox_head_quills"] = sanitize_inlist(features["vox_head_quills"], GLOB.vox_head_quills_list, "None") + features["vox_neck_quills"] = sanitize_inlist(features["vox_neck_quills"], GLOB.vox_neck_quills_list, "None") + features["elzu_horns"] = sanitize_inlist(features["elzu_horns"], GLOB.elzu_horns_list) + features["tail_elzu"] = sanitize_inlist(features["tail_elzu"], GLOB.tails_list_elzu) + features["flavor_text"] = sanitize_text(features["flavor_text"], initial(features["flavor_text"])) all_quirks = SANITIZE_LIST(all_quirks) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 2cd8c28602c8..2dc357ad9478 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -145,7 +145,7 @@ attached_light.update_brightness() to_chat(user, "You toggle the helmet light [attached_light.on ? "on":"off"].") - playsound(user, 'sound/weapons/empty.ogg', 100, TRUE) + playsound(user, attached_light.on ? attached_light.toggle_on_sound : attached_light.toggle_off_sound, 100, TRUE) update_helmlight() /obj/item/clothing/head/helmet/proc/update_helmlight() diff --git a/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm index 443f13c6917f..afe97c858cff 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/_sprite_accessories.dm @@ -54,7 +54,7 @@ var/gender_specific //Something that can be worn by either gender, but looks different on each var/use_static //determines if the accessory will be skipped by color preferences var/color_src = MUTCOLORS //Currently only used by mutantparts so don't worry about hair and stuff. This is the source that this accessory will get its color from. Default is MUTCOLOR, but can also be HAIR, FACEHAIR, EYECOLOR and 0 if none. - var/hasinner //Decides if this sprite has an "inner" part, such as the fleshy parts on ears. + var/secondary_color //Decides if this sprite has a secondary color in use. var/locked = FALSE //Is this part locked from roundstart selection? Used for parts that apply effects var/center = FALSE //Should we center the sprite? var/limbs_id //The limbs id supplied for full-body replacing features. diff --git a/code/modules/mob/dead/new_player/sprite_accessories/ears.dm b/code/modules/mob/dead/new_player/sprite_accessories/ears.dm index 36b2f4d91dab..8b0ec1d6f79d 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/ears.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/ears.dm @@ -11,13 +11,13 @@ icon = 'icons/mob/species/misc/cat.dmi' name = "Cat" icon_state = "cat" - hasinner = 1 + secondary_color = TRUE color_src = HAIR /datum/sprite_accessory/ears/cat/slime name = "Slimecat" icon_state = "cat" - hasinner = FALSE + secondary_color = FALSE color_src = HAIR image_alpha = 150 @@ -25,11 +25,11 @@ icon = 'icons/mob/species/misc/fox.dmi' name = "Fox" icon_state = "fox" - hasinner = 1 + secondary_color = TRUE color_src = HAIR /datum/sprite_accessory/ears/elf name = "Elf" icon_state = "elf" - hasinner = FALSE + secondary_color = FALSE color_src = SKINCOLORS diff --git a/code/modules/mob/dead/new_player/sprite_accessories/lizard.dm b/code/modules/mob/dead/new_player/sprite_accessories/lizard.dm index e18e88353061..ce536a403e48 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/lizard.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/lizard.dm @@ -172,7 +172,7 @@ /datum/sprite_accessory/frills/ears name = "Normal ears" icon_state = "ears" - hasinner = TRUE + secondary_color = TRUE //End ears /datum/sprite_accessory/frills/simple name = "Simple" diff --git a/code/modules/mob/dead/new_player/sprite_accessories/rachnid.dm b/code/modules/mob/dead/new_player/sprite_accessories/rachnid.dm index 1e60fd1d7ab5..d34b915e3e35 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/rachnid.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/rachnid.dm @@ -4,52 +4,37 @@ /datum/sprite_accessory/spider_legs icon = 'icons/mob/species/rachnid/spider_legs.dmi' - color_src = MUTCOLORS - -/datum/sprite_accessory/spider_legs/plain - name = "Plain" - icon_state = "plain" + color_src = 0 + secondary_color = TRUE -/datum/sprite_accessory/spider_legs/fuzzy - name = "Fuzzy" - icon_state = "fuzzy" - -/datum/sprite_accessory/spider_legs/spiky - name = "Spiky" - icon_state = "spiky" +/datum/sprite_accessory/spider_legs/carapace + name = "Carapace" + icon_state = "carapace" //Start spinner /datum/sprite_accessory/spider_spinneret icon = 'icons/mob/species/rachnid/spider_spinneret.dmi' color_src = MUTCOLORS + secondary_color = TRUE -/datum/sprite_accessory/spider_spinneret/plain - name = "Plain" - icon_state = "plain" - -/datum/sprite_accessory/spider_spinneret/fuzzy - name = "Fuzzy" - icon_state = "fuzzy" +/datum/sprite_accessory/spider_spinneret/spikecore + name = "Spikecore" + icon_state = "spikecore" -/datum/sprite_accessory/spider_spinneret/black_widow - name = "Black Widow" - icon_state = "blackwidow" - -//Start mandible - -/datum/sprite_accessory/spider_mandibles - icon = 'icons/mob/species/rachnid/spider_mandibles.dmi' - color_src = MUTCOLORS +/datum/sprite_accessory/spider_spinneret/cerberus + name = "Cerberus" + icon_state = "cerberus" -/datum/sprite_accessory/spider_mandibles/plain - name = "Plain" - icon_state = "plain" +/datum/sprite_accessory/spider_spinneret/queen + name = "Queen" + icon_state = "queen" -/datum/sprite_accessory/spider_mandibles/fuzzy - name = "Fuzzy" - icon_state = "fuzzy" +/datum/sprite_accessory/spider_spinneret/folds + name = "Folds" + icon_state = "folds" + secondary_color = FALSE -/datum/sprite_accessory/spider_mandibles/spiky - name = "Spiky" - icon_state = "spiky" +/datum/sprite_accessory/spider_spinneret/prongs + name = "Prongs" + icon_state = "prongs" diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm index 4da26d4406ca..2045bfe4aa18 100644 --- a/code/modules/mob/living/carbon/damage_procs.dm +++ b/code/modules/mob/living/carbon/damage_procs.dm @@ -25,12 +25,16 @@ update_damage_overlays() else //no bodypart, we deal damage with a more general method. adjustBruteLoss(damage_amount, forced = forced) + if(stat <= HARD_CRIT) + shake_animation(damage_amount) if(BURN) if(BP) if(BP.receive_damage(0, damage_amount, break_modifier)) update_damage_overlays() else adjustFireLoss(damage_amount, forced = forced) + if(stat <= HARD_CRIT) + shake_animation(damage_amount) if(TOX) adjustToxLoss(damage_amount, forced = forced) if(OXY) @@ -43,6 +47,8 @@ update_damage_overlays() else adjustStaminaLoss(damage_amount, forced = forced) + if(stat <= HARD_CRIT) + shake_animation(damage_amount) return TRUE diff --git a/code/modules/mob/living/carbon/emote.dm b/code/modules/mob/living/carbon/emote.dm index 3a4591fabb98..c9a7e4f1019c 100644 --- a/code/modules/mob/living/carbon/emote.dm +++ b/code/modules/mob/living/carbon/emote.dm @@ -429,7 +429,7 @@ icon = 'icons/mob/animal.dmi' icon_state = "heart" hitsound = 'sound/effects/kiss.ogg' - hitsound_wall = 'sound/effects/kiss.ogg' + hitsound_non_living = 'sound/effects/kiss.ogg' pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE speed = 1.6 damage_type = BRUTE diff --git a/code/modules/mob/living/carbon/human/consistent_human.dm b/code/modules/mob/living/carbon/human/consistent_human.dm index c28328fde590..c35d8a71759e 100644 --- a/code/modules/mob/living/carbon/human/consistent_human.dm +++ b/code/modules/mob/living/carbon/human/consistent_human.dm @@ -24,7 +24,6 @@ dna.features["moth_fluff"] = GLOB.moth_fluff_list[seed % length(GLOB.moth_fluff_list) + 1] dna.features["spider_legs"] = GLOB.spider_legs_list[seed % length(GLOB.spider_legs_list) + 1] dna.features["spider_spinneret"] = GLOB.spider_spinneret_list[seed % length(GLOB.spider_spinneret_list) + 1] - dna.features["spider_mandibles"] = GLOB.spider_mandibles_list[seed % length(GLOB.spider_mandibles_list) + 1] dna.features["squid_face"] = GLOB.squid_face_list[seed % length(GLOB.squid_face_list) + 1] dna.features["kepori_feathers"] = GLOB.kepori_feathers_list[seed % length(GLOB.kepori_feathers_list) + 1] dna.features["kepori_body_feathers"] = GLOB.kepori_body_feathers_list[seed % length(GLOB.kepori_body_feathers_list) + 1] diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 4f3399675f0a..61524b925d90 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -978,8 +978,6 @@ GLOBAL_LIST_EMPTY(roundstart_races) S = GLOB.spider_legs_list[H.dna.features["spider_legs"]] if("spider_spinneret") S = GLOB.spider_spinneret_list[H.dna.features["spider_spinneret"]] - if ("spider_mandibles") - S = GLOB.spider_mandibles_list[H.dna.features["spider_mandibles"]] if("kepori_body_feathers") S = GLOB.kepori_body_feathers_list[H.dna.features["kepori_body_feathers"]] if("kepori_tail_feathers") @@ -1054,17 +1052,17 @@ GLOBAL_LIST_EMPTY(roundstart_races) accessory_overlay.color = forced_colour standing += accessory_overlay - if(S.hasinner) - var/mutable_appearance/inner_accessory_overlay = mutable_appearance(S.icon, layer = -layer) + if(S.secondary_color) + var/mutable_appearance/secondary_color_overlay = mutable_appearance(S.icon, layer = -layer) if(S.gender_specific) - inner_accessory_overlay.icon_state = "[g]_[bodypart]inner_[S.icon_state]_[layertext]" + secondary_color_overlay.icon_state = "[g]_[bodypart]_secondary_[S.icon_state]_[layertext]" else - inner_accessory_overlay.icon_state = "m_[bodypart]inner_[S.icon_state]_[layertext]" + secondary_color_overlay.icon_state = "m_[bodypart]_secondary_[S.icon_state]_[layertext]" if(S.center) - inner_accessory_overlay = center_image(inner_accessory_overlay, S.dimension_x, S.dimension_y) - inner_accessory_overlay.color = "#[H.dna.features["mcolor2"]]" - standing += inner_accessory_overlay + secondary_color_overlay = center_image(secondary_color_overlay, S.dimension_x, S.dimension_y) + secondary_color_overlay.color = "#[H.dna.features["mcolor2"]]" + standing += secondary_color_overlay H.overlays_standing[layer] = standing.Copy() standing = list() @@ -1768,6 +1766,8 @@ GLOBAL_LIST_EMPTY(roundstart_races) H.update_damage_overlays() else//no bodypart, we deal damage with a more general method. H.adjustBruteLoss(damage_amount) + if(H.stat <= HARD_CRIT) + H.shake_animation(damage_amount) if(BURN) H.damageoverlaytemp = 20 var/damage_amount = forced ? damage : damage * hit_percent * burnmod * H.physiology.burn_mod @@ -1776,6 +1776,8 @@ GLOBAL_LIST_EMPTY(roundstart_races) H.update_damage_overlays() else H.adjustFireLoss(damage_amount) + if(H.stat <= HARD_CRIT) + H.shake_animation(damage_amount) if(TOX) var/damage_amount = forced ? damage : damage * hit_percent * H.physiology.tox_mod H.adjustToxLoss(damage_amount) @@ -1792,6 +1794,8 @@ GLOBAL_LIST_EMPTY(roundstart_races) H.update_stamina() else H.adjustStaminaLoss(damage_amount) + if(H.stat <= HARD_CRIT) + H.shake_animation(damage_amount) if(BRAIN) var/damage_amount = forced ? damage : damage * hit_percent * H.physiology.brain_mod H.adjustOrganLoss(ORGAN_SLOT_BRAIN, damage_amount) diff --git a/code/modules/mob/living/carbon/human/species_types/dullahan.dm b/code/modules/mob/living/carbon/human/species_types/dullahan.dm index 55217a814d35..ba23e45b4ba8 100644 --- a/code/modules/mob/living/carbon/human/species_types/dullahan.dm +++ b/code/modules/mob/living/carbon/human/species_types/dullahan.dm @@ -17,12 +17,6 @@ var/obj/item/dullahan_relay/myhead - -/datum/species/dullahan/check_roundstart_eligible() - if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) - return TRUE - return FALSE - /datum/species/dullahan/on_species_gain(mob/living/carbon/human/H, datum/species/old_species) . = ..() H.lose_hearing_sensitivity(ORGAN_TRAIT) diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index 4164b8e2bb8e..38a8b64c0aac 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -696,11 +696,6 @@ REMOVE_TRAIT(C, TRAIT_HOLY, SPECIES_TRAIT) ..() -/datum/species/golem/cloth/check_roundstart_eligible() - if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) - return TRUE - return ..() - /datum/species/golem/cloth/random_name(gender,unique,lastname) var/pharaoh_name = pick("Neferkare", "Hudjefa", "Khufu", "Mentuhotep", "Ahmose", "Amenhotep", "Thutmose", "Hatshepsut", "Tutankhamun", "Ramses", "Seti", \ "Merenptah", "Djer", "Semerkhet", "Nynetjer", "Khafre", "Pepi", "Intef", "Ay") //yes, Ay was an actual pharaoh diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm index f54c9dff634d..6e4ae1cdb9a3 100644 --- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm @@ -32,11 +32,6 @@ else if (light_amount < SHADOW_SPECIES_LIGHT_THRESHOLD) //heal in the dark H.heal_overall_damage(1,1, 0, BODYTYPE_ORGANIC) -/datum/species/shadow/check_roundstart_eligible() - if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) - return TRUE - return ..() - /datum/species/shadow/nightmare name = "Nightmare" id = "nightmare" diff --git a/code/modules/mob/living/carbon/human/species_types/skeletons.dm b/code/modules/mob/living/carbon/human/species_types/skeletons.dm index caa36764a1ff..920115f52c02 100644 --- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm +++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm @@ -23,11 +23,6 @@ species_l_leg = /obj/item/bodypart/leg/left/skeleton species_r_leg = /obj/item/bodypart/leg/right/skeleton -/datum/species/skeleton/check_roundstart_eligible() - if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) - return TRUE - return ..() - //Can still metabolize milk through meme magic /datum/species/skeleton/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H) if(chem.type == /datum/reagent/consumable/milk) 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 84faffde6ca2..222386c44909 100644 --- a/code/modules/mob/living/carbon/human/species_types/spider.dm +++ b/code/modules/mob/living/carbon/human/species_types/spider.dm @@ -45,8 +45,8 @@ GLOBAL_LIST_INIT(spider_last, world.file2list("strings/names/spider_last.txt")) default_color = "00FF00" species_traits = list(LIPS, NOEYESPRITES, MUTCOLORS_PARTSONLY) inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG - mutant_bodyparts = list("spider_legs", "spider_spinneret", "spider_mandibles") - default_features = list("spider_legs" = "Plain", "spider_spinneret" = "Plain", "spider_mandibles" = "Plain", "body_size" = "Normal") + mutant_bodyparts = list("spider_legs", "spider_spinneret") + default_features = list("spider_legs" = "Carapaced", "spider_spinneret" = "Plain", "body_size" = "Normal") attack_verb = "slash" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' 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 b4c9fac9db08..ebc923c01075 100644 --- a/code/modules/mob/living/carbon/human/species_types/vampire.dm +++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm @@ -16,14 +16,6 @@ var/info_text = "You are a Vampire. You will slowly but constantly lose blood if outside of a coffin. If inside a coffin, you will slowly heal. You may gain more blood by grabbing a live victim and using your drain ability." var/obj/effect/proc_holder/spell/targeted/shapeshift/bat/batform //attached to the datum itself to avoid cloning memes, and other duplicates - - - -/datum/species/vampire/check_roundstart_eligible() - if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) - return TRUE - return FALSE - /datum/species/vampire/on_species_gain(mob/living/carbon/human/C, datum/species/old_species) . = ..() to_chat(C, "[info_text]") diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm index 8c53a6ca9a07..702adfb224a2 100644 --- a/code/modules/mob/living/carbon/human/species_types/zombies.dm +++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm @@ -24,11 +24,6 @@ species_l_leg = /obj/item/bodypart/leg/left/zombie species_r_leg = /obj/item/bodypart/leg/right/zombie -/datum/species/zombie/check_roundstart_eligible() - if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) - return TRUE - return ..() - /datum/species/zombie/infectious name = "\improper Infectious Zombie" id = "memezombies" diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index 4916d062da29..76daa5ba21d4 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -23,8 +23,12 @@ switch(damagetype) if(BRUTE) adjustBruteLoss(damage_amount, forced = forced) + if(stat <= HARD_CRIT) + shake_animation(damage_amount) if(BURN) adjustFireLoss(damage_amount, forced = forced) + if(stat <= HARD_CRIT) + shake_animation(damage_amount) if(TOX) adjustToxLoss(damage_amount, forced = forced) if(OXY) @@ -33,6 +37,8 @@ adjustCloneLoss(damage_amount, forced = forced) if(STAMINA) adjustStaminaLoss(damage_amount, forced = forced) + if(stat <= HARD_CRIT) + shake_animation(damage_amount) return TRUE ///like [apply_damage][/mob/living/proc/apply_damage] except it always uses the damage procs diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 31676cd64007..e5617beafade 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -55,6 +55,7 @@ var/on_hit_state = P.on_hit(src, armor, piercing_hit) if(!P.nodamage && on_hit_state != BULLET_ACT_BLOCK && !QDELETED(src)) //QDELETED literally just for the instagib rifle. Yeah. apply_damage(P.damage, P.damage_type, def_zone, armor) + recoil_camera(src, clamp((P.damage-armor)/4,0.5,10), clamp((P.damage-armor)/4,0.5,10), P.damage/8, P.Angle) apply_effects(P.stun, P.knockdown, P.unconscious, P.irradiate, P.slur, P.stutter, P.eyeblur, P.drowsy, armor, P.stamina, P.jitter, P.paralyze, P.immobilize) if(P.dismemberment) check_projectile_dismemberment(P, def_zone) diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm b/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm index 91da0614fb50..c7cca51545cc 100644 --- a/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm +++ b/code/modules/mob/living/simple_animal/hostile/jungle/seedling.dm @@ -47,7 +47,7 @@ flag = "energy" light_color = LIGHT_COLOR_YELLOW hitsound = 'sound/weapons/sear.ogg' - hitsound_wall = 'sound/weapons/effects/searwall.ogg' + hitsound_non_living = 'sound/weapons/effects/searwall.ogg' nondirectional_sprite = TRUE /obj/projectile/seedling/Bump(atom/A)//Stops seedlings from destroying other jungle mobs through FF diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index d48db130f983..01c2ee10ed26 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -623,6 +623,22 @@ I.attack_self(src) update_inv_hands() +/mob/verb/do_unique_action() + set name = "Do Unique Action" + set category = "Object" + set src = usr + + if(ismecha(loc)) + return + + if(incapacitated()) + return + + var/obj/item/I = get_active_held_item() + if(I) + I.unique_action(src) + update_inv_hands() + /** * Get the notes of this mob * diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 4c4a58378410..de1cb857ed4e 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -221,23 +221,37 @@ return sanitize(.) ///Shake the camera of the person viewing the mob SO REAL! -/proc/shake_camera(mob/M, duration, strength=1) - if(!M || !M.client || duration < 1) +/proc/shake_camera(mob/recoilster, duration, strength=1) + if(!recoilster || !recoilster.client || duration < 1) return - var/client/C = M.client - var/oldx = C.pixel_x - var/oldy = C.pixel_y + var/client/client_to_shake = recoilster.client + var/oldx = client_to_shake.pixel_x + var/oldy = client_to_shake.pixel_y var/max = strength*world.icon_size var/min = -(strength*world.icon_size) for(var/i in 0 to duration-1) if (i == 0) - animate(C, pixel_x=rand(min,max), pixel_y=rand(min,max), time=1) + animate(client_to_shake, pixel_x=rand(min,max), pixel_y=rand(min,max), time=1) else animate(pixel_x=rand(min,max), pixel_y=rand(min,max), time=1) animate(pixel_x=oldx, pixel_y=oldy, time=1) +/proc/recoil_camera(mob/recoilster, duration, backtime_duration, strength, angle) + if(!recoilster || !recoilster.client) + return + strength *= world.icon_size + var/client/client_to_shake = recoilster.client + var/oldx = client_to_shake.pixel_x + var/oldy = client_to_shake.pixel_y + + //get pixels to move the camera in an angle + var/mpx = sin(angle) * strength + var/mpy = cos(angle) * strength + animate(client_to_shake, pixel_x = oldx+mpx, pixel_y = oldy+mpy, time = duration, flags = ANIMATION_RELATIVE) + animate(pixel_x = oldx, pixel_y = oldy, time = backtime_duration, easing = BACK_EASING) + ///Find if the message has the real name of any user mob in the mob_list /proc/findname(msg) if(!istext(msg)) diff --git a/code/modules/movespeed/modifiers/items.dm b/code/modules/movespeed/modifiers/items.dm index 32f5756e0843..b10e25c84e7a 100644 --- a/code/modules/movespeed/modifiers/items.dm +++ b/code/modules/movespeed/modifiers/items.dm @@ -11,5 +11,9 @@ /datum/movespeed_modifier/die_of_fate multiplicative_slowdown = 1 +/datum/movespeed_modifier/gun + multiplicative_slowdown = 1 + variable = TRUE + /datum/movespeed_modifier/berserk multiplicative_slowdown = -0.2 diff --git a/code/modules/projectiles/ammunition/_ammunition.dm b/code/modules/projectiles/ammunition/_ammunition.dm index 6222f147861e..9a34e0cff94a 100644 --- a/code/modules/projectiles/ammunition/_ammunition.dm +++ b/code/modules/projectiles/ammunition/_ammunition.dm @@ -23,7 +23,7 @@ /// The sound played when this ammo is fired by an energy gun. var/fire_sound = null /// The visual effect that appears when the ammo is fired. - var/firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect + var/firing_effect_type /// Enables casing spinning and sizzling after being ejected from a gun. var/heavy_metal = TRUE /// If true, the casing's sprite will automatically be transformed in Initialize(). @@ -36,6 +36,8 @@ var/delay = 0 //Delay for energy weapons var/click_cooldown_override = 0 //Override this to make your gun have a faster fire rate, in tenths of a second. 4 is the default gun cooldown. + var/list/bounce_sfx_override // if true, overrides the bouncing sfx from the turf to this one + /obj/item/ammo_casing/spent name = "spent bullet casing" @@ -104,7 +106,10 @@ update_appearance() SpinAnimation(10, 1) var/turf/T = get_turf(src) + if(bounce_sfx_override) + addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, src, pick(bounce_sfx_override), 20, 1), bounce_delay) //Soft / non-solid turfs that shouldn't make a sound when a shell casing is ejected over them. + return if(still_warm && T && T.bullet_sizzle) addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, src, 'sound/items/welder.ogg', 20, 1), bounce_delay) //If the turf is made of water and the shell casing is still hot, make a sizzling sound when it's ejected. else if(T && T.bullet_bounce_sound) - addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, src, T.bullet_bounce_sound, 20, 1), bounce_delay) //Soft / non-solid turfs that shouldn't make a sound when a shell casing is ejected over them. + addtimer(CALLBACK(GLOBAL_PROC, .proc/playsound, src, pick(T.bullet_bounce_sound), 20, 1), bounce_delay) //Soft / non-solid turfs that shouldn't make a sound when a shell casing is ejected over them. diff --git a/code/modules/projectiles/ammunition/ballistic/pistol.dm b/code/modules/projectiles/ammunition/ballistic/pistol.dm index 15abfdb02e10..b9237ea91b4d 100644 --- a/code/modules/projectiles/ammunition/ballistic/pistol.dm +++ b/code/modules/projectiles/ammunition/ballistic/pistol.dm @@ -127,3 +127,11 @@ name = ".50 AE hollow point bullet casing" desc = "A .50 AE hollow point bullet casing." projectile_type = /obj/projectile/bullet/a50AE/hp + +// .22 LR (Himehabu) +/obj/item/ammo_casing/c22lr + name = ".22 LR bullet casing" + desc = "A .22 LR bullet casing." + projectile_type = /obj/projectile/bullet/c22lr + caliber = "22lr" + diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm index 9f74727086e5..b297ee30e776 100644 --- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm +++ b/code/modules/projectiles/ammunition/ballistic/shotgun.dm @@ -9,6 +9,8 @@ custom_materials = list(/datum/material/iron=4000) projectile_type = /obj/projectile/bullet/slug + bounce_sfx_override = 'sound/weapons/gun/general/bulletcasing_shotgun_bounce.ogg' + /obj/item/ammo_casing/shotgun/update_icon_state() icon_state = "[initial(icon_state)][BB ? "" : "-spent"]" return ..() diff --git a/code/modules/projectiles/ammunition/energy/laser.dm b/code/modules/projectiles/ammunition/energy/laser.dm index 05653dab0bd8..1e2d92996077 100644 --- a/code/modules/projectiles/ammunition/energy/laser.dm +++ b/code/modules/projectiles/ammunition/energy/laser.dm @@ -151,4 +151,5 @@ select_name = "kill" projectile_type = /obj/projectile/beam/weak/penetrator variance = 0.8 + delay = 0.5 fire_sound = 'sound/weapons/laser4.ogg' diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm index 0336744ec748..e8c47f60f85b 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm @@ -150,6 +150,7 @@ max_ammo = 22 multiple_sprites = AMMO_BOX_FULL_EMPTY item_flags = NO_MAT_REDEMPTION + instant_load = TRUE // Ammo Boxes @@ -366,3 +367,21 @@ icon_state = "foambox_riot" ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot custom_materials = list(/datum/material/iron = 50000) + +/obj/item/ammo_box/c22lr_box + name = "ammo box (.22 LR)" + desc = "A box of standard .22 LR ammo." + icon_state = "22lrbox" + ammo_type = /obj/item/ammo_casing/c22lr + max_ammo = 75 + +/obj/item/ammo_box/c45_speedloader + name = "speed loader (.45)" + desc = "Designed to quickly reload revolvers." + icon_state = "38" + ammo_type = /obj/item/ammo_casing/c45 + max_ammo = 6 + multiple_sprites = AMMO_BOX_PER_BULLET + custom_materials = list(/datum/material/iron = 15000) + w_class = WEIGHT_CLASS_TINY + instant_load = TRUE diff --git a/code/modules/projectiles/boxes_magazines/external/gauss.dm b/code/modules/projectiles/boxes_magazines/external/gauss.dm index ca497d6560cb..fa3797707ce6 100644 --- a/code/modules/projectiles/boxes_magazines/external/gauss.dm +++ b/code/modules/projectiles/boxes_magazines/external/gauss.dm @@ -9,7 +9,7 @@ /obj/item/ammo_box/magazine/modelh name = "Model H magazine (ferromagnetic slugs)" - desc = "A 10-round magazine for the Model H pistol. Ferromagnetic slugs are slow, but do incredible damage with significant armor penetration." + desc = "A 10-round magazine for the Model H pistol. Ferromagnetic slugs are slow and incredibly powerful bullets, but are easily stopped by even a sliver of armor." icon_state = "smallmagmag" ammo_type = /obj/item/ammo_casing/caseless/gauss/slug caliber = "slug" diff --git a/code/modules/projectiles/boxes_magazines/external/lmg.dm b/code/modules/projectiles/boxes_magazines/external/lmg.dm index 192a9f723857..402db1502853 100644 --- a/code/modules/projectiles/boxes_magazines/external/lmg.dm +++ b/code/modules/projectiles/boxes_magazines/external/lmg.dm @@ -5,7 +5,7 @@ base_icon_state = "a762" ammo_type = /obj/item/ammo_casing/mm712x82 caliber = "7.12x82mm" - max_ammo = 50 + max_ammo = 100 w_class = WEIGHT_CLASS_NORMAL /obj/item/ammo_box/magazine/mm712x82/hollow @@ -30,4 +30,4 @@ /obj/item/ammo_box/magazine/mm712x82/update_icon_state() . = ..() - icon_state = "[base_icon_state]-[round(ammo_count(), 10)]" + icon_state = "[base_icon_state]-[round(ammo_count(), 20)]" diff --git a/code/modules/projectiles/boxes_magazines/external/pistol.dm b/code/modules/projectiles/boxes_magazines/external/pistol.dm index ca4702b641d7..cc92a758eba0 100644 --- a/code/modules/projectiles/boxes_magazines/external/pistol.dm +++ b/code/modules/projectiles/boxes_magazines/external/pistol.dm @@ -136,3 +136,12 @@ caliber = "9mm" max_ammo = 4 custom_materials = list(/datum/material/iron = 20000) + +/obj/item/ammo_box/magazine/m22lr + name = "pistol magazine (.22 LR)" + desc = "A single-stack handgun magazine designed to chamber .22 LR. It's rather tiny, all things considered." + icon_state = "pistol_22lr" + ammo_type = /obj/item/ammo_casing/c22lr + caliber = "22lr" + max_ammo = 10 + w_class = WEIGHT_CLASS_TINY diff --git a/code/modules/projectiles/boxes_magazines/external/rifle.dm b/code/modules/projectiles/boxes_magazines/external/rifle.dm index 86fef186652b..9ae63763593b 100644 --- a/code/modules/projectiles/boxes_magazines/external/rifle.dm +++ b/code/modules/projectiles/boxes_magazines/external/rifle.dm @@ -27,7 +27,7 @@ base_icon_state = "47x33mm" ammo_type = /obj/item/ammo_casing/caseless/c47x33mm caliber = "4.73x33mm caseless" - max_ammo = 50 //brrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr + max_ammo = 100 //brrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr w_class = WEIGHT_CLASS_NORMAL /obj/item/ammo_box/magazine/rifle47x33mm/update_icon_state() @@ -64,7 +64,7 @@ icon_state = "ak47_mag" ammo_type = /obj/item/ammo_casing/a762_39 caliber = "7.62x39mm" - max_ammo = 20 + max_ammo = 30 /obj/item/ammo_box/magazine/ak47/update_icon_state() . = ..() diff --git a/code/modules/projectiles/boxes_magazines/internal/gauss.dm b/code/modules/projectiles/boxes_magazines/internal/gauss.dm index 06527ae49197..6e561f6d26d5 100644 --- a/code/modules/projectiles/boxes_magazines/internal/gauss.dm +++ b/code/modules/projectiles/boxes_magazines/internal/gauss.dm @@ -3,3 +3,4 @@ ammo_type = /obj/item/ammo_casing/caseless/gauss caliber = "pellet" max_ammo = 22 + instant_load = TRUE diff --git a/code/modules/projectiles/boxes_magazines/internal/revolver.dm b/code/modules/projectiles/boxes_magazines/internal/revolver.dm index 13b007e229e0..7715d31b1323 100644 --- a/code/modules/projectiles/boxes_magazines/internal/revolver.dm +++ b/code/modules/projectiles/boxes_magazines/internal/revolver.dm @@ -32,3 +32,10 @@ /obj/item/ammo_box/magazine/internal/cylinder/pepperbox name = "pepperbox revolver cylinder" max_ammo = 5 + +/obj/item/ammo_box/magazine/internal/cylinder/rev45 + name = "cattleman revolver cylinder" + ammo_type = /obj/item/ammo_casing/c45 + caliber = ".45" + max_ammo = 6 + instant_load = TRUE diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index f91fa467cfef..6cd673874f31 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -31,7 +31,6 @@ var/suppressed_sound = 'sound/weapons/gun/general/heavy_shot_suppressed.ogg' var/suppressed_volume = 60 var/can_unsuppress = TRUE - var/recoil = 0 //boom boom shake the room var/clumsy_check = 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 @@ -43,7 +42,6 @@ var/semicd = 0 //cooldown handler var/weapon_weight = WEAPON_LIGHT var/dual_wield_spread = 24 //additional spread when dual wielding - var/spread = 0 //Spread induced by the gun itself. var/randomspread = 1 //Set to 0 for shotguns. This is used for weapons that don't fire all their bullets at once. 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. @@ -77,14 +75,78 @@ var/pb_knockback = 0 + var/wielded = FALSE // true if the gun is wielded via twohanded component, shouldnt affect anything else + + var/wielded_fully = FALSE // true if the gun is wielded after delay, should affects accuracy + + ///How much the bullet scatters when fired while wielded. + var/spread = 4 + ///How much the bullet scatters when fired while unwielded. + var/spread_unwielded = 12 + + ///Screen shake when the weapon is fired while wielded. + var/recoil = 0 + ///Screen shake when the weapon is fired while unwielded. + var/recoil_unwielded = 0 + ///a multiplier of the duration the recoil takes to go back to normal view, this is (recoil*recoil_backtime_multiplier)+1 + var/recoil_backtime_multiplier = 2 + ///this is how much deviation the gun recoil can have, recoil pushes the screen towards the reverse angle you shot + some deviation which this is the max. + var/recoil_deviation = 22.5 + + ///Slowdown for wielding + var/wield_slowdown = 0.1 + ///How long between wielding and firing in tenths of seconds + var/wield_delay = 0.4 SECONDS + ///Storing value for above + var/wield_time = 0 + + ///Effect for the muzzle flash of the gun. + var/obj/effect/muzzle_flash/muzzle_flash + ///Icon state of the muzzle flash effect. + var/muzzleflash_iconstate + ///Brightness of the muzzle flash effect. + var/muzzle_flash_lum = 3 + ///Color of the muzzle flash effect. + var/muzzle_flash_color = COLOR_VERY_SOFT_YELLOW + /obj/item/gun/Initialize() . = ..() + RegisterSignal(src, COMSIG_TWOHANDED_WIELD, .proc/on_wield) + RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, .proc/on_unwield) if(pin) pin = new pin(src) if(gun_light) alight = new(src) + muzzle_flash = new(src, muzzleflash_iconstate) build_zooming() +/obj/item/gun/ComponentInitialize() + . = ..() + AddComponent(/datum/component/two_handed) + +/// triggered on wield of two handed item +/obj/item/gun/proc/on_wield(obj/item/source, mob/user) + wielded = TRUE + INVOKE_ASYNC(src, .proc.do_wield, user) + +/obj/item/gun/proc/do_wield(mob/user) + 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/is_wielded), ignore_loc_change = TRUE)) + wielded_fully = TRUE + else + wielded_fully = TRUE + +/obj/item/gun/proc/is_wielded() + return wielded + +/// triggered on unwield of two handed item +/obj/item/gun/proc/on_unwield(obj/item/source, mob/user) + wielded = FALSE + wielded_fully = FALSE + user.remove_movespeed_modifier(/datum/movespeed_modifier/gun) + /obj/item/gun/Destroy() if(isobj(pin)) //Can still be the initial path, then we skip QDEL_NULL(pin) @@ -98,6 +160,8 @@ QDEL_NULL(azoom) if(isatom(suppressed)) //SUPPRESSED IS USED AS BOTH A TRUE/FALSE AND AS A REF, WHAT THE FUCKKKKKKKKKKKKKKKKK QDEL_NULL(suppressed) + if(muzzle_flash) + QDEL_NULL(muzzle_flash) return ..() /obj/item/gun/handle_atom_del(atom/A) @@ -154,8 +218,15 @@ /obj/item/gun/proc/shoot_live_shot(mob/living/user, pointblank = 0, atom/pbtarget = null, message = 1) - if(recoil) - shake_camera(user, recoil + 1, recoil) + 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 && recoil) + simulate_recoil(user, recoil, actual_angle) + else if(!wielded_fully && recoil_unwielded) + 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) @@ -224,9 +295,8 @@ if(check_botched(user)) return - var/obj/item/bodypart/other_hand = user.has_hand_for_held_index(user.get_inactive_hand_index()) //returns non-disabled inactive hands - if(weapon_weight == WEAPON_HEAVY && (user.get_inactive_held_item() || !other_hand)) - to_chat(user, "You need two hands to fire [src]!") + 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 @@ -322,8 +392,12 @@ var/sprd = 0 var/randomized_gun_spread = 0 var/rand_spr = rand() - if(spread) + + if(wielded_fully && spread) randomized_gun_spread = rand(0,spread) + else if(!wielded_fully && spread_unwielded) + randomized_gun_spread = rand(0,spread_unwielded) + if(HAS_TRAIT(user, TRAIT_POOR_AIM)) //nice shootin' tex bonus_spread += 25 var/randomized_bonus_spread = rand(0, bonus_spread) @@ -353,8 +427,9 @@ return process_chamber() update_appearance() - semicd = TRUE - addtimer(CALLBACK(src, .proc/reset_semicd), fire_delay) + if(fire_delay) + semicd = TRUE + addtimer(CALLBACK(src, .proc/reset_semicd), fire_delay) if(user) user.update_inv_hands() @@ -550,7 +625,7 @@ gun_light.update_brightness() to_chat(user, "You toggle the gunlight [gun_light.on ? "on":"off"].") - playsound(user, 'sound/weapons/empty.ogg', 100, TRUE) + playsound(user, gun_light.on ? gun_light.toggle_on_sound : gun_light.toggle_off_sound, 40, TRUE) update_gunlight() /obj/item/gun/proc/update_gunlight() @@ -637,6 +712,111 @@ /obj/item/gun/proc/before_firing(atom/target,mob/user) return +/obj/item/gun/proc/simulate_recoil(mob/living/user, recoil_bonus = 0, firing_angle) + var/total_recoil = recoil_bonus + + var/actual_angle = firing_angle + rand(-recoil_deviation, recoil_deviation) + 180 + if(actual_angle > 360) + actual_angle -= 360 + if(total_recoil > 0) + recoil_camera(user, total_recoil + 1, (total_recoil * recoil_backtime_multiplier)+1, total_recoil, actual_angle) + return TRUE + +/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) + set_light_on(TRUE) + update_light() + addtimer(CALLBACK(src, .proc/reset_light_range, prev_light), 1 SECONDS) + //Offset the pixels. + switch(firing_angle) + if(0, 360) + muzzle_flash.pixel_x = 0 + muzzle_flash.pixel_y = 8 + muzzle_flash.layer = initial(muzzle_flash.layer) + if(1 to 44) + muzzle_flash.pixel_x = round(4 * ((firing_angle) / 45)) + muzzle_flash.pixel_y = 8 + muzzle_flash.layer = initial(muzzle_flash.layer) + if(45) + muzzle_flash.pixel_x = 8 + muzzle_flash.pixel_y = 8 + muzzle_flash.layer = initial(muzzle_flash.layer) + if(46 to 89) + muzzle_flash.pixel_x = 8 + muzzle_flash.pixel_y = round(4 * ((90 - firing_angle) / 45)) + muzzle_flash.layer = initial(muzzle_flash.layer) + if(90) + muzzle_flash.pixel_x = 8 + muzzle_flash.pixel_y = 0 + muzzle_flash.layer = initial(muzzle_flash.layer) + if(91 to 134) + muzzle_flash.pixel_x = 8 + muzzle_flash.pixel_y = round(-3 * ((firing_angle - 90) / 45)) + muzzle_flash.layer = initial(muzzle_flash.layer) + if(135) + muzzle_flash.pixel_x = 8 + muzzle_flash.pixel_y = -6 + muzzle_flash.layer = initial(muzzle_flash.layer) + if(136 to 179) + muzzle_flash.pixel_x = round(4 * ((180 - firing_angle) / 45)) + muzzle_flash.pixel_y = -6 + muzzle_flash.layer = ABOVE_MOB_LAYER + if(180) + muzzle_flash.pixel_x = 0 + muzzle_flash.pixel_y = -6 + muzzle_flash.layer = ABOVE_MOB_LAYER + if(181 to 224) + muzzle_flash.pixel_x = round(-6 * ((firing_angle - 180) / 45)) + muzzle_flash.pixel_y = -6 + muzzle_flash.layer = ABOVE_MOB_LAYER + if(225) + muzzle_flash.pixel_x = -6 + muzzle_flash.pixel_y = -6 + muzzle_flash.layer = initial(muzzle_flash.layer) + if(226 to 269) + muzzle_flash.pixel_x = -6 + muzzle_flash.pixel_y = round(-6 * ((270 - firing_angle) / 45)) + muzzle_flash.layer = initial(muzzle_flash.layer) + if(270) + muzzle_flash.pixel_x = -6 + muzzle_flash.pixel_y = 0 + muzzle_flash.layer = initial(muzzle_flash.layer) + if(271 to 314) + muzzle_flash.pixel_x = -6 + muzzle_flash.pixel_y = round(8 * ((firing_angle - 270) / 45)) + muzzle_flash.layer = initial(muzzle_flash.layer) + if(315) + muzzle_flash.pixel_x = -6 + muzzle_flash.pixel_y = 8 + muzzle_flash.layer = initial(muzzle_flash.layer) + if(316 to 359) + muzzle_flash.pixel_x = round(-6 * ((360 - firing_angle) / 45)) + muzzle_flash.pixel_y = 8 + muzzle_flash.layer = initial(muzzle_flash.layer) + + muzzle_flash.transform = null + muzzle_flash.transform = turn(muzzle_flash.transform, firing_angle) + flash_loc.vis_contents += muzzle_flash + muzzle_flash.applied = TRUE + + addtimer(CALLBACK(src, .proc/remove_muzzle_flash, flash_loc, muzzle_flash), 0.2 SECONDS) + +/obj/item/gun/proc/reset_light_range(lightrange) + set_light_range(lightrange) + set_light_color(initial(light_color)) + if(lightrange <= 0) + set_light_on(FALSE) + update_light() + +/obj/item/gun/proc/remove_muzzle_flash(atom/movable/flash_loc, obj/effect/muzzle_flash/muzzle_flash) + if(!QDELETED(flash_loc)) + flash_loc.vis_contents -= muzzle_flash + muzzle_flash.applied = FALSE + ///////////// // ZOOMING // ///////////// diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 9efbc6169b25..90bcf0c73508 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -81,12 +81,15 @@ var/rack_delay = 5 ///time of the most recent rack, used for cooldown purposes var/recent_rack = 0 - ///Whether the gun can be tacloaded by slapping a fresh magazine directly on it - var/tac_reloads = TRUE //Snowflake mechanic no more. ///Whether the gun can be sawn off by sawing tools var/can_be_sawn_off = FALSE var/flip_cooldown = 0 + ///Whether the gun can be tacloaded by slapping a fresh magazine directly on it + var/tac_reloads = TRUE //Snowflake mechanic no more. + ///If we have the 'snowflake mechanic,' how long should it take to reload? + var/tactical_reload_delay = 1.2 SECONDS + /obj/item/gun/ballistic/Initialize() . = ..() if (!spawnwithmagazine) @@ -220,19 +223,23 @@ playsound(src, eject_empty_sound, eject_sound_volume, eject_sound_vary) magazine.forceMove(drop_location()) var/obj/item/ammo_box/magazine/old_mag = magazine - if (tac_load) - if (insert_magazine(user, tac_load, FALSE)) - to_chat(user, "You perform a tactical reload on \the [src].") - else - to_chat(user, "You dropped the old [magazine_wording], but the new one doesn't fit. How embarassing.") - magazine = null - else - magazine = null - user.put_in_hands(old_mag) old_mag.update_appearance() + magazine = null if (display_message) to_chat(user, "You pull the [magazine_wording] out of \the [src].") update_appearance() + if (tac_load) + if(do_after(user, tactical_reload_delay, TRUE, src)) + if (insert_magazine(user, tac_load, FALSE)) + to_chat(user, "You perform a tactical reload on \the [src].") + else + to_chat(user, "You dropped the old [magazine_wording], but the new one doesn't fit. How embarassing.") + else + to_chat(user, "Your reload was interupted!") + return + + user.put_in_hands(old_mag) + update_appearance() /obj/item/gun/ballistic/can_shoot() return chambered @@ -342,7 +349,7 @@ return return ..() -/obj/item/gun/ballistic/attack_self(mob/living/user) +/obj/item/gun/ballistic/unique_action(mob/living/user) if(HAS_TRAIT(user, TRAIT_GUNFLIP)) if(flip_cooldown <= world.time) if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(40)) @@ -352,13 +359,10 @@ user.dropItemToGround(src, TRUE) return flip_cooldown = (world.time + 30) + SpinAnimation(7,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 - if(!internal_magazine && magazine) - if(!magazine.ammo_count()) - eject_magazine(user) - return if(bolt_type == BOLT_TYPE_NO_BOLT) chambered = null var/num_unloaded = 0 diff --git a/code/modules/projectiles/guns/ballistic/assault.dm b/code/modules/projectiles/guns/ballistic/assault.dm index 7ec610bbc33c..5b3ced3e8100 100644 --- a/code/modules/projectiles/guns/ballistic/assault.dm +++ b/code/modules/projectiles/guns/ballistic/assault.dm @@ -1,12 +1,31 @@ /obj/item/gun/ballistic/automatic/assault burst_size = 1 actions_types = list() + wield_delay = 0.7 SECONDS + wield_slowdown = 0.6 + + fire_delay = 1 + + 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_unwielded = 20 /obj/item/gun/ballistic/automatic/assault/ak47 name = "\improper SVG-67" desc = "A Frontier-built assault rifle descended from a pattern of unknown provenance. Its low cost, ease of maintenance, and powerful 7.62x39mm cartridge make it a popular choice among a wide variety of outlaws." icon = 'icons/obj/guns/48x32guns.dmi' fire_sound = 'sound/weapons/gun/rifle/ak47.ogg' + + rack_sound = 'sound/weapons/gun/rifle/ak47_cocked.ogg' + load_sound = 'sound/weapons/gun/rifle/ak47_reload.ogg' + load_empty_sound = 'sound/weapons/gun/rifle/ak47_reload.ogg' + eject_sound = 'sound/weapons/gun/rifle/ak47_unload.ogg' + eject_empty_sound = 'sound/weapons/gun/rifle/ak47_unload.ogg' + icon_state = "ak47" item_state = "ak47" mag_display = TRUE @@ -14,6 +33,8 @@ w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK mag_type = /obj/item/ammo_box/magazine/ak47 + spread = 0 + wield_delay = 0.7 SECONDS /obj/item/gun/ballistic/automatic/assault/ak47/ComponentInitialize() . = ..() @@ -89,6 +110,13 @@ 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 + 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() . = ..() @@ -133,6 +161,8 @@ slot_flags = ITEM_SLOT_BACK mag_type = /obj/item/ammo_box/magazine/swiss actions_types = list(/datum/action/item_action/toggle_firemode) + spread = 8 + spread_unwielded = 15 /obj/item/gun/ballistic/automatic/assault/swiss_cheese/ComponentInitialize() . = ..() @@ -157,7 +187,7 @@ fire_delay = initial(fire_delay) to_chat(user, "You switch to [burst_size]-rnd Matter.") - playsound(user, 'sound/weapons/empty.ogg', 100, TRUE) + playsound(user, 'sound/weapons/gun/general/selector.ogg', 100, TRUE) update_appearance() for(var/datum/action/action as anything in actions) action.UpdateButtonIcon() diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index b159376b547b..ed45f24a7625 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -14,6 +14,13 @@ weapon_weight = WEAPON_MEDIUM pickup_sound = 'sound/items/handling/rifle_pickup.ogg' + wield_delay = 1 SECONDS + spread = 0 + spread_unwielded = 13 + recoil = 0 + recoil_unwielded = 4 + wield_slowdown = 0.35 + /obj/item/gun/ballistic/automatic/update_overlays() . = ..() if(!select) @@ -39,7 +46,7 @@ fire_delay = initial(fire_delay) to_chat(user, "You switch to [burst_size]-rnd burst.") - playsound(user, 'sound/weapons/empty.ogg', 100, TRUE) + playsound(user, 'sound/weapons/gun/general/selector.ogg', 100, TRUE) update_appearance() for(var/X in actions) var/datum/action/A = X @@ -71,6 +78,13 @@ actions_types = list() mag_display = TRUE + spread = -5 + spread_unwielded = 20 + recoil = 0 + recoil_unwielded = 4 + wield_slowdown = 1 + wield_delay = 1.3 SECONDS + /obj/item/gun/ballistic/automatic/sniper_rifle/syndicate name = "syndicate sniper rifle" desc = "A heavily-modified .50 BMG anti-material rifle utilized by Syndicate agents. Requires both hands to fire." @@ -117,7 +131,6 @@ icon = 'icons/obj/guns/48x32guns.dmi' lefthand_file = 'icons/mob/inhands/weapons/64x_guns_left.dmi' righthand_file = 'icons/mob/inhands/weapons/64x_guns_right.dmi' - fire_sound = 'sound/weapons/gun/rifle/shot.ogg' icon_state = "ebr" item_state = "ebr" mag_display = TRUE @@ -128,6 +141,9 @@ burst_size = 0 actions_types = list() + wield_slowdown = 2 + spread = -4 + /obj/item/gun/ballistic/automatic/gal name = "\improper CM-GAL-S" desc = "The standard issue DMR of the CMM. 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." @@ -143,6 +159,9 @@ burst_size = 0 actions_types = list() + wield_slowdown = 2 + spread = -4 + /obj/item/gun/ballistic/automatic/gal/inteq name = "\improper SsG-04" desc = "A marksman rifle purchased from the Colonial Minutemen and modified to suit IRMG's needs. Chambered in .308." diff --git a/code/modules/projectiles/guns/ballistic/gauss.dm b/code/modules/projectiles/guns/ballistic/gauss.dm index 993c616f885f..32cee65317cf 100644 --- a/code/modules/projectiles/guns/ballistic/gauss.dm +++ b/code/modules/projectiles/guns/ballistic/gauss.dm @@ -18,6 +18,13 @@ charge_sections = 4 ammo_x_offset = 2 + spread = 0 + spread_unwielded = 25 + recoil = 0 + recoil_unwielded = 4 + wield_slowdown = 0.75 + wield_delay = 1 SECONDS + /obj/item/gun/ballistic/automatic/powered/gauss/modelh name = "Model H" desc = "Standard-issue pistol of the Solarian Confederation. Fires slow ferromagnetic slugs at a high energy cost, though they rend flesh with ease." @@ -32,6 +39,11 @@ fire_delay = 0 //pistol mag_display = FALSE empty_indicator = FALSE + recoil = 1 + recoil_unwielded = 2 + spread = 3 + spread_unwielded = 6 + /obj/item/gun/ballistic/automatic/powered/gauss/claris name = "Claris" @@ -65,6 +77,9 @@ actions_types = list() empty_indicator = FALSE + wield_delay = 0.7 SECONDS + fire_delay = 1 + /obj/item/gun/ballistic/automatic/powered/gauss/gar/ComponentInitialize() . = ..() AddComponent(/datum/component/automatic_fire, 0.2 SECONDS) //setiting this to 0.1 breaks auotfire, not sure why, so we use the standard fire rate but in 2 shot bursts to shoot 'faster' diff --git a/code/modules/projectiles/guns/ballistic/hmg.dm b/code/modules/projectiles/guns/ballistic/hmg.dm index dfe8a52cde19..29d4b7914395 100644 --- a/code/modules/projectiles/guns/ballistic/hmg.dm +++ b/code/modules/projectiles/guns/ballistic/hmg.dm @@ -6,6 +6,13 @@ actions_types = list() slowdown = 1 drag_slowdown = 1.5 + fire_delay = 1 + + spread = 2 + spread_unwielded = 80 + recoil = 1 + recoil_unwielded = 4 + wield_slowdown = 4 // L6 SAW // @@ -29,7 +36,7 @@ /obj/item/gun/ballistic/automatic/hmg/l6_saw/ComponentInitialize() . = ..() - AddComponent(/datum/component/automatic_fire, 0.2 SECONDS) + AddComponent(/datum/component/automatic_fire, 0.1 SECONDS) /obj/item/gun/ballistic/automatic/hmg/l6_saw/examine(mob/user) . = ..() @@ -86,4 +93,4 @@ /obj/item/gun/ballistic/automatic/hmg/solar/ComponentInitialize() . = ..() - AddComponent(/datum/component/automatic_fire, 0.2 SECONDS) + AddComponent(/datum/component/automatic_fire, 0.1 SECONDS) diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm index 18030833e6cd..eafe30f362a8 100644 --- a/code/modules/projectiles/guns/ballistic/launchers.dm +++ b/code/modules/projectiles/guns/ballistic/launchers.dm @@ -50,6 +50,7 @@ item_state = "rocketlauncher" mag_type = /obj/item/ammo_box/magazine/internal/rocketlauncher fire_sound = 'sound/weapons/gun/general/rocket_launch.ogg' + load_sound = 'sound/weapons/gun/general/rocket_load.ogg' w_class = WEIGHT_CLASS_BULKY can_suppress = FALSE pin = /obj/item/firing_pin diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index d03b3992b741..b466f2811dd4 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -1,21 +1,21 @@ /obj/item/gun/ballistic/automatic/pistol - name = "stechkin pistol" + name = "Stechkin" desc = "A small, easily concealable 10mm handgun that bears Scarborough Arms stamps. Has a threaded barrel for suppressors." icon_state = "pistol" w_class = WEIGHT_CLASS_SMALL mag_type = /obj/item/ammo_box/magazine/m10mm can_suppress = TRUE burst_size = 1 - fire_delay = 0 + 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' dry_fire_sound = 'sound/weapons/gun/pistol/dry_fire.ogg' suppressed_sound = 'sound/weapons/gun/pistol/shot_suppressed.ogg' - 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' - eject_empty_sound = 'sound/weapons/gun/pistol/mag_release.ogg' + load_sound = 'sound/weapons/gun/pistol/mag_insert_alt.ogg' + load_empty_sound = 'sound/weapons/gun/pistol/mag_insert_alt.ogg' + eject_sound = 'sound/weapons/gun/pistol/mag_release_alt.ogg' + eject_empty_sound = 'sound/weapons/gun/pistol/mag_release_alt.ogg' vary_fire_sound = FALSE rack_sound = 'sound/weapons/gun/pistol/rack_small.ogg' lock_back_sound = 'sound/weapons/gun/pistol/lock_small.ogg' @@ -24,7 +24,13 @@ bolt_wording = "slide" weapon_weight = WEAPON_LIGHT pickup_sound = 'sound/items/handling/gun_pickup.ogg' - fire_delay = 1 + + wield_delay = 0.2 SECONDS + spread = -2 + spread_unwielded = 4 + wield_slowdown = 0.15 + + muzzleflash_iconstate = "muzzle_flash_light" /obj/item/gun/ballistic/automatic/pistol/no_mag spawnwithmagazine = FALSE @@ -35,16 +41,21 @@ install_suppressor(S) /obj/item/gun/ballistic/automatic/pistol/m1911 - name = "\improper M1911" + name = "\improper M1911A8" desc = "A classic .45 handgun. An engraving on the slide marks it as a product of Hunter's Pride." icon_state = "m1911" w_class = WEIGHT_CLASS_NORMAL mag_type = /obj/item/ammo_box/magazine/m45 can_suppress = FALSE - fire_sound = 'sound/weapons/gun/pistol/shot.ogg' - rack_sound = 'sound/weapons/gun/pistol/rack.ogg' + fire_sound = 'sound/weapons/gun/pistol/m1911.ogg' + rack_sound = 'sound/weapons/gun/pistol/m1911_cocked.ogg' lock_back_sound = 'sound/weapons/gun/pistol/slide_lock.ogg' bolt_drop_sound = 'sound/weapons/gun/pistol/slide_drop.ogg' + load_sound = 'sound/weapons/gun/pistol/m1911_reload.ogg' + load_empty_sound = 'sound/weapons/gun/pistol/m1911_reload.ogg' + eject_sound = 'sound/weapons/gun/pistol/m1911_unload.ogg' + eject_empty_sound = 'sound/weapons/gun/pistol/m1911_unload.ogg' + recoil = -2 /obj/item/gun/ballistic/automatic/pistol/m1911/no_mag spawnwithmagazine = FALSE @@ -57,10 +68,19 @@ mag_type = /obj/item/ammo_box/magazine/m50 can_suppress = FALSE mag_display = TRUE - fire_sound = 'sound/weapons/gun/rifle/shot_alt.ogg' + 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' bolt_drop_sound = 'sound/weapons/gun/pistol/slide_drop.ogg' + load_sound = 'sound/weapons/gun/pistol/deagle_reload.ogg' + 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 /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." @@ -106,6 +126,11 @@ w_class = WEIGHT_CLASS_NORMAL mag_type = /obj/item/ammo_box/magazine/co9mm can_suppress = FALSE + fire_sound = 'sound/weapons/gun/pistol/commander.ogg' + 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' + eject_empty_sound = 'sound/weapons/gun/pistol/mag_release.ogg' /obj/item/gun/ballistic/automatic/pistol/commander/no_mag spawnwithmagazine = FALSE @@ -128,6 +153,10 @@ can_suppress = FALSE var/funnysounds = TRUE var/cooldown = 0 + 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' + eject_empty_sound = 'sound/weapons/gun/pistol/mag_release.ogg' /obj/item/gun/ballistic/automatic/pistol/commissar/equipped(mob/living/user, slot) ..() @@ -177,6 +206,10 @@ w_class = WEIGHT_CLASS_SMALL mag_type = /obj/item/ammo_box/magazine/pistol556mm fire_sound = 'sound/weapons/gun/pistol/pistolec.ogg' + 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' + eject_empty_sound = 'sound/weapons/gun/pistol/mag_release.ogg' /obj/item/gun/ballistic/automatic/pistol/solgov/old icon_state = "pistole-c-old" @@ -189,6 +222,10 @@ w_class = WEIGHT_CLASS_SMALL mag_type = /obj/item/ammo_box/magazine/tec9 mag_display = 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' + eject_empty_sound = 'sound/weapons/gun/pistol/mag_release.ogg' /obj/item/gun/ballistic/automatic/pistol/disposable name = "disposable gun" @@ -265,3 +302,17 @@ desc = "The golden sheen is somewhat counter-intuitive on a holdout weapon, but it looks cool. Uses .357 ammo." icon_state = "derringer_gold" mag_type = /obj/item/ammo_box/magazine/internal/derr357 + +/obj/item/gun/ballistic/automatic/pistol/himehabu + name = "\improper Himehabu" + desc = "A very small .22 LR pistol. The long awaited successor to the Stechkin; It has become a favorite among syndicate spies. Chambered in .22 LR." + icon_state = "himehabu" + w_class = WEIGHT_CLASS_TINY + mag_type = /obj/item/ammo_box/magazine/m22lr + can_suppress = FALSE + fire_sound = 'sound/weapons/gun/pistol/himehabu.ogg' + + recoil = -2 + recoil_unwielded = -2 + spread_unwielded = 0 + wield_slowdown = 0 diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index b1c70e7a73b6..1e922d26aed0 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -4,6 +4,7 @@ icon_state = "revolver" mag_type = /obj/item/ammo_box/magazine/internal/cylinder fire_sound = 'sound/weapons/gun/revolver/shot.ogg' + rack_sound = 'sound/weapons/gun/revolver/revolver_prime.ogg' load_sound = 'sound/weapons/gun/revolver/load_bullet.ogg' eject_sound = 'sound/weapons/gun/revolver/empty.ogg' vary_fire_sound = FALSE @@ -15,7 +16,50 @@ tac_reloads = FALSE var/spin_delay = 10 var/recent_spin = 0 - fire_delay = 7 + fire_delay = 2 + spread_unwielded = 15 + recoil = 0.5 + recoil_unwielded = 1 + semi_auto = FALSE + bolt_wording = "hammer" + wield_slowdown = 0.3 + +/obj/item/gun/ballistic/revolver/examine(mob/user) + . = ..() + . += "You can use the revolver with your other empty hand to empty the cylinder." + +/obj/item/gun/ballistic/revolver/attack_hand(mob/user) + if(loc == user && user.is_holding(src)) + chambered = null + var/num_unloaded = 0 + for(var/obj/item/ammo_casing/CB in get_ammo_list(FALSE, TRUE)) + CB.forceMove(drop_location()) + CB.bounce_away(FALSE, NONE) + num_unloaded++ + SSblackbox.record_feedback("tally", "station_mess_created", 1, CB.name) + if (num_unloaded) + to_chat(user, "You unload [num_unloaded] [cartridge_wording]\s from [src].") + playsound(user, eject_sound, eject_sound_volume, eject_sound_vary) + update_appearance() + return + else + return ..() + else + return ..() + + +/obj/item/gun/ballistic/revolver/unique_action(mob/living/user) + rack(user) + return + +///updates a bunch of racking related stuff and also handles the sound effects and the like +/obj/item/gun/ballistic/revolver/rack(mob/user = null) + if(user) + to_chat(user, "You rack the [bolt_wording] of \the [src].") + chamber_round(TRUE) + playsound(src, rack_sound, rack_sound_volume, rack_sound_vary) + update_appearance() + /obj/item/gun/ballistic/revolver/chamber_round(spin_cylinder = TRUE) if(spin_cylinder) @@ -23,10 +67,6 @@ else chambered = magazine.stored_ammo[1] -/obj/item/gun/ballistic/revolver/shoot_with_empty_chamber(mob/living/user as mob|obj) - ..() - chamber_round(TRUE) - /obj/item/gun/ballistic/revolver/AltClick(mob/user) ..() spin() @@ -76,7 +116,7 @@ /obj/item/gun/ballistic/revolver/detective name = "\improper Colt Detective Special" desc = "A compact and ridiculously old-fashioned law enforcement firearm. Uses .38 special rounds." - fire_sound = 'sound/weapons/gun/revolver/shot.ogg' + fire_sound = 'sound/weapons/gun/revolver/shot_light.ogg' icon_state = "detective" mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rev38 obj_flags = UNIQUE_RENAME @@ -91,6 +131,8 @@ "Black Panther" = "detective_panther" ) + recoil = 0 //weaker than normal revovler, no recoil + /obj/item/gun/ballistic/revolver/detective/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) if(magazine.caliber != initial(magazine.caliber)) if(prob(100 - (magazine.ammo_count() * 5))) //minimum probability of 70, maximum of 95 @@ -140,6 +182,9 @@ name = "\improper Unica 6 auto-revolver" desc = "A high-powered revolver with a unique auto-reloading system. Uses .357 ammo." icon_state = "mateba" + semi_auto = TRUE + spread = 0 + spread_unwielded = 7 /obj/item/gun/ballistic/revolver/golden name = "\improper Golden revolver" @@ -154,6 +199,9 @@ desc = "An ancient model of revolver with notoriously poor ergonomics, chambered in 7.62x38mmR. Uniquely able to be suppressed." icon_state = "nagant" can_suppress = TRUE + spread_unwielded = 12 + recoil = 0 + recoil_unwielded = 0 mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rev762 @@ -163,6 +211,12 @@ desc = "A massive, long-barreled revolver designed for the most dangerous game. Can only be reloaded one cartridge at a time due to its reinforced frame. Uses .45-70 ammo." icon_state = "hunting" mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rev4570 + fire_sound = 'sound/weapons/gun/revolver/shot_hunting.ogg' + wield_slowdown = 0.5 + spread_unwielded = 5 + spread = 2 + recoil = 2 + recoil_unwielded = 3 // A gun to play Russian Roulette! // You can spin the chamber to randomize the position of the bullet. @@ -277,4 +331,21 @@ icon_state = "pepperbox" mag_type = /obj/item/ammo_box/magazine/internal/cylinder/pepperbox spread = 20 - fire_delay = 4 + spread_unwielded = 50 + fire_delay = 0 + semi_auto = TRUE + +/obj/item/gun/ballistic/revolver/cattleman + name = "\improper Cattleman" + desc = "A strangely ancient revolver. Despite the age, it is a favorite of fast drawing spacers and officers in various militaries, but sometimes very rarely used in small colonial police units. Uses .45 ACP." + fire_sound = 'sound/weapons/gun/revolver/cattleman.ogg' + icon = 'icons/obj/guns/48x32guns.dmi' + icon_state = "cattleman" + mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rev45 + obj_flags = UNIQUE_RENAME + unique_reskin = list("Default" = "cattleman", + "Army" = "cattleman_army", + "General" = "cattleman_general" + ) + + recoil = 0 //weaker than normal revovler, no recoil diff --git a/code/modules/projectiles/guns/ballistic/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm index ac80dc47e890..5d29a26a84a8 100644 --- a/code/modules/projectiles/guns/ballistic/rifle.dm +++ b/code/modules/projectiles/guns/ballistic/rifle.dm @@ -17,6 +17,13 @@ weapon_weight = WEAPON_MEDIUM pickup_sound = 'sound/items/handling/rifle_pickup.ogg' + spread = -1 + spread_unwielded = 12 + recoil = -3 + recoil_unwielded = 4 + wield_slowdown = 1 + wield_delay = 1.2 SECONDS + /obj/item/gun/ballistic/rifle/update_overlays() . = ..() . += "[icon_state]_bolt[bolt_locked ? "_locked" : ""]" @@ -89,6 +96,13 @@ fire_sound = 'sound/weapons/gun/rifle/ssg669c.ogg' can_be_sawn_off = FALSE + spread = -5 + spread_unwielded = 20 + recoil = 0 + recoil_unwielded = 4 + wield_slowdown = 1 + wield_delay = 1.3 SECONDS + /obj/item/gun/ballistic/rifle/boltaction/roumain name = "standard-issue 'Smile' rifle" desc = "A bolt-action rifle usually given to mercenary hunters of the Saint-Roumain Militia. Chambered in .300 Magnum." diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index e333122e2e0a..5f9db248d6af 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -27,6 +27,14 @@ fire_delay = 7 pb_knockback = 2 + wield_slowdown = 0.45 + wield_delay = 0.6 SECONDS //Shotguns are really easy to put up to fire, since they are designed for CQC (at least compared to a rifle) + + spread = 4 + spread_unwielded = 10 + recoil = 2 + recoil_unwielded = 4 + /obj/item/gun/ballistic/shotgun/blow_up(mob/user) . = 0 if(chambered && chambered.BB) @@ -41,13 +49,34 @@ /obj/item/gun/ballistic/shotgun/riot //for spawn in the armory name = "riot shotgun" desc = "A sturdy shotgun with a six-shell tube and a fixed wooden stock designed for non-lethal riot control." + icon = 'icons/obj/guns/48x32guns.dmi' icon_state = "riotshotgun" item_state = "shotgun" mag_type = /obj/item/ammo_box/magazine/internal/shot/riot 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 + +/obj/item/gun/ballistic/shotgun/riot/sawoff(mob/user) + . = ..() + if(.) + weapon_weight = WEAPON_MEDIUM + wield_slowdown = 0.25 + wield_delay = 0.3 SECONDS //OP? maybe + + spread = 8 + spread_unwielded = 15 + recoil = 3 //or not + recoil_unwielded = 5 // Automatic Shotguns// +/obj/item/gun/ballistic/shotgun/automatic + spread = 4 + spread_unwielded = 16 + recoil = 1 + recoil_unwielded = 4 + wield_delay = 0.65 SECONDS /obj/item/gun/ballistic/shotgun/automatic/shoot_live_shot(mob/living/user) ..() @@ -146,6 +175,13 @@ tac_reloads = TRUE pickup_sound = 'sound/items/handling/rifle_pickup.ogg' + spread = 4 + spread_unwielded = 16 + recoil = 1 + recoil_unwielded = 4 + wield_slowdown = 0.6 + wield_delay = 0.65 SECONDS + /obj/item/gun/ballistic/shotgun/bulldog/unrestricted pin = /obj/item/firing_pin @@ -208,6 +244,13 @@ . = ..() if(.) weapon_weight = WEAPON_MEDIUM + wield_slowdown = 0.25 + wield_delay = 0.3 SECONDS //OP? maybe + + spread = 8 + spread_unwielded = 15 + recoil = 3 //or not + recoil_unwielded = 5 // IMPROVISED SHOTGUN // @@ -372,6 +415,7 @@ attack_verb = list("bludgeoned", "smashed") mag_type = /obj/item/ammo_box/magazine/internal/shot/sex burst_size = 6 + fire_delay = 0.1 pb_knockback = 12 unique_reskin = null recoil = 10 @@ -420,10 +464,21 @@ inhand_y_dimension = 32 mag_type = /obj/item/ammo_box/magazine/internal/shot/winchester fire_sound = 'sound/weapons/gun/rifle/shot.ogg' - rack_sound = 'sound/weapons/gun/rifle/winchester_cocked.ogg' + rack_sound = 'sound/weapons/gun/rifle/ak47_cocked.ogg' bolt_wording = "lever" cartridge_wording = "bullet" + spread = -5 + spread_unwielded = 7 + recoil = 0 + recoil_unwielded = 2 + wield_slowdown = 0.5 + +/obj/item/gun/ballistic/shotgun/winchester/rack(mob/user = null) + . = ..() + if(!wielded) + SpinAnimation(7,1) + /obj/item/gun/ballistic/shotgun/winchester/mk1 name = "Winchester MK.1" desc = "A sturdy lever-action rifle. This antique pattern appears to be in excellent condition despite its age." @@ -469,7 +524,7 @@ inhand_x_dimension = 32 inhand_y_dimension = 32 mag_type = /obj/item/ammo_box/magazine/internal/shot/contender - fire_sound = 'sound/weapons/gun/rifle/shot.ogg' + fire_sound = 'sound/weapons/gun/revolver/shot_hunting.ogg' can_be_sawn_off=TRUE sawn_desc= "A single-shot pistol. It's hard to aim without a front sight." w_class = WEIGHT_CLASS_BULKY @@ -483,9 +538,22 @@ bolt_type = BOLT_TYPE_NO_BOLT can_be_sawn_off = TRUE pb_knockback = 3 + wield_slowdown = 0.7 + spread_unwielded = 15 + spread = 0 + recoil = 0 + recoil_unwielded = 5 + /obj/item/gun/ballistic/shotgun/contender/sawoff(mob/user) . = ..() if(.) item_state = "contender_sawn" + wield_slowdown = 0.5 + wield_delay = 0.5 SECONDS + + spread_unwielded = 5 //mostly the hunting revolver stats + spread = 2 + recoil = 2 + recoil_unwielded = 3 diff --git a/code/modules/projectiles/guns/ballistic/smg.dm b/code/modules/projectiles/guns/ballistic/smg.dm index e617173c932e..8ffe9be41bf2 100644 --- a/code/modules/projectiles/guns/ballistic/smg.dm +++ b/code/modules/projectiles/guns/ballistic/smg.dm @@ -1,6 +1,16 @@ /obj/item/gun/ballistic/automatic/smg burst_size = 1 actions_types = list() + fire_delay = 1 + spread = 4 + spread_unwielded = 10 + wield_slowdown = 0.35 + recoil_unwielded = 0.5 + + load_sound = 'sound/weapons/gun/smg/smg_reload.ogg' + load_empty_sound = 'sound/weapons/gun/smg/smg_reload.ogg' + eject_sound = 'sound/weapons/gun/smg/smg_unload.ogg' + eject_empty_sound = 'sound/weapons/gun/smg/smg_unload.ogg' /obj/item/gun/ballistic/automatic/smg/proto name = "\improper Nanotrasen Saber SMG" @@ -14,7 +24,7 @@ /obj/item/gun/ballistic/automatic/smg/proto/ComponentInitialize() . = ..() - AddComponent(/datum/component/automatic_fire, 0.25 SECONDS) + AddComponent(/datum/component/automatic_fire, 0.15 SECONDS) /obj/item/gun/ballistic/automatic/smg/proto/unrestricted pin = /obj/item/firing_pin @@ -35,7 +45,7 @@ /obj/item/gun/ballistic/automatic/smg/c20r/ComponentInitialize() . = ..() - AddComponent(/datum/component/automatic_fire, 0.25 SECONDS) + AddComponent(/datum/component/automatic_fire, 0.15 SECONDS) /obj/item/gun/ballistic/automatic/smg/c20r/unrestricted pin = /obj/item/firing_pin @@ -56,6 +66,7 @@ desc = "An extreme modification of an obsolete assault rifle, converted into a compact submachine gun by IRMG. Chambered in 10mm." icon_state = "inteqsmg" item_state = "inteqsmg" + fire_sound = 'sound/weapons/gun/smg/vector_fire.ogg' mag_type = /obj/item/ammo_box/magazine/smgm10mm can_bayonet = FALSE can_flashlight = TRUE @@ -66,7 +77,7 @@ /obj/item/gun/ballistic/automatic/smg/inteq/ComponentInitialize() . = ..() - AddComponent(/datum/component/automatic_fire, 0.25 SECONDS) + AddComponent(/datum/component/automatic_fire, 0.15 SECONDS) /obj/item/gun/ballistic/automatic/smg/wt550 name = "\improper WT-550 Automatic Rifle" @@ -84,38 +95,51 @@ mag_display = TRUE mag_display_ammo = TRUE empty_indicator = TRUE + fire_sound = 'sound/weapons/gun/smg/smg_heavy.ogg' /obj/item/gun/ballistic/automatic/smg/wt550/ComponentInitialize() . = ..() - AddComponent(/datum/component/automatic_fire, 0.25 SECONDS) + AddComponent(/datum/component/automatic_fire, 0.15 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 - burst_size = 2 bolt_type = BOLT_TYPE_OPEN mag_display = TRUE - rack_sound = 'sound/weapons/gun/pistol/slide_lock.ogg' + + fire_sound = 'sound/weapons/gun/smg/uzi.ogg' + rack_sound = 'sound/weapons/gun/smg/uzi_cocked.ogg' + + load_sound = 'sound/weapons/gun/smg/uzi_reload.ogg' + load_empty_sound = 'sound/weapons/gun/smg/uzi_reload.ogg' + eject_sound = 'sound/weapons/gun/smg/uzi_unload.ogg' + eject_empty_sound = 'sound/weapons/gun/smg/uzi_unload.ogg' + + spread = 4 + 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.25 SECONDS) + AddComponent(/datum/component/automatic_fire, 0.1 SECONDS) /obj/item/gun/ballistic/automatic/smg/vector name = "\improper Vector carbine" desc = "A police carbine based on a pre-Night of Fire SMG design. Most of the complex workings have been removed for reliability. Chambered in 9mm." icon_state = "vector" item_state = "vector" - mag_type = /obj/item/ammo_box/magazine/smgm9mm/rubber //you guys remember when the autorifle was chambered in 9mm + 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 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.25 SECONDS) + AddComponent(/datum/component/automatic_fire, 0.15 SECONDS) /obj/item/gun/ballistic/automatic/smg/m90 name = "\improper M-90gl Carbine" @@ -133,6 +157,10 @@ empty_indicator = TRUE fire_sound = 'sound/weapons/gun/rifle/shot_alt.ogg' + 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) @@ -186,7 +214,7 @@ burst_size = 1 fire_delay = 0 to_chat(user, "You switch to semi-auto.") - playsound(user, 'sound/weapons/empty.ogg', 100, TRUE) + playsound(user, 'sound/weapons/gun/general/selector.ogg', 100, TRUE) update_appearance() return @@ -203,10 +231,11 @@ actions_types = list() fire_delay = 1 bolt_type = BOLT_TYPE_OPEN + wield_slowdown = 0.4 /obj/item/gun/ballistic/automatic/smg/thompson/Initialize() . = ..() - AddComponent(/datum/component/automatic_fire, 0.25 SECONDS) + AddComponent(/datum/component/automatic_fire, 0.15 SECONDS) /obj/item/gun/ballistic/automatic/smg/thompson/drum name = "\improper Chicago Typewriter" @@ -220,11 +249,11 @@ item_state = "cm5" mag_type = /obj/item/ammo_box/magazine/smgm9mm weapon_weight = WEAPON_LIGHT - fire_sound = 'sound/weapons/gun/smg/smg_light.ogg' + fire_sound = 'sound/weapons/gun/smg/smg_heavy.ogg' /obj/item/gun/ballistic/automatic/smg/cm5/ComponentInitialize() . = ..() - AddComponent(/datum/component/automatic_fire, 0.25 SECONDS) + AddComponent(/datum/component/automatic_fire, 0.15 SECONDS) /obj/item/gun/ballistic/automatic/smg/aks74u name = "\improper AKS-74U" diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index b186569afad4..943c1319a4a0 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -4,6 +4,9 @@ desc = "A basic energy-based gun." icon = 'icons/obj/guns/energy.dmi' + muzzleflash_iconstate = "muzzle_flash_laser" + muzzle_flash_color = COLOR_SOFT_RED + 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 @@ -93,7 +96,7 @@ recharge_newshot(TRUE) update_appearance() -/obj/item/gun/energy/attack_self(mob/living/user as mob) +/obj/item/gun/energy/unique_action(mob/living/user) if(ammo_type.len > 1) select_fire(user) update_appearance() @@ -196,6 +199,7 @@ if (shot.select_name) to_chat(user, "[src] is now set to [shot.select_name].") chambered = null + playsound(user, 'sound/weapons/gun/general/selector.ogg', 100, TRUE) recharge_newshot(TRUE) update_appearance() return @@ -268,18 +272,18 @@ else if(BB.nodamage || !BB.damage || BB.damage_type == STAMINA) user.visible_message("[user] tries to light [user.p_their()] [A.name] with [src], but it doesn't do anything. Dumbass.") playsound(user, E.fire_sound, 50, TRUE) - playsound(user, BB.hitsound, 50, TRUE) + playsound(user, BB.hitsound_non_living, 50, TRUE) cell.use(E.e_cost) . = "" else if(BB.damage_type != BURN) user.visible_message("[user] tries to light [user.p_their()] [A.name] with [src], but only succeeds in utterly destroying it. Dumbass.") playsound(user, E.fire_sound, 50, TRUE) - playsound(user, BB.hitsound, 50, TRUE) + playsound(user, BB.hitsound_non_living, 50, TRUE) cell.use(E.e_cost) qdel(A) . = "" else playsound(user, E.fire_sound, 50, TRUE) - playsound(user, BB.hitsound, 50, TRUE) + playsound(user, BB.hitsound_non_living, 50, TRUE) cell.use(E.e_cost) . = "[user] casually lights their [A.name] with [src]. Damn." diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 7928094cab13..3cb4877ff17c 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -18,6 +18,10 @@ internal_cell = TRUE custom_price = 750 w_class = WEIGHT_CLASS_BULKY + + muzzleflash_iconstate = "muzzle_flash_light" + muzzle_flash_color = COLOR_WHITE + var/overheat_time = 16 var/holds_charge = FALSE var/unique_frequency = FALSE // modified by KA modkits diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 4551014cafea..5a4caeefc373 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -10,6 +10,9 @@ shaded_charge = 1 supports_variations = VOX_VARIATION + spread = 0 + spread_unwielded = 10 + /obj/item/gun/energy/laser/practice name = "practice laser gun" desc = "A modified version of the basic laser gun, this one fires less concentrated energy bolts designed for target practice." diff --git a/code/modules/projectiles/guns/energy/laser_gatling.dm b/code/modules/projectiles/guns/energy/laser_gatling.dm index 029c5f8a2693..b21e176b92e8 100644 --- a/code/modules/projectiles/guns/energy/laser_gatling.dm +++ b/code/modules/projectiles/guns/energy/laser_gatling.dm @@ -22,6 +22,7 @@ . = ..() gun = new(src) battery = new(src) + gun.cell = battery START_PROCESSING(SSobj, src) /obj/item/minigunpack/Destroy() @@ -107,7 +108,7 @@ slot_flags = null w_class = WEIGHT_CLASS_HUGE custom_materials = null - weapon_weight = WEAPON_HEAVY + weapon_weight = WEAPON_MEDIUM ammo_type = list(/obj/item/ammo_casing/energy/laser/minigun) cell_type = /obj/item/stock_parts/cell/crap item_flags = NEEDS_PERMIT | SLOWS_WHILE_IN_HAND @@ -120,7 +121,7 @@ ammo_pack = loc AddElement(/datum/element/update_icon_blocker) - AddComponent(/datum/component/automatic_fire, 0.2 SECONDS) + AddComponent(/datum/component/automatic_fire, 0.15 SECONDS) return ..() /obj/item/gun/energy/minigun/Destroy() diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index a4d252107fc6..83a33691008b 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -12,6 +12,11 @@ internal_cell = TRUE //prevents you from giving it an OP cell - WS Edit cell_type = "/obj/item/stock_parts/cell/pulse" + spread_unwielded = 25 + + muzzleflash_iconstate = "muzzle_flash_pulse" + muzzle_flash_color = COLOR_BRIGHT_BLUE + /obj/item/gun/energy/pulse/emp_act(severity) return diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index 2caeca6f3a16..1d8f78213707 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -6,6 +6,9 @@ ammo_type = list(/obj/item/ammo_casing/energy/electrode) ammo_x_offset = 3 + spread = 2 + spread_unwielded = 4 + /obj/item/gun/energy/e_gun/advtaser name = "hybrid taser" desc = "A dual-mode taser designed to fire both short-range high-power electrodes and long-range disabler beams." @@ -13,6 +16,9 @@ ammo_type = list(/obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/disabler) ammo_x_offset = 2 + spread = 2 + spread_unwielded = 4 + /obj/item/gun/energy/e_gun/advtaser/cyborg name = "cyborg taser" desc = "An integrated hybrid taser that draws directly from a cyborg's power cell. The weapon contains a limiter to prevent the cyborg's power cell from overheating." @@ -31,6 +37,9 @@ flight_x_offset = 15 flight_y_offset = 10 + spread = 2 + spread_unwielded = 4 + /obj/item/gun/energy/disabler/cyborg name = "cyborg disabler" desc = "An integrated disabler that draws from a cyborg's power cell. This weapon contains a limiter to prevent the cyborg's power cell from overheating." diff --git a/code/modules/projectiles/guns/misc/beam_rifle.dm b/code/modules/projectiles/guns/misc/beam_rifle.dm index 4822e2b59ba7..c2205777103c 100644 --- a/code/modules/projectiles/guns/misc/beam_rifle.dm +++ b/code/modules/projectiles/guns/misc/beam_rifle.dm @@ -148,7 +148,7 @@ current_zoom_x = 0 current_zoom_y = 0 -/obj/item/gun/energy/beam_rifle/attack_self(mob/user) +/obj/item/gun/energy/beam_rifle/unique_action(mob/living/user) projectile_setting_pierce = !projectile_setting_pierce to_chat(user, "You set \the [src] to [projectile_setting_pierce? "pierce":"impact"] mode.") aiming_beam() @@ -521,7 +521,7 @@ tracer_type = /obj/effect/projectile/tracer/tracer/aiming name = "aiming beam" hitsound = null - hitsound_wall = null + hitsound_non_living = null nodamage = TRUE damage = 0 constant_tracer = TRUE diff --git a/code/modules/projectiles/guns/misc/blastcannon.dm b/code/modules/projectiles/guns/misc/blastcannon.dm index d2a8c80827fc..888e680479ea 100644 --- a/code/modules/projectiles/guns/misc/blastcannon.dm +++ b/code/modules/projectiles/guns/misc/blastcannon.dm @@ -35,7 +35,7 @@ QDEL_NULL(bomb) return ..() -/obj/item/gun/blastcannon/attack_self(mob/user) +/obj/item/gun/blastcannon/unique_action(mob/living/user) if(bomb) bomb.forceMove(user.loc) user.put_in_hands(bomb) diff --git a/code/modules/projectiles/guns/misc/bow.dm b/code/modules/projectiles/guns/misc/bow.dm index df30f5a89022..aa97994ae95c 100644 --- a/code/modules/projectiles/guns/misc/bow.dm +++ b/code/modules/projectiles/guns/misc/bow.dm @@ -28,7 +28,7 @@ chambered = magazine.get_round(TRUE) chambered.forceMove(src) -/obj/item/gun/ballistic/bow/attack_self(mob/user) +/obj/item/gun/ballistic/bow/unique_action(mob/living/user) if(chambered) to_chat(user, "You [drawn ? "release" : "draw"] [src]'s string.") if(!drawn) diff --git a/code/modules/projectiles/guns/misc/syringe_gun.dm b/code/modules/projectiles/guns/misc/syringe_gun.dm index efd99b2d5b49..34af73b855c6 100644 --- a/code/modules/projectiles/guns/misc/syringe_gun.dm +++ b/code/modules/projectiles/guns/misc/syringe_gun.dm @@ -38,7 +38,7 @@ . = ..() . += "Can hold [max_syringes] syringe\s. Has [syringes.len] syringe\s remaining." -/obj/item/gun/syringe/attack_self(mob/living/user) +/obj/item/gun/syringe/unique_action(mob/living/user) if(!syringes.len) to_chat(user, "[src] is empty!") return 0 diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index a50b6eed4ae6..a2ea92e6b4c1 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -13,7 +13,17 @@ generic_canpass = FALSE //The sound this plays on impact. var/hitsound = 'sound/weapons/pierce.ogg' - var/hitsound_wall = "" + var/hitsound_non_living = "" + var/hitsound_glass + var/hitsound_stone + var/hitsound_metal + var/hitsound_wood + var/hitsound_snow + + var/near_miss_sound = "" + var/ricochet_sound = "" + + resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF var/def_zone = "" //Aiming at @@ -223,11 +233,6 @@ if(!isliving(target)) if(impact_effect_type && !hitscan) new impact_effect_type(target_loca, hitx, hity) - if(isturf(target) && hitsound_wall) - var/volume = clamp(vol_by_damage() + 20, 0, 100) - if(suppressed) - volume = 5 - playsound(loc, hitsound_wall, volume, TRUE, -1) return BULLET_ACT_HIT var/mob/living/L = target @@ -264,8 +269,7 @@ to_chat(L, "You're shot by \a [src][organ_hit_text]!") else if(hitsound) - var/volume = vol_by_damage() - playsound(src, hitsound, volume, TRUE, -1) + playsound(get_turf(L), hitsound, 100, TRUE, -1) L.visible_message("[L] is hit by \a [src][organ_hit_text]!", \ "You're hit by \a [src][organ_hit_text]!", null, COMBAT_MESSAGE_RANGE) L.on_hit(src) @@ -350,6 +354,8 @@ range = decayedRange if(hitscan) store_hitscan_collision(pcache) + if(ricochet_sound) + playsound(get_turf(src), ricochet_sound, 120, TRUE, 2) //make it loud, we want to make it known when a ricochet happens. for aesthetic reasons mostly return TRUE var/distance = get_dist(T, starting) // Get the distance between the turf shot from and the mob we hit and use that for the calculations. @@ -521,6 +527,16 @@ if(can_hit_target(M, M == original, TRUE)) Impact(M) break + if(!near_miss_sound) + return FALSE + if(decayedRange <= range+2) + return FALSE + for(var/mob/misser in range(1,src)) + if(!(misser.stat <= SOFT_CRIT)) + continue + misser.playsound_local(get_turf(src), near_miss_sound, 100, FALSE) + misser.shake_animation(damage) + /** * Projectile crossed: When something enters a projectile's tile, make sure the projectile hits it if it should be hitting it. diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index d17f94af19ae..d0fa95841ab4 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -4,8 +4,18 @@ pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE damage = 20 damage_type = BURN - hitsound = 'sound/weapons/sear.ogg' - hitsound_wall = 'sound/weapons/effects/searwall.ogg' + + hitsound = 'sound/weapons/gun/hit/energy_impact1.ogg' + hitsound_non_living = 'sound/weapons/effects/searwall.ogg' + hitsound_glass = 'sound/weapons/effects/searwall.ogg' + hitsound_stone = 'sound/weapons/sear.ogg' + hitsound_metal = 'sound/weapons/effects/searwall.ogg' + hitsound_wood = 'sound/weapons/sear.ogg' + hitsound_snow = 'sound/weapons/sear.ogg' + + near_miss_sound = 'sound/weapons/gun/hit/energy_miss1.ogg' + ricochet_sound = 'sound/weapons/gun/hit/energy_ricochet1.ogg' + flag = "laser" eyeblur = 2 impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser @@ -14,7 +24,7 @@ light_power = 1 light_color = COLOR_SOFT_RED ricochets_max = 50 //Honk! - ricochet_chance = 80 + ricochet_chance = 90 reflectable = REFLECT_NORMAL /obj/projectile/beam/throw_atom_into_space() diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 6123789df438..43106f97deec 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -6,5 +6,20 @@ damage_type = BRUTE nodamage = FALSE flag = "bullet" - hitsound_wall = "ricochet" + + hitsound = "bullet_hit" + hitsound_non_living = "bullet_impact" + hitsound_glass = "bullet_hit_glass" + hitsound_stone = "bullet_hit_stone" + hitsound_metal = "bullet_hit_metal" + hitsound_wood = "bullet_hit_wood" + hitsound_snow = "bullet_hit_snow" + + near_miss_sound = "bullet_miss" + ricochet_sound = "bullet_bounce" + + impact_effect_type = /obj/effect/temp_visual/impact_effect + ricochets_max = 5 //should be enough to scare the shit out of someone + ricochet_chance = 30 + ricochet_decay_damage = 0.5 //shouldnt being reliable, but deadly enough to be careful if you accidentally hit an ally diff --git a/code/modules/projectiles/projectile/bullets/dnainjector.dm b/code/modules/projectiles/projectile/bullets/dnainjector.dm index ad20c47eeb71..b8cd6f92b10d 100644 --- a/code/modules/projectiles/projectile/bullets/dnainjector.dm +++ b/code/modules/projectiles/projectile/bullets/dnainjector.dm @@ -3,7 +3,7 @@ icon_state = "syringeproj" var/obj/item/dnainjector/injector damage = 5 - hitsound_wall = "shatter" + hitsound_non_living = "shatter" /obj/projectile/bullet/dnainjector/on_hit(atom/target, blocked = FALSE) if(iscarbon(target)) diff --git a/code/modules/projectiles/projectile/bullets/gauss.dm b/code/modules/projectiles/projectile/bullets/gauss.dm index d057213f92e7..0955745ed798 100644 --- a/code/modules/projectiles/projectile/bullets/gauss.dm +++ b/code/modules/projectiles/projectile/bullets/gauss.dm @@ -3,8 +3,7 @@ /obj/projectile/bullet/gauss name = "ferromagnetic pellet" icon_state = "gauss-pellet" - damage = 20 - armour_penetration = 40 + damage = 25 range = 35 light_color = COLOR_SOFT_RED light_range = 3 @@ -15,6 +14,7 @@ name = "ferromagnetic lance" icon_state = "redtrac" damage = 30 + armour_penetration = 20 // Ferromagnetic Slug (Model H) @@ -22,4 +22,5 @@ name = "ferromagnetic slug" icon_state = "gauss-slug" damage = 50 + armour_penetration = -60 speed = 0.8 diff --git a/code/modules/projectiles/projectile/bullets/revolver.dm b/code/modules/projectiles/projectile/bullets/revolver.dm index dcf8bb682387..ecd8b5abbbb9 100644 --- a/code/modules/projectiles/projectile/bullets/revolver.dm +++ b/code/modules/projectiles/projectile/bullets/revolver.dm @@ -19,13 +19,9 @@ // .38 (Colt Detective Special & Winchester) /obj/projectile/bullet/c38 - name = ".38 special bullet" + name = ".38 bullet" damage = 25 - armour_penetration = -30 - ricochets_max = 2 - ricochet_chance = 50 - ricochet_auto_aim_angle = 10 - ricochet_auto_aim_range = 3 + armour_penetration = -20 /obj/projectile/bullet/c38/match name = ".38 match bullet" @@ -126,7 +122,7 @@ /obj/projectile/bullet/a4570 name = ".45-70 bullet" - damage = 40 //crits in 3-4 taps depending on armor + damage = 45 //crits in 3-4 taps depending on armor /obj/projectile/bullet/a4570/match name = ".45-70 match bullet" @@ -152,3 +148,11 @@ ..() explosion(target, -1, 0, 1) return BULLET_ACT_HIT + + +/obj/projectile/bullet/c22lr + name = ".22LR bullet" + damage = 20 + armour_penetration = -45 + ricochet_incidence_leeway = 20 + ricochet_chance = 45 diff --git a/code/modules/projectiles/projectile/bullets/shotgun.dm b/code/modules/projectiles/projectile/bullets/shotgun.dm index 0f2d43206fc8..0979a268ee16 100644 --- a/code/modules/projectiles/projectile/bullets/shotgun.dm +++ b/code/modules/projectiles/projectile/bullets/shotgun.dm @@ -1,6 +1,7 @@ /obj/projectile/bullet/slug name = "12g shotgun slug" damage = 40 + armour_penetration = -10 speed = 0.5 /obj/projectile/bullet/slug/beanbag @@ -11,7 +12,8 @@ /obj/projectile/bullet/incendiary/shotgun name = "incendiary slug" - damage = 20 + damage = 25 + armour_penetration = -10 speed = 0.5 /obj/projectile/bullet/incendiary/shotgun/dragonsbreath @@ -65,12 +67,14 @@ ///How much stamina damage is subtracted per tile? var/tile_dropoff_stamina = 1.5 //As above + icon_state = "pellet" armour_penetration = -35 speed = 0.5 /obj/projectile/bullet/pellet/buckshot name = "buckshot pellet" - damage = 10 + damage = 20 + armour_penetration = -10 /obj/projectile/bullet/pellet/rubbershot name = "rubbershot pellet" diff --git a/code/modules/projectiles/projectile/special/hallucination.dm b/code/modules/projectiles/projectile/special/hallucination.dm index 74fa2b2ad17a..be3a627cc765 100644 --- a/code/modules/projectiles/projectile/special/hallucination.dm +++ b/code/modules/projectiles/projectile/special/hallucination.dm @@ -128,7 +128,7 @@ hal_icon_state = "bullet" hal_fire_sound = "gunshot" hal_hitsound = 'sound/weapons/pierce.ogg' - hal_hitsound_wall = "ricochet" + hal_hitsound_wall = "bullet_impact" hal_impact_effect = "impact_bullet" hal_impact_effect_wall = "impact_bullet" hit_duration = 5 diff --git a/code/modules/projectiles/projectile/special/rocket.dm b/code/modules/projectiles/projectile/special/rocket.dm index d86f90b9368e..0680c62279fd 100644 --- a/code/modules/projectiles/projectile/special/rocket.dm +++ b/code/modules/projectiles/projectile/special/rocket.dm @@ -19,7 +19,7 @@ /obj/projectile/bullet/a84mm/on_hit(atom/target, blocked = FALSE) ..() - explosion(target, -1, 1, 3, 1, 0, flame_range = 4) + explosion(target, 1, 1, 2, 1, 0, flame_range = 4) if(ismecha(target)) var/obj/mecha/M = target @@ -69,7 +69,7 @@ ..() for(var/i in sturdy) if(istype(target, i)) - explosion(target, 0, 1, 1, 2) + explosion(target, 1, 1, 1, 2) return BULLET_ACT_HIT //if(istype(target, /turf/closed) || ismecha(target)) new /obj/item/broken_missile(get_turf(src), 1) diff --git a/code/modules/surgery/bodyparts/species_parts/rachnid_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/rachnid_bodyparts.dm index 163b94385dea..367c07a54970 100644 --- a/code/modules/surgery/bodyparts/species_parts/rachnid_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/rachnid_bodyparts.dm @@ -1,31 +1,34 @@ /obj/item/bodypart/head/rachnid - icon = 'icons/mob/species/rachnid/bodyparts.dmi' + static_icon = 'icons/mob/species/rachnid/bodyparts.dmi' limb_id = SPECIES_RACHNID - is_dimorphic = FALSE should_draw_greyscale = FALSE + overlay_icon_state = TRUE /obj/item/bodypart/chest/rachnid - icon = 'icons/mob/species/rachnid/bodyparts.dmi' + static_icon = 'icons/mob/species/rachnid/bodyparts.dmi' limb_id = SPECIES_RACHNID is_dimorphic = FALSE should_draw_greyscale = FALSE + overlay_icon_state = TRUE /obj/item/bodypart/l_arm/rachnid - icon = 'icons/mob/species/rachnid/bodyparts.dmi' + static_icon = 'icons/mob/species/rachnid/bodyparts.dmi' limb_id = SPECIES_RACHNID should_draw_greyscale = FALSE /obj/item/bodypart/r_arm/rachnid - icon = 'icons/mob/species/rachnid/bodyparts.dmi' + static_icon = 'icons/mob/species/rachnid/bodyparts.dmi' limb_id = SPECIES_RACHNID should_draw_greyscale = FALSE /obj/item/bodypart/leg/left/rachnid - icon = 'icons/mob/species/rachnid/bodyparts.dmi' + static_icon = 'icons/mob/species/rachnid/bodyparts.dmi' limb_id = SPECIES_RACHNID should_draw_greyscale = FALSE + overlay_icon_state = TRUE /obj/item/bodypart/leg/right/rachnid - icon = 'icons/mob/species/rachnid/bodyparts.dmi' + static_icon = 'icons/mob/species/rachnid/bodyparts.dmi' limb_id = SPECIES_RACHNID should_draw_greyscale = FALSE + overlay_icon_state = TRUE diff --git a/config/atmos_mix.txt b/config/atmos_mix.txt deleted file mode 100644 index f7b21b503dd7..000000000000 --- a/config/atmos_mix.txt +++ /dev/null @@ -1,14 +0,0 @@ -## HOW TO MIX A BATCH -## First, unzip... wait, wrong docs - -## How to configure an atmos mix for a planet: -## each entry is designed as follows: -## WHITESANDS_ATMOS_MIX <% of mix> - -## White Sands Atmospheric mix configuration - -WHITESANDS_ATMOS_MOLES 103.98 - -WHITESANDS_ATMOS_MIX o2 0.105 -WHITESANDS_ATMOS_MIX co2 0.105 -WHITESANDS_ATMOS_MIX n2 0.79 diff --git a/config/awaymissionconfig.txt b/config/awaymissionconfig.txt deleted file mode 100644 index 5c685d825e0a..000000000000 --- a/config/awaymissionconfig.txt +++ /dev/null @@ -1,23 +0,0 @@ -#List the potential random Z-levels here. -#Maps must be the full path to them -#Maps should be 255x255 or smaller and be bounded. Falling off the edge of the map will result in undefined behavior. -#SPECIFYING AN INVALID MAP WILL RESULT IN RUNTIMES ON GAME START - -#!!IMPORTANT NOTES FOR HOSTING AWAY MISSIONS!!: -#Do NOT tick the maps during compile -- the game uses this list to decide which map to load. Ticking the maps will result in them ALL being loaded at once. -#DO tick the associated code file for the away mission you are enabling. Otherwise, the map will be trying to reference objects which do not exist, which will cause runtime errors! - -#_maps/RandomZLevels/blackmarketpackers.dmm -#_maps/RandomZLevels/spacebattle.dmm -#_maps/RandomZLevels/TheBeach.dmm -#_maps/RandomZLevels/Academy.dmm -#_maps/RandomZLevels/wildwest.dmm -#_maps/RandomZLevels/challenge.dmm -#_maps/RandomZLevels/centcomAway.dmm -#_maps/RandomZLevels/moonoutpost19.dmm -#_maps/RandomZLevels/undergroundoutpost45.dmm -#_maps/RandomZLevels/caves.dmm -#_maps/RandomZLevels/snowdin.dmm -#_maps/RandomZLevels/research.dmm -#_maps/RandomZLevels/SnowCabin.dmm -_maps/RandomZLevels/VR/snowdin_VR.dmm diff --git a/config/external_rsc_urls.txt b/config/external_rsc_urls.txt deleted file mode 100644 index 16d6faf653e8..000000000000 --- a/config/external_rsc_urls.txt +++ /dev/null @@ -1 +0,0 @@ -http://url_goes_here/shiptest.zip diff --git a/config/iceruinblacklist.txt b/config/iceruinblacklist.txt deleted file mode 100644 index 031188b80de3..000000000000 --- a/config/iceruinblacklist.txt +++ /dev/null @@ -1,18 +0,0 @@ -#Listing maps here will blacklist them from generating in the ice moon. -#Maps must be the full path to them -#A list of maps valid to blacklist can be found in _maps\RandomRuins\IceRuins -#SPECIFYING AN INVALID MAP WILL RESULT IN RUNTIMES ON GAME START - -##RESPAWN -#_maps/RandomRuins/IceRuins/icemoon_surface_slimerancher.dmm -#_maps/RandomRuins/IceRuins/icemoon_underground_hermit.dmm -#_maps/RandomRuins/IceRuins/icemoon_underground_drakelair.dmm -#_maps/RandomRuins/IceRuins/icemoon_underground_oldstation.dmm - -##MISC -#_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm -#_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_newcops.dmm -#_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm -#_maps/RandomRuins/IceRuins/icemoon_underground_brazillianlab.dmm -#_maps/RandomRuins/IceRuins/icemoon_underground_burnies_lair.dmm -#_maps/RandomRuins/IceRuins/icemoon_underground_wendigo_cave.dmm diff --git a/config/jobs.txt b/config/jobs.txt deleted file mode 100644 index a266110233d0..000000000000 --- a/config/jobs.txt +++ /dev/null @@ -1,50 +0,0 @@ -#This allows easy configuration of the number of positions allowed for each job -#Format is: [Job name]=[total positions],[spawn positions] -#Job names must be identical to the title var of each job datum -#Positions can be set to -1 to allow unlimited slots -Captain=1,1 -Head of Personnel=1,1 -Head of Security=1,1 -Chief Engineer=1,1 -Research Director=1,1 -Chief Medical Officer=1,1 - -Assistant=-1,-1 -Prisoner=0,2 - -Quartermaster=1,1 -Cargo Technician=3,2 -Shaft Miner=3,3 - -Bartender=1,1 -Cook=2,1 -Botanist=3,2 -Janitor=2,1 - -Clown=1,1 -Mime=1,1 -Curator=1,1 -Lawyer=2,2 - -Chaplain=1,1 - -Station Engineer=5,5 -Atmospheric Technician=3,2 - -Medical Doctor=5,3 -Paramedic=2,2 -Chemist=2,2 -Geneticist=2,2 -Virologist=1,1 -Psychologist=1,1 - -Scientist=5,3 -Roboticist=2,2 - -Warden=1,1 -Detective=1,1 -Security Officer=5,5 -Brig Physician=1,1 - -AI=0,1 -Cyborg=0,1 diff --git a/config/jungleruinblacklist.txt b/config/jungleruinblacklist.txt deleted file mode 100644 index faf518fde632..000000000000 --- a/config/jungleruinblacklist.txt +++ /dev/null @@ -1,27 +0,0 @@ -#Listing maps here will blacklist them from generating in jungle planets -#Maps must be the full path to them -#A list of maps valid to blacklist can be found in _maps\RandomRuins\JungleRuins -#SPECIFYING AN INVALID MAP WILL RESULT IN RUNTIMES ON GAME START - -#_maps/RandomRuins/JungleRuins/jungle_botany.dmm -#_maps/RandomRuins/JungleRuins/jungle_demon.dmm -#_maps/RandomRuins/JungleRuins/jungle_hangar.dmm -#_maps/RandomRuins/JungleRuins/jungle_nest.dmm -#_maps/RandomRuins/JungleRuins/jungle_pirate.dmm -#_maps/RandomRuins/JungleRuins/jungle_pizzawave.dmm -#_maps/RandomRuins/JungleRuins/jungle_seedling.dmm -#_maps/RandomRuins/JungleRuins/jungle_spider.dmm -#_maps/RandomRuins/JungleRuins/jungle_surface_abandonedsolgov.dmm -#_maps/RandomRuins/JungleRuins/jungle_surface_coffinpirate.dmm -#_maps/RandomRuins/JungleRuins/jungle_surface_ikea_ai.dmm -#_maps/RandomRuins/JungleRuins/jungle_surface_ninjashrine.dmm -#_maps/RandomRuins/JungleRuins/jungle_surface_roommates.dmm -#_maps/RandomRuins/JungleRuins/jungle_surface_tumblr_sexyman.dmm -#_maps/RandomRuins/JungleRuins/jungle_surface_unabomber_cabin.dmm -#_maps/RandomRuins/JungleRuins/jungle_surface_weed_shack.dmm -#_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm -#_maps/RandomRuins/JungleRuins/jungle_village.dmm -#_maps/RandomRuins/JungleRuins/jungle_witch.dmm -#_maps/RandomRuins/JungleRuins/jungle_medtech_outbreak.dmm -#_maps/RandomRuins/JungleRuins/jungle_interceptor.dmm -#_maps/RandomRuins/JungleRuins/jungle_paradise.dmm diff --git a/config/lavaruinblacklist.txt b/config/lavaruinblacklist.txt deleted file mode 100644 index 973b402ba7a1..000000000000 --- a/config/lavaruinblacklist.txt +++ /dev/null @@ -1,43 +0,0 @@ -#Listing maps here will blacklist them from generating in lavaland. -#Maps must be the full path to them -#A list of maps valid to blacklist can be found in _maps\RandomRuins\LavaRuins -#SPECIFYING AN INVALID MAP WILL RESULT IN RUNTIMES ON GAME START - -##BIODOMES -#_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm -#_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm -#_maps/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm -#_maps/RandomRuins/LavaRuins/lavaland_surface_cube.dmm - -##RESPAWN -#_maps/RandomRuins/LavaRuins/lavaland_surface_seed_vault.dmm -#_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm -#_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm -#_maps/RandomRuins/LavaRuins/lavaland_surface_golem_ship.dmm - -##SIN -#_maps/RandomRuins/LavaRuins/lavaland_surface_envy.dmm -#_maps/RandomRuins/LavaRuins/lavaland_surface_gluttony.dmm -#_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm -#_maps/RandomRuins/LavaRuins/lavaland_surface_pride.dmm -#_maps/RandomRuins/LavaRuins/lavaland_surface_sloth.dmm - -##MISC -#_maps/RandomRuins/LavaRuins/lavaland_surface_automated_trade_outpost.dmm -#_maps/RandomRuins/LavaRuins/lavaland_surface_ufo_crash.dmm -#_maps/RandomRuins/LavaRuins/lavaland_surface_ww_vault.dmm -#_maps/RandomRuins/LavaRuins/lavaland_surface_automated_trade_outpost.dmm -#_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm -#_maps/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm -#_maps/RandomRuins/LavaRuins/lavaland_surface_wwiioutpost.dmm -#_maps/RandomRuins/LavaRuins/lavaland_surface_tomb.dmm -#_maps/RandomRuins/LavaRuins/lavaland_surface_hierophant.dmm -#_maps/RandomRuins/LavaRuins/lavaland_surface_fountain_hall.dmm -#_maps/RandomRuins/LavaRuins/lavaland_surface_comm_outpost.dmm -#_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm -#_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm -#_maps/RandomRuins/LavaRuins/lavaland_surface_hermit.dmm -#_maps/RandomRuins/LavaRuins/lavaland_surface_swarmer_crash.dmm -#_maps/RandomRuins/LavaRuins/lavaland_surface_gaia.dmm -#_maps/RandomRuins/LavaRuins/lavaland_surface_elephant_graveyard.dmm -#_maps/RandomRuins/LavaRuins/lavaland_surface_crashed_pinnance.dmm diff --git a/config/maps.txt b/config/maps.txt deleted file mode 100644 index 23a0a19dcd45..000000000000 --- a/config/maps.txt +++ /dev/null @@ -1,66 +0,0 @@ -This file contains a list of maps for use in map rotation. -#Lines starting with # are ignored. -Lines not inside map blocks are also ignored -Duplicated entries use the latter one. -All whitespace at the start and end of lines is ignored. (including indentation, thats just for show) -Format: -#map [map name] (name of .json file in _maps folder without the .json part) - minplayers [number] (0 or less disables this requirement) - maxplayers [number] (0 or less disables this requirement) - default (The last map with this defined will get all votes of players who have not explicitly voted for a map) - voteweight [number] (How much to count each player vote as, defaults to 1, setting to 0.5 counts each vote as half a vote, 2 as double, etc, Setting to 0 disables the map but allows players to still pick it) - disabled (disables the map) - votable (is this map votable) -endmap - -map salvage - default - votable -endmap - -map amogus - votable -endmap - -map diner - votable -endmap - -map minigalaxy - votable -endmap - -map engineergaming - votable -endmap - -map bubble - votable -endmap - - -# Whiteships - -map boxship - votable -endmap - -map deltaship - votable -endmap - -map metaship - votable -endmap - -map midwayship - votable -endmap - -map pubbyship - votable -endmap - -map skipper - votable -endmap diff --git a/config/rockruinblacklist.txt b/config/rockruinblacklist.txt deleted file mode 100644 index e38e248cd109..000000000000 --- a/config/rockruinblacklist.txt +++ /dev/null @@ -1,29 +0,0 @@ -#Listing maps here will blacklist them from generating in rock planets -#Maps must be the full path to them -#A list of maps valid to blacklist can be found in _maps\RandomRuins\RockRuins -#SPECIFYING AN INVALID MAP WILL RESULT IN RUNTIMES ON GAME START - -#_maps/RandomRuins/RockRuins/rockplanet_boxsci.dmm -#_maps/RandomRuins/RockRuins/rockplanet_chaosmarine.dmm -#_maps/RandomRuins/RockRuins/rockplanet_clock.dmm -#_maps/RandomRuins/RockRuins/rockplanet_clowncrash.dmm -#_maps/RandomRuins/RockRuins/rockplanet_crash_cult.dmm -#_maps/RandomRuins/RockRuins/rockplanet_crash_kitchen.dmm -#_maps/RandomRuins/RockRuins/rockplanet_cult.dmm -#_maps/RandomRuins/RockRuins/rockplanet_dangerpod.dmm -#_maps/RandomRuins/RockRuins/rockplanet_daniel.dmm -#_maps/RandomRuins/RockRuins/rockplanet_fortress_of_solitide.dmm -#_maps/RandomRuins/RockRuins/rockplanet_heirophant.dmm -#_maps/RandomRuins/RockRuins/rockplanet_house.dmm -#_maps/RandomRuins/RockRuins/rockplanet_lab.dmm -#_maps/RandomRuins/RockRuins/rockplanet_miningexpedition.dmm -#_maps/RandomRuins/RockRuins/rockplanet_moth.dmm -#_maps/RandomRuins/RockRuins/rockplanet_ore_proccessing_facility.dmm -#_maps/RandomRuins/RockRuins/rockplanet_pandora.dmm -#_maps/RandomRuins/RockRuins/rockplanet_pioneer.dmm -#_maps/RandomRuins/RockRuins/rockplanet_pod.dmm -#_maps/RandomRuins/RockRuins/rockplanet_rd_god.dmm -#_maps/RandomRuins/RockRuins/rockplanet_soviet.dmm -#_maps/RandomRuins/RockRuins/rockplanet_tradepost.dmm -#_maps/RandomRuins/RockRuins/rockplanet_unhonorable.dmm -#_maps/RandomRuins/RockRuins/rockplanet_wizard.dmm diff --git a/config/sandruinblacklist.txt b/config/sandruinblacklist.txt deleted file mode 100644 index f54299fc4e44..000000000000 --- a/config/sandruinblacklist.txt +++ /dev/null @@ -1,12 +0,0 @@ -#Listing maps here will blacklist them from generating on the sand planet. -#Maps must be the full path to them -#A list of maps valid to blacklist can be found in _maps\RandomRuins\IceRuins -#SPECIFYING AN INVALID MAP WILL RESULT IN RUNTIMES ON GAME START - -##MISC -#_maps/RandomRuins/SandRuins/whitesands_surface_hermit.dmm -#_maps/RandomRuins/SandRuins/whitesands_surface_solgovcrash.dmm -#_maps/RandomRuins/SandRuins/crash_kitchen.dmm -#_maps/RandomRuins/SandRuins/crash_bar.dmm -#_maps/RandomRuins/SandRuins/crash_cargo.dmm -#_maps/RandomRuins/SandRuins/crash_cult.dmm diff --git a/config/spaceruinblacklist.txt b/config/spaceruinblacklist.txt deleted file mode 100644 index f7116456ed5f..000000000000 --- a/config/spaceruinblacklist.txt +++ /dev/null @@ -1,42 +0,0 @@ -#Listing maps here will blacklist them from generating in space. -#Maps must be the full path to them -#A list of maps valid to blacklist can be found in _maps\RandomRuins\SpaceRuins -#SPECIFYING AN INVALID MAP WILL RESULT IN RUNTIMES ON GAME START - -#_maps/RandomRuins/SpaceRuins/abandonedteleporter.dmm -#_maps/RandomRuins/SpaceRuins/abandonedzoo.dmm -#_maps/RandomRuins/SpaceRuins/bigderelict1.dmm -#_maps/RandomRuins/SpaceRuins/bus.dmm -#_maps/RandomRuins/SpaceRuins/caravanambush.dmm -#_maps/RandomRuins/SpaceRuins/clericden.dmm -#_maps/RandomRuins/SpaceRuins/cloning_facility.dmm -#_maps/RandomRuins/SpaceRuins/clownplanet.dmm -#_maps/RandomRuins/SpaceRuins/crashedclownship.dmm -#_maps/RandomRuins/SpaceRuins/crashedship.dmm -#_maps/RandomRuins/SpaceRuins/deepstorage.dmm -#_maps/RandomRuins/SpaceRuins/djstation.dmm -#_maps/RandomRuins/SpaceRuins/emptyshell.dmm -#_maps/RandomRuins/SpaceRuins/Fast_Food.dmm -#_maps/RandomRuins/SpaceRuins/gasthelizards.dmm -#_maps/RandomRuins/SpaceRuins/gondolaasteroid.dmm -#_maps/RandomRuins/SpaceRuins/hilbertshoteltestingsite.dmm -#_maps/RandomRuins/SpaceRuins/intactemptyship.dmm -#_maps/RandomRuins/SpaceRuins/listeningstation.dmm -#_maps/RandomRuins/SpaceRuins/mechtransport.dmm -#_maps/RandomRuins/SpaceRuins/mrow_thats_right -#_maps/RandomRuins/SpaceRuins/oldAIsat.dmm -#_maps/RandomRuins/SpaceRuins/oldstation.dmm -#_maps/RandomRuins/SpaceRuins/oldteleporter.dmm -#_maps/RandomRuins/SpaceRuins/onehalf.dmm -#_maps/RandomRuins/SpaceRuins/power_puzzle.dmm -#_maps/RandomRuins/SpaceRuins/scav_mining.dmm -#_maps/RandomRuins/SpaceRuins/shuttlerelic.dmm -#_maps/RandomRuins/SpaceRuins/spacegym.dmm -#_maps/RandomRuins/SpaceRuins/spacehotel.dmm -#_maps/RandomRuins/SpaceRuins/thederelict.dmm -#_maps/RandomRuins/SpaceRuins/turretedoutpost.dmm -#_maps/RandomRuins/SpaceRuins/vaporwave.dmm -#_maps/RandomRuins/SpaceRuins/way_home.dmm -#_maps/RandomRuins/SpaceRuins/whiteshipdock.dmm -#_maps/RandomRuins/SpaceRuins/whiteshipruin_box.dmm -#_maps/RandomRuins/SpaceRuins/forgottenship.dmm diff --git a/html/changelogs/archive/2023-10.yml b/html/changelogs/archive/2023-10.yml index 7f895552d0b9..34dc45ee6419 100644 --- a/html/changelogs/archive/2023-10.yml +++ b/html/changelogs/archive/2023-10.yml @@ -87,3 +87,15 @@ - rscadd: Added new areas for the ruin - rscadd: Added a subtype of the heavy frontiersmen corpse that lacks the minigun pack +2023-10-29: + retlaw34: + - rscadd: 22lr and cattleman revolver + - rscadd: many gun sounds + - balance: guns reworked +2023-10-30: + thgvr: + - rscdel: Halloween no longer allows different species in prefs +2023-10-31: + thgvr: + - imageadd: New rachnid sprites! + - imagedel: Removed Rachnid mandibles. diff --git a/html/changelogs/archive/2023-11.yml b/html/changelogs/archive/2023-11.yml new file mode 100644 index 000000000000..c8f1b947bab6 --- /dev/null +++ b/html/changelogs/archive/2023-11.yml @@ -0,0 +1,10 @@ +2023-11-01: + Zevotech: + - rscdel: Ruin blacklist text files. + - rscdel: Misc. deprecated text files. + Zytolg: + - rscadd: New Rockplanet Ruin + - rscadd: New ship manufacturer sprites. + - code_imp: Repaths areas in rockplanet.dmm to be in line with other ruins. Starts + using rockplanet.dmm. + - code_imp: Code support for Arrow & Axe Dockyard sprites. diff --git a/icons/mob/human_parts.dmi b/icons/mob/human_parts.dmi index f9a4f9cc7874..115688eeca5e 100644 Binary files a/icons/mob/human_parts.dmi and b/icons/mob/human_parts.dmi differ diff --git a/icons/mob/species/lizard/frills.dmi b/icons/mob/species/lizard/frills.dmi index 6d661308c093..b8587a7bd8e2 100644 Binary files a/icons/mob/species/lizard/frills.dmi and b/icons/mob/species/lizard/frills.dmi differ diff --git a/icons/mob/species/misc/cat.dmi b/icons/mob/species/misc/cat.dmi index 685110a16114..aaab4f1b8637 100644 Binary files a/icons/mob/species/misc/cat.dmi and b/icons/mob/species/misc/cat.dmi differ diff --git a/icons/mob/species/misc/fox.dmi b/icons/mob/species/misc/fox.dmi index 6971b406bce7..da344bb33a3b 100644 Binary files a/icons/mob/species/misc/fox.dmi and b/icons/mob/species/misc/fox.dmi differ diff --git a/icons/mob/species/rachnid/bodyparts.dmi b/icons/mob/species/rachnid/bodyparts.dmi index cef6559f29e7..94fe73ee6a0a 100644 Binary files a/icons/mob/species/rachnid/bodyparts.dmi and b/icons/mob/species/rachnid/bodyparts.dmi differ diff --git a/icons/mob/species/rachnid/spider_legs.dmi b/icons/mob/species/rachnid/spider_legs.dmi index d04b5a719e30..907614753ddd 100644 Binary files a/icons/mob/species/rachnid/spider_legs.dmi and b/icons/mob/species/rachnid/spider_legs.dmi differ diff --git a/icons/mob/species/rachnid/spider_mandibles.dmi b/icons/mob/species/rachnid/spider_mandibles.dmi deleted file mode 100644 index 81b4b29a1262..000000000000 Binary files a/icons/mob/species/rachnid/spider_mandibles.dmi and /dev/null differ diff --git a/icons/mob/species/rachnid/spider_spinneret.dmi b/icons/mob/species/rachnid/spider_spinneret.dmi index 9adf49f05837..6f7fcc9f965c 100644 Binary files a/icons/mob/species/rachnid/spider_spinneret.dmi and b/icons/mob/species/rachnid/spider_spinneret.dmi differ diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index 96528874fee3..c911e872b62d 100644 Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ diff --git a/icons/obj/guns/48x32guns.dmi b/icons/obj/guns/48x32guns.dmi index 732e37318768..88dc73290622 100644 Binary files a/icons/obj/guns/48x32guns.dmi and b/icons/obj/guns/48x32guns.dmi differ diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi index 24b209d6ab2b..02e7d3812dcb 100644 Binary files a/icons/obj/guns/projectile.dmi and b/icons/obj/guns/projectile.dmi differ diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index 1ac2c63ed367..90854a704525 100644 Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ diff --git a/icons/turf/decals.dmi b/icons/turf/decals.dmi index e14d164289bc..c670e677d226 100644 Binary files a/icons/turf/decals.dmi and b/icons/turf/decals.dmi differ diff --git a/sound/weapons/effects/deflect.ogg b/sound/weapons/effects/deflect.ogg new file mode 100644 index 000000000000..a4e9ed6ba4c0 Binary files /dev/null and b/sound/weapons/effects/deflect.ogg differ diff --git a/sound/weapons/effects/ric1.ogg b/sound/weapons/effects/ric1.ogg deleted file mode 100644 index b7f7bd99ca5a..000000000000 Binary files a/sound/weapons/effects/ric1.ogg and /dev/null differ diff --git a/sound/weapons/effects/ric2.ogg b/sound/weapons/effects/ric2.ogg deleted file mode 100644 index dcd44b07329e..000000000000 Binary files a/sound/weapons/effects/ric2.ogg and /dev/null differ diff --git a/sound/weapons/effects/ric3.ogg b/sound/weapons/effects/ric3.ogg deleted file mode 100644 index c538a97e35a6..000000000000 Binary files a/sound/weapons/effects/ric3.ogg and /dev/null differ diff --git a/sound/weapons/effects/ric4.ogg b/sound/weapons/effects/ric4.ogg deleted file mode 100644 index ac872734beaa..000000000000 Binary files a/sound/weapons/effects/ric4.ogg and /dev/null differ diff --git a/sound/weapons/effects/ric5.ogg b/sound/weapons/effects/ric5.ogg deleted file mode 100644 index 2c946c457d6b..000000000000 Binary files a/sound/weapons/effects/ric5.ogg and /dev/null differ diff --git a/sound/weapons/gun/general/bulletcasing_bounce1.ogg b/sound/weapons/gun/general/bulletcasing_bounce1.ogg new file mode 100644 index 000000000000..c33a27fa5007 Binary files /dev/null and b/sound/weapons/gun/general/bulletcasing_bounce1.ogg differ diff --git a/sound/weapons/gun/general/bulletcasing_bounce2.ogg b/sound/weapons/gun/general/bulletcasing_bounce2.ogg new file mode 100644 index 000000000000..f8d516643b25 Binary files /dev/null and b/sound/weapons/gun/general/bulletcasing_bounce2.ogg differ diff --git a/sound/weapons/gun/general/bulletcasing_bounce3.ogg b/sound/weapons/gun/general/bulletcasing_bounce3.ogg new file mode 100644 index 000000000000..84e670706284 Binary files /dev/null and b/sound/weapons/gun/general/bulletcasing_bounce3.ogg differ diff --git a/sound/weapons/gun/general/bulletcasing_shotgun_bounce.ogg b/sound/weapons/gun/general/bulletcasing_shotgun_bounce.ogg new file mode 100644 index 000000000000..324543b62587 Binary files /dev/null and b/sound/weapons/gun/general/bulletcasing_shotgun_bounce.ogg differ diff --git a/sound/weapons/gun/general/rocket_load.ogg b/sound/weapons/gun/general/rocket_load.ogg new file mode 100644 index 000000000000..4c5a2ec6911d Binary files /dev/null and b/sound/weapons/gun/general/rocket_load.ogg differ diff --git a/sound/weapons/gun/general/selector.ogg b/sound/weapons/gun/general/selector.ogg new file mode 100644 index 000000000000..298181609e49 Binary files /dev/null and b/sound/weapons/gun/general/selector.ogg differ diff --git a/sound/weapons/gun/hit/bullet_bounce1.ogg b/sound/weapons/gun/hit/bullet_bounce1.ogg new file mode 100644 index 000000000000..a8a1fb36f385 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_bounce1.ogg differ diff --git a/sound/weapons/gun/hit/bullet_bounce2.ogg b/sound/weapons/gun/hit/bullet_bounce2.ogg new file mode 100644 index 000000000000..a06a0c320e9e Binary files /dev/null and b/sound/weapons/gun/hit/bullet_bounce2.ogg differ diff --git a/sound/weapons/gun/hit/bullet_bounce3.ogg b/sound/weapons/gun/hit/bullet_bounce3.ogg new file mode 100644 index 000000000000..4313703c760b Binary files /dev/null and b/sound/weapons/gun/hit/bullet_bounce3.ogg differ diff --git a/sound/weapons/gun/hit/bullet_bounce4.ogg b/sound/weapons/gun/hit/bullet_bounce4.ogg new file mode 100644 index 000000000000..a3c2c34ec018 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_bounce4.ogg differ diff --git a/sound/weapons/gun/hit/bullet_bounce5.ogg b/sound/weapons/gun/hit/bullet_bounce5.ogg new file mode 100644 index 000000000000..35b8be603534 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_bounce5.ogg differ diff --git a/sound/weapons/gun/hit/bullet_glass_01.ogg b/sound/weapons/gun/hit/bullet_glass_01.ogg new file mode 100644 index 000000000000..30f6f1fb612b Binary files /dev/null and b/sound/weapons/gun/hit/bullet_glass_01.ogg differ diff --git a/sound/weapons/gun/hit/bullet_glass_02.ogg b/sound/weapons/gun/hit/bullet_glass_02.ogg new file mode 100644 index 000000000000..472f98e9801a Binary files /dev/null and b/sound/weapons/gun/hit/bullet_glass_02.ogg differ diff --git a/sound/weapons/gun/hit/bullet_glass_03.ogg b/sound/weapons/gun/hit/bullet_glass_03.ogg new file mode 100644 index 000000000000..25c6df47a921 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_glass_03.ogg differ diff --git a/sound/weapons/gun/hit/bullet_glass_04.ogg b/sound/weapons/gun/hit/bullet_glass_04.ogg new file mode 100644 index 000000000000..b525f665c414 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_glass_04.ogg differ diff --git a/sound/weapons/gun/hit/bullet_glass_05.ogg b/sound/weapons/gun/hit/bullet_glass_05.ogg new file mode 100644 index 000000000000..89ff21723aac Binary files /dev/null and b/sound/weapons/gun/hit/bullet_glass_05.ogg differ diff --git a/sound/weapons/gun/hit/bullet_glass_06.ogg b/sound/weapons/gun/hit/bullet_glass_06.ogg new file mode 100644 index 000000000000..26cacb990766 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_glass_06.ogg differ diff --git a/sound/weapons/gun/hit/bullet_glass_07.ogg b/sound/weapons/gun/hit/bullet_glass_07.ogg new file mode 100644 index 000000000000..110a45074d17 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_glass_07.ogg differ diff --git a/sound/weapons/gun/hit/bullet_impact1.ogg b/sound/weapons/gun/hit/bullet_impact1.ogg new file mode 100644 index 000000000000..4c0cd5b5eebb Binary files /dev/null and b/sound/weapons/gun/hit/bullet_impact1.ogg differ diff --git a/sound/weapons/gun/hit/bullet_impact2.ogg b/sound/weapons/gun/hit/bullet_impact2.ogg new file mode 100644 index 000000000000..bfffcfeadfaa Binary files /dev/null and b/sound/weapons/gun/hit/bullet_impact2.ogg differ diff --git a/sound/weapons/gun/hit/bullet_impact3.ogg b/sound/weapons/gun/hit/bullet_impact3.ogg new file mode 100644 index 000000000000..0356dc6c8819 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_impact3.ogg differ diff --git a/sound/weapons/gun/hit/bullet_masonry_01.ogg b/sound/weapons/gun/hit/bullet_masonry_01.ogg new file mode 100644 index 000000000000..1a04e7688d63 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_masonry_01.ogg differ diff --git a/sound/weapons/gun/hit/bullet_masonry_02.ogg b/sound/weapons/gun/hit/bullet_masonry_02.ogg new file mode 100644 index 000000000000..770e9e242a7f Binary files /dev/null and b/sound/weapons/gun/hit/bullet_masonry_02.ogg differ diff --git a/sound/weapons/gun/hit/bullet_masonry_03.ogg b/sound/weapons/gun/hit/bullet_masonry_03.ogg new file mode 100644 index 000000000000..c0eb0bf13233 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_masonry_03.ogg differ diff --git a/sound/weapons/gun/hit/bullet_masonry_04.ogg b/sound/weapons/gun/hit/bullet_masonry_04.ogg new file mode 100644 index 000000000000..83cbc57ebd83 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_masonry_04.ogg differ diff --git a/sound/weapons/gun/hit/bullet_masonry_05.ogg b/sound/weapons/gun/hit/bullet_masonry_05.ogg new file mode 100644 index 000000000000..6d9a67304659 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_masonry_05.ogg differ diff --git a/sound/weapons/gun/hit/bullet_masonry_06.ogg b/sound/weapons/gun/hit/bullet_masonry_06.ogg new file mode 100644 index 000000000000..2a982a56edb9 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_masonry_06.ogg differ diff --git a/sound/weapons/gun/hit/bullet_metal_01.ogg b/sound/weapons/gun/hit/bullet_metal_01.ogg new file mode 100644 index 000000000000..1a706abd90c0 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_metal_01.ogg differ diff --git a/sound/weapons/gun/hit/bullet_metal_02.ogg b/sound/weapons/gun/hit/bullet_metal_02.ogg new file mode 100644 index 000000000000..ee938e2a593d Binary files /dev/null and b/sound/weapons/gun/hit/bullet_metal_02.ogg differ diff --git a/sound/weapons/gun/hit/bullet_metal_03.ogg b/sound/weapons/gun/hit/bullet_metal_03.ogg new file mode 100644 index 000000000000..9ede9f161290 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_metal_03.ogg differ diff --git a/sound/weapons/gun/hit/bullet_metal_04.ogg b/sound/weapons/gun/hit/bullet_metal_04.ogg new file mode 100644 index 000000000000..bf6824c8cefd Binary files /dev/null and b/sound/weapons/gun/hit/bullet_metal_04.ogg differ diff --git a/sound/weapons/gun/hit/bullet_metal_05.ogg b/sound/weapons/gun/hit/bullet_metal_05.ogg new file mode 100644 index 000000000000..a45e3d6204e4 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_metal_05.ogg differ diff --git a/sound/weapons/gun/hit/bullet_metal_06.ogg b/sound/weapons/gun/hit/bullet_metal_06.ogg new file mode 100644 index 000000000000..53877b5e8ce6 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_metal_06.ogg differ diff --git a/sound/weapons/gun/hit/bullet_miss1.ogg b/sound/weapons/gun/hit/bullet_miss1.ogg new file mode 100644 index 000000000000..dfff45a0cb5d Binary files /dev/null and b/sound/weapons/gun/hit/bullet_miss1.ogg differ diff --git a/sound/weapons/gun/hit/bullet_miss2.ogg b/sound/weapons/gun/hit/bullet_miss2.ogg new file mode 100644 index 000000000000..54b111128021 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_miss2.ogg differ diff --git a/sound/weapons/gun/hit/bullet_miss3.ogg b/sound/weapons/gun/hit/bullet_miss3.ogg new file mode 100644 index 000000000000..fbff6dde9046 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_miss3.ogg differ diff --git a/sound/weapons/gun/hit/bullet_miss4.ogg b/sound/weapons/gun/hit/bullet_miss4.ogg new file mode 100644 index 000000000000..6392d6676915 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_miss4.ogg differ diff --git a/sound/weapons/gun/hit/bullet_ricochet1.ogg b/sound/weapons/gun/hit/bullet_ricochet1.ogg new file mode 100644 index 000000000000..724f599cd5bd Binary files /dev/null and b/sound/weapons/gun/hit/bullet_ricochet1.ogg differ diff --git a/sound/weapons/gun/hit/bullet_ricochet2.ogg b/sound/weapons/gun/hit/bullet_ricochet2.ogg new file mode 100644 index 000000000000..1c29b9e64e20 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_ricochet2.ogg differ diff --git a/sound/weapons/gun/hit/bullet_ricochet3.ogg b/sound/weapons/gun/hit/bullet_ricochet3.ogg new file mode 100644 index 000000000000..96d470ffe2cb Binary files /dev/null and b/sound/weapons/gun/hit/bullet_ricochet3.ogg differ diff --git a/sound/weapons/gun/hit/bullet_ricochet4.ogg b/sound/weapons/gun/hit/bullet_ricochet4.ogg new file mode 100644 index 000000000000..bde8fda3f4c4 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_ricochet4.ogg differ diff --git a/sound/weapons/gun/hit/bullet_ricochet5.ogg b/sound/weapons/gun/hit/bullet_ricochet5.ogg new file mode 100644 index 000000000000..eba86301354f Binary files /dev/null and b/sound/weapons/gun/hit/bullet_ricochet5.ogg differ diff --git a/sound/weapons/gun/hit/bullet_ricochet6.ogg b/sound/weapons/gun/hit/bullet_ricochet6.ogg new file mode 100644 index 000000000000..b143a3c2bdc9 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_ricochet6.ogg differ diff --git a/sound/weapons/gun/hit/bullet_ricochet7.ogg b/sound/weapons/gun/hit/bullet_ricochet7.ogg new file mode 100644 index 000000000000..68a2ee63fa02 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_ricochet7.ogg differ diff --git a/sound/weapons/gun/hit/bullet_ricochet8.ogg b/sound/weapons/gun/hit/bullet_ricochet8.ogg new file mode 100644 index 000000000000..622d8b6941ee Binary files /dev/null and b/sound/weapons/gun/hit/bullet_ricochet8.ogg differ diff --git a/sound/weapons/gun/hit/bullet_snow_01.ogg b/sound/weapons/gun/hit/bullet_snow_01.ogg new file mode 100644 index 000000000000..4da742bf1462 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_snow_01.ogg differ diff --git a/sound/weapons/gun/hit/bullet_snow_02.ogg b/sound/weapons/gun/hit/bullet_snow_02.ogg new file mode 100644 index 000000000000..21572daf13d7 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_snow_02.ogg differ diff --git a/sound/weapons/gun/hit/bullet_snow_03.ogg b/sound/weapons/gun/hit/bullet_snow_03.ogg new file mode 100644 index 000000000000..fb8e1dcb9dad Binary files /dev/null and b/sound/weapons/gun/hit/bullet_snow_03.ogg differ diff --git a/sound/weapons/gun/hit/bullet_snow_04.ogg b/sound/weapons/gun/hit/bullet_snow_04.ogg new file mode 100644 index 000000000000..2bfb46d958b2 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_snow_04.ogg differ diff --git a/sound/weapons/gun/hit/bullet_snow_05.ogg b/sound/weapons/gun/hit/bullet_snow_05.ogg new file mode 100644 index 000000000000..3752f95b3d62 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_snow_05.ogg differ diff --git a/sound/weapons/gun/hit/bullet_snow_06.ogg b/sound/weapons/gun/hit/bullet_snow_06.ogg new file mode 100644 index 000000000000..cac69cc7404c Binary files /dev/null and b/sound/weapons/gun/hit/bullet_snow_06.ogg differ diff --git a/sound/weapons/gun/hit/bullet_wood_01.ogg b/sound/weapons/gun/hit/bullet_wood_01.ogg new file mode 100644 index 000000000000..559310853f95 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_wood_01.ogg differ diff --git a/sound/weapons/gun/hit/bullet_wood_02.ogg b/sound/weapons/gun/hit/bullet_wood_02.ogg new file mode 100644 index 000000000000..852c1d875cde Binary files /dev/null and b/sound/weapons/gun/hit/bullet_wood_02.ogg differ diff --git a/sound/weapons/gun/hit/bullet_wood_03.ogg b/sound/weapons/gun/hit/bullet_wood_03.ogg new file mode 100644 index 000000000000..440681e0da48 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_wood_03.ogg differ diff --git a/sound/weapons/gun/hit/bullet_wood_04.ogg b/sound/weapons/gun/hit/bullet_wood_04.ogg new file mode 100644 index 000000000000..89ddd21e2bbd Binary files /dev/null and b/sound/weapons/gun/hit/bullet_wood_04.ogg differ diff --git a/sound/weapons/gun/hit/bullet_wood_05.ogg b/sound/weapons/gun/hit/bullet_wood_05.ogg new file mode 100644 index 000000000000..3a66b3f32c8a Binary files /dev/null and b/sound/weapons/gun/hit/bullet_wood_05.ogg differ diff --git a/sound/weapons/gun/hit/bullet_wood_06.ogg b/sound/weapons/gun/hit/bullet_wood_06.ogg new file mode 100644 index 000000000000..cf54f8cc8f58 Binary files /dev/null and b/sound/weapons/gun/hit/bullet_wood_06.ogg differ diff --git a/sound/weapons/gun/hit/energy_impact1.ogg b/sound/weapons/gun/hit/energy_impact1.ogg new file mode 100644 index 000000000000..e9d6305972ca Binary files /dev/null and b/sound/weapons/gun/hit/energy_impact1.ogg differ diff --git a/sound/weapons/gun/hit/energy_miss1.ogg b/sound/weapons/gun/hit/energy_miss1.ogg new file mode 100644 index 000000000000..55839b14d3d1 Binary files /dev/null and b/sound/weapons/gun/hit/energy_miss1.ogg differ diff --git a/sound/weapons/gun/hit/energy_ricochet1.ogg b/sound/weapons/gun/hit/energy_ricochet1.ogg new file mode 100644 index 000000000000..7601f7823a79 Binary files /dev/null and b/sound/weapons/gun/hit/energy_ricochet1.ogg differ diff --git a/sound/weapons/gun/pistol/commander.ogg b/sound/weapons/gun/pistol/commander.ogg new file mode 100644 index 000000000000..57ba0a347c84 Binary files /dev/null and b/sound/weapons/gun/pistol/commander.ogg differ diff --git a/sound/weapons/gun/pistol/deagle.ogg b/sound/weapons/gun/pistol/deagle.ogg new file mode 100644 index 000000000000..41d814d2fcec Binary files /dev/null and b/sound/weapons/gun/pistol/deagle.ogg differ diff --git a/sound/weapons/gun/pistol/deagle_reload.ogg b/sound/weapons/gun/pistol/deagle_reload.ogg new file mode 100644 index 000000000000..77abf293efc6 Binary files /dev/null and b/sound/weapons/gun/pistol/deagle_reload.ogg differ diff --git a/sound/weapons/gun/pistol/deagle_unload.ogg b/sound/weapons/gun/pistol/deagle_unload.ogg new file mode 100644 index 000000000000..84b18d575b7f Binary files /dev/null and b/sound/weapons/gun/pistol/deagle_unload.ogg differ diff --git a/sound/weapons/gun/pistol/himehabu.ogg b/sound/weapons/gun/pistol/himehabu.ogg new file mode 100644 index 000000000000..ad2dc7cfcc41 Binary files /dev/null and b/sound/weapons/gun/pistol/himehabu.ogg differ diff --git a/sound/weapons/gun/pistol/m1911.ogg b/sound/weapons/gun/pistol/m1911.ogg new file mode 100644 index 000000000000..1d7a88dbbdc0 Binary files /dev/null and b/sound/weapons/gun/pistol/m1911.ogg differ diff --git a/sound/weapons/gun/pistol/m1911_cocked.ogg b/sound/weapons/gun/pistol/m1911_cocked.ogg new file mode 100644 index 000000000000..b1daedcbf00f Binary files /dev/null and b/sound/weapons/gun/pistol/m1911_cocked.ogg differ diff --git a/sound/weapons/gun/pistol/m1911_reload.ogg b/sound/weapons/gun/pistol/m1911_reload.ogg new file mode 100644 index 000000000000..5dbd7368bda6 Binary files /dev/null and b/sound/weapons/gun/pistol/m1911_reload.ogg differ diff --git a/sound/weapons/gun/pistol/m1911_unload.ogg b/sound/weapons/gun/pistol/m1911_unload.ogg new file mode 100644 index 000000000000..1cabe5cd2b86 Binary files /dev/null and b/sound/weapons/gun/pistol/m1911_unload.ogg differ diff --git a/sound/weapons/gun/pistol/mag_insert.ogg b/sound/weapons/gun/pistol/mag_insert.ogg index 42a05ebc483f..0791490c6889 100644 Binary files a/sound/weapons/gun/pistol/mag_insert.ogg and b/sound/weapons/gun/pistol/mag_insert.ogg differ diff --git a/sound/weapons/gun/pistol/mag_insert_alt.ogg b/sound/weapons/gun/pistol/mag_insert_alt.ogg new file mode 100644 index 000000000000..c442f8b16277 Binary files /dev/null and b/sound/weapons/gun/pistol/mag_insert_alt.ogg differ diff --git a/sound/weapons/gun/pistol/mag_release.ogg b/sound/weapons/gun/pistol/mag_release.ogg index cccbf5f9d914..757168fcf1b4 100644 Binary files a/sound/weapons/gun/pistol/mag_release.ogg and b/sound/weapons/gun/pistol/mag_release.ogg differ diff --git a/sound/weapons/gun/pistol/mag_release_alt.ogg b/sound/weapons/gun/pistol/mag_release_alt.ogg new file mode 100644 index 000000000000..334d1a12f299 Binary files /dev/null and b/sound/weapons/gun/pistol/mag_release_alt.ogg differ diff --git a/sound/weapons/gun/pistol/rack.ogg b/sound/weapons/gun/pistol/rack.ogg index fd0408d8ff2e..ff2512af27a5 100644 Binary files a/sound/weapons/gun/pistol/rack.ogg and b/sound/weapons/gun/pistol/rack.ogg differ diff --git a/sound/weapons/gun/pistol/rack_small.ogg b/sound/weapons/gun/pistol/rack_small.ogg index f33db717db82..a9ab76f14283 100644 Binary files a/sound/weapons/gun/pistol/rack_small.ogg and b/sound/weapons/gun/pistol/rack_small.ogg differ diff --git a/sound/weapons/gun/pistol/shot.ogg b/sound/weapons/gun/pistol/shot.ogg index a808f8690730..1bbd95e405bc 100644 Binary files a/sound/weapons/gun/pistol/shot.ogg and b/sound/weapons/gun/pistol/shot.ogg differ diff --git a/sound/weapons/gun/revolver/cattleman.ogg b/sound/weapons/gun/revolver/cattleman.ogg new file mode 100644 index 000000000000..b56abbcf1583 Binary files /dev/null and b/sound/weapons/gun/revolver/cattleman.ogg differ diff --git a/sound/weapons/gun/revolver/revolver_prime.ogg b/sound/weapons/gun/revolver/revolver_prime.ogg new file mode 100644 index 000000000000..5391854fbee3 Binary files /dev/null and b/sound/weapons/gun/revolver/revolver_prime.ogg differ diff --git a/sound/weapons/gun/revolver/shot.ogg b/sound/weapons/gun/revolver/shot.ogg index 91e480bd152a..d02d1c750c24 100644 Binary files a/sound/weapons/gun/revolver/shot.ogg and b/sound/weapons/gun/revolver/shot.ogg differ diff --git a/sound/weapons/gun/revolver/shot_hunting.ogg b/sound/weapons/gun/revolver/shot_hunting.ogg new file mode 100644 index 000000000000..4beb4d1e4648 Binary files /dev/null and b/sound/weapons/gun/revolver/shot_hunting.ogg differ diff --git a/sound/weapons/gun/revolver/shot_light.ogg b/sound/weapons/gun/revolver/shot_light.ogg new file mode 100644 index 000000000000..68b7fada6e49 Binary files /dev/null and b/sound/weapons/gun/revolver/shot_light.ogg differ diff --git a/sound/weapons/gun/revolver/shot_old_new.ogg b/sound/weapons/gun/revolver/shot_old_new.ogg new file mode 100644 index 000000000000..91e480bd152a Binary files /dev/null and b/sound/weapons/gun/revolver/shot_old_new.ogg differ diff --git a/sound/weapons/gun/rifle/ak47_cocked.ogg b/sound/weapons/gun/rifle/ak47_cocked.ogg new file mode 100644 index 000000000000..5f2d32e31eaf Binary files /dev/null and b/sound/weapons/gun/rifle/ak47_cocked.ogg differ diff --git a/sound/weapons/gun/rifle/ak47_reload.ogg b/sound/weapons/gun/rifle/ak47_reload.ogg new file mode 100644 index 000000000000..9105d5c31c16 Binary files /dev/null and b/sound/weapons/gun/rifle/ak47_reload.ogg differ diff --git a/sound/weapons/gun/rifle/ak47_unload.ogg b/sound/weapons/gun/rifle/ak47_unload.ogg new file mode 100644 index 000000000000..f6b5c73d7f6b Binary files /dev/null and b/sound/weapons/gun/rifle/ak47_unload.ogg differ diff --git a/sound/weapons/gun/rifle/ar_cock.ogg b/sound/weapons/gun/rifle/ar_cock.ogg new file mode 100644 index 000000000000..ac02ed93c1d7 Binary files /dev/null and b/sound/weapons/gun/rifle/ar_cock.ogg differ diff --git a/sound/weapons/gun/rifle/ar_reload.ogg b/sound/weapons/gun/rifle/ar_reload.ogg new file mode 100644 index 000000000000..6e557b892a97 Binary files /dev/null and b/sound/weapons/gun/rifle/ar_reload.ogg differ diff --git a/sound/weapons/gun/rifle/ar_unload.ogg b/sound/weapons/gun/rifle/ar_unload.ogg new file mode 100644 index 000000000000..591599f52334 Binary files /dev/null and b/sound/weapons/gun/rifle/ar_unload.ogg differ diff --git a/sound/weapons/gun/rifle/m16_cocked.ogg b/sound/weapons/gun/rifle/m16_cocked.ogg new file mode 100644 index 000000000000..8d2e059efaa7 Binary files /dev/null and b/sound/weapons/gun/rifle/m16_cocked.ogg differ diff --git a/sound/weapons/gun/rifle/m16_reload.ogg b/sound/weapons/gun/rifle/m16_reload.ogg new file mode 100644 index 000000000000..b2666ca96fe7 Binary files /dev/null and b/sound/weapons/gun/rifle/m16_reload.ogg differ diff --git a/sound/weapons/gun/rifle/m16_unload.ogg b/sound/weapons/gun/rifle/m16_unload.ogg new file mode 100644 index 000000000000..d302e5a26748 Binary files /dev/null and b/sound/weapons/gun/rifle/m16_unload.ogg differ diff --git a/sound/weapons/gun/shotgun/insert_shell.ogg b/sound/weapons/gun/shotgun/insert_shell.ogg index 5b2c6cdc5003..cd5c5e31aa67 100644 Binary files a/sound/weapons/gun/shotgun/insert_shell.ogg and b/sound/weapons/gun/shotgun/insert_shell.ogg differ diff --git a/sound/weapons/gun/shotgun/rack.ogg b/sound/weapons/gun/shotgun/rack.ogg index c25a10ffa494..865dbef3d06e 100644 Binary files a/sound/weapons/gun/shotgun/rack.ogg and b/sound/weapons/gun/shotgun/rack.ogg differ diff --git a/sound/weapons/gun/shotgun/rack_alt.ogg b/sound/weapons/gun/shotgun/rack_alt.ogg new file mode 100644 index 000000000000..0f106fe85ab1 Binary files /dev/null and b/sound/weapons/gun/shotgun/rack_alt.ogg differ diff --git a/sound/weapons/gun/smg/smg_reload.ogg b/sound/weapons/gun/smg/smg_reload.ogg new file mode 100644 index 000000000000..4e7b8f7ea91e Binary files /dev/null and b/sound/weapons/gun/smg/smg_reload.ogg differ diff --git a/sound/weapons/gun/smg/smg_unload.ogg b/sound/weapons/gun/smg/smg_unload.ogg new file mode 100644 index 000000000000..677b5a8f3d29 Binary files /dev/null and b/sound/weapons/gun/smg/smg_unload.ogg differ diff --git a/sound/weapons/gun/smg/smgrack.ogg b/sound/weapons/gun/smg/smgrack.ogg index 95f5a5f9c843..57ef99a0c5ca 100644 Binary files a/sound/weapons/gun/smg/smgrack.ogg and b/sound/weapons/gun/smg/smgrack.ogg differ diff --git a/sound/weapons/gun/smg/uzi.ogg b/sound/weapons/gun/smg/uzi.ogg new file mode 100644 index 000000000000..0168613ce872 Binary files /dev/null and b/sound/weapons/gun/smg/uzi.ogg differ diff --git a/sound/weapons/gun/smg/uzi_cocked.ogg b/sound/weapons/gun/smg/uzi_cocked.ogg new file mode 100644 index 000000000000..8cbe23b017b0 Binary files /dev/null and b/sound/weapons/gun/smg/uzi_cocked.ogg differ diff --git a/sound/weapons/gun/smg/uzi_reload.ogg b/sound/weapons/gun/smg/uzi_reload.ogg new file mode 100644 index 000000000000..8dae035f65e2 Binary files /dev/null and b/sound/weapons/gun/smg/uzi_reload.ogg differ diff --git a/sound/weapons/gun/smg/uzi_unload.ogg b/sound/weapons/gun/smg/uzi_unload.ogg new file mode 100644 index 000000000000..b285b71ac3a0 Binary files /dev/null and b/sound/weapons/gun/smg/uzi_unload.ogg differ diff --git a/sound/weapons/gun/smg/vector_fire.ogg b/sound/weapons/gun/smg/vector_fire.ogg new file mode 100644 index 000000000000..05c797c1464b Binary files /dev/null and b/sound/weapons/gun/smg/vector_fire.ogg differ diff --git a/tools/changelog/generate_cl.py b/tools/changelog/generate_cl.py index 7259467f007d..2ab903eb8896 100644 --- a/tools/changelog/generate_cl.py +++ b/tools/changelog/generate_cl.py @@ -27,7 +27,7 @@ from pathlib import Path from github import Github, InputGitAuthor -from ruamel import yaml +from ruamel.yaml import YAML CL_BODY = re.compile(r":cl:(.+)?\r\n((.|\n|\r)+?)\r\n\/:cl:", re.MULTILINE) CL_SPLIT = re.compile(r"(^\w+):\s+(\w.+)", re.MULTILINE) @@ -71,8 +71,10 @@ write_cl["delete-after"] = True +yaml = YAML(typ='safe', pure=True) + with open(Path.cwd().joinpath("tools/changelog/tags.yml")) as file: - tags = yaml.safe_load(file) + tags = yaml.load(file) write_cl["changes"] = [] @@ -86,7 +88,6 @@ if write_cl["changes"]: with io.StringIO() as cl_contents: - yaml = yaml.YAML() yaml.indent(sequence=4, offset=2) yaml.dump(write_cl, cl_contents) cl_contents.seek(0)