* Please describe the intent of your changes in a clear fashion.
This PR addresses the `Cannot read null.stat_panel` error occurring in
`SSstatpanels/fire()`.
**Root Cause:**
The primary cause was a race condition during client login. A `client`
object was added to `GLOB.clients` in `client/Login()` before its
`stat_panel` member had been fully initialized. This allowed the
`SSstatpanels/fire()` subsystem, which iterates over `GLOB.clients`, to
attempt to access `target.stat_panel.is_ready()` on a `null`
`stat_panel`, leading to a runtime error. Recent changes increasing the
frequency of `stat_panel` updates exacerbated this issue.
**Solution:**
1. **Reordered Client Initialization:** In
`code/modules/client/client_procs.dm`, the line `GLOB.clients += src`
has been moved to occur *after* `stat_panel = new(src, "statbrowser")`
and `stat_panel.subscribe(...)`. This ensures that a client is only
added to the global list once its `stat_panel` is properly instantiated,
eliminating the race condition.
2. **Defensive Null Checks:** Additional null checks for `stat_panel`
have been added in `code/controllers/subsystems/statpanel.dm`:
* In `fire()`, the condition `!target.stat_panel.is_ready()` was updated
to `!target.stat_panel || !target.stat_panel.is_ready()`.
* In `refresh_client_obj_view()`, an early return
`if(!refresh.stat_panel) return` was added.
These defensive checks provide robustness against any future reordering
issues or unexpected scenarios where `stat_panel` might be null.
* 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-1M4](https://aurorastation.sentry.io/issues/7547575486/?seerDrawer=true)
---------
Co-authored-by: VMSolidus <evilexecutive@gmail.com>
* 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>
# Summary
This PR adds a new verb to ping the storyteller in Odyssey rounds.
## Info
In the OOC tab a new verb can be found during Odyssey rounds allowing
players to notify the storyteller.
Given a required message, the storyteller will get a notification in
their chat with the player given message and a JMP button to quickly
move to the player.
The verb has a one minute cooldown.
Again uploaded on the behalf of The_Ill_Fated.
changes:
- rscadd: "Adds Eris Flag and Banner to player loadout options."
- imageadd: "New sprites for the Eris Flag and Banner."
**The_Ill_Fated:** new flags/banners for heap of Solarian stuff
**Hazelmouse:** new flag/banner for Axiom
Stupid Solarian Canton officially gone, sickass stripe now. All worlds
affected (either updated or added):
Callisto
Ecclesiastical Axiom
Enceladus
Europa
Ganymede
Lhokgon
Luna
Lycoris
Lycoris (Provisional)
New Hai Phong
New Peoria
Northern Reconstruction Mandate
Novo Igman
Old Mars
Pluto
Provisional Mars
San Colette
Sankt Frederick
Silversun
Solarian Biesel
Early Solarian Biesel (Tau Cetian)
Solarian Mictlan
Solarian New Gibson
Solarian Xanu
Solarian Konyang
Southern Reconstruction Mandate
Sālamasian Republic
Unity Station
Venus
Visegrad
See icondiffbot for images.
- Adds the Caria origin, by request of human lore. Carians are vulnrable
to light, but have low light vision.
- Adds the Caria accent.
- Adds Carian flags, available in the loadout.
- Adds the Carian tribunal necklace, available in the loadout.
- All description are by Schwann.
- All sprites are by me.
---------
Signed-off-by: Fyni <itsfyni@gmail.com>
Signed-off-by: Wowzewow (Wezzy) <42310821+alsoandanswer@users.noreply.github.com>
Co-authored-by: Wowzewow (Wezzy) <42310821+alsoandanswer@users.noreply.github.com>
Adds a variety of loadout origin items from Reade and New Gibson.
_All sprites by Alsoandanswer/Wezzy._
---
**New Gibsonite Uranium Glass Accessories:**
- Adds a bracelet, ring, and necklace that are an emissive green.
- Only selectable by characters with the New Gibson origin, incl. Tau
Ceti Skrell and Tau Ceti IPCs (for lack of New Gibson-specific
skrell/ipc origins).
<img width="965" height="101" alt="accessories"
src="https://github.com/user-attachments/assets/4a235dee-28ce-485f-931d-4913853a22ef"
/>
---
**Readic Personalised Breath Mask:**
- Adds a recolourable breath mask with an oni mask-like design.
- Only selectable by characters with the Reade origin.
<img width="1331" height="107" alt="mask"
src="https://github.com/user-attachments/assets/ef500fed-bf0f-4b22-a037-0a21938e2928"
/>
---
**Reade Extreme Racing Jackets:**
- Adds an extreme racing jacket with a bi-colour design and various
decals that can be selected.
- The jacket has an action that temporarily hardens the wearer against
heat/near-void conditions for 1 to 2 minutes (though only covers the
torso and so cannot replace a soft/voidsuit).
- Only selectable by characters with the Reade or New Gibson origins,
incl. Tau Ceti Skrell and Tau Ceti IPCs (for lack of New Gibson-specific
skrell/ipc origins).
<img width="1393" height="97" alt="jacket"
src="https://github.com/user-attachments/assets/20ec051e-3fe5-49b0-ace3-5159ec8a9938"
/>
Coloured Example:
<img width="654" height="309" alt="image"
src="https://github.com/user-attachments/assets/0fc81d89-c1b3-452a-87c7-374cc1e6dd18"
/>
---
**New Gibsonite Voidsuit and Modkit:**
- Adds a sleek/high-tech engineering/ops voidsuit to contrast against
the lower tech ones.
- A modkit to convert engineering/atmospheric/mining/hangartech
voidsuits is available in the loadout.
- Has human, skrell, and tajara variants.
- A unathi variant has also been sprited but is not available ingame.
- Only selectable by characters with the New Gibson, incl. Tau Ceti
Skrell (for lack of New Gibson-specific skrell/ipc origins)
<img width="1625" height="110" alt="suit"
src="https://github.com/user-attachments/assets/330db8cd-2bc2-4745-a720-6a0409b97332"
/>
- 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>
Includes a new voidic lantern for the voidtamer ship crew and as a
loadout item for the culture
It's a buffed lantern able to barely sustain a dionae, its a little
stong but only locked to the one specific culture and ship by default,
i'm not sure if it'll spawn in the warehouse tbh, but it's fine if it
does
---------
Signed-off-by: Yonnimer <31339047+Yonnimer@users.noreply.github.com>
Moves the psi-protect pills out of the psych medicine selection to their
own selection. Allows characters to continue to bring their normal
medicine prescription but also select the psi-protect pills.
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!
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
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#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"
/>
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.
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"
/>
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.
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.
Regression from BYOND versions <=515 because find/refresh was always
enabled on browser windows even when it wasn't supposed to be.
Enable find (Ctrl+F) and refresh (F5) on browser windows.
Adds loadout entries for colorable variants of the tajaran fancy uniform
and fancy uniform with skirt.
<img width="320" height="1000" alt="kWG2Cynbbm"
src="https://github.com/user-attachments/assets/49d030b9-7bd5-4598-b3df-6139f5c45911"
/>
<img width="320" height="1000" alt="0OiS9w55Mm"
src="https://github.com/user-attachments/assets/3167f319-e89e-48d5-b418-82f5abbd3965"
/>
Sprites are just recolored/grayscaled versions of the existing sprites.
Also, I had to change the default option for the loadout entry because
the accent color button only shows up if the default option has accent
colors.
Also has variants for gold buttons vs silver buttons. I'm told
apparently there's a way to have a third colorable option but I couldn't
find it and I've already spent 5+ hours today working on a character
then PRing this for that character.
I just want blue. I'm sorry (Not really).
Fixes https://github.com/Aurorastation/Aurora.3/issues/22291
changes:
- bugfix: "Fixes black shorts being invisible."
- bugfix: "Removes old grey jean obj defs (no sprites and not used in
server)."
- bugfix: "Removes two empty unused sprite icon_states from shorts.dmi"
This PR fixes a hard del related to any kind of direct organ replacement
via loadouts, which it turns out all of them were doing. But it was most
commonly showing up with bioaugs because the boosted heart and boosted
liver are the only organs besides custom items that replace an internal
organ during loadouts spawning.
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>
I have actually tested this PR to verify it. Thanks to Sentry for
finally giving me the data point needed to figure out where the hell the
bug was coming from. It turns out the culprit for The Pants Hard Delete
was people accidentally saving Abstract Pants in their loadout, which
would immediately produce a runtime error when the game attempts to add
them to the chargen dummy.
<img width="655" height="560" alt="image"
src="https://github.com/user-attachments/assets/6b4028a2-0661-4479-a9a5-03cc7157e5f7"
/>
We think the culprit behind this one was VSCode autofilling Destroy()
with . = ..()
which is improper. There's a **surprising** number of improper order
Destroy() procs in the repo, so I might as well get all of them in one
pass. Several of these files are associated with currently known hard
dels, such as the modular computer and organ related dels. More than a
couple were my own mistakes, since the Destroy() or Removed() . = ..()
behavior on signal registering objects also prevents the signal from
being unregistered, which similarly creates a hard del.
Signed-off-by: VMSolidus <evilexecutive@gmail.com>
Adds the PRA submarine coat, available in the loadout for Tajara
characters under the "tajara coat" category.
Sprites taken from shiptest and modified by @CatsinHD, with an extra
modification by me.
---------
Signed-off-by: Fyni <itsfyni@gmail.com>
Co-authored-by: Cody Brittain <1779662+Generalcamo@users.noreply.github.com>
Co-authored-by: Fyniiy <=>
This adds two passcards to represent xanan pride across the spur on the
horizon to the loadout as accessories.
Ill-fated is the creator of the sprites and descriptions, I am the
implementor by her request!
### Asset Licenses
The following assets that **have not** been created by myself are
included in this PR: xanu_passcard, nationa_militia, the item
descriptions in full. All by the_ill_fated on discord.
<img width="302" height="203" alt="image"
src="https://github.com/user-attachments/assets/39e66093-2730-4d84-8534-37c6058f3471"
/>
---------
Signed-off-by: ArbiterAmbrose <n22don2009@gmail.com>
Co-authored-by: SleepyGemmy <99297919+SleepyGemmy@users.noreply.github.com>
Adds a 2 point box to the loadout that allows one to have a tin of tea,
teapot and 4 cups to properly share tea with people. Inspired after I
saw similar elsewhere and thought how annoying it was to use 3 points
just to get the tea, teapot and 1 (potentially full) cup.
Tea tins were made a bit smaller as it seemed weird they were box sized,
and so that it would actually fit in the tea set box.
The point cost of cigs were reduced to 1 point, down from 2, as it seem
to make more sense. We have entire lunchboxes and augs for 2 points,
while cigs are more an aesthetic choice.