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.
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"
/>
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.
## About PR
Ports 4 hairstyles (hair_bun_short3, hair_ponytail_spiky,
hair_ponytail_simple, hair_parted_short) from Shiptest. "hair_bun_loose"
is derived from "hair_ponytail_simple". Colour palette is adjusted to
the modern grayscale colours we use
Ponytails and bun hairstyle was made by thearbiber, credits to them! I
wasn't able to track the author of "hair_parted_short"
This also replaces old sprites of "Ponytail, Spiky" and "Parted, Short"
## Images
<img width="896" height="616" alt="image"
src="https://github.com/user-attachments/assets/565e8b8d-9e9d-4057-a275-654a48c4bb24"
/>
### Asset Licenses
The following assets that **have not** been created by myself are
included in this PR:
| Path | Original Author | License |
| --- | --- | --- |
| icons/mob/human_face/hair.dmi (hair_bun_short3, hair_ponytail_spiky,
hair_ponytail_simple, hair_parted_short) | thearbiber (Shiptest) |
CC-BY-SA 3.0 |
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>
```
- server: "Changed the synthsprites to use the new DBCore"
- server: "Changed the MalfAI to use the new DBCore"
- server: "Changed the Alien Whitelists to use the new DBCore"
- server: "Changed the Requests Console to use the new DBCore"
- server: "Changed the Contracts Uplink to use the new DBCore"
- server: "Changed the Admin Ranks to use the new DBCore"
- server: "Changed the Job Bans to use the new DBCore"
- server: "Changed the Tickets to use the new DBCore"
- server: "Changed the Create Command Report to use the new DBCore"
- server: "Changed the WebInterface interconnect to use the new DBCore"
- server: "Changed the CCIA Recorder to use the new DBCore"
- server: "Changed the IPCTags to use the new DBCore"
- server: "Changed the Main Menu Poll-Check to use the new DBCore"
- server: "Changed the Client-Procs to use the new DBCore"
```
---------
Co-authored-by: Werner <Arrow768@users.noreply.github.com>
Summary of changes:
<img width="316" height="722" alt="image"
src="https://github.com/user-attachments/assets/1e6f1de1-0ce7-40a2-bff3-28cf9d6dd8b5"
/>
- Made mecha eye overlays cover the entirety of the eye(s). This means
it won't look wrong (and unusable) if you leave out the faceplates.
- The mecha eyes, mecha spine, and mecha mandibles, now utilize the
recolorable sprite palette, and are all properly colorable.
- The hand panel is now split into the panel itself (uncolorable) and
the light on top of it (colorable).
- The "large" variants of the mecha eyes, both overlay and faceplate,
are removed because they don't look good to the point I haven't seen
anyone utilize them. Happy to reverse if people want to keep it though.
- The mecha chest is now split into the chest itself as well as the
lights, both recolorable.
Not feeling the most confident about this PR due to the recolorable
sprites still looking off to me after applying the palette and general
jankness but wanted to put it out anyway. Any and all advice is welcome.
see title
(++index % num_lobby_screens) will only ever get you [0,
num_lobby_screens), which is why it maxes with 1. but that still ignores
the last screen. so instead we just do the smart thing which is to add
+1 after.
The next step in the Psi Reworks is here, this time adding all of the
remaining sources and applications of Psi-sensitivity and Psi-protection
that were on my To-Do list. Aside from a variety of tweaks and bugfixes
to powers, the most player-facing addition is the new Psi-sensitivity
related traits, which are High Psi-sensitivity, and Low Psi-sensitivity.
These traits modify the character's psi-sensitivity, which messes with
their interactions with psionics in a variety of ways.
All of these new sources and interactions with psionics are handled
entirely through components, which operate on the previously added
COMSIG_PSI signals.
Check the changelog file for more specific details on what all was
fixed. I've fixed quite a lot of bugs and issues with the various psi
powers.
I have actually tested this PR and verified that it works as advertised.
<img width="1902" height="1015" alt="image"
src="https://github.com/user-attachments/assets/e922593c-0595-4b63-bee4-36080d9cb8b4"
/>
### Asset Licenses
The following assets that **have not** been created by myself are
included in this PR:
| Path | Original Author | License |
| --- | --- | --- |
| icons/mob/human_face/hair_multiply.dmi (hair_taro) |
[zeroisthebiggay](https://github.com/zeroisthebiggay)
([Citadel-Station-13-RP](https://github.com/Citadel-Station-13/Citadel-Station-13-RP))
| CC-BY-SA 3.0 |
Part one of our nefarious plans to destroy lag forever, and also
accomplish some cool shit.
This replaces our renderer system with plane masters, this will also be
used to turn skyboxes into backdrops and thus totally remove skybox
updating lag. Additionally, this will let us manipulate entire planes
very easily to do all sorts of zany shit. All credit goes to the
original coders, this is some seriously cool stuff.
Also fixes some bizarre smoothing behaviour, reduces updateoverlays
calls since now not every single structure in the game tries smoothing
with nothing.
<img width="1349" height="1349" alt="image"
src="https://github.com/user-attachments/assets/9b7cecd7-3c47-448b-9dd8-9b904640bf82"
/>
<img width="1349" height="1349" alt="image"
src="https://github.com/user-attachments/assets/647d75a2-1bff-45ca-ab92-0aea10631afd"
/>
---------
Co-authored-by: Matt Atlas <liermattia@gmail.com>
Reverts #20467
For some reason, if you put a png into icon() and then show that to a
client, it uses a colossal amount of GPU. No idea.
Reverts to our older lobby system pending TGUI update.
Fixes#21489
From changelog:
>bugfix: "Fixes M'sai curly, and diagonal bangs hair styles not having
sprites.
>bugfix: "Fixes M'sai not having the curly hairstyle, while having the
alt variant of it.
`icon_state` did not correspond to the contents of the file.
both curly and curly alt had the same path, so only curlyalt worked
1. Look up now follows your mob (no more auto-removal when you move,
only when you go below a solid tile). Maybe add a hotkey?
2. Made the codebase work with the latest version of spacemandmm lint.
3. Advanced kits don't work on robotic limbs.
4. Density shifting should now always use set_density. Ported
TRAIT_UNDENSE from CM to better control the density of living mobs.
Fixes weird shifting behaviour with wall leaning -- what was happening
is that mob density was getting reset to TRUE because the mob wasn't
lying down.
5. TGUI say light prefs actually save.
---------
Co-authored-by: Matt Atlas <liermattia@gmail.com>
Breaks the monopoly baselines had over changeable screens by letting
Bishops do it as well. Currently there are only two options asides from
the default, an exclamation mark and a cross, but adding more is fairly
simple.
Also fixes the default face being layered on top of the alternative
heads by restricting what screens are available to each head.
Removes the markings that related to the lights in the alternative heads
as this implementation renders them obsolete. As a bonus, Siseyo and
Sienna lights are now animated!
The new screen options:

Adds a short variant of the punk sidecut haircut, just trying out the
sprite editor to get a feel for it/make sure there's no extra tricky
workflow steps for very simple baseline sprites to start with. Unless
there's a place with a list of wanted/needed basic sprites to attack,
will try to think of useful things to make for more future practice.

Per request of synthlore - you can no longer select the android job
title to spawn in with a positronic brain in a shipbound chassis, and
neither can you manufacture one.
Cyborgs broadly are not removed and are completely playable, but they
must contain either an MMI or a robot circuit. Positronics can still be
installed into an AI core.
This adds a toggle to the equip_custom_items proc to alternate between
it equipping only body-related items, and everything else. These two
toggleable modes are called separately.
This is intended to resolve a bug in live where, if you join in with a
custom item prosthetic leg, your shoes will be automatically unequipped
the moment you join. This seems to happen because custom items are
currently equipped after the rest of the loadout/job equipment, so your
shoes are put on before your custom item leg is.
Adds 25 new IPC screens for baselines, most of which are flags of
various nations not already included but with a notable IPC population.
Credit for ipc_himeo (Himean Globe) goes to anthony.albanese on the
discord. @beepbopbeepbop. Thank you.
https://imgur.com/gallery/idris-synthetic-fashion-show-2467-QPz3vU2 for
some examples of the screens (though not all of them)
https://forums.aurorastation.org/topic/20198-mission-briefing-auroras-gamemode-revolution
To-do:
- [x] Finish storyteller verbs.
- [x] Storyteller landmarks.
- [x] Proper storyteller spawning. Right now the gamemode system is
happy with just picking one storyteller and no actors.
- [x] Antagonist whitelists code.
- [x] Adding the Storyteller whitelist.
- [x] Mission map loading code.
- [x] Map in a bunch of missions.
- [ ] Storyteller adminhelps.
---------
Co-authored-by: Matt Atlas <liermattia@gmail.com>
Co-authored-by: DreamySkrell <>
Readds Dionae customization options to their hair and beard options in
the setup.
While I do sorta like the idea of just having them all be body markings,
this came with too many bugs, essentially bricking them in ghostroles
and some layering issues, this just readds most options.
---------
Signed-off-by: Yonnimer <31339047+Yonnimer@users.noreply.github.com>
Adds two new hairstyles, Bobcut, overye and Diagonal Bangs. Humans and
Tajara get these. This is ported from a PR on CMSS13 and has some
preview images there if you'd like to see how it looks.
https://github.com/cmss13-devs/cmss13/pull/7304
All credit to Ansekishokuu. I've only done a straightforward port. In
the case of Tajara, some adjustments were made to better fit for them.
---------
Co-authored-by: WickedCybs <wickedcybs@gmail.com>
* You can now view your custom items from within the loadout.
Also implements the framework necessary for custom items to be limbs,
and to automatically replace the limb it's meant to replace.
Implements the Aut'akh arm mentioned in this request:
https://forums.aurorastation.org/topic/21092-gracias-autakh-arm

Basically, Attendants are now a subspecies of Warriors instead of a
subspecies of Workers, meaning they carry most of the traits over from
Warriors aside from the ones that have been modified by me. They also
have a unique appearance that should still work with Vaurca clothing,
instead of needing adjustments a la Bulwark. Hopefully, an acceptable
alternative to the Attendant subspecies that was previously offered in
#17550.
@desvenlafaxine
* AIs can now dress up their preview mob.
* Cyborgs now have the cardboard outfit in the loadout again. You can
toggle it by deselecting the job suit and hat options.
* Job suits are now hidden correctly when the job suit is deselected.
https://github.com/Aurorastation/Aurora.3/assets/59633984/76c7c7a4-fa06-457c-bf8c-0a9bda733f49
Basically, uses the species' list of skin color presets, if any, to add
a button for body markings to select the same presets. This is only
really useful for Dionae at the moment, or at least I imagine so. Skin
tones and hairstyles were also removed from Dionae, as figuring out how
to add selectable tone for body markings was too much of a hassle and
adding presets for hairstyles as well seemed redundant. I was thinking
of adding a "random body markings" proc to resolve the issue of newly
formed gestalts not spawning with any hair, but let me know if this is
desired.
I discussed this with the Diona lore maintainer beforehand, but the team
is free to change their mind or request more features at any time.
From
https://github.com/Citadel-Station-13/Citadel-Station-13-RP/pull/6109
To address the elephant in the room; yes, these are reference hairs. I
think they should get in anyway because they look good, we don't have
enough good hairstyles, and we literally have Vegeta hair titled
'Vegeta' ingame already. I can rename them if you suggest new names, if
that is preferred. I just couldn't think of any.
Accidentally deleted the branch. Oopsies! Old PR:
https://github.com/Aurorastation/Aurora.3/pull/19204