## About The Pull Request
TRAIT_DISFIGURED and physical disfiguration are now handled by the head
bodypart rather than being on the mob itself. This is mostly for
internal purposes, but it does mean that:
- Players can now perform plastic surgery on torn off heads.
- Disfigured mobs' heads keep their face hidden, and when attached to a
different body won't magically get repaired and vice versa, attaching a
new head to a disfigured corpse no longer disfigures it.
- Robotic (and other non-huskable) heads no longer become disfigured
from husking
- Also in the rare case of grafting a head torn off from a husk onto
another body, they no longer permanently turn into an Unknown. (lol)
## Why It's Good For The Game
Saner code, we generally want limb-specific behaviors to be on limbs
themselves and not on the mob. Also yeah that one weird edge case.
~~Husks are next on the chopping block~~
## Changelog
🆑
qol: Plastic surgery can now be done on detached heads.
refactor: Refactored how disfiguration is handled to be stored on head's
side
fix: Robotic (and other non-huskable) heads no longer become disfigured
from husking
fix: Attaching a head from a husk to a different body no longer
permanently turns them into an Unknown.
/🆑
## About The Pull Request
Medbay, the CMO, the Psychologist, (possibly) the Library, and some
maint rooms across all maps now have multiple copies of the SDSM-35
This exists as an in game ability to reference what brain traumas do. No
special bells or whistles, not even a search bar - it's a book after
all.
<img width="819" height="589" alt="image"
src="https://github.com/user-attachments/assets/ace867b9-a0f0-4302-99f9-46ed4d6fe377"
/>
<img width="802" height="546" alt="image"
src="https://github.com/user-attachments/assets/c96941d3-8da8-48f7-859b-93953fe01473"
/>
## Why It's Good For The Game
De-wikification: Rather than needing to pull up the wiki to figure out
what the brain trauma is doing, you can refer to the in game book and
cross reference the patient's behavior.
Medial larp: It's a reference to the DSM-5. If that wasn't obvious.
## Changelog
🆑 Melbert
add: You can now find the SDMS-35 in Medbay, the CMO's office, the
Psychologist's office, and possibly the Library. Quite simply, it's a
reference book for all the brain trauma's you may experience.
/🆑
## About The Pull Request
The [MediaWiki "printable" version of pages][p] was at some point
deprecated in favor of standard print stylesheets, making wiki books
look rather ugly, even uglier than if they weren't using the parameter.
However, there seems to be no way to command an iframe to opt in to or
simulate the print stylesheet. What we really want is to suppress the
sidebar and header. Therefore: position the iframe off of the page to
the left and top by the size of the elements we want to hide.
Hiding the left sidebar seems fully clean. However, hiding the top
header also hides the first bit of the scrollbar, which is a little
odd-looking.
Also, fix wiki books not giving book nerd moodlets.
[p]: https://wiki.tgstation13.org/Guide_to_drinks?printable=yes
Before:
<img width="984" height="790" alt="SS13 wiki book before"
src="https://github.com/user-attachments/assets/1eb6e961-bc35-418b-a015-868d7269e2f5"
/>
After:
<img width="985" height="752" alt="SS13 wiki book after"
src="https://github.com/user-attachments/assets/39a63ad3-bc99-4c71-a5e7-ff06ae1b6852"
/>
## Why It's Good For The Game
Less offensively ugly UI.
## Changelog
🆑
fix: Wiki books such as "Barman Recipes" and "Space Law" no longer have
terrible formatting.
fix: Wiki books now properly give book nerd moodlets.
/🆑
## About The Pull Request
It's just a partial cleanup of
anti-[STYLE](https://github.com/tgstation/tgstation/blob/master/.github/guides/STYLE.md)
code from /tg/'s ancient history. I compiled & tested with my helpful
assistant and damage is still working.
<img width="1920" height="1040" alt="image"
src="https://github.com/user-attachments/assets/26dabc17-088f-4008-b299-3ff4c27142c3"
/>
I'll upload the .cs script I used to do it shortly.
## Why It's Good For The Game
Just minor code cleanup.
Script used is located at https://metek.tech/camelTo-Snake.7z
EDIT 11/23/25: Updated the script to use multithreading and sequential
scan so it works a hell of a lot faster
```
/*
//
Copyright 2025 Joshua 'Joan Metekillot' Kidder
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
//
*/
using System.Text.RegularExpressions;
class Program
{
static async Task Main(string[] args)
{
var readFile = new FileStreamOptions
{
Access = FileAccess.Read,
Share = FileShare.ReadWrite,
Options = FileOptions.Asynchronous | FileOptions.SequentialScan
};
FileStreamOptions writeFile = new FileStreamOptions
{
Share = FileShare.ReadWrite,
Access = FileAccess.ReadWrite,
Mode = FileMode.Truncate,
Options = FileOptions.Asynchronous
};
RegexOptions regexOptions = RegexOptions.Multiline | RegexOptions.Compiled;
Dictionary<string, int> changedProcs = new();
string regexPattern = @"(?<=\P{L})([a-z]+)([A-Z]{1,2}[a-z]+)*(Brute|Burn|Fire|Tox|Oxy|Organ|Stamina)(Loss)([A-Z]{1,2}[a-z]+)*";
Regex camelCaseProcRegex = new(regexPattern, regexOptions);
string snakeify(Match matchingRegex)
{
var vals =
matchingRegex.Groups.Cast<Group>().SelectMany(_ => _.Captures).Select(_ => _.Value).ToArray();
var newVal = string.Join("_", vals.Skip(1).ToArray()).ToLower();
string logString = $"{vals[0]} => {newVal}";
if (changedProcs.TryGetValue(logString, out int value))
{
changedProcs[logString] = value + 1;
}
else
{
changedProcs.Add(logString, 1);
}
return newVal;
}
var dmFiles = Directory.EnumerateFiles(".", "*.dm", SearchOption.AllDirectories).ToAsyncEnumerable<string>();
// uses default ParallelOptions
// https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.paralleloptions?view=net-10.0#main
await Parallel.ForEachAsync(dmFiles, async (filePath, UnusedCancellationToken) =>
{
var reader = new StreamReader(filePath, readFile);
string oldContent = await reader.ReadToEndAsync();
string newContent = camelCaseProcRegex.Replace(oldContent, new MatchEvaluator((Func<Match, string>)snakeify));
if (oldContent != newContent)
{
var writer = new StreamWriter(filePath, writeFile);
await writer.WriteAsync(newContent);
await writer.DisposeAsync();
}
reader.Dispose();
});
var logToList = changedProcs.Cast<KeyValuePair<string, int>>().ToList();
foreach (var pair in logToList)
{
Console.WriteLine($"{pair.Key}: {pair.Value} locations");
}
}
}
```
## Changelog
🆑 Bisar
code: All (Brute|Burn|Fire|Tox|Oxy|Organ|Stamina)(Loss) procs now use
snake_case, in-line with the STYLE guide. Underscores rule!
/🆑
## About The Pull Request
Wiki is currently down but this should work once it's back.
If you're on 516 or above it will open the page in-game, if you're still
on 515 then it'll do the old behavior from the PR linked in the why it's
good for the game section.
## Why It's Good For The Game
In https://github.com/tgstation/tgstation/pull/86891 this was removed
"Until 516 with webview2 releases", well it's here now so we're fvckin
back
## Changelog
🆑
qol: The wiki books for users on 516 no longer opens the page on an
external website on your browser.
/🆑
## About The Pull Request
This pull request aims to fix the wiki manuals. Currently the wiki
manuals just show "You start skimming through the manual..." because of
a bad link (http://www.tgstation13.org/wiki instead of
http://tgstation13.org/wiki) which is fixed with this PR, but the issue
does not end there. Because BYOND uses trident for its `browse()`
function, a lot of Javascript and HTML elements do not function
properly, disallowing the removal or blocking of hyperlinks which break
the book entirely if they are clicked.
Therefore, as a temporary solution (until BYOND 516 is released with
webview2) when the user opens a book they are prompted with the
following:

Although not the best solution, it makes the books have a function again
and are usable.
Fixes https://github.com/tgstation/tgstation/issues/77315.
## Why It's Good For The Game
Makes books work again so new players can use them to be guided to the
wiki resources.
## Changelog
🆑
fix: fix wiki manuals by making them open wiki page on browser
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
Fixes#79545
Basically, the TGUI markdown reader that every other book uses didn't
properly send the HTML printified wiki page that we had. In order to fix
this, I shuffled around a bunch of code and worked in an edge case to
ensure that these manuals keep functioning.
In an ideal world we would be able to do something more elegant, or
maybe not even rely on displaying wiki pages in-game at all, but we just
gotta play the hand we're dealt and ensure that these sorts of features
continue to work for right now.
Also, we no longer need to both write and access raw HTML in the book
framework to make everything work here. This should reduce a LOT of
potential exploit vectors.
## Why It's Good For The Game

Thing work 👍
## Changelog
🆑
fix: Nanotrasen has clarified an issue with their manual publishers, and
these guides should now contain actual user-pertinent content.
/🆑