diff --git a/code/__DEFINES/ammo.dm b/code/__DEFINES/ammo.dm index 7d06d0b1dc51..1be5e98e01f6 100644 --- a/code/__DEFINES/ammo.dm +++ b/code/__DEFINES/ammo.dm @@ -27,6 +27,7 @@ #define CALIBER_FOAM "foam_force" // Foam darts (Toy Guns) #define CALIBER_GATLING "gatling" // Gatling (Osprey Minigun) (Don't ask) #define CALIBER_SPEAR "speargun" // Spear (Speargun) +#define CALIBER_MUSKET "musket" // Musket Cartridge (Maintenance Musket) /// Magic and other esoteric non-gun stuff #define CALIBER_ARROW "arrow" // Bows diff --git a/code/datums/components/crafting/weapons.dm b/code/datums/components/crafting/weapons.dm index 5bcb1d8450f1..da37987a7a7c 100644 --- a/code/datums/components/crafting/weapons.dm +++ b/code/datums/components/crafting/weapons.dm @@ -188,6 +188,17 @@ time = 12 category = CAT_WEAPON_RANGED +/datum/crafting_recipe/maint_musket + name = "Maintenance Musket" + reqs = list(/obj/item/pipe = 1, + /obj/item/stack/sheet/metal = 1, + /obj/item/weaponcrafting/stock = 1, + /obj/item/stack/packageWrap = 5) + tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WELDER, TOOL_WRENCH) + result = /obj/item/gun/ballistic/maint_musket + time = 10 SECONDS + category = CAT_WEAPON_RANGED + /datum/crafting_recipe/sledgehammer name = "Sledgehammer" result = /obj/item/melee/sledgehammer @@ -453,6 +464,24 @@ time = 0.5 SECONDS category = CAT_WEAPON_AMMO +/datum/crafting_recipe/cartridge_welder + name = "Cartridge Welding Fuel" //Reversed so that they're together in the menu + result = /obj/item/ammo_casing/caseless/cartridge + reqs = list(/obj/item/stack/sheet/cloth = 1, + /datum/reagent/fuel = 10) + tool_behaviors = list(TOOL_SCREWDRIVER) + time = 2 SECONDS + category = CAT_WEAPON_AMMO + +/datum/crafting_recipe/cartridge_BP + name = "Cartridge Black Powder" + result = /obj/item/ammo_casing/caseless/cartridge/black_powder + reqs = list(/obj/item/stack/sheet/cloth = 1, + /datum/reagent/blackpowder = 10) + tool_behaviors = list(TOOL_SCREWDRIVER) + time = 2 SECONDS + category = CAT_WEAPON_AMMO + /datum/crafting_recipe/wood_arrow name = "Wood Arrow" result = /obj/item/ammo_casing/reusable/arrow/wood diff --git a/code/modules/projectiles/ammunition/caseless/rocket.dm b/code/modules/projectiles/ammunition/caseless/rocket.dm index 558471acd3a7..61240083bae3 100644 --- a/code/modules/projectiles/ammunition/caseless/rocket.dm +++ b/code/modules/projectiles/ammunition/caseless/rocket.dm @@ -37,3 +37,17 @@ projectile_type = /obj/projectile/bullet/bolt firing_effect_type = /obj/effect/particle_effect/sparks/electricity w_class = WEIGHT_CLASS_TINY + +/obj/item/ammo_casing/caseless/cartridge + name = "welding fuel cartridge" + desc = "A musket cartridge crafted by hand. This one uses welding fuel as its propellant." + caliber = CALIBER_MUSKET + icon_state = "cartridge" + projectile_type = /obj/projectile/bullet/cartridge + firing_effect_type = /obj/effect/particle_effect/fluid/smoke + +/obj/item/ammo_casing/caseless/cartridge/black_powder + name = "black powder cartridge" + desc = "A musket cartridge crafted by hand. This one uses black powder as its propellant." + icon_state = "cartridge_BP" + projectile_type = /obj/projectile/bullet/cartridge/black_powder diff --git a/code/modules/projectiles/boxes_magazines/internal/grenade.dm b/code/modules/projectiles/boxes_magazines/internal/grenade.dm index 746522d0cfc0..b6ce7c03b6b4 100644 --- a/code/modules/projectiles/boxes_magazines/internal/grenade.dm +++ b/code/modules/projectiles/boxes_magazines/internal/grenade.dm @@ -28,3 +28,8 @@ caliber = null max_ammo = 1 +/obj/item/ammo_box/magazine/internal/cartridge + name = "cartridges" + ammo_type = /obj/item/ammo_casing/caseless/cartridge + caliber = CALIBER_MUSKET + max_ammo = 1 diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm index 958d9127af41..d84e0550c889 100644 --- a/code/modules/projectiles/guns/ballistic/launchers.dm +++ b/code/modules/projectiles/guns/ballistic/launchers.dm @@ -148,3 +148,48 @@ . = ..() playsound(loc, "sparks", 75, 1, -1) do_sparks(8, 3, usr) + +/obj/item/gun/ballistic/maint_musket + name = "maintenance musket" + desc = "A weapon with notoriously poor accuracy; it makes up for this by being quick and easy to smash together." + icon_state = "maint_musket" + item_state = "maint_musket" + mag_type = /obj/item/ammo_box/magazine/internal/cartridge + w_class = WEIGHT_CLASS_HUGE + weapon_weight = WEAPON_HEAVY + slot_flags = ITEM_SLOT_BACK + casing_ejector = FALSE + bolt_type = BOLT_TYPE_NO_BOLT + internal_magazine = TRUE + empty_indicator = FALSE + can_bayonet = TRUE + knife_x_offset = 27 + knife_y_offset = 13 + can_suppress = FALSE + force = 5 + cartridge_wording = "cartridge" + fire_sound = 'sound/weapons/musket_shot.ogg' + load_sound = 'sound/weapons/musket_cock.ogg' + pin = /obj/item/firing_pin + var/reloading_active = FALSE + +/obj/item/gun/ballistic/maint_musket/process_chamber() + magazine.get_round(FALSE) + +/obj/item/gun/ballistic/maint_musket/attackby(obj/item/A, mob/user, params) + + if(istype(A, /obj/item/ammo_casing/caseless/cartridge)) + if(reloading_active) + to_chat(user, span_warning("You're already reloading it!")) + return + if(magazine.stored_ammo.len > 0) + user.balloon_alert(user, "Already loaded!") + return + user.visible_message(span_warning("[user] starts reloading the [src]!"), span_notice("You start reloading the [src].")) + reloading_active = TRUE + if(!do_after(user, 5 SECONDS, user)) + reloading_active = FALSE + user.balloon_alert(user, "You were interrupted!") + return + reloading_active = FALSE + return ..() diff --git a/code/modules/projectiles/projectile/special/rocket.dm b/code/modules/projectiles/projectile/special/rocket.dm index 0a39cfd58b33..7e82067f3a72 100644 --- a/code/modules/projectiles/projectile/special/rocket.dm +++ b/code/modules/projectiles/projectile/special/rocket.dm @@ -93,3 +93,16 @@ icon_state = "bolt" desc = "A smaller and faster rod." damage = 25 + +/obj/projectile/bullet/cartridge + name = "cartridge" + desc = "A small metal ball fired from a musket." + damage = 25 + armour_penetration = -30 //Cheap ammo means poor AP + spread = 40 + demolition_mod = 0.25 + +/obj/projectile/bullet/cartridge/black_powder + damage = 30 + armour_penetration = 0 + spread = 20 diff --git a/icons/mob/clothing/back.dmi b/icons/mob/clothing/back.dmi index 27889c7c3431..a76109ccef11 100644 Binary files a/icons/mob/clothing/back.dmi and b/icons/mob/clothing/back.dmi differ diff --git a/icons/mob/inhands/weapons/guns_lefthand.dmi b/icons/mob/inhands/weapons/guns_lefthand.dmi index 00eec14b9388..e834af1a33c3 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 f5eecf913a9e..3b7ea942db36 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/ammo.dmi b/icons/obj/ammo.dmi index 1356469433db..54d02ae9082c 100644 Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi index 4bd084ad4e20..01870fe41e4a 100644 Binary files a/icons/obj/guns/projectile.dmi and b/icons/obj/guns/projectile.dmi differ diff --git a/sound/weapons/musket_cock.ogg b/sound/weapons/musket_cock.ogg new file mode 100644 index 000000000000..d5e20986db6e Binary files /dev/null and b/sound/weapons/musket_cock.ogg differ diff --git a/sound/weapons/musket_shot.ogg b/sound/weapons/musket_shot.ogg new file mode 100644 index 000000000000..677291518edc Binary files /dev/null and b/sound/weapons/musket_shot.ogg differ