diff --git a/code/__DEFINES/~darkpack/guns.dm b/code/__DEFINES/~darkpack/guns.dm index abe8980425e9..1b54ae438e0f 100644 --- a/code/__DEFINES/~darkpack/guns.dm +++ b/code/__DEFINES/~darkpack/guns.dm @@ -10,3 +10,4 @@ #define CALIBER_CROSSBOWBOLT "bolt" #define CALIBER_762NATO "7.62x51mm NATO" #define CALIBER_75BALL ".75 ball" +#define CALIBER_GRENADE "grenade" diff --git a/modular_darkpack/modules/deprecated/icons/48x32.dmi b/modular_darkpack/modules/deprecated/icons/48x32.dmi index f0fc8cd335f8..fe876c5138c4 100644 Binary files a/modular_darkpack/modules/deprecated/icons/48x32.dmi and b/modular_darkpack/modules/deprecated/icons/48x32.dmi differ diff --git a/modular_darkpack/modules/deprecated/icons/lefthand.dmi b/modular_darkpack/modules/deprecated/icons/lefthand.dmi index 0742a8ca9703..c1b43271728f 100644 Binary files a/modular_darkpack/modules/deprecated/icons/lefthand.dmi and b/modular_darkpack/modules/deprecated/icons/lefthand.dmi differ diff --git a/modular_darkpack/modules/deprecated/icons/righthand.dmi b/modular_darkpack/modules/deprecated/icons/righthand.dmi index acebd3761e61..3855e56ad8be 100644 Binary files a/modular_darkpack/modules/deprecated/icons/righthand.dmi and b/modular_darkpack/modules/deprecated/icons/righthand.dmi differ diff --git a/modular_darkpack/modules/ert/code/outfits/national_guard_outfits.dm b/modular_darkpack/modules/ert/code/outfits/national_guard_outfits.dm index 1bf4576c27ee..065726ec982a 100644 --- a/modular_darkpack/modules/ert/code/outfits/national_guard_outfits.dm +++ b/modular_darkpack/modules/ert/code/outfits/national_guard_outfits.dm @@ -72,14 +72,15 @@ head = /obj/item/clothing/head/vampire/eod id = /obj/item/card/swat backpack_contents = list( - /obj/item/grenade/frag = 1, - /obj/item/grenade/flashbang = 1, - /obj/item/grenade/smokebomb = 1, - /obj/item/molotov = 1, + /obj/item/ammo_casing/vampire/c40mm = 1, + /obj/item/ammo_casing/vampire/c40mm/incendiary = 1, + /obj/item/ammo_casing/vampire/c40mm/smoke = 1, + /obj/item/ammo_casing/vampire/c40mm/flashbang = 1, /obj/item/gun/ballistic/automatic/darkpack/uzi = 1, + /obj/item/ammo_casing/vampire/c9mm = 1, /obj/item/liquid_flamethrower = 1, ) - r_hand = /obj/item/gun/ballistic/revolver/grenadelauncher + r_hand = /obj/item/gun/ballistic/shotgun/darkpack/grenadelauncher /datum/outfit/job/vampire/ert/national_guard/marksman name = "National Guard Marksman" diff --git a/modular_darkpack/modules/weapons/code/ammo_boxes.dm b/modular_darkpack/modules/weapons/code/ammo_boxes.dm index c3968c25f64a..7466cce845d3 100644 --- a/modular_darkpack/modules/weapons/code/ammo_boxes.dm +++ b/modular_darkpack/modules/weapons/code/ammo_boxes.dm @@ -184,3 +184,34 @@ name = "cartriage bag (.75 silver ball)" ammo_type = /obj/item/ammo_casing/vampire/c75/silver +//40mm grenade launcher rounds +/obj/item/ammo_box/darkpack/c40mm + name = "explosive ammo box (40mm)" + icon_state = "explosive_box" + ammo_type = /obj/item/ammo_casing/vampire/c40mm/explosive + max_ammo = 6 + +/obj/item/ammo_box/darkpack/c40mm/baton + name = "rubber baton ammo box (40mm)" + icon_state = "baton_box" + ammo_type = /obj/item/ammo_casing/vampire/c40mm/baton + +/obj/item/ammo_box/darkpack/c40mm/incendiary + name = "incendiary ammo box (40mm)" + icon_state = "incen_box" + ammo_type = /obj/item/ammo_casing/vampire/c40mm/incendiary + +/obj/item/ammo_box/darkpack/c40mm/flashbang + name = "flashbang ammo box (40mm)" + icon_state = "flash_box" + ammo_type = /obj/item/ammo_casing/vampire/c40mm/flashbang + +/obj/item/ammo_box/darkpack/c40mm/teargas + name = "teargas ammo box (40mm)" + icon_state = "teargas_box" + ammo_type = /obj/item/ammo_casing/vampire/c40mm/teargas + +/obj/item/ammo_box/darkpack/c40mm/smoke + name = "smoke ammo box (40mm)" + icon_state = "smoke_box" + ammo_type = /obj/item/ammo_casing/vampire/c40mm/smoke diff --git a/modular_darkpack/modules/weapons/code/ammo_casings.dm b/modular_darkpack/modules/weapons/code/ammo_casings.dm index acb1d72c7f50..03917f34ec50 100644 --- a/modular_darkpack/modules/weapons/code/ammo_casings.dm +++ b/modular_darkpack/modules/weapons/code/ammo_casings.dm @@ -203,3 +203,53 @@ projectile_type = /obj/projectile/bullet/darkpack/vamp75/silver icon_state = "scartridge" base_icon_state = "scartridge" + +/obj/item/ammo_casing/vampire/c40mm + name = "40mm casing" + desc = "A 40mm casing." + caliber = CALIBER_GRENADE + projectile_type = /obj/projectile/bullet/darkpack/c40mm + icon_state = "explosive_slug" + base_icon_state = "explosive_slug" + +/obj/item/ammo_casing/vampire/c40mm/incendiary + name = "40mm incendiary casing" + desc = "A 40mm incendiary casing." + projectile_type = /obj/projectile/bullet/darkpack/c40mm/incendiary + icon_state = "incendiary_slug" + base_icon_state = "incendiary_slug" + +/obj/item/ammo_casing/vampire/c40mm/explosive + name = "40mm explosive casing" + desc = "A 40mm explosive casing." + projectile_type = /obj/projectile/bullet/darkpack/c40mm/explosive + icon_state = "explosive_slug" + base_icon_state = "explosive_slug" + +/obj/item/ammo_casing/vampire/c40mm/teargas + name = "40mm teargas casing" + desc = "A 40mm teargas casing." + projectile_type = /obj/projectile/bullet/darkpack/c40mm/teargas + icon_state = "teargas_slug" + base_icon_state = "teargas_slug" + +/obj/item/ammo_casing/vampire/c40mm/smoke + name = "40mm smoke casing" + desc = "A 40mm smoke casing." + projectile_type = /obj/projectile/bullet/darkpack/c40mm/smoke + icon_state = "smoke_slug" + base_icon_state = "smoke_slug" + +/obj/item/ammo_casing/vampire/c40mm/flashbang + name = "40mm flashbang casing" + desc = "A 40mm flashbang casing." + projectile_type = /obj/projectile/bullet/darkpack/c40mm/flashbang + icon_state = "flashbang_slug" + base_icon_state = "flashbang_slug" + +/obj/item/ammo_casing/vampire/c40mm/baton + name = "40mm baton casing" + desc = "A 40mm baton casing." + projectile_type = /obj/projectile/bullet/darkpack/c40mm/baton + icon_state = "baton_slug" + base_icon_state = "baton_slug" diff --git a/modular_darkpack/modules/weapons/code/guns.dm b/modular_darkpack/modules/weapons/code/guns.dm index e3082d9c0b36..7cfaf2ed1a5b 100644 --- a/modular_darkpack/modules/weapons/code/guns.dm +++ b/modular_darkpack/modules/weapons/code/guns.dm @@ -912,3 +912,41 @@ spread = 25 //+25 from sawing off anyway, good fucking luck w_class = WEIGHT_CLASS_NORMAL slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_BELT + +/obj/item/ammo_box/magazine/internal/vampire/grenadelauncher + name = "grenade launcher internal magazine" + ammo_type = /obj/item/ammo_casing/vampire/c40mm + caliber = CALIBER_GRENADE + max_ammo = 1 + start_empty = TRUE + +// It's dumb but we path it as a shotgun so it can hold its internal rounds like a proper break-action. +/obj/item/gun/ballistic/shotgun/darkpack/grenadelauncher + name = "break-action grenade launcher" + desc = "A break action grenade launcher, designed to fire 40mm grenades. Not suggested to aim for heads or knees." + icon = 'modular_darkpack/modules/deprecated/icons/48x32.dmi' + lefthand_file = 'modular_darkpack/modules/deprecated/icons/lefthand.dmi' + righthand_file = 'modular_darkpack/modules/deprecated/icons/righthand.dmi' + ONFLOOR_ICON_HELPER('modular_darkpack/modules/weapons/icons/weapons_onfloor.dmi') + inhand_x_dimension = 32 + inhand_y_dimension = 32 + base_icon_state = "gl" + icon_state = "gl" + inhand_icon_state = "gl" + worn_icon_state = "gl" + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/vampire/grenadelauncher + fire_sound = 'sound/items/weapons/gun/general/grenade_launch.ogg' + vary_fire_sound = FALSE + fire_delay = 10 + recoil = 5 + spread = 2 + w_class = WEIGHT_CLASS_HUGE + slot_flags = ITEM_SLOT_BACK + bolt_type = BOLT_TYPE_NO_BOLT + can_muzzle_flash = FALSE //Not a regular projectile weapon, no flash + serial_shown = FALSE //No serial, doesn't need it. + +// For the break-action sprite update +/obj/item/gun/ballistic/shotgun/darkpack/grenadelauncher/update_icon_state() + . = ..() + icon_state = "[base_icon_state][!chambered ? "_empty" : ""]" diff --git a/modular_darkpack/modules/weapons/code/projectiles.dm b/modular_darkpack/modules/weapons/code/projectiles.dm index 00a251bee286..c34dfb6b8681 100644 --- a/modular_darkpack/modules/weapons/code/projectiles.dm +++ b/modular_darkpack/modules/weapons/code/projectiles.dm @@ -191,7 +191,7 @@ damage = 45 armour_penetration = 75 exposed_wound_bonus = 30 - wound_bonus = 30 //We're gonna make this hurt as much as possible. + wound_bonus = 30 //We're gonna make this hurt as much as possible. sharpness = SHARP_POINTY embed_type = /datum/embedding/crossbolt //YEEEEOUCH!!!! @@ -247,3 +247,94 @@ /obj/projectile/bullet/darkpack/vamp75/silver/on_hit(atom/target, blocked = FALSE, pierce_hit) . = ..() fera_silver_damage(target, 5) //Same as silver longsword; it's a solid silver ball. As the founding fathers intended. + +/obj/projectile/bullet/darkpack/c40mm + name = "40mm grenade" + damage = 5 + stamina = 50 + armour_penetration = 0 + exposed_wound_bonus = 5 + wound_bonus = 5 + range = 10 //Avoids issue where a grenade travels across the map + can_hit_turfs = TRUE + + //Variable for devistation range, this can gib corpses and destroy floor plating/walls. Very strong, avoid increasing unless needed. + var/explosive_devastation_range = 0 + //Heavy explosion range, this should be used for epicenter. More severly injures mobs than a light explosion. + var/explosive_heavy_range = 0 + //Standard explosion range, this damages and throws mobs around. Can damage stuff but won't do what devistation does. + var/explosive_light_range = 0 + //Flash range, self explanitory. It's for flashbang rounds. + var/explosive_flash_range = 0 + //Fire range, self explanitory. It's for the fireball the incindary round makes. + var/explosive_fire_range = 0 + //For if the explosive creates a smoke plume or not. + var/smoke_effect = FALSE + //For if the explosive is silent or not. (Ex - smoke grenade, flashbang, etc. They are 'explosive' but not like a bomb.) + var/explosive_sound = FALSE + +/obj/projectile/bullet/darkpack/c40mm/on_hit(atom/target, blocked = 0, pierce_hit) + ..() + if(explosive_light_range || explosive_fire_range || explosive_flash_range) + explosion(target, devastation_range = explosive_devastation_range, heavy_impact_range = explosive_heavy_range, light_impact_range = explosive_light_range, flame_range = explosive_fire_range, flash_range = explosive_flash_range, silent = explosive_sound, smoke = smoke_effect, adminlog = TRUE, explosion_cause = src) + return BULLET_ACT_HIT + +/obj/projectile/bullet/darkpack/c40mm/explosive + name = "40mm explosive" + //explosive_heavy_range = 2 - Don't use this for now, it causes flooring to get destroyed. + explosive_light_range = 4 + explosive_flash_range = 2 + explosive_fire_range = 2 + smoke_effect = TRUE + explosive_sound = TRUE + +/obj/projectile/bullet/darkpack/c40mm/incendiary + name = "40mm incendiary" + explosive_light_range = 2 + explosive_flash_range = 3 + explosive_fire_range = 4 + smoke_effect = TRUE + explosive_sound = TRUE + +/obj/projectile/bullet/darkpack/c40mm/incendiary/on_hit(atom/target, blocked = 0, pierce_hit) + . = ..() + if(iscarbon(target)) + var/mob/living/carbon/victim = target + victim.adjust_fire_stacks(7) + victim.ignite_mob() + +/obj/projectile/bullet/darkpack/c40mm/teargas + name = "40mm teargas" + +/obj/projectile/bullet/darkpack/c40mm/teargas/Initialize(mapload) + . = ..() + AddElement(/datum/element/projectile_drop, /obj/item/grenade/chem_grenade/teargas/instant) + +/obj/projectile/bullet/darkpack/c40mm/smoke + name = "40mm smoke" + +/obj/projectile/bullet/darkpack/c40mm/smoke/Initialize(mapload) + . = ..() + AddElement(/datum/element/projectile_drop, /obj/item/grenade/smokebomb/instant) + +/obj/item/grenade/smokebomb/instant/Initialize(mapload) + . = ..() + if(detonate()) + return INITIALIZE_HINT_QDEL + +/obj/projectile/bullet/darkpack/c40mm/flashbang + name = "40mm flashbang" + explosive_flash_range = 2 + explosive_light_range = 1 + smoke_effect = TRUE + +// Only projectile of the family with no explosive element or effect +/obj/projectile/bullet/darkpack/c40mm/baton + name = "40mm baton" + damage = 15 //LTL, not non-lethal + stamina = 120 //YOUCH!!! + armour_penetration = 0 + exposed_wound_bonus = 5 + wound_bonus = 5 + range = 18 //longer range since no impact + can_hit_turfs = FALSE //So it can travel past the screens edge; doesn't do anything to floors anyway. diff --git a/modular_darkpack/modules/weapons/icons/ammo.dmi b/modular_darkpack/modules/weapons/icons/ammo.dmi index f54c21132d31..43d6b0aa52fd 100644 Binary files a/modular_darkpack/modules/weapons/icons/ammo.dmi and b/modular_darkpack/modules/weapons/icons/ammo.dmi differ diff --git a/modular_darkpack/modules/weapons/icons/ammo_onfloor.dmi b/modular_darkpack/modules/weapons/icons/ammo_onfloor.dmi index f6c5ed5b3374..0c2231874b09 100644 Binary files a/modular_darkpack/modules/weapons/icons/ammo_onfloor.dmi and b/modular_darkpack/modules/weapons/icons/ammo_onfloor.dmi differ diff --git a/modular_darkpack/modules/weapons/icons/weapons_onfloor.dmi b/modular_darkpack/modules/weapons/icons/weapons_onfloor.dmi index 9c510c38e770..48889ce45b75 100644 Binary files a/modular_darkpack/modules/weapons/icons/weapons_onfloor.dmi and b/modular_darkpack/modules/weapons/icons/weapons_onfloor.dmi differ diff --git a/modular_darkpack/modules/weapons/icons/worn_guns.dmi b/modular_darkpack/modules/weapons/icons/worn_guns.dmi index 774ddf0b3f2c..836d0ad1a4be 100644 Binary files a/modular_darkpack/modules/weapons/icons/worn_guns.dmi and b/modular_darkpack/modules/weapons/icons/worn_guns.dmi differ