This portion of the script wasn't updated, so we always got an error on
linters. This never threw a `sys.exit` error so this list hasn't been
updated for a solid while now...
Let's both add the prefix and make sure we throw so we don't forget
about this script in the future. Quite important to make sure this stuff
works!
## About The Pull Request
Ensures we don't get a repeat of #76345 (unit test that wasn't ticked in
the `_unit_tests.dm` file, fixed in
596ca8b6d4). Basically, we leverage the
code that was already being used in the DME Validator but then expand it
a bunch via using JSON Schemas that correspond to the type of scan we
want to run. Even though sorting unit tests alphabetically is a bit
different than sorting the tgstation DME, it's good to leverage the
already existing framework rather than create a copy-pasta "lesser" code
runner. This went through strenous testing on my end, so let me know if
anything seems off.
While in the area, I added some other niceties that I've found work
really well in GitHub Runners environments, as well as local testing in
case you really like doing that before you make a PR for some reason.
## Why It's Good For The Game

This is what it looks like pre-596ca8b6d4cc49cd69fc104b53b7f4973497a2e5
(this is now merged, so it will pass CI)
De-hardcodes some stuff and allows for some neater flexibility, less
cringe unit tests being coded and not being ticked in the file, etc.
etc.
## Changelog
Nothing for players to care about.
Let me know if you have a better idea than the schemas, I couldn't think
of one that could be really extensible and flexible in the same way this
is.
## About The Pull Request
https://github.com/tgstation/tgstation/assets/4081722/5ca8e015-21f9-4159-9953-bc370152d01f
Improves the audio quality and speaker fidelity by implementing
Retrieval Voice Conversion as an intermediary layer, utilizing the
repository at https://github.com/ddPn08/rvc-webui.
Leverages RVC to allow players to set a pitch for their voice.
https://github.com/tgstation/tgstation/assets/4081722/0eb76ed7-ad67-4da2-9ceb-02605eea2c83
Makes silicons utilize a player's chosen voice preference on their
character slot, and adds a preview button to hear the voice as a silicon
on character creation.
Adds a toggle on character creation to disable having a voice on a
specific character slot.
Adds support for per-tongue voice filters.
Reworks the silicon voice effect to be a special effect done on the TTS
server level instead of via normal filters.
Reworks the vending machine effect to use the new robotic voicebox
effect.
## Why It's Good For The Game
Vastly improves the audio quality and speaker fidelity of our TTS
system.
Allows players to further customize their voice per character, naturally
pitching the voice up or down with cutting edge machine learning based
pitch adjustment.
Allows silicon players to have a consistent voice that's also audible
and understandable regardless of the voice or pitch of the speaker.
Improves vending machine audio quality.
Enhances the immersion of snail tongues and robotic voiceboxes.
Adjusts how Poly's pitch adjustment works based on if RVC is available
or not.
Allows players who feel that a voice doesn't fit their character to
disable having TTS on their specific character.
Provides server operators a way to disable specific voices in situations
with a shared voice server.
## Changelog
🆑 Iamgoofball, Nadare, ddPn08, Mangio621, the rest of the RVC dev
team
add: Improves the audio quality and speaker fidelity by implementing
Retrieval Voice Conversion as an intermediary layer, utilizing the
repository at https://github.com/ddPn08/rvc-webui.
add: Leverages RVC to allow players to set a pitch for their voice.
add: Makes silicons utilize a player's chosen voice preference on their
character slot, and adds a preview button to hear the voice as a silicon
on character creation.
add: Adds a toggle on character creation to disable having a voice on a
specific character slot.
add: Adds support for per-tongue voice filters.
add: Reworks the silicon voice effect to be a special effect done on the
TTS server level instead of via normal filters.
add: Reworks the vending machine effect to use the new robotic voicebox
effect.
/🆑
---------
Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
## About The Pull Request
Title.
Also, fixes https://github.com/tgstation/tgstation/issues/75568 at the
request of @TheVekter
## Why It's Good For The Game
This subtype only exists to append ore box behavior and is clearly a
relic of pre-2020 mechcode.
Keeping it around will only make it harder in the future to add new
mechs with ore box support.
## Changelog
🆑
fix: Clarke ore box now has a less confusing dump contents button.
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
The reusable and caseless types only purposes are the behaviors of
deleting the casing when fired and spawning a new object when the
projectile ultimately reaches its maximum range or hits a target, both
of which are easily "elementizable". Also, I don't like those barely
filled sub-folders in the projectile module, and the fact we've
divergent reusable and single use arrow types.
## About The Pull Request
Current setup will bind to every interface which makes it publically
available. Also skips past most of the firewalling on linux.
This improves the security for anyone who tries running TTS on their
server directly out of the docker-compose file.
## About The Pull Request
Ok so we currently have 1 (count em) border object that wants to smooth
with other border objects. That's the tram window.
It currently does this manually, via map edits, but that's kinda crappy
so lets be better.
This pr adds a new smoothing mode to handle border objects.
Unlike other smoothing modes, it returns a bitfield of directions the
border object connects in.
I do this by memorizing a calculation of which dirs "connect" at init,
and reading out of a global list with border object direction, direction
between objects, and if it's a border object, the other object's dir.
I'm doing this primarily because it's become useful for wallening (a
spriter saw the tram thing and is doing the same thing to pod windows,
and I want to support that)
I do think it's potentially useful in other applications too tho, and I
like dehardcoding tram windows.
Also fun bonus (or maybe downside), it's nearly 0 cost because I pulled
the bitmask smoothing define into 2 subdefines, and am swapping the
handler one out to do what I want.
Oh also I got rid of a for loop in smoothing code, redundant and costs
time in list iteration
[Moves tram windows over to the new border object
smoothing](114873679c)
Also replaces some typepath chicanery with a setDir override, for
redundancy in future
Oh and there's a update paths script too, to be nice
## Why It's Good For The Game
More visual possibility in future, fixes a hack we have currently, and
makes some spriters happy.
## Changelog
🆑
fix: Dehardcodes some stuff with tram windows, they'll be easier to map
with now
refactor: Border objects can now smooth with each other. I'm sure
something cool will come of this
/🆑
## About The Pull Request
Apps now properly delete themselves when removed, so they don't exist in
nullspace anymore.
Chat client now actually updates the uid, because its New() didn't call
parent.
Deletes the 'console' subtype of modular computer
Updates how downloading and transferring files are handled
Fixes being able to infinitely upload apps to a disk
## Why It's Good For The Game
Fixes some more bugs I found with apps and prevents spamming apps in a
disk.
## Changelog
🆑
fix: Maintenance data disks now properly transfer from PC to disk
fix: Disks can no longer be flooded with the same app repeatedly.
/🆑
Good morning fokes, this PR is going to attempt to tweak around some of
the values of mineral costs in-game in the hopes of making the mineral
economy more engaging to the base gameplay loop, in the hopes that by
making it more self-realized, it would allow for better integration with
the rest of the gameplay loop as well as so that it doesn't completely
overshadow the credit economy. That said, **this pr only makes changes
to mined and station minerals**.
So, the base change is as follows: items with designated costs of
minerals below 1000 minerals, as designated in #75052 as
`SMALL_MATERIAL_AMOUNT`, have been left alone. Any item above 1000 or
2000, from `HALF_SHEET_MATERIAL_AMOUNT` and `SHEET_MATERIAL_AMOUNT` have
been adjusted, as sheets will now contain **100 minerals each**.
For example, if an object costed 4000 iron, 1000 glass, and 500 diamond
with the old numbers, with the changes to these defines, that item would
cost 2000 iron, 500 glass, and 500 diamond.
Fixes#75918
Alternative to #75926🆑 ShizCalev
fix: The RD's plant will no longer say that it's not very healthy after
being restored with seeds.
fix: Potted plants no longer randomly swap icons after being thrown.
fix: Plants that started the round dead are no longer all the same kind
once revived.
fix: Admins can now varedit plants to be alive / dead!
/🆑
## About The Pull Request
This changes the Spaceman simplemobs into basic mobs.
They really didn't do anything besides stand around and retaliate, so no
new AI datums had to be added.
## Why It's Good For The Game
Scratch it from da list.
## Changelog
🆑
code: Spaceman simple mobs have been converted to basic mobs.
/🆑
---------
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

## About The Pull Request
The current broken tiles have some visual issues:
- There is an ambient occlusion shade when it touches normal tile
- It has a layer higher than it should be which leads to things that are
normally above the floor layer, render below it. Such as atmos
machinery, cleanable overlays, etc.
This PR makes the render on a proper layer and work like a partially
destroyed floor tile that can be reclaimed with crowbar.
Also, the cleanables are now on FLOOR_CLEAN_LAYER to make dirt appear
above catwalks and these new tiles.
And the flat dirt now has 4 variants of sprites, while dust uses the old
dirt sprite. It seems like dust was just dirt with different description
before.
## Why It's Good For The Game
A broken tiling with no visual bugs and proper floor-like logic.
## Changelog
🆑 MTandi, Borbop
fix: Dust now has dust icon, instead of dirt icon. Dust on all maps
replaced with dirt
image: Flat dirt now picks from 4 new sprites
refactor: Made broken tiling work more like tiling and have
corresponding visuals. Added directional mapping variants.
fix: Cleanables now use FLOOR_CLEAN_LAYER to make sure that trash is
visible above catwalks
/🆑
## About The Pull Request
Changed the amount from 1 to 5 for original `bone_gel` so it's easier
for mappers to add the right bone gel.
Deleted subtype `/four` and added subtype `/one` specifically for bone
gel creating.
Increased from 4 to 5 because surgical tape has 5.
## Why It's Good For The Game
Having 1 bone gel near 5 surgical tapes always seemed off.
## Changelog
🆑
balance: Bone gel standart amount has been increased to 5.
/🆑
## About The Pull Request
On the tin. No new fancy AI wheels or anything, just a simple port.
## Why It's Good For The Game
Knocks another one off the list, just really light stuff. They're a bit
smarter now too, I think the intention was them for them to be pet-like
as well (according to the code). Should be really rather easy to give
them the pet-like behaviors and elements if someone really wants to in
the future, just sorta paving the way for more work to be done to make
mobs more intricate/interesting.
## Changelog
🆑
refactor: Giant ants are now more capable of distinguishing friend and
foe.
/🆑
## About The Pull Request
On the tin. They have pretty much nothing in common with chickens, so no
subtyping. They are in the same folder to keep that whole thing tidy,
though.
Also includes fixes to `growth_and_differentiation` element that I made
for spiderlings, since some stuff was yorked without me realizing. It
pretty much worked flawlessly for these chicks otherwise though. It all
works fine now.
## Why It's Good For The Game
More verbose naming scheme (instead of "holo", we get "permanent"
chicks), smarter AI for chicks, knocks them off the list, etc. etc.
One thing that I wanted to do was to have chicks recognize their mother
(if they had one), but that would be way out of scope for this simple
port PR. I'll dwell on adding something cool for that in the future.
## Changelog
🆑
refactor: Chicks are now a bit smarter, be careful not to squish them!
/🆑
Let me know if the whole "COMPONENT_KILL" thing is cringe, I couldn't
figure out a better way to do it without abusing `GetComponent()` to
`qdel()` it that way.
## About The Pull Request
I've done a couple, almost untangible mistakes in #75750.
One, I deleted the wrong variable definition (tastes, when it should've
been foodtypes, which had same value as parent) in the path for grilled
cheese sandwiches.
Two, a typo in the peanut butter banana sandwich path in the relative
UpdatePath script.
Both are fixed now.
## Why It's Good For The Game
Fixing human error.
## Changelog
N/A
For the longest time, the only way admins could moderate the library was
by using statbus's external tool.
But a few months back statbus went down, and ever since then they've
been sitting lost. Shit sucks.
The whole external thing has been bugging me for a while, so let's fix
all that yeah?
This pr adds a new verb to the admin tab that allows admins to
ban/restore books from the library.
It includes expanded (ckey) search, faster response times, in tool book
viewing with and without markdown rendering, and viewing of deleted
books.
This is accomplished with a special subtype of library consoles, stored
on the admin datum.
It shouldn't let you do anything without +BAN, rip my live debugging or
whatever.
I've also hooked into (and fixed) Ned's existing library actions log,
and added viewing support to the ban/restore pages.
This logs banning admin, ban time, ban reason, etc.
As a part of this, I've fixed/expanded on the existing UIs.
I've added ID search to all existing consoles, and fixed an existing bug
with the visitor console not supporting category search (shows how many
people actually use the thing)
Changes to the library_action table were pretty minor. The ckey column
was too small, so longer keys just caused it to fail on ban. Bad.
That and the ip address column was signed, which wasted space and was
non standard with other tables.
## About The Pull Request
The peanut butter banana sandwich is presented ingame as grilled when it
doesn't require a griddle to make.
Also, I'm taking the opportunity to repath the sandwich types, since
they all share the same weight class, food flags and icons file.
## Why It's Good For The Game
This will fix#74585.
## Changelog
🆑
fix: The peanut butter banana sandwich is no longer presented as grilled
when it doesn't require a griddle to make.
/🆑

## About The Pull Request
Dead potted plant seems to be originating from RD's office, but it's
widely used in abandoned areas for mood.
This PR makes the dead plant more generic, making RD's plant a subtype.
Also now you can turn dead plant into a living one by using any seed on
it.
## Why It's Good For The Game
No more RD's plants in space ruins.
And now there is a way to do something with those dead plants again
(they could be sheared into a living plant with bonsai skill previously)
## Changelog
🆑
qol: dead potted plant can be revived with a seed
/🆑
## About The Pull Request
Title.
## Why It's Good For The Game
Similar to #75610.
Gets our posters on the mapping directional helpers where needed.
## Changelog
🆑 Jolly
code: The code for posters internally has been tweaked slightly. If you
see posters floating in hallways, please report them ASAP!!
/🆑
## About The Pull Request
Title.
## Why It's Good For The Game
#75528 but with a map lint.
I also don't know what to call these, so for clarity sake I'm referring
to them as "panes", which I think helps convey what they are.
## Changelog
Not needed.
## About The Pull Request
https://www.youtube.com/watch?v=bcUuqKrnvVY <- me getting rid of every
simple animal one thing at a time
Turns lightgeists into a basic mob. There are a few key advantages into
its implementation that was previously impossible in the simple animal
framework, which is entirely possible now.
## Why It's Good For The Game
Lightgeists can actually have a bit of AI now, as a treat. They didn't
have it prior because I assume if they attacked anything, they would end
up healing it, and we didn't really have an option in the simple animal
AI to say "do not attack"... This really fixes that so they can wander
around a bit and look cute if some admin decides to spawn them in (but
the only way to get them outright is to use the anomalous crystal, which
auto-assigns a player). You don't see the AI if a player ghosts out of
the lightgeist because the lightgeist will delete itself on ghost
(previous behavior).
It also gets rid of some janky AttackingTarget() override that was
completely un-needed post-#73202.
## Changelog
Nothing really player facing.
## About The Pull Request
On the tin, I keep trying to tackle the larger basic mob projects but
burn out, so just enjoy these small ones to just keep that list looking
lighter and less insurmountable.
No big complex AI either, it choppa the tail off. That's all you really
need to be honest.
## Why It's Good For The Game
The cat surgeon will be just that slightly smarter. I suppose they're
still a doctor, just simply infatuated with the thought of cat tails...

noooooo my tail!!!
## Changelog
🆑
code: Cat Surgeons are a bit more smarter about attacking threats to the
world around them on their endless pursuit for those felinid tails.
/🆑
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
## About The Pull Request
Converts butterflies into basic mobs.
Also a little list organisation.
<details>
<summary>Yep, those are some butterflies alright</summary>

</details>
## Changelog
🆑
refactor: Converted butterflies to the basic mob system
add: Butterflies can now be grown in cytology
/🆑
TGS docker image had to drop libssl1.0.0 which it installed with a curl
of a now 404'ing .deb.
Transitively, curl isn't installed in the TGS docker image anymore.
This fixes CI for changes that trigger the TGS integration job. i.e.
#75570 and #75572 <- Please update master on these PRs after merging
I fucking despise distro package managers.
All in all we should have done this from the get-go.
Just another lightweight PR porting over a simple animal to the basic
mob framework with zero additional AI implementation (it's a killer
tomato- it spawns into the world to maul you. how much more intricate
does it need to be?).
## About The Pull Request
Gym equipment are currently ported from Goon code, and I didn't like how
it currently worked as it was buggy and the code was a mess. I decided
to just rework how they worked entirely. I left the parts that weren't
Goon code (like tooltips & deconstruction) alone because it's not goon
code and I think it's fine that way.
- Now you buckle yourself to it (like a chair, I didn't like how it
didn't work like one) and can work out with an action button you get on
buckle, you can do as many sets as you want, then unbuckle & go.
- You aren't hardstunned for 8 seconds for clicking on it anymore, you
aren't flying around because the stun doesn't even last the duration of
the animation anymore.
Video demonstration
https://github.com/tgstation/tgstation/assets/53777086/f5ae86f1-65fb-46c6-8a5f-8f9d9f0548b3
## Why It's Good For The Game
Reworks old code
Removes un-documented Goon code
Makes gym equipment less broken than it currently is.
## Changelog
🆑
qol: Gym equipment was reworked. You now buckle yourself to weight
machines to use them, rather than clicking on it and getting stunned for
a few seconds. It also means it works like a chair now.
qol: Gym equipment no longer breaks a sweat in no gravity.
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
This was pretty simple since they didn't have too much custom behavior,
and whatever they did have already had AI behavior. I got really burned
out the last two times I wrote intricate AI action/decision behaviors so
I'm just taking it light and doing the bare minimum.
one day our shackles will be free of the simple animal scourge. they're
also a bit more intelligent, and i daresay a bit cuter too now.
also that lizard gib animation has been sitting there for god knows how
long completely unseen, so let's actually hook it into the mob.
## About The Pull Request
Fixes the api not working + instructions
🆑
fix: fixed TTS not working when used by local servers
/🆑
Co-authored-by: TiviPlus <572233640+TiviPlus@users.noreply.com>
## About The Pull Request
This PR adds mapping helpers for requests consoles. Two of them set up
if the console can receive ore updates, and if it can make
announcements, flipping their relevant variables to TRUE. The other
three adds the consoles to their relevant department console lists
during late initialize. This allowed me to remove three variables
directly from the consoles themselves.

New sprites by CoiledLamb!
~~This PR also anchors mapping helpers, to prevent effects like the
roundstart crate initialization from moving them.~~ This was fixed by a
different PR.
## Why It's Good For The Game
Less var edits, easier to see a console's type at a glance.
## Changelog
🆑 Profakos, sprites by CoiledLamb
qol: Most request console varedits have been moved to mapping helpers.
/🆑
## About The Pull Request
Besides cleaning up code a little i changed all the bar lockers near
`boozeomats/all_access` to also be `all_access`. And also changed
freezer on Beach away mission to be free accessed like the freezers near
it.
## Why It's Good For The Game
Cleaner code, i guess?
Free beer.
## Changelog
🆑
add: Old bar on Metastation, tranquility emergency shuttle and Beach
away mission now have free access bar closets. Also freezers on beach
are now all access so you can now open them.
/🆑
https://user-images.githubusercontent.com/35135081/235344815-8e825ba9-52cf-44e8-b8e2-a2aeb5d47276.mp4
- Downloads a portable MariaDB (doesn't pollute your main system)
- Sets up a database with a random password on port 1338 (configurable)
- Installs the initial schema
- Every time after, will run updates
Major versions right now explicitly escape hatch, because those
historically come with something like a Python script, and I do not want
it to pretend to work.
---------
Co-authored-by: san7890 <the@san7890.com>
Safeguards against #74965 happening in the future.
Noticed a bunch of these were using ITEM_SLOT_HANDS. This is incorrect,
as the element already automatically updates held items. grep'd it to
catch future instances.
Likewise, a number of objects weren't passing slot_flags to the element,
meaning it wasn't actually updating those things properly when they were
being worn. I've simplified this so now the element will automatically
update all slot_flags, and passing an additional slot to the element
when being added is only needed for additional slots that might need to
be updated. This also means if slot_flags change, the element will now
update correctly as well.
🆑 ShizCalev
code: The update_icon_updates_onmob element will now automatically
update all slots in an item's slot_flags var. This does fix multiple
things that weren't updating properly. Passing a slot to the element is
now only necessary if you want to add additional slots to be updated.
/🆑