* big heckin chonker ultragigamega-ears!!!!
* slight balance tweak
* tesh no longer have four ears so they no longer have superultragigamegahearing
* its ok i couldnt figure out between() either lmao
* Converts move intents to /decl/move_intent
Adds /decl/move_intent/walk and /decl/move_intent/run.
Switches all move intent checks to use the new IS_RUNNING and IS_WALKING macros.
Renames and refactors /mob/living/proc/set_m_intent() to /mob/living/proc/set_move_intent(decl/move_intent/intent).
Removes the unnecessary /mob/var/m_int and associated code.
Updates all move intent setters to use set_move_intent().
* Swaps incorrect config values
Swaps incorrect move delays since I got them backwards somehow, oopsies.
* Adds suggested ?. operator
Compactifies two if statements using the ?. operator instead.
* Porting species equip_adjust from Neb.
* get_species() => get_species_name(), adds correct get_species() impl
* sprite_sheets is now crudely lazylisted.
* Adds returns to add_blood and add_accessories.
* apply_addblends now uses an overlay.
* Renames the various worn overlay procs to be more informative.
* Debugging/refining overlay gen.
* Adding handling for string icon paths.
* Refining/debugging offset overlay gen.
* Getting the offset system working.
* Commenting out Teshari offsets for the time being.
* drakes can collect/drop items and use buttons
* add a basic implementation of mob dexterity levels
* trained drake emotes are less visually intrusive
also fixes being able to take anchored items as a drake
also fixes some double messages on drake storage
also fixes animals being able to attack/scratch doors without a cooldown
also adds optional scratch_sound on simple_mob for when scratching a door
* fire alarm & conveyor switch drake interactions
also fix runes for actions
also fix not showing progress for dropping an item
* trained drake button/inventory review tweaks
* animal harness suggestions early return tweak
* Decl music + ported music
* Bugfixes and not
* unit test
* debug shit + some fixes
* More Changes
* Removes some unused/extra songs in case it was a file size issue
* Nuke crash-prone songs
* Add cynosure defines
* It Just Works Now + Finished Headphone code/sprites
* requested tweaks/debug removal
* recheck dme
* Message piece combiner returns a list
* Emote formatter returns a list
* Port Runechat
* Various onamonapoea
* Suggested changes, small opts
* Fix chat message on different size mobs
* Couple more runefixes
* Enable encoding chat emphasis in runechat
* Remove extra asterisks from rune audible messages
* Fix runedefines
* Adds linter defines to repo.
* Uncomments linter defines already in the code.
* Resolves unreachable code linter errors.
* Nukes decade+ old syndie specops code except for computer since that's mapped in?????
* Resolves procs has no parent linter error.
* Proc signature fixes
* Bad comments
* "In" danger
* Type safety
* Implied nested list abuse
* Top level ..() usage
* Sleepy coder typos
* Invalid kwargs calls
* Pointless returns
* Linter hacks (see full message)
Byond doesn't care and it has no effect but linter doesn't like var/proc
for holding references to procs, despite that it's valid byond code.
Also, the linter seems to have serious issues figuring out relative
proc names. This commit is a sort of take-it-or-leave-it thing. It's not
required, it just cuts down on warnings, but this code is valid DM code.
* WHATEVER THIS IS
* Trick dreamchecker linter into ignoring this file's sins in it's weird use of vars
* Fix list decoration syntax - Its a list, not list of lists
- To declare that a var is a list you can `var/list/blah = list()` syntax or the `var/blah[0]` syntax. Both do exactly the same thing. But if you do `var/list/blah[0]` that is just like doing `var/list/list/blah = list()`
* Hopefully stops the ai holder subtype folder from going quantum and sometimes changes capitalization over time, and incidentally causing 20+ linter errors.
* Fixes unwrapped negated object in list linter error.
* Resolves colon-like list accessing linter error.
* Turns linter on in linter config.
* Fixes closet indentation properly and cleans up suit storage unit switch.
Co-authored-by: Aronai Sieyes <arokha@arokha.com>
Co-authored-by: Leshana <Leshana@users.noreply.github.com>
Adds a HUD for observers
Adds a HUD for rigs and mechs
Adds up/down buttons for AI hud
Add more tg style alerts
Fix some bugs with the tg alerts
Improve icon_states usage by caching it
Redo how respawning works, add a button to ghost hud for it
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.

This adds a system for picture-in-picture UI windows using
vis_contents. Essentially, it allows you to make UI windows that show an area of turfs. It also refactors how cameranet visibility works.
Currently, this is implemented on AIs. They gain two new UI buttons - "Enter Multicam Mode", and "Create Multicam". When they go into Multicam Mode, they see a background of animated binary numbers, and they are allowed to create an infinite amount of these picture in picture windows, which subsequently creates an AI Eye for each one. They are able to control each AI eye individually, by first clicking on the PIP window to select it as "active" and then using the normal arrow key controls. The PIP windows can be freely resized and moved around the area.
You can control everything inside these PIP windows EXACTLY the same as you can using a traditional AI Eye, as demonstrated below.
For admins, there is a config option to disable PIP entirely - simply set `var/multicam_allowed = TRUE` to FALSE if you wish to disable it from being used. (Please be reasonable.) <3
You can see an example of how this works here:

AI Multicam functionality.
Do note that if the lightbulb in the AI core is busted, the multicam room is dark(er) than it would be, but you can still see your camera windows just fine. (I'll probably fix this later.) It only affects the "matrix" backdrop, the PIP windows are still fine.
This has been runtime-tested with the latest `master` revision and produces 0 runtimes, and has no noticeable impact on server CPU usage.
Polarisport is here! Port of https://github.com/VOREStation/VOREStation/pull/7752