I missed it! So I fixed it.
It could have been done with a bunch of "If you're SUPPOSED to be blind" or "If you're ASLEEP" but honestly this check should be in there anyway. P.sure people with tourettes don't randomly scream things while asleep.
Naked and trying to wear a rig, it will attempt to access w_uniform.inv_flags which will be null and runtime.
Moves shoe redrawing to uniform and suit update_inv code in update_icons, rather than in inventory.dm. update_icons already had code for this.
Previously, because noncritical robolimbs did not count for bruteloss or burnloss (per line 13 in human_damage.dm), nothing would ever cause robot limbs to call update_wounds() on the organs to clear wounds after repair. Furthermore, update_wounds ignored wounds on robotic limbs and edited early without even checking if it should remove them. This caused a problem.
This corrects this, and still exits early(er) in update_wounds() for robotic limbs, but makes sure there are no 0-damage wounds left and if there are, removes them.
As a 'backup', hitting a robolimb with a welder when there's nothing to fix will also call this proc, to catch any cases where someone has directly changed wounds or anything like that.
Also fixes spacing on robolimb damage examine text (get_wound_desc had spaces, but should not have in most cases), and added a message for having an open maintenance panel on a limb.
Does not use initial(pixel_x) and initial(pixel_y) for 'finishing' attack animations, so that mobs can have old_x and old_y updated to reflect a natural pixel offset (e.g. for mobs that are longer/taller than 32x32 and are nudged to fit into a tile).
For example, we have a 32x64 cyborg module which sets pixel_x, pixel_y, old_x, and old_y when selected, however attacking with it resets it to 0 as this doesn't respect old_x and old_y like all other mob anims do (see floating, etc).
Also why define this on atom and then literally never use it on anything other than a mob, in the... mob/animations.dm file?
_Sorry to keep making QOL PRs. I promise I'll send something cool eventually._
As in, scooped mob holders, like Teshari. If they throw an item, it falls out now rather than being trapped and eventually deleted in their holder object.
Makes the name of the starsystem and station generic such that it can be modified in global.dm and replace the strings where it is used. This won't have an effect on Polaris itself, but makes changing the name much more simple for forks. Using string concat constants on the advice of Psi.
Cleans up a list in the booze vendor
Removes tea from contraband and puts into the normal product list in the booze vendor
Adds the shot glasses to the autolathe and makes glasses there no longer children of bucket recipes
Changes the Death Alarms from announcing to general comms, to just
Security and Medical. Because sometimes hearing your best friend has
died over Common channel is not the best scenario to hear that someone's
died.
Used the captain's headset to keep things slightly cleaner, and it gets
deleted after as far as I can tell.
* Splits uplink categories into separate files and moves other files around
* Corrects an incorrect description
* Puts uplink categories in uplink_categories into the same order as they are individual files
* Mercenaries now spawn with their own private uplink.
* Adds a random discount to uplink items that is applied every 15 minutes
no message
no message
* Adds changelog
* Fakes announcements are now once again purchasable from the uplink and actually work
* Removes a debug line
* Adds several existing items to the antag uplink including stun rounds for shotguns, metal foam grenades and more
* Refactors boxes.dm to use absolute pathing and for loops for contents
Adds changelog
* Adds hacking tool.
In normal mode a hacking tool acts and functions just like any multitool. Use a screwdriver to toggle between normal and hacking mode.
Hacking attempts will take 20 +(0 to 20) seconds (triangular distribution, averages at +10 seconds).
Once an airlock has been successfully hacked the user will have full access to the door operation interface normally restricted to silicons.
A hacking tool will remember the last 6 to 8 hacked airlocks. No time is needed to again hack remembered airlocks.
Once the limit has been reached the least recently accessed airlock is forgotten. Hacking a remembered airlock will update the last accessed time.
Also adds a basic observer/listener pattern implementation to, for example, make it easier to catch when objects have been destroyed and clear references.
* Corrects and adds more sanity checking.
* Adds hacktool to uplink devices