diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_hermit.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_hermit.dmm index df0bf1c0880..d596a823a6a 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_hermit.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_hermit.dmm @@ -75,7 +75,7 @@ /turf/open/floor/grass/fairy, /area/ruin/powered/hermit) "wf" = ( -/obj/item/gun/ballistic/rifle/boltaction/pipegun/prime, +/obj/item/gun/energy/laser/musket/prime, /obj/structure/table/wood, /obj/item/flashlight/lantern, /turf/open/floor/wood, diff --git a/_maps/deathmatch/maint_mania.dmm b/_maps/deathmatch/maint_mania.dmm index 8bb2522bc5d..5b23ac38feb 100644 --- a/_maps/deathmatch/maint_mania.dmm +++ b/_maps/deathmatch/maint_mania.dmm @@ -193,7 +193,7 @@ /turf/open/indestructible, /area/deathmatch) "zF" = ( -/obj/item/ammo_casing/shotgun/improvised, +/obj/effect/spawner/random/junk_shell, /turf/open/indestructible, /area/deathmatch) "AG" = ( diff --git a/_maps/map_files/NorthStar/north_star.dmm b/_maps/map_files/NorthStar/north_star.dmm index dde4d751e1f..95f74e18ba9 100644 --- a/_maps/map_files/NorthStar/north_star.dmm +++ b/_maps/map_files/NorthStar/north_star.dmm @@ -3381,16 +3381,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/floor3/aft) -"aSz" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - id = "cmoshutter"; - name = "CMO Privacy Shutters" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/command/heads_quarters/cmo) "aSB" = ( /obj/effect/spawner/random/trash/cigbutt, /turf/open/floor/iron/dark, @@ -8551,6 +8541,16 @@ /mob/living/basic/rabbit, /turf/open/floor/grass, /area/station/hallway/secondary/entry) +"ceF" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + name = "CMO Privacy Shutters"; + dir = 4; + id = "cmoshutter" + }, +/turf/open/floor/plating, +/area/station/medical/storage) "ceH" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/green/line{ @@ -11197,31 +11197,6 @@ /obj/machinery/airalarm/directional/west, /turf/open/floor/bronze/filled, /area/station/maintenance/floor1/starboard) -"cNC" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/button/door/directional/west{ - id = "viro-inner"; - name = "Inner Virology Lockdown"; - pixel_y = -8 - }, -/obj/machinery/button/door/directional/west{ - id = "viro-outer"; - name = "Outer Virology Lockdown"; - pixel_y = 8 - }, -/obj/machinery/button/door/directional/west{ - id = "viro-iso"; - name = "Isolation Bolts"; - normaldoorcontrol = 1; - pixel_x = -36; - specialfunctions = 4 - }, -/obj/effect/turf_decal/tile/green/opposingcorners, -/obj/effect/landmark/start/virologist, -/turf/open/floor/iron/white, -/area/station/medical/virology) "cNE" = ( /obj/structure/mineral_door/paperframe, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -14128,16 +14103,6 @@ /obj/machinery/camera/autoname/directional/south, /turf/open/floor/iron/dark/side, /area/station/hallway/floor4/aft) -"dCm" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "cmoshutter"; - name = "CMO Privacy Shutters" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/command/heads_quarters/cmo) "dCt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -26969,6 +26934,16 @@ /obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/iron, /area/station/engineering/atmos) +"hab" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "cmoshutter"; + name = "CMO Privacy Shutters" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/command/heads_quarters/cmo) "hah" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/white/smooth_corner{ @@ -29826,16 +29801,6 @@ dir = 8 }, /area/station/commons/dorms/room1) -"hLa" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 1; - id = "cmoshutter"; - name = "CMO Privacy Shutters" - }, -/turf/open/floor/plating, -/area/station/command/heads_quarters/cmo) "hLd" = ( /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -41362,19 +41327,6 @@ /obj/effect/turf_decal/trimline/dark_blue/end, /turf/open/floor/iron/dark, /area/station/commons/storage/tools) -"kIx" = ( -/obj/machinery/keycard_auth/directional/north{ - pixel_x = 9 - }, -/obj/machinery/button/door/directional/north{ - name = "CMO Privacy Shutters"; - id = "cmoshutter"; - req_access = list("cmo"); - pixel_y = 25; - pixel_x = -5 - }, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/cmo) "kIG" = ( /obj/machinery/button/door/directional/north{ id = "Secure Storage"; @@ -41750,6 +41702,11 @@ /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"kNy" = ( +/obj/item/storage/toolbox/maint_kit, +/obj/effect/spawner/random/junk_shell, +/turf/open/floor/pod/light, +/area/station/maintenance/floor4/port) "kNA" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -42618,16 +42575,6 @@ /obj/structure/rack, /turf/open/floor/pod/light, /area/station/maintenance/floor2/port/fore) -"kYr" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "cmoshutter"; - name = "CMO Privacy Shutters" - }, -/turf/open/floor/plating, -/area/station/command/heads_quarters/cmo) "kYt" = ( /obj/structure/chair/comfy/carp, /turf/open/floor/carpet/neon/simple/pink/nodots, @@ -46303,6 +46250,16 @@ }, /turf/open/floor/pod/dark, /area/station/maintenance/floor2/port) +"lTO" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 1; + id = "cmoshutter"; + name = "CMO Privacy Shutters" + }, +/turf/open/floor/plating, +/area/station/command/heads_quarters/cmo) "lTV" = ( /obj/machinery/door/firedoor, /obj/machinery/mineral/ore_redemption, @@ -51277,6 +51234,16 @@ /obj/structure/cable/layer3, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat) +"nge" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "cmoshutter"; + name = "CMO Privacy Shutters" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/station/command/heads_quarters/cmo) "ngf" = ( /obj/structure/railing, /obj/effect/decal/cleanable/dirt, @@ -57427,6 +57394,16 @@ /obj/structure/sign/poster/official/terragov/directional/north, /turf/open/floor/iron/dark/small, /area/station/science/xenobiology) +"oJs" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "cmoshutter"; + name = "CMO Privacy Shutters" + }, +/turf/open/floor/plating, +/area/station/command/heads_quarters/cmo) "oJO" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/pod/dark, @@ -59400,14 +59377,6 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/pod/dark, /area/station/maintenance/floor2/port/aft) -"pmI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/tile/green/opposingcorners, -/obj/effect/landmark/start/virologist, -/turf/open/floor/iron/white, -/area/station/medical/virology) "pmO" = ( /obj/structure/chair/comfy/brown{ dir = 8 @@ -68112,11 +68081,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/floor1/starboard/fore) -"rxZ" = ( -/obj/item/storage/toolbox/maint_kit, -/obj/item/ammo_casing/shotgun/improvised, -/turf/open/floor/pod/light, -/area/station/maintenance/floor4/port) "ryh" = ( /obj/structure/cable/multilayer/multiz, /turf/open/floor/plating/airless, @@ -87843,16 +87807,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/carpet/red, /area/station/service/theater) -"wBe" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/obj/machinery/door/poddoor/shutters/preopen{ - name = "CMO Privacy Shutters"; - dir = 4; - id = "cmoshutter" - }, -/turf/open/floor/plating, -/area/station/medical/storage) "wBg" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/robot_debris/up, @@ -92040,6 +91994,19 @@ /obj/effect/turf_decal/siding/thinplating_new/corner, /turf/open/floor/iron/smooth, /area/station/cargo/sorting) +"xEv" = ( +/obj/machinery/keycard_auth/directional/north{ + pixel_x = 9 + }, +/obj/machinery/button/door/directional/north{ + name = "CMO Privacy Shutters"; + id = "cmoshutter"; + req_access = list("cmo"); + pixel_y = 25; + pixel_x = -5 + }, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/cmo) "xEw" = ( /obj/machinery/computer/camera_advanced/base_construction/aux{ dir = 4 @@ -93018,6 +92985,14 @@ dir = 1 }, /area/station/science/genetics) +"xRI" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/landmark/start/virologist, +/turf/open/floor/iron/white, +/area/station/medical/virology) "xRJ" = ( /obj/effect/decal/cleanable/blood/old, /obj/item/screwdriver, @@ -94318,6 +94293,31 @@ /obj/item/reagent_containers/pill/maintenance, /turf/open/floor/iron/white, /area/station/medical/abandoned) +"yks" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/button/door/directional/west{ + id = "viro-inner"; + name = "Inner Virology Lockdown"; + pixel_y = -8 + }, +/obj/machinery/button/door/directional/west{ + id = "viro-outer"; + name = "Outer Virology Lockdown"; + pixel_y = 8 + }, +/obj/machinery/button/door/directional/west{ + id = "viro-iso"; + name = "Isolation Bolts"; + normaldoorcontrol = 1; + pixel_x = -36; + specialfunctions = 4 + }, +/obj/effect/turf_decal/tile/green/opposingcorners, +/obj/effect/landmark/start/virologist, +/turf/open/floor/iron/white, +/area/station/medical/virology) "ykt" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -190467,9 +190467,9 @@ syV wPX xKq nCG -dCm +nge goX -kYr +oJs nCG mrG mrG @@ -190723,7 +190723,7 @@ jRO ihm wyE xKq -hLa +lTO rac srK keJ @@ -190980,7 +190980,7 @@ jRO eCO wyE xKq -aSz +hab dZz bPP xhJ @@ -191752,7 +191752,7 @@ tam oKR xKq nCG -kIx +xEv rBt aDp xug @@ -192267,10 +192267,10 @@ eBo vOn nfv nfv -wBe -wBe -wBe -wBe +ceF +ceF +ceF +ceF nfv nfv mHh @@ -195582,7 +195582,7 @@ mqc mRQ dVV xNy -cNC +yks mcI rPC sJn @@ -196096,7 +196096,7 @@ iOA utl doh gJz -pmI +xRI hwQ piz aWO @@ -196610,7 +196610,7 @@ iOA dfU pZm wJy -pmI +xRI dVV bLm yhv @@ -314350,7 +314350,7 @@ cis cub wTg vEa -rxZ +kNy tCG pme iho diff --git a/code/__DEFINES/projectiles.dm b/code/__DEFINES/projectiles.dm index e471fe2324d..ae61c5e50b7 100644 --- a/code/__DEFINES/projectiles.dm +++ b/code/__DEFINES/projectiles.dm @@ -64,6 +64,8 @@ #define CALIBER_HOOK "hook" /// The caliber used by the changeling tentacle mutation. #define CALIBER_TENTACLE "tentacle" +/// The caliber used by pipeguns and pipe pistols +#define CALIBER_JUNK "junk" /// For gunpoints, how many tiles around the target the shooter can roam without losing their shot #define GUNPOINT_SHOOTER_STRAY_RANGE 2 diff --git a/code/datums/components/crafting/ranged_weapon.dm b/code/datums/components/crafting/ranged_weapon.dm index 0cf681ac2b1..88b721d3cb6 100644 --- a/code/datums/components/crafting/ranged_weapon.dm +++ b/code/datums/components/crafting/ranged_weapon.dm @@ -181,15 +181,33 @@ /datum/crafting_recipe/pipegun name = "Pipegun" result = /obj/item/gun/ballistic/rifle/boltaction/pipegun - reqs = list(/obj/item/weaponcrafting/receiver = 1, - /obj/item/pipe = 1, + reqs = list( + /obj/item/weaponcrafting/receiver = 1, + /obj/item/pipe = 2, /obj/item/weaponcrafting/stock = 1, + /obj/item/storage/toolbox = 1, // for the screws /obj/item/stack/sticky_tape = 1, ) tool_behaviors = list(TOOL_SCREWDRIVER) time = 5 SECONDS category = CAT_WEAPON_RANGED +/datum/crafting_recipe/pipepistol + name = "Pipe Pistol" + result = /obj/item/gun/ballistic/rifle/boltaction/pipegun/pistol + reqs = list( + /obj/item/weaponcrafting/receiver = 1, + /obj/item/pipe = 1, + /obj/item/stock_parts/servo = 2, + /obj/item/stack/sheet/mineral/wood = 4, + /obj/item/storage/toolbox = 1, // for the screws + /obj/item/stack/sticky_tape = 1, + ) + tool_paths = list(/obj/item/hatchet) + tool_behaviors = list(TOOL_SCREWDRIVER) + time = 5 SECONDS + category = CAT_WEAPON_RANGED + /datum/crafting_recipe/rebarxbow name = "Heated Rebar Crossbow" result = /obj/item/gun/ballistic/rifle/rebarxbow @@ -229,10 +247,11 @@ /datum/reagent/consumable/grey_bull = 20, /obj/item/spear = 1, /obj/item/storage/toolbox = 1, + /obj/item/clothing/head/costume/crown = 1, // Any ol' crown will do ) tool_behaviors = list(TOOL_SCREWDRIVER) tool_paths = list(/obj/item/clothing/gloves/color/yellow, /obj/item/clothing/mask/gas, /obj/item/melee/baton/security/cattleprod) - time = 30 SECONDS //contemplate for a bit + time = 15 SECONDS //contemplate for a bit category = CAT_WEAPON_RANGED crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED diff --git a/code/datums/components/crafting/weapon_ammo.dm b/code/datums/components/crafting/weapon_ammo.dm index 55701dbde53..32f34f2ae75 100644 --- a/code/datums/components/crafting/weapon_ammo.dm +++ b/code/datums/components/crafting/weapon_ammo.dm @@ -71,8 +71,8 @@ category = CAT_WEAPON_AMMO /datum/crafting_recipe/improvisedslug - name = "Improvised Shotgun Shell" - result = /obj/item/ammo_casing/shotgun/improvised + name = "Junk Shell" + result = /obj/effect/spawner/random/junk_shell reqs = list( /obj/item/stack/sheet/iron = 2, /obj/item/stack/cable_coil = 1, diff --git a/code/game/objects/items/granters/crafting/pipegun.dm b/code/game/objects/items/granters/crafting/pipegun.dm index 8d331b2286d..e54439350da 100644 --- a/code/game/objects/items/granters/crafting/pipegun.dm +++ b/code/game/objects/items/granters/crafting/pipegun.dm @@ -11,6 +11,7 @@ "Did he drop this into a moisture trap? Yuck.", "Toolboxing techniques, huh? I kinda just want to know how to make the gun.", "What the hell does he mean by 'ancient warrior tradition'?", + "...the true masters of this place are not those who merely inhabit it...", ) /obj/item/book/granter/crafting_recipe/dusting/laser_musket_prime diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index a2c553fbea1..d9d105dc13b 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -758,6 +758,7 @@ /obj/item/ammo_casing/strilka310, /obj/item/ammo_casing/shotgun, /obj/item/ammo_casing/a357, + /obj/item/ammo_casing/junk, )) /obj/item/storage/belt/fannypack diff --git a/code/modules/cargo/bounties/assistant.dm b/code/modules/cargo/bounties/assistant.dm index 636b4f4791b..d4ef4b6a148 100644 --- a/code/modules/cargo/bounties/assistant.dm +++ b/code/modules/cargo/bounties/assistant.dm @@ -198,11 +198,11 @@ wanted_types = list(/obj/item/pneumatic_cannon/ghetto = TRUE) /datum/bounty/item/assistant/improvised_shells - name = "Improvised Shotgun Shells" - description = "Budget cuts are hitting our security department pretty hard. Send some improvised shotgun shells when you can." + name = "Junk Shells" + description = "Our assistant militia has chewed through all our iron supplies. To stop them making bullets out of station property, we need junk shells, pronto." reward = CARGO_CRATE_VALUE * 4 required_count = 5 - wanted_types = list(/obj/item/ammo_casing/shotgun/improvised = TRUE) + wanted_types = list(/obj/item/ammo_casing/junk = TRUE) /datum/bounty/item/assistant/flamethrower name = "Flamethrower" diff --git a/code/modules/clothing/suits/jacket.dm b/code/modules/clothing/suits/jacket.dm index 6db889032c0..9004f773e35 100644 --- a/code/modules/clothing/suits/jacket.dm +++ b/code/modules/clothing/suits/jacket.dm @@ -54,6 +54,16 @@ desc = "Aviators not included." icon_state = "bomberjacket" inhand_icon_state = "brownjsuit" + allowed = list( + /obj/item/flashlight, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman, + /obj/item/toy, + /obj/item/storage/fancy/cigarettes, + /obj/item/lighter, + /obj/item/gun/ballistic/rifle/boltaction/pipegun, + /obj/item/radio, + ) /obj/item/clothing/suit/jacket/leather name = "leather jacket" @@ -62,7 +72,19 @@ inhand_icon_state = "hostrench" resistance_flags = NONE max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT - allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/c38/detective, /obj/item/radio) + allowed = list( + /obj/item/flashlight, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman, + /obj/item/toy, + /obj/item/storage/fancy/cigarettes, + /obj/item/lighter, + /obj/item/gun/ballistic/automatic/pistol, + /obj/item/gun/ballistic/revolver, + /obj/item/gun/ballistic/revolver/c38/detective, + /obj/item/gun/ballistic/rifle/boltaction/pipegun, + /obj/item/radio, + ) /obj/item/clothing/suit/jacket/leather/biker name = "biker jacket" @@ -96,7 +118,19 @@ desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable." icon_state = "militaryjacket" inhand_icon_state = null - allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/radio) + allowed = list( + /obj/item/flashlight, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman, + /obj/item/toy, + /obj/item/storage/fancy/cigarettes, + /obj/item/lighter, + /obj/item/gun/ballistic/automatic/pistol, + /obj/item/gun/ballistic/revolver, + /obj/item/gun/ballistic/revolver/c38/detective, + /obj/item/gun/ballistic/rifle/boltaction/pipegun, + /obj/item/radio, + ) /obj/item/clothing/suit/jacket/letterman name = "letterman jacket" @@ -118,6 +152,19 @@ icon_state = "letterman_s" inhand_icon_state = null species_exception = list(/datum/species/golem) + allowed = list( + /obj/item/flashlight, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman, + /obj/item/toy, + /obj/item/storage/fancy/cigarettes, + /obj/item/lighter, + /obj/item/gun/ballistic/automatic/pistol, + /obj/item/gun/ballistic/revolver, + /obj/item/gun/ballistic/revolver/c38/detective, + /obj/item/gun/ballistic/rifle/boltaction/pipegun, + /obj/item/radio, + ) /obj/item/clothing/suit/jacket/letterman_nanotrasen name = "blue letterman jacket" diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index a8b2a52ff04..fe6fce092a4 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -179,7 +179,7 @@ /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/t_scanner, - /obj/item/gun/ballistic/rifle/boltaction/pipegun/prime, + /obj/item/gun/ballistic/rifle/boltaction/pipegun, ) resistance_flags = NONE species_exception = list(/datum/species/golem) diff --git a/code/modules/clothing/suits/wetfloor.dm b/code/modules/clothing/suits/wetfloor.dm index 390a529710a..17bef117ca6 100644 --- a/code/modules/clothing/suits/wetfloor.dm +++ b/code/modules/clothing/suits/wetfloor.dm @@ -19,7 +19,7 @@ allowed = list( /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, - /obj/item/gun/ballistic/rifle/boltaction/pipegun/prime, + /obj/item/gun/ballistic/rifle/boltaction/pipegun, ) /datum/armor/suit_caution diff --git a/code/modules/projectiles/ammunition/ballistic/junk.dm b/code/modules/projectiles/ammunition/ballistic/junk.dm new file mode 100644 index 00000000000..99a9b637923 --- /dev/null +++ b/code/modules/projectiles/ammunition/ballistic/junk.dm @@ -0,0 +1,43 @@ +// Junk + +/obj/item/ammo_casing/junk + name = "improvised junk round" + desc = "What is in the shell? Shoot it to find out." + icon_state = "improvshell" + caliber = CALIBER_JUNK + projectile_type = /obj/projectile/bullet/junk + custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*2, /datum/material/glass=SMALL_MATERIAL_AMOUNT*1) + +// Junk Shell Spawner; used to spawn in our random shells upon crafting + +/obj/effect/spawner/random/junk_shell + name = "junk shell spawner" + desc = "Bullet. Bullet Bullet." + icon_state = "junkround" + loot = list( + /obj/item/ammo_casing/junk = 50, + /obj/item/ammo_casing/junk/incendiary = 20, + /obj/item/ammo_casing/junk/shock = 20, + /obj/item/ammo_casing/junk/hunter = 20, + /obj/item/ammo_casing/junk/phasic = 5, + /obj/item/ammo_casing/junk/ripper = 5, + /obj/item/ammo_casing/junk/reaper = 1, + ) + +/obj/item/ammo_casing/junk/incendiary + projectile_type = /obj/projectile/bullet/incendiary/fire/junk + +/obj/item/ammo_casing/junk/phasic + projectile_type = /obj/projectile/bullet/junk/phasic + +/obj/item/ammo_casing/junk/shock + projectile_type = /obj/projectile/bullet/junk/shock + +/obj/item/ammo_casing/junk/hunter + projectile_type = /obj/projectile/bullet/junk/hunter + +/obj/item/ammo_casing/junk/ripper + projectile_type = /obj/projectile/bullet/junk/ripper + +/obj/item/ammo_casing/junk/reaper + projectile_type = /obj/projectile/bullet/junk/reaper diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm index b9d8e49fbe9..26ecb8fc1d8 100644 --- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm +++ b/code/modules/projectiles/ammunition/ballistic/shotgun.dm @@ -104,15 +104,6 @@ variance = 25 custom_materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT*2) -/obj/item/ammo_casing/shotgun/improvised - name = "improvised shell" - desc = "A homemade shotgun casing filled with crushed glass, used to commmit vandalism and property damage." - icon_state = "improvshell" - projectile_type = /obj/projectile/bullet/pellet/shotgun_improvised - custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*2, /datum/material/glass=SMALL_MATERIAL_AMOUNT*1) - pellets = 6 - variance = 30 - /obj/item/ammo_casing/shotgun/ion name = "ion shell" desc = "An advanced shotgun shell which uses a subspace ansible crystal to produce an effect similar to a standard ion rifle. \ diff --git a/code/modules/projectiles/boxes_magazines/internal/rifle.dm b/code/modules/projectiles/boxes_magazines/internal/rifle.dm index 5fdc182ccff..52d395725a1 100644 --- a/code/modules/projectiles/boxes_magazines/internal/rifle.dm +++ b/code/modules/projectiles/boxes_magazines/internal/rifle.dm @@ -11,13 +11,23 @@ /obj/item/ammo_box/magazine/internal/boltaction/pipegun name = "pipegun internal magazine" - caliber = CALIBER_SHOTGUN - ammo_type = /obj/item/ammo_casing/shotgun/improvised + caliber = CALIBER_JUNK + ammo_type = /obj/item/ammo_casing/junk max_ammo = 1 +/obj/item/ammo_box/magazine/internal/boltaction/pipegun/pistol + name = "pipe pistol internal magazine" + max_ammo = 3 + /obj/item/ammo_box/magazine/internal/boltaction/pipegun/prime name = "regal pipegun internal magazine" - max_ammo = 3 + max_ammo = 4 + ammo_type = /obj/item/ammo_casing/junk/reaper + +/obj/item/ammo_box/magazine/internal/boltaction/pipegun/pistol/prime + name = "regal pipe pistol internal magazine" + max_ammo = 6 + ammo_type = /obj/item/ammo_casing/junk/reaper /obj/item/ammo_box/magazine/internal/enchanted max_ammo = 1 diff --git a/code/modules/projectiles/guns/ballistic/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm index ac988c2541b..aeeeaad3047 100644 --- a/code/modules/projectiles/guns/ballistic/rifle.dm +++ b/code/modules/projectiles/guns/ballistic/rifle.dm @@ -259,46 +259,78 @@ . = ..() AddComponent(/datum/component/scope, range_modifier = 2) //enough range to at least be useful for stealth +/// PIPE GUNS /// + /obj/item/gun/ballistic/rifle/boltaction/pipegun name = "pipegun" - desc = "An excellent weapon for flushing out tunnel rats and enemy assistants, but its rifling leaves much to be desired." - icon = 'icons/obj/weapons/guns/ballistic.dmi' - icon_state = "musket" - inhand_icon_state = "musket" - worn_icon_state = "musket" - lefthand_file = 'icons/mob/inhands/weapons/64x_guns_left.dmi' - righthand_file = 'icons/mob/inhands/weapons/64x_guns_right.dmi' - inhand_x_dimension = 64 - inhand_y_dimension = 64 + desc = "A symbol that the true masters of this place are not those who merely inhabit it, but the one willing to twist it towards a killing intent." + icon_state = "pipegun" + inhand_icon_state = "pipegun" + worn_icon_state = "pipegun" fire_sound = 'sound/weapons/gun/sniper/shot.ogg' accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/pipegun - initial_caliber = CALIBER_SHOTGUN - alternative_caliber = CALIBER_STRILKA310 - initial_fire_sound = 'sound/weapons/gun/sniper/shot.ogg' - alternative_fire_sound = 'sound/weapons/gun/shotgun/shot.ogg' - can_modify_ammo = TRUE + projectile_damage_multiplier = 1.35 + obj_flags = UNIQUE_RENAME can_bayonet = TRUE knife_x_offset = 25 knife_y_offset = 11 can_be_sawn_off = FALSE - projectile_damage_multiplier = 0.75 + trigger_guard = TRIGGER_GUARD_ALLOW_ALL - SET_BASE_PIXEL(0, 0) + SET_BASE_PIXEL(-8, 0) /obj/item/gun/ballistic/rifle/boltaction/pipegun/handle_chamber() . = ..() do_sparks(1, TRUE, src) +/obj/item/gun/ballistic/rifle/boltaction/pipegun/examine_more(mob/user) + . = ..() + . += span_notice("Looking down at the [name], you recall a tale told to you in some distant memory...") + + . += span_info("It's said that the first slaying committed on a Nanotrasen space station was by an assistant.") + . += span_info("That this act, done by toolbox, maybe spear, was what consigned their kind to a life of destitution, rejection and violence.") + . += span_info("They carry the weight of this act visibly; the grey jumpsuit. Breathing deeply filtered air. And with bloodsoaked yellow hands clenched into fists. Eyes, sharp and waiting. Hunters in the dark.") + . += span_info("Eventually, these killing spirits sought to stake a claim on the metal tombs they were trapped within. Rejecting their status. Determined to be something more.") + . += span_info("This weapon is one such tool. And it is a grim one indeed. Wrought from scrap, pulled from the station's walls and floors and the very nails holding it together.") + . += span_info("It is a symbol that the true masters of this place are not those who merely inhabit it. But the one willing to twist it towards a killing intent.") + +/obj/item/gun/ballistic/rifle/boltaction/pipegun/pistol + name = "pipe pistol" + desc = "It is foolish to think that anyone wearing the grey is incapable of hurting you, simply because they are not baring their teeth." + icon_state = "pipepistol" + inhand_icon_state = "pipepistol" + worn_icon_state = "gun" + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/pipegun/pistol + projectile_damage_multiplier = 0.50 + spread = 15 //kinda inaccurate + slot_flags = ITEM_SLOT_BELT + w_class = WEIGHT_CLASS_NORMAL + can_bayonet = FALSE + weapon_weight = WEAPON_MEDIUM + + SET_BASE_PIXEL(0, 0) + /obj/item/gun/ballistic/rifle/boltaction/pipegun/prime name = "regal pipegun" - desc = "Older, territorial assistants typically possess more valuable loot." - icon_state = "musket_prime" - inhand_icon_state = "musket_prime" - worn_icon_state = "musket_prime" + desc = "To call this 'regal' is a cruel irony. For the only noteworthy quality of nobility is in how it is wielded to kill. \ + All monarchs deserve to be crowned. But none will remember the dead tyrant for the red stain they left on the carpet." + icon_state = "regal_pipegun" + inhand_icon_state = "regal_pipegun" + worn_icon_state = "regal_pipegun" accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/pipegun/prime - projectile_damage_multiplier = 1 + projectile_damage_multiplier = 2 -/// MAGICAL BOLT ACTIONS + ARCANE BARRAGE? /// +/obj/item/gun/ballistic/rifle/boltaction/pipegun/pistol/prime + name = "regal pipe pistol" + desc = "What value is there in honesty towards the dishonest? So that they might twist the arm and slit the wrist? \ + The open palm is no sign of weakness; it is to draw the eyes away from the other hand, lying in wait." + icon_state = "regal_pipepistol" + inhand_icon_state = "regal_pipepistol" + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/pipegun/pistol/prime + projectile_damage_multiplier = 1 + spread = 0 + +/// MAGICAL BOLT ACTIONS /// /obj/item/gun/ballistic/rifle/enchanted name = "enchanted bolt action rifle" diff --git a/code/modules/projectiles/projectile/bullets/junk.dm b/code/modules/projectiles/projectile/bullets/junk.dm new file mode 100644 index 00000000000..344a7329113 --- /dev/null +++ b/code/modules/projectiles/projectile/bullets/junk.dm @@ -0,0 +1,71 @@ +// Junk (Pipe Pistols and Pipeguns) + +/obj/projectile/bullet/junk + name = "junk bullet" + icon_state = "trashball" + damage = 30 + embedding = list(embed_chance=15, fall_chance=3, jostle_chance=4, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.4, pain_mult=5, jostle_pain_mult=6, rip_time=10) + var/bane_mob_biotypes = MOB_ROBOTIC + var/bane_multiplier = 1.5 + var/bane_added_damage = 0 + +/obj/projectile/bullet/junk/Initialize(mapload) + . = ..() + AddElement(/datum/element/bane, mob_biotypes = bane_mob_biotypes, target_type = /mob/living, damage_multiplier = bane_multiplier, added_damage = bane_added_damage, requires_combat_mode = FALSE) + +/obj/projectile/bullet/incendiary/fire/junk + name = "burning oil" + damage = 30 + fire_stacks = 5 + suppressed = SUPPRESSED_NONE + +/obj/projectile/bullet/junk/phasic + name = "junk phasic bullet" + icon_state = "gaussphase" + projectile_phasing = PASSTABLE | PASSGLASS | PASSGRILLE | PASSCLOSEDTURF | PASSMACHINE | PASSSTRUCTURE | PASSDOORS + +/obj/projectile/bullet/junk/shock + name = "bundle of live electrical parts" + icon_state = "tesla_projectile" + damage = 15 + embedding = null + shrapnel_type = null + bane_multiplier = 3 + +/obj/projectile/bullet/junk/shock/on_hit(atom/target, blocked = 0, pierce_hit) + . = ..() + if(isliving(target)) + var/mob/living/victim = target + victim.electrocute_act(damage, src, siemens_coeff = 1, flags = SHOCK_NOSTUN) + +/obj/projectile/bullet/junk/hunter + name = "junk hunter bullet" + icon_state = "gauss" + bane_mob_biotypes = MOB_ROBOTIC | MOB_BEAST | MOB_SPECIAL + bane_multiplier = 0 + bane_added_damage = 50 + +/obj/projectile/bullet/junk/ripper + name = "junk ripper bullet" + icon_state = "redtrac" + damage = 10 + embedding = list(embed_chance=100, fall_chance=3, jostle_chance=4, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.4, pain_mult=5, jostle_pain_mult=6, rip_time=10) + wound_bonus = 10 + bare_wound_bonus = 30 + +/obj/projectile/bullet/junk/reaper + name = "junk reaper bullet" + tracer_type = /obj/effect/projectile/tracer/sniper + impact_type = /obj/effect/projectile/impact/sniper + muzzle_type = /obj/effect/projectile/muzzle/sniper + hitscan = TRUE + impact_effect_type = null + hitscan_light_intensity = 3 + hitscan_light_range = 0.75 + hitscan_light_color_override = LIGHT_COLOR_DIM_YELLOW + muzzle_flash_intensity = 5 + muzzle_flash_range = 1 + muzzle_flash_color_override = LIGHT_COLOR_DIM_YELLOW + impact_light_intensity = 5 + impact_light_range = 1 + impact_light_color_override = LIGHT_COLOR_DIM_YELLOW diff --git a/icons/effects/random_spawners.dmi b/icons/effects/random_spawners.dmi index 08df14c0ffc..ddd6fd6f608 100644 Binary files a/icons/effects/random_spawners.dmi and b/icons/effects/random_spawners.dmi differ diff --git a/icons/mob/clothing/back.dmi b/icons/mob/clothing/back.dmi index 30469c85dae..4fc02eaa2c0 100644 Binary files a/icons/mob/clothing/back.dmi and b/icons/mob/clothing/back.dmi differ diff --git a/icons/mob/clothing/belt_mirror.dmi b/icons/mob/clothing/belt_mirror.dmi index 37658b154db..0d44e0ce6ea 100644 Binary files a/icons/mob/clothing/belt_mirror.dmi and b/icons/mob/clothing/belt_mirror.dmi differ diff --git a/icons/mob/inhands/weapons/guns_lefthand.dmi b/icons/mob/inhands/weapons/guns_lefthand.dmi index 4c1acc9fa46..c1bcd197278 100644 Binary files a/icons/mob/inhands/weapons/guns_lefthand.dmi and b/icons/mob/inhands/weapons/guns_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/guns_righthand.dmi b/icons/mob/inhands/weapons/guns_righthand.dmi index f3a5f34e247..98788d73711 100644 Binary files a/icons/mob/inhands/weapons/guns_righthand.dmi and b/icons/mob/inhands/weapons/guns_righthand.dmi differ diff --git a/icons/obj/weapons/guns/projectiles.dmi b/icons/obj/weapons/guns/projectiles.dmi index b2579d58bf2..b4056f661b8 100644 Binary files a/icons/obj/weapons/guns/projectiles.dmi and b/icons/obj/weapons/guns/projectiles.dmi differ diff --git a/icons/obj/weapons/guns/wide_guns.dmi b/icons/obj/weapons/guns/wide_guns.dmi index c05453c3c25..568a3bc051f 100644 Binary files a/icons/obj/weapons/guns/wide_guns.dmi and b/icons/obj/weapons/guns/wide_guns.dmi differ diff --git a/tgstation.dme b/tgstation.dme index b756802336e..db571cec852 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -5458,6 +5458,7 @@ #include "code\modules\projectiles\ammunition\_firing.dm" #include "code\modules\projectiles\ammunition\ballistic\foam.dm" #include "code\modules\projectiles\ammunition\ballistic\harpoon.dm" +#include "code\modules\projectiles\ammunition\ballistic\junk.dm" #include "code\modules\projectiles\ammunition\ballistic\lmg.dm" #include "code\modules\projectiles\ammunition\ballistic\pistol.dm" #include "code\modules\projectiles\ammunition\ballistic\revolver.dm" @@ -5541,6 +5542,7 @@ #include "code\modules\projectiles\projectile\bullets\dnainjector.dm" #include "code\modules\projectiles\projectile\bullets\foam_dart.dm" #include "code\modules\projectiles\projectile\bullets\grenade.dm" +#include "code\modules\projectiles\projectile\bullets\junk.dm" #include "code\modules\projectiles\projectile\bullets\lmg.dm" #include "code\modules\projectiles\projectile\bullets\pistol.dm" #include "code\modules\projectiles\projectile\bullets\revolver.dm"