Allow paste-scripts to have sections that are specific to what game the script is being run on. Allows for creation of a single script that works on multiple games.
Allow @anchor(length) to create a new anchor in a location with at least (length) freespace. Length is in hex.
Allow thumb branch instructions to include an offset.
Allow goto instructions to include an offset.
When multiple results are close together, allow them to be combined into a single result within the new tab. This makes the overall result shorter, and makes it easier to see when 2 pieces of data are near each other.
* update the palette link when the palette changes in the table tool
* update the selected palette when the sprite gets re-selected, even if the sprite was already selected.
* Don't allow inserting a custom change during a transaction
* Don't end a transaction when a Goto happens because of a paste-script directive ( @{ or @} ).
ViewPort should have IWorkDispatcher as a constructor paramater, not an .Edit parameter. Optional parameters that make the program act different between test mode and real mode are bad.
For the same reason, this should be a required parameter. But changing the constructor of ViewPort is hard, since so many tests use it. This is an initial refactor to make less tests use the constructor directly.
Previously, the command would error unless you're in freespace. This doesn't quite match how it needs to work.
* If a user tries to copy a table and then paste it over the same table in another rom, that should work. So table pasting should go ahead and clear the data and not error, even if it's not freespace.
* If a user tries to clear out a run with the intention of writing over it, all 00's may not be valid. If the length matches exactly, don't error and don't clear. Just nop.
Tuple autocomplete is weird, because it happens in stages. This is different compared to other things, where choosing autocomplete always finishes the cell.
copy for a type chart needs to not only copy the data, but the format of the data needed for pasting.
This is already the case, almost: we copy the table format for the stream table. However, adding the stream table won't work correctly unless we also paste the end token. Otherwise the initial length of the stream table will be wrong.
Update existing tests that use the !00 metacommand: the !00 metacommand should only change the data if the data is unused, and should only cause the model to stop the edit if the data is used.
Don't adjust the selection after a double-click-follow-link operation. Only adjust the selection after a double-click-select operation.
* ViewPort needs to be able to understand thumb directives. This means that .whatever must be interpreted as a directive and not as a constant. So constant names are required to *contain* at least one dot. For example, `.some.number`.
* When reading data that's been pasted in, if you find a `.thumb` directive, read until you find a `.end` directive, then interpret that whole thing as a thumb script, all at once.
* allow the `.end` directive to appear in thumb code
* `.align` directives should work in the viewport. Other directives that appear towards the top of thumb scripts before the `thumb` directive should be ignored.
SpriteDecorator wraps other formats, providing the extra behavior of having a sprite background. This can be used to draw a sprite behind a single cell or behind a group of cells.
To get the z-ordering right, the info from SpriteDecorator is read during a new RenderBackground method, which happens before RenderData.
Instead of initializing the model right away, launch a background task to do that. This allows the metadata to load while the tab draws itself. When initialization is complete, Refresh the ViewPort.
For the tests, use InstantDispatcher
If a pointer in a table points to the wrong type of data, we should recognize that and show that as an error pointer. For example, a pointer in a table that expects a compressed sprite, but gets an uncompressed one instead. In such cases, it should be possible to repoint from the bad data to new blank data.
If pointing to data that is the right type, but we don't point to the beginning of it, that should also allow the user to repoint to something fresh.
The metacommand will make sure that it's actually reasonable to write data to this location (no other data exists here) and will make sure that pointer data is initially set to null (so that deep copy for pointer content works correctly)
If a user wants to cut/paste an existing run to freespace, the new format must be able to be put in the new spot. This means that as part of writing a format that does validity checks (like compressed data), it must be possible to first write 'empty' valid data to the free space.
This requires that the palette control recognize a pointer to the current palette, instead of just the address of the current palette. But since palettes can't be used by the game without a pointer, it's reasonable that there will always be a pointer for any palette being edited.
* Update table tool / sprite tool / image editor palette addresses when palettes get repointed.
Fix zoom limits
Fix selection move limits
Fix issue with 0 draw size when hovering with draw tool
Add tooltip for lz compression start token
Import from default TOML files on version upgrade.
Goto -> potion -> should work
File -> Save -> should work from image editor
Don't double-include the current table as a "related table" when searching for palette tables for a sprite.
We don't have a UI for the image editor tab yet. But we can now test the interactions. We've written the first test, and it's now possible to draw a single pixel.
... we'll need a lot more tests for this.
* Expanding a trainer team while looking at it (either via the table tool or via the inline '+' operator) will now cause you to jump to the new trainer team location.
* Expanding a trainer team through any method will now cause the trainer team's new element to be a duplicate of the previous last element, instead of bad bytes.
* You can press Enter to jump to the offset listed in the "Free Space" field
* New tooltip on the free space field