* Makes sure COMSIG_ATOM_EX_ACT is always called. (#63685)
Creates a wrapper macro for ex_act() and moves the signal and contents explosion calls to there. This way we can ensure the signal is always fired. Also desnowflakes reagents responding to explosions.
Ensures that a signal is always called when the attendant proc is called.
* Makes sure COMSIG_ATOM_EX_ACT is always called.
Co-authored-by: TemporalOroboros <TemporalOroboros@gmail.com>
* Amortize the cost of creating preference assets by caching them per git revision on production, reducing best case init times by ~20 seconds (#63503)
Preference asset creation, which while consistently created in early assets, can be requested at any time before then and often is, currently takes about 15 to 25 seconds to produce. Because of extremely hard to reproduce BYOND icon bugs, most of this is done on the same tick.
Lowering the cost of initialization itself is very tricky. Some of it we can theoretically optimize, such as creating humans for antagonists, others we can't, such as the raw cost of icon blending.
Furthermore, adding new icons later down the line would just increase this initialization time even more.
Instead of optimizing the asset creation, which is an uphill battle, this instead chooses to amortize the cost by caching preference assets created per git revision. This means that preference assets will be created, with their long delay, only once whenever the code changes.
This is done on a config, defaulting to on so that production needs no changes, as the whole point of these being made at runtime at all is that it keeps assets/art styles consistent, and PRs making subtle bugs that break preference generation in some way is not uncommon. On development, your git revision will stay the same until you commit, no matter what code changes you make.
* Amortize the cost of creating preference assets by caching them per git revision on production, reducing best case init times by ~20 seconds
* Fixing another conflict :)
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
* Fixes a few runtimes and stack traces
Fixes the bad control path on the base turret control for all mining maps, then fixes duplicate lattices in shuttle 8532, and finally fixes the icon for the tactical suit.
* Fixes ID-related warnings too
* Move MouseEntered to a queue, such that only the most recently hovered atom will be processed (#63567)
bout The Pull Request
MouseEntered currently fires multiple (multiple) times per frame, presumably over every atom that was hovered in some timeframe (though it appears to be much worse than that).
This makes MouseEntered only add to a queue, while a per-tick subsystem ensures only the most recent MouseEntered gets the screentip work done on it, through a generic on_mouse_enter proc call.
Contextual screen tips are coming and are going to make the screen tip code more computationally expensive, so slimming it down is going to be a must.
Would like to hear from @ LemonInTheDark if this makes any obvious difference in time dilation, since it of course won't be as easy as just checking MouseEntered overtime anymore.
* Move MouseEntered to a queue, such that only the most recently hovered atom will be processed
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
* creates SSspeech_controller so the MC can control say() execution
* Update mob_say.dm
Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
Co-authored-by: Gandalf <jzo123@hotmail.com>
* Fixes typos in span, other html elements (#63510)
Atomizes a much larger PR for another time...
There are typos in span and other html messages that causes them to not render correctly or at all.
Bug fixes
Converts those instances of span to use the macro
* Fixes typos in span, other html elements
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
* Field of View and Blindness improvements [bounty + upstream push]
* Update death.dm
* almost done
* Update fov_handler.dm
* Face mouse when in combat mode, fix
* Fixes the category for the fov admin verb. #63401
* Fixes objects with bad planes and FoV bugs #63412
* pain
* there we go
* face pref
Co-authored-by: Azarak <azarak10@gmail.com>
* Fix: potential bucket corruption in timer reset_buckets (#63427)
Ports Semoro's fix (ss220-space/Paradise#511) related to potential SStimer bucket corruption which caused infinite loop.
The essence of the fix is that earlier timers with a built linkedlist could get into the second queue, which could cause an incorrect state. It works super stupidly, resets the state to the original correct one
BUT THERE IS STILL A BUG IN THE CODE RELATED TO THE INFINITE LOOP!
For some reason the SStimer on our server started to break recently at the beginning of the round. Found that code for waterfall drip effect was causing the issue. Found that setting frequensy to 0 (and calling reset_bucket sometimes) can be used to reproduce the bug. Tried to fix it with this PR
there is an oustanding bug with airlocks causing SStimer to brake sometimes.
cl
fix: fixed potential bucket corruption in timer reset_buckets
/cl
* Fix: potential bucket corruption in timer reset_buckets
Co-authored-by: Aziz Chynaliev <azizonkg@gmail.com>
* Updates Round End News Message for when Nuclear Operatives succeed to be more gender-neutral (#63512)
About The Pull Request
On the tin. Hopefully the comedic timing isn't TOO gadzonked from this, but I think it feels OK.
Why It's Good For The Game
It just doesn't make sense to have the gender-neutral "he" for this game when you could have someone playing a female character (or anything else). I shrug my shoulders and ride off into the sunset.
Changelog
cl
fix: The Nanotrasen News Network has updated their news tickers for when a station horrifically blows up to be more accommodating towards the person directly responsible for making sure it didn't horrifically blow up.
/cl
* Updates Round End News Message for when Nuclear Operatives succeed to be more gender-neutral
Co-authored-by: san7890 <34697715+san7890@users.noreply.github.com>
* Paintings improvements. (#63170)
About The Pull Request
Paintings can now do stroke painting.
Added painting management panel for admins.
Paintings now display author's character name, year of painting, medium and patron when hung on wall.
You can become new patron by paying more than the previous one.
Added painter's palettes to library vendor. (Sprites by @ Mickyan )
Backend changes:
Images are now stored in /data/paintings/images/*.png instead of /data/paintings/[category]/*.png
Old categories are now just tags
Screens & Video
Changelog
cl
add: You can now become patron of your favorite painting by buying sponsorship from Nanotrasen Trust Foundation.
add: Painter's palettes are now available at library vendor.
qol: Can use strokes in paintings now
/cl
* Paintings improvements.
Co-authored-by: AnturK <AnturK@users.noreply.github.com>
* Fixed spelling of possession, separate, and cemetery (#63203)
Just fixes some spelling for gangs. I also fixed misspellings for "posession" to "possession". Fixed "seperate " to "Separate" Fixed "Cemetary" to "Cemetery"
* Fixed spelling of possession, Separate, and Cemetery
Co-authored-by: Doctor Pope <84367152+Dr-Pope@users.noreply.github.com>
* TGUI pAI Hotfix 1 (#63160)
Adds a new ui state so that players can access the paicard tgui while it's slotted in their PDA (inside the pda wasn't technically in the user's close inventory).
Adds some documentation for the pAI candidate file
Users now get notifications if they can't save files (guest keys).
pAIs previously had NO on screen indicator of hack progress, so I've given them a progressbar over the door
More visual output for pAIs
More output for edge cases
More documentation
Fixes#63161
* TGUI pAI Hotfix 1
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
* Synthesizers and headphones can now have circuits! (#62825)
About The Pull Request
A circuit and shell components have been added to Synthesizers (headphones and spacepods included, though with a reduced capacity because of their size), so they can now be used for wiremod. Just like for instant cameras, no shell design here. They are meant to be found in dorms or maybe ordered from cargo.
Why It's Good For The Game
The station outside the sci department has plenty of USB ports stuff but is lacking when it comes to circuits shell. This is another small step toward a better and more applicable wiremod.
Changelog
cl
expansion: Synthesizers and headphones can now have circuits installed.
/cl
* Synthesizers and headphones can now have circuits!
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Added alt jobs names actually doing something.
* Also add late join announcements.
* Fix custom roles showing up first in crew monitor
* Cleanup to match upstream changes
* Updates from review, also improve both tgui manifests
* Compromise for Skyrat edit notes vs JSX vs linter
* Compromise for optimization vs not making a horrible mess of passing client around
* Follow module rules
* Revert no longer true changed to customization readme
* Update dme
* Fixed comments for alt titles
* Add disabling footstep sounds and parallax to the lag switch panel (#62999)
At the last Toolbox Tournament, @ MrStonedOne pointed out some big performance consumers. Some are disablable through easy means, but others were not. This adds two easy ones to the mix.
* Add disabling footstep sounds and parallax to the lag switch panel
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
* Adds an additional queue to the qdel subsystem to quickly filter out things that garbage collect within the first second. (#62969)
Before, all items deleted would sit in a queue for 5 minutes, with all shrinks and expansions of said queue requiring byond to copy all of these items over to the new list.
Theory: 99% of items soft-delete within byond within the first second. (5 minutes is only needed because a byond quirk with items referenced by verbs)
Result:
Within the first 7 minutes of a local test launch and round start, ~35,000 things get qdeleted.
Of those 35 THOUSAND things, only 12 things failed as still referenced with a 1 second pre-queue.
Said 12 things passed as garbage collected at the 5 minute queue.
(Note: 30 thousand of these items are from world start and round init.)
I have no data on how much this speeds anything up, leaving a 30 thousand list (that has to be copyed every time qdelete processes it and cuts off the items it processed) hanging around for no reason for the first 5 minutes of the round was all i needed to justify the pr.
* Adds an additional queue to the qdel subsystem to quickly filter out things that garbage collect within the first second.
Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
* Votes work again (#62973)
So, it was runtiming because it wasn't checking for the length of the list, so it was failing to display the results and failing to do anything about the results of said vote. That means map votes didn't do anything.
* [FUCK] Votes work again
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* Allows players to send more visible adminhelps when no admins are on, which'll definitely alert admins
* db portion sorted out
* now it really is
* should work about fine
* one last touch
* well, one more
* also botched comment
Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
* Replacing more C-style for loops with the faster, traditional ones. (#62908)
* Replacing more C-style for loops with the faster, traditional ones.
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Move conveyor belts to their own system, rename conveyor2 (#62911)
Renames conveyor2.dm to conveyor.dm, and removes the historical comment about "new conveyor belts". As a reminder, comments should be about what the code is now, not what it used to be. (Muh history -Lemon)
Moves conveyor belts to their own SS with an identical wait. It is very common, as an admin, for me to want to adjust conveyor belt processing, either to make it faster (for laughs) or to disable it when it is causing heavy lag. It is very difficult to do this (especially the former) because it just uses fast process.
* Move conveyor belts to their own subsystem for easier disabling, rename conveyor2 to conveyor
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
* FindOccupationCandidates will no longer die if the client disappears halfway through the proc. (#62819)
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* FindOccupationCandidates will no longer die if the client disappears halfway through the proc.
Co-authored-by: Iamgoofball <iamgoofball@gmail.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Antag HUDs will now animate if you have multiple antagonists, and will no longer clear on deconversion (#62718)
About The Pull Request
This is for the admin combo HUD. Players shouldn't notice any difference (except at roundend).
2021-11-09T16-27-26.mp4
Removes the ability to set custom antag HUDs for custom admin teams for complexity, though if there's a large enough demand I can try to bring it back in another PR.
Fixes#59767
TM candidate only so that I can make sure antags aren't getting leaked to people who shouldn't see them.
Changelog
cl
fix: Antag HUDs will no longer clear on deconversion if the player was another antag.
qol: Antag HUDs (as seen by admins and at the round end) will now animate between all antagonists, rather than just choosing the most latest.
/cl
* Antag HUDs will now animate if you have multiple antagonists, and will no longer clear on deconversion
* Update sol_fed.dm
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: Gandalf <jzo123@hotmail.com>
* Removes cryostasis pods from the game pending creation of a proper design document
* Axe body spray
* Update ai.dm
Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
Co-authored-by: Gandalf <jzo123@hotmail.com>
* Routine Cargo Departmental Deliveries (#61992)
About The Pull Request
Document: https://hackmd.io/@ bazelart/HkY-SO9VF
Each department's request console is upgraded. Instead of making requests, they are only able to see crates related to their department that helps the department. They can order one for free (so not out of anyone's wallet) and it will arrive at cargo. Cargo gets the price of the ordered crate for bringing it to the department that ordered it (via an area check, of which the crate will remain locked until satisfied, emitter cracking aside).
Ordering a crate puts the console on a cooldown depending on the price of the crate ordered. The time ranges from 10 minutes at the lowest value, to capped at 20 minutes at 4x the default crate's price. the price in time follows a ease in out circular function, where the time increases slowly as the time goes up, but a lot in the middle. towards the higher end it slows down again.
Cargo will start with far less money, but this is countered by the new source of income.
Finish Mapping it
Finish tgui panel for department orders
Testmerge it for balance and feedback who cares
Maybe give multiple destination areas, just in case one area gets obliterated who cares!
Why It's Good For The Game
Cargo starts with a budget to spend on themselves, which lets them order their department rewards before doing anything. There is no inherent reward to delivering to other departments other than social expectations of filling the job, which means cargo will simply ignore deliveries and requests if there are more self-important things going on, since those deliveries both cost cargo and do not help cargo in any way
Changelog
cl
add: replaced the request consoles in each department with department order consoles, which order for free on a cooldown. cargo gets these orders and delivers the crates, which are locked until delivery. upon delivery, cargo gets paid the value of the crate, and can then sell the crate back on the shuttle.
balance: cargo doesn't start with a budget, other departments get what their budget was split up amongst them
/cl
* Routine Cargo Departmental Deliveries
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
* Overhauls job eligibility checking and improves job debug logging.
* Fixing conflicts
* Makes Veteran the first check since it's the most likely.
Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
* The word filter will now be less scared of double or trailing spaces (#62703)
It kept on tripping because the RegEx expression was malformed due to an absence of words in to_join_on_whitespace_splits, which caused it to filter out spaces that were at the beginning or at the end of a message, or if there was two spaces one by the other.
Also prevents people from sending a message that's only spaces in OOC, because that's a little silly.
* The word filter will now be less scared of double or trailing spaces
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* Adds logging for all Silicon rather than just Laws (#62500)
I find stuffing everything in game.log is a real problem when you need to actually find useful information about what happened to a specific Silicon. It's hard to tell what happened to Silicon throughout a round, even when crossreferencing attack/game logs, so having a Silicon log for all the information related to them would be really useful.
For example, a Cyborg can spawn unlinked on Robocop, go Janitor and crowbar someone to death with a Robodoctor AI. When looking through logs, an Admin can easily assume it was a rogue Engineering cyborg who disobeyed their laws to kill someone.
This also isn't adding a whole new log file, more than it is just renaming the law log file to silicon and adding more useful things into it, so it isn't logging bloat (if that's even a concern)
* Adds logging for all Silicon rather than just Laws
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
* Adminwho and the status panel now shows when fellow admins are readied up in pre-game lobby (#62670)
* Adminwho and the status panel now shows when fellow admins are readied up in pre-game lobby
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>