auto-length should be limited to the number of elements previously in the table, if a specific number is already known.
Note that this means that when a user updates from an older version with a shorter table to a newer version with a longer table, the additional elements table will only be found if the length is specified manually. Hence the change to `graphics.battle.background.sprites`.,
* A table may have already been updated during an earlier table update. Make sure we're checking against the latest versions in the model, not the cached version provided by `GetDependantArrrays`.
* In the case of us not relocating (because we're doing an initial load), clear the format from any excess bytes needed by the growing table before appending.
In the case of multiple results being combined into a single group, force the follow-link algorithm to check inside each of the results in that group to see which is the best match.
Changing the lower limit to 4 breaks some tests, because coercing multiple table elements into a single line no longer works correctly. Lower the limit to 1 and rely on the logic from the rest of the limit to force at least 4 elements per line.
search was looking at the wrong address for items, and in the case of trainer teams with both items and moves, it was looking at the wrong address for the first move.
When switching between tabs, remember the scroll offset for the tools. We already do this correctly for the table tool, but didn't do it correctly for the code or text tools.
The previous dispatcher implementations were either fully asynchronous (for production) or fully instantaneous (test). But some tests require finer control over the order in which the dispatched items and continuations run interlaced with the calling code.
The new ControlledDispatch takes care of this. You can schedule work, and then the work won't run until you tell the ControlledDispatch to run it. There's not currently a way to control individual task continuations: you just run the entire task chain.
Don't CascadeScripts right away. Instead, wait until the model is done loading, and _then_ cascade scripts. RefreshBackingData at the same time so as to refresh the cells on the screen.
Tasks already do what I was wanting to do (manage work timing), and do it better with more features, and do it in a way that other developers will more easily understand. Stop being weird, just use a Task.