Commit Graph

68 Commits

Author SHA1 Message Date
Benjamin Popp
acdff5146f Introduce new utility method: Range()
Does Enumerable.Range(0, n) in a more compact way.
It's a thing that we need to type a lot.
Also add a new test that captures a problem parsing Overworlds in FireRed
2020-09-16 09:54:04 -05:00
Benjamin Popp
1221b110df Add support for named bytes
Named bytes can provide an easy way to edit code by marking the purpose of specific bytes in the ROM. It can also help keep the values properly in sync.
2020-08-31 19:47:05 -05:00
Benjamin Popp
885ad7b248 When updating versions, update Model Lists too
This matters for any new tables that use those new lists.
2020-08-24 20:47:16 -05:00
Benjamin Popp
8e93144532 Add particle sprite/palette tables
Requires adding the capability to load offset-pointers from the table references file.
2020-08-11 17:48:55 -05:00
Benjamin Popp
50e7341041 add namespace to header elements 2020-07-22 21:56:23 -05:00
Benjamin Popp
cd611950ec When adding reference anchors, make sure stuff points to them
The only reason we can find these is because we have a pointer to the table. So make sure that these pointers are properly recognized. They used to be, but it broke sometime when working on table expansion.
Related: When relocating a table for expansion, make sure there's enough room for all the extra elements, not just one.

Also, when checking for whether or not we need to seek for pointers, don't seek if the incoming run already has pointers attached.
2020-07-22 21:47:00 -05:00
Benjamin Popp
c36cc76fc8 Update remaining table names 2020-07-19 16:34:04 -05:00
Benjamin Popp
f85f0d9b1e Update pokedex and type table names 2020-07-18 23:39:01 -05:00
Benjamin Popp
a03963d37c Auto-Generated Sprite/Palette names should have namespaces. 2020-07-17 16:52:09 -05:00
Benjamin Popp
3cb8d5f159 Add contest type names / stats
only exist in R/S/E.
Change names of moves.sts to moves.stats.battle, to clarify compared to stats.contest
2020-07-17 11:07:47 -05:00
Benjamin Popp
1fef1133e9 Rename more tables
trainermoney
itemimages
trainerdata
trainer vsseeker
decorations
wild
specials
2020-07-16 22:12:22 -05:00
Benjamin Popp
ebac4d0c7a Rename tm/tutor tables
* Allow typing '.' into pointers and matched words
* Increases maximum cell size to accomidate for longer names.
2020-07-14 10:41:41 -05:00
Benjamin Popp
c9d76e2170 Rename moveeffects table
moveeffects -> scripts.moves.effects
There was some special logic to deal with having a table that is the same name as a list. These are no longer the same name, but we still want the name to apply. So instead, we now have the table's length based on the length of the list.
2020-07-14 08:55:00 -05:00
Benjamin Popp
cd34638396 Rename pokestats, evolutions, items, and movedata 2020-07-13 22:32:09 -05:00
Benjamin Popp
0daafe27f6 update graphics table names 2020-07-13 22:12:58 -05:00
Benjamin Popp
91882c1311 Rename pokemon sprite tables
frontsprites -> graphics.pokemon.sprites.front
backsprites -> graphics.pokemon.sprites.back
pokepalettes -> graphics.pokemon.palettes.normal
shinypalettes -> graphics.pokemon.palettes.shiny
pokeicons -> graphics.pokemon.icons.sprites
pokeiconpalindex -> graphics.pokemon.icons.index
pokeiconpalettes -> graphics.pokemon.icons.palettes
2020-07-13 14:57:25 -05:00
Benjamin Popp
0ca6549a7a rename multichoice and natures tables
multichoice -> misc.text.multichoice
natures -> data.pokemon.natures.names
2020-07-13 08:55:50 -05:00
Benjamin Popp
02332dab86 rename types, abilitydescriptions, and movedescriptions
types -> data.pokemon.type.names
abilitydescriptions -> data.abilities.descriptions
movedescriptions -> data.moves.descriptions
2020-07-13 08:33:08 -05:00
Benjamin Popp
0969aa11f4 Update table names abilitynames and trainerclassnames
abilitynames -> data.abilities.names
trainerclassnames -> data.trainers.classes.names
2020-07-13 08:11:09 -05:00
Benjamin Popp
2c65d4743d rename movenames -> data.moves.names 2020-07-13 08:01:14 -05:00
Benjamin Popp
23bfa77890 rename pokenames -> data.pokemon.names 2020-07-13 07:47:10 -05:00
Benjamin Popp
ffe37fa9f4 Fix failing test
Also use automated code review
2020-05-27 23:28:39 -05:00
Benjamin Popp
9995e60fa4 Add filter-by-type criteria 2020-05-07 11:18:44 -05:00
Benjamin Popp
2f79e0252d Decode movement data correctly for FR/LG
the movement enum is different between FR/LG and R/S/E.
To support this, add default.*.toml files which include extra defaults specific to one or more games. Right now, only a single list is there. But this feature should allow for more interesting game-specific defaults in the future.
2020-04-21 21:38:42 -05:00
Benjamin Popp
b79d7a6ea1 Allow inline script editing 2020-04-20 11:18:42 -05:00
Benjamin Popp
cf0c73691f Auto Format 2020-04-06 22:58:51 -05:00
Benjamin Popp
cac1c8f9bb Bugfixing
For some roms, the sprites load at the wrong length. When the proper length is later discovered, it's important to update the length of all related tables, not just the current table.

* Emerald had the wrong pointers/length for trainer sprites
2020-04-04 15:08:53 -05:00
Benjamin Popp
9a14a78f82 Allow more types of runs in tableReference.txt
Instead of keeping tables segregated from other kinds of runs that we want found automatically, just allow all types of runs in the tables file.

Combine the typechart runs into a single run, which makes the chart easier to work with.
2020-03-31 15:21:54 -05:00
Benjamin Popp
a6bbbe48ee Auto Format
also remove a redundant cast
2020-02-17 21:59:24 -06:00
Benjamin Popp
3e8fd018a1 Refactor Singletons
Previously, the creating a new ViewPort loaded from 2 text files and creating a new HardcodeTablesMoel loaded from 1 text file. This is a lot of parsing!

Refactor to do the parsing once, in the EditorViewModel, using a Singleton class to hold the non-editable loaded data. Inject that data into the appropriate structers later on.

To prevent massive refactoring in the tests, not every ViewPort needs to be given a Singletons instance. Instead, allow a ViewPort to still do its own parsing. However, BaseViewModelTestClass has been updated to make this work for a majority of tests, along with changes to AutoSearchTests's fixture and several of the Setup methods that are used by multiple tests.
2020-02-08 21:25:48 -06:00
Benjamin Popp
bfe24f6dcb Enable loading weird files that look like the actual roms 2020-02-04 21:10:20 -06:00
Benjamin Popp
ee24e401d0 Refactor
- Remove AutoSearchModel. We're not using it anymore. Move its constants to HardcodeTablesModel.
- Move constants from EggMoveRun to HardcodeTablesModel. Should've done this a while ago.
2020-01-18 22:31:01 -06:00
Benjamin Popp
0fe3b3d7c0 Bugfix: load default.toml correctly 2020-01-13 22:03:44 -06:00
Benjamin Popp
dc28c0890f Offload standard anchors / lists to a default toml file
Once again, make things more data-driven to reduce the code. Having a default.toml file makes it easier to add to or change the defaults.
2020-01-13 21:47:14 -06:00
Benjamin Popp
7258ddaf8e Condense known tables into a reference file
Other things should probably be in this reference file too, such as the headers, streams, and default lists. But this is a good start and should make it more expandable in the future.
2020-01-12 21:13:22 -06:00
Benjamin Popp
6cc97c2288 Support Ruby / Sapphire 1.1 2020-01-11 22:50:47 -06:00
Benjamin Popp
9aef5f124d Support FireRed / LeafGreen 1.1
Adding all the table locations for FR/LG 1.1
2020-01-05 19:48:56 -06:00
Benjamin Popp
2c0b01894f Refactor to be able to support the 1.1 versions
Each of Ruby/Sapphire/FireRed/LeafGreen has a 1.1 version as well as the 1.0 version floating around online of the English GBA rom. I should be able to tell the difference between the two versions and load tables correctly.

This refactor makes it possible to tell the difference. Loading the tables correctly is coming next.
2020-01-04 20:10:19 -06:00
Benjamin Popp
d1ba8e2a27 Implement search for branch-link
in thumb code, branch-link commands are relative. That means that the instruction for the same destination will look different depending on the source.

As a user, I want to know what thumb code calls a routine I'm looking at. That's most likely going to be via a branch-link command, although it could be through a blx. Let the user use Find -> "bl <someaddress>" to search for branch-links that jump to a given location.
2019-12-15 14:45:01 -06:00
Benjamin Popp
a38e81347d Add List for Evolution Methods 2019-12-14 21:54:04 -06:00
Benjamin Popp
8d292d2ab7 First Pass List Support
* Added some default lists
* Lists are loaded/saved with the TOML file
* Tests showing that lists work right.

Lists can be used as text displays for enums/bit arrays. The difference is that lists aren't sourced from the ROM.
2019-12-14 21:31:13 -06:00
Benjamin Popp
50c252cb6f MakeTutorsExpandable updates tutor special (in FR/LG)
In FR/LG, there's a limiter built into special 397 (the move tutor special) that makes it behave differently after the element 14 (0-14 act one way, 15+ act a different way). I added a one-byte change to switch the branch condition to 'never'.

In order to do this, I needed to locate the special list, so I went ahead and added it to all the games, complete with a unit test to verify.

The specials table + Clover exposed a bug: when adding anchors from a table with an unknown pointer format, we need to clear the data of existing conflicting runs. Example: a text run that goes over the anchor isn't actually a text run.
2019-12-12 20:58:56 -06:00
Benjamin Popp
1da35195d3 add support for type chart
this is the first top level custom stream, so there was some extra places where I needed to add cache scopes. Otherwise, this is a fairly straightforward change.
2019-12-05 23:20:33 -06:00
Benjamin Popp
c6d97f84e5 Improve child verification logic for table streams
The TableStreamRun/LengthFromParentStreamStrategy/GetCount has trouble getting the Count correctly during the initial verification, since the parent table hasn't actually been added to the model yet. So GetCount needs access to both the parent table's segments and the name of the pointer field. This lets the LengthFromParentStrategy to math to figure out segment offsets without needing the parent to actually be in the model. This extra info is only needed during verification: it's ok if it's `null` once the run is already added, such as during `CompleteEditOperation` and `TableTool`.

Add verification logic so we can know that we found a reasonable number of multichoice for each test rom. DarkRising's data is bugged, so ignore that one.
2019-12-05 21:47:34 -06:00
Benjamin Popp
3329c2f81c Bugfixing
The multichoice didn't load right for a number of reasons
* The PCS has a double-escape character that I wasn't handling right.
* The check to see if a value is correct should verify that the value doesn't look like a pointer (high-byte on a 4-byte value should be less than 0x08).
* Had the wrong source for FireRed: typo
* Inner formats weren't being verified correctly for added tables
2019-12-02 18:15:18 -06:00
Benjamin Popp
d8b4d5e8c3 add multichoice table 2019-12-01 21:15:52 -06:00
Benjamin Popp
07a76c7409 Update wild table
wild table's pointers lead to streams with another pointer. Go deep!
2019-12-01 14:42:47 -06:00
Benjamin Popp
79deb09532 Allow table stream pointers to add new anchors 2019-12-01 14:23:27 -06:00
Benjamin Popp
81e5efb4cf find wild data top level
top level wild data is found correctly
2019-11-30 21:24:58 -06:00
Benjamin Popp
3bf8e0ddc2 Update default items format
hold effect is 1 byte long, then there's another parameter byte used to distinguish the effects of Potion / Super Potion, or Berry Juice / Oran Berry.
2019-11-30 15:30:08 -06:00