Commit Graph

2877 Commits

Author SHA1 Message Date
Ghom
837ddf7d00 Standing on structures such as crates, tables and bed will now look like it. (#79797)
## About The Pull Request
From the creator of 'cosmetic' elements such as footstep_override and
immerse...

I've made an element called elevation that nudges mobs a few pixels up
while standing on things like tables, crates and beds.

Screenshots of many clones of the same character standing on different
objects:
![the clone
army](https://github.com/tgstation/tgstation/assets/42542238/43ecdc25-f0d2-47fd-96dc-acafcf63483c)

## Why It's Good For The Game
It makes it look like the mob is actually standing on an elevated
surface.

## Changelog

🆑
add: Standing on structures such as crates, tables and bed will now look
like it.
/🆑
2023-11-28 15:44:54 -07:00
Nathan Singer
ba2b6487c6 Converts russian revolvers use of initial to the new :: operator (#79948)
What the title says...
515 is cool this is a cool operator
2023-11-26 20:14:52 -07:00
Y0SH1M4S73R
08f82d5250 (NO GBP) Revert "Stops rebar crossbow crashing dreamseeker when fired at point blank. (NO GBP) (#79803)" (#79885)
## About The Pull Request

#79803 was opened *after* I had opened my own PR (#79587) that more
directly fixed the problem the former was opened to address. It got
merged before mine did.

## Why It's Good For The Game

It's safe to take off the metaphorical bandaid that the first mentioned
PR was.

## Changelog

🆑
fix: Rebar crossbow bolts are now reuseable again, without risking
crashing clients when fired at point-blank range.
/🆑
2023-11-25 06:40:32 +01:00
Y0SH1M4S73R
376781879c Different pen types have unique behavior when used in foam darts. (#79587)
## About The Pull Request

This PR makes the following changes:
- Refactors inserting items into foam darts into a component on items
that can be inserted into darts
- Adds the aforementioned component to pens
- Provides an inspection tip for how to modify a foam dart
- Gives different pen types specific behavior when used in a foam dart

Pens typically give a foam dart 5 brute and 50% embed chance (affected
by falloff). The following types of pens give the specified properties
(usually directly derived from the pen's stats and additional
functions):
- Red pen (and four-color pen set to red): Slightly faster dart
- Captain's fountain pen: Slightly faster dart, and 75% base embed
chance
- Sleepypen: Tries to inject its reagents into the hit mob, but doesn't
penetrate thick clothing like syringe guns do
- Energy Dagger: 35 brute, 100% base embed chance, and slightly faster
dart
- Survival Pen: Mines rocks on impact
- Fine Tip Pen (if someone somehow manages to get one): 100 bare wound
bonus and 9000 demolition modifier

## Why It's Good For The Game

Expands the emergent gameplay possibilities of using pens in foam darts.

While there are balance risks involved with traitors being able to buy
the equivalent of reusable 45u syringe shots and 35 brute bullets, you
are not likely to get your pen back once it hits its target, unless you
somehow have the recall spell and have bound the pen to it. There are
probably more TC-efficient ways to achieve comparable projectile
weaponry, but foam dart guns have an air of subtlety to them... at least
until your skin is pierced by a pointy writing implement that may also
be something more deadly. If maintainers still have balance concerns,
please let me know.

## Changelog

🆑
add: Certain types of pens now function like you expect they would when
inserted into a foam dart
qol: Examining a foam dart closely will show you how to modify it, or
what it is modified with
/🆑
2023-11-21 20:34:41 -05:00
MrMelbert
c1ed62915b Adds UPSIDE_DOWN movetype for negative gravity / makes Atrocinator affected by less things (#79785)
## About The Pull Request

Fixes #79764

I was going to tackle this issue by slamming `TRAIT_NO_SLIP_ALL` on
Atrocinator users and calling it a day, but like, that didn't feel
proper.

So I thought hey, we could just give them the flying movetype, even
though they technically aren't flying it means they're unaffected by
things that flying would make you unaffected by.

Nope, this means the mob technically "negates gravity", so no falling
and no feetsteps.

Let's try floating - this give us feetsteps but no falling upwards. 

So instead of going back to square one, with `TRAIT_NO_SLIP_ALL`, I
decided to go for the more complex route of just adding a movetype.

Hence, move type `UPSIDE_DOWN`. This covers situations where a mob would
be "floating" above the ground, but still walking. ...Negative gravity.

This means overall the Atrociator acts more as you'd expect - you don't
slip on ice, you don't trigger bear traps or mouse traps, you can walk
over railings, unaffected by conveyor belts, etc.

## Why It's Good For The Game

Makes the Atrocinator a lot more consistent with how you'd expect for it
to work.

Admittedly it is a bit niche use of movetypes, but it can possibly be
expanded to more things in the future, who knows? I applied it to mobs
on meat spikes (even though they don't move), just for proof of concept.

## Changelog

🆑 Melbert
fix: Atrocinating mobs will now behave more as you'd expect. Meaning
they don't slip on wet patches, can't trigger bear traps / landmines /
mouse traps, ignore conveyors, and can walk over tables and railings.
fix: Floating mobs are unaffected by conveyor belts, acid (on the
ground), glass tables
fix: Floating mobs won't squish stuff like roaches anymore 
fix: Fixes bear traps triggering on floating / flying mobs 
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-11-20 21:19:13 +00:00
YesterdaysPromise
f4535255c0 Nukes radio.dmi, adds inhands for somewhat relevant items. (#79792)
## About The Pull Request

Third /icon/ cleansing splinter 1. Comments on commits say all it does
pretty much.


![image](https://github.com/tgstation/tgstation/assets/122572637/6540e588-bed8-4e98-81f5-2a6f449c53c3)


## Why It's Good For The Game

Inhand for walkietalkie was requested in the project, gets rid of some
usecases of old 'gangtool', headset splitoff requested by Fazzie.
Inhands reflecting the items they are supposed to represent is nice.

## Changelog

🆑
image: Following now have unique item sprites: syndicate war declaration
radio, curator and chief beacon's, chaplain beacon.
image: Following now have unique inhand sprites: radio, export scanner,
walkie-talkie, syndicate war declaration radio, curator and chief
beacon's, chaplain beacon.
/🆑
2023-11-20 14:22:07 +01:00
Hatterhat
6a77a2962a Makes the SC/FISHER a bit better - more range/accessibility/pacifist-usability (#79835)
## About The Pull Request
- SC/FISHER is now pacifist-usable.
- SC/FISHER black-market availability prob up to 75, from 50.
- SC/FISHER range bumped from 14 to 21.

## Why It's Good For The Game
The SC/FISHER does no damage (except against ethereals, where it does a
grand total of 3 per shot), which I think is negligible but can be
removed if it's that bad to allow pacifists a gimmick method of
murdering another guy, so I think pacifists should be allowed to use it.

The range buff and black-market availability are just because I felt
like it, since I don't think it's available enough, especially for a
doohickey whose sole purpose is "break lightbulbs".

## Changelog

🆑
balance: The SC/FISHER disruptor pistol is now more likely to show up in
black market uplinks.
balance: The SC/FISHER now has more range (21 tiles up from 14), and is
usable by pacifists.
/🆑

---------

Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
2023-11-19 19:22:40 -05:00
SyncIt21
e4029ed9cd More code compression for reagent holder (#79796)
## About The Pull Request
Part 2 of #79686 where we trim down the size of `holder.dm` even further
and in the process give some procs more advanced features as they get
merged with their counterparts.

**1. Removes & merges `get_multiple_reagent_amounts()` proc with
`get_reagent_amount()`**
The proc `get_multiple_reagent_amounts()` was only used by bio generator
and 1 other item with its only use being finding the sum of all reagents
present in the list returned by
`typesof(datum/reagent/consumable/nutrient)`. Currently the approach is
very inefficient because.
- `typesof()` is an expensive call which returns a long list of reagents
- `get_multiple_reagent_amounts()` would then use 2 nested for loops.
One to loop over every reagent in this holder & another inner for loop
to loop over every reagent returned by `typesof()` operator so the time
complexity of this proc is overall multiplicative which in lamen terms
means "Bad"

We can replicate the same behaviour of `typesof()` by using the
`type2parent()` proc and 1 more direct type check to get the exact same
behaviour but with much faster results, therefore reducing overall code

**2. Removes & merges `get_reagent()` proc with `has_reagent()`**
The proc `has_reagent()` is way more advanced than `get_reagent()` with
arguments requesting for a specific amount, metabolization and now even
has a new argument i.e. `chemical flag`. `has_reagent()` has always
returned the reagent reference directly and not a simple TRUE/FALSE so
it is a perfect replacement for `get_reagent()`, therefore reducing
overall code

**3. Removes & merges `has_chemical_flag()` proc with `has_reagent()`**
The proc `has_reagent()` can now look for a specific reagent with a
specific chemical flag as well as mentioned above thus it can replace
`has_chemical_flag()` therefore reducing overall code


## Changelog
🆑
code: Removes & merges `get_multiple_reagent_amounts()` proc with
`get_reagent_amount()` inside reagent holder
code: Removes & merges `get_reagent()` proc with `has_reagent()` inside
reagent holder
code: Removes & merges `has_chemical_flag()` proc with `has_reagent()`
inside reagent holder
refactor: Reagent holder code has been further compressed. Report bugs
on github
/🆑
2023-11-19 10:40:09 -08:00
Jeremiah
bbe440b3d6 More standardization for ghost notifications (READY) (#79596)
## About The Pull Request
I'm still not satisfied with how ghost notifications work. This gives
every notification with a source (99% of all notifications, in other
words) a link to jump/orbit. Currently, notifications with "play"
interactions would only get the interact link, so jumping to the source
was pretty annoying.

It removes posting the entire message in the alert tooltip, as some got
pretty lengthy and it didn't seem to fit. To replace this, they will
always use headers

After:


![image](https://github.com/tgstation/tgstation/assets/42397676/debfce52-3627-4a43-8663-33d61d893161)


![image](https://github.com/tgstation/tgstation/assets/42397676/01f299ae-dc6a-45f8-a97a-cb2c815088b2)


![image](https://github.com/tgstation/tgstation/assets/42397676/99567376-063e-458e-af2a-2dd4306747cc)

NOTIFY_JUMP and NOTIFY_ORBIT have been merged, since the only difference
seems to be whether it's a turf. The result shaves off some redundant
lines of code, since most-every usage of notify_ghosts uses
NOTIFY_ORBIT.
## Why It's Good For The Game
More standardization for the ghost notification system. Adds a few alert
headers that never had them. All in all, makes it easier for creators to
throw alerts at ghosts
## Changelog
🆑
qol: Nearly every ghost alert should now feature a "VIEW" button, even
those with click interaction.
del: Ghost alerts no longer show the entire message in the tooltip,
instead have been replaced with titles.
/🆑
2023-11-19 05:13:25 +01:00
KingkumaArt
9112509abd Stops rebar crossbow crashing dreamseeker when fired at point blank. (NO GBP) (#79803)
## About The Pull Request

Simply put, due to how "caseless" is an element added to the ammo when
it hits something, but ammo is qdeleted upon hitting someone. If shot
point blank without combat mode (for some reason) it tries to add
caseless to an ammo that no longer exists. For some reason, the result
of this is to just fucking crash DS instead of aborting the adding of
the element. The ammo isnt reusable anymore, but I'll take that over
crashing.

## Why It's Good For The Game

Removes a game-breaking bug. I hate gun ammo code so much. 

## Changelog



🆑
fix: Stopped a DS crash when shooting a rebar crossbow in specific
circumstances.
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-11-19 04:37:13 +01:00
SyncIt21
130b3dfa64 Code compression for reagent holder. Lowers plumbing reaction chamber tick usage (#79686)
## About The Pull Request
More code improvements for reagent holder. As you can see it removes a
lot more code than it adds so code savings are significant. This does
not touch on any floating point arithmetic, all that is behind us, this
focuses on removing redundant procs and merging existing procs to
achieve the same functionality so if you do see any changes in reagent
related behaviour it's not intentional and should be reported as a bug
here.

The following code changes can be summarized into points.

**1. Removes procs `get_master_reagent_id()` &
`get_master_reagent_name()`**
Both of these procs have the exact same functionality as
`get_master_reagent()` with the only exception of returning a different
value. Instead we can just call `get_master_reagent()` directly and
infer the name & type of it ourselves rather than creating a wrapper
proc to do it for us, therefore reducing overall code

**2. Removes & Merges `remove_all_type()` proc into `remove_reagent()`**
The proc `remove_all_type()` is highly inefficient, it first uses a for
loop to look for the reagent to remove & then it again calls
`remove_reagent()` on the reagent once it has found it. We can just
embed this functionality directly into `remove_reagent()` by simply
adding an additional parameter `include_subtypes`. This way the
operation is faster, and we reduce the code to get the job done. Also
now `remove_reagent()` will return the total volume of reagents removed
rather that a simple TRUE/FALSE

**3. Removes & Merges `trans_id_to()` proc into `trans_to()`**
Both these procs have the same job of transferring either a single
reagent or all reagents. `trans_id_to()` is a scaled down version of
`trans_to()` because
- It does not have any `method` var. This means if you want to transfer
a single reagent to a mob/organ or any other object it does not have the
functionality to expose the target to that transferred reagent.
- It does not have a `multiplier` var to scale reagent volumes
- It does not have code to deal with organs or stop reactions i.e. it
does not have the `no_react` var.

We can overcome all these short comings by simply adding an extra var
`target_id` to specify what specific reagent to transfer therefore
attaining the same functionality while keeping the benefits of
`trans_to()` proc therefore reducing overall code

**4. Lowers plumbing reaction chamber tick usage for balancing ph.**
Rather than invoking a while loop to balance ph it's much easier for the
player to simply make the reaction chamber wait for e.g. add a reagent
that will never come. This will make the chamber wait therefore giving
the reaction chamber ample time to correctly balance the ph and then
remove that reagent from the list therefore getting correct ph levels.
No need to create code hacks when the player can do it themselves  so
the while loop has been removed

## Changelog
🆑
code: removed redundant procs `get_master_reagent_id()` &
`get_master_reagent_name()`
code: merged `remove_all_type()` proc with `remove_reagent()` now this
proc can perform both functions. `remove_reagent()` now returns the
total volume of reagents removed rather than a simple TRUE/FALSE.
code: merged `trans_id_to()` proc with `trans_to()` now this proc can
perform both functions
refactor: plumbing reaction chamber will now use only a single tick to
balance ph of a solution making it less efficient but more faster. Just
make the reaction chamber wait for longer periods of time to accurately
balance ph
refactor: reagent holder code has been condensed. Report any bugs on
GitHub
/🆑
2023-11-16 21:44:48 +01:00
san7890
7f0536bb93 Makes Telekinesis + Russian Revolver Interaction more fair (#79740)
## About The Pull Request

Fixes #77238

Basically, you were able to just spam kill people with the russian
revolver if you had telekinesis, which isn't really fair. Now, after
taking a leaflet out of the the discussion in that issue report, you can
still pull off the same party trick... once...

Basically, let's just say that when you focus on firing the gun in your
mind... you're also pointing it directly at your mind (your brain (your
skull (you instantly die))). This occurs even if the projectile doesn't
actually touch you (because that would be hellish to account for) but
you're the one who's playing russian roulette man

You still get to do some collateral damage because that's still a very
funny interaction but you only get to do it once per life. I don't know
if people will be happy to revive you after you "shoot" them. Also, the
way it's coded means that you can still leave the revolver on the table
and fire it at your foot or something, or just use it normally, as a
telekinesis user. This _only_ applies to distance-based firings.
## Why It's Good For The Game

The russian revolver is specifically coded to prevent you from damaging
other people, and this was a pretty silly way to sidestep that based on
the checks. Instead, let's make it so that you can still do this
admittedly funny interaction, but with enough reason to not do it (the
reason being that you'll always get fucking blatted).
## Changelog
🆑
balance: After a string of unfortunate incidents, persons with
telekinesis have been strongly warned against playing Russian Roulette,
as they tend to hyperfixate on the gun a bit too much and end up firing
it directly at their head.
/🆑
2023-11-16 14:58:35 +01:00
Bloop
e1b958c41f Removes final remnants of 'targetted' (#79626)
## About The Pull Request

Finishing what https://github.com/tgstation/tgstation/pull/79513/
started, removes 'targetted' typo from code. Also updates the basic mob
guide with the new updated var names.

## Why It's Good For The Game

Typos bad. Accurate guides good.

## Changelog

🆑
code: gets rid of the rest of the instances of 'targetted' typo from
code
/🆑
2023-11-11 07:46:02 -05:00
KingkumaArt
d47c5149d5 Emergency hotfix for engi crossbow [NO GBP] (#79606)
Hadnt added these commits when the PR got merged due to not expecting it
oops

## Why It's Good For The Game

See above, used to make my last pr actually function as intended.

## Changelog

🆑
fix: fixed engi crossbow being able to be used onehanded + ability to
craft with sci inducers
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-11-10 15:08:35 +01:00
KingkumaArt
ba076e94bc Adds engi improvised weapon - rebar crossbow + Engi Exclusive Tot Shop Variant (#78777)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request

![image](https://github.com/KingkumaArt/KingkumaTGSS13/assets/69398298/e4d921a6-9bd6-4eb3-9085-2bfa5df67826)
Engi now has access to a Half Life 2 Inspired rebar crossbow! Made of
rods, wire, and an inducer, it shoots sharpened iron rods at a high
velocity. High damage and good embed chance, but requires you to reload
every shot which requires you to stand still for three seconds to pull
the string back. You can also Use a wrench on it to force it to store
more rods (read: more than one), but risks it exploding and shooting you
instead.

The syndicate variant, avaliable to traitor engis, can fire three rounds
before needing a reload, and features a scope and better armor piercing
ammpo, but costs 10TC. I see it as a sidegrade to the revolver - quieter
and has much more widespread ammuniton, but holds less ammo and doesnt
have the same burst stopping power. And, to those concerned about the
balance of a non-traitor with this item - the AP ammo can only be made
by the traitor who bought it, and anyone else has to use normal ammo.
 
GUN STAT JUNK
Normal one has 60% embed chance and does 40 damage (against unarmored
targetd), but requires you to wait at least 3 seconds not moving to pull
the string back. Good alpha strike but not sustainable in a long fight.
Its akin to a pipegun.

Lacks any AP qualities besides piercing a jumpsuit, because any wound
chance it has is due to a bare skin bonus. Generally not a great weapon
to fight sec with.

Syndie version is generally the above but better. Takes less to pull the
string back, slightly higher damage, better fire rate, etc. Doesnt fare
well against any armor thats equivalent to sec gear or better due to
most having low (relatively) AP and wound chance, but good bare wound
bonus.

STATS TLDR: Its good against unarmored chumps and greyshirts but anyone
in armor that protects against bullets will kick your teeth in.

Also, Ammo is crafted from an iron rod. I wanted to have it just fire
rods as is, but theyre stacked items which you cant define projectiles
or ammo from.

## Why It's Good For The Game

I've always felt engi, for as big of a department as it is, is lacking
in the "fun weapons" area. Sci has mechs and xenobio, med has chem nades
and syringe guns, and cargo has anything the QM will buy - but other
than the flamer and shocked doors, engi doesnt have much. Thats why I
made this pr. it was originally just a traitor item, as they lacked many
traitor items in their shop, but I felt like a worse, bootleg version
would suit them.

## 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. -->

🆑
add: Enginenering rebar crossbows + tot kit
add: Added a bunch of ammos and crafting junk to make the ammo exist
image: added icond for all the above
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-11-08 21:31:59 +00:00
Rhials
3c7005a37c Converts some notify_ghosts args to bitflags, multilines all notify_ghosts calls (#79320)
## About The Pull Request

This helps clean up my favorite helper proc in the whole codebase,
`notify_ghosts()`.

The notify_suiciders, ignore_mapload, and flashwindow args are GONE.
They have been replaced with the notify_flags bitflag argument. This was
intended to make deadchat announcements a bitflag argument too, but
those got reverted right before I originally wanted to submit this PR.

The on-screen popup now shows the notification body when you hover it
with your mouse again. The format is now `[notify_ghosts message] --
[click action (orbit/jump/play)]`

Every single `notify_ghosts()` call has been changed to multiline format
and has been given trailing commas. Pretty!
## Why It's Good For The Game

Cleans up a proc that is very popular and going through a lot of changes
at the time.

Allows for further flexibility when this proc inevitably gets tweaked or
improved. 12 -> 10 args is an improvement, and it doesn't impact the
helper's flexibility at all.
## Changelog
🆑 Rhials
code: The notify_ghosts proc has been cleaned up. Please report any
abnormal changes in deadchat notification behavior.
qol: The on-screen deadchat popups now contain the notification blurb
when hovered with your mouse again.
/🆑
2023-11-05 15:26:50 -08:00
necromanceranne
cd523561f7 [NO GBP] Buckshot no longer instantly deletes itself except when used pointblank. Oops (#79392)
## About The Pull Request

This was causing lethal shotgun shells with no stamina damage to
instantly delete. Oops.

## Why It's Good For The Game

I broke it and fucked up MrrFish' op round and definitely not because I
OWNED HIM WITH A BEEPSKY STUN

### BITCH

## Changelog
🆑
fix: Lethal ballistic pellet-based shotgun shells no longer instantly
delete.
/🆑
2023-10-31 17:11:08 +00:00
Pickle-Coding
15e2aa056d [NO GBP]Fixes tesla zaps. (#79398)
## About The Pull Request
Closes #79297 
Closes #79312 

Due to the new cutoff parameter being added to tesla_zap() (from
#78310), and most callers used positional arguments instead of keywords,
the zap flags was getting fed the shocked_targets list and maybe other
junk. This caused a bunch of unusual phenomena. This is fixed by using
keyword arguments.

Tesla zaps that use the grid were significantly weaker in terms of
damage than they're supposed to be. This was a byproduct of trying to
convert everything to joules and removing unnecessary power multipliers.
This is fixed by reverting the damage scaling and zap power of zap
sources that aren't based on grid. Technically this will cause the zaps
from other sources to have less power, but these tend to not be able to
put power on grid, so this wouldn't have any change other than what a
grounding rod displays. Doesn't really matter.

Logs machine explosions from zap_act. Not the most helpful log (would
take a lot of effort to add an extra parameter to pass the source), but
better than nothing.

Probably other stuff I did, lol.
## Why It's Good For The Game
Stops zap fuckery. Admins can now find the explosions when a 9GeV engine
decides to go haywire or whatever.
## Changelog
🆑
fix: Fixes tesla zaps being weird.
admin: Logs explosions from explosive zaps.
/🆑
2023-10-31 17:10:15 +00:00
starrm4nn
3e74d1ee8e Gives the Revolvers on the Nuke Ops uplink Syndicate Firing Pins (#79327)
## About The Pull Request

gives revolvers on the nukie uplink syndie firing pins

## Why It's Good For The Game

Every other firearm on the nukie uplink has a syndie firing pin.

## Changelog
🆑
fix: The Syndicate Revolver now has a Syndicate Firing Pin on the Nuke
Ops uplink.
/🆑
2023-10-31 15:07:36 +00:00
GPeckman
0df843231f Practice Carbine Dual Wielding Fix (#79359)
## About The Pull Request

When I added laser carbines, I made it impossible to dual wield them
because it could allow you to shoot normal lasers far faster than
intended (#72705). Someone else later added practice laser carbines, and
decided to allow dual wielding with them. This predictably led to the
exact same problem, so now they can't be dual wielded. Closes #79331.
## Changelog
🆑
fix: Practice laser carbines can no longer be used to rapidly fire
regular laser guns.
/🆑
2023-10-31 14:02:47 +00:00
MrMelbert
1d2bc709bb Fix dsiabler / laser impact effects (#79252)
## About The Pull Request

Fixes #79250 

Simply restores the check for brute damage type up a level before going
into blood splatters / sparks.

Not a perfect fix, as this means brute projectiles are unable to have
unique impact effects, but as we have no brute projectiles with impact
effects currently (~~outside of a CTF projectile I think?~~ Just kidding
all bullets are supposed to have an effect but it uses the blood
splatter instead. Project for another day?) it suffices.

## Changelog

🆑 Melbert
fix: Disablers and Lasers now show their on-impact effects on hit mobs
again.
/🆑
2023-10-27 19:26:46 +02:00
Hatterhat
2fc83bc449 mag check - examining magazines now tells you what's the next/ready round (#79258)
## About The Pull Request
joke pr name: Mag Drills (Elite)

- Examining an ammo box (incl. magazines) now tells you the
top-loaded/next round in the magazine, so if you have a bunch of
mislabeled/unlabeled magazines you can figure out which one is your
regular bullets and your Not So Regular bullets.
- Also, adds a variable `casing_phrasing` which is used instead of just
"rounds" or "shells" in little, relevant text bits (e.g. moving bullets
in/out of magazines).

## Why It's Good For The Game
- Ammo Box Examines: I think it's probably a good thing to be able to
check what bullets are in what box/magazine without having to pull them
out.
- The casing phrasing thing was just for something that bugged me. I
should probably extend that out to the guns, too, but after a certain
point it's just something that only a small subset of people will
notice.

## Changelog

🆑
qol: Examining an ammo box (incl. magazines) now tells you the top
loaded round, so if you have different ammo types in different
magazines, you can at least try to figure out which one is which.
spellcheck: Ammo boxes (incl. magazines) can now be set to use different
phrasing for their ammunition (e.g. cartridges, shells, etc. instead of
just mixing "rounds" and "shells").
/🆑

---------

Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
2023-10-26 14:01:49 +02:00
necromanceranne
9ff9e4b9a8 Scatter laser shells now use the scatter laser beam, and makes them significantly easier to make. Projectiles can now have damage falloff. (#78927)
## About The Pull Request

Allows for damage falloff to apply to more than just shotgun pellets.
Now any projectile can have a damage falloff defined.

Scatter Laser shells no longer use the minigun beams to determine their
damage. Instead they use the actually defined scatter laser beams. Those
beams do 7.5 damage per pellet, times by 6 pellets.

Scatter laser beams now have damage falloff, a separately defined
(positive) wounding power from normal beams, and wound falloff.

Scatter laser shells can be printed from security protolathes once you
have weapon tech.

Scatter laser shells _may_ be damaged by EMPs based on severity. The
result is that it fires a practically useless volley of laser fire. They
cause a honk sound when they hit, so you know when you've shot one of
these.

## Why It's Good For The Game

Well, we want shotguns universally to not be defined by their damage
output (especially extreme damage output) but by niche.

What does the scatter laser shell currently occupy as a niche?

The single highest damage output of any projectile weapon in direct
damage. The thing we don't want of shotguns, and it is reigning champion
of all guns.

Okay, that's a bit misleading, because obviously it is competing with
the likes of .50 BMG which does 70 damage outright and dismembers limbs,
potentially doing upwards of 90 damage if it does, and also hard stuns
people. Obviously _that_ is technically a stronger bullet.

But not for raw damage, because the scatter laser does 90 damage out the
gate, barring any potential wounding that might occur which increases
the damage multiplicatively. No gimmicks, no extra procs, nothing. It's
just 15 force lasers (with no damage dropoff) split between 6 beams.

And the reason for this is because this shell has been nerfed once prior
by making it not fire 6 normal laser shots into someone. That was 120
damage at the time, 120 to 90 was...I guess a nerf during the taser era.
Depends on how you viewed it. Buckshot was doing like 80 at the time,
believe me it was a wild period. But anyway, when we did the whole
damage rearrangement over the course of the laser few years, every other
shell got touched except this one for some reason. Even pulse slugs lost
10 damage while this was still sitting on 90 force point blank.

So what is the new niche? Well, it's laser buckshot. That's not a niche
but crew don't get buckshot, so this is their buckshot. It wounds real
good. Real goddamn good. And its is a laser. It fits the aesthetic,
obviously.

Okay, thanks.

## Changelog
🆑
balance: Scatter laser shells actually utilize the _real_ scatter laser
beam. This comes with damage changes. And wounding power.
feature: EMPs can potentially damage scatter laser shells.
refactor: All projectiles can now have damage falloff defined. Yay.
balance: Scatter laser shells can be printed when weapons technology is
researched.
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-10-25 13:39:34 +01:00
necromanceranne
df776f4ffc fixes thermal pistols doing literally nothing on impact (#79175)
## About The Pull Request

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

## Why It's Good For The Game

refactors sometimes overlook things

## Changelog
🆑
fix: The nanites inside of thermal pistols are once again angry, and
aggressively want to burn/puncture people.
/🆑
2023-10-24 22:08:57 +01:00
DrTuxedo
26818af618 Disabler SMG: We got laser carbine, so why not have automatic disabler? (#79158)
## About The Pull Request
Basically, it's #78685, but instead of an automatic deadly laser gun,
it's an automatic disabler gun.


https://github.com/tgstation/tgstation/assets/42353186/6ce1c401-30a6-45f7-a55c-4d95f742c35a

_For comprasion, normal disabler takes 4 shoots and too uses 80% of
charge_

![disabler
SMG](https://github.com/tgstation/tgstation/assets/42353186/7242a0bd-9e78-4e98-a746-7c735b4f997e)

![smg
inahnd](https://github.com/tgstation/tgstation/assets/42353186/a20848ab-9157-43a8-a146-6c3b57e0a817)

It's a side-grade as well, the damage is halved (15 instead of 30) while
the ammo count (40 instead of 20) is higher. So damage potential stays
the same.
The sound which it uses is more weak sounding to signify that.

You **can't** dual wield them.

You can order a crate of 3 at Cargo.
## Why It's Good For The Game
Automatic guns are fun, and as laser carbine showed - REAL FUN.
This introduces another automatic gun available to the crew through
Cargo because variety is always good, and this way we cover the both
most prominent projectiles (Lasers and Disablers).
Now Security can have fun without only killing people, this also lets
Pacificists have some as well.

<details>
  <summary>GET DISABLED</summary>

![HoS does
ratatata](https://github.com/tgstation/tgstation/assets/42353186/29b0d1b3-3bae-4230-ac03-958c58d67a7e)

</details>

## Changelog
🆑
add: New automatic weapon for the crew - Disabler SMG. Capable of
rapidly firing weak disabler beams.
/🆑

---------

Co-authored-by: Jacquerel <7483112+Jacquerel@users.noreply.github.com>
2023-10-24 22:08:41 +01:00
DrTuxedo
28559aa7fc New Muzzle Flash + Temperature gun Baking beam change (#79212)
## About The Pull Request
Now there are new muzzle flash sprites for the guns. There are 3 types:

**BALLISTICS**


https://github.com/tgstation/tgstation/assets/42353186/82d7b285-fcf0-4780-8479-143691641e0a

**BLUE**


https://github.com/tgstation/tgstation/assets/42353186/331c926d-8556-4715-ab61-9a4998dd93d2

**RED**


https://github.com/tgstation/tgstation/assets/42353186/c814646d-6d56-4426-bde7-b7a7a06caa39

Also, now temperature gun "BAKE" mode beams have different sprites from
the "FREEZE" beams:


https://github.com/tgstation/tgstation/assets/42353186/c78363ac-ad04-4534-9323-dc13ba017823
## Why It's Good For The Game

Muzzle flashes were one of the most oldest effect sprites in the base,
and are rather bad and bland looking.
This makes them more good-looking. Also gives variety, previously there
only been Ballistic and Energy one, and they weren't even different.

Temperature gun "BAKE" mode beam having a different colour will help
distinguish what the hell you're being shot with.
## Changelog
🆑
image: Muzzle flashes got a new sprite, each direction included!
image: Temperature Gun "BAKE" beams are now lava colored
/🆑
2023-10-24 13:05:34 -04:00
carlarctg
764b998b1d Adds a Syndicate Monkey Agent beacon uplink item (#79012)
## About The Pull Request

Adds a Syndicate Monkey Agent beacon uplink item. It spawns a dapper
monkey that must follow your orders.

Added a monkey gun case to the uplink, which contains monkey guns!
Though they aren't very powerful.

Added a more modularlike subtype for antagonist spawners to reduce
future hardcoding.

Gave the syndicate turtleneck a monkey sprite, from SS14!

## Why It's Good For The Game

I want to see the clown driving security insane with 2-3 monkeys and an
incredible amount of pranking. Or an assistant killing everyone with his
monkey friends while wearing a monkey suit. Or a geneticist sending out
mutated monkeys to kill people. Or a scientist equipping his monkeys
with bombs or xenobiology equipment and sending them out to wreak havoc.

6 TC is only enough for two monkeys, but you can get a third if you
finish any kind of objective.

> Added a monkey gun case to the uplink, which contains monkey guns!
Though they aren't very powerful.

We can't have the monkey mafia without guns, come on. The guns are weak
and only usable by monkeys. Additionally, they're restricted to
entertainment only.

Credit to SS14 for the monky turtleneck sprite.

## Changelog

🆑
add: Adds a Syndicate Monkey Agent beacon uplink item. It spawns a
dapper monkey that must follow your orders.
add: Added a monkey gun case to the uplink, which contains monkey guns!
Though they aren't very powerful.
refactor: Added a more modularlike subtype for antagonist spawners to
reduce future hardcoding.
sprite: Gave the syndicate turtleneck a monkey sprite, from SS14!
/🆑

---------

Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@gmail.com>
2023-10-24 15:28:36 +00:00
lizardqueenlexi
6dde9e4c4e Basic Constructs: Juggernaut (#79170)
## About The Pull Request

Converts juggernaut constructs to basic mobs. These guys are really
simple, so this is a pretty straightforward one.

The one notable thing about this PR is that I got annoyed that
projectile reflection code was copy-pasted in two different places (the
main one for things like the ablative trenchcoat, and right here on the
juggernaut). So, trenchcoat-style reflection is now a proc on
`/obj/projectile`, which is used in both places.

AI-controlled juggernauts are as simple as befits these big lugs, doing
nothing but slowly walking toward mobs and beating them to death with
their giant fists.
## Why It's Good For The Game

Removes another 5 simple animals.

Not too much else to say about this one, but it's easier to make
projectiles bounce off of things now if anyone wants to do that.
## Changelog
🆑
refactor: Juggernaut constructs now use the basic mob framework. Please
report any bugs.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2023-10-23 23:53:19 -06:00
Jacquerel
10f194781d It is now possible to survive the Mansus (#79131)
## About The Pull Request

Fixes #79113

There were a handful of bugs with the Mansus realm, this PR fixes them.

Firstly an most importantly, a refactor to damage handling touched the
"unholy determination" effect incorrectly (and I'm not even sure why?),
causing it to damage you instead of healing you most of the time. This
damage was not avoidable, so most people would be crit shortly after
entering the area and stay there.

Secondly, some of the heretic realms were unlit. A change to when
lazyloaded template atmosphere initialises means that the bonfires were
trying to light themselves with no air. Now they do this in
late_initialize instead, giving time for air to arrive.

Thirdly, the spooky hands were runtiming when passing through transit
tiles outside of the bounds of the heretic map. They shouldn't be
effected by shuttle drag anyway, so now they aren't.

Fourthly, I removed a row of empty space at the edge of the heretic map,
just because it annoyed me slightly.

Finally, while I was touching the heretic buff I made it heal you 1/4 as
much as it originally did. This is a balance change rather than a fix,
I'll atomise it out if it is controversial but I don't really expect it
to be.
In the future I would like to come back to these and make each realm
more specific to the path, because I think we could make these both more
exciting and more characterful.

## Why It's Good For The Game

Once it is working properly, the hand dodging minigame is actually
extremely forgiving, even if you don't move very much and get frequently
hit. This means some of those hits might actually add some tension.

## Changelog

🆑
fix: You should be revived properly when entering the mansus realm
following a heretic sacrifice
fix: The buff which is supposed to heal you in the mansus realm will now
do that instead of unavoidably damaging you
balance: The mansus realm's healing buff heals for 25% as much as it did
before it was broken
/🆑
2023-10-21 13:34:57 -04:00
MrMelbert
93ec5a72f7 A comprehensive refactor / cleanup of bullet_hit and on_hit to cut out a single bad species / mob proc (#79024)
## About The Pull Request

- Refactored `bullet_act`. Adds `should_call_parent` and refactors
associated children to support that.
   - Fixes silicons sparking off when hit by disabler fire. 
- Desnowflakes firing range target integrity and cleans up its
bullet-hole code a bit.
- Cleans up changeling tentacle code a fair bit and fixes it not taking
off throw mode if you fail to catch something.
   - The Sleeping Carp deflection is now signalized 
- Nightmare projectile dodging is now signalized and sourced from the
Nightmare's brain rather than species
- Refactored how cardboard cutouts get knocked over to be less
snowflaked / use integrity
- Also adds projectile `on_hit` `should_call_parent` and cleans up a bit
of that, particularly their arguments.
- On hit arguments were passed wrong this entire time, it's a good thing
nothing relied on that.

## Why It's Good For The Game

This is cringe. 


1863eb2cd8/code/modules/mob/living/carbon/human/_species.dm (L1430-L1442)

Bullets should overall act more consistent across mob types and objects.

## Changelog

🆑 Melbert
fix: Silicons don't spark when shot by disablers
fix: Changelings who fail to catch something with a tencacle will have
throw mode disabled automatically
fix: Fixes occasions where you can reflect with Sleeping Carp when you
shouldn't be able to
fix: Fixes some projectiles causing like 20x less eye blur than they
should be
refactor: Refactored bullet-mob interactions
refactor: Nightmare "shadow dodge" projectile ability is now sourced
from their brain
/🆑
2023-10-18 23:08:13 -06:00
LemonInTheDark
2532911353 Adds pathmaps, refactors pathfinding a bit (#78684)
## About The Pull Request

Implements /datum/pathfind/sssp, which generates /datum/path_map

/datum/path_maps allow us to very efficently generate paths to any turf
they contain from their central point.

We're effectively running the single source shortest paths algorithm.
We expand from the center turf, adding turfs as they're found, and then
processing them in order of addition.
As we go, we remember what turf "found" us first. Reversing this chain
gives us the shortest possible path from the center turf to any turf in
its range (or the inverse).

This isn't all that useful on its own, outside of a few niche cases
(Like if we wanted to get the farthest reachable turf from the center)
but if we could reuse the map more then once, we'd be able to swarm
to/from a point very easily.

Reuse is a bit troublesome, reqiures a timeout system and a way to
compare different movables trying to get paths.
I've implemented it tho. I've refactored CanAStarPass to take a datum,
/datum/can_pass_info. This is built from a movable and a list of access,
and copies all the properties that would impact pathfinding over onto
itself.

There is one case where we don't do this, pathing over openspace
requires checking if we'd fall through the openspace, and the proc for
that takes an atom.
So instead we use the weakref to the owner that we hold onto, and hold
copies of all the values that would impact the check on the datum.

When someone requests a swarmed path their pass info is compared with
the pass info of all other path_maps centered on their target turf. If
it matches and their requested timeout isn't too short, we just reuse
the map.

Timeout is a tricky thing because the longer a map exists the more out
of date it gets.
I've added a few age defines that let you modulate your level of risk
here. We default to only allowing maps that are currently
being generated, or finished generating in our tick. 
Hopefully this prevents falling into trouble, but consumers will need to
allow "failed" movements.

As a part of this datumized pass info, I've refactored pathfinding to
use access lists, rather then id cards directly. This also avoids some
dumbass harddel oppertunities, and prevents an idcard from changing mid
path.

Did a few things to the zPass procs, they took args that they did NOT
need, and I thought it'd be better to yeet em.

If you'd all like I could undo the caching/can_pass_info stuff if you'd
all like. I think it's useful generally because it avoids stuff changing
mid pathfind attempt, but if it's too clunky I could nuke it.

Oh also I added optional args to jps that constricts how it handles
diagonals. I've used this to fix bot paths.

## Why It's Good For The Game

Much of this is redundant currently. I'm adding it because it could have
saved hugglebippers, and because I get the feeling it'll be useful for
"grouping" mobs like bees and such.
We're doing more basic mob work currently and I want to provide extra
tools for that work.


https://github.com/tgstation/tgstation/assets/58055496/66aca1f9-c6e7-4173-9c38-c40516d6d853

## Changelog
🆑
add: Adds swarmed pathfinding, trading accuracy for potential
optimization of used correctly
fix: Bots will no longer take diagonal paths, preventing weirdo looking
path visuals
refactor: Refactored bits of pathfinding code, hopefully easier to add
new pathfinding strategies now
/🆑
2023-10-17 23:52:54 -06:00
GPeckman
b764f0e8c3 Improves code for power usage of energy weapons (#78677)
## About The Pull Request

Currently, the power cost for each shot is just written as a number, and
you have to know the size of the cell to know what this number means. If
you just see than a laser gun costs 83 energy, then it's not clear that
this translates to 12 shots unless you know that the cell holds 1000
units of energy. Now, all energy weapons (except those that cost 0
energy and one that costs 10000) use a macro define in the form of
`LASER_SHOTS(X)`. So the laser gun would example be `LASER_SHOTS(12)`,
to clearly convey that it gets 12 shots out of a full charge.

I also removed the `laser/hellfire/antique` subtype because it had no
mechanical difference from `laser/hellfire` whatsoever.
## Why It's Good For The Game
Readable code is good.

## Changelog
No player facing changes.
2023-10-13 20:58:25 +02:00
DrTuxedo
3cf5745231 Laser Carbine sprite and sound improvement (#78831)
## About The Pull Request
Changes the laser carbine sprite and makes the orange laser sprite
brighter (the laser carbine shot orange lasers from the start). Changes
the laser2.ogg to a new sound that is now used by the laser carbine (can
be heard in the video):


https://github.com/tgstation/tgstation/assets/42353186/cfaff327-335f-4e6b-9773-b1ce62600212

**NEW SPRITE:**
![laser carbine
big](https://github.com/tgstation/tgstation/assets/42353186/5e0b1c90-527c-47ae-9747-7f833a84c880)

**OLD SPRITE:**
![old
carbine](https://github.com/tgstation/tgstation/assets/42353186/5d2eb35c-9ddb-49db-99b3-e1631a1db8dd)
## Why It's Good For The Game
The laser carbine sprite must be improved, as in the original PR people
wanted it to be "polished" so I did it. Polished the sprite without
changing the core design.

![image](https://github.com/tgstation/tgstation/assets/42353186/0c6f73a3-0dd0-4ba5-9cf8-dd34cade2fd1)

New sounds give it a unique sound to distinguish it from other guns,
it's also less noise-polluting than normal laser gun sound which is long
and too beefy for a 10-burn damage gun.
## Changelog
🆑
sound: laser2.ogg sound has been changed. Now laser carbine uses it.
image: Laser carbine and orange laser sprite have been improved.
/🆑
2023-10-12 21:34:18 -04:00
Jacquerel
eb28d04f08 Watcher Nest Lavaland Ruin (#78790)
## About The Pull Request

Adds a small new lavaland ruin, the Watchers' Grave.


![image](https://github.com/tgstation/tgstation/assets/7483112/9c3fa6f0-3e7d-4540-8646-5229eb11445b)

![image](https://github.com/tgstation/tgstation/assets/7483112/93bc14f0-9a0c-40d3-bd30-cc79a0d85752)

You will need to figure out yourself how to find a way through the walls
surrounding it (it's not very hard).
This is mostly just atmospheric but also serves as a delivery vehicle
for a unique item; an orphaned Watcher egg.
(That's kind of it in terms of loot, unless you count a handful of
lavaland mob corpses and mushrooms).

You can either eat this (it's an egg), throw it at someone to spawn an
angry watcher, or keep hold of it for a while and see what happens.

<details>


![dreamseeker_cMNnZXjfgL](https://github.com/tgstation/tgstation/assets/7483112/841db8fc-19ac-431f-aa66-c9ec5fbedbc3)

That's right it's your very own baby watcher.
It orbits your head and shoots at lavaland creatures for unimpressive
damage. It won't ever intentionally shoot a player but they might walk
in front of it, as it doesn't hurt very much they will probably forgive
you.
If you die it will continue circling your corpse to guard it against
predation.
</details>

In creating this ruin I also added a new component called "corpse
description".
It provides some extra examine text to a corpse which is removed
permanently if the mob is revived.
There's a field you can varedit on corpse spawners (or make a subtype)
which will automatically apply it to spawned corpses.
You can use it for environmental storytelling. Or admins can use it to
make fun of how you died.

Also I fixed basic mobs runtiming when examined by ghosts.

## Why It's Good For The Game

More variety in map generation. It's cute.
Adds a tool that mappers might like.

## Changelog

🆑
add: Adds a new lavaland ruin where you can find a unique egg.
/🆑
2023-10-11 17:00:22 -06:00
carlarctg
6fac48f451 Adds practice carbines to all firing ranges (#78867)
## About The Pull Request

Adds practice carbines to all firing ranges. They don't deal damage.

## Why It's Good For The Game

These guns are fun as hell to shoot.

## Changelog

🆑
add: Adds practice carbines to all firing ranges. They don't deal
damage.
/🆑
2023-10-10 15:59:32 -06:00
Wallem
62edfdf85b Adds a cowboy bundle to the nuclear ops uplink (#78874)
## About The Pull Request
Tin

The bundle includes revolver, holster, armored cowboy outfit, horse,
apples to tame said horse, and a complimentary lighter.

It costs 18tc, so it's a little more expensive than getting the revolver
& holster on their own, but you also get a horse so it's worth it.
## Why It's Good For The Game
This was intended as a lone-ops bundle so we can finally have some lone
rangers but I think having a crew of cowboy outlaws doing a "train
heist" for a nuke is really funny.
## Changelog
🆑 Wallem
add: Nuclear Operatives now have ready access to ancient cowboy
technology in the form of the Outlaw Bundle. Now you too can roll into
town on your horse.
/🆑
2023-10-09 16:10:44 -07:00
san7890
3415828c6b Refactors Revenants into Basic Mobs (#78782)
## About The Pull Request

I felt bad about taking all the "easy" ones, so let's change it up with
a decently difficult one. Revenants are now basic mobs! This alone
doesn't change much of anything because it pretty much overrode much of
simple_animal code. However we do a few new things.

* Multiple code improvements! No more weird proc names that aren't
`snake_case`, cleaner variable names, more dmdoccing, etc.
* Files are now reorganized, Rather than a 800-line dogshit monofile,
we're all nice now
* Multiple logic improvements, like early returns to make stuff more
readable and the like. many `isnull()` yes
* Instead of abusing key ownership logic, we use `mind.transfer_to()`
instead for much cleaner behavior when we need to change stuff
* Instead of iterating over the entire list of mobs to find dead mobs,
we use a new `revenant_relay()` system that automatically handles
broadcasting revenant messages to all observers and fellow revenants
(like `blob_talk()`)
* Instead of having a weird invisible "corpse", we move the revenant
inside the actual ectoplasm when they die. This drastically simplifies a
lot of wacky code that was completely useless since we still had the mob
to work with, but now it's a lot cleaner when it comes down to it.
* Some more hooks into stuff like `Life()` that might be useful for
other people in the same way this is.
* Less <span> crap, more macros, wahoo
* Uses an `examine_block()` for when we relay instructions to new
revenants. also cache those instructions to save time in the long run
* Revenants being stunned, inhibited, and revealed are now managed by
status effects rather than being chicanery on `Life()`
* Everything should now just in general be a lot nicer to work with.
This list is not exhaustive but a lot of the junk 7-year-old code has
been gutted and replaced with the modern standards.

There are stuff that I explicitly didn't touch and will not be touching
in this PR as it's already rather large.
* Revenant actions. I touched some proc names but I didn't alter the key
ways they work.
* Revenant movement. That's another can of worms.
* Revenant event code. I just made it use the transfer to system to make
a closed loop and that's about it.
* Revenant AI. They don't have any, it's an event/admin spawn. I'm not
adding AI here.
## Why It's Good For The Game

Revenants are more extensible now rather than being a real big
clusterfuck of bullshit, should be much easier to tweak stuff here and
there or logically follow how the code for this fella should go. The
number of weird revenant bugs should go down since we do stuff more
simply- but there could be some sleeper bugs that can bite us.
## Changelog
🆑
refactor: Revenants, the mob that's split between planes of Life and
Death, have been refactored into a basic mob. While this alone shouldn't
touch behavior, a lot of the backend code has been gutted and refactored
to try and furnish a better antagonist experience. This might mean that
some weird stuff can come up and around, report something if it's
utterly broken.
code: In order to better facilitate some code, you do not ghost outside
of a revenant on death, you simply get transferred into the ectoplasm.
You should still be able to speak with your ghost friends on how hard
you got wrecked or if you'll be able to resurrect though.
code: The timing on revenant stuff such as being revealed, stunned, and
inhibited (by holy weapons) should be tweaked a bit to allow better
management. This should mean that getting unstunned and such should be a
bit more precise now.
qol: Revenant instructions are now relayed in a neat little examine
block.
/🆑
2023-10-09 23:15:20 +01:00
carlarctg
27bf4b9cac Added slapcrafting to tech shells (#78746)
## About The Pull Request

Added slapcrafting to tech shells. Untested!

## Why It's Good For The Game

Easier to make 'em

## Changelog

🆑
qol: Added slapcrafting to unloaded tech shells, click on them with
ingredients to quickly craft your shell.
/🆑
2023-10-07 02:40:14 +02:00
GPeckman
e8365f2a36 The laser carbine, a full-auto sidegrade to the normal laser gun (#78685)
## 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):


![laser_carbines](https://github.com/tgstation/tgstation/assets/21979502/75c88c8a-aa8a-481d-994d-86850fcdbb9b)

## 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>
2023-10-06 16:45:50 +00:00
necromanceranne
053e66b0d3 Makes the Regal Condor realistically simulate being shot dead with a high caliber hand cannon by making it HITSCAN (#78674)
## About The Pull Request

The Regal Condor come with a magazine and ammo already inside.

The recipe for the magazine now no longer needs TC, but does need donk
pockets (sponsored murder gear, you see) and a hell of a lot more
materials per magazine (you're looking at like 40 sheets of various
materials all up). It also needs you to make the Condor first. But it
comes preloaded with ammo.

The Condor is 1 whole TC more expensive. Also needs some metal. The old
recipe is there in spirit.

The Regal Condor and the magazines come with 10mm Reaper bullets.
They're high damage. They're high AP. They are also hitscan.

## Why It's Good For The Game

Apparently people don't like the Condor. Too much effort for not enough
reward. After all, revolvers exist. 'It must be a joke' they say! 'It's
joke content! I went to all that effort to make it for nothing! That
slut Anne tricked us!'

**Wrong, bitch.**

If you want the Condor to make you shit yourself the moment someone with
it appears on the screen, then fine!

### **You get what you fucking deserve.**

## Changelog
🆑
balance: Despite earlier reports suggesting that the famous lethality of
the Regal Condor was largely a myth, there has been rumors that the gun
has once again started to display its true killing potential on any
station that it 'manifests'.
/🆑
2023-10-06 14:02:10 +01:00
Tim
d6f79f4427 Refactor gib code to use bitflags and have documentation (#78754)
## About The Pull Request
This takes all the gib related procs:
- `gib()`
- `spawn_gibs()` 
- `spill_organs()`
- `spread_bodyparts()`

And adds heavy documentation that communicates what the procs are used
for and how the different bitflags affect them. The difference is
noticeable:

`gib(TRUE, FALSE, FALSE, null)` vs `gib(DROP_ORGANS|DROP_BODYPARTS)`

The code is now much more legible which is important considering it's
used in a lot of places!

Another robust change, is that we had several places in the code where
there were double negatives like so:

```
/mob/living/carbon/spill_organs(no_brain, no_organs, no_bodyparts)
	if(!no_bodyparts) // DOUBLE NEGATIVES ARE BAD M'KAY?!?
		// do stuff here
```

This is a mindfuck to untangle. I inverted a lot of these parts so we
don't lose our sanity.

Last thing that was changed was a big `if()` loop in the `spill_organ()`
proc. This was refactored to just be a simple `for` loop with `continue`
statements where we needed to skip enabled bitflags. It's now shorter
and cleaner than before.

The only slight gameplay change this affects is that gibbing a mob now
guarantees to drop all items unless the `DROP_ITEMS` bitflag is
deliberately omitted. Some places like admin gib self, we don't want
this to happen.

## Why It's Good For The Game
Gib code is very old. (~15 years) People kept adding more arguments to
the procs when it should have been a bitflag initially. By doing it this
way, there is more flexibility and readability when it comes to adding
new code in the future.

## Changelog
🆑
refactor: Refactor gib code to be more robust.
qol: Gibbing a mob will result in all items being dropped instead of
getting deleted. There are a few exceptions (like admin gib self) where
this will not take place.
/🆑
2023-10-06 13:12:22 +01:00
Wallem
66a1cd6ab2 Adds The Hand of Midas, an ancient Egyptian gun. (#78699)
## About The Pull Request
Adds the Hand of Midas (HoM), a weapon for pirate captains.

This matchlock pistol is powered by gold rather than gunpowder.
If you hit someone with it, they will be afflicted with Midas Blight for
a duration of time that scales with how much gold is in your gun.
Midas Blight will slowly turn their blood into gold, and slow them down
depending on how much blood is in their system.
If you right-click on someone with the HoM, it will siphon all gold from
their bloodstream and recharge the gun, curing them of Midas Blight in
the process if they still have it.
The amount of gold you can get from people is meant to be ~1.5x as much
as you fired into them in the first place, if you get your timing right.
This way you can exponentially scale the power of your weapon if you can
hit your shots, with a limit of 30 Seconds on the Blight timer.
The siphon has a range of 2 meters, and if you miss a shot you can input
a gold coin into the gun to refill it with the same weak shot you
started with.

It's a little hard to explain in text so here's some video examples:


https://github.com/tgstation/tgstation/assets/66052067/d49238fc-beb2-4ba9-be0c-83e8a701c995


https://github.com/tgstation/tgstation/assets/66052067/34dc23e7-2b88-4ee9-bb1e-c8067a491975


https://github.com/tgstation/tgstation/assets/66052067/68a07426-ba6c-43a7-8228-132fc4b02b83

## Why It's Good For The Game
Honestly I just had the idea for the gun and thought it would be really
cool lmao.
Also because Barrel Behind the Door is one of the funniest YuGiOh cards,
the censored design is TOO GOOD.


![image](https://github.com/tgstation/tgstation/assets/66052067/7c930287-410d-43bd-8731-0f7224b9f049)
## Changelog
🆑 Wallem
add: Adds The Hand of Midas, an ancient Egyptian matchlock pistol.
/🆑
2023-10-03 22:54:48 +00:00
Bloop
68b798efa0 A thorough audit of damage procs and specifically their use in on_mob_life() (with unit tests!) (#78657) 2023-10-03 04:01:32 -04:00
lizardqueenlexi
09bbc85ca8 Makes the reverse revolver better hidden. (#78660)
## About The Pull Request

Fixes #78639

Makes the name and description of the reverse revolver always equal
those of the Syndicate revolver.
## Why It's Good For The Game

The reverse revolver is supposed to look like a normal Syndicate
revolver until you shoot yourself in the face with it. Having an obvious
tell is bad.
## Changelog
🆑
fix: The reverse revolver now looks like a normal Syndicate revolver on
inspection.
/🆑
2023-09-29 16:37:54 -04:00
carlarctg
8d57758420 Converts slapcrafting into a component (#78450)
## About The Pull Request

Converts slapcrafting into a component!

The component is added on to an ingredient (presumably the main
ingredient) with a list of recipes attached. If you interact an
ingredient (if no ignredients, a tool) with it, you will start crafting
the recipe. If there's multiple, pick between them with a radial menu.

Opening on draft as there's just a liiiiil bit left to do. The actual
wired rod was left for last.

## Why It's Good For The Game

Slapcrafting is simply better and more accessible and less laggy than
menu crafting. By making it a component we can attach it to things in
which it'd make sense to while stopping unintended weirdness that might
arise from this being global.

Additionally the way examine lets you see crafting recipes opens up
visibility for those, which allows new players to learn about them in a
intuitive manner.

## Changelog

🆑
refactor: Turned slapcrafting into a component! You can examine
compatible items to see what recipes they can be used in, and what the
ingredients for them are. For example, spears and the head-on-spear
crafting recipe.
/🆑
2023-09-27 12:38:10 +01:00
Pickle-Coding
64cbbdbf2c [NO GBP]Zap strength is now measured in joules. NT CIMs will now display the power transmission from the zaps, accounting for every factor. (#78310)
## About The Pull Request
Zap strength is now measured in joules. Scales everything to account for
this.

NT CIMS will now display the zap power transmission in watts, instead of
a modifier. This will allow you to actually see how much power the
supermatter is generating accurately, without knowledge of hidden
multipliers. NT CIMs will also show the internal energy gain from heat
in eV/K/s, so you can easily figure out how internal energy gain works,
and how much energy gain it actually gives. The internal energy
measurement will also adjust its prefix. Internal energy is now a
measure of internal energy, rather than internal energy density,
removing the "/cm^3".

Here is what it looked like: 
![Screenshot
(25)](https://github.com/tgstation/tgstation/assets/58013024/781323d4-db91-4a78-9a46-8152022993ed)


This image was created on an earlier commit where the numbers were wrong
due to a hidden multiplier that got removed later, so keep that in mind.

Also fixes inactive supermatters unnecessarily scaling delta time. The
high energy (>5GeV) additional zaps now also scale with delta time.

The code in this PR is absolute garbage trash and there are some major
issues, so I'm drafting this for now.
## Why It's Good For The Game
Makes it more clear what the factors add, and also how much power the SM
is releasing. Zap strength being measured in joules will simplify a lot
of things, making power balance more clear rather than guessimating.
Adjusting the prefix for internal energy is just the natural thing to
do. The per cubic centimeter part of internal energy would imply it is
energy density, however it is functionally not. It would probably
confuse people thinking the volume of the turf or the size of the
supermatter actually matters for what the internal energy does, when it
does not (except for gas absorption I guess, which changes heating/mol
requirements, but nothing else), so I am removing that part.
## Changelog
🆑
qol: NT CIMs shows how much power the supermatter is releasing.
qol: NT CIMs internal energy will adjust its prefix.
qol: Energy displays (such as multitooling grid) will use the full range
of SI prefixes available, up to the peta prefix if you somehow managed
to reach that.
del: Removes the per cubic centimeter part of internal energy.
fix: Fix unnecessary delta time scaling on inactive supermatters.
fix: Fix high energy zaps not scaling with delta time.
fix: Fixes grounding rods lying about potential power you can generate.
code: Convert supermatter_zap() and tesla_zap() zap_str argument unit to
be in joules, and scales everything that uses that argument.
/🆑
2023-09-25 10:51:40 +13:00
Ghom
6fa13af5be Fixes beams rendering below mobs by default. The fishing line is no longer emissive. (#78170)
## About The Pull Request
That of beams being layered below mobs has been a minor issue ever since
that mess that is FoV was implemented (with the exception of chain
lighting of the 'lighting' holoparasite type). I'm changing the plane of
beams to GAME_PLANE_UPPER_FOV_HIDDEN along a couple other things.

## Why It's Good For The Game
Re-read the above section, also fishing lines shouldn't generally glow
in the dark like very thin lightsabers, and them being layered below
mobs has always been a peeve to me.

## Changelog

🆑
fix: Fixed beams rendering below mobs by default.
fix: The fishing line beam is no longer emissive (it doesn't glow in the
dark).
/🆑

---------

Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
2023-09-23 21:37:07 -04:00
nikothedude
c9f44897ed Augments/Prosthetic limbs now spark when shot instead of bleeding (#78248)
## About The Pull Request

Title.

The amount of sparks are based on the damage dealt by the projectile
with slight variation, with one spark representing 25 damage.

Also cleans up some code while I was there (not because melbert gave me
a side eye or anything for not doing it at first hahaahahah)
## Why It's Good For The Game

Bleeding metal is weird, but I feel that having some extra feedback for
getting shot was nice - it felt like something was missing when I was
testing it out... so I added the sparks.
## Changelog
🆑
fix: Projectiles no longer cause a blood graphic or blood splatters if
they hit a limb that cant bleed
add: Prosthetics/Augments now spark when shot
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2023-09-20 22:36:06 +02:00
Thunder12345
e377b33c07 [Fuck Shotties] Old Yellers Old Yeller (Improvised Shell Nerf) (#78235)
## About The Pull Request

Reworks improv shells to not be equal or even superior to buckshot, by
cutting their damage in half and reducing the wound bonuses. In return
they have a demolition_mod of 3, so do more damage overall to the
environment, a true vandal's paradise.

Added a glass shard to the recipe as an actual projectile instead of
just sheets of metal.

## Why It's Good For The Game

When buckshot was originally removed from the station (#55663) the
intended purpose was, as requested by oranges, to make shotguns a
specialist weapon instead of general purpose lethals.

It has come to my attention that improvised shells (which were initially
intended to be a weaker alternative made form commonly available
materials) are in fact better buckshot, and had no right to survive the
original nerf. I am now fixing that oversight by turning improvised
shells into a more specialised vandalism tool.

## Changelog
🆑
balance: Improvised shotgun shells now deal half as much damage to
humans and cause less wounds, but do 50% more damage to structures and
machines. They also require a glass shard for crafting.
/🆑
2023-09-20 08:31:23 +12:00
Ghom
a351e4522c Culls client/mouse code only used by beam rifles in favor of signals. (#78113) 2023-09-17 01:25:51 -05:00