* Sideports a couple of init unit tests from Neb.
* Trying to unfuck initialize logic.
* Removing del()s.
* Adjusting return values to Initialize().
* Moving some dangerous object logic from obj onto the two types that use it.
* Rolling back some init changes and commenting out initialized atom unit test.
* this comment formatting is a minor war crime
* Removed sleep() from signaler circuit Initialize().
* Additional Init fixes post-rebase.
* Uncomments subsystem test since that's passing.
This adds throw_alert() and /obj/screen/alert, a system that allows you to do custom hud alerts for any variety of things from "You're too cold!" to mecha status indicators for the pilot.
There's quite a few things that actually got replaced; the
fire/oxy/tox/co2 alerts are all now just alerts, as is nutrition. There's also a number of new alerts, such as blindness, highness, legcuffed, buckled, handcuffed, and probably some more I missed; read code/_onclick/hud/alert.dm and see for yourself!
Additionally, a number of tweaks have been done to resisting code, to make it so that there's an indicator when you're buckled or handcuffed, and can just click the alert to start resisting. This includes a refactor that combines the logic for lockers, holders all into one proc, called container_resist().
Also, the health and internals indicator got moved down one tile each. Needed room for the alerts. If we add the oxygen tank action buttons from /tg/ and remove the internals indicator, the health indicator can go back where it was originally.
Alerts, pictured in the top right.

* Port ParadiseSS13/Paradise#2100 - Saycode refactor
* Removed unused old carbon slimes code
* Port ParadiseSS13/Paradise#5099 - Saycode part 2
* Ported ParadiseSS13/Paradise#7170's /datum/browser Check Known Languages
* Port ParadiseSS13/Paradise#9240 - Get rid of alt_name in favor of GetAltName()
* Port ParadiseSS13/Paradise#10330 - You can now use multiple languages in one message
* Addressed Atermonera's review.
Translators now print the full message if they find any languages within the
message that the user doesn't understand, minus languages it cannot translate.
Additionally, the combine_message proc has been significantly simplified
by eliminating an ugly tree structure with the help of a little helper
proc.
The removal of the extra span inside each piece doesn't seem to have
visually changed the messages in any other way than changing where the
wordwrap happens, strangely enough. Must be something in IE's code being
picky about invisible elements. On the bright side, it splits *later*
than it did before, thus reducing the lines a message will take up by a
tiny amount.
Also, a bunch of things now have the 'filter_say' class from
PolarisSS13/Polaris#6998. Since span classes with no definition are
totally valid and just don't do anything, this PR does **not** depend on
that PR being merged first.
* Always gotta be one
* Better notifications
* Add buttons to del/move tabs in edit mode
* Add a <span> to emotes
* Fix duplicate IDs in VChat and add more logging
* VChat: Redone chat output in Vue.js
* Ported tg asset cache
* VChat DME Update
* Replace \image macro with bicon()
* NanoUI Subsystem Fixes
Don't do this, the asset subsystem does this for you
* Allow narrate/globalnarrate shenanigans
Allows HTML if your entire thing is HTML
* Disable bicon() icon object cache, and create text tag cache
* Ore Scanner is written incorrectly
Only revealed by vchat
* Fixes 2 VChat bugs
* Underline links in VChat
* Fix LOOC color
* VChat Improvements
Hopefully, anyway.
- Arbitrary font size setting
- Line height setting
- Multiple crush settings
- Rewrote how tabs work hopefully for performance
- Hidden messages are actually put elsewhere
- Attempts to correct chat backlog restore on rejoin
* Surgery steps to use <span>
* Some VChat Tweaks
- Chat remains between client reconnects if your client didn't close (so things like using the reconnect button, or autoreconnects at round end when that feels like working)
- The client doesn't send pings to the server, the server sends pings to the client. This fixes AFK measurements for AFK kick purposes.
- Turn latency indicator into a green/red indicator to show if you're connected, and when clicked will perform a one-time ping (and block doing it again for 10 seconds). It will display '?ms' if it never got a reply, or '999ms' if it did, but it was over 1s.
* Include date in filename for VChat log save
* Merge pull request #6767 from Cyantime/patch-2
Change chat export naming scheme
* Adds VChat tab saving
Saves every time you enter/exit edit mode. Persists between rounds, VChat reloads via verb, etc.
* Fix chat exporting when someone has used unicode
Only affects clients still using 512
* Use CLIENT_FROM_VAR for ease of code reading
* Update code/modules/client/asset_cache.dm
Co-Authored-By: Novacat <35587478+Novacat@users.noreply.github.com>
* Fix runtime when client disconnects before vchat loads
* Fix polaris version of command reports
* Fix LOOC color in oldchat
* Put some styles in various adminpm messages
* Round info and advanced who spans
* Fix missing tag-end
* Maybe fix images for linux and statpanel but also doom everyone
Co-authored-by: ShadowLarkens <ShadowLarkens@users.noreply.github.com>
Co-authored-by: Novacat <35587478+Novacat@users.noreply.github.com>
Removes a very large amount of world loops.
Adds a macro to painlessly generate a global list, and the needed code to modify the list when an object is made or deleted automatically.
Cleans up some commented out code.
* adds cursed sword and 'haunted' object framework.
* fixes back.dmi conflicts
* adds cursed blade ghost pod
as well as fixing some ghost pod oddities
* fixes misc.dm conflicts
* adds cursed sword cave POI
* makes cursed sword use voice mob
as opposed to a brainmob
However, ghosts can now also only view objects in range to ensure that the NanoUI window count is kept low.
Admins do not suffer this restriction and may also interact with these windows.
Now applies fingerprints if the user is adjacent to a physical object, otherwise applies a hidden fingerprint.
CouldUseTopic() is only called when a user has successfully interacted with an object interface/UI.
Refactors how synthetics set their modules. On login, if appearance selection was initiated but not finalized, the selection options popup again. Fixes a long-standing issue of borgs being able to look like the standard module by loging out.
Ensures the syndicate agent IDs and syndicate borgs will always have the same initial access permissions.
Removes now unnecessary syndicate snowflake code from NanoUI.
Synths now utilize actual ids.
Ensures station bound synthetics will not be able to utilize Syndicate/Heist equipment/vessels, as well as the opposite for potential syndicate synths.