Commit Graph

2393 Commits

Author SHA1 Message Date
necromanceranne
2073ad23e3 Stops you getting into a mech if you have stuff in your hands at all. (#91046)
## About The Pull Request

Makes it so that it is impossible to enter a mech if your hands are
full.

## Why It's Good For The Game

This can result in some...very unintended behavior should somehow you
cannot be forced to drop items in your hands.

## Changelog
🆑
fix: You must have both your hands empty before entering a mech. (But
items which replace your hand, like the light later or the hand of god,
won't prevent you from getting in)
/🆑
2025-05-13 15:09:22 +03:00
SmArtKar
b55f613050 Moves goliath cloak worn sprite to neck layer (#91069) 2025-05-11 14:14:39 +03:00
Bloop
3274884afd Moves the kinetic crusher sound effects to vars (#90969)
## About The Pull Request

Tin, this has no effect on gameplay. Just makes the sound effects less
hardcoded.

## Why It's Good For The Game

Code extensibility. Makes the sound effects of kinetic crushers easier
to configure for subtypes or custom versions.

## Changelog

Nothing player-facing
2025-05-08 11:06:03 +03:00
Bloop
e134baa9fd Updates the default retool_icon for skins to be the mining icon file. (#91014) 2025-05-08 07:23:28 +02:00
Lucy
37ec7f8054 Changes all uses of notify_ghosts to use the real names of mobs (#90919)
## About The Pull Request

Quite simple - this changes every direct mention of a mob in a
`notify_ghosts` message to use `[mob.real_name]` instead of just `[mob]`

## Why It's Good For The Game

makes things less confusing - ghosts can see easily their actual
identity anyways, so it's not like there's much of a reason _not_ to do
this.

## Changelog
🆑
qol: Ghost notifications will now use the real names of mobs when
something happens (i.e no more "Unknown has completed an ascension
ritual!")
/🆑
2025-05-08 00:48:52 +00:00
SmArtKar
b0aaeca5ae Merges crusher retool kits into one, datumizes crusher skins, gives dagger and blaster unique animations (#90742)
## About The Pull Request

Merges sword, harpoon, glaive and dagger crusher retools into a single
item which allows you to pick the skin you want upon being applied to a
crusher by converting crusher skins into datums.
I've also improved sprites for all skins and redid the retool kit
itself, as well as gave dagger and blaster unique animations - you swing
with a dagger for normal attacks, stab to rupture the mark, and firing a
shot point-blank does a stabbing animation with the blaster.

![dreamseeker_5nPyNKqzoC](https://github.com/user-attachments/assets/c8858a71-3c0f-49a0-8577-cb8a9e64e0a0)


https://github.com/user-attachments/assets/2d243daf-f1d8-48bf-a661-8a9ac990837c

(Apologies for lack of robust gameplay, I was trying to show the
animations, not kill the goliath)

The harpoon crusher skin now does stabbing animation instead of slashing
one, and I've also fixed animations playing incorrectly when attacking
large mobs/objects

## Why It's Good For The Game

Having multiple items for reskinning crushers feels clunky, and unique
animations are just something that makes sense. Having a swinging
animation for both dagger and blaster looked odd, as you'd probably only
swing one of them at the opponent, so I decided to spice them up.

## Changelog
🆑
add: Dagger-blaster and harpoon crusher skins have received unique
attack animations.
add: Four base crusher retool kits have been merged into one item.
image: Resprited crusher skins and the crusher retool kit
fix: Fixed attack animations being offset when attacking large objects
or mobs.
/🆑
2025-05-04 15:36:27 +03: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
SmArtKar
fdad28e19d Fixes inconsistent PKC descriptions and broken bubblegum/wendigo trophies (#90736)
## About The Pull Request
Bubblegum trophy has attempted to modify its' *own* dual wielding, so if
you attached and detached it you were able to have a tiny 20 force two
handed weapon. Yeah. This PR implements a way for trophies to
consistently modify their damage, and fixes some oversights (values not
being assigned/updating) in two handed component code.

Closes #90731

## Changelog
🆑
fix: Fixed inconsistent proto-kinetic crusher descriptions
fix: Fixed Bubblegum and Wendigo crusher trophies sometimes not working.
/🆑
2025-04-25 15:36:00 +00:00
Goat
6b75f949a6 Adds missing checks to cain & abel (#90777)
## About The Pull Request
cain and abel could be used while they were in your pocket and that was
a bit funny
## Why It's Good For The Game
i shouldn't be able to swing my daggers while they're shoved inside my
pocket
## Changelog
🆑 Goat
fix: Cain and Abel (the colossus drop) now require you to hold them to
be able to swing them around
/🆑
2025-04-25 15:18:44 +00:00
Jacquerel
a8a41f8781 Emagged fishing capsules can create deep water (#90798)
## About The Pull Request

Alongside lava and plasma, emagged fishing capsules can now create 3x3
areas of deep water.
Unfortunately "deep ocean" does not have a unique fishing loot pool at
the moment, but maybe one day.

## Why It's Good For The Game

It was a discord request from a head admin and it seemed reasonably
funny. These tiles are significantly less dangerous than lava but
perhaps more flavourful and also effect terrain in a different way.
People will avoid lava because it basically kills you, but this is a
trap they might be more tempted to chase you across (to their
detriment).

## Changelog

🆑
add: Emagging a fishing spot pod from the black market can create pools
of water deep enough to drown people in.
/🆑
2025-04-25 15:10:28 +00:00
Ghom
339616ae78 You can now interact with held mobs beside wearing them (feat: "minor" melee attack chain cleanup) (#90080)
## About The Pull Request
People can now pet held mothroaches and pugs if they want to, or use
items on them, hopefully without causing many issues. After all, it only
took about a couple dozen lines of code to make...

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

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

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

## Changelog

🆑
qol: You can now interact with held mobs in more ways beside wearing
them.
/🆑
2025-04-23 20:18:26 +00:00
SyncIt21
9bd45e2f3a Part 3: Storage Improvements (#90476)
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2025-04-20 12:02:29 +00:00
John Willard
7728bbc92a Adds a blood level hud for vamp & soulscythe (#90578)
## About The Pull Request

Replaces the stat panel entries for soulscythes & vampires to show their
blood level, with a HUD instead.
The sprite was taken from Bloodsuckers which they use to also show their
own blood level, which is what gave me the idea.

Also makes soulscythe use the living level ``blood_volume`` instead of
their own snowflake var meant to do the same thing.

Vampire

![image](https://github.com/user-attachments/assets/4ec75929-ad58-44ec-a817-1fd1ec5a4f11)

Soulscythe

![image](https://github.com/user-attachments/assets/5d04a8d5-0cfc-46a8-ab2c-c0a08f4e6d00)

## Why It's Good For The Game

Helps move away reliance on the stat panel & makes this information more
obvious to the player. The stat panel in general isn't a good place to
put this stuff as it obfuscates it as a feature for players who either
are on a different tab or simply don't know to look there.

## Changelog

🆑 TheSwain, JohnFulpWillard
qol: Soulscythes and Vampires now have a blood hud on the left side of
their screen rather than a stat panel entry stating how much blood they
have.
/🆑
2025-04-13 14:19:27 -06:00
Iajret
081a804b44 Adds silicon access and built-in radio to AI Uplink Brain (only when controlled by AI) (#90112)
## About The Pull Request
- adds silicon access to body controlled by an AI. This is done just by
adding a trait
- adds internal headset with same channels as AI has in its core
(including syndicate and special channels for special AIs)
- binary channel required some additional code to work properly for
carbons without binary key so I decided to also fix big bold text for
borg shells and for big brother. They all have big texts in binary. This
is done by adding new `TRAIT_LOUD_BINARY`
- turns out borg shells also lack loud mode for regular radio, so it is
added too
- ai also locks bodies for themselves the same way as they do with
shells, for consistency
## Why It's Good For The Game
While AIs losing their ability to listen radio when inside uplink brain
can provide so much needed human VS ai conflict (because AI ignored open
door request from that one assistant), it feels a bit unjustified. Same
reason for AI lacking its innate all-access while in carbon body. You
can still open doors for yourself by juggling between uplink brain and
your core so why bother people with additional clicks. It brings carbon
shell on par with silicon shells (and makes them superior cough cough)
## Changelog
🆑
balance: AI uplink brain now comes with built-in radio and free silicon
access for the AI to use
balance: AI entering uplink brain now locks it for themselves. You can
reinsert that brain to reset its controlling AI
fix: fixed AI borg shells and big brother not having loud binary. Now
they do.
/🆑
2025-04-09 16:43:54 +02:00
SmArtKar
acd8a1693f Moves manual boulder breaking to LMB, corrects tooltips (#90474)
## About The Pull Request

Per #90473, for some reason boulder breaking is right click exclusive
for items. Basicmobs also break boulders on left click, but the tooltip
claims they should use right click for it. Also cleaned up some related
code.

## Why It's Good For The Game

Doesn't really make sense to use exclusively right click for boulder
breaking, this can confuse newer players.

## Changelog
🆑
qol: Moved manual boulder breaking with tools to LMB, corrected boulder
tooltips suggesting incorrect mouse buttons for basicmobs.
/🆑
2025-04-08 22:40:28 +02:00
SyncIt21
0893f4f945 Part 2: Storage Improvements (#90390)
## About The Pull Request
Continuation of #90365

- Formatted some usages of `set_holdable()` to be more readable
- `exception_hold` list now stores its values inside `
GLOB.cached_storage_typecaches`. This means we don't have to manage a
static typecache list per storage but can share the value across all
storages making memory management slightly more efficient
- Monkey cube boxes now cannot hold gorilla cubes cause that would make
gorilla cube boxes obsolete also now gorilla cube boxes can now only
hold gorilla cubes & not general monkey cubes(which gorilla cubes is a
subtype of) cause that would make monkey cube boxes obsolete. We are
specializing each box for that specific use case

## Changelog
🆑
code: further improved storage code
fix: monkey cube boxes can no longer hold gorilla cubes & vice versa
/🆑
2025-04-07 13:19:16 +02:00
Singul0
0107aecc73 Adds table flipping! Take 2.0 (#90156)
## About The Pull Request
Revives the long dead #80348. Right click a table to flip it over,
Useful for makeshift cover or ragequitting. Their integrity is equal to
that of the table you flipped. Some tables aren't able to be flipped
(reinforced tables, roller tables, etc).

I refactored it to be less snowflakey. so hopefully this passes with
only minor changes

![290775902-48414bb3-aaa9-467d-8edf-a170a98b1506](https://github.com/user-attachments/assets/3627c537-043e-4829-b38b-f68a7d382167)

![gambar](https://github.com/user-attachments/assets/ce04a6d1-e480-46f9-8913-041f86db8a9a)
## Why It's Good For The Game
I felt like we're lacking in the makeshift defense items. This is a
quicky way to plop up a shitty barricade for you to guard with. and also
really cool for roleplaying and such. also, this categorically goes
hard:

![gambar](https://github.com/user-attachments/assets/af593068-d9f3-49b0-9102-989ce2b4d3fb)
## Changelog
🆑
add: You can now flip tables by right clicking them!
/🆑

---------

Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@gmail.com>
2025-04-03 03:11:27 +01:00
MrMelbert
f7d44e38ae Generalizes mining voucher behavior (#90297)
## About The Pull Request

Adds `/datum/element/voucher_redeemer`, expands `/datum/voucher_set` a
bit, bumps all mining stuff down a level to `/datum/voucher_set/mining`.

## Why It's Good For The Game

Having a generic way to 
`input item -> output a choice of a set of items`
would be really handy. 

## Changelog

🆑 Melbert
refactor: Minor mining voucher refactor, report any oddities.
/🆑
2025-04-02 22:37:34 +01:00
SmArtKar
6b83a91956 Revert "Refactor for storage initialization & organization (#89543)" (#90332)
## About The Pull Request

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

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

## Why It's Good For The Game

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

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

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

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

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



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

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


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

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



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

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

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

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

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

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

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

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

## Why It's Good For The Game

Fixes this massive 516 mess, hopefully.

closes #90281

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

---------

Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
Co-authored-by: SmArtKar <master.of.bagets@gmail.com>
2025-03-28 14:18:45 +00:00
SmArtKar
431bf75d53 Color Code Audition: Human rendering hates me (#89702)
## About The Pull Request

This trainwreck of a PR is (hopefully) a final solution to all rendering
jank stemming from the new filter-based coloring system. I went over
every single instance of RESET_COLOR, either adding KEEP_APART or
rewriting them entirely so they render properly. I've also fixed blood
rendering issues by utilizing alpha filters and adding an abstract
"holder" appearance for worn items, which holds blood overlays on worn
clothing as to avoid coloring it. I've also fixed horrible
inconsistencies with atmos pipe coloring as a result (of getting sucked
down that rabbit hole) and converted all uses of COLOR_VERY_LIGHT_GRAY
in atmos code to ATMOS_COLOR_OMNI to avoid confusion.

MODsuit modules still get colored into MOD unit's color, need to
refactor their rendering for this.

Closes #88989
Closes #87526
Closes #89837

## Changelog
🆑
refactor: Audited all remaining coloring code - among noticeable
changes, blood should no longer get colored or "leak out" of item
bounds, atmos pipes no longer color weirdly and repairbots are white
again.
/🆑
2025-03-24 15:05:33 +01:00
SmArtKar
cf131db497 Cleans up mood and mood-related code (#90162)
## About The Pull Request

One of my upcoming PRs affects a significant chunk of the codebase so
I'm cleaning up messes that I've found along the way.
This PR adds wrappers for adjusting sanity/checking if a mob already has
a certain moodlet, fixes an oversight where attempting to set sanity
over passed maximum would abort the change outright (instead of actually
capping it out), moved jolly and depression processing into quirks
themselves (instead of having dedicated traits for them used solely by
said quirks and nothing else that are constantly checked for by mood
datums), and rewrote how blessings return their results to move omen's
deletion on blessing effect from constantly checking mood for a blessing
moodlet to a comsig.

## Why It's Good For The Game

Less jank handling of certain mechanics, we ***really*** shouldn't be
checking for blessings every time mood of all things is updated.

## Changelog
🆑
fix: Adjusting sanity over the allowed maximum will no longer completely
halt the change, and instead actually cap it at the maximum value.
code: Cleaned up mood and mood-adjacent code.
/🆑
2025-03-24 13:53:03 +01: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
MelokG
ec5a376ea3 Wildhunter's Butchering Knife (#90013) 2025-03-20 22:20:41 +02:00
Twaticus
0cb8abae92 Trashcart and Various Cardboard Related Resprites (#90129) 2025-03-20 15:49:34 +00: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
64cf28cc4f Adds bodypart visuals for different implants, improves eye color/blinking handling (#90010)
## About The Pull Request

Added visual overlays for all arm implants, HUD implants (not the
headrev one), internal thrusters, breathing tube, nutriment pumps and
reviver implant.


![dreamseeker_wd79oYLszL](https://github.com/user-attachments/assets/76582c23-8639-4261-8414-622a0419dc5b)

![dreamseeker_MnlpCHD0nQ](https://github.com/user-attachments/assets/c4692105-0435-401b-aa30-66a33a813fc4)

![dreamseeker_nLJrSPGC63](https://github.com/user-attachments/assets/5b43a1a6-45d6-454e-9348-c119db3cfb43)

Additionally, added a wrapper for eye color setting which solves the
issue where non-pref sourced eyecolors got reset after changing them,
and changed how blinking works so now update_body calls don't force you
to blink.

## Why It's Good For The Game

Gives you incredible drip (which makes augments feel more impactful) and
allows others to see if you have certain important augments (reviver)
that could matter.
As for technical changes, both were required for this to HUDs to work
nicely and fix some bugs as a side effect.

## Changelog
🆑
add: Certain implants now have visuals when implanted
fix: You no longer blink when you adjust your clothing
fix: Fixed an issue where some NPC/midround humans would not get their
eye color set correctly
/🆑
2025-03-17 19:09:55 +01:00
SmArtKar
845ed7459e Bravo Six, Going Dark: Refactors client colors to fix dupe issues and support filters (#89843)
## About The Pull Request

Completely refactored how client colors are handled. Now they're similar
to traits, having a source associated with them. Instead of adding and
removing by strict type (which makes client colors prone to getting
duplicated and not cleaned up) you remove a filter associated with a
specific source. Adding another client color with the same source as an
already existing one will replace the existing one if its of a different
type, or do nothing if they're the same (unless force is set to TRUE).
Client colors can also force filter splitting, putting all colors that
come before them, themselves, and all colors after them into separate
filters - this is useful to prevent mixing in filters which are supposed
to remove a certain color.

<details>

<summary>Example of how Perceptomatrix and nightmare vision goggles
combined before this PR:</summary>


![dreamseeker_fBOse2i0jq](https://github.com/user-attachments/assets/fb164e1f-ce8b-4a8c-8820-5db25e710056)

And this is after, as you can see nightmare vision effect's red is only
slightly tinted by perceptomatix instead of being literally halved.


![dreamseeker_U6A24fetK8](https://github.com/user-attachments/assets/8d8b3eb5-9f53-4646-bc56-0f5897013c6f)

</details>

Additionally, added support for custom filters (and not just colors) to
client color code to allow us to work with more colorspaces.

Also fixed weird blindness behavior, so this also 
Closes #89787

## Why It's Good For The Game

Makes code less ass to work with, fixes weird color mixing, etc.

## Changelog
🆑
fix: Fixed perceptomatix helmet allowing you to see even when
unconscious
refactor: Refactored how client colors are handled, ensuring that
certain effects like nightmare goggles don't disappear when another
vision-affecting piece of clothing is worn.
/🆑
2025-03-17 11:35:11 +00:00
RandomDudeFromTheRim
1c65775f2d Fixes stupid typo when using Vortex Recall (#90068)
... I?
## About The Pull Request
Removes the 'i' in 'You begin channeling [src]'s power..i.'
## Why It's Good For The Game
No brain boil as miner
## Changelog
🆑
spellcheck: fixed a single typo when using Vortex Recall
/🆑
2025-03-16 13:30:41 -07:00
SmArtKar
359e0180a0 Generalizes multi-slot implants and makes autosurgeons support them (#89845)
## About The Pull Request

Generalized code from #89479 to be applicable to all organs and made
autosurgeons respect which hand you're using them in (and what zone you
have selected)

## Why It's Good For The Game

Allows us to add leg implants with similar behavior easier, gets of
placeholder types for left arm slots, and you'd ***expect*** to be able
to use autosurgeons to insert implants anywhere but your right arm.

## Changelog
🆑
qol: Autosurgeons now can insert toolkit implants into your left arm
when used in the left hand/with left arm zone selected
/🆑
2025-03-16 18:27:30 +00:00
Hatterhat
bba2751626 [NO GBP] fixes the glaive retool kit specifically again (#90055)
## About The Pull Request
Makes sure that applying a retool kit redirects the inhand files, so the
glaive retool kit stops turning crushers invisible.

## Why It's Good For The Game
Invisible crusher inhands are decidedly suboptimal.

## Changelog

🆑
fix: The glaive retool kit works again and no longer turns your crusher
invisible.
/🆑

---------

Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
2025-03-16 17:39:40 +01:00
MrMelbert
1406210b6e Improves the "Check mood" printout, reworks the "Check self" printout, minor embed changes (#89854)
## About The Pull Request

1. Reformats "Check Mood" 

Basically just cleaning it up.
- Moodlets are bullet pointed.
- Hunter is displayed here now.
- Quirks are displayed here now.
- It now tells you how drunk you feel.

Sample


![image](https://github.com/user-attachments/assets/1aac1180-1eed-45f7-9615-005eeecef8c8)

2. Reworks "Check self"

Big reworks done here.
- Organs now don't outright say "Your hear is hurty" "Your lugs are
hurty". Now they'll say something like, "Your chest feels tight" -
Unless you're self aware, then it will say "Your heart is hurty".
- Check self no longer reports wounds with 100% accuracy. You get an
approximate of what the wound is like - "Your chest has an open cut".
More severe wounds will still be bolded, though.

Sample 


![image](https://github.com/user-attachments/assets/3da6336c-63db-4298-9fcb-76748608c848)


![image](https://github.com/user-attachments/assets/6e797ef3-cb04-46cd-aa3c-520c9240953d)

3. Embed tweaks

Embeds can be hidden, and thus will only show up on health analyzers.
This means you can't rip them out by hand.
Right now only bullet shrapnel and explosion shrapnel is hidden.

## Why It's Good For The Game

1. Just some cleanup, largely. Stuff like quirks and hunger make more
sense when checking your mental rather than checking your body. Though
this might be weird for if mood is config-disabled, I might have to
revisit htat.

2. I always found that clicking on yourself and just getting a print out
of "Your liver's non-functional, your chest has a weeping avulsion, etc"
is pretty lame... it kind of diminishes diagnosis / doctor's job.
Ultimately, the goal of this is to open up a little more doctor gameplay
- primarily I think it'll allow for some fully roleplay moments, like
"Doc my chest hurts a lil" "You have 7 bullets and broken ribs bro"

3. Adds more punch to some embeds. Mostly for larp though.

## Changelog

🆑 Melbert
add: Your mood printout (clicking on the mood face) has been
reformatted, and should generally be cleaner.
add: Self examining was reworked, and overall gives you a lot less
perfect information, unless you are self-aware.
add: Bullet and grenade shrapnel is now hidden from examining - it's
skin deep. You can't rip them out with your hands, but hemostats /
wirecutters still suffice if you know they're there. Health analyzers
still pick them up too.
qol: Ghosts aren't notified about NPCs getting appendicitis 
/🆑
2025-03-15 05:51:06 +00:00
Ghom
7c703fc712 Food types are now passed down when cooking from recipes. (#89706)
## About The Pull Request
~~I have some beef with the cooking system.~~

Cooking recipes are coded in a way that disregard the possibility for
their components to have different foodtype flags than the ones you
would find normally find.
For example, if I wanted to make corned beef, but instead of a standard
steak, I used a killer tomato "steak", the result would still have the
meat food type, even if none of the components has it.

I've had to resort to a few hacky lines of code to manipulate the food
types from the edible component, but that can be easily fixed if #89687
is merged.

## Why It's Good For The Game
This also makes cooking recipes less strict about their food types and
can help us spot inconsistencies with recipes.

## Changelog

🆑
qol: Food types are now passed down when cooking from recipes. For
example, a plate of corned "beef" made from giant killer tomato slabs no
longer counts as meat but only vegetables now.
fix: Fixed a metric ton of inconsistencies with food types and recipes.
fix: Dank-pockets (the weed variant) can now be microwaved.
/🆑
2025-03-13 20:06:35 +01:00
Ghom
1b80a34506 You can now craft multi-dimensional payloads with dimensional anomalies (#89701)
## About The Pull Request
Remember the overpriced, rare bomb core from the black market, the one
you can use to convert an area to pizza or plasma?
Looking back, I think I should've made it craftable with a dimensional
anomaly rather than simply lock it to the back market, that was a real
shame to its potential. Another thing, the power of the crafted
dimensional bomb core varies with the strength of the gibtonite and if
the grenade casings used are of large or advance release variants or
not.

Using low power gibtonite (deactivated too hastily) results in a radius
of 11 (not counting the epicenter) tiles, roughly 70% of what you would
get from the blackmarket core (17 tiles).
Using a medium power gibtonite results in a radius of 13, or 82% of 17.
Using two advanced/large grenades results in a radius of 15, 88% of 17.
Using high power gibtonite results in a radius equal to the bm standard.
Using both high power gibtonite and advanced/large grenades results in a
radius of 19, for a 11.5% increase from 17.

This is done so that using the anomaly to its fullest requires some
steps beside the refined core itself, kinda in line with other anomaly
tech but without filling the techweb with more clutter.

## Why It's Good For The Game
This gives an use to the dimensional anomaly core beside the reactive
armor and bounties. If it ever becomes problematic, it can be easily
tuned later.

## Changelog

🆑
add: You can now craft multi-dimensional payloads with dimensional
anomalies.
/🆑

---------

Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2025-03-13 07:43:58 +01:00
SmArtKar
b892919126 Allows stacking machines to eat bluespace crystals (#89780)
## About The Pull Request

Closes #89745
2025-03-08 13:36:36 -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
itsmeow
cc335e7e9e IconForge: rust-g Spritesheet Generation (#89478)
## About The Pull Request

Replaces the asset subsystem's spritesheet generator with a rust-based
implementation (https://github.com/tgstation/rust-g/pull/160).

This is a rough port of
https://github.com/BeeStation/BeeStation-Hornet/pull/10404, but it
includes fixes for some cases I didn't catch that apply on TG.

(FWIW we've been using this system on prod for over a year and
encountered no major issues.)

### TG MAINTAINER NOTE


![image](https://github.com/user-attachments/assets/53bd2b44-9bb5-42d2-b33f-093651edebc0)

### Batched Spritesheets

`/datum/asset/spritesheet_batched`: A version of the spritesheet system
that collects a list of `/datum/universal_icon`s and sends them off to
rustg asynchronously, and the generation also runs on another thread, so
the game doesn't block during realize_spritesheet. The rust generation
is about 10x faster when it comes to actual icon generation, but the
biggest perk of the batched spritesheets is the caching system.

This PR notably does not convert a few things to the new spritesheet
generator.

- Species and antagonist icons in the preferences view because they use
getFlatIcon ~~which can't be converted to universal icons~~.
- Yes, this is still a *massive* cost to init, unfortunately. On Bee, I
actually enabled the 'legacy' cache on prod and development, which you
can see in my PR. That's why I added the 'clear cache' verb and the
`unregister()` procs, because it can force a regeneration at runtime. I
decided not to port this, since I think it would be detrimental to the
large amount of contributors here.
- It is *technically* possible to port parts of this to the uni_icon
system by making a uni_icon version of getFlatIcon. However, some
overlays use runtime-generated icons which are ~~completely unparseable
to IconForge, since they're stored in the RSC and don't exist as files
anywhere~~. This is most noticeable with things like hair (which blend
additively with the hair mask on the server, thus making them invisible
to `get_flat_uni_icon`). It also doesn't help that species and antag
icons will still need to generate a bunch of dummies and delete them to
even verify cache validity.
- It is actually possible to write the RSC icons to the filesystem
(using fcopy) and reference them in IconForge. However, I'm going to
wait on doing this until I port my GAGS implementation because it
requires GAGS to exist on the filesystem as well.

#### Caching

IconForge generates a cache based on the set of icons used, all
transform operations applied, and the source DMIs of each icon used
within the spritesheet. It can compare the hashes and invalidate the
cache automatically if any of these change. This means we can enable
caching on development, and have absolutely no downsides, because if
anything changes, the cache invalidates itself.

The caching has a mean cost of ~5ms and saves a lot of time compared to
generating the spritesheet, even with rust's faster generation. The main
downside is that the cache still requires building the list of icons and
their transforms, then json encoding it to send to rustg.

Here's an abbreviated example of a cache JSON. All of these need to
match for the cache to be valid. `input_hash` contains the transform
definitions for all the sprites in the spritesheet, so if the input to
iconforge changes, that hash catches it. The `sizes` and `sprites` are
loaded into DM.

```json
{
	"input_hash": "99f1bc67d590e000",
	"dmi_hashes": {
		"icons/ui/achievements/achievements.dmi": "771200c75da11c62"
	},
	"sizes": [
		"76x76"
	],
	"sprites": {
		"achievement-rustascend": {
			"size_id": "76x76",
			"position": 1
		}
	},
	"rustg_version": "3.6.0",
	"dm_version": 1
}
```

### Universal Icons

Universal icons are just a collection of DMI, Icon State, and any icon
transformation procs you apply (blends, crops, scales). They can be
convered to DM icons via `to_icon()`. I've included an implementation of
GAGS that produces universal icons, allowing GAGS items to be converted
into them. IconForge can read universal icons and add them to
spritesheets. It's basically just a wrapper that reimplements BYOND icon
procs.

### Other Stuff

Converts some uses of md5asfile within legacy spritesheets to use
rustg_hash_file instead, improving the performance of their generation.

Fixes lizard body markings not showing in previews, and re-adds eyes to
the ethereal color preview. This is a side effect of IconForge having
*much* better error handling than DM icon procs. Invalid stuff that gets
passed around will error instead of silently doing nothing.

Changes the CSS used in legacy spritesheet generation to split
`background: url(...) no-repeat` into separate props. This is necessary
for WebView2, as IE treats these properties differently - adding
`background-color` to an icon object (as seen in the R&D console) won't
work if you don't split these out.

Deletes unused spritesheets and their associated icons (condiments
spritesheet, old PDA spritesheet)

## Why It's Good For The Game

If you press "Character Setup", the 10-13sec of lag is now approximately
0.5-2 seconds.

Tracy profile showing the time spent on get_asset_datum. I pressed the
preferences button during init on both branches. Do note that this was
ran with a smart cache HIT, so no generation occurred.


![image](https://github.com/user-attachments/assets/3efa71ab-972b-4f5a-acab-0892496ef999)

Much lower worst-case for /datum/asset/New (which includes
`create_spritesheets()` and `register()`)


![image](https://github.com/user-attachments/assets/9ad8ceee-7bd6-4c48-b5f3-006520f527ef)

Here's a look at the internal costs from rustg - as you can see
`generate_spritesheet()` is very fast:


![image](https://github.com/user-attachments/assets/e6892c28-8c31-4af5-96d4-501e966d0ce9)

### Comparison for a single spritesheet - chat spritesheet:

**Before**


![image](https://github.com/user-attachments/assets/cbd65787-42ba-4278-a45c-bd3d538da986)

**After**


![image](https://github.com/user-attachments/assets/d750899a-bd07-4b57-80fb-420fcc0ae416)

## Changelog

🆑
fix: Fixed lizard body markings and ethereal feature previews in the
preference menu missing some overlays.
refactor: Optimized spritesheet asset generation greatly using rustg
IconForge, greatly reducing post-initialization lag as well as reducing
init times and saving server computation.
config: Added 'smart' asset caching, for batched rustg IconForge
spritesheets. It is persistent and suitable for use on local, with
automatic invalidation.
add: Added admin verbs - Debug -> Clear Smart/Legacy Asset Cache for
spritesheets.
fix: Fixed R&D console icons breaking on WebView2/516
/🆑
2025-03-03 14:58:27 +01:00
SmArtKar
420627ed71 Breaks up mining loot into multiple files, refactors the hierophant club (#89751)
## About The Pull Request

Splits up tendril_loot.dm and megafauna_loot.dm (both over a thousand
lines long) into group/item specific files, and megafauna-specific files
respectively. Also pulls a few loot items scattered around the codebase
into those files as well.

Additionally while doing so I've cleaned up the code for some of them,
and rewrote the hierophant club's code because it was abominable and a
potential source of harddels.

## Why It's Good For The Game

Its absolutely unnavigateable.

## Changelog
🆑
code: Split and cleaned up mining loot's code
refactor: Refactored the hierophant club.
fix: Hierophant club's beacon no longer can go missing (until you try
using it)
/🆑
2025-03-02 13:26:47 +01:00
SmArtKar
4dd6cdeb72 Refactors how item actions are handled (#89654)
## About The Pull Request

This PR tackles our piss-poor item action handling. Currently in order
to make an item only have actions when its equipped to a certain slot
you need to override a proc, which I've changed by introducing an
action_slots variable. I've also cleaned up a ton of action code, and
most importantly moved a lot of Trigger effects on items to do_effect,
which allows actions to not call ui_action_click or attack_self on an
item without bypassing IsAvailible and comsigs that parent Trigger has.
This resolves issues like jump boots being usable from your hands, HUDs
being toggleable out of your pockets, etc. Also moved a few actions from
relying on attack_self to individual handling on their side.

This also stops welding masks/hardhats from showing their action while
you hold them, this part of the change is just something I thought
didn't make much sense - you can use their action by using them in-hand,
and flickering on your action bar can be annoying when reshuffling your
backpack.

Closes #89653

## Why It's Good For The Game
Makes action handling significantly less ass, allows us to avoid code
like this
```js
/obj/item/clothing/mask/gas/sechailer/ui_action_click(mob/user, action)
	if(istype(action, /datum/action/item_action/halt))
		halt()
	else
		adjust_visor(user)
```
2025-03-01 12:02:07 -06:00
Jacquerel
5a6d0f9373 Adds a couple of absent turf nullchecks (#89733)
## About The Pull Request

Fixes a handful of minor misc issues detected while trying to break
#89591

These are basically summed up as:
- check_teleport_valid (used in a couple of places) never actually
nullchecked the destination then runtimes later if it is null. We'd
rather it just returns false if you're trying to teleport to nowhere I
think.
- Warp Cubes (a mining item) did something similar if one of them ended
up in nullspace somehow.
- AI controllers in nullspace would runtime repeatedly while trying to
check their Z level, we never want an AI controller to be awake in
nullspace so we'll just tell them to shut off in there.

Sometimes items and mobs go to nullspace for holding reasons, but I
don't think any of these were commonly encountered issues.

## Changelog

🆑
fix: The Warp Cube will now fail if it tries to teleport you to nowhere,
instead of turning you blue and then failing
/🆑

I don't know if the other ones were actually player facing they just
runtimed
2025-03-01 14:09:08 +01:00
SmArtKar
d33bc7d25a Prevents two or more AIs from trying to occupy a cybernetic uplink brain (#89694)
## About The Pull Request

Extremely janky, ends up kicking the previous AI out of the game.

## Changelog
🆑
fix: You can no longer try to occupy an AI uplink brain already occupied
by another AI
/🆑
2025-02-27 17:38:21 +01:00
Kapu1178
a0e862d575 Base implementation of /datum/persistent_client (#89449)
## About The Pull Request
Converts `/datum/player_details` into `/datum/persistent_client`.
Persistent Clients persist across connections. The only time a mob's
persistent client will change is if the ckey it's bound to logs into a
different mob, or the mob is deleted (duh).

Also adds PossessByPlayer() so that transfering mob control is cleaner
and makes more immediate sense if you don't know byond-fu.

## Why It's Good For The Game
Clients are an abstract representation of a connection that can be
dropped at almost any moment so putting things that should be stable to
access at any time onto an undying object is ideal. This allows for
future expansions like abstracting away client.screen and managing
everything cleanly.
2025-02-25 13:52:24 -06:00
SmArtKar
db14a4eb5c Fixes crusher retool kits turning crushers invisible (#89656)
## About The Pull Request

Closes #89652

## Changelog
🆑
fix: Fixed crusher retool kits turning crushers invisible
/🆑
2025-02-25 12:43:11 +00:00
Hatterhat
daf96c5703 Adds the proto-kinetic glaive as a crusher retool kit (#89451)
## About The Pull Request

![image](https://github.com/user-attachments/assets/68eba2d3-d7fc-4678-9d83-87f3ad4d6382)

Adds a glaive retool kit to the mining vendor, for decoratively
converting kinetic crushers into a glaive-like model. Because polearms
are neat.

Also allows retool kits to use different icon files other than the
hammer_lefthand and hammer_righthand .dmis, along with support for
changing inhand dimensions as appropriate.

Item sprites and original inhands (since modified) with credit to
@zeroisthebiggay (see:
https://github.com/Citadel-Station-13/Citadel-Station-13/pull/15773).

## Why It's Good For The Game

Cool alternate knife-stick sprite for the crusher.
Also support for alternate inhand files for retool kits, in case someone
else decides to make other long crusher variants.

## Changelog

🆑
add: Glaive retool kits for proto-kinetic crushers are now in mining
vendors' ordering lists.
code: Proto-kinetic crusher retool kits now have support for alternate
inhand icon files with alternate dimensions.
/🆑

---------

Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
2025-02-23 10:16:01 +01:00
SmArtKar
268cfdac4b AI uplink brain can no longer give you free ghost from which you can return to your AI core (#89607)
## About The Pull Request

Closes #89605
Nor does it give you free xray anymore. Also fixed a bunch of runtimes,
yeah.

## Changelog
🆑
fix: AI uplink brain can no longer give you free ghost from which you
can return to your AI core
/🆑
2025-02-22 14:03:39 +01:00
SmArtKar
096502c51e Partially reverts the crusher "buff", making marks work instantly again (#89482)
## About The Pull Request

Reverts new crusher marks from #88171. Crusher marks now can be
instantly detonated, but firing one puts you on an attack cooldown
again.

I did, however, add a fancy animation to them.


https://github.com/user-attachments/assets/ff09084e-36a9-445e-bb27-d7ba4822e37d

## Why It's Good For The Game

This change caused two major issues:
A) Color-based animation doesn't provide you with a clear hint when the
mark is actually ready to be burst, as it can look green but be just a
tiny bit short. Before, mistimed clicks didn't punish you aside from
potentially getting attacked by entering melee range, while now doing so
puts you on another 0.8 second melee cooldown, which feels ***really***
bad as there's no way to see if a mark is actually ready or not.

B) It also removed the potential co-op nuking of mobs/megafauna that
crusher duos could do, switching betwen applying and bursting marks for
doubled DPS, which while rare, I was kinda fond of.

## Changelog
🆑
balance: Crusher marks now can be instantly detonated, but firing one
puts you on an attack cooldown again
/🆑
2025-02-22 11:49:41 +01:00
Archemagus
8a5898212b Automated Announcement System refactor (#89276)
## About The Pull Request

I standardized stuff in AASs code, and all current reference to it. Also
added interactions for bounty cubes, weather reports and request
consoles, all of it can be changed from AASs UI.
Also it's easier now to add new config entries for AAS to proceed, and
it's now downstream friendly.
## Why It's Good For The Game
Well, because kind of order in code and because it's funny to make
custom messages for... Almost everything?
BTW any entry can be blocked from ingame changes, by default you can't
change Broken Arrival shuttle and Security Officer arrival
announcements, how it was before. But may be we should allow it - it's
an open question.
## Changelog
🆑
add: Many things now handles via AAS: Bounty Cubes, Request Consoles,
Brig Cells, Vending Machines and Orion Trails alerts, Weather Reports,
Cargo Order Console
code: Now anyone can make their own entry for AAS
refactor: AAS internals, also cleanup
/🆑
2025-02-17 11:06:50 +01:00
Archie700
437cd9943d Adds a TGUI warning for the bottle of mayhem (#89365)
## About The Pull Request

Adds a TGUI warning for the bottle of mayhem if you try to break it so
that you know what you are about to do
## Why It's Good For The Game

Having a confirmation warning allows the player to know what the mayhem
in a bottle will do (drives people into a killing frenzy) and give them
one more chance before actually breaking the bottle, especially for
nonantags who may not know what it actually does.
## Changelog
🆑
qol: Gives a confirmation box describing the mayhem in a bottle's effect
when a player tries to break the bottle. Player must confirm before
bottle takes effect.
/🆑
2025-02-17 00:27:50 +01:00
norsvenska
cd2d0797c9 Restores Northstar's shuttles to the codebase (#89423)
## About The Pull Request
Puts Northstar's shuttles and docks back into the code. This allows for
Northstar to be loaded by admins.

## Why It's Good For The Game

Per Maurukas, shuttles should stay in the code.


![image](https://github.com/user-attachments/assets/87b80dbc-e8e1-43e4-a776-d5c0e4b460a7)


![image](https://github.com/user-attachments/assets/e4a9f03d-be12-49b5-8d1b-ad7ceeadb10f)

## Changelog

Nothing player facing.
2025-02-10 18:20:42 -07:00