## About The Pull Request
This PR adds the laser carbine, a new fully-automatic laser weapon that
can be ordered from cargo. A crate of 3 can be ordered from cargo for
1800 credits, locked behind armory access. Here is a video
demonstration:
https://github.com/tgstation/tgstation/assets/21979502/6f7fecec-ccb6-4a65-8027-21ab887fb91d
Now, I'm sure people are very concerned about the balance implications
of this new weapon. Let me give you some hard numbers:
The gun deals 10 damage per shot, and has a capacity of 40 shots with a
fully charged cell. This means that it has, at most, 400 damage per
charge, which is exactly the same as a normal laser gun.
In terms of DPS, it can put an unarmored human in crit roughly as fast a
laser gun. It is meant to be a sidegrade, not an upgrade to the normal
laser gun.
It also has considerably lower wound bonus. During testing, when all 40
shots were fired into an unarmored human, it dealt tier 1 burn wounds
with the occasional tier 2. I never observed a single tier 3 burn wound
during any of my tests.
Here's a picture of the different sprites (The last one is animated just
like the normal laser gun):

## Why It's Good For The Game
For a long time, there has been a strong push to make crew-available
weapons almost entirely energy based. This trend has been contentious,
to say the least. Many people prefer ballistic weapons over energy
weapons. After spending some time on a different codebase, one where
autorifles are still completely available to order from cargo, no emag
needed, I think I might know why (or at least part of the reason). Part
of what I find satisfying about some ballistics is the fact that they
fire quickly and automatically. Energy weapons might be more enjoyable
to use if automatic energy weapons are also an option.
## Changelog
🆑
add: The laser carbine, a weak but fully automatic sidegrade to the
normal laser gun, can now be ordered from cargo.
/🆑
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
Loosely adapted from /vg/. This is an entity component system for adding behaviours to datums when inheritance doesn't quite cut it. By using signals and events instead of direct inheritance, you can inject behaviours without hacky overloads. It requires a different method of thinking, but is not hard to use correctly. If a behaviour can have application across more than one thing. Make it generic, make it a component. Atom/mob/obj event? Give it a signal, and forward it's arguments with a SendSignal() call. Now every component that want's to can also know about this happening.