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.
* Fix blastcannon typo. Hopefully fix blastwave phasing.
* Fix projectile phasing on direct target
* Should unspaghetti sniper bullet var definitions
* Makes phasing rounds phase
* Preserve original behavior of sniper rounds
About The Pull Request
Converts more inputs to TGUI. Possibly all user-facing input lists in the game.
Did any surrounding text/number inputs as well
Added null choice support so users can press cancel.
Added some misc TGUI input fixes
Fixed custom vendors while I was there
I refactored a lot of code while just poking around.
Primarily, usage of .len in files where I was already working on lists.
Some code was just awful - look at guardian.dm and its non use of early returns
If there are any disputes, I can revert it just fine, those changes are not integral to the PR.
Why It's Good For The Game
Fixes#63629Fixes#63307
Fixes custom vendors /again/
Text input is more performant.
Part of a long series of TGUI conversion to make the game more visually appealing
Changelog
cl
refactor: The majority of user facing input lists have been converted to TGUI.
refactor: Tgui text inputs now scale with entered input.
fix: Many inputs now properly accept cancelling out of the menu.
fix: Fixes an edge case where users could not press enter on number inputs.
fix: Custom vendor bluescreen.
fix: You can now press ENTER on text inputs without an entry to cancel.
/cl
Fixes#62794 (Catwalk Tiles placed on the lower level of tram appear to be on the upper level)
Fixes#57654 (Open Space shading not always applied)
Fixes#53666 (When standing on a glass floor above a light on the Z level below you the light effect is rendered above the character. This makes light have ugly glows on the floors above. This also happens with grills and lattice.)
Transparent turfs, catwalks, and lighting overlays were badly broken with MultiZ issues. This fixes any transparent turf to appear and be on the same z-level if it has the turf_transparent element. Catwalks will appear and be on the same z-level as well. They were initially glitching to top z-levels causing people to walk over an illusion that caused them to fall to their deaths.
After I fixed these issues I noticed that lighting overlays were also glitching to top z-levels, which looked rather strange as there were lights in the middle of rooms and hallways with no supporting walls. Lights now appear under the transparent turfs properly.
The mapping icons for catwalks displayed the wrong icon_state so I fixed that too.
I made a big refactor for transparency and catwalks code that had to be done to get all of this to work properly.
You no longer have to be afraid of falling off of glass floors, catwalks, or transparent tiles. Also lighting overlays don't glitch through upper z-levels anymore for transparent tiles.
Fixes exploration drone launcher overlays not being updated properly when fuel is consumed / changes
Fixes crowbarring out a fuel pellet not updating the sprite, also fixes crowbarring out a fuel pellet after-attacking the exo-drone launcher
Fixes fuel pellets not getting deleted when empty
Fixes exploration drone launchers hard-delling if broken with a fuel pellet within
Corrected fuel pellet description grammer, and added a proper description to the exodrone launcher
Improved the code + documentation in general (early returns, better vars)
Fuel pellets are very obtuse when working on exploration drones. Hopefully, a few of these fixes helps some of those clear up.
When fuel pellets run out of uses, they're intended to delete, but never did - meaning you held around a buncha empty fuel.
Trying to replace the fuel pellets was very confusing as the icon didn't update properly.
* Makes gunpowder work in grenades and bomb cores.
* Cleans up some of the code
* Commit
* Clears grenades reagent holder on detonation.
* Variable casing/bombcore holder volume, O(n*r) large chem grenades, and including holder reagents in the chem splash reagent check.
* Fix inverted early return
Bots will now allow pAI's to be placed in them again
MULEbots can be turned on/off again
MULEbots' wires can now be interacted with again
Closes#63133 (Can't turn on/off MULEbots)
Closes#63101 (Can't put pais in new bots)
Fixes bugs, improves code, I see no downside here.
Players were able to use a soulstone on a lich's corpse or cut out their brains and stick them inside MMIs. This prevented revival from a phylactery.
With my changes, lich's gain a TRAIT_NO_SOUL when using a phylactery that prevents soulstone capture. This trait could be useful for other portions of the codebase, especially religious stuff but this is beyond the scope of the PR. To fix debraining into MMIs I used the code from how lings and dullahans work to have fake brains.
Please note - I am using webedits (laptop is broken atm) and cannot test any of the code until after new years. If someone wants to be a Chad and test this for me it would be much appreciated!
It turns out the mech fabricator updated the list of what was available every time anyone opened it, which is incredibly expensive.
I optimized it to only update the list on Init and when the console is re-synced with the R&D console, in addition to making the proc much, much lighter to run.
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.
Attempting to load a BCI or circuit MODsuit module with the save shell component yields an empty circuit. This PR fixes that by making the save shell component check for and delete any pre-existing circuit in the loaded shell.
Previous issues addressed:
- You could not reselect search just by keying
- Pressing enter sometimes deselected
- Double click would deselect - which was intentional, but useless really
- Default values were not implemented in original
- Validation is required for tgui inputs but truly only one "needs" it, it costs performance otherwise
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
makes say_verb() not execute immediately and instead put itself in the queue of the subsystem meant to process it: SSspeech_controller so that it executes at the start of the next tick during the MC's run instead of outside of it.
i considered making this part of #61422 (d005d76f0b) but this is good regardless of how that one pans out and i already overstuffed that one.
tldr the REAL cause of get_hearers_in_view() overtime is an effect of how byond schedules verbs within the tick.
when the server is overloaded there isnt much time between when SendMaps finishes and when the next tick was supposed to start, but verbs still need to be executed. So verbs will eat into the time the next tick should have started and the MC cant compensate for it at all since it uses byonds internal tick scheduler instead of our external tick scheduler.
This PR adds the ability to craft english fruitcakes using:
1 plain cake
1 raisin
1 cherry
5u rum
It is an absolute holiday classic and quite different than most of our other cakes which are more sponge style cakes.