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 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
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
- Adds a modkit to the Outer Eyes antag crates, so none human baddies
can adjust their suit easily.
- Adds the Outer Eyes Enforcer outfit, to allow admins and storytellers
to create Enforcers quickly.
---------
Signed-off-by: Fyni <itsfyni@gmail.com>
Co-authored-by: FabianK3 <21039694+FabianK3@users.noreply.github.com>
This was kind of a harsh mechanic to surprise players with, and turns
out it doesn't feel that great to tell them "Surprise your skill points
don't matter here". So this PR tweaks the "Empathy Penalty" from
Mindblanker and PsiProtect pills to 'only' cut the morale modifier from
those skills in half, rather than fully negating it.
Shotguns are very cool but they sadly do not perform that well.
Shotguns are overshadowed by all other weapon types (SMGs, ARs and even
some pistols), and the only viable ammunition that makes shotguns viable
(slugs) is incredibly expensive to get as an antag.
This PR adds a new ammunition box to the uplink that includes 8 slugs
for only 2 TC, and also reduces the TC cost of the assault shotgun's
magazines to more reasonable amounts.
---------
Co-authored-by: bovvv <kavbest11@gmail.com>
A continuation of https://github.com/Aurorastation/Aurora.3/pull/22354
with permission from the original author.
The primary changes between the two are more things being visible with
no skill as well as some changes to how arterial bleedings are shown.
Also a custom pain message if you touch yourself somewhere that hurts,
like with broken bones.
Original PR description:
> This PR provides a relatively simple first implementation for the
Anatomy skill, which I have intended to be more broadly useful for any
character, beyond just medical characters. The first use of Anatomy
skill is for when examining your own injuries, your ranks in the skill
determine both the time it takes to self-examine, as well as the quality
of the information provided. Previously the injury check was
instantaneous, now it takes 5 seconds to perform at its baseline, and
all the way down to 1.25 seconds at maximum rank in the skill.
>
> No ranks in Anatomy:
> <img width="368" height="198" alt="image"
src="https://github.com/user-attachments/assets/4aeff600-caf2-4bcb-9b58-a1ce236d8405"
/>
> High ranks in Anatomy:
> <img width="621" height="216" alt="image"
src="https://github.com/user-attachments/assets/807f0a2a-14b1-4c59-97b0-b2d5aa0f7268"
/>
---------
Signed-off-by: VMSolidus <evilexecutive@gmail.com>
Signed-off-by: Casper3667 <8396443+Casper3667@users.noreply.github.com>
Co-authored-by: VMSolidus <evilexecutive@gmail.com>
Co-authored-by: Matt Atlas <mattiathebest2000@hotmail.it>
Refactoring the entire destroy proc path from Mob Human all the way down
to Atom while trying to find the causes for the damn mob human hard
deletes. This PR comprehensively reorganizes every single stray
snowflake var used by /atom/ all the way to /mob/living/carbon/human,
and makes sure that every var that COULD store a reference, is now
cleared during the entirety of the Mob Destroy() parent hierarchy.
This may very well be the end of the lag war.
In total, I've hunted down and cleared 39 hanging references between
/atom and /mob/living/carbon/human
---------
Signed-off-by: VMSolidus <evilexecutive@gmail.com>
Fixes health analyzers NOT mounted on hardsuits (handheld, observer) not
displaying TGUI on scan due to casting runtime. Fixes unrelated bug with
self-scanning not playing nice.
Adds clothing item versions of some existing shirts that were previously
only in the undershirt selection next to underwear.
Mostly graphic t-shirts.
Also adds a cropped tank top, modified from the existing tank top.
Various fixes and cleanups for hardsuits following the rework.
changes:
- bugfix: "Adds additional safety checks to hardsuit deployment logic to
better handle boot checks."
- bugfix: "Hardsuit Health Analyzer module works again."
- rscadd: "Adds 'Retract All Parts' verb for hardsuits."
- rscdel: "Removes Vitals Scanner module; hardsuits which had this
module by default have had it replaced with the Health Analzyer module."
- rscdel: "Removes hardsuit Maneuvering Jets onmob sprites."
- bugfix: "Synthetic external armour now deteriorates with the actual
damage taken. Previously, the calculation led to the armour instead
taking less damage the less it was blocked."
- bugfix: "Fixing the synthetic endoskeleton now fixes the permanent
paincrit effect on IPCs. This was caused by the self preservation status
being toggled when the endoskeleton was destroyed, but it was never
reset when the endoskeleton was fixed."
- bugfix: "Species components are now added and removed properly,
meaning you can switch from IPC to human and back and forth as a
mercenary once more."
- bugfix: "The Bishop internal PDA now uses your actual ID on your
person as its own ID."
- bugfix: "Fixed the endoskeleton welder repair surgery. You can do this
surgery by using a welder while aiming chest and after having opened the
chest fully."
- bugfix: "The endoskeleton now takes damage from EMPs as well. This
should make them A LOT more effective against IPCs."
- qol: "The posibrain will now show up in diagnostics."
- rscadd: "Posibrains can now be destroyed by hitting them. This will
completely kill the IPC's consciousness!"
Co-authored-by: Matt Atlas <liermattia@gmail.com>
fixes#22249
- bugfix: "Leaning on the north side of a wall now correctly hides your
lower body behind the wall instead of drawing you on top of it."
- code_imp: "Adds a COMSIG_MOB_LYING_DOWN signal, sent when a mob
transitions into lying down."
Cutout was previously only cutting out the base because KEEP_TOGETHER
wasn't being applied. Adds the flag on lean, removes it on stop_lean.
Animated the cutout while here. Applies a mask to the whole sprite, then
animates it upwards in step with the lean itself, so the feet
progressively disappear as they should.
https://github.com/user-attachments/assets/fec0a852-247a-4570-a6d1-60dda6fe6a3c
This PR fixes a bunch of skills related bugs, the biggest of which were
the result of the system being overly trusting of the database, when in
reality due to a bunch of unpredictable edge cases, the database is not
guaranteed to always have what I think it has. To fix these bugs, I've
had to slightly refactor how skills are generated on player characters
and antagonists, such that the burden of proof for skills is with the
Skills Subsystem rather than the Database.
Skills generated for a fresh character that has NO preferences saved
(Worst case scenario):
<img width="1491" height="849" alt="image"
src="https://github.com/user-attachments/assets/683fb538-106a-4679-8e2a-30dd45f456a1"
/>
Promoting that same character to Antagonist now increases certain skills
to a minimum baseline:
<img width="1315" height="830" alt="image"
src="https://github.com/user-attachments/assets/94bcc69e-cbbe-45fa-956e-f53b7f5d2779"
/>
By Mel's request, Bluespace Technicians spawn with all skills fully
maxed out for debugging purposes:
<img width="1909" height="985" alt="image"
src="https://github.com/user-attachments/assets/db4f3f65-3d87-47fc-907e-c68eae6d4cdb"
/>
**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>
The lag from the event yesterday was because this triggered without
getting valid lists because Matt didn't add them to the config yet.
Probably won't happen again, but safety never hurts.
EDIT: This also fixes a bug where an extra broadcast echo would generate
for whatever reason.
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.
```
- refactor: "Updates the Computer Fabricator to TGUI"
- refactor: "Updates the Instruments to TGUI"
- refactor: "Updates the Geo Scanner to TGUI"
- refactor: "Updates the Stacking Machine to TGUI"
- refactor: "Updates the Robotics Console to TGUI"
- refactor: "Updates the Requests Console to TGUI"
- refactor: "Updates the Synthesizer/Instrument main panel to TGUI"
- refactor: "Updates the Nuclear Bomb control panel to TGUI"
- rscadd: "Requests Console messages are now typed (Assistance Request, Supply Request, Information, Reply); the type is shown in the recipient's log, audible alert, and PDA notification."
- rscadd: "Reconstructs the Synthesizer's Virtual Environment Editor (was broken since added — its NanoUI template never existed). The Custom environment preset that depends on it is gated behind a new musical_config.can_use_custom flag (default off, matching prior behavior)."
- bugfix: "Fixes the Autolathe UI re-opening after every print job."
- bugfix: "Fixes the Song Editor's currently-playing line indicator not advancing during playback."
- bugfix: "Fixes a class of bugs where TGUI windows for the Air Alarm, Portable Turret, Mining Vendor, Mineral Processor, Tank Dispenser, Helm Console, all Chemistry machines, and Suit Cycler would force themselves back open after every action, even when the player had closed them."
- bugfix: "Fixes the spatial sound system silently dropping every sound that used the 'None' (-1) environment id or a 23-element custom environment list. The validator was rejecting both as invalid, so synthesizer notes played with Custom or None mode produced no audible output at all."
- admin: "Adds two requests consoles and two fax machines to the bridge on the runtime test map."
```
Claude Opus 4.7 has been used during the creation of this PR
---------
Signed-off-by: Arrow768 <1331699+Arrow768@users.noreply.github.com>
Co-authored-by: Werner <Arrow768@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
Co-authored-by: Batrachophreno <Batrochophreno@gmail.com>
This PR extends the functionality of the Morale Component to also
provide a UI element. Which is dynamically controlled by the component.
Players can click on it to view their current morale modifiers, and what
percentage effect said modifiers are currently providing. Morale is not
actually new, the mechanic has been on the server for over a month now,
though the players had no way of knowing it was there unless they
closely follow along with the github history.
I have extensively tested this over the course of 6 hours of work, and
have attached video proof of said testing.
https://github.com/user-attachments/assets/c0d3ca3a-0a52-46e1-8e46-9d1e5ef46e4f
### Asset Licenses
The following assets that **have not** been created by myself are
included in this PR:
| Path | Original Author | License |
| icons/mob/screen/morale_ui.dmi |
https://github.com/BeeStation/NSV13/commit/b6b1e2bf2cc60455851317d8e82cca8716d9dac1
| CC-BY-SA-3.0 |
First PR. Adds mechanical representation of faint Hivenet echoes for
Vaurcae. Like the lore, only they can pick them up.
It's designed for a lot of variety so as to trigger every 3-5 minutes
without boring players. All together, there's 500 different echoes.
There are three categories of broadcasts (gossip, happy, tense) split
between "starter" and "response" messages to imitate two vaurcae
talking. These make up 380/500.
Gossip can occasionally have a singular, joined echo to represent only a
single vaurcae talking for extra variety. Happy is less common and tense
is the rarest, implying possible danger.
There's also echoes of projections, on a separate 4-8m timer with 120
different sensations for the remaining echoes.
Hivenet should never feel empty again and echoes extend past being
fluff, they can prompt roleplay since they'd ICly be just as valid as an
in-round broadcast. Echoes are automatically disabled in the Lemurian
Sea to represent the Fog there and can be manually toggled by Admins &
Storytellers for gimmicks or events.
---------
Signed-off-by: runecap <43975590+runecap@users.noreply.github.com>
Co-authored-by: VMSolidus <evilexecutive@gmail.com>
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"
/>
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>
This PR adds a new Combat skill largely designed for non-combat
characters called Tenacity. It's fairly analagous to traits like Will to
Live from Shadowrun. Ranks in this skill make a character take a little
bit longer to "bleed out in crit", but do nothing to actually change how
hard they are to take down in combat. Effectively this means that ranks
put in this skill give you a little bit more of a buffer of time to be
picked up by a paramedic and rescued.
For actual combat characters it's very undesireable since it does
nothing to actually help win you fights, so this skill is largely more
to serve as an option for characters outside of security who don't
actually want to spend any points on direct combat capabilities. All of
the numerical modifiers from the skill are rather small, and make use of
pre-existing signal hooks that I've made previously for Brainmed to
allow component based modifiers to organ code.
<img width="1069" height="243" alt="image"
src="https://github.com/user-attachments/assets/92d6c19a-a0f2-4cc8-b490-df4538fd2b3d"
/>
Professional level in the Electrical Engineering skill now reveals (non
randomized) wire functions to mobs. Basically just takes the existing
functionality applied to having blueprints, and lets them see this
without needing said blueprints.
Inspired by a similar mechanic present on Baystation.
Also added a tweak to display 'None' for dud wires instead of leaving
the field blank, because empty field made me think there was a bug.
Silence,
Violence,
Adds the Outer Eye voidsuit, and gear loadouts featuring it for antags
to use. Outer Eyes enforcers favour Xanan weapons, reflected in the
loadout. While human only for now, I hope to add variants for a few
species shortly.
Also adjusts the typo which meant the exclusionists / hoplan gear in the
uplink didn't work since it was right there. Sorry for the two in one, I
knew if I left it until after this merged I would forget.
SPRITES ARE BY THE WONDERFUL @ElorgRHG!
---------
Signed-off-by: Fyni <itsfyni@gmail.com>
# Summary
This PR adds persistent supply packages and a specialized charge card
for lore arcs.
Both can only be created using admin permissions and are not intended
for general availability.
## Changes
- Added a new package type, persistent supplies.
- Abstracted existing orion deliveries for shared code.
- Added a new persistent charge card variant.
- Added exceptions and specific logging for new card variant.
## Notes
Depends on PR #22367. Specific merge order not relevant.
Icons by @Fyniiy.
Relevant information for the current arc can be found on the forum
thread [Operation Deep
Dive](https://forums.aurorastation.org/topic/22921-all-crew-thread-operation-deep-dive/).
---------
Signed-off-by: FabianK3 <21039694+FabianK3@users.noreply.github.com>
Co-authored-by: Copilot <copilot@github.com>
Co-authored-by: SleepyGemmy <99297919+SleepyGemmy@users.noreply.github.com>
This PR fixes a few bugs that were recently reported both by players and
by our new bug monitoring system. An AI agent (specifically Gemini 3)
was used to do some of the code diving process, while the fixes were
tested and verified myself manually. Yes I have actually verified the
fixes in this PR in testing.
The swap to Calculus methods for organ EMP was done by me, no AI. I love
Calculus to much to let a bot do it for me. In particular my fix to
organ EMP was to make it so that EMP damage is handled directly as
"number of fractional seconds the EMP will last", and that they tick
down cleanly per second. I did this because after fixing mechanical
organs not doing ANY EMP effects at all, I tested them and discovered
that the EMP effects were extremely underwhelming. They were like, "Your
screen only briefly filling with static for like 2 ticks", and "your
heart skips a single beat", which was lame and nonthreatening.
Significantly more fun is making the static last for N number of
seconds, and for the Heart to fail to pump for N number of seconds (very
life threatening!)
The new organ EMP handling vars are per-organ rather than a define, so
if we want there to be different EMP times for hearts vs eyes, that's
totally doable. Just make the heart have a larger recovery rate, or the
eyes have a smaller recovery rate.
---------
Signed-off-by: VMSolidus <evilexecutive@gmail.com>
Co-authored-by: Arrow768 <1331699+Arrow768@users.noreply.github.com>
- qol: "Reduced the crate fee when making operation orders."
- bugfix: "Fixed the wording in some of the operation programs."
- bugfix: "Fixed the delivery app showing deliveries it shouldn't."
- bugfix: "The cargo control program now properly display status
messages."
- balance: "Supplier fee was set to 0 for all current suppliers,
eliminating the 20 credit charge per supplier."
- balance: "The operations order handling fee has been turned into a
percentage charge instead, and reduced to 5% by default instead of a
flat 20 credits."
- rscadd: "It is now possible to reject orders that have been approved
but not shipped or paid for."
Skills being based on "Hard Requirements" absolutely suck, and I wasn't
happy with the surgery code being essentially hardcoded around them. So
this PR refactors surgery to use soft requirement checks, based on
modifiers to the success rate probability. Surgeries still state what
skills (if any) they require and at what level, but rather than blocking
the surgery, it instead imposes a penalty(or bonus) on the success
chance based on how much the user's surgical skill differs from the
required level. This actually stacks with the penalties for "non ideal
tools", so if you're completely unskilled in surgery and you attempt to
make an incision with a shard of glass, you're going to have an
extremely hard time.
Individual surgeries also can define how much the success rate is
modified by "skill diff", with the more advanced "surgeon exclusive"
surgeries having extremely large potential modifiers.
I have also added a signal based check for modifiers, which the Morale
component now hooks into. This can also allow for other components,
implants, drugs, etc to modify the surgery chances in the future.
I have manually tested this PR and verified by examining debug
breakpoints in VSCode that the system correctly applies its modifiers.
Fixes projectiles always hitting.
When a projectile rolled a 'miss', and returned Null as it's bodypart to
hit, it was being defaulted to hit the torso.
This meant that a low accuracy weapon, was not more likely to miss than
a high accuracy one.
In fact, low accuracy was a significant buff, because it made your shots
scatter to random limbs 30% of the time.
There was also no reason ever to aim for the torso, shooting the head or
hands was mechanically correct.
This is why mercs one handing the STS in burst mode were breaking so
many hands.
<img width="386" height="226" alt="image"
src="https://github.com/user-attachments/assets/a0c2992f-ca5b-41cb-84c9-c6a3f74e09d0"
/>
This is the table of the chance to hit the torso, after this fix.
Point blank shots (range 1 and 2) always hit.
Almost all lasers have 2 accuracy (when wielded, if they are 2 handed)
Almost all ballistics have 1 accuracy (likewise when wielded, if
possible)
Snipers have up to 4 accuracy. (When scoped)
Burst fire imposes an accuracy malus, the STS-35 is the heaviest malus
outside of admin spawn guns like the L6 SAW.
burst=5, burst_accuracy=list(1,0,0,-1,-1)
This means the first shot of the burst is accuracy 1, then it falls off.
If you aim for a different body part, these are the base chances to
miss:
BP_HEAD = 70,
BP_CHEST = 10,
BP_GROIN = 20,
BP_L_LEG = 40,
BP_R_LEG = 40,
BP_L_ARM = 40,
BP_R_ARM = 40,
BP_L_HAND = 60,
BP_R_HAND = 60,
BP_L_FOOT = 60,
BP_R_FOOT = 60
There is a minimum 30% chance to hit, regardless of any modifiers.
- bugfix: "Fixed the operations status display screens not showing the
elevator status."
- bugfix: "Fixed the cargo delivery program not displaying the account
that was used to pay for an order with."
- bugfix: "Fixed the cargo delivery program not displaying shipped
orders regardless of payment status."
- bugfix: "Fixed the ghostly ambience on the operations lift and the
lift near security."
- bugfix: "The operations program now displays the elevator time in
seconds instead of minutes, given the minutes would always show 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>