Commit Graph

3928 Commits

Author SHA1 Message Date
Ghom
14fb86e3e8 Mutation code cleanup, mutations now have sources to avoid concurrency problems. (#91346)
## About The Pull Request
This PR aims to clean or bring up to date portions of code about dna,
the dna console and mutations. This includes taking care of or removing
some of the awful choices like the pratically useless
`datum/mutation/human` pathing, or the class variable, in favor of using
sources to avoid potential issues with extraneous sources of a mutation.

The files changed are over a hundred just because I removed the
`datum/mutation/human` path, but the actual bulk of the code is mainly
shared between the datum/dna.dm, _mutations.dm and dna_console.dm.

## Why It's Good For The Game
Mutation shitcode is hurting my future plans for infusions a little.
Also it's a much needed refactor. Drafted 'till I'm sure it works
without issues.

## Changelog

🆑
refactor: Refactored mutation code backend. Report any issue.
/🆑
2025-06-08 13:57:10 +02:00
Joshua Kidder
febf4308d4 SSid_access now has a proc for getting information about an ID holder from their ID, there is also a define to invoke this proc in a less verbose way (#91269)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request

As part of the ore silo logging PR I'm working on I needed a way to get
the information on someone's ID in a robust and consistent way. I
decided on adding this proc to SSID_access and also adding a define to
invoke it since it's otherwise quite verbose.

```
/datum/controller/subsystem/id_access/proc/__in_character_record_id_information(
	atom/movable/target_of_record,
	bypass_chameleon = FALSE
	) as /alist
#define ID_DATA(subject) SSid_access.__in_character_record_id_information(subject)
```

This proc expects either a living mob or an ID. It returns an alist of:

"Name" Current ID name
"Age" Current ID age
"Assignment" Current ID job
"Account ID" ID# of the attached bank account if a standard ID, random
number if chameleon ID
"Account Holder" Name of attached bank account holder if one is
attached, current ID name if chameleon
"Account Assignment" 'title' of the job datum of the attached bank
account if normal ID, current ID name if chameleon
"Accesses" a list of the accesses on the ID, in the style of our other
access lists

Additionally, if it fails to read an ID, it also adds

		[ID_READ_FAILURE] = ID_READ_FAILURE

Finally, there are overrides for if 

The card is a chameleon card.
The being scanned is a silicon.

Which appends, respectively,

		.[SILICON_OVERRIDE] = SILICON_OVERRIDE
		.[CHAMELEON_OVERRIDE] = CHAMELEON_OVERRIDE

And does special handling.

This collects a significant quantity of relevant information into a
single convenient proc call, which is also named to reflect that the
information returned is meant to serve as an in character record of what
is being read (if it is used anywhere).


<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->

## Why It's Good For The Game

Offers standardized information returned from an ID for scenarios where
the information of an ID is especially relevant, rather than writing
boilerplate ID reading code for varying situations.

<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and its effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑 Bisar
code: A proc has been added to the subsystem for ID access to serve to
standardize the way information is read and returned from a given ID.
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
2025-06-05 14:46:14 +12:00
Bloop
4250ecb14c Removes a couple of duplicate gag map_icons + fixes the gags_recolorable component + most lootpanel gags previews (#91341)
## About The Pull Request

Turns out there were a couple of black mask subtypes that I missed as
well as a prisoner uniform subtype.

Also fixes some bugs that are not related to the map icon pr to further
improve the situation with GAGS previews.

## Why It's Good For The Game

Smaller .dmis, working previews

## Changelog

🆑
fix: spraycan can now be used to recolor the gi, glow shoes, striped
dress, H.E.C.K. suit
fix: most GAGS items should now be showing up in the lootpanel again
/🆑
2025-06-01 19:44:15 -07:00
Roxy
d147913fc2 Fix some DB issues and lag (#91420)
## About The Pull Request

- ~~The DB schema version define was set to 5.30, the changelog readme
said the latest was 5.28, and the sample insert query in the readme said
it was 5.31~~ (fixed in #91127) Changes the define and readme to 5.32
- Add new entry in readme to rename `character` column in `manifest`
table to `character_name`, because `character` is a reserved word in SQL
and every insert query is failing
- Changed the initial roundstart manifest queries from
number_of_players_readied_up individual insert queries to one mass
insert because I suspect this is add several extra seconds to the start
time

## Why It's Good For The Game
fix yes :)
## Changelog
🆑
server: increment DB schema version to 5.32
server: changed column name in manifest table from character to
character_name because the former is a reserved word
fix: changed round start manifest DB queries from dozens of individual
inserts to one mass insert
fix: hopefully fixed some lag on round start
/🆑
2025-06-01 12:47:54 -07:00
SmArtKar
b4061f1800 [MDB IGNORE] Blood Refactor Chapter 2: Collector's Edition (#91054)
## About The Pull Request

Refactors most of blood handling code untouched by #90593 and completely
rewrites all blood decals, components and reagents.

- Blood types now have behavioral flags which allow them to control
where they leave decals/DNA/viruses. Oil no longer transfers DNA and
viruses with it, while podpeople water-blood doesn't leave visible
decals on turfs and items, but still can be picked up by DNA scanners.
- Multiple blood types have received unique handling - liquid
electricity blood now glows in the dark, oil trails are flammable and
lube ones are slippery. Oil blood can be restored with fuel, lube with
silicon and slime with stable plasma (as normal plasma already passively
regenerates their blood), instead of everything using iron. Saline
solution only supplements on iron-based blood and won't do anything to
help with bloodloss for species who rely on different blood types.
(Roundstart this applies only to Ethereals)
- All blood logic has been moved away from the blood reagent itself into
a blood element that is assigned to the blood reagent by default, and to
any reagent that's drawn from a mob as their "blood" (in
``transfer_blood_to``). This means that blood you draw from lizards will
be green and have lizard's blood description instead of mentioning red
blood cells, Ethereal "blood" will actually contain their DNA and genes,
etc.
- Refactored all blood decals. Blood states are no more, everything is
now handled via blood DNA. Credits to MrMelbert and Maplestation, as a
significant amount of code has been taken from
https://github.com/MrMelbert/MapleStationCode/pull/436 and many of his
followup PRs. Oil and xenomorph splatters are now subtypes of blood,
blood drying is now animated, blood trails now curve and can be
diagonal.
- Rewrote bloodysoles and bloody_spreader components, credits to Melbert
again for the former, while latter now makes more sense with its
interactions. Bloody soles no longer share blood DNA with your hands.
- Ported Melbert's bloody footprint sprites and bot-blood-spreading
functionality.
- Removed all species-side reagent interactions, instead they're handled
by said species' livers. (This previously included exotic blood
handling, thus the removal)
- Slightly optimized human rendering by removing inbetween overlay
holders for clothing when they're not needed.
- Blood-transmitted diseases will now get added to many more decals than
before.
- Cleaned up and partially refactored replica pods, fixed an issue where
monkeys/manipulators were unable to harvest mindless pods.
- Exotic bloodtype on species now automatically assigns their blood
reagent, without the need to assign them separately.
- Clown mobs now bleed (with colorful reagent instead of blood during
april fools), and so do vatbeasts (lizard blood)
- Implemented generic procs for handling bleeding checks, all sorts of
scanners now also correctly call your blood for what it is.
- Podpeople's guts are now lime-green like their organs, instead of
being weirdly greyish like their water-blood. (Their bleeding overlays
are still grey, as they're bleeding water)
- Slimepeople now can bleed. Their jelly is pale purple in color, but
their wound overlays copy their body color.
- Injecting/spraying/splashing/etc mob with a reagent preserves its
data, so you could theoretically recycle fine wines from someone's
bloodstream
- Fixed burdened chaplain's sect never actually giving a blessing when
applying effects, and giving a blessing when nothing can be healed.
Inverted check strikes again.

- Closes #91039 

#### Examples

A lot of blood here has dried, visually the blood colors are almost
exactly the same as before either of the blood refactors.


![dreamseeker_BSP7FE9pRB](https://github.com/user-attachments/assets/45711fa0-ae65-4ec2-9e89-753fa7dd876f)

![dreamseeker_zyv9ssh5VN](https://github.com/user-attachments/assets/7b112854-b7e3-4bfe-b78b-199a55b5b051)
2025-05-31 19:38:07 -05:00
Jeremiah
9db2f6916b Sets prettier to run on the repo (#91379)
## About The Pull Request
Prettier (an auto formatter) is set to only run within the tgui folder
currently. This removes that limitation, allowing it to automatically
format all supported files in the repo (.js, .html, .yml
[etc](https://prettier.io/docs/))

I made a few exceptions for bundled and generated files
## Why It's Good For The Game
I'm of the opinion that code should look uniform and am lazy enough to
want CTRL-S to format files without having to think beyond that
## Changelog
2025-05-29 21:23:59 -07:00
John Willard
793853a2d4 Moves info buttons to the Escape menu (#91234)
## About The Pull Request

This is my second contribution to the move towards removing the stat
panel (first one being https://github.com/tgstation/tgstation/pull/90572
)

This moves the info buttons at the top right of the game's screen
(Changelog, Rules, Wiki, etc) to the Escape menu, except for Fullscreen
which is now a pref instead. This means you can set Fullscreen to be on
permanently and every launch will automatically fullscreen you (the
viewport will be a little off because it only fixes it once
initialization is complete). This follows through rounds and auto
updates if you set your game to fullscreen with the OOC button or F11,
so players will learn about the pref after playing a round with
fullscreen enabled.

What the game now looks like

##### Alt ideas for sprites: Changelog can be a newspaper and Forums can
be a newscaster


https://github.com/user-attachments/assets/7871a226-1e0b-410d-a690-88f3616bebb0

This is something I wanted to do since the Esc menu was added but just
never got around to it, but here it is.

## Why It's Good For The Game

These buttons don't warrant being in the player's face 24/7 and since
we've want to remove the stat panel and this has to be somewhere, I
thought it would be a better fit in the Escape menu. It helps make the
Esc menu the tool players use to access their OOC tools and overall I
think improves the appearance of the game's screen to something more
like an actual game would look like, especially when our comparison is
SS14.

## Changelog

🆑
qol: Info buttons previously at the top right of your screen (Changelog,
wiki, forums) is now in the Escape menu.
qol: Fullscreen is now a preferences and will follow you through rounds.
/🆑
2025-05-29 18:25:33 -07:00
Ben10Omintrix
9765cccc34 weasels (stoats) (#91030)
## About The Pull Request
adds stoats to the game! 

![stoatsss](https://github.com/user-attachments/assets/d22a5041-3249-40f4-8599-229c72dc4a19)

these are relatively friendly animals u can find in maints. they'll hunt
down mice and other smaller vermin (making them a janitor's best friend)
,and are nimble enough to crawl through pipes. They also love stealing
things as they will drag random objects they find lying around them.
additionally, you may find disposal bins that are shaking, this means
there's a stoat inside rummaging it for food. clicking eject or throwing
anything in the bin will cause the stoat to immediately jump out scared.
u can also tame them by feeding them eggs or dead mice.

## Why It's Good For The Game
further expands the mob pool of maints, establishing some sort of
ecosystem.

## Changelog
🆑
add: added stoats to the game
/🆑
2025-05-27 18:16:21 +02:00
Bloop
cb51a652a9 Adds automatic GAGS icon generation for mapping and the loadout menu (#90940)
## About The Pull Request

Revival of https://github.com/tgstation/tgstation/pull/86482, which is
even more doable now that we have rustg iconforge generation.

What this PR does:

- Sets up every single GAGS icon in the game to have their own preview
icon autogenerated during compile. This is configurable to not run
during live. The icons are created in `icons/map_icons/..`
- This also has the side effect of providing accurate GAGS icons for
things like the loadout menu. No more having to create your own
previews.


![FOuGL6ofxC](https://github.com/user-attachments/assets/e5414971-7f13-4883-9f7f-a8a212b46fe8)

<details><summary>Mappers rejoice!</summary>


![StrongDMM_1oeMSoRHXT](https://github.com/user-attachments/assets/83dcfe4c-31be-4953-98f3-dff90268bbc4)


![StrongDMM_uyqu3CggPn](https://github.com/user-attachments/assets/7896f99e-2656-40e1-a9da-3a513882365a)

</details>

<details><summary>Uses iconforge so it does not take up much time during
init</summary>


![dreamdaemon_u4Md3Dqwge](https://github.com/user-attachments/assets/17baaff8-5d5e-4a4d-ba8f-9dd548024155)

</details>

---

### Copied from https://github.com/tgstation/tgstation/pull/86482 as
this still applies:

Note for Spriters:

After you've assigned the correct values to vars, you must run the game
through init on your local machine and commit the changes to the map
icon dmi files. Unit tests should catch all cases of forgetting to
assign the correct vars, or not running through init.

Note for Server Operators:

In order to not generate these icons on live I've added a new config
entry which should be disabled on live called GENERATE_ASSETS_IN_INIT in
the config.txt


## Why It's Good For The Game

No more error icons in SDMM and loadout.

## Changelog

🆑
refactor: preview icons for greyscale items are now automatically
generated, meaning you can see GAGS as they actually appear ingame while
mapping or viewing the loadout menu.
/🆑

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2025-05-24 15:21:02 -07:00
Nick
6094f8a522 Fix manifest sql again (#91185)
This one will work this time I swear
2025-05-17 12:51:00 -07:00
TiviPlus
d53fb89b86 Keyboard presses (and thus keybindings) will now report the turf the mouse was over when a player presses or releases a key (#90480)
## About The Pull Request

Semi WIP cus I need to probably make an issue report for lummox, but
apart from that ready for review

Uses the new mouse-pos so we can combine it with screen size and size to
estimate very accurately the mouse position in turf terms. In future
also will need to add a way to continously poll the users mouse pos but
this alone is very useful

## Why It's Good For The Game

This isnt used yet, but the benefits are pretty damn obvious (hitting E
and dashing towards where your mouse??? 1990s features?????)

## Changelog
🆑
refactor: Added the possibility for keybindings to report the turf they
clicked on.
/🆑

---------

Co-authored-by: TiviPlus <572233640+TiviPlus@users.noreply.com>
2025-05-16 22:03:01 -07:00
SmArtKar
29d9626d3d Corrects mining export names on icebox (#91145)
## About The Pull Request

Closes #90666, converts minetypes to defines, gives icebox a minetype
define which could also be used later to give mining suits some fur or
something.

## Changelog
🆑
fix: Icebox artifact exports no longer claim they're from a lava planet
/🆑
2025-05-16 15:27:49 -06:00
Holoo
0631f197ba Admin supply pod fixes (#90744)
## About The Pull Request
Closes https://github.com/tgstation/tgstation/issues/81140
Closes https://github.com/tgstation/tgstation/issues/72342

Fixes presets, custom explosions, partly fixes tooltips (they are
completely broken and some positions don't work at all if text is too
long)
Fixes always failing sound length check and fall sound timing
Adds small preview box for preset color button
Adds 5th variable to custom explosion size: flash range
Adds flash range to admin logs
 

![image](https://github.com/user-attachments/assets/e9068987-4f21-438d-9951-58230cbe0f88)
## Why It's Good For The Game
Less bugs (rip moths)
## Changelog
🆑

fix: fixed presets, custom explosion, fall sound in admin supply pod
admin: admin supply pod now can have flashy explosion, set it via custom
explosion button. Added flash range to admin logs

/🆑
2025-05-16 11:17:19 -07:00
SmArtKar
352c7ecdd7 Refactors ITEM_SLOT_BACKPACK and ITEM_SLOT_BELTPACK out of inventory code (#90869)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request

So yesterday I've spotted that we had wrong SLOTS_AMT value set, and
went a bit down a rabbit hole and found how abhorrent our
ITEM_SLOT_BACKPACK and ITEM_SLOT_BELTPACK usage is. They're not real
inventory slots, but just "hints" at items being located in backpacks or
belts, or instructions to put an item into a belt/backpack. This PR
rewrites all usages of them as "hints", and adds an equip_to_storage
proc used to equip an item into a storage positioned in a certain slot,
so ``equip_to_slot_if_possible(item, ITEM_SLOT_BACKPACK)`` is now
``equip_to_storage(item, ITEM_SLOT_BACK)``

## Why It's Good For The Game

Its really stupid and we shouldn't have those as slot flags,
ITEM_SLOT_HANDS at least makes sense but those two are just absurd.
Should make equipping things into non-backpack storage a bit easier too,
in case we end up going through with the idea of suit/uniform pockets
being a major part of player inventory.

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and its effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑
refactor: Refactored how backpack and belt contents are handled in mob
inventory code, report any issues with lingering item effects or
inability to equip things into them!
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
2025-05-15 01:07:41 +01:00
Nick
65cd441cdf Fixes manifest SQL logging (#91125)
I forgor a column assignment :\
2025-05-13 09:57:29 +12:00
Nick
4e16eb111d Adds logging of the station manifest to the DB (#90993)
## About The Pull Request
This adds a `manifest` table to the database, basically a databasified
version of the `manifest.txt` log.

## Why It's Good For The Game
This is less of a game feature and more of an admin & Statbus tool. We
currently do not have a good way to see who played which character in a
given round. This aims to fix that.

~~Drafted because I'm not sure on some of the typecasting for the
`special` and `latejoin` columns, I would like someone to give that a
once-over.~~ We good.
2025-05-10 15:54:19 -07:00
RengaN02
7bb71d38fd Crimes are now logging in db (#90948)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request

Crimes are now logged in db

Logging: 

![image](https://github.com/user-attachments/assets/6eee470d-863a-4f68-9836-04a0a0079aa2)

<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->

## Why It's Good For The Game
idk
we logging citations but not crimes, and i wanted to log the crimes too
<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and its effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑 Rengan
server: The crimes are now logging in the database.
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
2025-05-10 12:17:20 -07:00
Lucy
37ec7f8054 Changes all uses of notify_ghosts to use the real names of mobs (#90919)
## About The Pull Request

Quite simple - this changes every direct mention of a mob in a
`notify_ghosts` message to use `[mob.real_name]` instead of just `[mob]`

## Why It's Good For The Game

makes things less confusing - ghosts can see easily their actual
identity anyways, so it's not like there's much of a reason _not_ to do
this.

## Changelog
🆑
qol: Ghost notifications will now use the real names of mobs when
something happens (i.e no more "Unknown has completed an ascension
ritual!")
/🆑
2025-05-08 00:48:52 +00:00
John Willard
400e6c15e4 webmap is now in maps.txt instead of a config entry (#90821)
## About The Pull Request

Currently the button to open a map in webmap is tied to a config entry,
which would then take the name of the map being played and get the link
to that, however for cases like new/tested/admin uploaded maps where
there is no webmap available, this would still have a link to a url that
doesn't exist.
Instead, we'll make the webmap link be in ``maps.txt``, same as
feedbacklink.

## Why It's Good For The Game

Explained in the about section, this prevents webmaps appearing for maps
that aren't supposed to have a webmap link available.

## Changelog

Nothing player-facing, webmaps aren't currently used (afaik) currently
cause they're broken for tg codebases.
2025-05-06 20:12:44 +00:00
Ben10Omintrix
a708c8e8da snails (#90505)
## About The Pull Request
adds snails to the game

![image](https://github.com/user-attachments/assets/f1745795-695f-443a-827e-1f1987d4fdb6)

these are harmless critters you can find in maints. they love eating all
variety of fruits, and are gravitated towards snail people, where
they'll dance around them.

you can also pick them up and put them on your head.

finally, you can also grab them and put them in hydrotrays (they will
swim around in it very slowly). they'll help ur plants grow as they act
as natural weed-repellants, as they'll eat weeds that grow in trays.

![image](https://github.com/user-attachments/assets/512f0974-d0d1-4f90-a540-c03d1c969328)


## Why It's Good For The Game
there's not that many mobs you can usually find in maints, currently
there's only mice and cockroaches, this helps expand the pools a bit.

## Changelog
🆑
add: adds snails to the game. (keep them away from salt!)
/🆑
2025-05-05 13:29:14 +01:00
SmArtKar
963ca5b1ee Cult Master title is now granted to the most experienced cult player, improvements and fixes (#90824)
## About The Pull Request

When the cult roundstart ruleset is picked, the most experienced cult
player is granted the cult Master title instead of it being determined
by voting. They can pass the role onto another willing cultist by using
an action once. Fixed cult masters not receiving their large speech
(instead not having any text spans whatsoever) and the Eldritch Pulse
spell being not usable whatsoever. Mark Target now displays an arrow
similar to heretic's living hearbeat to all cultists upon being cast.
This is a commission by Improvedname, but I do stand by the ideas
myself.

## Why It's Good For The Game

Cult Master, since its very inception, has been used for one thing and
one thing only - casting Final Reckoning on the summon rune by whoever
got to the area first and quickly used the vote that the cult reserved
for the finale. This results in other spells almost never being used, as
can be seen by the fact that one of them has been broken for the past 2
years. This change should make cult master more of a commander role akin
to how nuclear operative leader works, and make them a valuable target
for non-cultists to hunt down as they'll be present since roundstart.

## Changelog
🆑
add: Cult Master is now assigned to the player with most hours as a
cultist upon roundstart, instead of being votable.
add: Cult Masters can transfer their role once.
balance: Mark Target now gives all cultists a noticable directional
indicator, similar to heretics' living hearbeat
fix: Fixed cult master's broken speech spans
fix: Fixed Eldritch Pulse not working
/🆑
2025-05-05 00:30:34 +10:00
LemonInTheDark
f3f566271f Updates individual telecomm machines to autolink/operate properly cross zs (#90747)
## About The Pull Request

I thought I fixed this a while back with changes to signals and such
(#76360), but I failed to handle machine to machine interaction and
autolinking properly which broke behavior. Mildly hard to test but it...
should? work better now. I don't think I've missed something but it is
possible.

[Unfucks telecomms_list, mild code quality
stuff](cc8316d523)

[cc8316d](cc8316d523)

GLOB.telecomms_list proported to hold just /telecomms machines but it
WASN'T, we stuffed message computers in there too to make references a
bit easier to clean.

This fixes that, handling them instead with a one to many pattern. I've
also renamed a few things (most prominently GLOB.telecomms_list ->
GLOB.telecomm_machines), and unindented an if check that was essentially
dead code. Also killed a really messy define and replaced it with a
proc.

## Why It's Good For The Game

Mapper asked for it, really should have done this years ago but we
didn't have a usecase for it.

## Changelog
🆑
fix: Tcomms machines will interoperate across z levels in the same
"stack" as expected now
/🆑
2025-04-28 15:47:50 +01:00
Ghom
093bf3d978 Fishing lures box peeve (#90741)
## About The Pull Request
This fixes a small excerpt from #90678: 
>"[...] double-examining it to see what extra items it can hold
(normally all lures) only reports the Artificial Minnow as fitting."

By making it use subtypesof instead of typesof for purpose of spawning
lures and making the minnow its own subtype.

## Why It's Good For The Game
Fixing a mild botherance.

## Changelog

🆑
fix: Examining a fishing lures box twice no longer says it can hold just
artificial minnows.
/🆑
2025-04-28 15:44:14 +01:00
John Willard
380c143431 Adds map feedback thread support (AI stat panel buff) (#90506)
## About The Pull Request

This PR started with the idea of adding support for map feedback
threads, which I added to the roundend report, escape menu, and stat
panel. To do this though I had to make pretty annoying changes to the
stat panel and had to touch every single time something to the stat
panel was added, so since we now have a way to have links in the stat
panel I thought of taking full advantage of it and add some QOL.

AIs can now track their borgs by clicking their status on the stat panel


https://github.com/user-attachments/assets/1789dc46-5d12-48e9-bb8d-d3278aa19639

With Melbert's comment, I added another stat panel entry that directs
you to the Webmap page, which currently seems to be a little messed up
(https://github.com/AffectedArc07/SS13WebMap/issues/41 &
https://github.com/AffectedArc07/SS13WebMap/issues/42) but if they get
fixed this would be a swag asf feature

##### Code bounty for Ezel/Improvedname

## Why It's Good For The Game

Feedback threads was a suggestion from a player and is fully in control
of admins as an optional thing, and while we still have stat panel I
think it's nice to be able to take advantage of its features.

## Changelog

🆑
admin: Admins can now link a URL for maps, used to give feedback on said
maps. Accessible through the roundend report, escape menu, and stat
panel.
qol: AIs can track their borgs by clicking on them in the stat panel.
qol: You can now directly go to the webmap of maps from the stat panel
(assuming it's set in config).
/🆑
2025-04-21 17:20:41 -07:00
MrMelbert
32d04164c4 Adds Common Second Language quirk, tweaks to partial understanding (#90614)
## About The Pull Request

- Tweaks partial understanding. 

Paragraphs are now split into sentences first creating more natural
breaks between sentences.

- Adds "Common Second Language" quirk

This quirk changes your default understanding of common (up to) 90%
(your choice), meaning you drop the occasional word.


![image](https://github.com/user-attachments/assets/63e9d67b-7db2-4d23-9d0f-bae175962db4)


![image](https://github.com/user-attachments/assets/840ef391-5126-4ba7-9298-804686bcd6df)

Additionally, when your sanity drops below a threshold, you become
forced to speak your native language, albeit with a partial
understanding applied for everyone else.

Incompatible with similar language quirks + can't be taken by humans
(yet?)

## Why It's Good For The Game

Just a fun way to play around with the new "partial understanding"
system.

## Changelog

🆑 Melbert
add: "Common Second Language" quirk
qol: Language translations chunk sentences together better, making
partial understanding a bit easier to parse.
/🆑
2025-04-21 04:18:05 +01:00
John Willard
1c540bd546 Configurable events (removes mult config) (#90659)
## About The Pull Request

As said in https://forums.tgstation13.org/viewtopic.php?t=38517 - Admins
don't want to touch the event multiplier configs because,
``for example changing the mult to 1.5 would make heart attack only roll
on 60+ pop``

and ends with;
``it would be better to make a pull request to the codebase and alter
the min_player var on the events that are issues``

So why not let ALL events be editable by admins?
This PR makes every single event possible to be edited, though the json
only comes with the non-wizard non-holiday ones (though they are totally
addable if admins want to put it in, I just didnt think we should make
it obvious it's possible so they DONT)

The config is off by default (no effect regardless since I have it the
same as code-side).

## Why It's Good For The Game

The multiplier config is rendered irrelevant by instead being able to
tweak the individual events to your liking, especially when one touch of
that causes certain events to be rendered never runnable.
This is (sorta) an admin request, and it also makes event rarities and
such an admin issue, therefore not our problem anymore (mostly), wahoo.

Get FUCKED, Grid Check!

![image](https://github.com/user-attachments/assets/ff4314b5-4404-4f8e-905d-2d4824f8aa71)

## Changelog

🆑
config: Removed event time/weight multipliers, now all events vars are
editable in config.
/🆑

---------

Co-authored-by: CRITAWAKETS <sebastienracicot@hotmail.com>
2025-04-21 03:06:58 +02:00
John Willard
90f019fe81 player hud stays post roundstart, has more info (#90632)
## About The Pull Request

Once the round starts, the TV's text shows the current map, how much
time it is in-game, how many players are connected, and what the
overflow job is (if the station trait is on). video as demonstration but
the overflow text has changed to "[job] overflow" instead of "Overflow
job: [job]"


https://github.com/user-attachments/assets/fe74b28b-06de-4827-9c4d-ca2e51f1e0b9

Closes https://github.com/tgstation/tgstation/issues/90651

## Why It's Good For The Game

Gives useful info on the TV instead of having it just magically
disappear (which currently doesn't work cause I forgot to deactivate it
on initialize for latejoiners) which will become more useful if the stat
panel is removed. Also makes overflow job more obvious, the TV is just a
good place to put info useful for new players though round time
personally was just put there to make the TV feel more full.

Wanted to put this in the original PR but wanted to try to match parity
to the stat panel in case this wasn't wanted.

## Changelog

🆑
qol: The TV on the title screen has round info once the round has
started or ended.
fix: The TV now fits on non-widescreen screens.
/🆑
2025-04-21 03:02:04 +02:00
Cirrial
85552b6c71 Fix: EMERGENCY_SHUTTLE_AUTOCALL_THRESHOLD now actually calls the shuttle (#90647)
## About The Pull Request

There's a function to call the shuttle when a proportion of the crew
die. This functionality is probably not turned on on actual tgstation
servers but it is a configurable option for people hosting their own
forks and whatnot to use.

However, while this works, it doesn't actually call the shuttle, as it
seems to require the time remaining for the shuttle to arrive to be
greater than 4 minutes, which, as the shuttle hasn't been called, the
time remaining is 1 second (the fallback value for when it's not in
transit). So it never calls.

(The fix I have here was suggested to me by someone else in the Discord
coding channel so I can't take full credit for it.)

## Why It's Good For The Game

It's good for the automatic shuttle call to call the shuttle

## Changelog
🆑 Kapu1178, Cirrial
fix: The server-configurable shuttle call when enough of the station
dies will now actually call the shuttle.
/🆑
2025-04-20 09:01:25 +02:00
LT3
40f644d6d4 Preference menu buttons are disabled until subsystem initializes (#90685) 2025-04-18 22:00:32 +00:00
SmArtKar
13a3d24984 Fixes weather getting stuck and not affecting mobs (#90691)
## About The Pull Request

Weather subsystem code mixed up defines and indexes resulting in broken
behavior when you only had mobs and thunder defined in a subsystem.
Solved this by converting currentpart from define to active task index

Closes #90677

## Changelog
🆑
fix: Ash storms do damage again
/🆑
2025-04-18 11:29:53 -04:00
SmArtKar
71a4f3a83f [MDB Ignore] Updates visuals for the loadout menu (#90399)
## About The Pull Request

Improves how the loadout menu looks by switching it to the new
ImageButton component, converting recolorable/reskinnable to use icons
with tooltips, and allowing items within a category to be grouped up
together (only used by pocket items as of now)

<details>

<summary>How it looks:</summary>


![image](https://github.com/user-attachments/assets/3ed434cc-5caf-4cd5-b289-76f1946282cd)


![image](https://github.com/user-attachments/assets/bb33e6a4-75c4-4eb5-8e83-2ed9f6853e64)

</details>

Monocles have been made prescription, and prescription, contains pens,
hair color, and other misc tags have been removed.



<details>

<summary>Additionally, plushies now have better baked-in sprites for
loadouts, with randomized lizard plushie receiving a coat of rainbow
paint in place of the removed tooltip.</summary>


![image](https://github.com/user-attachments/assets/ea3124ae-53aa-4eb5-bb27-bde6140b4222)

</details>

## Why It's Good For The Game

Blue button make it hard to figure out details on certain items, and
tiny grey text is borderline unreadable. Also our pocket items category
is horribly bloated.

## Changelog
🆑
qol: Redesigned the loadout UI
balance: Monocles now work as prescription glasses
image: Loadout plushies no longer use mapper previews for their images
/🆑
2025-04-17 09:25:06 -07:00
Iajret
e449146428 adds auto-updating for status display image on alert level change (#90602) 2025-04-15 11:22:06 +02:00
Timberpoes
69f491a009 Job assignment code at round start now properly respects any overflow caps set in the config files. (#90612) 2025-04-15 11:21:01 +02:00
Nick
1196287662 Adds the ability to link forum accounts (#90441) 2025-04-13 23:57:16 -06:00
Bloop
d71375eafd Adds some trailing commas to lists (#90501)
## About The Pull Request

I heard you liked commas.

## Why It's Good For The Game

Trailing commas make everyone happy!

## Changelog

Nothing anyone will notice besides downstreams adding to these lists
2025-04-13 20:35:39 -04:00
MrMelbert
67dd51be79 Reworks language translations. Add partial language understanding. Bilingual update. (#90252)
## About The Pull Request

Fixes #89445 (well, technically. It fixes the bug associated but these
`say`s should really be emotes.)

Three things:

1. Reworks how language translation works.

Rather than scrambling a sentence into a language entirely, sentences
are now scrambled on a per-word basis.

Additionally, the 1000 most common words of a language are *never*
re-scrambled across the duration of a round. Once it's set it's set in
stone.

Example: (Sample / Old / New)


![image](https://github.com/user-attachments/assets/69be41fa-bc40-45f0-bd80-e24e799c9f38)

This allows for a number of things:

- More consistent translations, making it (more) viable to actually
"teach" someone words for something
- Maintaining emphasis such as caps (but not `||`, `++`, or `__` - at
least not yet)
- The following:

2. Adds partial language understanding

Some languages can understand portions of other languages.


![image](https://github.com/user-attachments/assets/b6eee2c7-f564-437b-8c7a-bd1d88a9b680)

This pr adds the following:
- Those who understand Beachtongue can understand 50% of Common and 33%
of Uncommon words.
- Those who understand Common can understand 33% of Beachtongue and 20%
of Uncommon words.
- Those who understand Uncommon can understand 20% of Common and 20% of
Beachtongue words.

3. Bilingual quirk has been expanded to accomodate these changes.

There are now two more preferences:
- Language Speakable
- You can toggle this, so you only understand the language, rather than
understand AND speak.
- Language Skill
- If you choose to be unable to speak the language, you can set how much
of the language you can understand, down to 10%.

## Why It's Good For The Game

Playing around languages is fun, but due to the way our translation
works, ALL context is immediately lost for what the other person may be
saying.

If the other person is shouting in all caps? Output language is normal
chatting. This is lame!

Even if someone is unable to understand you, there's a LOT you can
convey just by how you speak, and getting that across in game is quite
difficult when all translations get mauled so badly.

So this changes that. 

- Emphasis like caps lock is maintained, so you see someone shouting in
caps in a foreign language you can probably intuit something is wrong
(but not what is wrong!)
- Some languages can gleam bits of other languages, so you MIGHT be able
to pick out context if you pay close attention
- "Brother" languages will now feel more like "brothers" and not
completely divergent
- You can even "teach" someone words in your language - at least the
most common words! (Until next round)

## Changelog

🆑 Melbert
add: Languages can now have partial understanding of other languages.
More common English words are more likely to be mutually understood.
add: Those who understand Beachtongue can understand 50% of Common and
33% of Uncommon words.
add: Those who understand Common can understand 33% of Beachtongue and
20% of Uncommon words.
add: Those who understand Uncommon can understand 20% of Common and 20%
of Beachtongue words.
add: Bilingual quirk: You can now choose between being able to speak or
not speak the language
add: Bilingual quirk: You can now choose to have partial understanding
of your language, rather than full.
qol: If you speak in ALL CAPS in a foreign language, the translated
words will also be ALL CAPS.
qol: Many more forms of punctuation are now conveyed across
translations.
qol: The 1000 most common English words will now never be scrambled when
translating into other languages for the duration of the round. This
means you can actually "learn" some words if you are especially
attentive! (Until the next round at least)
refactor: Refactored language translations. Report if you see any super
odd looking translations.
fix: Force-says forcing you to speak common (such as cult invocations)
will now correctly force you to speak common (even if you don't know
common)
/🆑
2025-04-13 22:01:33 +01:00
Joshua Kidder
98135b69dc Subsystems meant to represent/handle in-game networks moved under their own subfolder ( no code changes ) (#90561)
## About The Pull Request

While working on another PR, I noticed that there wasn't any real
distinction between subsystems that function as a network for various
logical components/systems in the code, and subsystems that are meant to
represent what is actually an in-game network. As such, I moved what
seemed to be clear representations of the functions of in-game networks
under their own subfolder.

This should have no effects otherwise.
## Why It's Good For The Game

Per an .md I added in the folder, it helps to clearly demarcate what are
backend programmatic networked systems, and what are meant to actually
be a network in the game itself; the radio jammer disrupts your suit
sensors and headset, not your signal relationships with DCS, and I
believe having that distinction be clear at a glance of the file
structure is valuable.
## Changelog
🆑 Bisar
code: Subsystems that are meant to represent a network in-game have been
moved into their own category inside the codebase.
/🆑
2025-04-13 14:19:51 -06:00
John Willard
6ff440bbc2 Lobby info is now part of the hud instead of stat panel (#90572)
## About The Pull Request

Removes ``/mob/dead/get_status_tab_items()``, replaces it with a lobby
hud icon showing the same information

TV sprite made by Kryson, scanline and static taken from ``effects.dmi``
which I then blew up to fit the size.


https://github.com/user-attachments/assets/99733ae6-c596-42b1-bcae-d1a8d8f094c3

## Why It's Good For The Game

I want to try to remove as much reliance from the stat panel as possible
so we can hopefully remove it, as it takes up 1/3 of the screen for
nothing.

## Changelog

🆑 Kryson, JohnFulpWillard
qol: Lobby info is now on the title screen rather than being hidden in
the stat panel.
/🆑
2025-04-13 14:18:37 -06:00
Bloop
9879cdc604 Fixes persistent paintings load order (#90515)
## About The Pull Request

Persistent paintings should be loaded after persistence itself

## Why It's Good For The Game

Bugfix confirmed to be working (test merging this fix live currently).

## Changelog

🆑
fix: fixes persistent paintings not loading
/🆑
2025-04-09 23:24:31 -06:00
John Willard
b25d7cb2cb Adds a sports betting/polling app (#90421)
## About The Pull Request

Adds a new PDA app that allows you to create polls that people can bet
on with credits, the owner can then lock the bets, decide what the
answer is (up to the player for whatever poll they made), and send it
off, giving the money the losers bet into the accounts of the winners.

It's a small PDA app that currently doesn't make any announcements or
come preinstalled in anything, but that's subject to change. PDA screen
sprite is codersprited.

Video demonstration


https://github.com/user-attachments/assets/449e1f0b-7fd3-4948-bff8-2793af831360

Not shown (as I added later), it now uses newscasters as well.


![image](https://github.com/user-attachments/assets/d3defa60-03cc-4557-98b7-b4088b158b3d)

###### Code bounty of
https://forums.tgstation13.org/viewtopic.php?t=38278

## Why It's Good For The Game

Allows people to host polls for station events, allowing for the SS13
version of sports betting.

## Changelog
🆑
add: Adds a new sports betting app on your PDA, you can now host and
vote on polls using in-game credits.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2025-04-09 22:27:28 -06:00
Lucy
80d9dd7119 Fixes to_chat never actually queuing (#90461) 2025-04-08 11:29:06 -06:00
SmArtKar
8d3001a0eb Fixes runtimes caused by energy bolas (#90469)
## About The Pull Request

Certain throw impact callbacks, like those on energy bolas, could cause
the object to get deleted, which would make throwing datums runtime
because they didn't account for it.

## Changelog
🆑
fix: Fixed runtimes caused by energy bolas
/🆑
2025-04-08 16:30:02 +02:00
Tim
36788ee05f Weather DLC - Make it Rain Anything! (#89550)
## About The Pull Request
##### Disclaimer - Some of the code/icons/sounds were ported from TMGC. 

Introducing more weather types! And yes, you can now have rain be
reagent based!

<details>
<summary>Regular Rain</summary>


![dreamseeker_9S1WzdBW8Z](https://github.com/user-attachments/assets/83aaa1fe-9105-4e15-8455-0337c5c592ef)

</details>

<details>
<summary>Blood Rain</summary>


![dreamseeker_SZufAoXDFt](https://github.com/user-attachments/assets/209404dc-34dd-4381-9bab-9b84eaec2658)

</details>

<details>
<summary>Acid Rain</summary>


![dreamseeker_ngiOqdB5n2](https://github.com/user-attachments/assets/0ab953c6-a215-444a-bdbd-addfc2b1ddbb)

</details>

You can even make it rain ants, plasma, or drugs. All of their effects
get applied to turfs, objects, and mobs depending on the weather options
you select.

Did I mention... there is thunder?

<details>
<summary>Thunder Strikes</summary>

![Untitled video - Made with
Clipchamp](https://github.com/user-attachments/assets/7c5c5930-6e0a-4706-a41b-3cbcc277bfd5)

</details>

<details>
<summary>Sand Storms</summary>


![dreamseeker_ZEFUS73dSA](https://github.com/user-attachments/assets/4a754f2d-c4e5-4b2f-9add-4742628cfa74)

</details>

Despite all this new stuff, none of it has been directly added to the
game but the code can be used in the future for:
- Wizard event - Similar to lava on floor, but this time make the
reagent random or picked from a list and give wizard immunity
- Chaplain ability - Maybe make this a benefit or ability once enough
favor has been obtained
- Admin events - I have added a BUNCH of admin tooling to run customized
weather events that let you control a lot of options
- New station maps/biomes for downstreams (Jungle Station, etc.)
- Change Ion storms to use the new weather system that triggers
EMP/thunder effects across the station
- IceBox could get plasma rain
- Lavaland could get thunder effects applied to ash storms

Relevant PRs that removed/added some of the weather stuff I used:
- #60303
- #25222

---

#### Attribution
- Rain sprites were added via [novaepee](https://github.com/novaepee) in
https://github.com/tgstation/TerraGov-Marine-Corps/pull/9675
- Sand sprites were added via [TiviPlus](https://github.com/TiviPlus)
(who commissioned them from bimmer) in
https://github.com/tgstation/TerraGov-Marine-Corps/pull/4645
- Rain sounds [already existed on
tg](https://github.com/tgstation/tgstation/pull/25222#discussion_r106794579)
and were provided by provided by Cuboos, using Royalty Free sounds,
presumed under default tg sound license - Creative Commons 3.0 BY-SA
- Siren sound is from siren.wav by IFartInUrGeneralDirection --
[Freesound](https://freesound.org/s/46092/) -- License: Attribution 4.0

The original `siren.ogg` sound used on a lot of SS13 servers doesn't
seem to have any attribution that I could locate. The sound was added
about 15 years ago. So I just looked for a somewhat similar sounding
siren noise on Freesound.

## Why It's Good For The Game
More weather customization!

## Changelog
🆑
add: Added new weather types for rain and sandstorms. Rain now uses a
reagent that gets exposed to the turfs, mobs, and objects. There is also
a thunder strike setting you can apply to any weather.
add: Hydro trays and soil will now add reagents to their trays when
exposed to a chemical reaction. (weather, shower, chem spills, foam
grenades, etc.)
add: Weather temperature now affects weather reagents and mobs body
temperature.
bal: Snowstorm temperature calculations were tweaked to allow universal
weather temperature effects.
sound: Added weather sounds from TGMC for rain and sirens (attributed to
Cuboos and IFartInUrGeneralDirection )
image: Added weather images from TGMC for rain and sand storms
(attributed to Novaepee and Bimmer)
refactor: Refactored a lot of the weather code to be more robust
admin: Admins can now control more weather related options when running
weather events. The weather admin verbs have been moved to their own
"Weather" category under the Admin tab.
/🆑

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2025-04-07 18:46:28 +02:00
Cruix
6a9ee3b1c6 Added additional layers to hairstyles (#90275)
## About The Pull Request

Added two new "layers" to hairstyles. The first draws on the normal hair
layer but resists being affected by hair masks unless a piece of
clothing really insists that it must mask it. The second draws on top of
the headwear layer and will ignore all hair masking, but will disappear
entirely if a piece of clothing covers the part of the head that
hairpiece originates from.

Each of these "Layers" (called "hair appendages" in the code) is
associated with a part of the head that it comes off of (left side,
rear, right side, etc.), which pieces of clothing can cover to prevent
those parts from being shown. For example, a Beret will allow a ponytail
to sprout off the back of a person's head and ignore the normal hair
mask, but a winter coat hood covers every part of the head except the
front, so it will hide the ponytail completely.

## Costs

Hairstyles that use this system require some extra icon blending, but
each hairstyle will cache the result of each blend whenever a new hair
mask is applied, so the extra cost only happens once. The cache will
also be used on hairstyles that don't utilize the additional layers, so
we should end up with less total icon blending over the course of a
round than we currently have.

Adds a new sprite layer, OUTER_HAIR_LAYER, to humans.

Changes hair masks from strings specifying an icon state to datums with
an icon state and a bitfield storing which parts of the head the
headware that uses them cover. The singletons for these datums are
stored in the SSaccessories subsystem.

Any hairstyle that uses this system will need 1-2 more icon states in
the human_face.dmi file. I currently have 32 hairstyles marked that
could reasonably use this system, about half of which use both
additional icon states.

## Images

Old system:

![before1](https://github.com/user-attachments/assets/c8e5827b-751f-4809-b7a4-d30a3b2aaa70)

New system:

![after1](https://github.com/user-attachments/assets/b25ca6e3-f5cd-4385-822e-29604a7d39ba)

![after2](https://github.com/user-attachments/assets/0b0c8007-42d5-42bd-a9b4-6bf7a7e1264e)

The new system is currently only implemented on the "Ponytail (High)"
hairstyle for demonstration and testing. I have a branch with the same
update for most similar hairstyles I can push if this is merged.

## Why It's Good For The Game

Hair masks are okay but they look really bad with some hairstyles. This
allows people who really care about their character's look to make their
hairstyles work with their favorite hats.

Potential for fixing #88886

## Changelog

🆑
add: Added a system to create hairstyles with multiple layers to allow
better interaction with hats and helmets
image: Added additional sprite layers to the Ponytail (High) hairstyle
/🆑

---------

Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2025-04-06 19:50:50 +00:00
Jeremiah
6e4eb7ab61 516 only tgui (#90397)
## About The Pull Request
oooooh boy, have I been waiting on this PR. It was one of the first
things I tried when I got into 516 alpha. With this, we shuffle off all
the polyfills that makes TGUI build like it's still on IE.

TGUI should look and function exactly the same.

1. updated webpack build targets
2. removed polyfills
3. removed trident references
4. removed trident-only storage
5. updated documentation
6. bumped yarn (sorry, this makes the file diff huge but it seems to be
required)
7. fixed some prettier warnings
## Why It's Good For The Game
TGUI builds without restraint. Smaller bundle size, smaller overhead
## Changelog

🆑
add: TGUI is now v6! No more internet explorer. All gloves are off, it's
running edge under the hood now. Report any issues to the github,
please. Yes, I look!
/🆑
2025-04-06 21:25:24 +02:00
Jeremiah
9f7eae046a Minifies tgui helpers (#90340)
## About The Pull Request
Instead of just writing out the helper functions and styles directly
inside tgui.html, this minifies them and injects them into the document
on tgui init. The result should be a smaller bundle and more manageable
code, with clear separation of page, style, and javascript
## Why It's Good For The Game
Minification is generally a small perf gain but I want to be clear that
I'm doing this 100% for organization & separation of concerns
## Changelog
N/A
2025-04-06 09:23:44 +12:00
FlufflesTheDog
5bc18586a7 System for restricting quirks based on species, no more blood deficiency on bloodless species (#90326)
## About The Pull Request
Quirks can now define if they're "species appropriate," where the base
proc's behavior is simply "does this species already have the quirk's
main trait"
I am unsure if that on its own imposes any new restrictions, currently.

Additionally, blood deficiency cannot be picked on any species without
blood or that doesn't breathe.
I'm sure there's more that might make sense, I'm open to suggestions

Alternative to #90238
## Why It's Good For The Game
Currently, reduces the possibility of taking something like blood
deficiency on a race which suffers no downside from it in order to get
free positive quirks.
Future-ly, potentially allows quirks exclusive to only a select few
species as offered by #90238
## Changelog
🆑
fix: Species without blood can no longer be blood deficient
/🆑
2025-04-05 19:42:52 +02:00
Watermelon914
6c017cf1e1 Refactors subsystems to use dependency-ordering to determine init order. Subsystems can now declare their own dependencies. (#90268)
## About The Pull Request
As the title says.
`init_order` is no more, subsystems ordering now depends on their
declared dependencies.
Subsystems can now declare which other subsystems need to init before
them using a list and the subsystem's typepath
I.e.
```dm
dependencies = list(
    /datum/controller/subsystem/atoms,
    /datum/controller/subsystem/mapping
)
```
The reverse can also be done, if a subsystem must initialize after your
own:
```dm
dependents = list(
    /datum/controller/subsystem/atoms
)
```
Cyclical dependencies are not allowed and will throw an error on
initialization if one is found.
There's also a debug tool to visualize the dependency graph, although
it's a bit basic:

![image](https://github.com/user-attachments/assets/80c854d9-c2a5-4f2f-92db-a031e9a8e257)

Subsystem load ordering can still be controlled using `init_stage`, some
subsystems use this in cases where they must initialize first or last
regardless of dependencies. An error will be thrown if a subsystem has
an `init_stage` before one of their dependencies.

## Why It's Good For The Game
Makes dealing with subsystem dependencies easier, and reduces the chance
of making a dependency error when needing to shift around subsystem
inits.

## Changelog
🆑
refactor: Refactored subsystem initialization
/🆑
2025-04-03 17:04:30 -04:00
Lucy
d653870a91 Refactor debugger and byond-tracy init (#90288)
## About The Pull Request

This refactors code related to debugger and byond-tracy
`/datum/debugger` and `/datum/tracy` - which live in the `GLOBAL_REAL`
vars `Debugger` and `Tracy` respectively.

This allows code related to those two to be grouped together in their
own files, rather than mashed into `world.dm` with a bunch of other shit
- while it still initializes during the same stages of init.

In addition, this also ports
https://github.com/BeeStation/BeeStation-Hornet/pull/8947, which prints
runtime errors to chat when the debugger is enabled.

<details>
<summary><h3>Proof of Testing</h3></summary>

![2025-03-27 (1743094986) ~
Code](https://github.com/user-attachments/assets/2678542f-8338-4ca8-9435-e0376da9e80a)
![2025-03-27 (1743095425) ~
Code](https://github.com/user-attachments/assets/35a1c454-c176-4fb9-987b-82eb92f0fd31)
![2025-03-27 (1743095936) ~
dreamseeker](https://github.com/user-attachments/assets/49f607dc-c684-4fd9-8271-a287f2341c52)
![2025-03-27 (1743096001) ~
Code](https://github.com/user-attachments/assets/8cca692c-6253-48e8-9994-beff39211078)
![2025-03-27 (1743096351) ~
dreamseeker](https://github.com/user-attachments/assets/43a993dd-3884-4709-94fc-d072ff97a337)

</details>

## Why It's Good For The Game

Reduces some `GLOB` pollution, and groups a bunch of related code into
dedicated files and datums.
It's simply cleaner.

Printing runtime errors to chat is also very useful, as it allows you to
see when shit is fuck, if you don't want a breakpoint pause for each
error.

## Changelog
🆑
refactor: Refactored some code related to initialization.
code: Runtime errors will now print to the chat while debugging.
/🆑
2025-04-02 17:38:49 -04:00
Y0SH1M4S73R
bfbdefce33 Tgui payload chunking (#90295)
## About The Pull Request

Dream Seeker will not send topic calls greater than 2kb in size. There
are cases where tgui will attempt to send `ui_act` payloads larger than
this, such as writing on paper. This PR takes payloads that would be
larger than 2kb, splits them into payloads that would be roughly 1kb
(after URL encoding), and sends them to the server in sequence. To
prevent abuse and/or topic spam, a config option has been added to put a
limit on the number of chunks for which the server will accept a
payload, defaulting to 10.

## Why It's Good For The Game

Fixes #90056, along with several other things that were affected by the
change to WebView2 in 516.

## Changelog

🆑
code: Any tgui message that would be too big to send to the server is
now split into chunks and sent in sequence. This fixes several issues,
such as...
fix: It is once again possible to save large amounts of text on paper at
once.
/🆑

---------

Co-authored-by: Lucy <lucy@absolucy.moe>
2025-04-01 13:12:03 -07:00