I was calling get_ranged_target_turf which doesn't handle the corners of
the map very well,
As I was already using locate(), it now just gets the turf offset in the
same proc.
Ghosts can now jump to either the target of the shot, or the place the
shot actually hit. (In the event the target was on the other side of the
ship)
<img width="1008" height="77" alt="image"
src="https://github.com/user-attachments/assets/a295ba84-d479-4b4b-9197-1bb136882c83"
/>
On one fateful day when I was playing security I spotted an Idris unit
wearing a white coat. It was all great and good until it turned and the
white changed from white to an ugly grey. This could not stand, someone
should do something with that awful sprite.
Then I remembered I'm a spriter, so here we go.
> - imageadd: "Resprited Idris Unit coats. Brown Idris Unit coats are
now teal."
NEW sprites on the top, old (current) on the bottom.
<details>
<summary>Black Idris Unit coats: </summary>
<img width="2048" height="1024" alt="black coats"
src="https://github.com/user-attachments/assets/1afb2d20-93c4-46fd-a800-13ef20631e74"
/>
</details>
<details>
<summary>White Idris Unit coats: </summary>
<img width="2048" height="1024" alt="white coats"
src="https://github.com/user-attachments/assets/ddbe6c03-42f3-49bd-b780-82344161f969"
/>
</details>
Brown Idris Unit coats were redone to be teal to comply with the Idris
palette.
<details>
<summary>Teal Idris Unit coats: </summary>
<img width="2048" height="1024" alt="teal coats"
src="https://github.com/user-attachments/assets/fb1b3824-9bf0-44ff-a519-a92497590eee"
/>
</details>
<hr>
This is how the coats looked at the time this PR was posted.
<details>
<summary>First iteration black Idris Unit coats: </summary>
<img width="3072" height="1536" alt="black Idris unit coat"
src="https://github.com/user-attachments/assets/2f4ad7d8-617f-4ef9-aef0-618b690abdb1"
/>
</details>
<details>
<summary>First iteration white Idris Unit coats: </summary>
<img width="3072" height="1536" alt="white Idris unit coat"
src="https://github.com/user-attachments/assets/37b06fb7-a6bd-4577-a372-91892ae6f518"
/>
</details>
<details>
<summary>First iteration teal Idris Unit coats: </summary>
<img width="3072" height="1536" alt="teal Idris unit coat"
src="https://github.com/user-attachments/assets/d739db17-dc0a-4083-935f-d6651e65c5b0"
/>
</details>
<hr>
This PR is NOT related to me making an IPC whitelist application. Trust
me.
Have an Idris day!
Part 3 of the Mob Destroy Refactor, this time going through the entire
list of every ref stored up to a mob/human, and (attempting) to verify
and cleanup every possible circular ref. This PR also fixes some
mistakes made with cleaning up UI elements, namely that tgui's really
don't like it when you qdel them, and screen objects also weren't always
clearing their own references if Qdel'ed directly. There were several
niche situations too where circle refs might be retained by a mob. I
also found an issue where static lights were only cleaned up on
/atom/movable/ but actually existed farther up the chain on /atom. I
don't know if any /atoms that aren't /atom/movable ever get static
lights, but the fact that they can be needs to be correctly accounted
for.
I can't possibly have gotten all of them, but this is every single one I
could find after 3 hours of work.
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.
I will steal the description of this PR:
https://github.com/Aurorastation/Aurora.3/pull/21436 almost 1:1.
If I have not missed anything, which I might have, then all Idris
clothing have been mildly resprited or otherwise repaletted.
> - imageadd: "Resprited or otherwise repaletted most if not all Idris
Incorporated, from job uniforms to suits."
Zeng-Hu and Idris were always my favorite corporations on Aurora, yet
both had their sprites be rather unimpressive, Zeng-Hu with its diluted
pink, and Idris with their big teal blob. So this PR attempts to
alleviate that. Also introduces black to Idris clothing more with one
alternate security uniform, one cap and one beret
Images, as always, in the details below, however, due to large amount of
sprites I will not show them all here, just a few will be able to convey
what was changed.
NEW sprites on the top, old (current) on the bottom.
<details>
<summary>Security Uniforms: </summary>
<img width="3072" height="1024" alt="security"
src="https://github.com/user-attachments/assets/2570b8ac-e46d-4ab3-b4a4-5b1dc9633a46"
/>
</details>
<details>
<summary>Service Uniforms: </summary>
<img width="3072" height="1024" alt="service"
src="https://github.com/user-attachments/assets/ef4bca8f-5f27-49a5-b829-a0ffae5e1fef"
/>
</details>
<details>
<summary>Misc. Stuff (just how the black beret now looks): </summary>
<img width="1024" height="1024" alt="beret"
src="https://github.com/user-attachments/assets/72dc6d24-4c45-436d-900b-793bea05b463"
/>
</details>
My opinion about people not putting images in their Aurora PRs remains
unchanged. This PR is also my foot in the door for other corp resprites,
with my bases now covered in security, service, medical and science.
Have an Idris day!
Stickers can no longer be attached to disposal machinery or conveyors,
to prevent further issues with throwing them there.
The disposal outlet sprite was set to face the wrong direction when
expelling items, for two of its directions. This was fixed.
The disposal UI constantly reopening itself was fixed.
And a set of disposal systems were added to runtime for easier
debugging.
<img width="344" height="385" alt="image"
src="https://github.com/user-attachments/assets/ff93f3e9-bfa7-480c-9d6b-c501b02ca51a"
/>
Every time you print an item in the protolathe or circuit printer, it
scrolls back up to the top.
Printing multiple items is hell, especially as there is no bulk print
option.
This makes the UI only update if there isn't enough material to finish a
print.
This isn't the ideal solution, because the Material Amount doesn't
update unless you click the R&D console again.
<img width="318" height="99" alt="image"
src="https://github.com/user-attachments/assets/02e07ae6-b9ad-4538-af80-3a11b8778459"
/>
However the material amount doesn't even give a readout of what the
materials are, so this value is useless anyway.
Also means buttons won't be greyed out as the material to print them
runs out, but this is fine because if you press a button without enough
material to print it, the UI will immediately update and grey it out.
This does scroll you up to the top, but it's much better than having it
happen EVERY time.
Best solution would be to update it to TGUI, but I just tried that and
gave up almost immediately. So this is a stopgap.
This PR fixes the intent-based lights and emissives on silicons
(borgs/drones). It also adds an emissive to the combat shielding robot
module, since it seems logical for that module to have it, and adds a
slight emissive to robots in emergency power mode to differentiate
between the out-of-power and disabled states.
Due to issues with tables in particular, a drone's emissives will be
disabled when it hides to prevent through-table emissive displays.
Robots with various states below:
Top: dead/out of power
Bottom: normal/hidden drone/unhidden drone/milborg with shield
<img width="391" height="149" alt="image"
src="https://github.com/user-attachments/assets/87da7210-4670-4fc2-8d4a-b53f1f2aec49"
/>
As title. It now fills that little empty area that is currently
maintenance. Intended to be hyper-visible, given how important it is for
everyone to know where the teleporter is given its present importance
for expeditions and odysseys.
Its airlock can be bolted open, if it's desirable to keep the teleporter
open in the absence of active staffing.
Ideally we wouldn't be so reliant on teleporting people around, but for
now it deserves some visibility.
<img width="288" height="256" alt="image"
src="https://github.com/user-attachments/assets/591765cc-d1d7-4464-bec9-f48503740360"
/>
The early return caused the tray to lose the harvest status without
giving anything. This fixes that.
Who thought it was a good idea to split the harvest status from the
plant it is harvested from?
Makes adjustments to the OM office in an effort to bring it closer in
line to what is expected from the other Command offices.
- Adds a chair for guests to face the OM, rather than being forced to
awkwardly stand or sit far away at a comfy chair.
- Gives the OM the comfy command chair, rather than a generic roller
chair.
- Replaces the drinks machine with a fax machine.
- Where the fax machine once was, buttons for controlling the: Interior
door, exterior door, hangar lockdown, department lockdown, and window
tint.
- The table and comfy chairs are shifted down a tile, the disposals
moved to the end of the table, and a coffee machine added.
- Fixed the disposals unit using an "Up" disposal tube and not a trunk.
<img width="724" height="543" alt="image"
src="https://github.com/user-attachments/assets/83729a66-fcbf-4b0c-b207-3636a6bb5f89"
/>
changes:
- balance: "Makes constructs immune to pain damage. It used to deal
damage at 1/2 value."
I watched a cult juggernaut get two shot by stinger grenades, these are
PVP mobs, they shouldn't take pain as damage.
Adds a Ceres Lance beret, armor, and new uniform in preparation for
future CL events.
Also modifies the Ceres Lance crate to contain these items and carry a
more diverse weapon mix for merc rounds and ease of spawning during
event rounds..
---------
Signed-off-by: TheStryker <thestryker289@gmail.com>
Co-authored-by: Kano <89972582+kano-dot@users.noreply.github.com>
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
changes:
- bugfix: "Restores the Modular Computer access cable header button for
connecting to IPCs and machinery."
- bugfix: "Fixes display issues in the Robotics interface's
<collapsible> elements."
- bugfix: "Fixes in-chat feedback text provided by the Cyborg Analyzer
(organ name and status now both inline)."
- bugfix: "Crew Manifest PDA app now filters out off-ship personnel."
- bugfix: "Fixes Autolathe TGUI appending search- and category- filtered
recipes instead of recomputing the list with those filters."
- bugfix: "Fixes runtime when ghost opens dedicated camera console UI."
- code_imp: "Update some defs referencing 'supply' department to
'operations'."
- refactor: "Standardizes all interface search bars to use the native
'SearchBar' component."
- refactor: "AtmosAlarmControl interface now correctly auto-sorts alarms
by alert status."
Added an on_hit signal, instead of using the target in post_fire.
This fixes cheesing upgrades by standing behind a wall and shooting at a
target you will never hit.
Moved improvement cap from a define, onto the base object.
This fixes some components continuing to eat improvement potential, even
when they are fully upgraded.
Fixes Ions dealing damage in addition to EMPing their target. Also
reduced the max number of shots when an Ion emitter is fitted.
Fills in a lot of the blanks in the area icon states on the Horizon with
new sprites. Looks neater in SDMM.
Adds a new exterior/no_shields area, which is exclusively used for the
wings and around the starboard thrusters, around which shields will not
generate. This is pulled off in what I hope is a non-demanding way. This
is used to resolve that funny issue with starboard propulsion's wide
arcing shield, and to force shields on D3 to be taut to the walls.
The regular exterior area is retained wherever we want there to be
shields around EVA catwalks.
<img width="1080" height="1080" alt="image"
src="https://github.com/user-attachments/assets/4826b32f-34e2-44ab-b0be-f9fee9622fc8"
/>
<img width="1056" height="896" alt="image"
src="https://github.com/user-attachments/assets/cde72fa6-41eb-4c2a-b843-9959359ca505"
/>
ci/cd script to shellcheck .sh files and make sure they're executable as
part of cicd so it fails loud with the specific problem if Permissions
Issue 2 The Revengeance happens again
This allows IPC suit coolers to fit inside of bags and be more easily
used as a first response tool for IPCs who have had their coolers shot
out, whether it be an IPC keeping one in their bag for
self-stabilisation or a machinist lugging one around when responding to
a call.
The battery that spawns in suit coolers was reduced to a heavy-duty
power cell (from 30,000 power storage to 15,000), and the maximum
discharge rate was increased by 85%.
- When cooling a cooler-less IPC, it lasts roooghly 10 minutes, which is
still plenty long enough for 90% of incidents and only becomes
problematic on expeditions.
- Under more ordinary EVA conditions, it still lasts ages.
Upgrading power cells is incredibly worthwhile, x2ing (high) or x4ing
(super) or x6ing (hyper) these durations.
changes:
- bugfix: "Fixes LateJoin and Manifest interfaces not displaying
department colors by creating a shared component for both interfaces to
use."
- bugfix: "Fixes the Manifest interface not displaying colors for crew
status."
- bugfix: "Fixes status composer not allowing AIs to view TGUIs."
- bugfix: "Fixes inline icons in alt-click atom viewer."
- bugfix: "Fixes PDA light toggle icon not appearing."
- bugfix: "Fixes autolathe category view not filtering items."
---------
Signed-off-by: Batrachophreno <Batrochophreno@gmail.com>
This PR will remain open/WIP for a short period of time for me to add
more bugfixes to it as they are reported.
changes:
- bugfix: "Fixes LateJoin and Manifest interfaces not displaying
department colors by creating a shared component for both interfaces to
use."
- bugfix: "Fixes the Manifest interface not displaying colors for crew
status."
changes:
- bugfix: "Fixes TGUI windows having their dimensions provided from
datum init being overridden."
- bugfix: "Increases say window width."
- bugfix: "Re-enables spellcheck in tgui-say."
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>
# Summary
This PR updates the CI check running on labels like 'changes required'.
## Changes
- Refactors DNM CI check to run on merge queue events only instead of
open PRs to avoid confusion on the state of the PR code-wise.
This is an iteration of #22436
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>
This fixes a math error that caused sufficiently high firearms skill to
wrap back around to less accurate guns. The fix is pretty simple, if the
calculated dispersion (in degrees) is a negative number, it instead
becomes 0. The dispersion math downstream of this effectively treats
dispersion as a magnitude, meaning -15 degrees of dispersion was the
same thing as 15 degrees, when the intended interaction was "Having -15
degrees of dispersion offsets the penalty from less accurate guns".
Makes ship combat significantly more destructive (and a bit deadlier),
especially with non-explosive projectiles.
**Additions:**
- A shell that penetrates a solid (dense) structure will cause spalling.
This spall does 2-30 damage, depending on range and has a high embed
chance. These embedded chunks are large enough to be ripped out by hand.
(But you probably shouldn't). The pilot's suit has 30 ballistic armor,
so a prepared bridge crew can survive a lot of spall.
- Adds a gun that shoots any ship weapon that admins can spawn. Useful
for testing, or for adminbus where they don't want to have to spawn a
whole overmap ship.
- Made several structures destructible, vending machines, computer
frames, grilles (these were just bugged) and watertanks (and their
children). These structures could just block infinite shots and were
common enough to serve as effective armor for the horizon. These now
spawn shrapnel (of their material if it's set), in addition to sheets of
steel when destroyed.
- Added support for negative maim chance. This allows chosen projectiles
to be prevented from decapitating. No more accidentally gibbing the
bridge crew's heads. (Unless they get hit with something really really
big).
**Balance:**
- All non-explosive anti ship rounds got significant buffs. Typically
2-3x Anti-Material numbers.
- Armour piercing anti-ship rounds got massively increased penetration
stats. Typically 4-8 from 1-2.
- Doors now get destroyed in less hits, if they are hit by anti-material
projectiles. Hits to destroy -= Antimaterial / 2
- Francisca frag shells now shoot less fragments but deal more damage.
394 projectiles for every shot was a bit laggy, now it's only 280.
**Shields:**
Shields now take more power. 13-14 megawatts for a 10 strength shield.
Just inside the ship's generation capacity with both the INDRA and
Supermatter running.
Instead of deleting any projectile they are hit by, shields now have
different failure modes.
- Firstly, a piercing projectile has it's penetration reduced by the
shield strength. Eg A shot that would go through 10 walls, only
penetrates 4 after going through a 6 strength shield.
- Secondly, a projectile has it's damage multiplied by 1 - shield
strength / 10, then has shield strength subtracted from it's damage. Eg.
A damage 100 projectile, hitting a 5 strength shield, has it's damaged
reduced to 50, (100 * 0.5), then to 45. (50-5)
- Thirdly, an explosive projectile (that does not penetrate per the
first step) does not explode, but instead deals it's full damage to the
shield.
Hits to the shield now also damage the field itself, not just the shield
tile. As such, a very big hit on the shield can bring the whole thing
down, requiring an engineer to reset it.
Shields can now be upgraded with research components. Additionally,
shield generators can now support more than one capacitor. The
roundstart capacitor on the Horizon is only good enough to support a 6
strength shield.
The upgrades increase efficiency, strength loss over time and charge
speed.
**Overmap Targetting**
Previously, shells would spawn within 20 tiles of their target and aim
directly forwards. This was bugged for shots with burst, which would
instead all aim inwards and mostly miss. This is the reason the Grauwolf
(in addition to the explosion bug below) and Fransisca felt so useless,
only one of every shell in a burst would hit.
Shots now spawn at the map edge, based on the orientation of the
projectile and ship. Diagonals are now accounted for.
Shots are then aimed directly at the target selected on the console,
with 3 degrees of dispersion.
**Bugfixes:**
- Fixes lots of explosions that didn't pass a turf to the explosions
subsystem. This caused the explosion not to happen if the thing hit got
qdeled before the subsystem could get the turf to spawn the explosion
on.
- Embedded shrapnel no longer gets the initial projectile name, this
prevents it getting named shrapnelshrapnel.
- Fixes a bunch of projectile piercing bugs, mostly with grilles and
windows. Shots now go past window frames without hitting them.
- Fixes shields not having a click delay when attacked.
---------
Signed-off-by: FenodyreeAv <fenodyree.av@gmail.com>
Co-authored-by: Matt Atlas <mattiathebest2000@hotmail.it>
switches out the Reade accent icon for a new one.
instead of random purple splotches, we have the light blue gas giant
<img width="32" height="10" alt="reade"
src="https://github.com/user-attachments/assets/7d770100-7531-40d9-89d7-08c7b9e434b4"
/>
### Asset Licenses
The following assets that **have not** been created by myself are
included in this PR:
| Path | Original Author | License |
| --- | --- | --- |
| icons/accent_tags.dmi _reade_ | louiseisnthome | CC0 |
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>
Fixes the easy stuff from: #22545
The only real balance change, dropped improvement per variable by 50%.
Should have been like this from the start, but I mistakenly assumed no
one would even reach close to the cap.
Makes repairs with welders go through .use_tool, fixes not needing
welding goggles and adds nice sparky visuals.
Much more robust handling of improvable variables, negatives don't break
improvement assignment now.
Fixes improvement cap, missed a *100 to convert from decimal to
percentage.
Fixes improvement potential being assigned to things that couldn't be
upgraded.
Fixes the Gatling mod upgrading fire delay (pretty useless on something
with a 3 second warmup)
Fixes the weapon analyzer print out showing completely incorrect
numbers.
Fixes the weapon analyzer eating your combitool and being
indestructible.
Gives some more feedback on why things can and can't be upgraded.
format_emote has to come first, otherwise it will re-encode the markup
into literals. however, the langchat_message does not want to have
format_emote called on it. ergo, we have to either process the markup
twice, once for each path, or we have to accept that one of the two will
not support bold/italics. the perf from doing it twice is completely
inconsequential
<img width="299" height="150" alt="image"
src="https://github.com/user-attachments/assets/4a34a0ae-6895-4275-be53-586820fd5b7d"
/>
- bugfix: "Saved chat logs are now written with the correct text/html
file type."
- bugfix: "Emote markup like *bold* and /italics/ once again renders in
chat instead of showing literal tags."
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>
ran tests on a loop for like 2 hours while i was doin bits and had no
failures. granted this one will immediately fail for some other
indiscernible reason im sure
1. generate_landing() creates a clearing landmark which has a
late_initialize() to qdel anything it overlaps with. usually it doesn't
overlap with things, but if there's a failure to find an appropriate
landing site, it will just pop it down anywhere. this means it happens
significantly more on more compact sites, like the listening outpost
which seems to fail frequently
2. test runs before gc tick so qdelled stuff has a null location and is
still found `in world`
3. tests loop for `door in world` and find doors at a null location,
which obviously has a null turf, so the test fails
4. in the firedoor test this causes a runtime too because of a missing
assertion
there are probably more reasons map tests fail given they've been
failing for years but this seems to fix a major cause of them
- code_imp: "Door tests skip qdeleted doors, so they should no longer
intermittently fail when landing zone generation clears a ruin."
fixes#22289
- bugfix: "Colour chips in character setup are correctly coloured
again."
this only worked previously because byond's ie version was so old it
didn't care, afaik
also the circles in the loadout i just didnt get a picture
<img width="336" height="304" alt="image"
src="https://github.com/user-attachments/assets/f43912d6-22eb-452a-bac1-fff100a2f7b0"
/>