Commit Graph

1769 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
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
Fhaxaris
5648ab80b5 Adjusts the NT BR-38 sprite (#92007) 2025-07-09 13:04:05 -04: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
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
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
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
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
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
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
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
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
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
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
Hatterhat
830131bcb1 [NO GBP] Generalizes semicd to fire_cd and applies it to burst fire (#89929)
## About The Pull Request
Title. Firing a weapon in burst now triggers fire delay based off the
fire cooldown variable, which was reused from the now-renamed `semicd`.
This shouldn't affect anything, but if this does, uh, my bad.

## Why It's Good For The Game
My previous PR, tgstation/tgstation#89634, separated fire delay and
burst delay for a possible avenue of balance for gun design (e.g. fast
burst gun with long delays between bursts). I didn't realize burst
didn't set the cooldown, though, so... now it's here. My bad.

## Changelog

🆑
fix: Burst-firing weapons now respect their fire delay, in the event
that their fire delay is longer than click cooldown. If your local
burst-fire weapon starts to feel weird because of this, please submit an
issue report.
/🆑

Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
2025-03-12 19:06:20 -06:00
SmArtKar
50ed8cbb52 Fixes most mining mobs being unaffected by additional damage against them (#89682)
## About The Pull Request

#89619 introduced a MOB_MINING biotype which allows us to get rid of
jank that the ismining() macro was. This fixes soulscythes, cursed
katanas, mining bombs, strongarm implants and junk hunter bullets not
getting their buffs against a good chunk of mining fauna.

Closes #89597

## Why It's Good For The Game

You'd expect items explicitly designed against fauna to actually fare
well against it.

## Changelog
🆑
fix: Fixed most mining mobs being unaffected by additional damage
against them
/🆑
2025-03-07 19:20:17 -08:00
Hatterhat
0ff75d301e SKS interaction tweaks and bolt-action rifle interaction fix (#89760)
## About The Pull Request
The SKS was repathed to the bolt rifle subtype in order to make it not
eject its entire magazine, and to make it act more like its real
counterpart (e.g. you have to keep the bolt open/locked back in order to
load more ammo).

Also fixes the issue where bolt-actions' interaction blocking was
non-functional due to being moved to a different proc, so now you need
to open the bolt on bolt-actions (and now the SKS) to load ammo.)

## Why It's Good For The Game
Ejecting your entire magazine on-use kind of sucked. The
bolt-open-to-load thing is for funsies.

## Changelog

🆑
fix: The Sakhno SKS no longer ejects its entire internal magazine upon
interaction. To facilitate this, it now requires the bolt to be open
like its bolt-action contemporaries in order to load ammunition.
fix: You can no longer force ammunition into Sakhno precision rifles and
other bolt-action-likes through a closed bolt.
/🆑

---------

Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
2025-03-07 19:49:56 +01:00
SmArtKar
7f15e11993 Adds a new syringe gun mode and improves foam darts. (#89510)
## About The Pull Request

This PR implements multiple new features:

Foam darts now can stick to people as long as their cap isn't removed.
Riot foam darts have a chance to jostle when you move with one stuck
inside of you, dealing a bit of stamina damage from the weight stuck to
your limbs.

Syringe guns received a second "low power" mode, toggleable with in-hand
right click. In this mode, syringes fired will embed into their target
and slowly leak their reagents instead of instantly delivering them.
Thankfully, they can be plucked out pretty quickly.

You can also insert syringes into uncapped (screwdriver-ed) foam darts
(similarly to pens) to achieve the same result, allowing you to get a
bootleg low-efficiency syringe gun.

Additionally, I fixed/cleaned up some embedding issues/code which I
found while coding this.

## Why It's Good For The Game

This allows players to explore new funny interactions between items and
chems, as we don't have a reliable slow release mechanism aside from IV
drips currently. And foam darts embedding it just (mostly) harmless
fluff, if someone figures out a way to cause havoc with it then I'll be
very proud of them (someone totally will).

## Changelog
🆑
add: Foam darts now stick to people when they have their cap on, riot
foam darts also can passively deal a bit of stamina damage when you move
with one.
add: Syringes can be inserted into foam darts, making them embed and
slowly leak their reagents into their victim.
add: Syringe guns can be toggled (with right click) between high power
and low power modes, former being their normal functionality and latter
making syringes embed and slowly leak their contents.
fix: Fixed projectiles sometimes not embedding when they should've
code: Cleaned embedding code up
/🆑
2025-03-01 22:52:19 +11:00
Hatterhat
06f4a78b58 Separates fire delay into burst delay and fire delay (#89634)
## About The Pull Request
Guns now have two variables affecting delay between shots;
`burst_delay`, which affects how fast projectiles are fired *in* a burst
(assuming the weapon is burst-capable) and `fire_delay`, which affects
how long a gun cannot fire after shooting.

Assuming that all fire delays for automatic weapons were actually meant
for controlling burst delays, variables have been changed accordingly.

## Why It's Good For The Game
Separating burst delay and fire delay means burst-firing weapons can now
be balanced both on "how fast can I throw bullets downrange" *and* "how
long do I have to wait between bursts" instead of having one variable
affecting both.

## Changelog

🆑
code: Guns now have burst delay and fire delay variables instead of fire
delay affecting both. If a weapon's burst feels off, please submit an
issue report.
/🆑

---------

Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
2025-02-26 12:52:50 +01:00
necromanceranne
4972c88044 Partially reverts #87936; the mech PKA AOE only harms mining mobs, reduces the damage and increases the attack cooldown (#89619) 2025-02-25 12:01:17 +01:00
SmArtKar
894d21e64f Improves hitscan projectile chunking (#89616)
## About The Pull Request

Hitscan projectiles that run out of dedicated tick time before they hit
anything abort their movement, ensuring that firing an emitter beam into
space won't cause horrible lag. However, most hitscans also have icons
and have visible (albeit unanimated) movement in such a case, making it
look like projectile code is exploding as tracers appear only after a
rather visible and tangible projectile hits its target.

This PR resolves the issue by making hitscans "chunk" their trails in
such cases, ensuring that they always look like actual hitscans. Video
below has an artificial speed cap on hitscans, to showcase how it'd look
during extreme lag.


https://github.com/user-attachments/assets/eeac034d-d08e-45b0-b7d2-8589376f1c7d

Also some minor hitscan code improvements because I can.

## Changelog
🆑
fix: Hitscan projectiles like emitter beams should look less weird
during extreme lag spikes
/🆑
2025-02-23 10:14:24 +01:00
necromanceranne
0619c2a21c Replaces the surplus rifle from the gang mode era with the Sakhno SKS semi-automatic rifle (#89453)
## About The Pull Request

No. Not the Sakhno M2442 Army. It isn't the Sakhno Precision Rifle. I'm
talking about the dinky shitty rifle you find in the snow resort away
mission. The one with a 3 second cooldown between shots and fires 10mm.

The Sakhno SKS semi-automatic rifle fires at the same rate as standard
semi-automatic weapons, and fires .310 Strilka caseless rounds. It has a
x0.5 damage multiplier (so does 30 damage rather than 60 damage per
shot), and has 10 rounds in its internal magazine. Stripper clips come
in sets of 5, so you'll need two clips to fully load the rifle.


![image](https://github.com/user-attachments/assets/5de3752f-a664-4c8f-8d44-9f3ea6a3d8d1)

You can get the Chekhov version of the weapon from the resort, but you
can also acquire a parts kit from the black market. Put together with a
stock and receiver, you get yourself a (empty) fresh new SKS. You can
also acquire the ammo via the black market as well.


![image](https://github.com/user-attachments/assets/d5af5abd-3dba-463d-81dd-402291f534b6)

## Why It's Good For The Game

This gun is a travesty. It is so ancient that it can be carbon dated to
around when our codebase was moved to Github. It actively has the worst
statistic of any weapon in the game. And it exists in this strange
half-existence in a ruin as, I guess, some purpose that is barely
understood or remembered today.

The irony of it being called Chekhov's gun yet finding no functional use
in the map is either the joke itself, or a failing of the map.

Anyway, so I decided to go all out and replace it with an SKS. Because I
figured someone would like that.

## Changelog
🆑
add: Replaces the 10mm semi-automatic surplus rifle with the Sakhno SKS
semi-automatic rifle.
add: You can acquire a SKS parts kit from the black market.
/🆑
2025-02-21 14:25:42 +00:00
necromanceranne
b61a67b7c6 Gives the Sakhno Precision Rifle and Sakhno M2442 Army a wooden finish rather than olive drab (#89556) 2025-02-20 03:22:52 -05:00
SmArtKar
2b44bffdeb Adds The Liberator: Doorhickey Corporation's brand new gun (#89495)
## About The Pull Request

The Liberator is a brand-new 3D printable gun, holding a single 10mm
shot in it's barrel. It has a damage multiplier of x0.5, dealing 20
damage per shot. However, shooting someone point blank gives it an x2
modifier, and shooting someone while holding them at gunpoint adds
additional x1.5 multiplier.


https://github.com/user-attachments/assets/b27adf1a-5b02-4817-90ad-2ba922cc6bf9

They can be printed for dirt cheap 3 sheets of plastic and 2 sheets of
iron from an autolathe. However, as a downside, whenever you're firing a
liberator you're risking it blowing up in your hands, potentially
wounding you! Reloading is also a bit tricky, since you need to unscrew
the barrel before placing the bullet in, and screwing it back on.

In order to print them, you'll need to find a (mildly rare) disk in
maintenance and upload the design to an autolathe. You also can find a
whole gun, albeit at a lower chance.

## Why It's Good For The Game

Funny gun that can be used for some gimmicks, not too overpowered but a
nifty tool for assistants. Can be countered by a well timed baton, or a
shove if your opponent is next to a wall.

## Changelog
🆑
add: Added a new 3D printable gun "The Liberator", you can find the gun
itself or its design disc in maintenance tunnels.
/🆑
2025-02-16 23:46:29 +00:00
_0Steven
5e186df1ac Fix emotion mask reskinning (#89389)
## About The Pull Request

Sooooo I recently noticed emotion masks wouldn't actually change their
skin upon reskinning, even though the reskinning went through
successfully.
Looking into it, I found it's because in a recent pr we added an
`update_appearance()` call to the reskinning procs, while masks reset
their `icon_state` during that line of calls:

80d3d8a230/code/modules/clothing/masks/_masks.dm (L53-L55)
Meaning, the emotion mask would never actually reskin properly.

So in this pr we instead make this `update_icon_state()` proc prioritise
`base_icon_state`, and make reskinnable masks use
`unique_reskin_changes_base_icon_state = TRUE`.
We also change a similar odd implementation of this in
`/obj/item/gun/ballistic/update_icon_state()`:

80d3d8a230/code/modules/projectiles/guns/ballistic.dm (L203-L208)
To just use `unique_reskin_changes_base_icon_state = TRUE` instead of
awkward usage of `unique_reskin[current_skin]` on an otherwise
duplicated line.

This fixes our issues.
## Why It's Good For The Game

Good if stuff works
## Changelog
🆑
fix: Emotion mask reskinning works properly
/🆑
2025-02-15 10:50:01 +01:00
necromanceranne
ad5a70eac6 Refactors gun repair and maintenance. Gun maintenance kits; available in cargo or the security equipment vendor (#89205)
## About The Pull Request

Misfire chance, gun jamming (currently only on boltaction rifles) and
integrity repairs are now handled by gun maintenance kits. Using a kit
on a gun resets any misfire chance or jamming, and restores the weapon's
integrity back to full.

You can find gun maintenance kits in security equipment vendors, or
order a crate of them from cargo.

You can also make a maint version to retain the improvised nature of the
previous cleaning functionaltiy.

## Why It's Good For The Game

Firstly, clearing misfires was always a little confusing for most
players, as it required a bolt of cloth to fix. That's really on me for
making that as confusing as possible.

We ended up with multiple firearm degradation mechanics, so
consolidating their restoration makes it easier for future code
maintenance.

I disliked that the kits existed but were mostly only for the sake of an
extremely niche interaction. And that interaction was, at best, kind of
niche. Expanding out their use to gun maintenance generally is honestly
better design.

## Changelog
🆑
refactor: Gun maintenance is now consolidated into a single item, the
gun maintenance kit, rather than multiple different item interactions.
It is handled on the maintenance kit itself, and not in gun code.
qol: You can order maintenance kits from cargo, and get some out of the
security equipment vendor. Helpful if someone spilled acid onto your
disabler. You can also make a makeshift one from maintenance trash.
/🆑
2025-02-06 18:30:13 -08:00
Penelope Haze
d0a7f955f8 Fix various issues with names in string interpolation (#89246)
## About The Pull Request
Commit messages should be descriptive of all changes.
The "incorrect `\The` macro capitalization" was intentional when it was
added, but as far as I know TG says "the supermatter" rather than "The
Supermatter," so it's incorrect now.
This is completely untested. I don't even know how you'd go about
testing this, it's just a fuckton of strings.
Someday I want to extract them and run NLP on it to catch grammar
problems...

## Why It's Good For The Game
Basic grammar pass for name strings. Should make `\the` work better and
avoid cases like `the John Smith`.
2025-01-29 17:46:03 +01:00
Penelope Haze
4c2a76ede3 Fix a large number of typos (#89254)
Fixes a very large number of typos. A few of these fixes also extend to
variable names, but only the really egregious ones like "concious".
2025-01-28 22:16:16 +01:00
high-speedspin-cycle
4025b42a84 Fix kinetic accelerator cooldown mods becoming permanent (#88883)
## About The Pull Request

As described in issue #87019, the recharge time reduction given by
proto-kinetic accelerator cooldown modkits can become permanent,
resulting in a PKA with reduced cooldown without any mod capacity cost.
This PR ensures the recharge time is calculated based on the cooldown
kits actually installed, and recalculated whenever one is added or
removed.

## Why It's Good For The Game

Fixes #87019.

## Changelog
🆑
fix: Fixed PKA cooldown mods becoming permanent
/🆑
2025-01-15 13:12:05 +01:00
jimmyl
edc0a30893 MMIs in an odysseus get the medhud, medical beamgun works properly (#88891) 2025-01-08 22:44:49 +01:00
StaringGasMask
e43834548e Buffs the tesla cannon and makes it hitscan (#88929)
## About The Pull Request

The tesla cannon now shoots hitscan lightning bolts instead of the
extremely weak tesla orbs.
The damage of these bolts is 15, 5 of which is raw BURN damage, and 10
that comes from a shock, in a similar fashion to the 5 shock damage the
old iteration of the projectiles did.

## Why It's Good For The Game

(Hopefully) Makes one of the worst anomalocked items available into a
decent weapon that can compare, and possibly surpass the much more
widely available laser carbine.
For reference, this is hitscan, deals 50% more damage, but has 7 less
shots in the magazine, which I consider a fair gain due to the anomaly
core used.
Aditionally, I kept the functionality of dealing less damage to people
without full body insulation (which was the idea behind the shock
damage), although now it's no longer full immunity to this gun.

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑
balance: The tesla cannon now fires hitscan lightning bolts with buffed
damage to non-insulated targets.
balance: Flux anomalies now have a limit of 5 per round, instead of 8.
/🆑
2025-01-09 07:08:34 +11:00
Hatterhat
6f10dc6bd8 Even More Magazine Miscellany - Pen Interactions, Stripes, Descriptions (#88930)
## About The Pull Request

![image](https://github.com/user-attachments/assets/dd4d2935-de64-4a23-8789-7ca17fe2d488)
The original purpose of this PR was to extend the previous Magazine
Miscellany PR by adding the ability to recolor magazine indicators if
they had a defined icon. This functionality is present by using a pen on
a magazine that has a defined ammo band icon state.

This PR also further standardizes magazines with different ammo types by
using a define to append their description and magazine color for AP
ammo, hollow-points, and incendiary ammo.

This PR also _also_ gives ammo indicator bands to the magazines for the
Stechkin APS and C-20r. And also gives descriptions to every magazine so
they're not using a placeholder that mentions error signs anymore. Each
description is roughly in the format of "caliber, suitable for gun". Not
sure if I should standardize magazine names to be "caliber and special
ammo type" - the only outlier I can think of right now for that would be
the 7mm ammo boxes for the L6.

## Why It's Good For The Game

Ammo stripes are neat, functionally, so changing the stripes on
magazines in case someone chooses to reload spent mags with autolathe
ammo is probably nice as a QoL thing. Descriptions that aren't
placeholders are pretty cool too.

## Changelog
🆑
add: Magazines with defined ammo bands can now have their color changed
with a pen, in case you're reloading spent magazines or speedloaders
with different ammunition and want to change magazine colors to be
appropriate.
qol: C-20r magazines and Stechkin APS magazines now have ammo band
support.
qol: Standardized some descriptions for AP, HP, and incendiary
magazines.
/🆑

---------

Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
2025-01-08 11:57:19 +11:00
Hatterhat
81e1b149ee Magazine Miscellany (and a very small tidbit of gun examine QoL) (#88889)
## About The Pull Request
- Makarov magazines no longer have a placeholder description from the
base type.
- Standardized pistol magazines' descriptions and extended descriptions
for ammo types.
- Repathed the gangs-era surplus rifle's magazines (these still exist?
wow) from m10mm/rifle to /sr10mm so they no longer fit in Ansems.
- Ammo counts from examined guns are now bolded to be slightly easier to
notice at a glance.
- Magazines now show ammo count on a new line.

![image](https://github.com/user-attachments/assets/8a30a631-24fb-4d23-b2ca-895bfe24cbc3)


## Why It's Good For The Game
Makarov description being an obvious placeholder bugged me and then
things got out of scope.
The bold ammo count thing is really small but it might come in handy for
someone? Possibly?

## Changelog
Surplus rifle changes not mentioned in changelog because it's
unobtainable in-game and also just really bad as a gun in general.
🆑
qol: Examining a gun or magazine now shows the ammo capacity in bold.
spellcheck: Standardized pistol magazine descriptions, fixing Makarov
magazines having a placeholder description.
/🆑

---------

Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
2025-01-06 03:22:43 +01:00