Files
+37 21b4095dfd [MDB IGNORE] [IDB IGNORE] Upstream Sync - 04/17/2026 (#5453)
Upstream 04/17/2026

fixes https://github.com/Bubberstation/Bubberstation/issues/5549

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
Co-authored-by: rageguy505 <54517726+rageguy505@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Aliceee2ch <160794176+Aliceee2ch@users.noreply.github.com>
Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
Co-authored-by: Tsar-Salat <62388554+Tsar-Salat@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
Co-authored-by: Maxipat <108554989+Maxipat112@users.noreply.github.com>
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: deltanedas <39013340+deltanedas@users.noreply.github.com>
Co-authored-by: SimplyLogan <47579821+loganuk@users.noreply.github.com>
Co-authored-by: loganuk <fakeemail123@aol.com>
Co-authored-by: Leland Kemble <70413276+lelandkemble@users.noreply.github.com>
Co-authored-by: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com>
Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
Co-authored-by: Lucy <lucy@absolucy.moe>
Co-authored-by: siliconOpossum <138069572+siliconOpossum@users.noreply.github.com>
Co-authored-by: Isratosh <Isratosh@hotmail.com>
Co-authored-by: TheRyeGuyWhoWillNowDie <70169560+TheRyeGuyWhoWillNowDie@users.noreply.github.com>
Co-authored-by: Neocloudy <88008002+Neocloudy@users.noreply.github.com>
Co-authored-by: Alexander V. <volas@ya.ru>
Co-authored-by: ElGitificador <168473461+ElGitificador@users.noreply.github.com>
Co-authored-by: Twaticus <46540570+Twaticus@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
Co-authored-by: Tim <timothymtorres@gmail.com>
Co-authored-by: Iamgoofball <iamgoofball@gmail.com>
Co-authored-by: Layzu666 <121319428+Layzu666@users.noreply.github.com>
Co-authored-by: Arturlang <24881678+Arturlang@users.noreply.github.com>
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: mrmanlikesbt <99309552+mrmanlikesbt@users.noreply.github.com>
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
Co-authored-by: John F. Kennedy <54908920+MacaroniCritter@users.noreply.github.com>
Co-authored-by: Cursor <102828457+theselfish@users.noreply.github.com>
Co-authored-by: Josh <josh.adam.powell@gmail.com>
Co-authored-by: Josh Powell <josh.powell@softwire.com>
Co-authored-by: Yobrocharlie <Charliemiller5617@gmail.com>
Co-authored-by: Hardly3D <66234359+Hardly3D@users.noreply.github.com>
Co-authored-by: shayoki <96078776+shayoki@users.noreply.github.com>
Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com>
2026-05-16 00:56:00 +02:00

216 lines
8.2 KiB
Plaintext

// .310 Strilka (Sakhno Rifle)
/obj/item/ammo_casing/strilka310
name = ".310 Strilka bullet casing"
desc = "A .310 Strilka bullet casing. Casing is a bit of a fib; there is no case, it's just a block of red powder."
icon_state = "310-casing"
caliber = CALIBER_STRILKA310
projectile_type = /obj/projectile/bullet/strilka310
/obj/item/ammo_casing/strilka310/Initialize(mapload)
. = ..()
AddElement(/datum/element/caseless)
/obj/item/ammo_casing/strilka310/surplus
name = ".310 Strilka surplus bullet casing"
desc = parent_type::desc + " Damp red powder at that."
projectile_type = /obj/projectile/bullet/strilka310/surplus
/obj/item/ammo_casing/strilka310/enchanted
projectile_type = /obj/projectile/bullet/strilka310/enchanted
/obj/item/ammo_casing/strilka310/phasic
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
name = ".223 bullet casing"
desc = "A .223 bullet casing."
icon_state = "223-casing"
caliber = CALIBER_A223
projectile_type = /obj/projectile/bullet/a223
/obj/item/ammo_casing/a223/phasic
name = ".223 phasic bullet casing"
desc = "A .223 phasic bullet casing."
projectile_type = /obj/projectile/bullet/a223/phasic
/obj/item/ammo_casing/a223/weak
projectile_type = /obj/projectile/bullet/a223/weak
// 40mm (Grenade Launcher)
/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 ballistic grenade launcher."
caliber = CALIBER_40MM
icon_state = "40mmHE"
projectile_type = /obj/projectile/bullet/a40mm
newtonian_force = 1.25
/obj/item/ammo_casing/a40mm/rubber
name = "40mm rubber shell"
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!"
caliber = CALIBER_REBAR
icon_state = "rod_sharp"
base_icon_state = "rod_sharp"
projectile_type = /obj/projectile/bullet/rebar
newtonian_force = 1.5
custom_materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT)
/obj/item/ammo_casing/rebar/Initialize(mapload)
. = ..()
AddElement(/datum/element/caseless, TRUE)
/obj/item/ammo_casing/rebar/update_icon_state()
. = ..()
icon_state = "[base_icon_state]"
/obj/item/ammo_casing/rebar/syndie
name = "Jagged Iron Rod"
desc = "An Iron rod, with notches cut into it. You really don't want this stuck in you."
caliber = CALIBER_REBAR
icon_state = "rod_jagged"
base_icon_state = "rod_jagged"
projectile_type = /obj/projectile/bullet/rebar/syndie
/obj/item/ammo_casing/rebar/zaukerite
name = "zaukerite sliver"
desc = "A sliver of a zaukerite crystal. Due to its irregular, jagged edges, removal of an embedded zaukerite sliver should only be done by trained surgeons."
caliber = CALIBER_REBAR
icon_state = "rod_zaukerite"
base_icon_state = "rod_zaukerite"
projectile_type = /obj/projectile/bullet/rebar/zaukerite
/obj/item/ammo_casing/rebar/hydrogen
name = "metallic hydrogen bolt"
desc = "An ultra-sharp rod made from pure metallic hydrogen. Armor may as well not exist."
caliber = CALIBER_REBAR
icon_state = "rod_hydrogen"
base_icon_state = "rod_hydrogen"
projectile_type = /obj/projectile/bullet/rebar/hydrogen
/obj/item/ammo_casing/rebar/healium
name = "healium crystal bolt"
desc = "Who needs a syringe gun, anyway?"
caliber = CALIBER_REBAR
icon_state = "rod_healium"
base_icon_state = "rod_healium"
projectile_type = /obj/projectile/bullet/rebar/healium
custom_materials = null
/// How many seconds of healing/sleeping action we have left, once all are spent the bolt dissolves
var/heals_left = 6 SECONDS
/obj/item/ammo_casing/rebar/healium/ready_proj(atom/target, mob/living/user, quiet, zone_override, atom/fired_from)
if (loaded_projectile)
var/obj/projectile/bullet/rebar/healium/bolt = loaded_projectile
bolt.heals_left = heals_left
return ..()
/datum/embedding/rebar_healium
embed_chance = 100
fall_chance = 0
pain_stam_pct = 0.9
ignore_throwspeed_threshold = TRUE
rip_time = 1.5 SECONDS
/// Amount of each type of damage healed per second
var/healing_per_second = 5
/// Amount of drowsiness added per second
var/drowsy_per_second = 2 SECONDS
/// At what point of drowsiness do we knock out the owner
var/drowsy_knockout = 5 SECONDS // Actually more like 8 seconds, because you need 4 ticks to reach this
/// Can this bolt cause sleeping? Used to prevent sleep stacking by shooting multiple bolts
var/can_sleep = TRUE
/datum/embedding/rebar_healium/on_successful_embed(mob/living/carbon/victim, obj/item/bodypart/target_limb)
. = ..()
for(var/obj/item/bodypart/limb as anything in victim.get_bodyparts())
for(var/obj/item/ammo_casing/rebar/healium/other_rebar in limb.embedded_objects)
if (other_rebar == parent)
continue
var/datum/embedding/rebar_healium/embed_data = other_rebar.get_embed()
if (istype(embed_data) && embed_data.can_sleep)
can_sleep = FALSE
return
/datum/embedding/rebar_healium/process(seconds_per_tick)
. = ..()
var/obj/item/ammo_casing/rebar/healium/casing = parent
casing.heals_left -= seconds_per_tick * 1 SECONDS
var/update_health = FALSE
var/healing = -healing_per_second * seconds_per_tick
update_health += owner.adjust_brute_loss(healing, updating_health = FALSE, required_bodytype = BODYTYPE_ORGANIC)
update_health += owner.adjust_fire_loss(healing, updating_health = FALSE, required_bodytype = BODYTYPE_ORGANIC)
update_health += owner.adjust_tox_loss(healing, updating_health = FALSE, required_biotype = MOB_ORGANIC)
update_health += owner.adjust_oxy_loss(healing, updating_health = FALSE, required_biotype = MOB_ORGANIC)
if (update_health)
owner.updatehealth()
if (can_sleep && (owner.mob_biotypes & MOB_ORGANIC))
owner.adjust_drowsiness(drowsy_per_second * seconds_per_tick)
var/datum/status_effect/drowsiness/drowsiness = owner.has_status_effect(/datum/status_effect/drowsiness)
if (drowsiness?.duration >= drowsy_knockout)
owner.Sleeping(3 SECONDS)
if (casing.heals_left <= 0)
fall_out()
/datum/embedding/rebar_healium/remove_embedding(mob/living/to_hands)
. = ..()
var/obj/item/ammo_casing/rebar/healium/casing = parent
casing.heals_left = initial(casing.heals_left)
can_sleep = TRUE
/obj/item/ammo_casing/rebar/supermatter
name = "supermatter bolt"
desc = "Wait, how is the bow capable of firing this without dusting?"
caliber = CALIBER_REBAR
icon_state = "rod_supermatter"
base_icon_state = "rod_supermatter"
projectile_type = /obj/projectile/bullet/rebar/supermatter
/obj/item/ammo_casing/rebar/paperball
name = "paper ball"
desc = "Doink!"
caliber = CALIBER_REBAR
icon_state = "paperball"
base_icon_state = "paperball"
projectile_type = /obj/projectile/bullet/paperball
newtonian_force = 0.5
custom_materials = list(/datum/material/paper = HALF_SHEET_MATERIAL_AMOUNT / 2)