Commit Graph
2576 Commits
Author SHA1 Message Date
SmArtKarandGitHub 87e1ef6f64 Changes human name updates to be request-based instead of being automatically done every single tick (#92393)
## About The Pull Request

Changes human name to update whenever anything that could result in
their visible name changing occurs, such as changing IDs, equipping
gasmasks, picking potted plants, etc. Currently name updates occur every
``Life()`` tick and in a few "special" cases, which causes a lot of name
changes from sources such as equipment to not apply until the mob ticks,
and makes us waste a tiiiny bit of CPU time on name updates.
I've also slighly cleaned up human /Life() and made species'
``spec_life()`` not run when the mob is dead, as it was causing certain
unintended interactions, such as slimepeople regenerating blood while
dead.

## Why It's Good For The Game

Microoptimization, ensures that correct names are always used (in case
something could update their name but the mob hasn't ticked yet), plus
its just a cleaner implementation
2025-08-08 13:01:12 -05:00
necromanceranneandGitHub 2b0a824132 Changes flux anomalies and gravity anomalies to be a little less horrible to deal with. (#92216)
## About The Pull Request

Flux anomalies, when they detonate, do a minor explosion and emit a wide
EMP pulse. This can cause a lot of damage in its own right, but it won't
syndicate bomb a random section of the station anymore.

Gravity anomalies

A) No longer have the click catching giant image floating above it
anymore.
B) No longer chain hardstuns you if you get too close every time it
ticks. Instead, it knocks you down. You can also avoid this effect by
wearing magboots.
C) Also doesn't throw literally every object in an area around it
straight into you every time it ticks. Instead, it does so only 20% of
the time.

Long range gas analyzers can now scan anomalies.

## Why It's Good For The Game

> Flux 

A really annoying anomaly and one that I think has caused several
shuttle calls in its time. If you don't catch it, it blows up a segment
of the station entirely at random. This thing can almost be as bad as a
vortex in some contexts. A giant EMP can still be pretty destructive,
but it isn't quite at the same level as a giant explosion and I suspect
not shuttle call worthy. The minor explosion will at most trash a room.

> Gravity

I literally do not understand how anyone was supposed to disable these.
I literally gave up years ago even trying to catch them. They're
practically designed to kill you for trying. The click catching warp
effect not only looked kind of lame, but it just straight up stopped you
being able to disable them (mouse opacity doesn't work here and I tried,
it redirects clicks to other tiles for some godawful reason, probably
byond weirdness). You had to spam click a LOT to even try.

On top of that, it just stuns you? It literally just stuns you if you
approach it? And magboots can't help you to avoid that? What the fuck
are you _supposed_ to do to avoid that?

Also it can just instantly kill you if you approach it and it gathered
enough stuff because it will just keep slapping you with every loose
object within a radius around itself? At speed 5 so things that don't
normally embed will embed?

So it mulches you for approaching it, chain hardstuns you for
approaching it, and it deliberately intercepts clicks in a completely
unintuitive fashion even if you do manage to click it. You need to
approach it to stop it. A recipe for disaster. Fuck that.

> Analyzer

It was annoying this wasn't able to do this already!

## Changelog
🆑
balance: Gravity anomalies can be properly clicked. Rather than chain
stunning you, the anomaly will knock you down. You can avoid the
negatives of gravity anomalies by wearing magboots. (Yes, it did not
really protect you until now)
balance: Flux anomalies detonate in a much smaller explosion, but
release a wide EMP as well.
balance: Long range gas analyzers can now scan anomalies.
/🆑
2025-08-07 13:47:35 -04:00
MrMelbertandGitHub 7f11e42e07 Removes the Void Torch (#92075)
## About The Pull Request

Deletes the Void Torch from Cult

Mapped in uses have been replaced with similar red torches

Deathmatch uses were replaced with red torches as well (did they even
have a use in dm?)

## Why It's Good For The Game

Void Torch is maybe the # 1 example of bloat that comes to mind when I
think of "Cult"

- Very few people know that it does anything
- Even fewer people know how to use it
- Even FEWER people know how to use it effectively
- It isn't even uniquely produced, it comes with another object for no
reason
- In fact, I see people not even *realize* that they get a torch with
their veil shifter. In fact in fact, I see more people throw it *away*
than use it.

I don't really see a reason why it should stick around. A fair argument
I could see is "muh sandbox, you're pidgeonholeing cult in to just
swords and stun". But if that was the case, then why haven't people been
using it?

The only sad part to me is torches are cult kino thematically.

## Changelog
🆑 Melbert
del: Removes the Void Torch from Cult
/🆑
2025-07-19 23:01:36 -07:00
throwawayuselessandGitHub 8bcd9886e3 Fixes half-done hemoanalytic scanner desc (#91964) 2025-07-06 11:26:35 +02:00
FeudeyTFandGitHub 35494b93bb Telecomms Update: Ability to change existing radio channels and create new ones (#91647)
## About The Pull Request
I have added the ability to create and edit station radio channels
through the existing telecommunications system.
You can change the name of the radio channel and its color.

The channel settings are changed and created through the servers
(Frequencies Settings)

![ui](https://github.com/user-attachments/assets/cb010d75-bb00-4e3c-86b6-351b39b832e3)

Here i created my own channel:
1) Add frequency at Receiver (you will not see channel name):

![TestChannelInReceiver](https://github.com/user-attachments/assets/d3934e96-fb2d-492a-a1d6-84e8bfbd6628)
2) Add frequency at Bus (you will not see channel name):

![TestChannelnBus](https://github.com/user-attachments/assets/9955fb9c-9ca0-44f5-8d8f-caf02c0b3a9c)
3) Add frequency at Server
4) Add settings for your frequency

![NewChannel](https://github.com/user-attachments/assets/14a86eae-a000-4106-848b-a140ab678c3c)
5) See the result:

![TestChannel](https://github.com/user-attachments/assets/a720c660-43f6-47c0-8e85-fd313e8ce8d7)

Important Notes:
1) Headsets, radios, and intercoms will not see a change in
telecommunications, but will use standard names (Common, Security etc.).
2) There are still reserved names that cannot be used: CentComm,
Syndicate, Uplink, CTFs channels
3) Servers must filter frequency for applying settings on them

## Why It's Good For The Game

Now telecommunication channels names and colors depends on the settings
of the network servers, which makes it more flexible and logical. It is
also useful for foreign language servers, as you can translate channel
names.

## Changelog

🆑
add: Added ability to change existing radio channels and create new
qol: Added color for some buttons in Telecomms UI
/🆑
2025-06-28 01:19:18 +10:00
MrMelbertandGitHub 4c277dc572 Dynamic Rework (#91290)
## About The Pull Request

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

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

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

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

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

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

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

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

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

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

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

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

Other implementation details

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

- Dynamic.json -> Dynamic.toml

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

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

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

- Cult refactored a tiny bit. 

- Antag datums cleaned up.

- Pre round setup is less centralized on Dynamic.

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


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


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

- Maybe some other things.

## Why It's Good For The Game

See readme for more info.

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

## Changelog

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

Adds 2 new species: Spirits and Ghosts

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

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

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

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

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

### The difference between Spirits and Ghosts

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

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

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


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

## Why It's Good For The Game

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

## Changelog

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

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
2025-06-22 10:02:06 +02:00
f02819360b Diagnosis: The Diagnosing (#91361)
## About The Pull Request
Adds more analog diagnostic stuff, and expands on what's already there.
Current content added:

- Custom text for when you examine different kinds of organs with
stethoscopes and penlights.
- Examining eldritchly corrupted organs too closely (stethoscope and
penlight) is a bad idea.
- If you place a metal disk against a guy sparking like a tesla coil,
you get shocked. Go figure.
- If someone has an actively damaging zombie infection (ie. got clawed
by a zombie, not romerol), you can see it on penlight.
- New Hemoanalytic Scanner, for use in places where real health scanners
with actual useful features are too high class. It's able to scan for
medicines in the blood, check blood and oxygen levels, determine if the
scannee has tox damage, and even check their blood type. It's printable
roundstart for iron and glass, so that medbay isn't completely fucked if
science doesn't do their job and they lose their health analyzers
somehow.
- Nifty status effect messages for those tools!

## Why It's Good For The Game
Fun, rarely used systems are being improved, and seeing as how the
easily available, faster health analyzer is basically the end-all be-all
of diagnostic tools anyways, it's not going to unbalance anything unless
i literally make them just a health analyzer but better.
## Changelog
🆑
add: Vaguely estimate what kinds of hearts and lungs people have from a
variety of weird stethoscope noises! (Or just look it up on the pr, I
won't judge.)
add: Using analog diagnostic tools on eldritch organs from beyond the
waking world or people whose hearts cause their skin to arc like a tesla
coil is a bad idea. Examine people, ya goof.
add: You can see if someone has an actively damaging (read: contracted
straight from the groaning hungry source) zombie infection by using a
penlight. Act out highly emotional headshot hesitation scenes today!
add: New Hemoanalytic Scanner (read: really shitty but roundstart
printable chem scanner), which tells you all about someone's blood, and
can also detect medicines in their bloodstream! Not toxins or
miscellaneous reagents though.
refactor: Refactored and added some penlight, stethoscope, and organ
code. If shit is fucked, please report it on the github issue tracker
ASAP.
fix: X-Ray vision generically causes eyes to glow under penlight, not
just specifically the mutation X-Ray vision.
fix: Reflex Hammers now fit in medical storage items, IE. medbelts and
medkits.
balance: People with welding-eyes or similar will not have their pupils
react to penlight examination.
/🆑

---------

Co-authored-by: ThrowawayUseless <notarealemail@emailservice.fake>
Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
2025-06-19 09:36:02 +02:00
plsleavemealonandGitHub 1dc351eb86 New morbid tools (#91614)
## About The Pull Request

New morbid themed tools to fill out the full suite.

Includes:

tearing drill: morbid variant of the surgical drill. Sprite is recolored
from a standard surgical drill.
jagged bonesaw: morbid variant of the surgical saw. Sprite is a
recolored and slightly edited bonesaw from skyrat. The overlay sprite
for this was made from the ground up by myself
harsh bonesetter: morbid variant of the bonesetter. Sprite is a
recolored bonesetter.
malignant blood filter: morbid variant of the blood filter. Sprite is a
recolored blood filter.

All tools function basically identically to normal tools with 1
exception: They all have the cruel tag, so are best used on the dead
rather then the living. The malevolent autopsy scanner is slightly
faster at performing autopsies...but only if you have the morbid trait.

All sprites and overlays were created by myself.

All item descriptions were created by myself, feedback is welcomed and
encouraged! If you feel that there is a better description for them
please do share.

Also includes:
All tools added to the coroner's wardrobe
All tools replaced in the coroner's surgical tray with the new
appropriately themed variants.
Adds the CRUEL_IMPLEMENT tag to the autopsy scanner, letting coroners do
the autopsy surgery faster

## Why It's Good For The Game

I always felt it strange that the coroner didn't have a full suite of
themed tools, so I set out to fix that. This both helps encourage the
coroner to use their special tools and work with cadavers more
efficiently. It also further solidifies coroner's role in working with
the dead, and lets them show that they are the best at autopsies.


## Changelog

🆑
add: Adds new morbid themed tools for the coroners enjoyment. Coroners
now perform autopsies slightly faster.
/🆑


![image](https://github.com/user-attachments/assets/70a84aad-61c4-435a-a7b1-96922fd9d2b9)

![image](https://github.com/user-attachments/assets/a95f29d0-3ade-485f-9f89-2109d81ad743)
2025-06-15 16:50:16 +10:00
GhomandGitHub 14fb86e3e8 Mutation code cleanup, mutations now have sources to avoid concurrency problems. (#91346)
## About The Pull Request
This PR aims to clean or bring up to date portions of code about dna,
the dna console and mutations. This includes taking care of or removing
some of the awful choices like the pratically useless
`datum/mutation/human` pathing, or the class variable, in favor of using
sources to avoid potential issues with extraneous sources of a mutation.

The files changed are over a hundred just because I removed the
`datum/mutation/human` path, but the actual bulk of the code is mainly
shared between the datum/dna.dm, _mutations.dm and dna_console.dm.

## Why It's Good For The Game
Mutation shitcode is hurting my future plans for infusions a little.
Also it's a much needed refactor. Drafted 'till I'm sure it works
without issues.

## Changelog

🆑
refactor: Refactored mutation code backend. Report any issue.
/🆑
2025-06-08 13:57:10 +02:00
GhomandGitHub 4f6727024d Crafting refactor, implementing materials (#89465)
## About The Pull Request
My original plan was to just implement materials into crafting so that
items would inherit the materials of their components, allowing for some
interesting stuff if the material flags of the item allow it. However to
my dismay crafting is a pile of old tech debt, starting from the old
`del_reqs` and `CheckParts` which still contain lines about old janky
bandaids that are no longer in use nor reachable, up to the
`customizable_reagent_holder` component which has some harddel issues
when your custom food is sliced, and items used in food recipes not
being deleted and instead stored inside the result with no purpose as
well as other inconsistencies like stack recipes that transfer materials
having counterparts in the UI that don't do that.

EDIT: Several things have come up while working on this, so I apologise
that it ended up changing over 100+ files. I managed to atomize some of
the changes, but it's a bit tedious.

EDIT: TLDR because I was told this section is too vague and there's too
much going on. This PR:
- Improves the dated crafting code (not the UI).
- replaced `atom/CheckParts` and `crafting_recipe/on_craft_completion`
with `atom/on_craft_completion`.
- Reqs used in food recipes are now deleted by default and not stored
inside the result (they did nothing).
- Renames the customizable_reagent_holder comp and improves it (No
harddels/ref issues).
- Adds a unit test that tries to craft all recipes to see what's wrong
(it skips some of the much more specific reqs for now).
- In the unit test is also the code to make sure materials of the
crafted item and a non-crafted item of the same type are roughly the
same, so far only applied to food.
- Some mild material/food refactoring around the fact that food item
code has been changed to support materials.

## Why It's Good For The Game
Improving the backbone of the crafting system. Also materials and food
code.

## Changelog

🆑
refactor: Refactored crafting backend. Report possible pesky bugs.
balance: the MEAT backpack (from the MEAT cargo pack) may be a smidge
different because of code standardization.
/🆑
2025-06-01 16:37:43 -07:00
c51ee7efa5 Cyborgs now use storage datum (#90927)
## About The Pull Request

This moves Cyborgs onto using storage datums, removing the remenants of
the shitcode that was Cyborg inventory. It's now done mostly by
equipping/unequipping/storage items, much like how other mobs do.
This allows borgs to take advantage of more hand support stuff and
things like ``dropped()``, so borgs no longer have to copy paste drop
code to ``cyborg_unequip``

It also:
- Removes ``CYBORG_ITEM_TRAIT``
- Removes all borg items being ``NODROP``


https://github.com/user-attachments/assets/11442a10-3443-41f2-8c72-b38fb0126cdb

## Why It's Good For The Game

Currently borgs are able to have their entire inventory open and a bag
below it, which I thought was a little weird. I always assumed they WERE
storage items, so I guess I'm doing it myself.
Cyborgs using storage code makes it easier for contributors to actually
do stuff with, without risking breaking everything. It also hopefully
will make borg items more resilient against breaking in the future, now
that we're not relying on nodrop.
Also just brings them more in line with other mobs, all of which make
use of storages.

## Changelog

🆑
refactor: Cyborg's modules now use storage (so opening a bag will close
modules instead of overlap one over the other).
qol: Observers can now see Cyborg's inventories (like they can for
humans).
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2025-06-01 01:26:53 +00:00
SmArtKarandGitHub b4061f1800 [MDB IGNORE] Blood Refactor Chapter 2: Collector's Edition (#91054)
## About The Pull Request

Refactors most of blood handling code untouched by #90593 and completely
rewrites all blood decals, components and reagents.

- Blood types now have behavioral flags which allow them to control
where they leave decals/DNA/viruses. Oil no longer transfers DNA and
viruses with it, while podpeople water-blood doesn't leave visible
decals on turfs and items, but still can be picked up by DNA scanners.
- Multiple blood types have received unique handling - liquid
electricity blood now glows in the dark, oil trails are flammable and
lube ones are slippery. Oil blood can be restored with fuel, lube with
silicon and slime with stable plasma (as normal plasma already passively
regenerates their blood), instead of everything using iron. Saline
solution only supplements on iron-based blood and won't do anything to
help with bloodloss for species who rely on different blood types.
(Roundstart this applies only to Ethereals)
- All blood logic has been moved away from the blood reagent itself into
a blood element that is assigned to the blood reagent by default, and to
any reagent that's drawn from a mob as their "blood" (in
``transfer_blood_to``). This means that blood you draw from lizards will
be green and have lizard's blood description instead of mentioning red
blood cells, Ethereal "blood" will actually contain their DNA and genes,
etc.
- Refactored all blood decals. Blood states are no more, everything is
now handled via blood DNA. Credits to MrMelbert and Maplestation, as a
significant amount of code has been taken from
https://github.com/MrMelbert/MapleStationCode/pull/436 and many of his
followup PRs. Oil and xenomorph splatters are now subtypes of blood,
blood drying is now animated, blood trails now curve and can be
diagonal.
- Rewrote bloodysoles and bloody_spreader components, credits to Melbert
again for the former, while latter now makes more sense with its
interactions. Bloody soles no longer share blood DNA with your hands.
- Ported Melbert's bloody footprint sprites and bot-blood-spreading
functionality.
- Removed all species-side reagent interactions, instead they're handled
by said species' livers. (This previously included exotic blood
handling, thus the removal)
- Slightly optimized human rendering by removing inbetween overlay
holders for clothing when they're not needed.
- Blood-transmitted diseases will now get added to many more decals than
before.
- Cleaned up and partially refactored replica pods, fixed an issue where
monkeys/manipulators were unable to harvest mindless pods.
- Exotic bloodtype on species now automatically assigns their blood
reagent, without the need to assign them separately.
- Clown mobs now bleed (with colorful reagent instead of blood during
april fools), and so do vatbeasts (lizard blood)
- Implemented generic procs for handling bleeding checks, all sorts of
scanners now also correctly call your blood for what it is.
- Podpeople's guts are now lime-green like their organs, instead of
being weirdly greyish like their water-blood. (Their bleeding overlays
are still grey, as they're bleeding water)
- Slimepeople now can bleed. Their jelly is pale purple in color, but
their wound overlays copy their body color.
- Injecting/spraying/splashing/etc mob with a reagent preserves its
data, so you could theoretically recycle fine wines from someone's
bloodstream
- Fixed burdened chaplain's sect never actually giving a blessing when
applying effects, and giving a blessing when nothing can be healed.
Inverted check strikes again.

- Closes #91039 

#### Examples

A lot of blood here has dried, visually the blood colors are almost
exactly the same as before either of the blood refactors.


![dreamseeker_BSP7FE9pRB](https://github.com/user-attachments/assets/45711fa0-ae65-4ec2-9e89-753fa7dd876f)

![dreamseeker_zyv9ssh5VN](https://github.com/user-attachments/assets/7b112854-b7e3-4bfe-b78b-199a55b5b051)
2025-05-31 19:38:07 -05:00
7b04440de1 Re-adds the Dragoon tomb ruin & Spear (#90781)
## About The Pull Request

It was removed in https://github.com/tgstation/tgstation/pull/27799
because the spear was broken and the Flans' AI sucked with not-great
sprites and was all just one big reference. Original addition:
https://github.com/tgstation/tgstation/pull/22270

This re-adds it, updates the map (now using airless turfs) with extra
ambiance, using ash whelps (lavaland variation of ice whelps) instead of
Flans, re-adds the spear, and adds armor as well this time around.

The spear gives you a jump ability to crash down upon a player below
you, rather than teleporting to wherever you throw the spear at. You
can't attack while mid-air, you can go through tables but not
walls/doors, and you also can't un-dualwield or drop the spear mid-jump.
Landing on a mob deals double damage to them (36 to unarmored people),
while landing on objects deals 150 damage to them (taken from savannah's
jump ability, which was in turn taken from hulk's punching)
It's also got some extra throw force (24 compared to default spear's 20)

The armor has basic security-level armor but covers your whole body.
Does not include space protection, and can be worn by Ian.

Video demonstration


https://github.com/user-attachments/assets/a77c3a0d-17d2-4e8d-88b6-cdbca8b1f2c3

New sprites demonstration

https://github.com/user-attachments/assets/0e465351-5484-406f-8adc-ffa1ac180daf

Armor demonstration

https://github.com/user-attachments/assets/abdfcac6-65bf-443c-bde2-27d157ee3a80

Map

![436285657-104a555f-60dc-46f0-8283-a92db2ca5352](https://github.com/user-attachments/assets/a1677c9a-7157-4562-9703-5ad44c923e8d)

With the changes in https://github.com/tgstation/tgstation/pull/90771 I
had to mess with ash whelp abilities a bit, I decided to make them use
cold fire instead of hardcoding blue color on top of the fire sprites,
and it now acts accordingly too


https://github.com/user-attachments/assets/cfca0d70-d13d-4c73-996d-2d4a7519866d

The jump was taken from Savannah Ivanov, and Goof's bunny jumping.

##### Code bounty by Ezel/Improvedname

## Why It's Good For The Game

This Re-implements a old spear that got removed for its buggyness/bad
mapping and on the authors request as well not wanting to deal with it.

Re-introduces the SkyBulge as a space ruin, referencing Dragoons from
Final Fantasy. this just like any normal spear, but using the savannah
jump mechanic, this allows you to close distances with the spear
avoiding ranged projectiles in the jump, and if you directly land on
your target you will do double the damage.

##### -Ezel/Improvedname

## Changelog

🆑 Ezel/Improvedname, Toriate, JohnFulpWillard
add: Re-added the Dragoon Tomb lair, now has a Skybulge spear and
Drachen armor.
balance: Ice whelps now spit out cold fire.
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2025-05-30 11:36:38 +10:00
throwawayuselessandGitHub ff48bac921 Fix my own issue less than an hour after making it, thus creating a dangerously powerful infinite gbp loop. (#91354)
## About The Pull Request
Flips the wavelength and intensity around in microlaser code toc heck
how long it takes to apply
fixes #91353 
## Why It's Good For The Game
the code itself says it should be the other way around smh smh
## Changelog
🆑
fix: Wavelength is now the main factor in how long your microlaser takes
to activate, rather than intensity for some reason.
/🆑
2025-05-27 18:02:03 +02:00
RoxyandGitHub 7d08da9fd6 Refactor split_stack to two separate procs, fixes a hard delete in the process (#91306)
## About The Pull Request

I was trying to fix a hard delete and it became a whole thing
- Reworks `/obj/item/stack/proc/split_stack` to no longer also try to
put it in the user's hands, or take a user at all. The proc now purely
splits the stack and returns the new one
- Creates `/obj/item/stack/proc/split_n_take` which uses `split_stack`
and does the other behaviors like fingerprint adding and putting in the
user's hands
- Update usages of `split_stack` to either properly use it and remove
the code added to get around the put in hands behavior, or change them
to use `split_n_take` instead
- Fix a random bug in pipe bomb building I noticed while testing

## Why It's Good For The Game

Ultimately this fixes a hard delete with goldgrubs eating a piece of ore
while sitting on top of another piece of ore of the same type (the put
in hands behavior of split stack would cause the ore being consumed to
drop to the ground briefly, merge with the ore there, and then qdel
while still being moved to the goldgrub contents), but also added bonus
that it makes `split_stack` just split the stack and not some other
stuff too. Also a pipe bomb bug fix

## Changelog

🆑
fix: fixed being able to add seemingly infinite refined bluespace
crystals to pipe bombs
refactor: /obj/item/stack/split_stack no longer tries to move the stack
into the user's hands, use /obj/item/stack/split_n_take for that
/🆑
2025-05-25 03:14:53 +03:00
cb51a652a9 Adds automatic GAGS icon generation for mapping and the loadout menu (#90940)
## About The Pull Request

Revival of https://github.com/tgstation/tgstation/pull/86482, which is
even more doable now that we have rustg iconforge generation.

What this PR does:

- Sets up every single GAGS icon in the game to have their own preview
icon autogenerated during compile. This is configurable to not run
during live. The icons are created in `icons/map_icons/..`
- This also has the side effect of providing accurate GAGS icons for
things like the loadout menu. No more having to create your own
previews.


![FOuGL6ofxC](https://github.com/user-attachments/assets/e5414971-7f13-4883-9f7f-a8a212b46fe8)

<details><summary>Mappers rejoice!</summary>


![StrongDMM_1oeMSoRHXT](https://github.com/user-attachments/assets/83dcfe4c-31be-4953-98f3-dff90268bbc4)


![StrongDMM_uyqu3CggPn](https://github.com/user-attachments/assets/7896f99e-2656-40e1-a9da-3a513882365a)

</details>

<details><summary>Uses iconforge so it does not take up much time during
init</summary>


![dreamdaemon_u4Md3Dqwge](https://github.com/user-attachments/assets/17baaff8-5d5e-4a4d-ba8f-9dd548024155)

</details>

---

### Copied from https://github.com/tgstation/tgstation/pull/86482 as
this still applies:

Note for Spriters:

After you've assigned the correct values to vars, you must run the game
through init on your local machine and commit the changes to the map
icon dmi files. Unit tests should catch all cases of forgetting to
assign the correct vars, or not running through init.

Note for Server Operators:

In order to not generate these icons on live I've added a new config
entry which should be disabled on live called GENERATE_ASSETS_IN_INIT in
the config.txt


## Why It's Good For The Game

No more error icons in SDMM and loadout.

## Changelog

🆑
refactor: preview icons for greyscale items are now automatically
generated, meaning you can see GAGS as they actually appear ingame while
mapping or viewing the loadout menu.
/🆑

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2025-05-24 15:21:02 -07:00
MrMelbertandGitHub 5261efb67f Re-refactors batons / Refactors attack chain force modifiers (#90809)
## About The Pull Request

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

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

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

## Changelog

🆑 Melbert
refactor: Batons have been refactored again. Baton stuns now properly
count as an attack, when before it was a nothing. Report any oddities,
particularly in regards to harmbatonning vs normal batonning.
refactor: The method of adjusting item damage mid-attack has been
refactored - some affected items include the Nullblade and knives.
Report any strange happenings with damage numbers.
refactor: A few objects have been moved to the new interaction chain -
records consoles, mawed crucible, alien weeds and space vines, hedges,
restaurant portals, and some mobs - to name a few.
fix: Spears only deal bonus damage against secure lockers, not all
closet types (including crates)
/🆑
2025-05-19 13:32:12 +10:00
MrMelbertandGitHub d1fffd9b47 Analyzer blood printout uses conditional tooltips as god intended (also fixes some) (#90970)
Health Analyzer tells you what type of blood your target can
accept.
2025-05-16 14:48:17 -04:00
SmArtKarandGitHub 352c7ecdd7 Refactors ITEM_SLOT_BACKPACK and ITEM_SLOT_BELTPACK out of inventory code (#90869)
<!-- 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

So yesterday I've spotted that we had wrong SLOTS_AMT value set, and
went a bit down a rabbit hole and found how abhorrent our
ITEM_SLOT_BACKPACK and ITEM_SLOT_BELTPACK usage is. They're not real
inventory slots, but just "hints" at items being located in backpacks or
belts, or instructions to put an item into a belt/backpack. This PR
rewrites all usages of them as "hints", and adds an equip_to_storage
proc used to equip an item into a storage positioned in a certain slot,
so ``equip_to_slot_if_possible(item, ITEM_SLOT_BACKPACK)`` is now
``equip_to_storage(item, ITEM_SLOT_BACK)``

## Why It's Good For The Game

Its really stupid and we shouldn't have those as slot flags,
ITEM_SLOT_HANDS at least makes sense but those two are just absurd.
Should make equipping things into non-backpack storage a bit easier too,
in case we end up going through with the idea of suit/uniform pockets
being a major part of player inventory.

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

🆑
refactor: Refactored how backpack and belt contents are handled in mob
inventory code, report any issues with lingering item effects or
inability to equip things into them!
/🆑

<!-- 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. -->
2025-05-15 01:07:41 +01:00
FlufflesTheDogandGitHub d31c761237 Fix multitool arrow hard delete (#91114) 2025-05-14 14:58:07 -07:00
SmArtKarandGitHub 8fc6aacc79 Fixes wheelchair TTV logging, prevents detonation when stunned/timestopped (#91010)
## About The Pull Request
Wheelchair bell detonation did not give any fingerprints to the bomb,
resulting in the person who attached it not being logged anywhere. The
bell action could also be used while stunned or paralyzed, allowing you
to blow yourself up during timestop which is a bit silly.

## Why It's Good For The Game

Makes admins job easier, fixes an oversight/exploit.
2025-05-13 06:16:36 +00:00
Maximal08andGitHub 0b1efc2c65 [no GBP] Fixing the arrow display when using the multitool (#91047)
## About The Pull Request


![dreamseeker_aOB3rxXxs2](https://github.com/user-attachments/assets/cd50c412-88b2-4795-afcf-3aaf239af70f)
On multi-level maps, if you have mesons, the multitool arrow broke the
entire game screen (in the picture) when climbing and descending stairs.
(I saw the same thing on heretic's local server, but I reproduced it 2
times and didn't fully understand the reason for this, so I'm only
fixing the multitool)


https://github.com/user-attachments/assets/c8ff1382-da46-485c-ae71-1f9041591cde


## Why It's Good For The Game

Well, I made this mistake, it's my duty to fix it, and I hope it's
working correctly now.
## Changelog
🆑

fix: Fixing the arrow display when using the multitool

/🆑
2025-05-09 16:42:06 +10:00
Joshua KidderandGitHub 1a8085d42b Bluespace Light Replacer no longer has a range restriction (#90829)
## About The Pull Request

The bluespace light replacer is totally underwhelming by having its
range limited to what's in view; this pull request removes the range
restriction entirely. Now the only restriction is being on the same
z-level.
## Why It's Good For The Game

The bluespace light replacer already can't be emagged, so limiting its
range to what's in your immediate view seems pointless; light fixtures
are already hard-as-hell to click, so some bored HoP or Warden replacing
a few lights through their camera console isn't going to invalidate the
janitor. As well, it gives antag janitors a plausible reason to ask for
a security camera console to be installed in their office.
## Changelog
🆑 Bisar
qol: Bluespace light replacer no longer has a range limit.
/🆑
2025-05-08 00:49:26 +00:00
LucyandGitHub 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
Maximal08andGitHub 4de5bcbf9c multitool found apc qol (#90896)
## About The Pull Request

Replaces the text description for the APC multitool search function with
directional arrows similar to Heretic.
(If someone has better ideas for a sprite, I'm ready to listen.)


https://github.com/user-attachments/assets/833b4f10-eab2-4833-bdf6-d02bd5820f48


## Why It's Good For The Game

The old search function was inconvenient for players, it looks much
better.
## Changelog
🆑
qol: Replaces the text description for the APC multitool search function
with directional arrows similar to Heretic.
image: Sprite for multitool arrow

/🆑
2025-05-05 09:28:29 +00:00
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
FlufflesTheDogandGitHub a18dbc2971 Fix health analyzer runtime on cybernetic organs (#90900)
we probably shouldn't add a string to people's organs. that's what lists
are for.
2025-04-30 07:36:37 -04:00
_0StevenandGitHub 886cf157bc Allow for placing certain items directly on the floor, with precision (#90805)
## About The Pull Request

So I really wanted to do the stereotypical "really I'm just a
construction worker" break-in bit, but then quickly realized you can't
even place warning cones on the floor! You have to awkwardly drop them,
or put them on a table and move them off!
Thinking about that, I remembered my similar annoyance with candles for
rituals or wet floor signs when playing a janitor.

Initially this was intended to include the ability to stack warning
cones for easy storage and placement, but I realized that was taking a
_lot_ more time than making the other items placeable on the floor.
Because of this, I decided to atomize the much less complex part off
into this pr.

So here, in this pr, we add a simple element
`/datum/element/floor_placeable` and apply it to a list of items for
which I think "placing it on the floor" makes enough sense as an
interaction.

As a side to this, we add the plastic pickup/drop noises to wet floor
signs and warning cones, because they're made of plastic and it's
leagues better than being entirely inaudible.
We remove `var/cooldown = 0` from `/obj/item/toy/cattoy` because it
wasn't used.
## Why It's Good For The Game

Can't do the stereotypical hazard vest break-in in _style_ without the
ability to actually place the cones:

![image](https://github.com/user-attachments/assets/d9e8707b-87a2-4463-8bac-a5d8adf917c7)

Oh man is it so much less of a pain to make fancy schmancy rituals when
you don't have to place candles on tables and drag them off for it to
work:

![image](https://github.com/user-attachments/assets/c8d4966e-29b8-48bc-ac0b-c357157d4ba3)

It's really funny to be able to play with toys on the floor:

![image](https://github.com/user-attachments/assets/d604157e-4a90-4e50-a44f-0e9f2f63aeac)
## Changelog
🆑
add: Certain items can now be placed directly on the floor in the
clicked on location. This currently includes warning cones, wet floor
signs, candles, action figures, plushies, mech toys, and a list of other
toys.
sound: Warning cones now use plastic pickup/drop sounds.
sound: Wet floor signs now use plastic pickup/drop sounds.
/🆑
2025-04-28 15:58:45 +01:00
BloopandGitHub 3d01e86e29 There will be (colorful) blood: datumizes bloodtypes, greyscales blood sprites, and fixes a lot of inconsistencies with gibs and forensic data (#90593)
## About The Pull Request


This PR:

- Converts all of the blood types into their own datums, which can be
set up to have their own colors, descriptions, and other fun unique
properties. For example, the clown blood that is constantly randomizing
itself.

- Converts all the blood decals into greyscale, which in turn eliminates
the need for separate xeno sprites. They both use the same ones now.

- Audit of blood splatters/gibs/bodyparts/organs to make sure that they
are getting the correct forensic data applied to them.

- For the admins: Adds a clown blood smite.

My primary goal with was to make the appearance of the new sprites look
almost indistinguishable to the original ones.

I consider this a "first pass", as in there are still some further
refactors I would like to do on the backend side, but am satisfied with
it enough to push it forward as a first step towards a better blood
system! I didn't want to do too much at once because of A) fatigue and
B) easier to test things to make sure I'm not breaking something
important this way.

This has been test-merged on Nova for over a week now and has been going
great, so I finally got around to upstreaming the bones to TG. Although
I did test it a bit you may want to TM it just in case I missed some
things when copying it over.
2025-04-28 00:57:59 -05:00
John WillardandGitHub 2657cfd28c Infusing organs now makes you non-human (#90661)
## About The Pull Request

Currently by TG rules, despite how you may visually look, anything that
the health analyzer declares as "Human" is human, this PR aims to fix a
problem that is visually humans appearing very non-human, now when you
infuse yourself with the Genetics infuser, you become a "-derived
mutant", much like hulks get.

Video Demonstration


https://github.com/user-attachments/assets/0749ea8c-642e-4d44-bf5e-22f6b6eb5759

## Why It's Good For The Game

DNA infused species will currently show up as their own species, like
nothing has happened. This makes you show up as a mutant as you infuse
other species DNA into yourself which IC makes more sense, since you can
infuse yourself with cats and become a felinid, but not be ruled as a
non human since you show up as a human on health analyzer.
This will give more clear indictators for Silicon players what is human
and what isn't, and also preparing it for
https://forums.tgstation13.org/viewtopic.php?t=38555 which is a
discussion about making DNA infused humans who show visual features as
non humans.

##### - Ezel/Improvedname

## Changelog

🆑 Ezel/Improvedname, JohnFulpWillard
balance: Players who use the DNA Infuser are now "derived mutants" of
their original species, meaning humans are no longer human after
infusing themselves.
/🆑
2025-04-28 15:38:22 +10:00
GhomandGitHub 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
MrMelbertandGitHub 69ae433d4e Wearing a human skin suit "fools" analyzers (#90681)
## About The Pull Request

If you have a human skin suit equipped, with its hood up, the health
analyzer will report you are a `"Human"`


![image](https://github.com/user-attachments/assets/bdef377f-6de4-4c36-ab20-343a8f02b51b)

## Why It's Good For The Game

It's the perfect disguise for alien species

## Changelog

🆑 Melbert
add: Human skin suit may trick the health analyzer... sort of
fix: Human skin suit no longer gives a useless action
/🆑
2025-04-18 11:31:23 -04:00
John WillardandGitHub d8ccd8c63f Radio sfx option is in the radio instead of settings (#90598)
## About The Pull Request

Opinions aren't too strong about taking it out of the settings page, I
only did it cause settings doesn't auto update with the pref updating,
so I can put it back if wanted.

Adds a volume slider in radios which you can use to edit your own blip
volume, which then plays a blip back at you so you know what it sounds
like.

## Why It's Good For The Game

You now change the volume using the in-game item instead of having to
scroll through a bunch of settings and find it, and you get instant
feedback so you know exactly what it's gonna sound like.


https://github.com/user-attachments/assets/fe936ed8-9620-4e81-8782-e6fa99de100a

## Changelog

🆑
qol: Radios/headsets now have a slider to change the volume from radio
noises.
/🆑
2025-04-16 17:59:15 -07:00
MrMelbertandGitHub 67dd51be79 Reworks language translations. Add partial language understanding. Bilingual update. (#90252)
## About The Pull Request

Fixes #89445 (well, technically. It fixes the bug associated but these
`say`s should really be emotes.)

Three things:

1. Reworks how language translation works.

Rather than scrambling a sentence into a language entirely, sentences
are now scrambled on a per-word basis.

Additionally, the 1000 most common words of a language are *never*
re-scrambled across the duration of a round. Once it's set it's set in
stone.

Example: (Sample / Old / New)


![image](https://github.com/user-attachments/assets/69be41fa-bc40-45f0-bd80-e24e799c9f38)

This allows for a number of things:

- More consistent translations, making it (more) viable to actually
"teach" someone words for something
- Maintaining emphasis such as caps (but not `||`, `++`, or `__` - at
least not yet)
- The following:

2. Adds partial language understanding

Some languages can understand portions of other languages.


![image](https://github.com/user-attachments/assets/b6eee2c7-f564-437b-8c7a-bd1d88a9b680)

This pr adds the following:
- Those who understand Beachtongue can understand 50% of Common and 33%
of Uncommon words.
- Those who understand Common can understand 33% of Beachtongue and 20%
of Uncommon words.
- Those who understand Uncommon can understand 20% of Common and 20% of
Beachtongue words.

3. Bilingual quirk has been expanded to accomodate these changes.

There are now two more preferences:
- Language Speakable
- You can toggle this, so you only understand the language, rather than
understand AND speak.
- Language Skill
- If you choose to be unable to speak the language, you can set how much
of the language you can understand, down to 10%.

## Why It's Good For The Game

Playing around languages is fun, but due to the way our translation
works, ALL context is immediately lost for what the other person may be
saying.

If the other person is shouting in all caps? Output language is normal
chatting. This is lame!

Even if someone is unable to understand you, there's a LOT you can
convey just by how you speak, and getting that across in game is quite
difficult when all translations get mauled so badly.

So this changes that. 

- Emphasis like caps lock is maintained, so you see someone shouting in
caps in a foreign language you can probably intuit something is wrong
(but not what is wrong!)
- Some languages can gleam bits of other languages, so you MIGHT be able
to pick out context if you pay close attention
- "Brother" languages will now feel more like "brothers" and not
completely divergent
- You can even "teach" someone words in your language - at least the
most common words! (Until next round)

## Changelog

🆑 Melbert
add: Languages can now have partial understanding of other languages.
More common English words are more likely to be mutually understood.
add: Those who understand Beachtongue can understand 50% of Common and
33% of Uncommon words.
add: Those who understand Common can understand 33% of Beachtongue and
20% of Uncommon words.
add: Those who understand Uncommon can understand 20% of Common and 20%
of Beachtongue words.
add: Bilingual quirk: You can now choose between being able to speak or
not speak the language
add: Bilingual quirk: You can now choose to have partial understanding
of your language, rather than full.
qol: If you speak in ALL CAPS in a foreign language, the translated
words will also be ALL CAPS.
qol: Many more forms of punctuation are now conveyed across
translations.
qol: The 1000 most common English words will now never be scrambled when
translating into other languages for the duration of the round. This
means you can actually "learn" some words if you are especially
attentive! (Until the next round at least)
refactor: Refactored language translations. Report if you see any super
odd looking translations.
fix: Force-says forcing you to speak common (such as cult invocations)
will now correctly force you to speak common (even if you don't know
common)
/🆑
2025-04-13 22:01:33 +01:00
IajretandGitHub 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
36788ee05f Weather DLC - Make it Rain Anything! (#89550)
## About The Pull Request
##### Disclaimer - Some of the code/icons/sounds were ported from TMGC. 

Introducing more weather types! And yes, you can now have rain be
reagent based!

<details>
<summary>Regular Rain</summary>


![dreamseeker_9S1WzdBW8Z](https://github.com/user-attachments/assets/83aaa1fe-9105-4e15-8455-0337c5c592ef)

</details>

<details>
<summary>Blood Rain</summary>


![dreamseeker_SZufAoXDFt](https://github.com/user-attachments/assets/209404dc-34dd-4381-9bab-9b84eaec2658)

</details>

<details>
<summary>Acid Rain</summary>


![dreamseeker_ngiOqdB5n2](https://github.com/user-attachments/assets/0ab953c6-a215-444a-bdbd-addfc2b1ddbb)

</details>

You can even make it rain ants, plasma, or drugs. All of their effects
get applied to turfs, objects, and mobs depending on the weather options
you select.

Did I mention... there is thunder?

<details>
<summary>Thunder Strikes</summary>

![Untitled video - Made with
Clipchamp](https://github.com/user-attachments/assets/7c5c5930-6e0a-4706-a41b-3cbcc277bfd5)

</details>

<details>
<summary>Sand Storms</summary>


![dreamseeker_ZEFUS73dSA](https://github.com/user-attachments/assets/4a754f2d-c4e5-4b2f-9add-4742628cfa74)

</details>

Despite all this new stuff, none of it has been directly added to the
game but the code can be used in the future for:
- Wizard event - Similar to lava on floor, but this time make the
reagent random or picked from a list and give wizard immunity
- Chaplain ability - Maybe make this a benefit or ability once enough
favor has been obtained
- Admin events - I have added a BUNCH of admin tooling to run customized
weather events that let you control a lot of options
- New station maps/biomes for downstreams (Jungle Station, etc.)
- Change Ion storms to use the new weather system that triggers
EMP/thunder effects across the station
- IceBox could get plasma rain
- Lavaland could get thunder effects applied to ash storms

Relevant PRs that removed/added some of the weather stuff I used:
- #60303
- #25222

---

#### Attribution
- Rain sprites were added via [novaepee](https://github.com/novaepee) in
https://github.com/tgstation/TerraGov-Marine-Corps/pull/9675
- Sand sprites were added via [TiviPlus](https://github.com/TiviPlus)
(who commissioned them from bimmer) in
https://github.com/tgstation/TerraGov-Marine-Corps/pull/4645
- Rain sounds [already existed on
tg](https://github.com/tgstation/tgstation/pull/25222#discussion_r106794579)
and were provided by provided by Cuboos, using Royalty Free sounds,
presumed under default tg sound license - Creative Commons 3.0 BY-SA
- Siren sound is from siren.wav by IFartInUrGeneralDirection --
[Freesound](https://freesound.org/s/46092/) -- License: Attribution 4.0

The original `siren.ogg` sound used on a lot of SS13 servers doesn't
seem to have any attribution that I could locate. The sound was added
about 15 years ago. So I just looked for a somewhat similar sounding
siren noise on Freesound.

## Why It's Good For The Game
More weather customization!

## Changelog
🆑
add: Added new weather types for rain and sandstorms. Rain now uses a
reagent that gets exposed to the turfs, mobs, and objects. There is also
a thunder strike setting you can apply to any weather.
add: Hydro trays and soil will now add reagents to their trays when
exposed to a chemical reaction. (weather, shower, chem spills, foam
grenades, etc.)
add: Weather temperature now affects weather reagents and mobs body
temperature.
bal: Snowstorm temperature calculations were tweaked to allow universal
weather temperature effects.
sound: Added weather sounds from TGMC for rain and sirens (attributed to
Cuboos and IFartInUrGeneralDirection )
image: Added weather images from TGMC for rain and sand storms
(attributed to Novaepee and Bimmer)
refactor: Refactored a lot of the weather code to be more robust
admin: Admins can now control more weather related options when running
weather events. The weather admin verbs have been moved to their own
"Weather" category under the Admin tab.
/🆑

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2025-04-07 18:46:28 +02:00
BloopandGitHub e5f8a566bd Fixes AI detector runtiming when it finds machine-users (#90448)
## About The Pull Request

Fixes this runtime 


![image](https://github.com/user-attachments/assets/eef1887e-52ae-4db6-8742-ccb66a791482)

That list can contain non-AI cameras which I don't think was the
intention at all. So we add typechecking to ensure we aren't trying to
check a var that doesn't exist.

## Why It's Good For The Game

More reliable AI detection tools hopefully

## Changelog

🆑
fix: fixes the AI detector breaking if there is a machinery-camera
operating user nearby (like xenobio console or camera console for
instance)
/🆑
2025-04-07 11:02:28 +02:00
MrMelbertandGitHub 2e50ac5ff5 Fix radio messages being filtered when you are affected by some speech modification (#90358)
## About The Pull Request

Fixes #88353

The issue:

```
Say()
    try_speak() // checks filter
    say signal // modifies message to something blocked by the filter
    radio() // checks filter, throws error!
```

The fix:

`talk_into_impl` now passes `ignore_spam = TRUE, filterproof = TRUE`. 

This is fine because the only place this is invoked by **players** is
`say` which has already run these checks.

## Changelog

🆑 Melbert
fix: Trying to talk over the radio with a stammer will no longer
occasionally result in the IC chat filter blocking you
/🆑
2025-04-05 19:07:11 +02:00
fbbddbb012 Revises and adds several new bounties for assistants, roboticists, and medical doctors. (#89772)
## About The Pull Request

This pull request makes several balance adjustments to older bounties,
primarily for the roboticist and assistant. Additionally, this adds a
new type of medical doctor bounty as well.

### Bounty Modifications:

**Assistant**: Toolbox bounty
The toolbox bounty now requests 1 toolbox instead of 6. However, the
toolbox bounty now requires a fully packed mechanical toolbox worth of
contents. That means any toolbox, containing a screwdriver, wrench,
welding tool, crowbar, analyzer, and wire cutters. When shipped,
non-toolbox contents are dropped.

Why It's Good For The Game (**WIGFTG**):
This bounty follows bad design principles, being a bounty that can be
solved entirely from a lathe. For any of these cases, we want to either
replace them or recontexualize them into an activity that forces players
to either learn more about the mechanics in and around that area as a
form of played tutorial, give them a toe-dip into the mechanics required
to complete the activity, or perform an activity that makes the station
better for having completed it.

For the toolbox bounty, this goes all in on teaching players about the
full set of toolbox equipment, instead of just needing one printable
item, it takes them through the full autolathe menu and gives them
plausible deniability for getting a full set of tools.

**Assistant:** Potted Plants.
The potted plant bounty now requires 3 potted plants as opposed to 8.
Most stations are going to be completely devoid of potted plants after
collecting 8 of these, where lowering the quantity to 3 allows for a
larger amount of competition for this type of bounty. This also
disallows using plastic potted plants from being used in the bounty as a
trade off, as real potted plants are available through other means.

**WIGFTG**: Removes a lathe-solved bounty, and adjusts the quantity to
compensate for the fact that previously you would loot the entire
station of all of it's potted plants in order to complete this bounty
one time.

**Assistant:** Action Figures -> Toys
Action figures and their general availability widely varies by maps. At
best, you can snag one per office on (I think) delta, and at worse
you'll need to fish them out of arcade machines across the station.
Considering how often new toys are added to the vending machine, this
can be a very raw deal where you might be spending 10s of minutes just
for maybe one or two action figures. Instead, it feels like a wider and
better solution is to just make this touch the whole toys category.

WIGFTG: For the toys bounty, it's far too scarce to complete regularly,
but instead now it gives makes players interact with the arcade machine
wholistically, which in turn requires players to have to play an arcade
machine just enough that they're likely to gains a level in the gamer
skill, and serve as a primer to interact with how skills interact with
the round at large. Granted, it's the gamer skill, so it's not the end
of the world if players are getting skill increases here as opposed to
other skills that may have more of an effect on the round at large.

**Assistant:** Pens.
Fuck this bounty. I have removed it. 

**WIGFTG**:
Allow me to elaborate.
So the pens bounty requires 10 pens. However, it requires specifically
`/obj/item/pen`, no subtypes. `/obj/item/pen` is not printable. It is
not found at quantities that make it easy to specifically complete. You
cannot use red pens. Or fountain pens. Or blue pens. Or Crayons. Just
standard black pens that spawn in your PDA and on paper bins. And you
need 10. There is **A** printable pen, however,
`/obj/item/pen/red/security`, which is however printable from
autolathes, leading many players and myself to think that this is
another easy printable bounty. But EVEN THEN, even if those pens WERE
ACCEPTABLE, having to manually carry 10 tiny objects to complete a
bounty worth not even 200 credits to the bounty holder? This just sucks.
It's Bleem. Get it outta here.


**Robotics**: All current mech bounties (MK 2 Ripley, Clarke, Odysseus,
Gygax, and Durand)
Robotics bounties have been reworked. Now, mecha bounties require that a
new mecha of that type be built, and that a holodiagnostic scan be
completed of the mech. This can be done once-per mech, which will print
out a holodiagnostic sheet onto the floor. This sheet is what is turned
in for the bounty. As a result, the value of these bounties have been
roughly halved. For those looking to collect the rest of the previous
value, all 5 of these mechs can now be sold on the cargo shuttle for the
remaining value of the old bounties.

**WIGFTG**: The biggest hurdle for roboticists when it comes to economy
is twofold: Roboticist need resources far more than most other jobs in
the game. No metal means no cyborgs, or mechs, or cool equipment for
robotics. But, if a roboticist needs credits, they have to trade away a
new mech in exchange for some of the largest credit pool bounties in the
game. If they can't spend those credits, or can't receive anything using
those credits, that's effort wasted.

There's a tremendous amount of uncertainty when it comes to robotics
being able to meaningfully interact with the credit economy as it
currently stands, or being able to leverage the credit economy to solve
any of their issues. If the player really does just want to sell their
mech for credits, this also provides them with a method of doing so that
will still reward them even further if they feel they truly do not need
it. Side note, the cargo loader mech "old bess" has the trait provided
by generating a diagnostic already, preventing them from just scanning
that for an easy minute 1 bounty.

Ultimately, having to sell a mech for credits as opposed to getting to
use it is not *fun*. Getting to get paid for doing your job, and getting
the benefits of something you'll have spend a reasonable amount of time
and the station's resources on is *fun*. It's a better pay off. It's why
we're here.


![image](https://github.com/user-attachments/assets/d372a338-14dc-49a3-8279-4cb379c13c10)


**Medical:** Crew Scan Bounties.
Medical staff are now given the chance to perform routine medical scan
bounties. These require a medical doctor to scan another crew member who
is above 90% health, and then print the reports to submit. Some
stipulations:
* The report cannot be of the bounty holder.
* A scanned crewmate must be scanned above 90% heath. 
* When the report is printed, the target is given a trait for 5 minutes,
`TRAIT_RECENTLY_TREATED`, which disqualifies them being the target of a
submitted medical report. This is to encourage the doctor to check up on
several members of the crew when submitting this bounty.

**WIGFTG**:
Medical bounties are in an awkward place, honestly. They are possible to
become purely printable bounties using either advanced organs, or
through the organ grower. However, both of these outcomes are research
locked, and will require a more through look down the line, don't get me
wrong. In the meantime, this falls squarely under that area of "getting
medical doctor bounties to be more closely aligned with doing what
they're already supposed to be doing".

I also floated the idea of making medical bounties pick a random
crewmate for a check-up as opposed to a few different members of the
crew from anyone. I might follow up on that at a later date, but this PR
was already getting a bit overloaded.


![image](https://github.com/user-attachments/assets/63ab2a4f-1eab-410b-9b37-c9299199191b)


### Some other things tacked on here:
I swear I'll be fast.

The `/obj/item/paper/medical_report` created is a new subtype of paper
as opposed to the old type that was used by health analyzers, which
holds the last scanned mob as a weakref as opposed to just creating a
snowflaked paper as we were doing before.

The bounty pad, when it generates it's list of bounties, now works
slightly differently so that there's no chance of getting a list of
three "random" bounties that are all exactly the same thing, called in a
new proc, `generate_bounty_list()`.

I've added a new debug item, called the `/obj/item/bounty_voucher`. This
item allows you to use it in-hand and it gives the activating player a
new bounty from a list of all possible bounties. This makes my life,
just specifically just me and nobody else, easier when testing bounties.

As mentioned above, the mecha UI required adding a new button to it in
order to create holoscans. It's fairly innocuous if I do say so myself,
but I can make further tweaks if it's an issue.

## Why It's Good For The Game

I've sprinkled a good bit of this in above, but in general, bounties
needed some more TLC to make sure they align with their place as a
tertiary source of making money in the game. I've talked about this
before in some now-ancient design documents, but in summary, there's
three forms of credit sources in the game:

* Primary sources: This is regular payroll, earned by playing the game
when the economy SS fires. In theory, this is how much money you can
spend without needing to think about making a purchase most of the time.
* Secondary sources: This is from sources like tourist bots. Ignore the
design decisions they inhabit, they're gameplay loops that allow you to
make additional credits while still performing the functions of your job
for the station, which in tourist bot's case, is making food and drinks
and serving people, making up for any costs incurred by their presence.
* Tertiary sources: This is bounties. These are activities that exist as
a fallback from the secondary sources, where you may not be performing
the duties of your job in order to get credits, should they be more
critical as a resource than the service you provide to the station as a
result.

...Everyone has been fairly clear that doing bounties is not very good.
If you're playing medical doctor and want a shiny medical doctor thing,
you would hope that the majority of your time is spent still playing
medical doctor, or scientist, or whatever. However, of all the jobs that
have fairly sub-par bounties, the one job that I've heard time and again
that I actually got *right* was surprisingly, security officer. Their
sets of bounties, (Which aren't just looting the locker room mind
you...) between the contraband bounty and the n-spect scanner bounties,
actually encourages players to basically do tasks that are already part
of their job obligations, without needing to run to the nearest lathe or
to _steal 8 boar tusks that drop from the barrens_. The bounties are
basically, "Go on patrol to this area", "look for suspicious items on
the station", etc.

In effect, those are *secondary credit sources*. Which is fantastic! It
gave me the idea to revisit a few of these job bounties to try and make
them a bit less exhausting to have to deal with, and as usual I got a
bit distracted and the scope got a bit too big and now it's march. God
damnit.

But yeah if this goes well, I'd love to see about adjust a few of the
bounty methodologies to be in-line with the changes I've implemented
here. More bounties that encourage players to be doing what they're
already doing, bounties that encourage players to learn more about the
game when it comes to assistant bounties or that encourage them to get a
toe-dip report on mechanics that they may not be introduced to yet, and
get rid of some of the CBT bounties that nobody in their god damn mind
wants to do.

## Changelog

🆑
add: New Medical bounty! Scan crewmates who have been healed or
currently have a clean bill of health, and ship the medical report to
prove that you're not accidently letting them die on your watch. Most of
the time.
balance: Assistant bounties for toolboxes now only require 1, but the
toolbox must be fully stocked like standard mechanical toolboxes.
balance: Potted plant bounties no longer accept plastic plants. They
only require 3 plants now, however.
balance: The action figure bounty now only requires toys instead.
del: Removed the pens bounty.
balance: The robotics mech bounty now requires a diagnostic scan of a
newly completed mech as opposed to sending the whole mech itself.
Diagnostic scans can now be generated by riding in a mech and completing
the action from the UI menu. Mech bounties are worth about half as much.
add: Mechs can be sold on the cargo shuttle for the remaining half of
the value from previous mech bounties.
fix: You can now no longer roll duplicates of the same bounties when
generating a new bounty from the civilian bounty console.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2025-04-05 16:53:02 +02:00
JacquerelandGitHub 2c63c11c80 Weaponised Wheelchair Bells (#90176)
## About The Pull Request

This PR does two things.

Thing one:
- Ringing the bell on your motorized wheelchair while it is emagged has
a 20% chance to detonate the bomb.

Thing two:
- You can attach TTVs to wheelchairs, which are detonated either by
ringing the bell repeatedly until it explodes or (if emagged) running
people over.


![image](https://github.com/user-attachments/assets/bb52d077-17f3-49cf-a267-5e6a5d61f9ea)

You can remove the TTV by deconstructing the wheelchair with a wrench.
Also I did some generalised code cleanup in the file, while I was there,
and fixed a bug with emagging actually only working if the panel was
closed (and complaining it was closed if it was open).

## Why It's Good For The Game

It provides a novel and amusing means of payload delivery which it is
almost impossible for the perpetrator to survive.
Wheelchair owners may use this as an effective deterrent to ensure that
nobody is pushing their chair unasked.

Also the tg host asked me to do it because he saw it on TV.

## Changelog

🆑
add: You can now add bell-detonated TTVs to wheelchairs.
add: Ringing the bell on an emagged wheelchair may cause it to explode.
/🆑
2025-04-05 11:30:06 +11:00
MrMelbertandGitHub 283084786b Burning paper (and similar) is now two way (you can hold a paper to your cigarette to burn it) (#90307)
## About The Pull Request

1. Burning paper (and similar) is now two way - rather than
necessitating you touch the paper with the burning thing, you can now
touch the burning thing with the paper

2. You can now light a cigarette on a lit candle

3. Candles no longer craft into flashlight eyes

## Why It's Good For The Game

1. Burning money with a cigarette larp 

2. Cool Frenchman larp

3. ??? I noticed you can't light a candle with a candle because it tried
to craft flashlight eyes.

## Changelog

🆑 Melbert
qol: Burning paper (and similar) is now two way. Rather than needing to
click on the paper with a burning item, you can now click on a burning
item with the paper. This means you can burn paper on your lit cigarette
like a badass.
qol: You can now light cigarettes on candles. 
del: Flares and candles can no longer craft into flashlight eyes, I
guess.
/🆑
2025-04-02 22:16:34 +01:00
88c2213f1e Force UTC±0 for time2text logging and IC times (#90347)
## About The Pull Request
This won't actually do anything on live, since those are all set to
UTC±0 currently

Pins logging and IC uses of time2text to UTC±0 instead of using the
system timezone (byond default)
Timezones not being set to utc0 caused issues before (and is again)

All timezones are now passed explicitly to make it more likely it's
cargo culted properly at least

Deletes worldtime2text cus it was gameTimestamp default args

## Why It's Good For The Game
Server timezone changes probably shouldn't affect logging, round times,
file hashes, IC time, when you caught fish, etc

## Changelog
🆑
refactor: Logging and IC timestamps will now always use UTC±0 and not be
affected by server system timezone changes
fix: Station and round times will not longer be incorrect if the system
timezone is not UTC±0
/🆑

---------

Co-authored-by: TiviPlus <572233640+TiviPlus@users.noreply.com>
2025-04-01 22:08:15 +02:00
SmArtKarandGitHub 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
SmArtKarandGitHub 8a22d36d11 Fixes roundstart GAGS runtimes caused by encryption keys (#90334)
## About The Pull Request

These didn't have a preview despite being used in crafting, which caused
constant runtimes on roundstart.

## Changelog
🆑
fix: Fixed encryption keys in makeshift jammer crafting recipes not
having an icon.
/🆑
2025-03-30 11:35:06 -04:00
Ben10OmintrixandGitHub 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
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](https://github.com/SpaceManiac/SpacemanDMM/commit/4b77cd487d0a7b6a069df20356b701af5b20489d)
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
GhomandGitHub 6915360f68 [s] Tape recorders cannot record other tape recorders. (#90206)
## About The Pull Request
This has been used to cause some issues on Manuel, an exploit to harm
the server. This also bumps the minimum delay between played messages to
1 second, to reduce spam a bit when there are a lot of messages in a
short amount of time.

Also, a very modest improvement for the hearing sensitive trait, which
is only needed when recording.

## Why It's Good For The Game
Ngl, I'm sure that, with enough patience, someone could still use them
to cause some problems via other means of recording and playing messages
en masse, but I'd rather not go nuclear on the tape recorders and I
overkill them. It's also getting late and I don't have the time for
anything more robust than this. Also the code seems overall pretty old
and due for a refactor.

## Changelog
No, thank you.
2025-03-23 21:29:33 -07:00
SyncIt21andGitHub 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

https://github.com/tgstation/tgstation/blob/55bbfef0da70d87455ca8d6fd5c95107eb8dbefb/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
SmArtKarandGitHub 0b2279d696 Obliterating Obscure Overlay Opalescence: Overlay Lighting Rework (#89868)
## About The Pull Request

Turns overlay lighting into fake-weighted additive lighting, making it
look similar to our current tile lighting.


![dreamseeker_DOFpgyculg](https://github.com/user-attachments/assets/abc2aada-2755-4a9c-b16e-248147ad490c)

<details>

<summary>More pictures</summary>


![dreamseeker_iCYPFgOISk](https://github.com/user-attachments/assets/581f4c02-5e16-450c-8889-adb55b0723f1)

This also allows overlay light colors to blend together nicely


![dreamseeker_7GoTVx6esA](https://github.com/user-attachments/assets/9342f016-9c85-4107-ac1a-963fb533a0aa)


![dreamseeker_3OjuXX0dEK](https://github.com/user-attachments/assets/b5c58ee2-e00c-487c-9938-b4259d5c7c9b)

</details>

Additionally, flashlights can now be spray-painted as blobs of darkness
will no longer be a major issue. Non-overlay sources of blobby darkness
haven't been affected.

## Why It's Good For The Game

Our current overlay lights kinda suck, and there's no way to control how
much color they contribute to total lighting.


![image](https://github.com/user-attachments/assets/51c94259-d31d-46af-85b2-c60955421df5)

Also, when two light overlays meet, whichever one is positioned higher
on the y axis (due to sidemap), or has been dropped last if they're
positioned equally, would completely remove the other one, which looks
really bad.

## Changelog
🆑
refactor: Refactored how overlay lights work - having one in your pocket
will no longer color air around you into piss
qol: Painted flashlights once again emit colored light.
/🆑
2025-03-20 14:58:24 +01:00