When scripts get merged together, some inner-scripts no longer appear to be real scripts. These were showing up as orphans when the scripts get formatted, since that causes scripts to get merged. But the pointers are still there, so they're not actually orphans.
Fix the orphan-naming logic so that it won't name things as orphans if they're inner scripts that still have pointers
ai script children should appear as ai scripts
editing an AI script shouldn't make a bunch of orphans
introduce a light caching system for noticing when scripts don't need to be loaded again.
script edits that don't change any compiled bytes should be capable of skipping the metadata update in situations where the metadata is already correct
* replace cleartrainerflag/settrainerflag with defeatedtrainer/readytrainer
* update `if` macros to include both goto and call forms, and both positive checks and negative checks for trainers/flags
* Updated flash constants
* Fixed flash constant locations
I originally supplied anchor references, not locations of the constants themselves. That's been fixed. Also, I changed the field name for flash.radius, so it's hopefully clearer.
if we're adding a table with inner pointers and we're searching for inner pointers, disqualify the area that we're currently adding to. Aligned pointers may exist, but misaligned pointers cannot.
allow standard lib imports like `import random` (nuget update)
allow setting an enum value to an int or BigInt (useful for random.randrange())
Include ViewPort this[] operator for getting table models by name. Useful for getting tablemodels from multiple tabs in the same script.
given an area of all the same block, replace all those blocks with blocks that match the surrounding non-same blocks based on what blocks should 'match'. Note that this is a single-pass algorithm right now, which means that it creates a bunch of bad blocks as it gets further from the edge and more conflicts are found.
We may try to update this more in the future, or we may just go with something simpler like a maze generator using border blocks or 9-grid. But the results of this are tantalizing...
holding control and selecting blocks will add/remove them from the block bag. When drawing (or painting), all blocks in the bag are treated as equivalent, so HMA will select one of the blocks at random to draw with. This works great for grass, but can also be used to create 'noisy' areas by selecting other blocks like flowers or shrubs.
Control+Click on the bag block indicator to clear all blocks from the bag.
If a blockset is edited, that could change not just the current map that
owns that blockset, but any other map that uses that blockset.
Refresh caches on all those maps.