2337 Commits
Author SHA1 Message Date
FabianK3andGitHub 144a6a943b Revert "Refactor Get Pain" (#23118)
Reverts Aurorastation/Aurora.3#22847
2026-08-21 01:25:32 +00:00
GeevesandGitHub 67eef8efa7 Smooth Progress Bar (#23093)
* Progress bars now use smooth, colour-changing fills and support visual
themes.


https://github.com/user-attachments/assets/ac493f6d-dce7-4b11-a105-985a076f4904


Ported from https://github.com/NebulaSS13/Nebula/pull/1574, which ported
from the original PR:
https://github.com/ParadiseSS13/Paradise/pull/15695

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

| Path | Original Author | License |
| --- | --- | --- |
| <img width="532" height="309" alt="image"
src="https://github.com/user-attachments/assets/c75a9e8f-83f4-4d28-9888-3da075598f88"
/> | [dearmochi](https://github.com/dearmochi) (ParadiseSS13) | Creative
Commons 3.0 BY-SA |

AI usage disclosure: Ported using GPT 5.6 Sol.
2026-08-19 23:04:35 +00:00
VMSolidusandGitHub 40e88e0d2d Refactor Get Pain (#22847)
This PR refactors get_pain() to be essentially performance free.
Previously it was a member of the top 5 most expensive procs.
I had to touch a metric shitton of files to make this happen. Notably
get_pain() was also 1/3rd of the entire processing cost for Mobs - Life
2026-08-19 22:50:40 +00:00
VMSolidusandGitHub 27f727b71f Mechanical Engineering Cross Role Interactions (#22880)
<img width="606" height="144" alt="image"
src="https://github.com/user-attachments/assets/f1c88863-37be-41e0-be79-27fca980a3f3"
/>

This PR adds new "Cross-Role Interactions" for the Mechanical
Engineering skill, with two specific kinds that are aimed at a variety
of different roles.

1. **Bonus damage vs. structures**: Having ranks in MechE makes you deal
bonus damage when melee attacking structures like Airlocks and Windows.
This makes it a desireable niche pick for any kind of job that can see
themself wanting to take a breaching to a room's entrance! For example,
paramedics, shaft miners, and security can all make use of it on
occasion.
2. **Mech Repair Speed**: This one is aimed specifically at Machinists.
Repairing mechs with a welder is no longer instantaneous (That was very
powergamey in practice for 'battle machinists'). Instead it has a repair
speed (and repair amount) that scales with your Mechanical Engineering
skill.

Why MechE and not Robotics? To encourage further "Machinist
Specialization". Machinist players were already pretty naturally
inclined to position their character as either being a Robotics
Specialist, or a Mechatronics Specialist, by sheer virtue of there being
two machinist slots and two noticeably distinctive roles. This
separation of skill interactions is there to further encourage this
degree of separation between machinist skillsets.

As a side note, just so I'm not thoroughly pissing off every machinist
main. As a quality of life improvement, I've made it so that attempting
to repair a mech with a welder will loop the repair until completed or
interrupted.

---------

Signed-off-by: VMSolidus <evilexecutive@gmail.com>
2026-08-16 16:13:43 +00:00
FenodyreeAvandGitHub be17521156 Fixes armour checks, rubbers checking siemens and pain interrupting t… (#23023)
**_- bugfix: "Fixes all rubber bullets dealing damage twice."_**
Rubber bullets were dealing their pain damage twice, while checking if
they should shake your screen or not.

_**- bugfix: "Fixes all attacks that dealt pain damage checking siemens
coefficient. This makes everything but hardsuits and voidsuits stronger
against rubber bullets. Insulated gloves are also no longer immune to
rubber bullets."**_

Hardsuits has siemens 0.1, meaning they took 10% damage from all stuns.
Now rubber bullets check their melee armor. Hardsuits are now weaker, or
the same against stuns.

Regular armor all has siemens 0.5, they took a flat 50% reduction.
Security armour is slightly weaker to rubbers, ablative and ballistic
are much weaker. Combat armour is roughly the same, or slightly better.
Riot armour is a lot better.

Voidsuits all had better siemens than armour, all voidsuits are now
weaker against stuns.

Finally, all jumpsuits had 0.75 siemens, but no (or nearly no) armor.
Combined with the fix of them hitting twice this means that rubber
bullets previously dealt 50% more damage against people in jumpsuits
than they do now.

**_- bugfix: "Fixes pain failing to make your blurt out whatever you
were typing. Now getting shot will cause you to say whatever was in the
typing window when you were hit and close the window immediately,
allowing you to move."_**

No more getting stuck in the typing window when you're getting sprayed
down by an STS!
 

_**- bugfix: "Fixes all attacks that had manually set armour checks,
previously they ignored the armour they were meant to check and decided
what armour affected them based only on their damage type."**_

Weapons that were set to specifically target armour types, such as
explosive projectiles (rockets, etc) were instead defaulting to the
damage type they dealt. So a rocket to the head was checking your melee
armour, not your bomb armour.

---------

Signed-off-by: FenodyreeAv <fenodyree.av@gmail.com>
2026-08-16 16:13:03 +00:00
5df674622c Looping Sound Channel (#22918)
* Added the option to manually change the looping sound channel volume
in the SFX Preferences tab.


AI usage disclosure: The code for this was created in-part using GPT 5.6
Sol.

---------

Signed-off-by: Geeves <22774890+Geevies@users.noreply.github.com>
Co-authored-by: VMSolidus <evilexecutive@gmail.com>
2026-08-16 18:19:53 +02:00
FenodyreeAvandGitHub 44b11d6804 Reduces damage to pilots from shots penetrating the cockpit (#23033)
I mistakenly assumed mech armour was good.

Only combat armour reduces the damage of any rifle round, all other mech
armour is worthless against actual weapons.
2026-08-13 16:22:56 +00:00
1a37ba3d26 Allows crew transfer votes on red alert, weighted for participation in round (#22993)
With massive thanks to @JohnWildkins for help in touching a lot of
concepts I've never worked with before, as well as helping me get back
into contributing in general.

This PR allows crew transfers to be called during red alert and adds
support for weighted voting to help favour active participants in these
particular rounds.

Observers and players still in the lobby are given only half a vote
towards transfer/continue. There is also config support to define an
active 'participation time' in minutes, which is used to stop potential
abuse cases of players respawning/joining from the lobby just before (or
even during) the transfer to gain a full vote. By default, this is set
to 15 minutes, so anyone who's been actively playing in the round for at
least that long is eligible.

This is my first time touching things like the config file or any sort
of subsystem more advanced than, like, the far more basic PRs I'm used
to, but I was encouraged to look at this as a little project. It all
appears to work well locally.

---------

Signed-off-by: Matt Atlas <mattiathebest2000@hotmail.it>
Co-authored-by: Jaraci <mirandatrasen@nt.net>
Co-authored-by: Matt Atlas <mattiathebest2000@hotmail.it>
Co-authored-by: hazelrat <83198434+hazelrat@users.noreply.github.com>
2026-08-06 10:12:51 +00:00
e47fb25f16 Fixes the wires in hardsuits being numbers instead of named (#23002)
As per the title.

---------

Signed-off-by: Casper3667 <8396443+Casper3667@users.noreply.github.com>
Co-authored-by: Wowzewow (Wezzy) <42310821+alsoandanswer@users.noreply.github.com>
2026-08-06 09:32:23 +00:00
BatrachophrenoandGitHub 1658eda825 Stasis Cages - Bugfixes & QoL (#22982)
changes:
- qol: "Mobs in animal traps can now be transferred directly to Stasis
Cages by click-dragging rather than requiring them to be in a net."
- bugfix: "Mobs can no longer use their ranged attacks while contained
inside objects (including animal traps)."
- bugfix: "Stasis cages now apply stasis only while powered and
correctly clear it when releasing simplemobs."
- bugfix: "Fixes stasis cage transfers race condition freeing trapped
animals randomly."
  - bugfix: "Corrects stasis cage safety-wire status display."
2026-08-02 01:41:17 +00:00
VMSolidusandGitHub 886ca9237f Yet Another Mech Quality Of Life PR (#22916)
This was originally just going to be a PR that improves quality of life
for the mining mech, which *STILL* felt worse than mining by hand even
after my last time buffing it. But then I got sidetracked with adding
more sound effects to mechs, and now they have a "bitching betty" as
well as a reactor hum sound loop. Including even more audible feedback
for when the mech takes damage.


https://github.com/user-attachments/assets/5f2020f4-55fd-4e36-8368-471522aad4fa
2026-08-02 01:24:42 +00:00
103b12087a TWILIGHT OF PEACE #1: Extreme Canonicity (#22914)
Adds a new type of canonicity that will be used for the TWILIGHT OF
PEACE lore arc.

The main differences are:

- Event antagonists will NOT pull any punches. You are expected and
extremely encouraged to play carefully and to the best of your ability.
All characters are liable to be killed if it is deemed appropriate for
the story.

and

- Character deaths are forced canon during this round. All character
deaths will be canon, and the only retcons accepted will be SOLELY in
extreme, bug-related deaths!

---------

Co-authored-by: Matt Atlas <liermattia@gmail.com>
2026-08-02 01:24:40 +00:00
GeevesandGitHub dc3a56407f Roundstart Readied Morale Bonus (#22927)
* Readying up and successfully joining the round now gives you a morale
bonus that lasts for 30 minutes.


AI usage disclosure: The code for this was created in-part using GPT 5.6
Sol.
2026-08-02 01:24:39 +00:00
HaydenandGitHub 13beeb437a Megaphones now create floating chat and use accent/lang (#22942)
Megaphones now use your accent, language, and create floating text when
used.

<img width="2560" height="1400" alt="dreamseeker_V1ntU7aL2j"
src="https://github.com/user-attachments/assets/36828048-9e5b-4c6d-bad9-974d8880adef"
/>

Port of https://github.com/Baystation12/Baystation12/pull/35232 but only
in spirit.
2026-08-02 01:24:36 +00:00
FenodyreeAvandGitHub 21b9d5861a Fixes bluespace inhibitor interaction with telescience (#22967)
Bluespace inhibitors prevent you from teleporting out of them in a
square.
They prevent you teleporting into them in a circle.

Previously, if you got very unlucky, you could teleport into an area but
not back out again.

This makes both checks a square.

It also drops you one additional tile further out of the teleport zone,
so if you step off your portal in the direction of the inhibitor, it
doesn't destroy the portal.

Telescience portals also didn't care and would form inside the inhibitor
radius.

changes:
- bugfix: "Fixes bluespace inhibitors inconsistantly blocking teleports
in a square, but finding the alternate desination in a circle. Its all
square now."
- bugfix: "Fixes telescience portals not respecting bluespace
inhibitors."
2026-08-02 01:24:10 +00:00
VMSolidusandGitHub 514bc2346e Technomancer Jumpstarter (#22869)
Might as well complete the set of solo antag jumpstarters. This PR adds
a Technomancer Jumpstarter, as a traitor exclusive item equivalent to
the Vampire and Changeling jumpstarters. It lets them trade all of their
TC to become a Technomancer instead of a traitor.

<img width="1902" height="988" alt="image"
src="https://github.com/user-attachments/assets/7f392d58-a3e2-47aa-9a79-b737a17ea94c"
/>
2026-07-29 16:38:14 +00:00
5e7d1e5706 Fix bad pointer in check_tremor_surgery (#22936)
* Please describe the intent of your changes in a clear fashion.
The `check_tremor_surgery` proc in `psiblock_drugs.dm` was registered to
the `COMSIG_GET_SURGERY_SUCCESS_MODIFIERS` signal with an incorrect
signature. It was missing the `target` mob parameter, causing the
`success_rate` argument to incorrectly receive the `target` mob instead
of the `&success_rate` reference.

This led to a "bad pointer" error when attempting to dereference
`*success_rate` on a mob object.

This PR updates the `check_tremor_surgery` proc signature to
`(mob/living/user, mob/living/target, success_rate, duration)`, aligning
it with the signal's expected arguments and other similar handlers. This
ensures `success_rate` correctly receives the pointer reference,
resolving the bad pointer error.
* 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-2G4](https://aurorastation.sentry.io/issues/7636195708/?seerDrawer=true)

---------

Co-authored-by: VMSolidus <evilexecutive@gmail.com>
2026-07-28 00:55:02 +00:00
VMSolidusandGitHub 17a73e2bac Psychic Damage Tweaks (#22878)
Psychic damage apparently felt toothless, while also being pretty opaque
to players on when it was effecting your skills.
So this PR makes the effects of psychic damage harsher than the opposing
bonuses from positive morale, while also adding new feedback messages to
better indicate to a player what and when psychic damage penalties are
occuring.

I've also taken the time to fill out missing DMdocs comments for the
morale component.
2026-07-26 18:06:05 +00:00
FyniandGitHub 03760f89f9 Buffs Technomancer slightly (#22824)
- Changes the Technomancer's starting gear. They now set of chameleon
armour, a normal agent ID and a raider headset.
- Techno is too vulnerable to the newly rolled out Security pistols, and
even two sec officers can take one down in less than a second.
- They can still be taken down by LTLs, but are slightly less vulnerable
to it.
- The bluespace ID and headset, while lovely sprites, are clunky as they
do not fit in with all gimmicks. Notably, the bluespace ID could not be
edited in a meaningful way to aid with gimmicks.
- Notably, the agent ID can swipe access and has access to the
Electronic Warfare Suite, making this a minor buff too.
- The agent ID can already be set to have the same appearance as the
bluespace ID, should you wish to be a classic technomagus.
- The headset does intercept comms, making this a buff also.

Should this prove too much, things can easily be edited. Notably, the
techno loses access to the rarely used bluespace comms channel, an
exclusive comms channel. Given this is a solo mode, this is not a major
loss but if required a workaround could be made.

---------

Signed-off-by: Fyni <itsfyni@gmail.com>
2026-07-26 18:05:34 +00:00
BatrachophrenoandGitHub c92d909534 Wires Panel and Signaler Expansion (#22846)
Fleshes out wire panel skill behavior and signaler management.

Electrical Engineering 4 was very OP for revealing all wire labels of
all machines, and it was super fun while it lasted.

Wire panels now have associated skills with their use, and increased
skill ranks will increase the proportion of wires (chosen at random)
that are easily recognizable on sight for certain types of wiring
panels.
**Professional:** 75% revealed
**Trained:** 50% revealed
**Familiar:** 30% revealed
_(note: having both Electrical and Mechanical engineering at least
Trained gives you that baseline 30%, reflecting how your knowledge can
probably translate to decent guesswork.)_

The following wire panels are affected:
**Electrical Engineering:**
- APCs
- Cameras
- IFF Beacons
- Radios
- Smartfridges
- SMES Units

**Mechanical Engineering**
- Airlocks
- Disposal Units
- Fabricators
- Vending Machines

**Atmospherics Systems**
- Air Alarms

**Reactor Systems**
- Particle Accelerator Control Boxes (lol)

**Robotics**
- Hardsuits
- Suit Storage Units (sharing the love is all)
- Robots
- Tag Scanners

**Xenobiology**
- Stasis Cages

Also, I made it possible to blow out all the lights in an APC's area by
snipping the power regulator cable and then pulsing the lights wire.
Great for signalers.

Speaking of signalers, new app deployed to all Engineering, Research,
and Robotics personal modular computers:
<img width="816" height="722" alt="Screenshot 2026-07-14 144049"
src="https://github.com/user-attachments/assets/3d588712-ebfd-47ac-b699-7cdac2c04907"
/>

Self-explanatory. Please only use corporate-provided software for
behavior within your contract regulations.
2026-07-26 18:05:15 +00:00
b795b3c366 Human origin darkvision changes + bugfix. (#22881)
Having darkvision that powerful is not quite appropriate for humans, so
I've nerfed it a bit. Seeing in the dark is harder now, but if you
squint and look really closely you can sort of see.

No darkvision:
<img width="1349" height="1349" alt="image"
src="https://github.com/user-attachments/assets/79e64ae1-3b22-4e97-b7ec-5d82abf74776"
/>

New darkvision:
<img width="1349" height="1349" alt="image"
src="https://github.com/user-attachments/assets/ff7a9860-6b49-41da-8aa5-a2bb8d983a15"
/>

Darkvision has also been added to Himeo and New Gibson. Lastly, glasses
don't override darkvision anymore unless the glasses give better
darkvision.

---------

Co-authored-by: Matt Atlas <liermattia@gmail.com>
2026-07-23 20:06:33 +00:00
5682f3c651 Per-source movement sounds. (#22800)
Movement sounds for mobs are now handled by a single component. Movement
sounds are fed into it through signals, which contain both a movement
source (like an item for a mob, causing the sound) and a list of sounds
to pick from.

To-do:

- [x] Figure out how to do barefoot species sounds
- [x] Maybe movement sounds for simple mobs
- [x] More movement sounds for other items

---------

Signed-off-by: Matt Atlas <mattiathebest2000@hotmail.it>
Co-authored-by: Matt Atlas <liermattia@gmail.com>
Co-authored-by: VMSolidus <evilexecutive@gmail.com>
2026-07-23 18:29:50 +00:00
Wowzewow (Wezzy)andGitHub 2d81c1afb3 Sabrage uses skills now (#22854)
Bartender sabrage now uses the skills system instead.

Gives a small morale boost on success.
2026-07-20 21:28:40 +00:00
802d3fe01f Persistency subsystem update - Generics and history records (#22114)
# Summary

This PR is the next update to the persistency subsystem. The goal of
this PR is to provide more framework like functions to allow more types
of content to be made persistent.

Currently only volatile game objects created during a round can be (*in
a [clean](https://www.youtube.com/watch?v=rZ3ETK7-ZM8) way*) saved and
made persistent. This update attempts to provide methods to make
*everything*¹ persistent.

This introduces persistent generics and history.

## Database

The following things are going to be changed and added in the database  
(open in new tab for better visibility, PNG file includes the drawIO
code):

<img width="1692" height="1041" alt="aurora_persistency_db drawio"
src="https://github.com/user-attachments/assets/ea53f419-f9aa-4592-af8f-3a8d5edf3177"
/>

**Deviations on database implementation from diagram:**  
- Removed unique constraint on history table - Prevented adding multiple
records per round per attribute.

## Framework surface changes

- MC/VV: Moved global object track register to subsystem var space.
- MC/VV: Point of interest: Added history_cache and generic_cache to
subsystem var space.
- MC/VV: Updated subsystem stat entry message, now providing information
on cache sizes of new types.
- Added `singleton/persistent_type` defines (Type, clean-up rules,
finalization hook) and macros allowing new definitions of said types.
- Added cache structures that are also used for returns on public procs
in generics and history persistent types.
- Major new framework features: Persistent history (example: Mining
yield records) and persistent generics (example: Persistent Horizon
overmap position). See documentation for more information.

DrawIO diagram for documentation, includes source in it (open in new
tab):

<img width="200" height="200" alt="Persistence-subsystem-flowchart
drawio"
src="https://github.com/user-attachments/assets/51f28331-f999-49a2-a7cc-58278f7ae416"
/>

## Tasks

(These lists are not comprehensive.)

**General**
- [x] Update DB - Write SQL scripts.
- [x] Add subsystem modular files for generics and history.
- [x] Add type definition logic, macros.
- [x] Add type-DB init logic.
- [x] Logging.
- [x] A lot of testing. *A lot.*
- [x] Changelog.
- [x] Self-Review.
- [x] Update documentation on the persistence subsystem.

**"Persistent history"**
- [x] Add init logic.
- [x] Add finalize logic.
- [x] Add framework surface procs.
  - [x] Get last record.
  - [x] Get last X records.
  - [x] Add record.
  - [x] Add character ID related validation.
- [x] Add initial example mechanic.

**"Persistent generics"**
- [x] Add init logic.
- [x] Add finalize logic.
- [x] Add framework surface procs.
  - [x] Save.
  - [x] Load.
- [x] Add initial example mechanic.

## Changes

Too many changes to be listed here - Check changelog and actual changes.

## Warning

There are certain use/test cases that *cannot* be tested locally due to
missing preexisting data in the database. This should only affect new
data structures (new persistent types), not existing data.

¹ _Large scale persistent mapping is excluded for this version._

---------

Co-authored-by: Copilot <copilot@github.com>
2026-07-19 20:56:17 +02:00
0a331596ec Roleplaying injuries sustained in canon events is now mandatory. (#22830)
> All injuries sustained as part of this round are immediately and fully
canon, and should be roleplayed to the best of your ability, both in
this round and the following. Do not ignore an injury you have obtained
without explicit approval from administration. You are expected to
roleplay its consequences believably, even extending to following
rounds.

This means that if you were to get shot in the hand during an event, you
cannot magically pop up next shift and pretend it's fully fine. You are
expected to roleplay these things appropriately. Similarly, if your hand
was removed during an event and is substituted with a prosthetic, you
are also expected to keep this unless you adminhelp and an administrator
tells you that you can void the event in question.

Surgeries taking 10 minutes and leaving no consequences is a gameplay
contrivance, not a realistic representation of what surgery/medical
recovery is like in the Auroraverse. Conditionmed will show this better.

---------

Co-authored-by: Matt Atlas <liermattia@gmail.com>
2026-07-17 11:41:06 +00:00
962f62612e Adds a tactical rescue axe for security and antags. (#22839)
Adds a cool-looking subtype of the rescue axe for security and antags.
Spawns by default in security officer and head of security lockers. It
has also been added to some antag preps (mercs, burglars, raiders) and
to the uplink (tools section, 1 BC). Sprite by TheStryker.

<img width="366" height="276" alt="image"
src="https://github.com/user-attachments/assets/c034e454-60e0-4d0b-a5ff-fd1c22f4075f"
/>

---------

Co-authored-by: Matt Atlas <liermattia@gmail.com>
2026-07-17 11:06:52 +00:00
runecapandGitHub 929cb9e6e0 Fix Hivenet Echoes Notifier (#22829)
Bugfix. I never saw the message trigger on live, and it didn't trigger
on private tests until this fix.
2026-07-14 10:07:24 +00:00
VMSolidusandGitHub 48d8a06d1c Conditioning Skill And Mass (#22747)
This PR does a few new things:

1. Adds a Mass var for Movables (/Mob, /Obj) which is literally required
for me to do anything at all with Kinematics (Very routine basic
physics)
2. Adds a derived "effective mass" statistic which is generated via
signal hook, allowing sources like Skills, Drugs, Cybernetics etc to
pitch in and contribute to a user's "Strength" in certain situations
without directly modifying mass.
3. Adds a mass modifier var for species datums, while painstakingly
calibrating each and every single species with consultation from every
lore team. A baseline human gets 72.0kg of Human Reference Mass. Any
species applied to it will multiply this by a constant that
algebraically cancels out the Human Reference Mass and replaces it with
a Species Reference Mass. Changing a species via the usual procs will
reset and then re-apply the correct values.
4. Refactored Lift/Drag/Fireman to have limits and penalties based on
relative effective mass
5. Finally, to make use of all this, I've added a new Conditioning
Skill, which modifies effective mass.

The standard assumption made for Lift/Carry is based in an assumption
that a typical character should realistically be able to
lift/carry/fireman a person 1.25x their mass. Previously the fireman
carry mechanic was heavily hardcoded, and didn't have much in the way of
granularity. If I wanted to RP a character that was a bodybuilder, there
wasn't really a way to do this. With this PR, there's now a fairly large
variety of interesting breakpoints.

This also allows there to be more granularity between different species
as desired by our lore teams. For example, a Zhan is in general stronger
than a M'sai. To give an example in the breakpoints for two different
species:

Human Lift Breakpoints:
Rank 1: 90kg (lift a Skrell, Human, Offworlder, M'sai, KA, or ZA)
Rank 2: 112.5kg (Lift a Zhan, Shell, or Diona Coeus)
Rank 3: 135kg (Lift a (Non-Industrial) IPC, Unathi)
Rank 4: 157.5kg (No new breakpoints, though you get less a movespeed
penalty from lugging around any of the above)
Can Never Lift: Industrial, Bullwark, Diona, Vaurca Ta'

Zhan Tajara Lift Breakpoints:
Rank 1: 116kg (Skrell, Human, Offworlder, M'sai, Ka, Za, Zhan, Shell, or
Diona Coeus)
Rank 2: 145kg (Non-Industrial IPC, Unathi)
Rank 3: 174kg (No new breakpoints, though you get less penalties from
the above)
Rank 4: 203kg (Juuuust barely lift an Industrial or Diona with heavy
slowdown)

<img width="1078" height="436" alt="image"
src="https://github.com/user-attachments/assets/a6802515-a827-4dc1-8734-55b604c589ab"
/>

Conditioning as a Skill sits in the Occupational category, which has
been carefully chosen and designed around to create a fairly compelling
web of opportunity costs. As a skill, it's very desireable for basically
any person that wants to play a "Muscular character" and also enjoys
fireman carrying people around, which makes it particularly useful for
hangar techs. By contrast a Paramedic might not actually need this
skill, since they can bypass the usual limits by just using rollerbeds.

---------

Signed-off-by: VMSolidus <evilexecutive@gmail.com>
2026-07-12 18:06:51 +00:00
BatrachophrenoandGitHub 1c8c0c2221 Bugfix pile (#22823)
Fixes several runtimes from the past few weeks, some additional material
repath regressions, and the fact that if I shoot you with a stream of
ionized deuterium particles, it doesn't riddle you with cancer.

changes:
- bugfix: "Fixes emergency shields runtiming when hit by thrown
objects."
  - bugfix: "Fixes several stale global list runtimes."
- bugfix: "Fixes several health percentage checks that could use unset
initial health values."
  - bugfix: "Fixes additional materials regressions in INDRA code."
  - bugfix: "Fixes invalid fuel injector depletion math."
- bugfix: "Makes accelerated particles apply radiation damage to living
mobs they pass through."
2026-07-12 18:06:28 +00:00
FabianK3andGitHub 0ce658a76f Refactor ambience (#22807)
# Summary

This PR shortens the length of the sounds loops introduced in #22789
(ventilation and SMES humming) in order to improve sound location source
update frequency.
2026-07-09 23:34:39 +00:00
VMSolidusandGitHub 0c8fde7892 Resolve Skill (#22780)
By popular request, this PR adds a new minor skill to the Everyday
category. The "Resolve" skill is relatively straightforwards, providing
a small permanent morale point bonus. Which by virtue of how the Morale
system works, it also does double-duty as a "Psychic Damage Resistance",
since it allows you to take that many extra points of psychic damage
from psirens before the penalties kick in. At maximum ranks in Resolve,
you can take 3 shots from an Omen before the next shot inflicts the
psi-panic condition. Effectively giving a soak pool of 1 hit per rank
bought in the skill.

<img width="1274" height="527" alt="image"
src="https://github.com/user-attachments/assets/ac3da1fd-8053-42d5-97bb-38633d420921"
/>

---------

Signed-off-by: VMSolidus <evilexecutive@gmail.com>
2026-07-09 21:04:07 +00:00
FabianK3andGitHub 50eb01db6e Lobby track and background machine ambience (#22789)
# Summary

This PR adds a new grim spatial sound track to the lobby track list +
lemurian sea sector and adds an ambience loop tracks to vents+scrubbers
as well as SMES's.

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

| Path | Original Author | License |
| --- | --- | --- |
| sound/music/lobby/spatial_audio.ogg | [spatial audio 2 by
BadWolf23/freesound.org](https://freesound.org/people/BadWolf23/sounds/723957/)
| CC BY 4.0 |
| sound/machines/ventilation_humming.ogg | [humming machinery by
Lewooz/freesound.org](https://freesound.org/people/Lewooz/sounds/545952/)
| CC0 1.0 |
| sound/machines/electrical_humming.ogg |
[SFX_GEOFON-HUM-ELECTRICAL-BOARD_4824_01 by
pblzr/freesound.org](https://freesound.org/people/pblzr/sounds/785942/)
| CC0 1.0 |

**Changes made to original sounds:**

- Added fadein/out to spatial_audio, reduced volume, corrected file
metadata (author, trackname, comment).
- Cut background noise in ventilation_humming, shortened soundfile,
corrected file metadata (author, trackname, comment).
- Shortened electrical_humming soundfile, corrected file metadata
(author, trackname, comment).
2026-07-09 21:04:01 +00:00
KanoandGitHub b9072c2ff2 QoL changes for loreconsoles (#22784)
## About PR

- Adds a looping sound for the lore consoles which can be heard in a 11
tile radius in 6 second intervals. The loop stops once a human mob has
interacted with the console

- Removes abstract macro from loreconsole base types, since these are
intended to be spawned

- Slightly decreased font size of the body text so it feels less like
you're in your 60s and this is the font size of your phone

- Fixed being able to interact with power reliant loreconsoles without
power

## Images



https://github.com/user-attachments/assets/69c94128-d84a-426b-bc8c-27d94c5974cb



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

| Path | Original Author | License |
| --- | --- | --- |
| sound/machines/data_ping.ogg | Timbre
(https://freesound.org/people/Timbre/sounds/444876/) | CC BY-NC 4.0 |
2026-07-08 19:40:29 +00:00
441ef5805d Splits Pilot: SpaCecRaft intO three levelS and Adds Piloting Education BacKgrounds (#22673)
These were some of the first given feedback for skills, so I may as well
implement it.

Piloting is now split into three levels like other skills which note
what pilot class of vessel you may comfortably pilot.
(Familiar) **Shuttle Pilot** is for all landables: Spark, Canary,
Intrepid, the Quark, and the like are all equal under it.
(Trained) **Class II Pilot** covers most ships, which are "overmap-only"
and unable to land or dock.
(Professional) **Class IV Pilot** covers only the Horizon normally, but
design-wise extends to whatever is the main player ship, or for anything
massive

**Antags get Professional Pilot, so they can always do ship hijack
gimmicks without worry.**

As a convenience to make Bridge personnel stand out, Professional/Class
IV Pilots can deduce their current overmap coordinate from examining
space on help intent for 3s. There's no way to directly link to the
overmap, so on the backend, this ability briefly references an existing
ship console.

### Design

Class II and IV are pre-existing terms in-lore, used on the Interstellar
Travel page to refer to civilian size classes.
With how important each level of piloting is, they cost _+4 points_ each
instead of going 2 -> 4 -> 8. This lets there exist the occasional pilot
character from any background, but it's _always_ an investment and
piloting the Horizon stays hard without training.
As Familiar currently costs 6 points, this is effectively a 2-point buff
for most cases as you'll rarely have to pilot non-shuttles.
(**EDIT**: Piloting levels are now 4 -> 8 -> 10 so there's a bit of
flexibility to have an extra skill for Professional Pilots from
Expeditionary Trade)

#### The _**real meat**_ of this PR...
is that you can now attempt to pilot vessels a level higher than you
with penalties, so there's now a failure spectrum should you manage to
access an adjacent-class ship rather than always being hard-locked. The
penalties affect acceleration, slowing, turning, and rolling. They're
most extreme for Shuttle and Class IV to represent how clueless an
unlicensed pilot would be and how complex the Horizon realistically is
to operate.

With smart usage of autopilot, you can actually find a way to travel
normal-ish. I think this is a fun interaction to have for underskilled
characters, and makes autopilot actually have a use as it otherwise
kills you. Maybe Bridge personnel can give lessons to Class II pilots
with it.

### Piloting Education Backgrounds

Coming are THREE piloting education backgrounds: Flight Academy, Fleet
Training, and Expeditionary Trade.

#### ALL GET _Familiar Electrical Engineering,_ _Familiar Atmospheric_

(EDIT: Flight Academy is now the only background that gets Familiar
Mechanical Engineering, this makes them stand out as being notably
handy/utility-ready for emergencies, but other backgrounds can still
easily match them with points.
Fleet Training has Tenacity down to Trained for character variety,
though tenacity is very slight buffs and hard to notice.
Expeditionary Trade now uses Familiar Firearms over Familiar Armed
Combat as it's more immediately important.)

Electrical Engineering now lets you use a power cell on an unpowered
ship console to give it emergency battery life based on the charge. This
helps with cases of being stranded from an APC broken by a meteor, a
high-capacity cell can give 10m or more based on Electrical level. I may
expand this bypass mechanic to all consoles in the future.
Atmospherics skill has no implementation currently, but dealing with
breaches or cycling on shuttles is too important.

Flight Academy - BC, XO, Captain
*Professional Piloting, Trained Leadership, Familiar Mechanical
Engineering*
> "You are at least 25 years of age, with the best navigation training
the Spur can offer, vessel handiness in a pinch, and the know-how for
reining in or assuring passengers for the voyage."

Flight Academy has Leadership honestly just because I didn't want Fleet
Training to look too good, and because I think they can rock the "this
is your pilot speaking" in a cool way. Bridge personnel are usually the
ones that have to wraggle people on away sites, especially during
events.
Mechanical Engineering allows them to make machine frames of ship
consoles in emergencies.


Fleet Training - BC, XO, Captain 
*Professional Piloting, Trained Firearms, Trained Tenacity*
> "You are at least 25 years of age, with the most extensive navigation
training possible and military discipline to back it up. You're a steady
shot in emergencies and, damn it-- You. Go. Down. With. The. Ship."

This was made because a player informed me many BC and XOs choose
military backgrounds, and the +4 points design would prevent that. Fleet
Training isn't the same as Military Training, but having all of Piloting
gives you 6 points free to match MT if wanted. The high Tenacity is
primarily for surviving in ship combat, where you'll probably
bleed/suffocate to death.

Expeditionary Trade - Miners, Xenology roles, OM, RD
*Familiar Piloting, Familiar Firearms, Familiar Medicine*
> "You've developed trade skills for a career of expeditions. You are at
home in a shuttle piloting to and from for an average day's work. You
can even hit a shot or tend to wounds when things eventually get
unsafe."

This is for Miner and Xenoarch primarily. An expedition is just any
journey with an objective, all roles revolving around piloting shuttles
to an objective needs to be able to hold their own if they ever find
carp or have an accident, especially since they'll likely be alone.

#### MISC stuff

corrected shaper gear comments I left wrong

Hotwiring piloting consoles now checks for Familiar in Electrical
Engineering. Its visible emote also now looks identical to attempting an
emergency bypass at first glance, so you can sneakily attempt one with
an unpowered console.

The Doctor of Psychology education background now gives Trained in
Leadership. This was intended to be uncommented, but the person forgot
to do it.

Research Directors now need to have Familiar/Shuttle Pilot. According to
the Guide to Piloting wikipage, they're supposed to be able to fly the
Intrepid and Quark for expeditions, and likely mirroring how the OM can
fly the Spark, but an RD can spawn completely incapable of piloting
currently.

---------

Signed-off-by: runecap <43975590+runecap@users.noreply.github.com>
Co-authored-by: VMSolidus <evilexecutive@gmail.com>
2026-07-08 17:13:18 +00:00
VMSolidusandGitHub 84836d35f2 More Transparent Skills (#22746)
So one of the most important 'features' of the Skills System is that
Skills are supposed to have a fairly interconnected web of **Opportunity
Costs** against each other. EG: Points spent in Surgery are points not
spent in Xenobiology and vice versa.

A significant problem with this however is that from the start we were
very wishy-washy about having skills actually tell the players what they
do, and were intentionally refraining from telling the players the
actual numbers behind them. This creates a few major problems:

1. It creates a knowledge difference between players who can code-dive
to find out what the skills do, and those who can't, effectively turning
skills into the same problem as "Secret Chem Recipes".
2. It prevents players from making informed decisions about how they
build their characters.
3. It turns out players are extremely unlikely to put points into a
skill if they don't know what it does.
4. It sabotages the "Opportunity Cost" factor of skills. If a player
doesn't know that Xenobiology for instance has some niche uses for their
role, they won't ever consider taking it over something more 'useful'
like Surgery.

There is also a side issue that players generally tend to overwhelmingly
despise skills that are 'reverse ordered', giving them penalties if they
don't buy the skill. They feel like this punishes them for not picking
something. In the case of Firearms/Unarmed/Armed my hands are tied right
now because of how the combat system is (not) balanced. But I can at
least fix that for the Mech piloting skill with some clever small tweaks
to the math. Players currently strongly don't like the new mech movement
because the non-forward directions tend to be too punishing. So I'm
tweaking the Pilot: Mechs math to be more player-friendly by actually
improving the handling experience of mechs.

The bulk of this PR is of course making as many skills as possible fully
transparent about what they do. Wherever possible, Skills now openly
state what they modify, and by how much at a given rank.

<img width="1270" height="982" alt="image"
src="https://github.com/user-attachments/assets/9619f2fa-8dd6-4021-8482-43a1f76f33f4"
/>
2026-07-07 14:14:04 +00:00
b5314566d5 Adds Round Canonicity to the game, and makes Storytellers able to edit round canonicity. (#22775)
To clear up when a round is canon, what type of canonicity it is and
what exactly it entails, canonicity information has been added to the
game. Through the Canon Panel, players can now see what exactly the
current round's rules on character deaths, antags, and character
interactions are. Additionally, this lets developers actually know
_when_ exactly a round is canon, which will be very useful for
persistence.

Storytellers and admins can change the canonicity of the round in the
panel as well.

Some examples:
<img width="400" height="600" alt="image"
src="https://github.com/user-attachments/assets/e71d2b18-0741-4bc0-aa98-979bb696d8a6"
/>
<img width="400" height="600" alt="image"
src="https://github.com/user-attachments/assets/29486039-7625-4443-af2e-3ac982727e5c"
/>
<img width="400" height="600" alt="image"
src="https://github.com/user-attachments/assets/7522f5f0-4d4e-4bae-906e-2b07067af3a5"
/>

---------

Signed-off-by: Matt Atlas <mattiathebest2000@hotmail.it>
Co-authored-by: Matt Atlas <liermattia@gmail.com>
Co-authored-by: Wowzewow (Wezzy) <42310821+alsoandanswer@users.noreply.github.com>
2026-07-04 22:31:07 +00:00
Casper3667andGitHub c11af798d3 Tweaks the messages for the psi-protect and mind blankers (#22758)
Mind blankers and psi-protect pills now display messages roughly every 2
minutes and 1 min respectively.
Mind blankers have a random chance for the message to also display on
the screen, as they're more invasive, being implants, but also safer.
A warning timer was also added for seizures from psi-protect, so people
have a short moment to react in.
2026-06-29 18:58:26 +00:00
60d09f31b1 TCAF expansion/rework stuff (#22717)
- renames/redescs/etc existing stuff to fit new TCAF lore
- lots of 4 years defunct TCFL stuff has been deleted or
repathed/renamed
- the tcfl peacekeeper ship that was soft-removed has been deleted
- the uniforms has also been modified and have had the necessary amount
of blue added. essentially i kitbashed the old TCFL uniforms with the
new TCAF uniforms

i probably missed a lot of tcfl stuff still.

---------

Signed-off-by: c#min7 <sadkermit01@gmail.com>
Co-authored-by: Kano <89972582+kano-dot@users.noreply.github.com>
2026-06-22 13:53:32 +00:00
VMSolidusandGitHub acdbcad005 Xenobiology Cross Skill Interactions (#22643)
This PR adds new Cross-Skill Interactions for both Cooking and
Xenobiology, the latter of which now provides a new Situational Skill
Modifier.

Cooking Skill now causes animals butchered by the character to drop
additional meat. A pretty simple small interaction that doesn't change
much in the grand scheme of things.

Xenobiology has gained two new interactions, aimed at making it a skill
"potentially useful" for players who think their character might be
fighting Space Fauna. The first is that it provides a melee damage
modifier (which can offset the penalties from low melee skill), but only
when attacking Space Fauna (that aren't player controlled). Normally
direct damage modifiers are very hard to balance as a consequence of
brainmed, but since this applies exclusively to a PVE interaction, the
balance concerns are significantly lessened. Its second new interaction
is to situationally modify the amount of butchering products gained from
Space Fauna (and only Space Fauna).

Particularly in the case of Xenobiology, this helps position the skill
in such a way that it provides Opportunity Cost for characters in
Cooking, Mining, and Security (to a much lesser extent, given they
almost never engage carp in melee). If points spent in Xenobiology helps
a miner fight off space fauna, then points spent in Surgery are not
points they're spending on being better at fighting carp. Almost all of
the skills in general should have care put into making sure that they
can provide viable Opportunity Cost against other skills in their same
category. Cross-Skill Interactions like this are an incredibly effective
method of doing so.

---------

Signed-off-by: VMSolidus <evilexecutive@gmail.com>
2026-06-19 18:21:03 +00:00
VMSolidusandGitHub 0625b841c3 Surgery Speed Modifiers (#22472)
This PR "gently refactors" surgery doafter timers to be deterministic
and variable. Instead of being simply a random number of seconds between
an upper and lower bounds, surgeries now have a base amount of time they
take to perform (in fractional seconds). This doafter time can then be
modified via signal interactions, such as coming from components.

The Morale component, Surgery skill, Anatomy skill, and Xenobiology
skill all have had signal hooks for surgery speed added, while the
latter two are uniquely conditional signal modifiers. Anatomy only
provides its modifier if the target's species matches your own, while
Xenobiology only applies its modifier if the target is an alien. Morale
can situationally either give a bonus or a penalty depending on your
current amount of morale points.

So to offset that this is now significantly more variable and that 4
different sources of bonus surgical speed exist, I've actually made the
base surgery times always on the upper end of what their previous
doafter duration range was, so surgeries are in general slower if you
aren't taking advantage of specializing in it.

Signed-off-by: VMSolidus <evilexecutive@gmail.com>
2026-06-19 16:47:29 +00:00
VMSolidusandGitHub 7aeab49ce5 Datum Destroy Optimizing (#22693)
Some concerns were brought up about the potential for performance
concerns with wrapping Destroy() in a try catch. So let me make a trade.
/datum is the parent of all objects in existence, and is spending a
large chunk of time on proc overhead for 2.6 million qdel'ed objects.

<img width="1196" height="811" alt="image"
src="https://github.com/user-attachments/assets/06ca1596-2d56-40ca-9ec6-9215ed02113c"
/>

I'll trade you a faster global destroy() for the better logging so I can
finish destroying the garbage collector lag.

The cost reduction is from 0.01209ms per datum to 0.007525ms per datum,
about a 28% time saving.
2026-06-19 16:08:15 +00:00
VMSolidusandGitHub 206bb29d52 Final Mob Destroy Audit (#22728)
I've audited the entire destroy path between datum and human, this time
paying attention to byond's built-in vars to make sure that the built-in
refs are correctly being cleared. I've also gone and corrected some
null-access mistakes, which are most prominently caused by as anything
casts not being null checked, since as anything allows null entries in a
list to be read.

By far the worst offender I've found was the lack of clearing of the
atom.underlays var, which contains a list of refs. And when searching
for uses of this var across the repo, I've discovered it's associated
with an overwhelming majority of the remaining objects still in the hard
del trackers.
2026-06-19 14:18:33 +00:00
Casper3667andGitHub 7a99813dd0 The Case Dossier program (#22703)
This adds the case dossier program. A program intended for investigators
to use for their cases, with the ability to record evidence, photos,
documents, people and their notes on a case. The rest of security is
able to view cases in the program, but not edit them.
Additionally, the forensic skill was added to evidence bags and photos,
allowing a person to add the time, place and the person using them,
mainly intended to be used with the case dossier program.
Fibers and prints can now be gathered from objects inside evidence bags,
to avoid contamination.
Also fixed some bugs with taking photos of certain objects, such as
airlocks.


https://github.com/user-attachments/assets/92a880e9-9032-46d4-88c0-43d45b64f979
2026-06-19 04:36:07 +00:00
VMSolidusandGitHub 1c6f0d938b More Morale Effects (#22552)
Having had a chance to observe player behavior around morale during
events, it's become clear to me that the current actual mechanical
effects of morale are too small for anyone to notice, as it seems I
undershot their effects too much. Additionally, I realized from
experiencing it myself that the duration of the Leadership buff in
particular was too short to be able to last throughout a single combat
encounter, as there's a surprising amount of downtime in our event
combats. Plus the travel time eats into that timer.

So this PR does a few things to make Morale a bit more impactful and
noticeable. The first is to increase the pre-existing effects (other
than unarmed combat chances) by 50%. Players will never actually have
100% of the modifiers provided by the nature of these math equations,
and they tend to in-practice only go into fights with between 20% and
50% modifiers. The second part of this PR is adding two more
interactions for it, both for Engineering/Science and Hydroponics
characters. These being crafting speed and plant harvesting efficiency.
That should help make the effects more enticing to have for non-combat
characters.
2026-06-18 19:59:08 +00:00
FenodyreeAvandGitHub 8a852f2f8a Fixes a second person scanning the patient cancelling the first scan (#22709)
DO_UNIQUE prevented a second person scanning the same patient at the
same time.

This does let you spam the medscanner and get multiple scans in progress
at the same time, but that's much less of an issue than getting your
scan canceled by a second well meaning doctor.
2026-06-17 17:33:21 +00:00
062f8c46ae Adds stiring glasses with spoons for moodlets (#22585)
Shaking coffee in the shaker was silly.
Now you can stir your coffee to make people happy.

<img width="1379" height="165" alt="image"
src="https://github.com/user-attachments/assets/9ad5e514-f66e-43d5-b4e9-b8a3122a7f21"
/>

---------

Signed-off-by: FenodyreeAv <fenodyree.av@gmail.com>
Co-authored-by: Matt Atlas <mattiathebest2000@hotmail.it>
2026-06-13 20:53:48 +00:00
BatrachophrenoandGitHub 0c7ab8baa7 Lemurian Sea (#22686)
changes:
  - refactor: "Refactors Gravity Generator UI from HTML to TGUI."
- rscadd: "Adds sector-based modifier var 'overmap_hazards_multiplier'
for generating total overmap hazard count."
  - soundadd: "Adds new Lemurian Sea 'welcome' announcements."
- rscadd: "Added Lemurian Sea gravitic anomalies as overmap hazards and
random events."
  - rscadd: "Adds ADPI/The Voices."
- rscadd: "Adds ADPI Panel for modmins to send ADPI messages to a single
character or all characters from their respective pools, or custom
messages."
- balance: "Vaurca Hivenet communication, the Hivenet Manifest, and
Hivenet Echoes are now disabled while the ship is in Lemurian Sea
sectors."
2026-06-13 16:25:49 +00:00
lewandGitHub 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
Casper3667andGitHub 0c08e73820 Fixes education age restriction and max skill level in educated skills (#22645)
The education age restriction now applies to tajara and unathi as well.
The max skill level was supposed to be unlocked in educated skills, but
was being accidentally locked to only the skill level the education
gave. This meant someone uneducated could sometimes get even higher
skill than an educated person, by spending skill points.
The three combat skill ranks were reduced to trained level as their max.
It was not possible for players to get higher before, and 3 was already
the baseline. If a professional is ever implemented for antags or
similar, it can be set back again then.
Doctor of Pharmacy was reduced to only need 25 years old, due to both
the description and that the pharmacist job has that age requirement
too.

fixes https://github.com/Aurorastation/Aurora.3/issues/22376
fixes https://github.com/Aurorastation/Aurora.3/issues/22286
fixes https://github.com/Aurorastation/Aurora.3/issues/22232 kinda. It
was already fixed, but more fixing on restrictions also reported on it.
fixes https://github.com/Aurorastation/Aurora.3/issues/22610
2026-06-08 10:49:03 +00:00
BatrachophrenoandGitHub 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