Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions code/datums/world_factions/mountain.dm
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@
/datum/supply_pack/luxury/talkstone,
/datum/supply_pack/luxury/gold_plaque_belt,
/datum/supply_pack/weapons/ranged/puffer,
/datum/supply_pack/weapons/ranged/blunderbuss,
/datum/supply_pack/weapons/ammo/bullets,
/datum/supply_pack/weapons/ranged/musket
)
Expand Down
26 changes: 26 additions & 0 deletions code/game/objects/items/coins.dm
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
var/quantity = 1
var/plural_name
var/rigged_outcome = 0 //1 for heads, 2 for tails
var/pellet_type

/obj/item/coin/get_carry_weight(atom/carrier)
. = item_weight * quantity
Expand Down Expand Up @@ -122,6 +123,9 @@
. += span_info("[quantity_to_words(quantity)] [denomination] ([get_real_price()] mammon)")
return

if(quantity >= 6 && GET_MOB_SKILL_VALUE(user, /datum/attribute/skill/combat/firearms) >= SKILL_LEVEL_NOVICE && pellet_type)
. += span_info("It looks like you could rig this up to be fired as ammunition.")

if(HAS_TRAIT(user, TRAIT_COIN_ILLITERATE))
if(quantity <= 1)
. += span_info("A coin.")
Expand Down Expand Up @@ -309,6 +313,25 @@
INVOKE_ASYNC(src, PROC_REF(rig_coin), user)
return TRUE

//turn coins into pellets! fucking fuck whoever snowflaked coins quantity...
if(pellet_type && quantity >= 6 && GET_MOB_SKILL_VALUE(user, /datum/attribute/skill/combat/firearms) >= 10)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this should probably be an actual recipe.

Copy link
Copy Markdown
Author

@Singul0 Singul0 May 21, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the code for quantities of icons are jank, doesn't work with normal recipes as per the comments.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

arent zennies a bundle like all the others ?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NOPE! it's not a bundle subtype, blame lazy coders of old.

//crafting timer
to_chat(user, span_notice("You start rigging up [src] to be fired as ammunition..."))
playsound(src, 'sound/foley/lockrattle.ogg', 100, TRUE, -2)
if(!do_after(user, 3 SECONDS, src))
to_chat(user, span_warning("You stop rigging up [src]."))
return

quantity -= 6
if(!quantity)
qdel(src)
return

var/obj/item/ammo_casing/caseless/pelletshot/new_pellet = new pellet_type(src, src)
user.put_in_hands(new_pellet)
playsound(src, 'sound/foley/coins1.ogg', 100, TRUE, -2)


/obj/item/coin/attack_hand_secondary(mob/user, list/modifiers)
. = ..()
if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN)
Expand Down Expand Up @@ -419,6 +442,7 @@
base_type = CTYPE_GOLD
plural_name = "zenarii"
item_weight = 9 GRAMS
pellet_type = /obj/item/ammo_casing/caseless/pelletshot/zenar


// SILVER
Expand All @@ -430,6 +454,7 @@
base_type = CTYPE_SILV
plural_name = "ziliquae"
item_weight = 11 GRAMS
pellet_type = /obj/item/ammo_casing/caseless/pelletshot/zil


// COPPER
Expand All @@ -440,6 +465,7 @@
sellprice = 1
base_type = CTYPE_COPP
plural_name = "zennies"
pellet_type = /obj/item/ammo_casing/caseless/pelletshot/zenny

/obj/item/coin/copper/pile/Initialize(mapload, coin_amount)
. = ..()
Expand Down
5 changes: 5 additions & 0 deletions code/modules/cargo/supply_packs/weapons.dm
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,11 @@
cost = 500
contains = /obj/item/gun/ballistic/powder/wheellock/puffer

/datum/supply_pack/weapons/ranged/blunderbuss
name = "Smuggled Blunderbuss"
cost = 650
contains = /obj/item/gun/ballistic/powder/wheellock/blunderbuss

/datum/supply_pack/weapons/ranged/musket
name = "Smuggled Musket"
cost = 750 //needs balancing
Expand Down
8 changes: 8 additions & 0 deletions code/modules/clothing/belt/misc.dm
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,14 @@
/obj/item/ammo_casing/caseless/bullet,
)

/obj/item/storage/belt/pouch/pellets
populate_contents = list(
/obj/item/ammo_casing/caseless/pelletshot,
/obj/item/ammo_casing/caseless/pelletshot,
/obj/item/ammo_casing/caseless/pelletshot,
/obj/item/ammo_casing/caseless/pelletshot,
)

/obj/item/storage/belt/pouch/cloth
name = "cloth pouch"
desc = "Usually used for holding small amount of coins."
Expand Down
2 changes: 1 addition & 1 deletion code/modules/clothing/quivers/misc.dm
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
item_state = "dartpouch"
slot_flags = ITEM_SLOT_HIP|ITEM_SLOT_NECK
max_storage = 10
ammo_type = list(/obj/item/ammo_casing/caseless/bullet)
ammo_type = list(/obj/item/ammo_casing/caseless/bullet, /obj/item/ammo_casing/caseless/pelletshot)

/obj/item/ammo_holder/bullet/bullets
fill_type = /obj/item/ammo_casing/caseless/bullet
Expand Down
8 changes: 8 additions & 0 deletions code/modules/crafting/artificer/misc.dm
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,14 @@
craftdiff = 2
created_amount = 4

/datum/artificer_recipe/ammo/lead_pellet
name = "Pellet shots 4x"
hammers_per_item = 4
created_item = /obj/item/ammo_casing/caseless/pelletshot
required_item = /obj/item/ingot/tin
craftdiff = 2
created_amount = 4

/datum/artificer_recipe/ammo/bolts
name = "Crossbow Bolts 5x (+1 Iron)"
required_item = /obj/item/natural/wood/plank
Expand Down
28 changes: 28 additions & 0 deletions code/modules/crafting/quality_of_crafting/pellets.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/datum/repeatable_crafting_recipe/ammo
abstract_type = /datum/repeatable_crafting_recipe/ammo
category = "Ammunition"
subtypes_allowed = TRUE
craftdiff = 0
crafting_message = "starts shaping ammunition"
skillcraft = /datum/attribute/skill/combat/firearms
Copy link
Copy Markdown

@Diegoflores31 Diegoflores31 May 21, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i am kind of worried about this one . no only allows free leveling of firearms but its a little nobrainer option compared with puffers or musket with limited ammo you have to pay for ... when you can just get this one and craft your own ammo for free

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not even arrows are that reliable . since you have to smith the arrows or buy at the merchant.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the whole makeshift ammo aspect is a huge part of the aspect of the design of the gun though, i'm going to wait for the maints to weigh in on this.

minimum_skill_level = 1

/datum/repeatable_crafting_recipe/ammo/shardshot
name = "shard pellet"
requirements = list(
/obj/item/natural/glass/shard = 2,
)
attacked_atom = /obj/item/natural/glass/shard
starting_atom = /obj/item/natural/glass/shard
output = /obj/item/ammo_casing/caseless/pelletshot/glass
craftdiff = 1

/datum/repeatable_crafting_recipe/ammo/saltshot
name = "salt pellet"
requirements = list(
/obj/item/reagent_containers/powder/salt = 2,
)
attacked_atom = /obj/item/reagent_containers/powder/salt
starting_atom = /obj/item/reagent_containers/powder/salt
output = /obj/item/ammo_casing/caseless/pelletshot/salt
craftdiff = 1
10 changes: 10 additions & 0 deletions code/modules/inquisitor_supplies/general.dm
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,16 @@
new /obj/item/storage/belt/pouch/bullets(src)
new /obj/item/reagent_containers/glass/bottle/aflask(src)

/datum/inqports/equipment/blunderbuss
name = "1 Blunderbuss, 4 lead pellets and powder flask"
item_type = /obj/structure/closet/crate/chest/inqcrate/equipment/blunderbuss
marquescost = 16
maximum = 1

/obj/structure/closet/crate/chest/inqcrate/equipment/blunderbuss/populate_contents()
new /obj/item/gun/ballistic/powder/wheellock/blunderbuss(src)
new /obj/item/storage/belt/pouch/pellets(src)
new /obj/item/reagent_containers/glass/bottle/aflask(src)
/*
//Added this and then realized it wasn't actually in the bounty and I'm just stupid. It's staying here incase somebody wants it.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@

/datum/job/advclass/mercenary/grenzelhoft/on_roundstart(mob/living/carbon/human/spawned, client/player_client)
. = ..()
var/static/list/weapons = list("Zweihander", "Musket", "Halberd")
var/static/list/weapons = list("Zweihander", "Musket", "Blunderbuss", "Halberd")
var/weapon_choice = tgui_input_list(player_client,"CHOOSE YOUR WEAPON.", "GO EARN SOME COIN.", weapons)
switch(weapon_choice)
if("Zweihander")
Expand All @@ -95,6 +95,12 @@
spawned.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/musketeer, ITEM_SLOT_BACK_L, TRUE)
spawned.equip_to_slot_or_del(new /obj/item/weapon/sword/sabre/dec, ITEM_SLOT_BELT_L, TRUE)
spawned.attributes?.add_sheet(/datum/attribute_holder/sheet/job/grenzelhoft/musket)
if("Blunderbuss")
spawned.equip_to_slot_or_del(new /obj/item/gun/ballistic/powder/wheellock/blunderbuss, ITEM_SLOT_BACK_R, TRUE)
spawned.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/musketeer, ITEM_SLOT_BACK_L, TRUE)
spawned.equip_to_slot_or_del(new /obj/item/storage/belt/pouch/pellets, ITEM_SLOT_BELT_R, TRUE)
spawned.equip_to_slot_or_del(new /obj/item/weapon/sword/sabre/dec, ITEM_SLOT_BELT_L, TRUE)
spawned.attributes?.add_sheet(/datum/attribute_holder/sheet/job/grenzelhoft/musket)
if("Halberd")
spawned.equip_to_slot_or_del(new /obj/item/weapon/polearm/halberd, ITEM_SLOT_BACK_R, TRUE)
spawned.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel, ITEM_SLOT_BACK_L, TRUE)
Expand Down
48 changes: 48 additions & 0 deletions code/modules/projectiles/ammunition/caseless/bullet.dm
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,54 @@
force = DAMAGE_KNIFE - 7
item_weight = 75 GRAMS

/obj/item/ammo_casing/caseless/pelletshot
Comment thread
Singul0 marked this conversation as resolved.
name = "pelletshot"
desc = "A handful of pellet shots, made to punch many holes into a packed bunch of enemies."
projectile_type = /obj/projectile/bullet/pellet
caliber = "blundershot" //shotgun variant of lead balls essentially
icon = 'icons/roguetown/weapons/ammo.dmi'
icon_state = "pellets"
dropshrink = 0.5
possible_item_intents = list(INTENT_USE)
pellets = 6
variance = 10
randomspread = TRUE

force = DAMAGE_KNIFE - 7
item_weight = 75 GRAMS

/obj/item/ammo_casing/caseless/pelletshot/zenar
name = "zenarshot"
desc = "A handful of pellet shots out of zenars, made to punch many holes into a packed bunch of enemies."
icon_state = "pellets_zenar"
projectile_type = /obj/projectile/bullet/pellet/zenar

/obj/item/ammo_casing/caseless/pelletshot/zil
name = "zilshot"
desc = "A handful of pellet shots out of zils, made to punch many holes into a packed bunch of enemies."
icon_state = "pellets_zenarii"
projectile_type = /obj/projectile/bullet/pellet/zil

/obj/item/ammo_casing/caseless/pelletshot/zenny
name = "zennyshot"
desc = "A handful of pellet shots out of zennies, made to punch many holes into a packed bunch of enemies."
icon_state = "pellets_zenny"
projectile_type = /obj/projectile/bullet/pellet/zenny

/obj/item/ammo_casing/caseless/pelletshot/glass
name = "glasshot"
desc = "A handful of pellet shots out of glass shards, made to bleed a packed bunch of enemies."
icon_state = "pellets_shard"
projectile_type = /obj/projectile/bullet/pellet/glass
pellets = 9

/obj/item/ammo_casing/caseless/pelletshot/salt
name = "saltshot"
desc = "A handful of pellet shots out of salt, made to incapacitate a packed bunch of enemies."
icon_state = "pellets_salt"
projectile_type = /obj/projectile/bullet/pellet/salt
pellets = 9

/obj/item/ammo_casing/caseless/cball
name = "large cannonball"
desc = "A round lead ball. Complex and still spherical."
Expand Down
10 changes: 10 additions & 0 deletions code/modules/projectiles/boxes_magazines/internal/single.dm
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,16 @@
ammo_type = /obj/item/ammo_casing/caseless/bullet
caliber = "musketball"

//I mean, blunderbusses are mechanically just shotguns if you squint enough
/obj/item/ammo_box/magazine/internal/shotgun
name = "barrel"
max_ammo = 1
ammo_type = /obj/item/ammo_casing/caseless/pelletshot
caliber = "blundershot"

/obj/item/ammo_box/magazine/internal/shotgun/empty
start_empty = TRUE

/obj/item/ammo_box/magazine/internal/barrel/empty
start_empty = TRUE

Expand Down
6 changes: 2 additions & 4 deletions code/modules/projectiles/guns/ballistic/_powder.dm
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,6 @@
if(exited == ramrod)
ramrod = null

/obj/item/gun/ballistic/powder/clear_chambered(datum/source)
. = ..()
bullet_rammed = FALSE

/obj/item/gun/ballistic/powder/examine(mob/user)
. = ..()

Expand Down Expand Up @@ -281,6 +277,8 @@
if(M_turf)
M.playsound_local(M_turf, fire_sound, 100, 1, get_rand_frequency())

bullet_rammed = FALSE

/obj/item/gun/ballistic/powder/postfire_empty_checks(last_shot_succeeded)
. = ..()
if(last_shot_succeeded)
Expand Down
Loading
Loading