Commit Graph

5553 Commits

Author SHA1 Message Date
Matt Atlas a11c25bef6 Adds a bigger C4 for adminspawn. (#22687) 2026-06-12 23:04:25 +02:00
lew 11a9a2d644 Multi-Languages: a complete Saycode rewrite (#22637)
Rewrites Saycode and Langchat to add support for multiple languages in
one message, including audible emotes.

<img width="1139" height="338" alt="image"
src="https://github.com/user-attachments/assets/25e26932-7a6e-4c54-ab74-56fffb92ecad"
/>

Here's some samples to explain how to mix languages.

<img width="422" height="26" alt="image"
src="https://github.com/user-attachments/assets/e1b176cc-8625-4dc9-83c8-a053d3f310e6"
/>

`Languages ,2 can be mixed ,3 like this.`

<img width="540" height="21" alt="image"
src="https://github.com/user-attachments/assets/19156c67-4670-4d7a-84d7-26e527de2676"
/>

`!explains, ,2Emotes work too. ,0The text will get auto-quoted.`

<img width="592" height="18" alt="image"
src="https://github.com/user-attachments/assets/cfc31c5c-2383-41c8-82be-b36836339321"
/>

`,3Most languages ,0can be ,2mixed ,1arbitrarily, ,3any number of
,0times.`

<img width="636" height="20" alt="image"
src="https://github.com/user-attachments/assets/388b4f9d-192a-4374-ac31-bbd4e4e5dfe4"
/>

`,2Emotes. ,eAnd he nods. ,3They don't have to come first anymore.`

There are some exceptions. The exceptions are currently anything with
any of the flags `SIGNLANG`, `HIVEMIND`, `PRESSUREPROOF`,
`KNOWONLYHEAR`. Exceptions work the same as current languages do: they
must be the first language in the message. If so, they prevent switching
into any other language mid-message; if they're not first, they just
wont trigger.

They're exceptions currently because there's not really a clean way that
I or the people I asked for help on this one to make them look nice.
`SIGNLANG` for example doesn't scramble text, it shows it's own `
gestures a lengthy message.` text for those that don't understand. Could
we just replace every instance of sign language with that if somebody
doesn't understand? Probably. It would look pretty awful though. e.g.
`Alina Eskelinen says, "Hello." Alina Eskelinen gestures a short
message.`

This definitely needs testmerging because it more or less rewrites the
entire pipeline surrounding `say`. The `say` code itself had to be
rewritten to support the multiple languages, as well as all the existing
plumbing for listeners receiving messages. In return though, it's
significantly more straightforward and hopefully by extension easier for
people to add to in the future.

Primarily, instead of having four different `hear_say`, `hear_radio`,
`hear_sleep`, etc., routes for messages to come through, every single
audible message is received by `hear_message`, which is responsible for
figuring out how clear the message is (is the radio damaged? is it a
whisper we're eavesdropping on?), who needs to receive it in their
chatbox, formatting it correctly for each listener, and finally if any
npc or object within range needs to react to it in some way, like a
parrot or a mech.

changelog:
- rscadd: "Adds code-switching: you can now speak in multiple languages
in the same message."
- rscadd: "Adds audible emotes to the language list. They can be
triggered with ,e."
  - rscdel: "Removes SSrunechat."
- refactor: "Rewrote langchat in order to support multiple languages and
partial comprehension."
- refactor: "Rewrote a vast majority of all saycode and the code
responsible for displaying saytext to clients."
- bugfix: "Sleeping mobs are no longer able to understand all
languages."
- bugfix: "Langchat now correctly shows the appropriate comprehension
for all viewers rather than all viewers sharing the comprehension of the
last viewer."
- bugfix: "Languages which are supposed to be invisible when not
understood no longer appear as scrambled overhead text."

Forgive me whoever has to review this. Biggest areas that have room for
error is stuff like a borer inside someone's head, and Dionae stuff. Old
langchat had odd exceptions for those and I was forced to rewrite it
entirely, but I think I got it all back to how it was working before.
2026-06-11 10:47:26 +00:00
Batrachophreno 1b05577bdf TGUI Hotfixes, Oh God Am I The TGUI Guy Now Edition (#22648)
changes:
- bugfix: "Restores the Modular Computer access cable header button for
connecting to IPCs and machinery."
- bugfix: "Fixes display issues in the Robotics interface's
<collapsible> elements."
- bugfix: "Fixes in-chat feedback text provided by the Cyborg Analyzer
(organ name and status now both inline)."
  - bugfix: "Crew Manifest PDA app now filters out off-ship personnel."
- bugfix: "Fixes Autolathe TGUI appending search- and category- filtered
recipes instead of recomputing the list with those filters."
- bugfix: "Fixes runtime when ghost opens dedicated camera console UI."
- code_imp: "Update some defs referencing 'supply' department to
'operations'."
- refactor: "Standardizes all interface search bars to use the native
'SearchBar' component."
- refactor: "AtmosAlarmControl interface now correctly auto-sorts alarms
by alert status."
2026-06-08 10:45:31 +00:00
c#min7 fbe11c6579 IPC Suit Cooler Size + Power Tweaks (#22581)
This allows IPC suit coolers to fit inside of bags and be more easily
used as a first response tool for IPCs who have had their coolers shot
out, whether it be an IPC keeping one in their bag for
self-stabilisation or a machinist lugging one around when responding to
a call.

The battery that spawns in suit coolers was reduced to a heavy-duty
power cell (from 30,000 power storage to 15,000), and the maximum
discharge rate was increased by 85%.
- When cooling a cooler-less IPC, it lasts roooghly 10 minutes, which is
still plenty long enough for 90% of incidents and only becomes
problematic on expeditions.
- Under more ordinary EVA conditions, it still lasts ages.

Upgrading power cells is incredibly worthwhile, x2ing (high) or x4ing
(super) or x6ing (hyper) these durations.
2026-06-06 10:00:08 +00:00
Casper3667 3cf0d1607e A bunch of smaller bugfixes (#22618)
Fixes:
- https://github.com/Aurorastation/Aurora.3/issues/22592
- https://github.com/Aurorastation/Aurora.3/issues/22369
- https://github.com/Aurorastation/Aurora.3/issues/22398
- https://github.com/Aurorastation/Aurora.3/issues/22358
- https://github.com/Aurorastation/Aurora.3/issues/22432
- https://github.com/Aurorastation/Aurora.3/issues/22591
- https://github.com/Aurorastation/Aurora.3/issues/22411
- And the sound when putting items into metal briefcases, crime scene
kits and pill bottles
- As well as the sprites for the two boonie hats for taj
2026-06-05 21:32:01 +00:00
Batrachophreno 0d92359da7 Bun, Inferno->React migration (#22529)
Re-creation of https://github.com/Aurorastation/Aurora.3/pull/21046 to
skip merge conflict hell. Brings us modern TGUI.

**ALTERNATE TITLE: TGUI HELLSCAPE PR
ABANDON ALL HOPE YE WHO ENTER HERE**

- [x] Migrate build tools (javascript -> typescript, bun for package
management).
- [x] Upgrade all TGUI dependencies and associated root files to
TG-congruent versions (axios, babel, dompurify, eslint, highlight,
marked, prettier, sass, source-map, stacktrace-parser, typescript).
- [x] InfernoJS -> React migrations
- [x] React cleanup and polish (migrate all remaining .js files to
appropriate .ts or .tsx filetype, all remaining hooks, linting, error
corrections, etc.)
- [ ] Test all remaining TGUI interfaces
2026-06-05 15:55:22 +02:00
Matt Atlas f759aebad3 Ports TG attack animations. (#22319)
https://github.com/user-attachments/assets/0af58b65-552e-48c2-ab97-56ebf0794127

To-do:

- [x] Simple mobs
- [ ] Icon angles for most icons
- [x] Attack effects for kicking/biting/etc

---------

Co-authored-by: Matt Atlas <liermattia@gmail.com>
2026-06-05 10:12:43 +00:00
FenodyreeAv cf585ef505 Ship combat rework (#22566)
Makes ship combat significantly more destructive (and a bit deadlier),
especially with non-explosive projectiles.

**Additions:**
- A shell that penetrates a solid (dense) structure will cause spalling.
This spall does 2-30 damage, depending on range and has a high embed
chance. These embedded chunks are large enough to be ripped out by hand.
(But you probably shouldn't). The pilot's suit has 30 ballistic armor,
so a prepared bridge crew can survive a lot of spall.
- Adds a gun that shoots any ship weapon that admins can spawn. Useful
for testing, or for adminbus where they don't want to have to spawn a
whole overmap ship.
- Made several structures destructible, vending machines, computer
frames, grilles (these were just bugged) and watertanks (and their
children). These structures could just block infinite shots and were
common enough to serve as effective armor for the horizon. These now
spawn shrapnel (of their material if it's set), in addition to sheets of
steel when destroyed.
- Added support for negative maim chance. This allows chosen projectiles
to be prevented from decapitating. No more accidentally gibbing the
bridge crew's heads. (Unless they get hit with something really really
big).

**Balance:**
- All non-explosive anti ship rounds got significant buffs. Typically
2-3x Anti-Material numbers.
- Armour piercing anti-ship rounds got massively increased penetration
stats. Typically 4-8 from 1-2.
- Doors now get destroyed in less hits, if they are hit by anti-material
projectiles. Hits to destroy -= Antimaterial / 2
- Francisca frag shells now shoot less fragments but deal more damage.
394 projectiles for every shot was a bit laggy, now it's only 280.

**Shields:**
Shields now take more power. 13-14 megawatts for a 10 strength shield.
Just inside the ship's generation capacity with both the INDRA and
Supermatter running.

Instead of deleting any projectile they are hit by, shields now have
different failure modes.
- Firstly, a piercing projectile has it's penetration reduced by the
shield strength. Eg A shot that would go through 10 walls, only
penetrates 4 after going through a 6 strength shield.
- Secondly, a projectile has it's damage multiplied by 1 - shield
strength / 10, then has shield strength subtracted from it's damage. Eg.
A damage 100 projectile, hitting a 5 strength shield, has it's damaged
reduced to 50, (100 * 0.5), then to 45. (50-5)
- Thirdly, an explosive projectile (that does not penetrate per the
first step) does not explode, but instead deals it's full damage to the
shield.

Hits to the shield now also damage the field itself, not just the shield
tile. As such, a very big hit on the shield can bring the whole thing
down, requiring an engineer to reset it.

Shields can now be upgraded with research components. Additionally,
shield generators can now support more than one capacitor. The
roundstart capacitor on the Horizon is only good enough to support a 6
strength shield.
The upgrades increase efficiency, strength loss over time and charge
speed.

**Overmap Targetting**
Previously, shells would spawn within 20 tiles of their target and aim
directly forwards. This was bugged for shots with burst, which would
instead all aim inwards and mostly miss. This is the reason the Grauwolf
(in addition to the explosion bug below) and Fransisca felt so useless,
only one of every shell in a burst would hit.

Shots now spawn at the map edge, based on the orientation of the
projectile and ship. Diagonals are now accounted for.
Shots are then aimed directly at the target selected on the console,
with 3 degrees of dispersion.

**Bugfixes:**
- Fixes lots of explosions that didn't pass a turf to the explosions
subsystem. This caused the explosion not to happen if the thing hit got
qdeled before the subsystem could get the turf to spawn the explosion
on.
- Embedded shrapnel no longer gets the initial projectile name, this
prevents it getting named shrapnelshrapnel.
- Fixes a bunch of projectile piercing bugs, mostly with grilles and
windows. Shots now go past window frames without hitting them.
- Fixes shields not having a click delay when attacked.

---------

Signed-off-by: FenodyreeAv <fenodyree.av@gmail.com>
Co-authored-by: Matt Atlas <mattiathebest2000@hotmail.it>
2026-06-03 16:52:13 +00:00
Casper3667 8e53577ee7 Taj rebalance patch (#22451)
This is based on requests from the taj lore team. A future PR will do
more for the sensitive hearing as well, but the PR was growing by quite
a lot so it was best to split it up.

New: 
- Tajaran eyes can now extend their vision by 3 tiles while they stand
still.
- Taj can hear people whispering and talking into radios from 1 tiles
further away, if they are listening intently.

Bugfixes:
- Flashbangs no longer fuck taj up as much unless they got intent listen
active.
- The message for autakh farseer eyes no longer gives the wrong message
if it is disabled by moving.

Balance & Change:
- Taj have new heights. Before it was 150 to 190 cm
  - Hharar: 145-180
  - M'sai: 155-175
  - Zhan: 160-195
- The brute mod have been adjusted on tajara
  - Zhan: 10% -> 5%
  - Hharar: 20% -> 10%
  - M'sai: 30% -> 15%

Backend stuff:
- Action buttons were changed to accept lists, so multiple actions can
be given to a single item.
2026-06-01 10:36:57 +00:00
Wowzewow (Wezzy) e3d3d00347 More Handling Sounds (#22528)
Just ports more pickup, drop and handling sounds from /tg/ to keep pace.

Attributions in their own .txt files.
2026-05-30 12:07:44 +00:00
c#min7 518ab29fb8 adds some psiprotect drugs to the pharmacy refill shelf (#22514)
Adds 3x bottles of _PsiProtect Broad Use_ (Cheap variant) to the
pharmacy retail shelf for prescription refills, emergency ADPI
prescriptions (and investigation).
2026-05-29 20:38:04 +00:00
Wowzewow (Wezzy) 8e49b97325 Duffelbag tweaks (#22513)
- Duffelbags no longer give slowdown. Instead, you'll have to set them
down first before using them.

Slowdown is a pretty abhorrent malus, so much so that they've mostly
went extinct on the server.

Experimenting with this feature inspired from Eris. Might extend it to
backpacks (also very unused due to lack of drip) and look for it as an
alternative to trading something other than slowdown for slots.
2026-05-28 10:16:20 +00:00
FenodyreeAv 87848fbdc3 Adds skill based upgrades to modular lasers. (#22425)
**Modular laser changes**

- tl:dr Shooting mod laser at a mob counts up an improvement potential
variable, which when the gun is disassembled, gets spread across the
components.
- When the components are repaired, by someone with high skill, there is
a chance to increase a variable, such as damage, shot count, accuracy.
- Players give the biggest increase, followed by non-player humans
(protohumans & mechs fall in this catagory), then simple mobs and
finally monkeys. Non combat modlasers improve slowly when used for their
intended task (betarays slowly tick up when shooting hydroponics bays)

The philosophy for these changes is that research should continue to be
involved with the equipment they give out.
It should also be difficult (but not impossible) for research to upgrade
their weapons without support from other departments.
Xenobio slimes, protohumans, medical help to keep the protohuman alive
while you shoot it, security help to actually use the guns on real
targets (this gives the biggest increases).

The more powerful a weapon is the harder it is to upgrade, as it'll kill
it's targets quicker. The more upgraded a weapon is the more difficult
it is to upgrade further, improvement potential will get wasted on
components that have already hit their cap.

On their own, by the time the 5 monkeys research start with are dead,
it's possible for a max skill scientist to improve one gun's worth of
components by ~25%.

The weapons research can now make at roundstart (with max tech) are
significantly worse than what spawns in the armoury.
The weapons research can make with gold, silver, uranium and phoron are
equal to what spawns in the armoury.
The weapons research can make with diamonds are better than what spawns
in the armoury.

Major nerfs to heat vents, auxiliary capacitor and capacitor overcharge,
these were the problem children.
It is now impossible to make a weapon that does not take damage through
use. Safe designs will only break with heavy use, by people who don't
bring them back to research for repairs.
Powerful designs break quickly and need repeated repairs.

Adds two side grade capacitors that can be made at roundstart (with max
tech), one higher damage and fewer shots. One lower damage and more
shots.

High skill characters get much more information when examining modular
lasers and a chance to throw the gun away before it explodes.

Adds some defines to help balance these changes:
Improvement cap (the total percent a component can increase) Currently
100%.
Increase & Decrease Cap, how much an individual variable can be
increased or decreased. Currently 2x and 0.2x.
Improvement multiplier, multiplies all improvement gains. Currently 1x.

**Firing Pin fixes & changes**
Fixed ID locked firing pins and adds them to R&D.

Adds the inner research department to the firing range locked pins. This
is so xenobotanists, xenobiologists & xenoarchs can use the modular
lasers. Freeze rays for slimes, betarays for xenobotanists, laser
activation for artifacts for xenoarch.

It is still impossible for a scientist to make a weapon they can use
anywhere, but they can give them to security who can use them freely.

**Misc bug fixes**
The weapon analyzer UI now updates and only shows relevant statistics,
instead of displaying every variable even when they do nothing.
Replaces the buggy tesla zap with just electrocuting the holder.
Fixes a few broken visual messages.
Fixes the vermin modulator not killing anything, now it also works on
grems.
Fixes click delay on malfunction.
Fixes radiation damage numbers.
Fixes the temperature modulator.
Fixes the report printout showing the wrong numbers.

---------

Co-authored-by: Copilot <copilot@github.com>
2026-05-27 15:51:37 +00:00
hazelrat e9f1bb5709 Area-based Horizon lighting (#22511)
This adds unique lighting palettes to different areas of the SCCV
Horizon. It does this by tying randomized_lighting variable for light
fixtures to the department variable of the area they are in. This
solution is intended to save a lot of time and effort, both now and
later, which would otherwise be spent mapping down each colour of
lighting into every department manually.

Notable points:
- This shifts the parent colour for light bulbs from LIGHT_COLOR_HALOGEN
(#C0C0CA) to the new LIGHT_COLOR_OFFWHITE (#efe5bb), and shifts the
randomized_colors variable to the according list. This shifts them from
a slightly murky blue-tinted white to a slightly brighter yellow-tinted
white. Slightly warm lighting will now be the default for every map.
Warmer lighting communicates the age of a ship or station, the worsening
economic prospects of the setting, and it's also a bit cosier.
- Stark white lighting is retained for medical and the bridge. Research
has been given purple-tinted lighting.
- Command offices are also under blue lighting currently, to visually
differentiate them from the rest of their departments.
- To avoid too much player-facing bloat, only a box for pale purple has
been added so janitors can replace the lighting in research. Otherwise,
yellow can be used for engineering, white for public areas, and blue for
high-security areas.
- Offsites and offships shouldn't be hugely changed by the shift in
default lighting - it's a slight change in hue.

Screenshots below!
<details>
<img width="1077" height="1080" alt="image"
src="https://github.com/user-attachments/assets/1987e29f-c34c-44ea-865f-5f81c0e5c47f"
/>
<img width="1080" height="1080" alt="image"
src="https://github.com/user-attachments/assets/79279c6c-da56-4676-a0e9-7e5db43002cd"
/>
<img width="1083" height="1080" alt="image"
src="https://github.com/user-attachments/assets/621589b5-ada6-4d80-9f8f-8cf13a47df39"
/>
<img width="1085" height="1080" alt="image"
src="https://github.com/user-attachments/assets/09284700-8408-4a86-86c5-7575e7c94a27"
/>
<img width="1081" height="1080" alt="image"
src="https://github.com/user-attachments/assets/8246585c-f437-437a-8d32-9997fae05298"
/>
<img width="1078" height="1080" alt="image"
src="https://github.com/user-attachments/assets/a34841dd-3f49-4010-b2e0-d2e9a748e617"
/>
<img width="1084" height="1080" alt="image"
src="https://github.com/user-attachments/assets/55e89703-8ac7-4fa7-9775-19818c10c119"
/>
<img width="1080" height="1080" alt="image"
src="https://github.com/user-attachments/assets/684dea04-90c5-4877-b2bf-08a2146efb5e"
/>
<img width="1078" height="1080" alt="image"
src="https://github.com/user-attachments/assets/6ce42ac1-0f4b-49eb-8f2c-c6fb1830877e"
/>
<img width="1083" height="1080" alt="image"
src="https://github.com/user-attachments/assets/bc41a4f4-8d5c-4348-b9fe-a41d7950ce37"
/>
<img width="1081" height="1080" alt="image"
src="https://github.com/user-attachments/assets/48c4b733-a375-482b-9f70-e2aa6d0b3e27"
/>
<img width="1083" height="1080" alt="image"
src="https://github.com/user-attachments/assets/52e0041a-602d-4f4b-9d6c-7d0a0946f90b"
/>
</details>
2026-05-27 15:37:50 +00:00
sentry[bot] 0951d326d2 Fix storage close() null.vis_contents (#22521)
* Please describe the intent of your changes in a clear fashion.
This PR addresses a runtime error "Cannot modify null.vis_contents."
occurring in `/obj/item/storage/proc/close`.

**Problem:** The `close()` procedure for storage items was crashing when
attempting to modify `storage_start.vis_contents` because
`storage_start` was null.

**Root Cause:** The issue stemmed from stale `s_active` references on
mobs. When a storage item was destroyed, its `Destroy()` proc called
`close_all()`. However, `close_all()` (via `can_see_contents()`) only
cleared `s_active` for mobs with an active client. If a mob was
clientless (e.g., due to a brief disconnect) during the storage's
destruction, their `s_active` would retain a reference to the
now-destroyed storage. Later, if `Move()` was called on this mob (e.g.,
due to inertial drift), it would attempt to call `s_active.close(src)`
on the stale reference. Since the storage object was already destroyed
and `storage_start` had been `QDEL_NULL`ed, accessing
`storage_start.vis_contents` resulted in a null dereference.

**Solution:**
1. **Clear all stale `s_active` references in `Destroy()`:** Modified
`/obj/item/storage/Destroy()` to explicitly iterate through all mobs in
`is_seeing` after `close_all()` and nullify their `s_active` if it
points to the current storage object, regardless of their client status.
This ensures no stale references persist after the storage is destroyed.
2. **Add null guard for `storage_start` in `close()`:** Implemented a
defensive `if(storage_start)` check before accessing
`storage_start.vis_contents` in `/obj/item/storage/proc/close`. This
prevents a crash even if, under unforeseen circumstances,
`storage_start` is null when `close()` is invoked.

* Please make sure that, in the case of mapping changes, you include
images of these changes in the PR's description.
* Please make sure to mark your PR as wip or review required by making a
comment with !wip or !review required
* If you include sprites/sounds/... (assets) that you have not created
yourself specify the license and original author below.
* Ensure that you also credit them in the appropriate location /
changelog as specified in the contributor guidelines

### Asset Licenses
The following assets that **have not** been created by myself are
included in this PR:

| Path | Original Author | License |
| --- | --- | --- |
| icons/example.dmi | ExamplePerson (Example Station) | CC0 |


Fixes SERVER-PROD-TV

---------

Co-authored-by: sentry[bot] <39604003+sentry[bot]@users.noreply.github.com>
Co-authored-by: VMSolidus <evilexecutive@gmail.com>
2026-05-27 15:33:46 +00:00
Batrachophreno 4ecb0bc21c Repath obj/machinery to obj/structure/machinery [MDB Ignore] (#22500)
Repaths obj/machinery to obj/structure/machinery. **Note for
reviewers:** the only meaningful changed code exists within
**code/game/objects/structures.dm** and
**code/game/objects/structures/_machinery.dm**, largely concerning
damage procs. With the exception of moving airlock defines to their own
file, ALL OTHER CHANGES ARE STRICTLY PATH CHANGES.

Objects, _categorically_, are largely divided between those you can hold
in your hand/inventory and those you can't. Machinery objects are
already subtypes of Structures behaviorally, this PR just makes their
pathing reflect that, and allows for future work (tool actions, more
health/destruction functionality) to be developed without unnecessary
code duplication.

I have tested this PR by loading up the Horizon and dismantling various
machines and structures with tools, shooting guns of various types
throughout the ship, and detonating a bunch of explosions throughout the
ship.
2026-05-26 19:35:48 +00:00
Casper3667 9b8ebf7e4a Updates the health analyzer TGUI to be prettier (#22498)
This fixes a few minor bugs for non-handheld health analyzers, as well
as updating the UI for them to be prettier.
<img width="521" height="823" alt="image"
src="https://github.com/user-attachments/assets/f0c121f1-e84c-4615-b4c5-1ec1f6620222"
/>
2026-05-26 17:57:40 +00:00
Wowzewow (Wezzy) b7dfac9615 fixes medical ATK and ABK blinky lights (#22490)
title
2026-05-23 20:09:46 +00:00
Batrachophreno 2111cb97f3 Item Size Adjustments (#22476)
Small handful of obj/item size adjustments for common sense, QoL, and
standardization.

changes:
  - balance: "Decreases size of Dosimeter from Normal to Small."
- balance: "Decreases size of Bomb Defusal Wirecutters and Music
Cartridge from Small to Tiny."
- balance: "Increases size of Airlock Electronics from Tiny to Small
(matches other circuitboards)."
2026-05-22 12:14:08 +00:00
Batrachophreno 54a49d0516 Agent ID... again. (#22477)
always double checks that ALL your commits are in the initial PR,
kids......
2026-05-19 01:08:56 +00:00
Casper3667 95dac4990d Updates the health analyzer to use TGUI (#22421)
- rscadd: "Health analyzers now use a TGUI instead of outputting to the
chat."
- rscadd: "The handheld health analyzer now take 1.5 seconds to scan a
person."
- rscadd: "It is now possible to pull up the last scan on the handheld
health analyzer."
- rscdel: "It is no longer possible to switch limb mode on the handheld
health analyzer."

Beyond the above, device levels were added, primarily as a concept
though it is not implemented in full, so all the ingame health analyzers
still show the same data as before.

<img width="520" height="620" alt="image"
src="https://github.com/user-attachments/assets/b718300b-b377-4e1f-82ab-4d4d73560e34"
/>
<img width="520" height="620" alt="image"
src="https://github.com/user-attachments/assets/cbe2236e-4eca-4ab1-9dea-9fc058933e0f"
/>
<img width="520" height="620" alt="image"
src="https://github.com/user-attachments/assets/84010edb-867e-4062-a6ec-d2629e2fa625"
/>
<img width="520" height="620" alt="image"
src="https://github.com/user-attachments/assets/8b1b85d4-3a53-46c3-b63e-1e78d5797176"
/>
2026-05-18 21:46:09 +00:00
FenodyreeAv 48e73588cc Fixes chemical damage over time and contamination (#22454)
Several fixes to chemicals that deal brute or burn.

The problem was that their damage was being healed by autoheal faster
than it could add up.
Damage over time chemicals with more than 1dps would suddenly double in
how fast they killed you when they crossed the autoheal threshold.

This fixes that by adding a 60 second delay on wounds autohealing. This
also affects ALL wounds.
If a wound is bandaged it starts autohealing immediately, if it's still
under the authoheal threshold.

To compensate, I've reduced the damage of chlorine/phoron exposure, as
this change effectively increased the damage by 1.

Overall phoron/chlorine exposure is now more dangerous to naked people.
Less dangerous to clothed people.
Less dangerous to people who do the reasonable thing and put their
internals on, previously this was actually worse for you.

Also fixes contamination of items from chlorine and phoron: 
- Contaminated items now only damage the bodyparts they cover.
- Contamination now checks if the item can be contaminated before
contaminating it.
- Contamination is now a 100% chance per tick, multiplied by the
permeability of an item. (Most items are permeability 1, labcoats &
other chem resistant medical clothing are 0.5, latex gloves are 0.1,
biosuits, gas masks, etc are 0).
- Contamination respects the permeability of your gloves, it's safe to
handle contaminated items with latex gloves now.
- Air tanks are now permeability 0, your internals won't get
contaminated and force you to take them off.
- Contaminated clothes now deal damage even if you put a spacesuit on
over the top of them.
- Life no longer checks every mob's internal organs for contamination
every tick.
2026-05-18 21:46:07 +00:00
Kano c9f6cc623c Remaps casino.dmm (#22460)
## About PR

Changes:

- Remapped casino ship map and turned it into a station instead
- Coatracks now can hold mapped in clothings
- Removed a duplicate type of lattice (dark grate and gunmetal grate
were the same thing)
- Added beige coloured light type

It doesn't have much in it as is, but I believe this will be good
candidate when we have smarter npcs that players can fight against, one
day

## Images

Before:
<img width="2016" height="1856" alt="img-1"
src="https://github.com/user-attachments/assets/3f6b9146-67db-449e-ab35-3f2bb4b3aa26"
/>

After:

<img width="2560" height="2656" alt="img-2"
src="https://github.com/user-attachments/assets/77de31ab-43d2-4a14-b396-a142c3b755da"
/>
2026-05-18 21:46:05 +00:00
VMSolidus 3b6d0f20ec Light Sensitivity Refactor (#22386)
The last time the Light Sensitivity code was changed, I remarked in a
review that "This should probably be a component so that its code isn't
being run on every mob forever". Well I've gotten around to doing that
myself, except I figured out it's even better off as an Element in this
situation rather than a Component. So this is now my first time adding
Elements to the repo. It turns out they're really awesome when paired
with signals.

This PR removes the hardcoded check for the light senstivity and dark
phobia traits from the Life() path, replacing them instead with two
Elements which hook into the pre-existing signal used to handle vision
updates for human mobs. I've mainly done this to help cut down on the
overwhelmingly high cost of the Life() codepath, which is currently one
of the most expensive paths we have.

While I was at it with refactoring these two, I noticed that there
wasn't a trait selection for either of them, so I added selections for
both traits to the disabilities tab so that players can opt-in to being
light sensitive or afraid of the dark!

<img width="318" height="336" alt="image"
src="https://github.com/user-attachments/assets/a1e60e83-d899-44df-8ea3-0cd5a87c231c"
/>
2026-05-18 19:21:19 +00:00
Batrachophreno 374e220be6 Hardsuit interface overhaul (#22403)
**Summary**
Converts hardsuit NanoUI to TGUI and overhauls much of the associated UI
and module code.

The conversion alone is what necessitated quite a bit of cleanup of our
11-year-old hardsuit code, for which I leaned heavily upon tg's
implementation of MODsuits. Therefore, this is a PARTIAL (???) port of
both https://github.com/tgstation/tgstation/pull/59109 and
https://github.com/tgstation/tgstation/pull/77022. While a lot of
wonderful code and UI design was ported 1:1 (for which I am grateful!),
our hardsuits are still NOT MODsuits. Most of our back-end remains the
same.

Fixes https://github.com/Aurorastation/Aurora.3/issues/22071

changes:
  - refactor: "Migrates Hardsuit NanoUI to TGUI."
- refactor: "Updates Hardsuit module type definitions, configuration
data, many misc other functions for the purpose of the UI refactor
(general utility and readability improvements)."
- balance: "Hardsuits now passively consume a small amount of energy
while online, even when retracted."
- balance: "Hardsuit boots can no longer be retracted without also
retracting the chest piece first."
- balance: "Mounted hardsuit storage module max space increased from 9
to 14."
- balance: "Plasma cutter (standalone and mounted) damage increased and
range decreased by 50% each."
- soundadd: "Adds several new sounds for hardsuit use (attribution
located w/ files)."
- code_imp: "Makes power_wattage_readable() a global proc and adds
power_joules_readable()."
  - code_imp: "Lots of misc DMdoc updates."
- bugfix: "Synthetic Charging Stations now charge hardsuit power cells
as intended."

**Old UI**
<img width="804" height="1321" alt="Screenshot 2026-05-04 135705"
src="https://github.com/user-attachments/assets/f01957a0-7cec-4fcc-b862-c9dfde0dcc43"
/>

**New UI**
<img width="998" height="782" alt="Screenshot 2026-05-04 174658"
src="https://github.com/user-attachments/assets/ad402902-d489-435a-9c16-82150ed82618"
/>

### Asset Licenses
The following assets that **have not** been created by myself are
included in this PR:
| Path | Original Author | License |
| --- | --- | --- |
| icons/mob/rig_modules.dmi (mounted-plasmacutter)|
[Ghostsheet](https://github.com/ghostsheet) | CC-BY-SA |

---------

Signed-off-by: Batrachophreno <Batrochophreno@gmail.com>
Co-authored-by: VMSolidus <evilexecutive@gmail.com>
2026-05-18 19:21:11 +00:00
Batrachophreno 9d6b304ac7 [IDB Ignore] Centralize HUD icon file location (#22464)
Moves all HUD screen object icon files from various scattered locations
to icons/hud. No changes made to any icon_states in this PR, no
player-facing changes. Part of larger icon organization work and in
preparation for action button rework.
2026-05-18 19:19:40 +00:00
VMSolidus be6b35485d Psi-Protect Pills (#22449)
requires #22442 

This PR adds the new Psi-Protect pills required by the current Lemurian
Sea lore arc. They can be obtained exclusively via the psychiatric
medicine selection, and are a new prescription drug marketed by Zeng-Hu
Pharmaceuticals as a solution for ADPI exposure that doesn't require a
more invasive implant.

When taken, these pills provide 10 minutes of temporary protection from
telepathy, as well as a reduction in psi-sensitivity.

In the loadouts:

<img width="312" height="72" alt="image"
src="https://github.com/user-attachments/assets/2dc3a0bd-1d8e-4913-819b-b30fd5718d27"
/>

Spawning in:

<img width="914" height="98" alt="image"
src="https://github.com/user-attachments/assets/79223fe0-56f3-4fbc-9a1f-7afdaa87baa8"
/>

Messages playing when taking the pill
 
<img width="602" height="55" alt="image"
src="https://github.com/user-attachments/assets/2175b5bd-3b7f-47ee-957d-54154bc27197"
/>

Verifying in testing that the component correctly attaches

<img width="504" height="278" alt="image"
src="https://github.com/user-attachments/assets/f65a2d48-0337-47d2-ad79-fce548a07ab9"
/>

And verifying that component TTD is set, as well as Signals are being
correctly registered.

<img width="512" height="692" alt="image"
src="https://github.com/user-attachments/assets/31416703-1c59-47f7-bc80-36329d43905a"
/>
2026-05-18 19:18:23 +00:00
Batrachophreno 09bc6f5d2b Fixes Agent ID not displaying new name on examine proc (#22465)
See title; set name action was only updating one of the card's "name"
variables, not both.
2026-05-18 19:17:41 +00:00
VMSolidus 1f9b926ed7 Tool Qualities Framework (#22380)
This PR adds a framework for Tool Qualities. This is done via adding a
new Tool Quality Container Component, which allows any arbitrary datum
to have tool qualities, which can be checked for by other systems as
desired. These are handled as key/value pairs in an associative list,
allowing atoms to have different quality levels as a given tool, such as
being a "level 3 crowbar" and a "level 1 hammer" at the same time.

---------

Signed-off-by: Batrachophreno <Batrochophreno@gmail.com>
Co-authored-by: Batrachophreno <Batrochophreno@gmail.com>
2026-05-15 16:49:58 +00:00
FabianK3 cdd944ce56 Fix exception on persistent_objects_get_content parent proc (#22461)
# Summary

This PR fixes an exception during saving persistent contents caused by
the base proc persistent_objects_get_content returning nothing instead
of a default list.

## Changes

- Fixed parent proc to return an empty list instead of null.
- Refactored stickers to use own list instead of parent proc.
2026-05-13 23:37:49 +00:00
VMSolidus 29ebf7e36e Sticker Hotfix (#22450)
Uhhhh

<img width="401" height="735" alt="image"
src="https://github.com/user-attachments/assets/e006ebea-a9b6-410c-a365-f805a0019c60"
/>
2026-05-13 22:41:17 +00:00
Kano 4285cc90ea Fixes flashlight lighting direction mismatch when dropped (#22417)
## About PR

Makes it so lighting system recognizes the direction flashlight is
facing when dropped, so it no longer defaults to south

The reasoning behind this method is,


https://github.com/Aurorastation/Aurora.3/blob/38a5988115e33594fcc9e9fafd08d474bbf76967/code/datums/components/overlay_lighting.dm#L503-L509

items don't update their directions when held and carried around, and
`set_dir()` is where the signal is sent which system listens to

also removes an unused var
2026-05-11 18:13:03 +00:00
VMSolidus f871db6168 Sticker Persistence (#22423)
This PR adds persistence for stickers. There's not much more to say. 

<img width="128" height="128" alt="tbrbrtb"
src="https://github.com/user-attachments/assets/e731f2bc-8f3e-4d93-9fa9-c0ac19ada267"
/>
2026-05-11 18:13:00 +00:00
Batrachophreno 58b01cf856 Various fire bugfixes (#22431)
Fixes https://github.com/Aurorastation/Aurora.3/issues/22384.
Fixes https://github.com/Aurorastation/Aurora.3/issues/22389.
changes:
  - bugfix: "Fixes turf fires not spreading."
  - bugfix: "Fixes atmos fires not consistently igniting."
  - bugfix: "Fixes dead mobs burning forever."
  - bugfix: "Fixes fire_act() runtimes for multiple objects."
2026-05-11 18:12:58 +00:00
runecap 9d67a6afbf Wearing Shaper gear removes Hive name and color from Hivenet. (#22311)
Mechanically representing its pre-existing lore and description.
Mechanical description added on the item too.

<img width="416" height="97" alt="image"
src="https://github.com/user-attachments/assets/e70da937-30ab-42f3-bf85-5a8da5accddf"
/>

NEW:
Shaper Helmet now also removes Hive name when physically speaking.
<img width="330" height="65" alt="image"
src="https://github.com/user-attachments/assets/a56af02c-0494-4589-bf15-4d59f6d0767e"
/>

NEWER: Helmet affects visible name and messages. It ignores worn ID for
obvious reasons, but some Shapers may hide their ID while talking to
other Vaurcae.
<img width="533" height="225" alt="image"
src="https://github.com/user-attachments/assets/da85914d-52bc-4036-9616-66e479794fa3"
/>

Full Preimminent Shapers should wear robes and helmet with TTS accent to
be as anonymized as possible. Parts of your carapace that peek through
can be easily hidden as well.

NEWEST: Robes and helmet functionality have been swapped, as it makes
more sense for the robes that cover you up to remove from physical
messages.
2026-05-07 00:16:43 +00:00
Casper3667 4e3d5c42a5 Ops restock pack changes (#22351)
- rscadd: "Added several new restock packs avaiable from the operations
ordering console."
  - balance: "Rebalanced the prices of the restock packs."
  - rscadd: "Made the restock packs come with cargo access locks."
  - rscadd: "Restock packs are now actual boxes that can be opened."
- rscadd: "The commissary restock crate was moved to the operations
loading bay."
- rscadd: "The toy shelf can now also hold cap gun mags, card packs,
card boxes and music cartridges."

---------

Signed-off-by: Casper3667 <8396443+Casper3667@users.noreply.github.com>
Co-authored-by: SleepyGemmy <99297919+SleepyGemmy@users.noreply.github.com>
2026-04-29 20:08:49 +00:00
Batrachophreno ed7df070f3 Add light meters to the autolathe (#22330)
Adds light meters to the autolathe and fixes their inhand sprites.
2026-04-28 23:41:57 +00:00
VMSolidus aa2afd0039 Revert "Materials And Stack Harddel" (#22364)
Reverts Aurorastation/Aurora.3#22313

Somehow made a race condition that causes the protolathe to delete
stacks if and only if the stack would have been "finished" by fully
placing the stack in the protolathe.
2026-04-27 00:13:14 +00:00
VMSolidus 2f3276ba0d Remove Unused Circuit Boards (#22322)
Removes a bunch of unused circuit boards that corresponded to machinery
that didn't exist in the game anymore. These would turn up in spawners
on offsites and in random contents crates regularly, essentially
"wasting" the spawns.
2026-04-27 00:13:03 +00:00
Casper3667 3f63ade08a Fixes a couple more bugs with the sheet snatcher (#22348)
Mostly in relation to it showing the incorrect amount in certain
circumstances.
2026-04-26 10:55:40 +00:00
Batrachophreno 43da5d898d Light sensitivity tweaks (#22302)
Having played with it for a couple weeks, made additional changes to
light sensitivity effects. Less frequent and less sensitive, alongside
tweak to cigarette lights (the only common light source that seemed to
have an outsized impact on turf corner light calcs).
2026-04-24 21:47:15 +00:00
VMSolidus 425567a43b Materials And Stack Harddel (#22313)
To clarify I have recently cancelled my subscription to google's coding
agents, so this is my first hard del PR in several weeks that was done
completely by hand. This PR fixes a hard del on Materials (and their
parent Stacks), which was being caused by up to 4 different vars
potentially containing references that were not being cleared during
their Destroy() procs.

I have also tested this by hand, by spawning and deleting stacks, then
waiting to see if the hard del triggers or not.

---------

Signed-off-by: VMSolidus <evilexecutive@gmail.com>
2026-04-24 21:43:21 +00:00
SleepyGemmy 0e60f00038 Tajaran Cigarettes Fix (#22292)
fixes the tajaran cigarettes being named differently in the loadout.
also makes the menthol variant more clearly named.
2026-04-23 00:35:04 +00:00
Batrachophreno 98d00638ce Horizon maint access rights and contents variety (#22262)
Two major changes to Horizon maints:
1. Updated maint door access to actually be consistent across the ship.
That is to say, you should have access to the maints behind your own
department, you should be able to make meaningful use out of them (no
random useless dead ends), but you shouldn't automatically get free
access to the entirety of the ship maints due to lack of hatch access
control. This was a non-issue until the Horizon expansion that greatly
increased maint interconnectivity. Now, everyone has consistent maint
access, and free access remains for Code Blue (or manually Command
disabling access controls).

2. Maint loot should be more interesting. Static contraband spawns were
reduced but a large number of new spawners were added that should make
loot, contraband, tools, trash, etc., spawn in more varied places. This
should make maint travel involve more Happy Surprises rather than
strictly being a rote process of 'lets see what spawned in XYZ room this
time).

Miscellaneous other bugfixes and spawn tweaks based on my observation;
on repeatedly re-loading the Horizon, the numbers chosen seemed to
repeatedly give me the most satisfying results. See file changes.
2026-04-21 14:19:40 +00:00
FenodyreeAv 33b8164013 Radiation Damage Rebalance (#22238)
Adds: 
- Dosimeter, keeps track of how many rads a person has absorbed as well
as showing the dose after armour.
- Adds a message to shelter in maint to the supermatter explosion.
- Adds a flag that makes damage not apply to robotic limbs, useful for
preventing radiation burns to metal parts. Should also be added to
chemicals that deal brute damage, such as arithrazine and the the burns
from chemical exposure to chlorine, but that's another PR.
- Added radiation resistance values to makeshift armour. As it only
covers the chest, this isn't very useful, but better than nothing.

Balance:

- Re-scaled radiation damage.
- Radiation now maxes out at 1000, from the previous 100.
- Radiation damage when at maximum rads is converted directly into burn
damage.
- Radiation sources decay slowly, so all the old numbers were maxing
people's radiation values instantaneously.
- Re-scaled organ damage from radiation. Previously you would take no
organ damage till 75% rads, then lose your liver almost immediately. Now
organ damage ramps up from 500-1000, with 750-1000 being about 1/3rd the
organ damage of 75-100.
- Added debilitating, but not lethal, effects to moderate and high
radiation levels. Lots of pain events instead of straight damage.
- Reduced speed and stamina for high radiation doses.
- Hyronalin and Arithrazine both remove much more radiation.


The intent: People should now be able to work in low radiation zones,
without using the radiation suit for short periods of time.

The geiger counter is no longer an 'if this is ticking you are at max
rads' detector.

With the engineering voidsuit, 75% rads, I could stand next to a charged
supermatter ~50rads a second, for about 2 minutes before I hit lethal
radiation levels.

If people stay in a radiation zone, or are exposed to extreme radiation
100+ rads a second, radiation is much more lethal, but not by just
killing your organs. Conventional medicine will help a lot.

---------

Signed-off-by: FenodyreeAv <fenodyree.av@gmail.com>
Co-authored-by: Batrachophreno <Batrochophreno@gmail.com>
2026-04-21 12:43:25 +00:00
Casper3667 f39068ba1d Fixes some sheet snatcher material bugs (#22280)
This fixes dumping the contents of the sheet snatcher would make the mat
stacks look like they only had 1 item. It also fixes so picking up
material/steel will merge with material/steel/full. And fixes that the
quick pickup method did not merge item stacks.
2026-04-20 11:31:55 +00:00
VMSolidus 8df12c8e29 Even More Misc HardDels (#22299)
Just a few more misc hard dels I found from the logs today. Not counting
the event round which inexplicably had hundreds of them.
2026-04-20 11:31:39 +00:00
Batrachophreno aaea5d8a57 Assunzione & Port Volturno (#22258)
Contains assets, code, maps, etc. for Assunzione and Port Volturno. This
is something like v0.9 for live unit testing, etc. Do not merge yet.

### Asset Licenses
The following assets that **have not** been created by myself are
included in this PR:

| Path | Original Author | License |
| --- | --- | --- |
| icons/obj/structure/urban/arches.dmi |
[Fyni](https://github.com/Fyniiy) | CC-BY-SA |
| icons/obj/structure/urban/assunzione_neon.dmi |
[Fyni](https://github.com/Fyniiy) | CC-BY-SA |
| icons/obj/structure/urban/assunzione_signs.dmi (stafylia_sign) |
[Fyni](https://github.com/Fyniiy) | CC-BY-SA |
| icons/obj/structure/urban/billboard.dmi (sign_assunzione1 & 2) |
[Fyni](https://github.com/Fyniiy) | CC-BY-SA |
| icons/obj/structure/urban/poles.dmi (radial_floodlight) |
[Fyni](https://github.com/Fyniiy) | CC-BY-SA |
| icons/obj/structure/urban/restaurant.dmi (menu_gyro) |
[Fyni](https://github.com/Fyniiy) | CC-BY-SA |
| icons/obj/structure/urban/statues.dmi (aec_small) |
[Fyni](https://github.com/Fyniiy) | CC-BY-SA |
| icons/obj/pottedplants_big.dmi (luce-vine-plant) |
[Fyni](https://github.com/Fyniiy) | CC-BY-SA |
| icons/obj/pottedplants_small.dmi (luce-vine-plant) |
[Fyni](https://github.com/Fyniiy) | CC-BY-SA |
| icons/obj/structure/urban/billboard.dmi (sign_assunzione3) | Minzeyes
| CC-BY-SA |
| icons/obj/structure/urban/assunzione_96x110.dmi | Minzeyes | CC-BY-SA
|
| icons/turf/smooth/composite_brick.dmi |
[nauticall](https://github.com/nauticall) | CC-BY-SA |

---------

Signed-off-by: Batrachophreno <Batrochophreno@gmail.com>
Co-authored-by: Kano <89972582+kano-dot@users.noreply.github.com>
2026-04-19 19:50:20 +00:00
VMSolidus 90ceccb06b ID Card Hard Del (#22276)
Fixes a hard del related to ID cards. Yet another of the "extremely tiny
hard dels".
2026-04-19 05:28:28 +00:00
VMSolidus 260f744906 Skills System Revival: The Things She Remembered Had Never Been Her Own (#21853)
This PR is a revisit to the previously derelict PR #20159 that has been
unfinished for sometime now. More details about it in general can be
found here:
https://github.com/orgs/Aurorastation/projects/2?pane=issue&itemId=53167153

For awhile I've been talking about "Things I've been doing but it would
be really nice to do them with a skills system", or "And here's how I
would put this into the skills system when it's done". The main thing
that was stopping me from building it myself was having poor real life
skills in UI code and in DB code. However, I've gotten permission to
resume this PR, which has already completed the steps I would not have
been able to do myself. The rest of the PR fits well into my skillset as
a dev.

I'm opening this PR as a draft so as to enable my dev environment to
locally track all the previously modified files. I'll take this PR out
of draft and give this a full writeup when I have more work to show for
the PR this weekend.

### TODO

- [x] Rework a decent chunk of the currently existing skills to no
longer require hardcoded inserts into other systems. EG, converting from
classical ss13 methods, to modern /tg/-style ECS coding methods that
work off of component-signal patterns.
- [x] Make sure all of the existing skills have actual game
functionality (I won't PR a 2016 Baystation12 situation where 90% of the
skills are fluff only)
- [x] Add the various skills not yet made but are necessary for
completion sake, EG: Pilot (Spacecraft), Gunnery, Pilot (Walkers).
- [x] Examine each existing job in the game and assess whether it should
have a skill made with it in mind, or if it's covered by an existing
skill.
- [x] TO DISCUSS, BUT NOT ESSENTIAL: Additional skill proposals not
currently in the pre-existing TODO list, proposing subcategories.
- [x] Ensure that the previous TODO list is completed.

### Current Skills
The current list of skills, checkmarked for if I've completed them/they
have actual game mechanics. Or if we're just relegating them to separate
PRs. Originally this list was going to be forced to visit for a bare
minimum "does at least one thing" requirement, but now that is being
forgone due to this PR ballooning out of control and in complexity, as
well as development time overruns.

- [x] Bartending
- [x] Cooking
- [x] Gardening
- [x] Entertaining
- [x] Electrical Engineering
- [x] Mechanical Engineering
- [x] Atmospherics Systems
- [x] Reactor Systems
- [x] Medicine
- [x] Surgery
- [x] Pharmacology
- [x] Anatomy
- [x] Forensics
- [x] Robotics
- [x] Pilot: Spacecraft
- [x] Pilot: Exosuits
- [x] Research
- [x] Xenobotany
- [x] Xenoarchaeology
- [x] Xenobiology
- [x] Unarmed Combat
- [x] Armed Combat
- [x] Firearms
- [x] Leadership

---------

Signed-off-by: VMSolidus <evilexecutive@gmail.com>
Co-authored-by: Matt Atlas <liermattia@gmail.com>
Co-authored-by: FabianK3 <21039694+FabianK3@users.noreply.github.com>
Co-authored-by: Matt Atlas <mattiathebest2000@hotmail.it>
2026-04-18 14:33:48 +00:00