Adds the pump-action grenade launcher and updates the existing break-action ballistic grenade launcher with a new sprite (#95244)

This commit is contained in:
necromanceranne
2026-03-10 20:54:05 +02:00
committed by GitHub
parent f1508782d3
commit 1ce02afed8
19 changed files with 231 additions and 26 deletions
@@ -212,7 +212,10 @@
"fm" = (
/obj/effect/turf_decal/bot_white,
/obj/structure/closet/crate/secure/weapon,
/obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted,
/obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted/tear,
/obj/item/ammo_box/a40mm/tear_gas,
/obj/item/ammo_box/a40mm/tear_gas,
/obj/item/disk/design_disk/tear_gas_40mm,
/turf/open/floor/iron/dark/airless,
/area/shuttle/ruin/caravan/freighter3)
"fy" = (
+1
View File
@@ -266,6 +266,7 @@
/obj/item/ammo_casing/shotgun,
/obj/item/ammo_casing/c357,
/obj/item/ammo_casing/junk,
/obj/item/ammo_casing/a40mm,
))
///Fanny pack
@@ -547,6 +547,10 @@
beakers += beaker_one
beakers += beaker_two
/obj/item/grenade/chem_grenade/teargas/instant/Initialize(mapload)
. = ..()
if(detonate())
return INITIALIZE_HINT_QDEL
/obj/item/grenade/chem_grenade/facid
name = "acid grenade"
+5
View File
@@ -504,6 +504,11 @@
worn_icon_state = "bandolier"
storage_type = /datum/storage/bandolier_belt
/obj/item/storage/belt/bandolier/china_lake_extra/PopulateContents()
generate_items_inside(list(
/obj/item/ammo_casing/a40mm = 12,
), src)
/obj/item/storage/belt/fannypack
name = "fannypack"
desc = "A dorky fannypack for keeping small items in. Concealed enough, or ugly enough to avert their eyes, that others won't see what you put in or take out easily."
@@ -232,6 +232,17 @@
new /obj/item/reagent_containers/hypospray/medipen/methamphetamine (src)
new /obj/item/clothing/under/rank/prisoner/nosensor (src)
/obj/item/storage/toolbox/guncase/china_lake
name = "pump-action grenade launcher weapon case"
weapon_to_spawn = /obj/item/gun/ballistic/shotgun/china_lake
extra_to_spawn = /obj/item/storage/belt/bandolier/china_lake_extra
/obj/item/storage/toolbox/guncase/china_lake/PopulateContents()
new weapon_to_spawn (src)
new extra_to_spawn (src)
new /obj/item/clothing/under/rank/prisoner/nosensor (src)
new /obj/item/storage/fancy/cigarettes/cigpack_syndicate (src)
/obj/item/storage/toolbox/guncase/soviet
name = "ancient gun case"
desc = "A weapon's case. Has the symbol of the Third Soviet Union stamped on the side."
@@ -24,6 +24,7 @@
name = ".310 Strilka phasic bullet casing"
desc = "A phasic .310 Strilka bullet casing."
projectile_type = /obj/projectile/bullet/strilka310/phasic
// .223 (M-90gl Carbine)
/obj/item/ammo_casing/a223
@@ -45,7 +46,7 @@
/obj/item/ammo_casing/a40mm
name = "40mm HE shell"
desc = "A cased high explosive grenade that can only be activated once fired out of a grenade launcher."
desc = "A cased high explosive grenade that can only be activated once fired out of a ballistic grenade launcher."
caliber = CALIBER_40MM
icon_state = "40mmHE"
projectile_type = /obj/projectile/bullet/a40mm
@@ -53,9 +54,37 @@
/obj/item/ammo_casing/a40mm/rubber
name = "40mm rubber shell"
desc = "A cased rubber slug. The big brother of the beanbag slug, this thing will knock someone out in one. Doesn't do so great against anyone in armor."
desc = "A cased rubber puck. The big brother of the beanbag slug. Made for stopping someone dead in their tracks."
projectile_type = /obj/projectile/bullet/shotgun_beanbag/a40mm
/obj/item/ammo_casing/a40mm/flak
name = "40mm titanium flak shell"
desc = "An oversized shotgun case. The big brother of buckshot, this shell launches dense titanium shells for immense damage to armor and flesh alike."
pellets = 8
variance = 10
projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot/milspec/flak
/obj/item/ammo_casing/a40mm/incendiary
name = "40mm incendiary shell"
desc = "A cased incendiary explosive grenade that can only be activated once fired out of a ballistic grenade launcher. Creates a mighty conflagration. A favourite of inquisitors."
projectile_type = /obj/projectile/bullet/a40mm/incendiary
/obj/item/ammo_casing/a40mm/tear_gas
name = "40mm tear gas shell"
desc = "A cased tear gas grenade that can only be activated once fired out of a ballistic grenade launcher. Spreads a large amount of tear gas into the air upon impact. \
Great for suppressing riots, protests and birthday parties!"
projectile_type = /obj/projectile/bullet/a40mm/tear_gas
/obj/item/disk/design_disk/tear_gas_40mm
name = "40mm riot suppression grenade shells design disk"
/obj/item/disk/design_disk/liberator/Initialize(mapload)
. = ..()
blueprints += new /datum/design/tear_gas_40mm
blueprints += new /datum/design/rubber_40mm
// Rebar Bolts
/obj/item/ammo_casing/rebar
name = "Sharpened Iron Rod"
desc = "A Sharpened Iron rod. It's Pointy!"
@@ -24,9 +24,21 @@
multiple_sprites = AMMO_BOX_PER_BULLET
/obj/item/ammo_box/a40mm/rubber
name = "ammo box (40mm rubber slug)"
name = "ammo box (40mm rubber puck)"
ammo_type = /obj/item/ammo_casing/a40mm/rubber
/obj/item/ammo_box/a40mm/flak
name = "ammo box (40mm titanium flak)"
ammo_type = /obj/item/ammo_casing/a40mm/flak
/obj/item/ammo_box/a40mm/incendiary
name = "ammo box (40mm incendiary grenade)"
ammo_type = /obj/item/ammo_casing/a40mm/incendiary
/obj/item/ammo_box/a40mm/tear_gas
name = "ammo box (40mm tear gas grenade)"
ammo_type = /obj/item/ammo_casing/a40mm/tear_gas
/obj/item/ammo_box/rocket
name = "rocket bouquet (84mm HE)"
icon_state = "rocketbundle"
@@ -10,6 +10,9 @@
caliber = CALIBER_40MM
max_ammo = 1
/obj/item/ammo_box/magazine/internal/grenadelauncher/tear
ammo_type = /obj/item/ammo_casing/a40mm/tear_gas
/obj/item/ammo_box/magazine/internal/rocketlauncher
name = "rocket launcher internal magazine"
ammo_type = /obj/item/ammo_casing/rocket
@@ -49,6 +49,12 @@
ammo_type = /obj/item/ammo_casing/shotgun/rubbershot
max_ammo = 6
/obj/item/ammo_box/magazine/internal/shot/lake
name = "pump-action grenade launcher internal magazine"
ammo_type = /obj/item/ammo_casing/a40mm
caliber = CALIBER_40MM
max_ammo = 3
/obj/item/ammo_box/magazine/internal/shot/bounty
name = "triple-barrel shotgun internal magazine"
ammo_type = /obj/item/ammo_casing/shotgun/incapacitate
@@ -2,13 +2,15 @@
//Put handheld rocket launchers here if someone ever decides to make something so hilarious ~Paprika
/obj/item/gun/ballistic/revolver/grenadelauncher
name = "grenade launcher"
desc = "A break-operated grenade launcher."
icon_state = "dshotgun_sawn"
inhand_icon_state = "gun"
name = "break-action grenade launcher"
desc = "A break-action grenade launcher. Archaic by modern standards, but it still works, so who can complain?"
icon_state = "grenade_launcher"
inhand_icon_state = "grenade_launcher"
worn_icon_state = "shotgun"
accepted_magazine_type = /obj/item/ammo_box/magazine/internal/grenadelauncher
fire_sound = 'sound/items/weapons/gun/general/grenade_launch.ogg'
w_class = WEIGHT_CLASS_NORMAL
w_class = WEIGHT_CLASS_BULKY
slot_flags = ITEM_SLOT_BACK
pin = /obj/item/firing_pin/implant/pindicate
bolt_type = BOLT_TYPE_NO_BOLT
can_muzzle_flash = FALSE
@@ -16,6 +18,9 @@
/obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted
pin = /obj/item/firing_pin
/obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted/tear
spawn_magazine_type = /obj/item/ammo_box/magazine/internal/grenadelauncher/tear
/obj/item/gun/ballistic/revolver/grenadelauncher/attackby(obj/item/A, mob/user, list/modifiers, list/attack_modifiers)
..()
if(istype(A, /obj/item/ammo_box) || isammocasing(A))
@@ -60,6 +60,23 @@
overlay_x = 20, \
overlay_y = 11)
// Pump-Action Grenade Launcher //
/obj/item/gun/ballistic/shotgun/china_lake
name = "pump-action grenade launcher"
desc = "A pump-action grenade launcher. Typically found in the hands of space pirate raiders. The weight leaves a lot to be desired, but the high ammo capacity makes \
up for the bulk."
lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi'
icon_state = "china_lake"
inhand_icon_state = "china_lake"
worn_icon_state = "riotshotgun"
fire_sound = 'sound/items/weapons/gun/general/grenade_launch.ogg'
accepted_magazine_type = /obj/item/ammo_box/magazine/internal/shot/lake
inhand_x_dimension = 32
inhand_y_dimension = 32
pb_knockback = 4 // Not advised.
// Automatic Shotguns//
/obj/item/gun/ballistic/shotgun/automatic/shoot_live_shot(mob/living/user)
@@ -1,5 +1,5 @@
/obj/item/gun/grenadelauncher
name = "grenade launcher"
name = "pneumatic grenade launcher"
desc = "A terrible, terrible thing. It's really awful!"
icon = 'icons/obj/weapons/guns/ballistic.dmi'
icon_state = "riotgun"
@@ -7,8 +7,52 @@
damage = 60
embed_type = null
shrapnel_type = null
/// The devastation range on our grenade. Positive values determine the range in which the explosive will gib mobs and destroy plating.
var/ex_dev_range = -1
/// The light explosion radius of our grenade. Determines the standard explosion range of the grenade.
var/ex_light_range = 2
/// The flame range, determining the range of the fireball created by the explosion of the grenade.
var/ex_flame_range = 3
/obj/projectile/bullet/a40mm/on_hit(atom/target, blocked = 0, pierce_hit)
..()
explosion(target, devastation_range = -1, light_impact_range = 2, flame_range = 3, flash_range = 1, adminlog = FALSE, explosion_cause = src)
if(ex_light_range || ex_flame_range)
explosion(target, devastation_range = ex_dev_range, light_impact_range = ex_light_range, flame_range = ex_flame_range, flash_range = 1, adminlog = FALSE, explosion_cause = src)
grenade_extra_effect(target)
return BULLET_ACT_HIT
/obj/projectile/bullet/a40mm/proc/grenade_extra_effect(atom/target)
if(!prob(1))
return
if(isliving(target))
var/mob/living/living_target = target
playsound(living_target, 'sound/effects/coin2.ogg', 40, TRUE)
new /obj/effect/temp_visual/crit(get_turf(living_target))
/obj/projectile/bullet/a40mm/incendiary
name = "40mm incendiary grenade"
desc = "Hell is approaching."
damage = 10 // About the only mercy you're getting.
ex_light_range = 1
ex_flame_range = 4
/obj/projectile/bullet/a40mm/incendiary/grenade_extra_effect(atom/target, blocked = 0, pierce_hit)
if(iscarbon(target))
var/mob/living/carbon/i_want_them_to_burn = target
i_want_them_to_burn.adjust_fire_stacks(damage*2)
i_want_them_to_burn.ignite_mob()
for(var/turf/nearby_turf as anything in RANGE_TURFS(ex_flame_range, target))
new /obj/effect/hotspot(nearby_turf)
/obj/projectile/bullet/a40mm/tear_gas
name = "40mm tear gas grenade"
desc = "MY EYES!!"
damage = 10
ex_light_range = 0
ex_flame_range = 0
/obj/projectile/bullet/a40mm/tear_gas/Initialize(mapload)
. = ..()
AddElement(/datum/element/projectile_drop, /obj/item/grenade/chem_grenade/teargas/instant)
@@ -32,12 +32,19 @@
embed_type = null
/obj/projectile/bullet/shotgun_beanbag/a40mm
name = "rubber slug"
name = "rubber puck"
icon_state = "cannonball"
damage = 20
stamina = 160 //BONK
damage = 10
stamina = 80 //BONK
knockdown = 10
wound_bonus = 30
weak_against_armour = TRUE
ricochets_max = 4
ricochet_chance = 100
ricochet_decay_chance = 1
ricochet_decay_damage = 0.8
ricochet_auto_aim_range = 2
ricochet_auto_aim_angle = 30
ricochet_incidence_leeway = 75
/obj/projectile/bullet/incendiary/shotgun
name = "incendiary slug"
@@ -101,6 +108,13 @@
name = "milspec buckshot pellet"
damage = 7.5
/obj/projectile/bullet/pellet/shotgun_buckshot/milspec/flak
name = "titanium ball bearing"
damage = 10
damage_falloff_tile = -0.5 //much harsher falloff
wound_bonus = 0
armour_penetration = 20
/obj/projectile/bullet/pellet/shotgun_rubbershot
name = "rubber shot pellet"
damage = 3
@@ -562,6 +562,28 @@
)
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
/datum/design/tear_gas_40mm
name = "40mm Tear Gas Grenade Shell (Less Lethal)"
desc = "Looking to stop a riot or put down those damn space hippies in their beat up space caravan? We've got the grenade for you!"
id = "tear_gas_shell"
build_type = AUTOLATHE
materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3, /datum/material/plasma = SMALL_MATERIAL_AMOUNT * 2)
build_path = /obj/item/ammo_casing/a40mm/tear_gas
category = list(
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO
)
/datum/design/rubber_40mm
name = "40mm Rubber Shell (Less Lethal)"
desc = "Launch a rubber puck straight into an assistant's head at high velocities today!"
id = "rubber_puck_shell"
build_type = AUTOLATHE
materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3, /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 2)
build_path = /obj/item/ammo_casing/a40mm/rubber
category = list(
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO
)
/datum/design/suppressor
name = "Suppressor"
desc = "A reverse-engineered suppressor that fits on most small arms with threaded barrels."
+40 -11
View File
@@ -349,12 +349,14 @@
name = "M-90gl Carbine Case (Hard)"
desc = "A fully-loaded, specialized three-round burst carbine that fires .223 ammunition from a 30 round magazine.\
Comes with a 40mm underbarrel grenade launcher. Use secondary-fire to fire the grenade launcher. Also comes with two spare magazines \
and a box of 40mm rubber slugs."
and a box of 40mm rubber pucks."
item = /obj/item/storage/toolbox/guncase/m90gl
relevant_child_items = list(
/datum/uplink_item/ammo_nuclear/basic/carbine,
/datum/uplink_item/ammo_nuclear/special/carbine,
/datum/uplink_item/ammo_nuclear/basic/carbine/a40mm,
/datum/uplink_item/ammo_nuclear/basic/a40mm,
/datum/uplink_item/ammo_nuclear/basic/a40mm/rubber,
/datum/uplink_item/ammo_nuclear/ap/a40mm,
)
/datum/uplink_item/ammo_nuclear/basic/carbine
@@ -370,13 +372,6 @@
The name is a misnomer. It doesn't contain any lead whatsoever!"
item = /obj/item/ammo_box/magazine/m223/phasic
/datum/uplink_item/ammo_nuclear/basic/carbine/a40mm
name = "40mm Grenade Box (M-90gl)"
desc = "A box of 40mm HE grenades for use with the M-90gl's under-barrel grenade launcher. \
Your teammates will ask you to not shoot these down small hallways. \
You'll do it anyway."
item = /obj/item/ammo_box/a40mm
// ~~ Anti-Materiel Sniper Rifle ~~
/datum/uplink_item/weapon_kits/high_cost/sniper
@@ -525,11 +520,45 @@
// ~~ Grenadier's Belt Kit ~~
/datum/uplink_item/weapon_kits/high_cost/grenadier
name = "Grenadier's Belt and Grenade Launcher Kit (Hard)"
desc = "A belt containing 26 lethally dangerous and destructive grenades, along with a grenade launcher to fire them. Comes with an extra multitool and screwdriver."
name = "Grenadier's Belt and Pneumatic Grenade Launcher Kit (Hard)"
desc = "A belt containing 26 lethally dangerous and destructive grenades, along with a pneumatic grenade launcher to fire them. Comes with an extra multitool and screwdriver."
item = /obj/item/storage/box/syndie_kit/demoman
purchasable_from = UPLINK_SERIOUS_OPS
// ~~ Pump-Action Grenade Launcher Kit ~~
/datum/uplink_item/weapon_kits/moderate_cost/china_lake
name = "Pump-Action Grenade Launcher Kit (Moderate)"
desc = "A weapon case containing a 40mm pump-action grenade launcher and a bandolier of 40mm grenades. Less versatile than the pneumatic grenade launcher kit, but no less dangerous. \
Though try to be careful about danger close. If you even care. A favourite of the Tiger Cooperative."
item = /obj/item/storage/toolbox/guncase/china_lake
purchasable_from = UPLINK_SERIOUS_OPS
/datum/uplink_item/ammo_nuclear/basic/a40mm
name = "40mm HE Shell Box (Grenade Launchers)"
desc = "A box of 40mm HE grenades for use with ballistic grenade launchers. \
Your teammates will ask you to not shoot these down small hallways. \
You'll do it anyway."
item = /obj/item/ammo_box/a40mm
/datum/uplink_item/ammo_nuclear/basic/a40mm/rubber
name = "40mm Rubber Shell Box (Grenade Launchers)"
desc = "A box of 40mm rubber grenades for use with ballistic grenade launchers. Launching a giant rubber puck at someone at high velocity is maybe the most \
humane thing you are about to do today. For when you're trying to earn some karma points or something."
item = /obj/item/ammo_box/a40mm/rubber
/datum/uplink_item/ammo_nuclear/ap/a40mm
name = "40mm Titanium Flak Shell Box (Grenade Launchers)"
desc = "A box of 40mm titanium flak shells for use with ballistic grenade launchers. Launches an obscene number of titanium ball bearings into your enemies. \
For when you want to get up close and personal."
item = /obj/item/ammo_box/a40mm
/datum/uplink_item/ammo_nuclear/incendiary/a40mm
name = "40mm Incendiary Shell Box (Grenade Launchers)"
desc = "A box of 40mm incendiary grenade shells for use with ballistic grenade launchers. Launches a incendiary payload at targets, bursting on contact and \
engulfing everything around it in roaring fire. For when you really don't want to leave anything and anyone unscathed. Including possibly your allies."
item = /obj/item/ammo_box/a40mm
// ~~ Detonator: In case you lose the old one ~~
/datum/uplink_item/explosives/military_grade/syndicate_detonator
Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 36 KiB