* if adding a new run would overwrite the pointer that made us want to add it, stick with a no-info run.
* if adding a palette would cause us to overwiret a pointer that made us want to add it, stick with a no-info run
* if multiple OWs use the same sprite, it'll show the right palette in the highest table and tooltip now. Drilling down further levels will still show the sprite with the first palette, since at that level the sprite can't tell which palette it should use. This is similar to how the Ruby/Sapphire item sprites work.
* add debug message for non-positive run lengths
* add a sanity check for the number of pokemon in a trainer team. In vanilla it'll never be more than 6, so put a reasonable cap of 1000 on it to prevent possible integer overflows
* make sure that a missing map names table doesn't cause issues
* don't freeze when AMap saves
* allow edit->paste to target the ViewPort even if it doesn't have focus
* notify on repoint
* command to jump to data in the viewport
* show hover point in the corner
* finish script UI (add, remove, edit)
* find record fields when doing Show Uses
* tooltip for address for rom overview
* make sure the model length changes after importing a sprite causes the rom to auto-expand
* require less freespace by default as excess to a run being expanded, and require less freespace buffer placed after runs.
* fix double-click crashes reported by wet blanket
* if Ctrl+F is used before the rom finishes loading, wait for the rom to finish loading before trying to do the find.
*
* python tool should support reading/writing tuples in tables
* writing `0` to a length in a table should update the children to be null (and delete the data)
* change an element count from 0 should create new data if the pointer is null
* creating new data via `@{` should update the length
* tested that this also works as expected with trainer teams (tpt)
* might have issues with ows, but they handle length differently
We can pre-compute the list of valid in-progress escape sequences and only compare the escape text against the set. This is much faster than verifying that no valid character starts with the current input.
initial pass at the data buttons. Maybe it'll end up just being a menu with a bunch of items, but I feel like with so many operations, they need to be a bit more organized than just a simple hierarchy.