Many, many, many items have inhand sprites in their .dmis but for
whatever reasons do not display them in-game. This PR:
1. Updates many item definitions to point to their already-existing
inhands correctly. This consists largely of held tools, but also gas
tanks and jetpacks mounted in the suit storage slot.
2. Adds a few codersprites made by me for objects with either missing
inhands or poorly matching mishands (IE, the tape recorder, which has a
black case, reused the white inhand sprites of the health analyzer). The
new sprites are modified or recolored variations of other inhand sprites
from our repo, except for circuitboards which are new.
<img width="444" height="400" alt="image"
src="https://github.com/user-attachments/assets/7f107b9a-fe24-4e31-8f16-4d34768ee117"
/>
3. Adds inhand sprites for Inflatables and Inflatable Boxes made by
Tomixcomics.
<img width="424" height="101" alt="image"
src="https://github.com/user-attachments/assets/434107c4-8577-49a2-a58e-d6b014c03933"
/>
4. Ports inhand sprites for the Hydraulic Rescue Tool from tg's Jaws of
Life.
<img width="224" height="94" alt="Screenshot 2026-02-07 172931"
src="https://github.com/user-attachments/assets/070c7956-f6a8-4fb5-870f-10c64afcc8b3"
/>
5. Some additional cleanup while in the area. The 'analyzer' has been
renamed the 'gas analyzer' to be consistent with the other analyzer
objects, standardized icon_state naming conventions where I saw
oddballs, updated code docs to use DMDocs when in the area, etc.
### Asset Licenses
The following assets that **have not** been created by myself are
included in this PR:
| Path | Original Author | License |
| --- | --- | --- |
| icons/obj/item/hydraulic_rescue_tool.dmi | [SomeAngryMiner (bee
station)](https://github.com/BeeStation/BeeStation-Hornet/pull/2487),
[maxymax
(/tg/station)](https://github.com/tgstation/tgstation/pull/58616) |
CC-BY-SA |
| icons/obj/item/inflatables.dmi |
[Tomixcomics](https://github.com/tomixcomics) | CC-BY-SA |
Resprites 3 Tajaran rifles, expanding them to use a 48x32 canvas, and
brings them in-line with lore as written in terms of weapon design
history. Additionally, adds 6.8mm in the form of the Tajaran Z33
Tamparii cartridge to further separate Tajara and Human history and arms
development.
All weapon sprites are made by me, except the ba and ss sling which was
borrowed from the Dominian rifle sprites. Special thanks to Elorg for
help in making these not look awful.
<details><summary>Z33 Tamparii</summary>
<p>
<img width="331" height="332" alt="image"
src="https://github.com/user-attachments/assets/f9892dc8-9c6d-45c6-8779-3ad3e39abaed"
/>
An old caliber that continues to show its usefulness. The compromise
between weight and firepower, as well as room to change the powder load
has seen the cartridge remain in service across Adhomai.
</p>
</details>
<details><summary>Tsarrayut Rifle (PRA)</summary>
<p>
<img width="572" height="387" alt="image"
src="https://github.com/user-attachments/assets/53327f3b-4b87-415e-8215-b1c2ccc08c9c"
/>
Redesigned to a general magazine-fed rifle. Not meant to be flashy or
cool, simply easy to mass-produce and train conscripts. Additionally,
still takes old bolt action rifle clips.
</p>
</details>
<details><summary>Hotaki Marksman Rifle (ALA)</summary>
<p>
<img width="586" height="400" alt="image"
src="https://github.com/user-attachments/assets/c08986ec-1134-4869-8dc2-36b981a211f9"
/>
Carries many of the same lines and design from the Tsarrayut, especially
in the receiver. However, it was modified to be a bullpup for a longer
barrel. Higher bullet velocity for a similar overall length; perfect for
a marksman harassing down an enemy.
</p>
</details>
<details><summary>Mrrazhak Assault Rifle (ALA)</summary>
<p>
<img width="483" height="332" alt="image"
src="https://github.com/user-attachments/assets/3f0a2885-49bb-418b-b956-4d2f89a60b40"
/>
Pretty much a shortened Hotaki. Intended to have a similar barrel length
to the Tsarrayut, but a shorter overall gun.
</p>
</details>
WIP for the following items:
- [x] Golden Mrrazhak
- [x] Cartridge balancing
- [x] Addition/clean-up with uplink items
- [x] Addition/clean-up with ghost roles
---------
Signed-off-by: CatsinHD <31459154+CatsinHD@users.noreply.github.com>
Signed-off-by: Wildkins <john.wildkins@gmail.com>
Co-authored-by: Wildkins <john.wildkins@gmail.com>
I spent the entirety of today's event looking at hard dels with my new
digital minions. This was *nearly* every Hard Del that came up during
2/7/2026's event. It turns out that AI is extremely well suited to
hunting down circular references like this across an entire repo. This
PR was made with Antigravity-Gemini3Pro.
I have not yet tested this PR.
---------
Signed-off-by: VMSolidus <evilexecutive@gmail.com>
Co-authored-by: Wildkins <john.wildkins@gmail.com>
This PR refactors the Read Mind power to make it much more interactive
with differing levels of Psi-sensitivity. I also fixed issues with
improper sanitization of its inputs by just gently reworking it to use
the modern tgui_input_text(). It no longer has a hardcoded check for the
psi-receiver, since that check has long since been deprecated in favor
of the more modular check_psi_sensitivity().
I needed Hyperbolic Tangent for what I was doing here, so I just added
procs for all the Hyperbolic functions. They exist. Have fun.
I got annoyed one too many rounds in a row that I had to print the
medical records to get the medical records, and did not know until
writing this PR that you have to click where it says "medical" to view
said records. So I have tweaked a bunch of things about the records, so
that they now automatically open to the appropriate tab matching their
records type, EG Medical Records opens by default to Medical Records.
<img width="903" height="661" alt="image"
src="https://github.com/user-attachments/assets/abea1c4b-c78d-4716-ada5-13a100a3316e"
/>
---------
Signed-off-by: VMSolidus <evilexecutive@gmail.com>
Co-authored-by: Casper3667 <8396443+Casper3667@users.noreply.github.com>
This PR reworks the controls for Mechs to now operate under
"Battletech-Style" controls. Where the W and S keys are instead Forward
and Reverse, while A and D are turn-left and turn-right respectively.
This control scheme is generally significantly more playable for mechs,
since mechs can only interact with objects or fire weapons in a
forward-facing arc. Mechs were previously incapable of both
repositioning and fighting at the same time, while with this update a
mech can now face an enemy, fire upon them, and either move closer to
them or further away.
Mechs also now have reverse speed characteristics based on their chassis
selection. Bipedal legs generally have the worst reverse speed. Quad
legs have significantly better reverse handling, and Treads have no
reverse speed reduction at all (with the fun caveat that they suck at
turning).
I have also fixed the issue of mechs feeling like they were "too easy to
mobility kill". It turned out that mechs were hardcoded to be mobility
killed when they took only 45 points of damage, regardless of how tough
their legs were. I have reworked this to instead be a linear decrease in
movement speed, based on the damage taken ratio of the legs. Larger and
tougher legs are naturally more resistant to being impeded by mobility
damage.
I have actually tested this PR, here's it in action! NOW WITH STRAFING
https://github.com/user-attachments/assets/3123fed8-ec22-4118-8a6a-7cbfe45e6667
---------
Signed-off-by: VMSolidus <evilexecutive@gmail.com>
Co-authored-by: Cody Brittain <1779662+Generalcamo@users.noreply.github.com>
pant.
How I forgot how pants should look like: the PR.
From the changelog:
> - imageadd: "Resprited all jeans, black pants and colorable dress
pants."
> - rscdel: "Removed tan, khaki, red, white pants due to the existance
of colorable dress pants. All maps and outfits where these were used now
use black pants (I did not want to put in the effort)."
Images, as always, in the details below.
Old (current) sprites on the top, new on the bottom unless stated
otherwise.
<img width="2560" height="1024" alt="jeans"
src="https://github.com/user-attachments/assets/9290ec78-638d-4c8a-871b-e74022188749"
/>
Do yell at me if these don't look like jeans. Also imagine these but
shorter, now you have jean shorts, which were also resprited.
It always bothered me how the webbings (is that a proper plural form for
them?) poked out from under suit items. But then I remembered that I am
a spriter (allegedly) and can change that, so I did. Hello.
From the changelog:
> - imageadd: "Resprited engineering, medical and security webbings
(which are now thinner to not poke out from under suit clothing) and
drop pouches."
> - imageadd: "Added a proper colorable sprite for the colorable drop
pouches."
Images, as always, in the details below.
Old (current) sprites on the top, new on the bottom unless stated
otherwise.
<details>
<summary> Webbings: </summary>
<img width="2304" height="1536" alt="webbings"
src="https://github.com/user-attachments/assets/03942dff-2deb-4071-992d-f42531d753cb"
/>
</details>
<details>
<summary> Drop pouches: </summary>
<img width="2304" height="1536" alt="drop"
src="https://github.com/user-attachments/assets/8ab8f5f7-2f29-4cc7-babb-e845b9ee1d44"
/>
</details>
As far as attributions go, I referenced the medical webbing from
Shiptest, and modified it for for engineering, security and medical. I
do not know which PR in particular that webbing was added added in, but
I will link the PR which I _believe_ did it:
https://github.com/shiptest-ss13/Shiptest/pull/2748
Ports https://github.com/tgstation/tgstation/pull/60314
Yep, a straight up copy-paste job. Ours was ass and broken and this one
Works and Looks Nice.
Actually having functional screen shaking again, I anticipate we'll get
reports that some shaking fx need tuning, so we'll zap those as they
come in.
# Summary
This PR adds the alt title "Foreign Service Officer" to the consular
role. The alt title can only be selected if the citizenship is set to
"Sol Alliance".
PR is a commission for the_ill_fated and has been pre-approved by human
lore.
## Changes
- Added logic to allow alt titles to be locked to citizenship. It
follows the same logic as faction locking.
- Added "Foreign Service Officer" to the consular role, locked to "Sol
Alliance" citizenship.
## Preview
<img width="874" height="40" alt="Screenshot 2026-02-06 211249"
src="https://github.com/user-attachments/assets/8a017db9-38af-4f57-a9bb-54d8aa5b6c59"
/>
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.
I accidentally broke it when I implemented Tulkir's custom dagger, due
to how the icon states are reset in accessories now. So now I just
handle that part earlier instead so it works again.
changes:
- rscdel: "Removes 'Assembled Solar Panels' bounty from bounty pool and
updates the 'Solar Assemblies or Trackers' with its old description
referencing the phoron scarcity."
Adds a pink and a red heart balloon, for valentine's decorations! Also
added them to the random balloon pool so they may show up at random now
and again.
---------
Signed-off-by: Fyni <itsfyni@gmail.com>
Co-authored-by: Cody Brittain <1779662+Generalcamo@users.noreply.github.com>
Three for one.
- The ability to write in journals held in ones hand was restored.
- The quik-pay quick-input now works properly.
- The credit symbol use was standardised to use 5电 and inserted into a
few places where it used credit instead.
Fixes https://github.com/Aurorastation/Aurora.3/issues/21806
Headphones using the PlayNonloopingSound proc meant that in
datum/sound_token/New(), it wasnt being dynamically assigned its own
channel and so the associated sound.channel was defaulting to zero. This
broke a bunch of stupid sound stuff when the headphones were A.) playing
while onscreen but not within range of a listener and B.) stopping songs
while other SFX happened to be playing and C.) probably other cases.
PlayNonloopingSound is not used anywhere else in the repo at this time.
As it sais in the title.
-> If you need the logs files use either the WI, TGS, or the logging
infrastructure.
Co-authored-by: Werner <Arrow768@users.noreply.github.com>
<img width="700" height="848" alt="image"
src="https://github.com/user-attachments/assets/e0db50af-35db-43c7-b78e-6c1ea5ac569c"
/>
you take a tiny little two year LOA and this happens
this PR hits some large lag culprits:
- UpdateOverlays() getting spammed by human/update_icon. This was 0.85%
of server CPU time during the event. Doesn't sound like a whole lot but
it's insane. 99% of it was caused by sloppy duplicate calls of
update_icon in set_dir (as well as update icon itself!). Refactored to
stop that
- Makes Follow menu update manually, which cuts down on the 2.8 million
REF() calls it made during the event. This was ~1% of CPU time including
ui_data as well.
- Gets rid of a bunch of random runtimes and some lighting-related
harddels.
- NanoUIs now clean themselves up when their owner qdels rather than
forcing the owner to do REF(src) and close all matching UIs. saves us
~0.1% server cpu time! wowza!
During last nights event, a few storyteller spawned mobs got snuck into
the manifest with blank jobs. This PR prevents said blank records from
showing up in the manifest. I'm genuinely not sure how they got there in
the first place, but oh well.
It's not supposed to be possible to get into the decellerate() proc when
your ship isn't moving, since the button to get there locks. Somehow
this happens anyways, so here's a guard clause in case that softer check
didn't work, in order to make a division by 0 not possible.
This PR is intended to be the final round of bug fixes and tweaks to
both the SSRM Corvette and the Sol Frigate. To make the Frigate more
competitive with It's contemporaries (Xanu Frigate, TCAF Corvette), the
armory was buffed with a extra AR and C4. The Exosuit have also been
given more equipment to play with.
The SSRM Corvette is fixed completely and was completely playtested.
Everything works, now!
Passive vents, as the name suggests, passively interact with the
atmosphere. Basically think of them as an open pipe.
This makes them useful to vent a pipe network to a vacuum, or equalize
the atmospheres of two otherwise unconnected rooms. Being passive
however, they are just as capable of intaking air as they are outputting
air, with no way to control it. If you want to guarantee that air only
goes -out-, use an injector or a pump vent.
A small number of telecrystals were present in an early version of the
new Secure Technical Vault and intended to be removed, but were not
removed due to (likely my own) oversight, or else a map merge conflict
resolution somewhere that erred on the side of caution.
Removes those telecrystals.
I have a massive migraine right now so I threw this problem at
Antigravity-Gemini3Flash. I have tested that the credit symbol works
correctly though, and have looked at several papers to make sure their
formatting wasn't messed up.
Tested:
<img width="106" height="103" alt="image"
src="https://github.com/user-attachments/assets/56672122-5404-4d98-bb4f-65a254ca3d2a"
/>
The commissary now has a request console and duct tape.
The disposal leading to the commissary now leads to the customer section
instead of the behind the desk, so packages are easier to unload.
The machinist request console was readded.
The sign on the security elevator should no longer follow the elevator
to each floor.
Perconol's previous recipe was 1 Mortaphenyl, 1 Water, and 1 Sugar,
which would make it a watered-down mortaphenyl despite its very
different mechanics and classifications. Though they are both
painkillers, Perconol is classified as non-addictive (like a real-life
equivalent to acetaminophen), whereas Mortaphenyl is an addictive opioid
(comparable to tramadol). It would make more sense for 2 medications
with different effects to not be separated by simply water and sugar. In
terms of logistics, a reaction mechanism for turning mortaphenyl into
perconol with hydrazine could be that the hydrazine might steal a
functional group or two from mortaphenyl (such as the **phenyl**
winkwink) and then evaporate (into a fume hood that's definitely in the
pharmacy and chemistry... right? ;-;). Anyways, without the functional
group(s), perconol would be an entirely different chemical from
mortaphenyl. The reason this isn't really probable with water and sugar
is because our blood has free-floating water and sugar (glucose), so
mortaphenyl would be "becoming" perconol in the bloodstream,
technically. Same goes for the stomach.
see title
base_item_interaction was passing src (the target) rather than
attacking_item as the obj/item/tool. i do not know how much this broke
but it certainly made the server upset with runtimes
- The right side of the large flag, when played to the east, was upside
down. Flips it the right way up!
- Correctly capatalize and space the object name.
---------
Signed-off-by: Fyni <itsfyni@gmail.com>