Commit Graph

3146 Commits

Author SHA1 Message Date
Paxilmaniac
945e78d073 updates to the sprites of the bolt action rifle (#92557) 2025-08-24 17:03:07 -04:00
Krysonism
45e76d80fc NT researchers make shocking breakthrough in flux anomalogics! Tesla Cannon Resprite / Resound (#92031)
## About The Pull Request

![tesla_card](https://github.com/user-attachments/assets/27d0777b-3014-4785-b06e-f5e7fe0d5a36)

Resprites:

Tesla Cannon 
Tesla Cannon crafting kit

### New SFX / VFX

The tesla cannon now uses a new type of beam effect that randomly picks
sprite variants for each segment instead of a tracer.

This makes the arc look more dynamic and less distorted. 

Autofire guns can now choose to use a looping sound datum when firing.


![image](https://github.com/user-attachments/assets/b9c0c494-fce6-48bc-9d09-ea2e6257c86c)

#### Balance changes

The tesla cannon must now have its stock unfolded before firing, this
takes 1.5 seconds and makes the gun bulky.

It is still normal sized when folded, and folding it is instant.

### Bug fixes

Fixed a bug where looping_sound.stop() would fail to stop sounds.

The tesla cannon is an incredibly powerfu 

## Why It's Good For The Game

### My reasons for respriting

The old sprite was not bad, by all means but I had a few gripes with it.

* The old sprite does not incorporate the flux anomaly yellow colour.

* The old sprite looks a bit much like a real, professionally produced
sci-fi weapon,

* The old sprite looks pretty small for such a ultra high dps full auto
weapon.

* The old inhand is quite indistinct for something that can game end you
in like one second.

### My design

I think that anomaly items should be very mad science coded and, since
anomaly science is by definition a poorly studied field, they should
look more like prototypes created by a scientist rather than something
professionally made in a factory.

## Changelog

🆑
image: The tesla cannon has new sprites.
image: The tesla parts kit has new sprites.
image: The tesla cannon has a new shocking beam effect when firing.
sound: The tesla cannon has new sounds.
balance: The tesla cannon must now be unfolded to fire.
fix: looping sounds now stop playing sounds when commaned to do so.
/🆑
2025-08-13 07:43:28 +10:00
throwawayuseless
2a7921d436 Emitter: The Emitting (#92327)
## About The Pull Request
Adds Diode Disks, installable disks that when fitted into an emitter can
change its function.
* Healing
* Stamina damage, and heals the SM slightly at the cost of internal
energy
* Traitor engi only explosive that damages and supercharges the SM if
used that way. Firerate is halved.
* Incendiary that slightly damages the SM but has lots of energy
* Sanity damaging one that improves SM psi coeff
* Magnetic item attracting one that improves SM mol absorption.
## Why It's Good For The Game
Fun and unique ways for Engi to use excess power or improve their SM
setups. Could also lead to neat engi inventions such as, say, a circuit
device that aims and fires a healing emitter at anyone nearby who is
damaged. Should also incentivize the researching of useful techs, hence
why important medium tier techs are what lock the different disks.
## Changelog
🆑
add: New Diode Disks which allow you to configurate emitters with
special functions.
add: New Engi & CE exclusive traitor item, a diode disk that causes an
emitter to create low radius explosions when it hits things. Note that
this will reduce the fire-rate of your emitter.
/🆑

---------

Co-authored-by: ThrowawayUseless <notarealemail@emailservice.fake>
Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
2025-08-13 07:42:53 +10:00
Hatterhat
8e350f1f86 Splits ammo box multiload into a bitflag, adds a icon for .223, adds a desc for toy magazines (#92409)
## About The Pull Request

Ammo box `multiload` var was changed into a bitflag covering
`AMMO_BOX_MULTILOAD_IN`, and `AMMO_BOX_MULTILOAD_OUT`, respectively. By
default, ammo boxes have both multiloading in and out, while magazines
only have multiloading in, which means you can't use magazines as
speedloaders, but you can still feed ammo into magazines quickly if you
had, say, an ammo box for that magazine's caliber. Or... something.

---

Also adds an icon state for .223 casings, which is just an edit of the
old 7.62 casings to be shorter.
<img width="403" height="89" alt="image"
src="https://github.com/user-attachments/assets/b3206b94-c2b3-4b90-8162-b4c620bbe4cf"
/>

---

Also adds a description for toy gun magazines.

## Why It's Good For The Game

Splitting ammo box multiload into "multiload in" and "multiload out"
means you can't use an ammo box as a speedloader, which I thought was
silly. Emergent gameplay, sure, but also silly.

.223 having a unique icon instead of just looking like any other pistol
casing is nice (read: pistol-caliber casings from a rifle round annoyed
me).

Toy gun magazine thing was for funsies at this point.

## Changelog

🆑
code: Ammo boxes' multiload variable is now a bitflag that determines if
a magazine can be multiloaded into or out of. Ammo boxes can multiload
in or out, while magazines can only multiload in.
image: .223 ammo now has a distinct casing icon.
fix: Foam force magazines now have a proper description.
/🆑

---------

Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
2025-08-12 04:03:31 +10:00
SmArtKar
7e3a91f297 Fixes M90 underbarrel having its separate inaccessible firing pin (#92305)
## About The Pull Request

Underbarrel now depends on the gun's own firing pin, instead of having a
separate inaccessible pin.
Closes #92292

## Changelog
🆑
fix: Fixed M90 underbarrel having its separate inaccessible firing pin
/🆑
2025-07-31 21:05:10 -04:00
kuricityy
320b775cf0 Makes seclights attachable to almost every security firearm. (#91922)
## About The Pull Request
THE SECLIGHTENING!!

Hi hello. This PR adds the ability to attach seclights to most security
firearms. Nothing like some good seclight QOL.
Below is a picture with them attached, but off.

![image](https://github.com/user-attachments/assets/81fd4bb0-4e27-417b-9971-07d1afdfcf21)
Below is an image with the lights on:

![image](https://github.com/user-attachments/assets/53797ff8-9cff-403d-bbf0-df859e606788)
(if no one understands why/what the shotguns look like, I tried to make
it look like someone taped a flashlight to the side, as god intended.)
I'm no good at spriting (it was just changing offsets for already
existing sprites) but if you have any suggestions for what we can move
the offsets to, be my guest.
## Why It's Good For The Game

Well, for starters, we can easily attach seclights to disablers, energy
guns, advanced egun, the X01 energy gun, but we cant attach them to
other weapons. Why? Balance? I dont see how its unbalanced for a secoff
to see in the dark better. I couldnt tell you why you couldnt
previously, but I can tell you that it just makes more sense to have
them attachable to every weapon.

## Changelog


🆑
qol: Makes seclights attachable to almost every security firearm.
/🆑
2025-07-21 20:06:14 +10:00
necromanceranne
320185d1a4 Ensures that components can stop attack_self() proc code from running on energy guns if it would return COMSIG_CANCEL_ATTACK_CHAIN (#92019)
## About The Pull Request

What it says on the tin.

## Why It's Good For The Game

Should a component potentially want to override the behaviour of energy
guns attack_self() proc, it will not be able to prevent this code from
running without this check.
2025-07-19 01:41:20 -05:00
SmArtKar
8e6323a858 Fixes projectiles inheriting gun's pixel offsets when fired (#92166)
## About The Pull Request

Gun itself was passed as source when fired, which resulted in its pixel
offsets being inherited. Also we didn't move projectiles over turfs, so
any offsets larger than 32 pixels resulted in projectiles steering to
the side.

## Changelog
🆑
fix: Fixed projectiles inheriting gun's pixel offsets when fired
/🆑
2025-07-17 09:35:49 +02:00
combustor
9ea010c060 Healium bolts now heal people instead of damaging them. (#92137)
## About The Pull Request
Fixes healium bolts

## Why It's Good For The Game
Healium bolts are supposed to heal people

## Changelog

🆑
fix: Healium bolts now heal instead of dealing damage
/🆑
2025-07-15 13:31:54 -04:00
necromanceranne
8f15d0ea2c Adds .38 Flare, which is a lethal laser bullet casing available for printing with Advanced Beam Weaponry. Adjust ammo material values. (#91726)
## About The Pull Request


![image](https://github.com/user-attachments/assets/1332d28c-8d5f-41b7-a614-b74027210145)

Adds the .38 Flare. It does 20 damage. This round highlights the target
for 2 minutes, and projectiles hitting the target always hit the limb
that the shooter was aiming at. Your shot has effectively perfect limb
accuracy, no matter how far the bullet needs to travel. This also
affects other projectiles hitting the target that aren't the .38 Flare.

To indicate whether or not a round in a magazine is either lead or
laser, I've borrowed the implementation of ammo overlays from the C-20r
toy magazines Now each bullet in the speedloaders for .38 can be a
distinct type visibly. Might be interesting if anyone wants to add
additional unique appearances for some of the other .38 rounds.

Reduces the overall cost of a lot of the ammunition in the sec and
autolathe, such as loose bullets. Also reduces the material quantity
within bullet casings.

## Why It's Good For The Game

> .38 Flare

By popular demand, I've come up with a new idea. And that idea...is an
anti-bullet deviation tool. Most players are probably not conscious of
bullet deviation. But if you're familiar with the mechanic, it's why
sometimes your shots may hit into an arm or a leg even though you were
aiming at the head.

The way this works is that over the course of a bullets flight, it
increases in inaccuracy and the pobability of drifting into a limb. From
my last estimate, shooting somewhere around 5 tiles away will usually
result in bullet drift.

While affected by the flare shot, that does not happen. You shoot at the
head, you hit the head.

To put it into perspective; you could consider bullet deviation a form
of damage loss (its a bit more complicated than this and there are
instances where it is positive), and this projectile eliminates that
problem for everyone shooting the target.

> Ammo cost

Some of these were pretty excessive for the cost, and a notable example
of this include the .357 loose casings, .310 Surplus loose casings, and
most shotgun shells. These should go down to roughly below 3/5th of a
sheet of metal when printed from a fully upgraded lathe.

Meanwhile, a single bullet casing was like a sheet of metal each, which
didn't seem right to me. So they're now by default one fifth of a sheet
of metal on recycle.

## Changelog
🆑
add: .38 Flare, a laser bullet! Available in both .38 speedloader and
BR-38 magazine once Advanced Beam Weaponry is researched.
add: .38 Flare highlights the target in an outline and makes sure your
bullets never accidentally hit any limb except the one you are aiming
at. Never accidentally hit someone in the arm when you were going for a
headshot.
balance: Reduces the printing costs of several ammunition types from the
autolathe and security lathe. Reduces the overall material contents of
said printed ammo/magazines. If you find a material dupe, let a coder
know.
/🆑

---------

Co-authored-by: projectkepler-RU <99981766+projectkepler-ru@users.noreply.github.com>
Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
2025-07-09 17:11:23 +00:00
Fhaxaris
5648ab80b5 Adjusts the NT BR-38 sprite (#92007) 2025-07-09 13:04:05 -04:00
SmArtKar
c108ef79ac Healium bolts now embed and heal/knock out passively over time instead of being instant and unblockable (#91481)
## About The Pull Request

Healium bolts now heal you for 5 of each damage per second for 6 seconds
before falling out, while applying 2 seconds of drowsiness. If you have
at least 5 seconds of drowsiness (after 4 seconds of processing, because
we add 2 and it gets deducted by 1 afterwards) you get knocked out for 3
seconds (similarly to how it worked before, but with 1 additional second
left of processing if you were only shot by one bolt, you end up knocked
out for 4 seconds). It takes 1.5 seconds to rip one out, so you should
be able to react to being shot by one unless the attacker follows it up
with a melee distruption. Bolts that fall out restore their charges, but
only one bolt at a time can be putting the target to sleep.

https://github.com/user-attachments/assets/7936895e-f4dc-4bd6-847f-495c7f1202db

Video is a bit outdated, delay before knockout been bumped by a second.

###### This is a commission for Ezel/Improvedname

## Why It's Good For The Game

Healium bolts are an instant knockout that could be mass-produced to
either instantly win fights, or thrown at medbay to quickly hit corpses
by poking them over and over again as bolts didn't even embed, so
players can instantly reload and shoot them again. It was either making
them harder to produce, or reducing the effects, and former wouldn't
solve the knockout issue.
They also didn't care about block values, so even if you blocked or
reflected one you'd still get knocked out. lol

## Changelog

🆑
balance: Healium bolts now heal and knock out overtime while being
embedded instead of being instant.
balance: Healium bolts dissolve after being embedded for 6 seconds and
don't work on corpses
fix: Healium bolts no longer ignore being blocked/parried/reflected
/🆑
2025-06-29 13:47:00 +10:00
necromanceranne
fb9824a401 Makes the mech clamp attack do only brute damage, checks for block and armor, and gives it an attack animation and sound. (#91563)
## About The Pull Request

If you use the mech clamp offensively, it actually performs an attack
animation and sound, and properly checks armor and block. It only deals
brute damage.

As a consequence of these changes, it actually logs attacks made against
mobs that die when gibbed.

Also, xenos take x3 damage from the clamp.

## Why It's Good For The Game

This is a pretty sinister kind of attack, as it is completely silent
except for throwing a warning into chat, and can be done even in a large
crowd of people. Someone who isn't aware that the clamp can be used this
way may not even understand what is happening before it is too late.

> block check

While mech melee doesn't normally check block, this is an improvised
attack on a non-combat mech. I think it should stay a bit weak compared
to a proper mech melee in most ways and have some additional
limitations.

> Xenos

I thought this was already a thing. It's thematically on point, no?

## Changelog
🆑
balance: Mech hydraulic clamps perform an attack animation and sound
when attacking mobs.
balance: Mech hydraulic clamps can be blocked and respect armor.
balance: Mech hydraulic clamps do triple damage to xenomorphs.
/🆑
2025-06-27 23:08:09 -07:00
MrMelbert
4c277dc572 Dynamic Rework (#91290)
## About The Pull Request

Implements https://hackmd.io/@tgstation/SkeUS7lSp , rewriting Dynamic
from the ground-up

- Dynamic configuration is now vastly streamlined, making it far far far
easier to understand and edit

- Threat is gone entirely; round chaos is now determined by dynamic
tiers
   - There's 5 dynamic tiers, 0 to 4.
      - 0 is a pure greenshift.
- Tiers are just picked via weight - "16% chance of getting a high chaos
round".
- Tiers have min pop ranges. "Tier 4 (high chaos) requires 25 pop to be
selected".
- Tier determines how much of every ruleset is picked. "Tier 4 (High
Chaos) will pick 3-4 roundstart[1], 1-2 light, 1-2 heavy, and 2-3
latejoins".
- The number of rulesets picked depends on how many people are in the
server - this is also configurable[2]. As an example, a tier that
demands "1-3" rulesets will not spawn 3 rulesets if population <= 40 and
will not spawn 2 rulesets if population <= 25.
- Tiers also determine time before light, heavy, and latejoin rulesets
are picked, as well as the cooldown range between spawns. More chaotic
tiers may send midrounds sooner or wait less time between sending them.

- On the ruleset side of things, "requirements", "scaling", and
"enemies" is gone.
- You can configure a ruleset's min pop and weight flat, or per tier.
- For example a ruleset like Obsession is weighted higher for tiers 1-2
and lower for tiers 3-4.
- Rather than scaling up, roundstart rulesets can just be selected
multiple times.
- Rulesets also have `min_antag_cap` and `max_antag_cap`.
`min_antag_cap` determines how many candidates are needed for it to run,
and `max_antag_cap` determines how many candidates are selected.

- Rulesets attempt to run every 2.5 minutes. [3]

- Light rulesets will ALWAYS be picked before heavy rulesets. [4]

- Light injection chance is no longer 100%, heavy injection chance
formula has been simplified.
- Chance simply scales based on number of dead players / total number
off players, with a flag 50% chance if no antags exist. [5]

[1] This does not guarantee you will actually GET 3-4 roundstart
rulesets. If a roundstart ruleset is picked, and it ends up being unable
to execute (such as "not enough candidates", that slot is effectively a
wash.) This might be revisited.

[2] Currently, this is a hard limit - below X pop, you WILL get a
quarter or a half of the rulesets. This might be revisited to just be
weighted - you are just MORE LIKELY to get a quarter or a half.

[3] Little worried about accidentally frontloading everything so we'll
see about this

[4] This may be revisited but in most contexts it seems sensible. 

[5] This may also be revisited, I'm not 100% sure what the best / most
simple way to tackle midround chances is.

Other implementation details

- The process of making rulesets has been streamlined as well. Many
rulesets only amount to a definition and `assign_role`.

- Dynamic.json -> Dynamic.toml

- Dynamic event hijacked was ripped out entirely.
- Most midround antag random events are now dynamic rulesets. Fugitives,
Morphs, Slaughter Demons, etc.
      - The 1 weight slaughter demon event is gone. RIP in peace. 
- There is now a hidden midround event that simply adds +1 latejoin, +1
light, or +1 heavy ruleset.

- `mind.special_role` is dead. Minds have a lazylist of special roles
now but it's essentially only used for traitor panel.

- Revs refactored almost entirely. Revs can now exist without a dynamic
ruleset.

- Cult refactored a tiny bit. 

- Antag datums cleaned up.

- Pre round setup is less centralized on Dynamic.

- Admins have a whole panel for interfacing with dynamic. It's pretty
slapdash I'm sure someone could make a nicer looking one.


![image](https://github.com/user-attachments/assets/e99ca607-20b0-4d30-ab4a-f602babe7ac7)


![image](https://github.com/user-attachments/assets/470c3c20-c354-4ee6-b63b-a8f36dda4b5c)

- Maybe some other things.

## Why It's Good For The Game

See readme for more info.

Will you see a massive change in how rounds play out? My hunch says
rounds will spawn less rulesets on average, but it's ultimately to how
it's configured

## Changelog

🆑 Melbert
refactor: Dynamic rewritten entirely, report any strange rounds
config: Dynamic config reworked, it's now a TOML file
refactor: Refactored antag roles somewhat, report any oddities
refactor: Refactored Revolution entirely, report any oddities
del: Deleted most midround events that spawn antags - they use dynamic
rulesets now
add: Dynamic rulesets can now be false alarms
add: Adds a random event that gives dynamic the ability to run another
ruleset later
admin: Adds a panel for messing around with dynamic
admin: Adds a panel for chance for every dynamic ruleset to be selected
admin: You can spawn revs without using dynamic now
fix: Nuke team leaders get their fun title back
/🆑
2025-06-25 17:36:10 -07:00
John Willard
096c032402 Adds a new halloween species: Spirits (#90711)
## About The Pull Request

Adds 2 new species: Spirits and Ghosts

Spirits are available roundstart during Halloween, Wabbajack and
Xenobio's black slime extract
Ghosts are available through Magic mirrors

They fly around, and don't have legs and instead float around. They also
can't get legs implanted onto themselves.

They also do have organs, so they are affected by flashbangs, they do
get hungry, they do need oxygen to survive (they don't take damage in
space but they do suffocate & get slowdown), and can process chems.
Gibbing a ghost gives ectoplasm, an ingredient for ghost burgers.

Chaplains also got a buff here, null rod-type weapons' bane is now
against Spirit mobs, rather than hardcoded revenants. This means it now
includes Spirits/Ghosts, but also Soulscythes & Cult shades.

Also re-adds https://github.com/tgstation/tgstation/pull/81630 which was
reverted in https://github.com/tgstation/tgstation/pull/86506 which I
assume was accidental.

### The difference between Spirits and Ghosts

Ghosts have an innate ability to become incorporeal, which allows them
to phase through walls and stuff. Using this will immediately make them
drop any non-ghost limb/organ (not implants cause I thought it would be
funny). This ability is not available if they have holy water in their
system, and like revenants they also can't walk over blessed tiles with
it. They are also invisible to cameras while using this (not the obscura
though).

Sprites taken from observers directly, if anyone wants to make custom
sprites for them feel free. If anyone wants to make this obtainable
somehow in-game as well I wouldn't be opposed, halloween is just where I
thought it would fit most.

This also adds a lot of fixes that I encountered trying to add this,
from systems that have been neglected throughout the years.


https://github.com/user-attachments/assets/e368d710-80a0-4c63-b271-1abe3dd41a5e

## Why It's Good For The Game

We haven't gotten a new halloween species in a long time and thought it
would be fun if you can play as an actual ghost, the soul that remains
after a person passes, so Halloween feels more haunted. It's overall
made in just good fun, with a bonus that Ghosts are a cool species to
play with as well for Wizards & maybe Chaplains in the future (Dead sect
when?)

## Changelog

🆑
add: Added a new halloween species: Spirits, a species without legs and
instead floats.
add: Added a new magic mirror species: Ghosts, like spirits but with the
ability to become incorporeal, traversing through solid wall.
fix: Mobs unable to use storage items now can't use storage items.
fix: Mobs unable to use items can now not open airlocks & closets
fix: Mobs unable to pick items up can no longer pick items up and
immediately drop, moving one tile at a time.
fix: Mobs with intentional missing limbs (Alien larva) no longer show
their limbs as missing on examine (again)
fix: Golems' pref page had a missing icon, it now has one.
/🆑

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
2025-06-22 10:02:06 +02:00
MrMelbert
d838bff525 Adds some throwing datum nullchecks (#91720)
## About The Pull Request

A few places seem to call `hitby` or `throw_impact` without a throwing
datum to mimic the effect of colliding with something, which is cringe,
but I guess we should support it.

So we need to nullcheck for `get_thrower`, else it runtimes and cancels
the whole proc.

## Changelog

🆑 Melbert
fix: Glass shards from colliding with vendors or glass table hurt you
again.
/🆑
2025-06-20 11:25:16 -06:00
necromanceranne
57624ca1e2 Rebalances wound determination values, wounding escalation and wound armor to hopefully be less explosive (#91099)
## About The Pull Request

This is a big one so please bear with me, wounds are complicated

### Max Potential Wound Rolls

We've decreased the max contributed damage to wound rolls from 35 to 25.
This results, after the exponent, a max possible wound roll of 1 to 91
before any modifiers (assuming the attack, after armor, is 25 or above).

The minimum value to wound is still 5.

### Wound Escalation Penalties

Most wounds were contributing significant numbers per wound type to the
potential for a new wound to occur. Getting wounded once meant you were
getting wound a lot, but actually getting past that first wounding may
be the tricky part.

We have significantly reigned in the wound penalty that having a wound
contributes, and instead utilize the series wound penalty to allow same
type wounds to escalate themselves faster as a priority. Having wounds
still makes you more wound vulnerable, just not to such an extreme
degree.

The priority here for what wounds matter most for contributing to
overall wounding vulnerability is ``Infected BURNS > BURNS >
SLASH|PIERCE > BLUNT.``

### Wound Armor

Wound armor, unlike all other kinds of armor, was used as a additive
value to the wound roll modifiers rather than a multiplicative value.

We have reworked how wound armor is determined by changing how wound
modifiers are calculated.

Firstly, we're passing our entire injury roll into the
``check_woundings_mod()`` proc, as we're not treating this as a proc
that just adds values anymore.

Secondly, bare wound bonus only applies if there is no potential wound
protection from any source, as expected. But it comes last in the
calculations.

Thirdly, wound protection is applied to the injury roll last, after
wound bonuses from the attack, wound bonuses from other wounds and wound
bonuses from a disabled limb are applied. This does not include serial
wound bonuses, which are determined outside of this proc.

Wound protection comes from two sources. Clothing and limb wound
resistance. Your chest and head have an amount of wound resistance so
long as they are not mangled in any fashion. Being mangled means having
either a hairline fracture or a weeping avulsion wound.

Wound protection reduces the final injury roll by a percentage. Say our
roll is 50, and we have effectively 50% wound protection. The final roll
would be 25.

### ~~Wound Armor on Clothing~~ Reverted

~~Most clothing have had their wound armor values changed. As a loose
rule, I used the highest of melee or bomb armor, except where that value
was 100, in which case I used the lowest instead. I'm basing this
decision on how embeds are calculated, which is attack type agnostic.~~

~~Some armor have inconsistent values because they are alternative
armors to an existing armor type or are hyperspecialized armor.
Ablative, bulletproof and security vests all share a value of 35,
despite the former two not having decent melee or bomb armor.~~

~~Some clothing missing wound armor that should have had them now have
wound armor.~~

~~This may need a bit of scrutiny in case one or two seem weirdly high.
Some have maybe become too low. Its a bit hard to say.~~

### The ``bare_wound_bonus`` variable

I changed it to ``exposed_wound_bonus`` to better represent when it
applies. You can be naked and still not be affected by this bonus if the
limb has wound resistance.

## Why It's Good For The Game

I'm not promising anything with this PR, but this is an attempt to
sanity check the values on wounds so that we're not seeing what the data
that determined the removal of beheading presented. An extreme
over-representation of tier 3 wounds. ~~And, from that, maybe I can
argue for beheadings coming back. That's my goal. I think beheadings
happened so much because the numbers were in need of work.~~ Well okay I
just wanna make wounds a bit more workable actually more than I want
beheadings.

Why is it that tier 3 wounds were so over-represented? Because wounds
will often force more severe wounds of other types by merit of any
wounds existing at all on a limb. Having **_a_** wound makes you more
wound prone for any kind of wound, and not just making you more likely
to suffer a more severe type of the same wound.

The threshold mechanic was intended to simulate making a wound worse,
but oddly just made a limb broadly more prone to getting worse from any
kind of attack to such a degree that future wound rolls of different
types were often going to start at the threshold necessary to be a tier
3 wound.

Dismemberment, mind you, requires you to suffer a flesh wound while you
have a bone wound of tier 2 or higher (with tier 3 giving a bonus to
this). You can do this readily via just a sharp weapon, because having a
mangled limb causes the wound to turn into a bone wound. Technically,
this is meant to be less likely as the effective damage for this wound
is halved. But the wound bonus from having a flesh wound was almost
always significant enough to kick your new bone wound up to a tier 3.

In other words; its not surprising that you saw so many beheadings,
because the system wanted to behead you as fast as it possibly can
thanks to all these escalating values.

Wound armor was only applied as a flat reduction on the roll. The
average for wound armor was 10. After receiving a single wound, you can
expect wound rolls to reach upwards of 100, even if the actual damage
roll was not particularly high, due to wound stacking bonuses form being
wounded.

This meant that wounds, if they happened, came thick and fast after the
first, regardless of what your protection might be to wounds. It was
just a matter of getting past the initial bump.

This is why effects that forced wounds were so powerful. They basically
made a given limb more prone to taking a wound without having to deal
with the protection problem first.

Finally, this is just a broad flaw with the system that is not its
fault. It is actually a problem that isn't a problem. Most people in the
game are not wearing helmets that protect their head. So most people are
going to suffer from a higher proclivity of being wounded if people are
aiming for the head. There is this...kind of cargo cult belief that
aiming for the head means you do more damage, or can stun someone if
you're lucky or what have you. It's entirely nonsense, but it has a
grain of truth in that people rarely wear, or even have access too,
headwear that provides wound protection or any protection at all. People
have jumpsuits, which are universally wound protected, but that isn't
true of the head. Look, the point is, they're not aiming at the head
because it is usually less armored, its for other reasons but it just so
happens to become true due to wounds and how wounds roll their type.

To soften this issue, I've decided to treat wound resistance as armor
until the limb suffers a tier 3 wound. This way, hits to the head MAY
not necessarily escalate to tier 3 instantly as they would on live even
from relatively low power weapons. Some weapons have very low force, but
have extreme bare wound bonuses. This should be less likely after this
change. I doubt this will necessarily make high damage high wound
weapons like energy swords any less prone to cutting you clean open, but
it might thanks to the reduction to contributed damage to the injury
roll. The system is now _a bit more random_.

## Changelog
🆑
balance: Wounds do not make you as vulnerable to suffering wounds of all
types as before. Instead, wounds make you more vulnerable to suffering
worse versions of themselves as a priority.
balance: Wound armor is now more impactful when protecting you from
wounds when you have already been wounded.
balance: Your head and chest are more difficult to wound until they have
been mangled; either from suffering from a weeping avulsion or a
hairline fracture.
code: Changed the variable for bare_wound_bonus to exposed_wound_bonus
to better explain what that variable is doing.
/🆑

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
2025-06-19 17:49:59 +02:00
Hatterhat
a02b3653e8 Enabling throw mode while ejecting casings has you catch them (except for when you don't) (#91645)
## About The Pull Request
When racking a gun (e.g. pulling the slide on a pistol, racking a
shotgun's pump, etc. etc), if you have throw mode enabled, you'll
attempt to catch the ejected casing.

![image](https://github.com/user-attachments/assets/74a58d8f-d51b-4d86-b203-4695793d2728)

This can fail, though, which gives you a funny message under these
circumstances:
- Your hands are full.

![image](https://github.com/user-attachments/assets/923f8162-b801-4862-a912-6b34018d800e)
- The casing was fired in the last 5 seconds, and you do not have the
protection of hand required to remove a lightbulb.

![image](https://github.com/user-attachments/assets/bd19d705-ba29-4f20-94ab-149bf0a08e4e)
You catch it if you have the lightbulb remover trait/skillchip, though.

![image](https://github.com/user-attachments/assets/605a6436-f10c-41e5-a8ae-56d9837e1007)
- You try to catch it while clumsy (e.g. being a clown). To add insult
to injury, trying to catch a hot casing has it burn you even if you're
wearing gloves. Don't think about that too hard.

![image](https://github.com/user-attachments/assets/3cca0147-1da3-4dda-995e-d1d2e2aa5f2e)

## Why It's Good For The Game
Changing shotgun ammo sucks less. Look cool to your friends while
possibly wasting ammo. Feel like a doofus when you get the funny red
text that says you dropped the casing because your hands were full. The
possibilities are very limited but it seems like it'd be nice to not
have to fumble for dropped casings all the time. (Now it's just most.)

## Changelog

🆑
qol: Having throw mode enabled while racking the slide on a gun has you
catch the ejected casing. Unless your hands are full, your hands are
unprotected and the casing is recently fired, or you are clumsy (e.g. a
clown), in which case you drop the casing and look silly.
/🆑

---------

Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
Co-authored-by: Aki Ito <11748095+ExcessiveUseOfCobblestone@users.noreply.github.com>
2025-06-19 04:49:20 +00:00
Mira
30bbd7bb32 Fix reloading of empty revolver (#91657)
## About The Pull Request
Fixes reloading of empty revolver
Fixes #91531

## Why It's Good For The Game
No way to reload a revolver after unloading it is sad

## Changelog

🆑
fix: Empty revolvers can now be reloaded
/🆑
2025-06-16 21:43:07 +10:00
necromanceranne
fbd026b77d PKA modkits handle denied types more robustly, applying limitations to max type even when denied_type isn't defined but maximum_of_type is. (#91487)
## About The Pull Request

Does what I I suggested the author of
https://github.com/tgstation/tgstation/pull/91225 should do in their PR
before they seemingly evaporated.

Now, if maximum_of_type is defined above the default value of 0, we use
the modkit's type as the denied type. This prevents stacking of the same
mod while retaining the granularity to allow parent types, and also
ensuring that you don't have a dead variable if another one isn't
defined. Before this, maximum_of_type only did something if denied_type
was defined.

## Why It's Good For The Game

I got caught out by these variables and so currently you can turn your
PKA into a rocket launcher. Oops.

## Changelog
🆑 OrbisAnima, necromanceranne
fix: PKA's can no longer have multiple offensive AOE modkits installed
at once, which was not intended.
/🆑
2025-06-08 15:39:17 +00:00
SmArtKar
51c8a5a6ab Fixes revolver reloading, again (#91414)
## About The Pull Request

Closes #91110, broke due to lazyloaded bullets being considered empty

This needs a unit test, maybe will write one later in a separate PR

## Changelog
🆑
fix: Fixed revolver reloading, again
/🆑
2025-06-01 17:23:46 +00:00
Jeremiah
9db2f6916b Sets prettier to run on the repo (#91379)
## About The Pull Request
Prettier (an auto formatter) is set to only run within the tgui folder
currently. This removes that limitation, allowing it to automatically
format all supported files in the repo (.js, .html, .yml
[etc](https://prettier.io/docs/))

I made a few exceptions for bundled and generated files
## Why It's Good For The Game
I'm of the opinion that code should look uniform and am lazy enough to
want CTRL-S to format files without having to think beyond that
## Changelog
2025-05-29 21:23:59 -07:00
necromanceranne
0df25deee6 Removes the accidental holdover bullet spread on the BR-38 that isn't supposed to be there. (#91352)
## About The Pull Request

This was a component of the gun that existed while the weapon had a
two-round burst. It was not removed when the burst was removed.

## Why It's Good For The Game

I've been using this for a while, scope included, and only recently has
this actually had an impact. I thought the scoped component was broken
or something. Nope!

Honestly it's kind of funny and sells the bit. At the same time, it's an
RNG frustration that players probably wouldn't appreciate. This likely
wasn't impactful in extreme close range, since a 10 degree divergence is
not enough to really cause a shot to go wide within 7 tiles or so. But
it did make shooting over long distances sometimes a bit harder than
necessary.

Now I know why I somehow managed to nail an assistant in the dome
completely on accident despite aiming past him shooting someone
breaching the brig while scoped.

## Changelog
🆑
fix: The BR-38 no longer has a completely unintended accuracy malus
built in.
/🆑
2025-05-27 18:02:53 +02:00
necromanceranne
57a52ff13f Makes energy gun cells bomb proof. Makes the cells of indestructible energy guns also indestructible. (#91284)
## About The Pull Request

The cell contained within energy guns can sometimes be destroyed due
to...reasons. This makes it so that the cell is bombproof, and if the
gun is indestructible, also indestructible for good measure.

## Why It's Good For The Game

This is basically a constant problem that doesn't seem to ever go away
due to the fact that the cell is an actual physical object and not an
abstraction.

While it remains an actual object, lets just...make it not break and
brick an important item, yeah?

## Changelog
🆑
fix: If an energy weapon is indestructible, so is the cell within the
weapon.
fix: Cells inside of energy guns are bomb proof so as to not brick a gun
that somehow survives being bombed.
/🆑
2025-05-26 13:06:31 +00:00
jimmyl
53f84b5e51 minor deathmatch fixes (#91192)
## About The Pull Request
split personality may not roll if the target is in a deathmatch area
bolt of possession deals 25 brain damage if the target is in a
deathmatch area (8 hits for brain death)
removed a camera from the meta brig map
Disciple of Pete has 9 tile range signalers instead (that nobody uses
anyway lmao because you cant use them for minibombs or the other
grenades)

## Why It's Good For The Game

fixes #91171
fixes #90912
fixes #89212

## Changelog
🆑
fix: removed a camera from the deathmatch meta brig map, disciple of
pete has low-range signalers, deathmatch bolt of possession deals brain
damage instead, split personality may not roll in deathmatch
/🆑
2025-05-25 12:08:00 +03:00
MrMelbert
5261efb67f Re-refactors batons / Refactors attack chain force modifiers (#90809)
## About The Pull Request

Melee attack chain now has a list passed along with it,
`attack_modifiers`, which you can stick force modifiers to change the
resulting attack

This is basically a soft implementation of damage packets until a more
definitive pr, but one that only applies to item attack chain, and not
unarmed attacks.

This change was done to facilitate a baton refactor - batons no longer
hack together their own attack chain, and are now integrated straight
into the real attack chain. This refactor itself was done because batons
don't send any attack signals, which has been annoying in the past (for
swing combat).

## Changelog

🆑 Melbert
refactor: Batons have been refactored again. Baton stuns now properly
count as an attack, when before it was a nothing. Report any oddities,
particularly in regards to harmbatonning vs normal batonning.
refactor: The method of adjusting item damage mid-attack has been
refactored - some affected items include the Nullblade and knives.
Report any strange happenings with damage numbers.
refactor: A few objects have been moved to the new interaction chain -
records consoles, mawed crucible, alien weeds and space vines, hedges,
restaurant portals, and some mobs - to name a few.
fix: Spears only deal bonus damage against secure lockers, not all
closet types (including crates)
/🆑
2025-05-19 13:32:12 +10:00
necromanceranne
2f415a5735 {NO GBP} Reduces stamina damage from rubbershot by a single point per pellet. (#91119)
## About The Pull Request

Reduces rubbershot pellets from 11 stamina damage to 10 stamina damage.

## Why It's Good For The Game

So fun fact. Stamina crit threshold is particularly generous about when
it tips you over into stamina crit.

Fired from a combat shotgun, rubbershot would deal 99 stamina damage at
point blank. Resulting in you entering stamina crit if you didn't have
any armor at all.

By reducing this by exactly one point, this no longer happens. 

This is another PR I was reluctant to do but honestly, this change was
recent enough that I frankly do hold a lot more of the blame for it. A
few steps back isn't going to hurt anyone. These things still spew
damage at whatever you point them at.

"But Anne, what about rubbershot in riot shotguns!"

It did 66 stamina damage total. At 60 damage, you can still slow down
someone in a sec vest with a point blank shot. For the most part, it
will probably be completely unnoticeable for the riot shotgun. I don't
even know why it was an uneven number to be completely honest with you.
2025-05-16 16:52:07 -05:00
necromanceranne
9740ea8910 Makes it so that there is an actual tracer on the tesla cannon hitscan beam. (#90979) 2025-05-08 16:59:08 +02:00
SmArtKar
0f497229c3 Fixes detective's revolver not being able to misfire (#90995)
## About The Pull Request

Closes #90994

## Changelog
🆑
fix: Fixed detective's revolver not being able to misfire
/🆑
2025-05-05 14:44:24 +00:00
SyncIt21
455fe545e0 Part 4: Storage Improvements (#90783)
## About The Pull Request
- Address
https://github.com/tgstation/tgstation/pull/90476#discussion_r2051701283.
Makes pill bottle code cleaner
- Datumized some more storage values(monkey guncase toolbox & crafter
toolbox) making their init slightly faster
- Moved all standard storage subtypes(bags, boxes, lockboxes etc) that
is scattered across various files & folders in the codebase into their
respective files under `code/game/objects/item/storage` folder.
This means for e.g. if you want to see all boxes in the game you can
find them in `code/game/objects/item/storage/boxes` folder & don't have
to go looking for hidden subtypes in various module files or folders
where they were hidden away.
  Makes looking for stuff & modifying these storages much saner & easier

## Changelog
🆑
code: organized storage subtypes under the same files & folders
/🆑

---------

Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
2025-05-02 23:25:58 +02:00
Hatterhat
6a737c2618 Recharge magazine scaling (and a magazine grammar tweak) (#90750)
## About The Pull Request
Rechargeable magazines (e.g. those used in the CTF laser rifle and
nowhere else) now recharge faster based on `recharge_coeff` which is
directly based on what tier of capacitor is in the recharger.
Tweaks some grammar relating to what casing is ready at the top of a
magazine.
## Why It's Good For The Game
Upgrading a recharger should make this neglected magazine type good,
actually.
Also the grammar thing irked me.
## Changelog

🆑
qol: Shoving a rechargeable magazine into a recharger now has refill
speed scale with part tier/recharge efficiency. This probably doesn't
matter very much because no regularly-available gun uses rechargeable
magazines.
spellcheck: Examining magazines should no longer have two instances of
"The" prefixing a casing. Maybe. Probably.
/🆑

---------

Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
2025-05-01 00:03:09 +02:00
necromanceranne
1c3c50c9e9 DRAGnet; new sprite, new functionality (#90713)
## About The Pull Request


![image](https://github.com/user-attachments/assets/9e143b3c-3435-430b-a949-04a354a46688)

New sprites for the DRAGnet, coming alongside some functionaltiy
changes.

DRAGnets are now bulky, and do not fit in backpacks. They also cannot be
dual-wielded.

DRAGnet no longer have the trap snare functionality. You know, the
infamous bola bullet.

DRAGnets now have two functions; 
The first function is straight up a scatter disabler blast that does a
total of 55 stamina damage point blank (it's like, 5 less than what it
did before).

The second function is a single bolt that, when it hits a living mob,
dealing 30 damage and staggering it briefly slowing it down. It also
places down a wide net of transportation fields around the target, much
like the net functionality does on live (but that's attached to the
scatter function, not the single bolt)


![image](https://github.com/user-attachments/assets/336585d3-924e-4d4c-9c29-c16e7de88990)

### Misc Changes

DRAGnets now cost more form cargo, at 3600 credits. (This barely matters
for departmental orders)

## Why It's Good For The Game

The sprite is ancient. Like nearing two decades old ancient. I believe
the INTENTION was this thing


![a3ec8cabc5d93992168a57ad48d21996d037e67f_00](https://github.com/user-attachments/assets/bc29c2ad-dc93-4503-83e3-8997f4e625c1)

It didn't really work out that way.


![image](https://github.com/user-attachments/assets/db2bcc94-902f-476f-8ed4-b90883519bc9)

Either way, the new sprite is cool and more unique in my opinion.
Fitting its status as an energy weapon.

As for balance changes; I've wanted to do this for a very long time but
put it off a lot. I think this is about the most moderate approach I
have. It otherwise functions pretty much as expected, maintaining the
cool niche functionality while exorcising the problem bits; one-handed
energy shotgun bit, and the bola shot bit.

I think I've spent at least the last...four or so years hammering on
about the horror that is this gun for balance? And even when it was
seeing more widespread use from people who recognized how bullshit it
really was, I didn't really want to get rid of the bit I actually quite
liked, which was the teleportation field.

I'm happy with this version.

## Changelog
🆑 NecromancerAnne (Code, Mild Sprite Edits) Michiyamenotehifunana
(Sprites)
image: Replaces the decrepit DRAGnet sprite with something newer and
more interesting.
balance: Completely reworks the DRAGnet. They are now bulky energy guns.
balance: Snare is now a single shot bolt that deals 30 stamina force,
staggers the target and lays out a net of teleportation fields that can
transport anyone standing on them for too long to a DRAGnet beacon.
balance: Net has been replaced with a scattershot disabler round. 
/🆑
2025-04-30 13:31:39 +01:00
necromanceranne
c1c6c5d5b9 Significantly tones down the embed probability of flechette rounds (#90784) 2025-04-29 13:53:27 +02:00
Roxy
66be0ce547 Fix runtime related to pea bullets (#90862)
## About The Pull Request

The peashooter and probably gatfruit runtimes every time a bullet hits
because it tries to `&` a datum and a number

## Why It's Good For The Game

Bug fix

## Changelog

🆑
fix: fixed a runtime related to pea bullet impacts
/🆑
2025-04-28 18:01:08 +02:00
necromanceranne
02c5d22917 You can now load the grenade launcher on the m-90gl (#90815)
## About The Pull Request

Changes a attackby() call into an item_interaction() call in the M-90gl
code.

Fixes https://github.com/tgstation/tgstation/issues/90812

## Why It's Good For The Game

Most likely broke during a refactor.

## Changelog
🆑
fix: The grenade launcher of the M-90gl can be reloaded once again.
/🆑
2025-04-25 18:36:47 +00:00
BurgerLUA
51004f881d Fixes a taser runtime. (#90806)
(Should the QDELING define be nullchecked or left alone?)

## About The Pull Request

Fixes a taser runtime.

## Why It's Good For The Game

Fixes a taser runtime.

## Changelog

🆑 BurgerBB
fix: Fixes a taser runtime.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2025-04-25 15:02:47 +00:00
Ghom
339616ae78 You can now interact with held mobs beside wearing them (feat: "minor" melee attack chain cleanup) (#90080)
## About The Pull Request
People can now pet held mothroaches and pugs if they want to, or use
items on them, hopefully without causing many issues. After all, it only
took about a couple dozen lines of code to make...

...Oh, did the 527 files changed or the 850~ lines added/removed perhaps
catch your eye? Made you wonder if I accidentally pushed the wrong
branch? or skewed something up big time? Well, nuh uh. I just happen to
be fed up with the melee attack chain still using stringized params
instead of an array/list. It was frankly revolting to see how I'd have
had to otherwise call `list2params` for what I'm trying to accomplish
here, and make this PR another tessera to the immense stupidity of our
attack chain procs calling `params2list` over and over and over instead
of just using that one call instance from `ClickOn` as an argument. It's
2025, honey, wake up!

I also tried to replace some of those single letter vars/args but there
are just way too many of them.

## Why It's Good For The Game
Improving old code. And I want to be able to pet mobroaches while
holding them too.

## Changelog

🆑
qol: You can now interact with held mobs in more ways beside wearing
them.
/🆑
2025-04-23 20:18:26 +00:00
SyncIt21
9bd45e2f3a Part 3: Storage Improvements (#90476)
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2025-04-20 12:02:29 +00:00
John Willard
2ef9be35d9 Constructs now have their respective factions (#90690)
## About The Pull Request

Holy constructs are now part of a new Holy faction, that all Chaplains
get once they choose a sect.
Wizard constructs are now part of the Wizard faction
Juggernaut's Gaunlet Echo spell now respects factions (so ignores cult
as cult, wizards as wizard, and their creator as holy)


https://github.com/user-attachments/assets/e56f958d-fffa-4534-8b39-a95f9d160865

## Why It's Good For The Game

Makes constructs less likely to friendly fire and makes holy constructs
able to use their spells to fight Cult.

## Changelog

🆑 Ezel/Improvedname, JohnFulpWillard
fix: Constructs now have their proper factions, so Wizard constructs
can't hit Wizard Apprentices.
fix: Juggernaut's Gauntlet echo spell now respects factions.
/🆑
2025-04-19 20:13:12 +02:00
MrMelbert
d1d848d83f Fixes Russian Roulette by refactoring the gun to not be an affront to god (#90426)
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2025-04-15 18:00:43 +00:00
necromanceranne
5306ca7934 Combat shotgun changes (#90475) 2025-04-15 12:11:40 +02:00
SmArtKar
6b83a91956 Revert "Refactor for storage initialization & organization (#89543)" (#90332)
## About The Pull Request

Reverts the storage initialization refactor and all subsequent related
PRs.
The original PR is below our standards both for code quality and
testing, and is majorly flawed at its core. This has been discussed with
other maintainers and headcoder(s?) over on discord. A lot of changes
from the PR could be brought over later, but in its current state it
should not have been merged.

- Closes #90322
- Closes #90313
- Closes #90315
- Closes #90320
- Closes #90312
- Closes #90344

## Why It's Good For The Game

This PR causes a series of major issues which cannot be resolved without
either completely rewriting a lot of the original PR, or bad code.
Not matching our standards is grounds for not merging a PR, and the fact
that a PR should not have been merged is a reason for a revert.

## Changelog
🆑
fix: Fixed a series of storage-related bugs caused by a refactor PR.
/🆑
2025-03-30 21:30:31 +00:00
Ben10Omintrix
7c81098d33 Cain & Abel (new mining loot) (#89455)
## About The Pull Request
adds the Cain & Abel to the lootpool of the colossus!

![daggerpic](https://github.com/user-attachments/assets/d0e0c5f9-bace-4010-854a-3ea65e764499)

these are a set of angelic twinblades bound together by some chains. The
long chains allow u to attack mobs from a distance (2 tiles max) and at
very FAST speed, and come with a few new mechanics:

-Attacking a mob with the cain and abel grants you a special whisp that
follows your character. these whisps empower ur next melee attacks u can
collect a maximum of up to 6 whisps, (their bonuses stack), after which
they reset. If u get hit by a mob once, you'll lose ur whisps (and ur
melee bonus), so ull have to regain them by rebuilding up ur combo. u
can also choose to sacrifice ur whisps by firing them at mobs (by right
clicking them) for some hefty damage (this again means u'll lose them)



https://github.com/user-attachments/assets/0a1738db-9fa4-4226-ac80-334f5e97cfa5

-u can also choose to hurl one of ur daggers at enemies, there's 2 throw
modes u can toggle between by pressing Z while holding ur weapon.
1- On launch mode, u can throw one of ur daggers at a tile, afterwhich
the chains will rapidly pull u towards it, making for some cool getaways
in tense situations. this puts throw mode on a 7 second cooldown
2- On crystal mode, u can hurl a dagger at an enemy or at a tile. Spiked
crystals will errupt on nearby floors, dealing some damage to nearby
mobs and stunning them for 2 seconds (bosses dont get stunned tho). puts
throw mode on a 15 second cooldown


https://github.com/user-attachments/assets/665b9cf4-c5a1-4263-a36b-86e3f35d0ae5

-Lastly is the swing ability. This will swing ur daggers around u,
dealing AOE damage to nearby mobs, and makes u block all melee attacks,
tentacle attacks, and deflect incoming projectile attacks (could for
example be used to deflect the colossus' shotgun blast back to it). ull
only block attacks while the animation is active, which lasts a good
1.75 seconds, and is at a 20 second cooldown.



https://github.com/user-attachments/assets/073e5324-af5b-45ab-912e-5bcaa13fc728

Here's a short clip of me using them to fight a colossus and a bubblegum
https://www.youtube.com/watch?v=kp5Hu16dHPQ&ab_channel=Kobsa

## Why It's Good For The Game
adds a new fun weapon with a few deep mechanics to the game. also makes
taking down colossi alot more rewarding.

## Changelog
🆑
add: adds the cain and abel to the colossus lootpool!
/🆑
2025-03-29 04:28:51 +01:00
Waterpig
d3d3a12540 The big fix for pixel_x and pixel_y use cases. (#90124)
## About The Pull Request

516 requires float layered overlays to be using pixel_w and pixel_z
instead of pixel_x and pixel_y respectively, unless we want
visual/layering errors. This makes sense, as w,z are for visual effects
only. Sadly seems we were not entirely consistent in this, and many
things seem to have been using x,y incorrectly.

This hopefully fixes that, and thus also fixes layering issues. Complete
1:1 compatibility not guaranteed.

I did the lazy way suggested to me by SmArtKar to speed it up (Runtiming
inside apply_overlays), and this is still included in the PR to flash
out possible issues in a TM (Plus I will need someone to grep the
runtimes for me after the TM period to make sure nothing was missed).
After this is done I'll remove all these extra checks.

Lints will probably be failing for a bit, got to wait for [this
update](4b77cd487d)
to them to make it into release. Or just unlint the lines, though that's
probably gonna produce code debt

## Why It's Good For The Game

Fixes this massive 516 mess, hopefully.

closes #90281

## Changelog
🆑
refactor: Changed many of our use cases for pixel_x and pixel_y
correctly into pixel_w and pixel_z, fixing layering issues in the
process.
/🆑

---------

Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
Co-authored-by: SmArtKar <master.of.bagets@gmail.com>
2025-03-28 14:18:45 +00:00
SyncIt21
0f57a23830 Refactor for storage initialization & organization (#89543)
## About The Pull Request
A Huge chunk of changes just comes from moving existing storage code
into new files & seperating `atom_storage` code into its own subtype
under the already existing `storage/subtypes` folder.

With that the changes in this PR can be organized into 3 categories.

**1. Refactors how `/obj/item/storage/PopulateContents()` initializes
storages**
- Fixes #88747 and every other storage item that has a similar variant
of this problem

The problem with `PopulateContents()` is that it allows you to create
atoms directly inside the storage via `new(src)` thus bypassing all the
access restrictions enforced by `/datum/storage/can_insert()` resulting
in storages holding stuff they shouldn't be able to hold.

Now how this proc works has been changed. It must now only return a list
of items(each item in the list can either be a typepath or a solid atom
or a mix of them in any order) that should be inserted into the storage.
Each item is then passed into `can_insert()` to check if it can fit in
the storage.

If your list contains solid atoms they must be first moved
to/Initialized in nullspace so `can_insert()` won't count it as already
inserted. `can_insert()` has now also been refactored to throw stack
traces but explaining exactly why the item could not fit in the storage
thus giving you more debugging details to fix your stuff.

A large majority of changes is refactoring `PopulateContents()` to
return a list instead of simply creating the item in place so simple 1
line changes & with that we have fixed all broken storages(medical
toolbox. electrical toolbox, cruisader armor boxes & many more) that
hold more items they can handle

**2. Organizes initialization of `atom_storage` for storage subtypes.**
All subtypes of `/obj/item/storage` should(not enforced) create their
own `/datum/storage/` subtype under the folder `storage/subtypes` if the
default values are not sufficient. This is the 2nd change done across
all existing storages

Not only does this bring code cleanliness & organization (separating
storage code from item code like how `/datum/wire` code is separated
into its own sub folder) but it also makes storage initialization
slightly faster (because you are not modifying default values after
`atom_storage` is initialized but you are directly setting the default
value in place).

You now cannot & should not modify `atom_storage` values inside
`PopulateContents()`. This will make that proc as pure as possible so
less side effects. Of course this principle is not enforced and you can
still modify the storage value after `Initialize()` but this should not
be encouraged in the future

**3. Adds support for automatic storage computations**
Most people don't understand how `atom_storage` values work. The comment
here clearly states that

55bbfef0da/code/game/objects/items/storage/toolbox.dm (L327-L329)
Because of that the linked issue occurs not just for medical toolbox but
for a lot of other items as well.

Which is why if you do not know what you doing, `PopulateContents()` now
comes with a new storage parameter i.e. `/datum/storage_config`

This datum allows you to compute storage values that will perfectly fit
with the initial contents of your storage. It allows you to do stuff
like computing `max_slots`, `max_item_weight`, `max_total_weight` etc
based on your storage initial contents so that all the contents can fit
perfectly leaving no space for excess.

## Changelog
🆑
fix: storages are no longer initialized with items that can't be put
back in after taking them out
refactor: storage initialization has been refactored. Please report bugs
on github
/🆑
2025-03-23 22:20:23 +01:00
Bloop
1b52f83ff2 Makes pistol whipping work properly for guns that have hold at gunpoint disabled (#90107)
## About The Pull Request

Just shifts some logic around so that hold gunpoint being disabled on a
gun does not cause it to fire when pistol whipping.

## Why It's Good For The Game

Fixes an unintended interaction

## Changelog

🆑
fix: combat rmb will no longer fire the gun at the same time as pistol
whipping for certain guns
/🆑
2025-03-20 14:45:20 +02:00
MrMelbert
d8455d6636 Makes some bullet embeds bullet embeds (#90104)
## About The Pull Request

Subtyping bullet for futureproofing.

(These specific bullets didn't get `stealthy_embed`)

## Changelog

🆑 Melbert
fix: Some niche bullets are now hidden when embedded
/🆑
2025-03-19 19:41:09 +00:00
necromanceranne
df3d6a31ca Reworks flechette into a AP pellet round that does mostly wounds. Adds the Donk Co. 'Donk Spike' flechette round as a surplus round. (#89972)
## About The Pull Request


![image](https://github.com/user-attachments/assets/a9932294-5355-4a75-b64d-cd8350092c21)

Reworks flechette shells from... whatever it was that they were supposed
to be before into an AP pellet round that primarily focuses on wounding
power and embedding power over specifically dealing direct damage (16 as
opposed to buckshot's 30). Useful if you want to maim as a priority.

You can print flechette once science researches Exotic Ammunition.
Nuclear Operatives also get flechette rounds as a Bulldog Shotgun
magazine choice priced as a basic ammunition type.

In addition, you can also acquire Donk Co. 'Donk Spike' flechette
shells. These shells fire plastic darts! They can be purchased by
Nuclear Operatives as a surplus option for Bulldog shotguns. 7 magazines
for the price of one.

Donk Co. 'Donk Spike' flechette was intended to be an alternative to the
standard flechette but failed spectacularly once it hit the market. Due
to a lack of confidence in the product, Donk Co. 'Donk Spike' flechette
now appears in maintenance loot as potential trash, as Donk Co. dumped
it in the millions into various landfills across the sector.

You can also print it if you find the tech in a BEPIS tech disk. 

Does it work? Why don't you take a chance on Donk and find out?

## Why It's Good For The Game

I'm not sure if the person who made the original flechette actually
understood what each of the variables was supposed to be doing or how
they actually worked. A bullet with an excessively negative standard
wound power (for a pellet projectile) and low damage, but then an
excessively high bare wound bonus (for a pellet projectile). But then
some ricochet variables without ricochet being assigned to the bullet...
and a demolition mod on a round meant to be weak against armor?

Nonsensical.

So I've reworked it into two unique rounds. The first serving a
practical purpose and becoming an AP option when the crew typically
begins seeing those options open up (such as x-ray lasers). The same can
be said for nukies, who love AP options, but one focused on lasting
wounds is handy too for keeping someone down. There isn't a milspec
option; so for nukies, this isn't doing nearly as much upfront damage as
buckshot or slugs. You buy this when you want someone not to be
recovered with a LOT of medical attention.

The second being more tongue in cheek, but also giving a surplus option
for Bulldog shotguns, which I think are having ammunition problems even
still. Surplus ammunition might slowly roll out for all the guns, but
I'm mostly focusing on the ones that have some slight price disparity
for total shots compared to other weapons. Also, shooting people full of
plastic is kind of funny.

## Changelog
🆑
balance: Flechette has been reworked into an AP pellet round that embeds
and wounds, but has less actual damage to buckshot. You can print it
once Exotic Ammunition has been researched. Also available to Nuclear
Operatives.
add: Donk Co. 'Donk Spike' flechette rounds. No longer offered by Donk
Co. It can sometimes shows up in trashbins and dumpsters. And operatives
can buy it in bulk if they really feel like it.
/🆑

---------

Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2025-03-19 08:01:22 +01:00
necromanceranne
8df0c5851d Partially reverts #89619, where I partially reverted #87936; Puts back the mining and damage AOE damage on Mech PKA, but improves the standard modkits as well (#89993)
## About The Pull Request

In #89619, I removed the mech PKA's mining AOE and reduced the damaging
AOE to a fraction of the damage.

I have restored both of these aspects, but I have also applied this
change to the standard PKA's mining and damage AOE. I have also included
the mob biotype limitations as well.

AOE modkits take 10% capacity, now allowing miners to use them in more
setups. However, they conflict with one another. You can only have one
AOE mod until you can get the dual AOE mod from tendrils.

The AOE damage/mining effect is now a 2 tile effect rather than 1 tile
effect.

## Why It's Good For The Game

My intent in the previous PR was to bring mech PKA's down to standard
mining limitations. So, why not improve those standards for everyone
instead? The new state of mining expects you to be dealing with a lot of
mobs at once. Even small vents can, on occasion, decide to spit out
several goliaths back to back. That's a lot of mobs with a lot of
health.

Miners need AOE options more than ever. They have very little that are
actually meaningful, sadly. So my intent here is that this should be an
expectation for our miners to be seeking out and can fit into their
current, standard gameplay.

Certainly I've only felt like shit having to sacrifice a damage or
cooldown mod for an AOE mod, only to get a very minor amount of damage
splash for my efforts. That, and the radius doesn't usually impact most
mobs as they spawn and attack from awkward angles or distances from one
another where they are JUST out of reach of one another. Trying to use
the splash to hit multiple enemies is often not worth it compared to
just hitting one enemy at a time with a lot of damage.

So, let's just go with the standard of 'Good AOE is fundamentally needed
now' and worth from that premise.

## Changelog
🆑
balance: Mech PKA now once again mines turfs and does full damage on its
AOE explosion (still only hitting mining mobs).
balance: The standard PKA AOE mods are now by default 10% capacity. But
they cannot be used with one another.
balance: The standard PKA offensive AOE mod now does the PKA's full
damage in its AOE.
balance: Mining AOEs will affect everything within a 2 tile radius
around the point of impact, up from a 1 tile radius.
/🆑

---------

Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2025-03-19 07:57:52 +01:00
SmArtKar
072fe6fbd1 Removes duplicate examine proc in polaroid code and fixes a missing space in BR examine (#90028)
## About The Pull Request

Triggered my OCD, polaroids had a duplicate examine override and battle
rifles had a missing space between sentences in examine_more.

## Changelog

🆑
spellcheck: Fixes a missing space in battle rifle's examine text
/🆑
2025-03-17 11:36:36 +01:00