Commit Graph

3392 Commits

Author SHA1 Message Date
Benjamin Popp
a5594d8aa5 Fixing failing test
There were a few bugs in the test, because assembling by hand is hard.
Also, made the ThumbParser assume that numerics are sbytes when working with pc adjustments.
2019-06-19 21:59:23 -05:00
Benjamin Popp
820be161e9 Cleanup from code review 2019-06-18 22:39:09 -05:00
Benjamin Popp
f312deefbb Branch statements should show addresses
also wrote the test and changed some code for "show interesting addresses with thumb code" but that's still failing / not working yet.
2019-06-18 22:34:35 -05:00
Benjamin Popp
abc6fec9d9 Bugfix
When removing an anchor, we remove all pointers that point to that anchor.
However, if that pointer was itself an anchor, we were accidentally removing that anchor as well.
2019-06-18 20:50:01 -05:00
Benjamin Popp
81e629346f Fix existing tests
When I added the code tool, some tests that select after the end of the data started failing. Code Tool content should be based only on selected bytes, not selected cells.
2019-06-18 20:49:08 -05:00
Benjamin Popp
f76c256a5b Fix #-length reading issue 2019-06-16 13:57:02 -05:00
Benjamin Popp
9a3904d42f Bugfixes
Got a basic setup for writing some tests for the Thumb code parser.
2019-06-15 22:23:22 -05:00
Benjamin Popp
bf151b2ab6 Adding Code Tool
Doesn't fully work yet, but the bones are there.
2019-06-15 17:36:54 -05:00
Benjamin Popp
c6006cbf21 Fix Visual Bugs 2019-06-15 13:00:58 -05:00
Benjamin Popp
94cdc127d3 Fix Plm Completion Bugs 2019-06-14 22:06:51 -05:00
Benjamin Popp
356f016a96 Update text tool when editing PLM/Egg moves in main window 2019-06-14 20:16:13 -05:00
Benjamin Popp
d21b44ac0c Add Reset Zoom Command 2019-06-14 19:57:25 -05:00
Benjamin Popp
94e5a9b8f6 Merge branch 'dev-row-glyph' into dev 2019-06-13 22:14:52 -05:00
Benjamin Popp
432388de60 Caching Bugfix
* Only allow one scope to be created at a time, to avoid race conditions with modifying the activeScopes.
* Allow scopes to be created for the same model when a scope already exists. Use reference counting in this case.
* Change at what level several of the scopes are created at.
2019-06-13 22:10:44 -05:00
Benjamin Popp
309c4fcb64 Moving the translate-transform step down one level
so we can skip it in cells that no longer need it.
2019-06-13 21:04:14 -05:00
Benjamin Popp
5ab0c6d0a0 Introduce GlyphRuns for performance
We previously drew each cell individually. Now, in certain cases (most of them), we draw all the glyphs of one type at the same time. For example, all green Consolas font size 16 non-italic text on line 12 gets dtrawn at the same time.

Also introduced ModelCacheScope, a short-term cache that can be created / destroyed using IDisposable. Right now it's only used for PLMRuns, since each run is relatively short but they all want to calculate the same information from the model (namely, the move names). Eventually it would be good to remove the local caches from other runs as well and use the CacheScope for things like tables and egg moves.
2019-06-13 07:25:49 -05:00
Benjamin Popp
238b2eee5f Bugfix 2019-06-11 23:00:14 -05:00
Benjamin Popp
e746717697 Bugfix 2019-06-11 22:57:37 -05:00
Benjamin Popp
7b4ccf0a31 First attempt at drawing an entire row at once
We're not actually drawing an entire row at once: we're taking one pass per type of format. So we're drawing all the green italicized 16-size text in a single go, and then going back later to do blue text and so on.
2019-06-11 22:49:03 -05:00
Benjamin Popp
dbb831603e Zoom Performance Improvement
Use a visual cache for the None data format. Caching GlyphRuns is actually quite a bit better.
2019-06-10 22:33:58 -05:00
Benjamin Popp
645cc709cc Implement GlyphRun version
This version works a lot like the FormattedText version, but is slightly faster. We need to optimize more.
2019-06-10 22:19:58 -05:00
Benjamin Popp
fc1aae93b0 Abstract Drawing Logic
Make most of the drawing happen in a helper method, including the creation of FormattedText and the call to context.DrawText. This will let us change out the implementation easier.
2019-06-10 21:31:56 -05:00
Benjamin Popp
9b4b985023 Bugfix
Reuse brushes when possible. Don't crash when closing and super-zoomed out
2019-06-09 21:38:46 -05:00
Benjamin Popp
e0695115d1 Update Slanted Height on FontSize change 2019-06-09 21:18:55 -05:00
Benjamin Popp
c3c19ac99d Improve Zooming UI
Use `TruncateText` and `GetCenteredOffset` for PlmItems, EggItems, EggSections, Integers, Enums, Text, and Pointers.
2019-06-09 21:17:23 -05:00
Benjamin Popp
9227541ed6 Refactor
move the TruncateText logic to a helper method, since other methods will likely want something similar.
2019-06-09 15:49:18 -05:00
Benjamin Popp
5573c73238 Fix Centering for None and Pointer
CellTextOffset is now based on the dynamic width.
Pointers have updated logic for how many characters to display.
2019-06-09 15:44:05 -05:00
Benjamin Popp
5dc36d6bb9 Zooming Updates Cell Size
Cells should resize based on zoom level.
2019-06-09 13:48:16 -05:00
Benjamin Popp
b235997163 Connect ZoomLevel to FontSize
The cells are still always the same size, but the text zooms correctly now.
2019-06-09 13:25:33 -05:00
Benjamin Popp
216b125ff3 Zoom setup
Change CellWidth and CellHeight to be instance members of `HexContent` instead of static. This forces other components to look up the size (or get handed the size) instead of using a global. This will let us vary the width/height in the future.
Add 'ZoomLevel' concept to EditorViewModel, so we can save/load the zoom level. It doesn't currently connect to anything in the UI, but it will eventually map to font size, which will be used to calculate cell size.
2019-06-08 21:12:17 -05:00
Benjamin Popp
15b729fabd Version Bump 2019-06-08 14:07:43 -05:00
haven1433
5feda0c0bd Merge pull request #31 from haven1433/dev
Level-Up Move support
2019-06-08 14:05:18 -05:00
Benjamin Popp
19312af077 code cleanup
* Don't let the table tool write runs. This matters if the pointer is bugged and not actually pointing to stream data.
* Use IStreamRun interface where possible.
2019-06-08 14:04:42 -05:00
Benjamin Popp
6474b11938 Fix whitespace 2019-06-08 13:42:23 -05:00
Benjamin Popp
2697ea3dd2 Ascii improvements
* Backspace on an ascii run behaves better.
* Ascii run has right-click -> remove format option
2019-06-08 13:29:02 -05:00
Benjamin Popp
ba2bbeca7c Support search for level-up moves
"Vine Whip" now finds:
* Text
* Move data
* Pokemon that can learn it via egg moves
* Pokemon that can learn it via level-up
2019-06-08 12:50:24 -05:00
Benjamin Popp
9bddcbae31 label anchor streams
When looking at a stream that's tied to an anchor, show a name label based on which element points to it.
2019-06-08 11:04:24 -05:00
Benjamin Popp
0951c4737a update table edit goto logic
Only 'goto' start of table while editing anchor if we're editing the table format: editing the length should not reset the view.
2019-06-07 22:06:37 -05:00
Benjamin Popp
3ee24604de Support PLM runs in Gaia and Altair
Apparently some tool gives you moves at level 101 as padded filler. We should support decoding tables with moves learned at level 101 o_O

For known-length searches, we can keep looking to see if data is a match slightly after we find a bugged element. We can do this by expecting a certain percentage of errors in the data, somewhere between 1-2% is probably safe. This lets us find the right data even if the person editing the ROM made some mistakes.
2019-06-07 21:44:45 -05:00
Benjamin Popp
a67b2644f6 Fixing Clover
Clover has a pointer in its lvlmoves table that points to an empty moveset. But it's pokemon 0, so it doesn't matter. This is valid, I can support it.
2019-06-07 07:03:58 -05:00
Benjamin Popp
dd554edf18 Auto-Search lvlmoves: Emerald
Emerald didn't work because in Emerald, there's a false pointer at the start of one of the PLM runs. This is easy to correct: just add Pointer as a special case, since it is the only type of run that doesn't require having a name or pointer to it.
2019-06-06 21:55:06 -05:00
Benjamin Popp
e18b0e7d0c Bug Fix
When I'm clearing format to add a dependent pointer format, clear all the space needed by the new run, not just space used by the run that starts at the same point. This matters in the case of a false pointer that thinks it's pointing to text which ends at the same spot.
2019-06-06 20:55:38 -05:00
Benjamin Popp
293ad9000c Auto-search for descriptions in items table
In FireRed, we learned that there are some false pointers that were making the maxLength calculation cause the descriptions not to be found correctly.
In Ruby, the first item description is "" (length 1).
Found another bug for descriptions where we need to make sure to do a new binary search after removing pointers when changing table lengths.
2019-06-05 21:41:32 -05:00
Benjamin Popp
0c3653f13b Fixes to make auto-search work for FireRed 2019-06-04 22:58:32 -05:00
Benjamin Popp
802ffda1c8 Improvements while prepping for lvlmoves auto-search
auto-search doesn't actually work yet. But this is roughly what the code will be.
2019-06-04 22:46:38 -05:00
Benjamin Popp
e6a915dad5 Bugfix
When we call UpdateNewRunFromPointerFormat, it's possible that new runs could be added, or old runs can be removed. In that case, any index that we've calculated as to where in the list to put the new run could be incorrect. To keep the runs in order, we need to recalculate the index.
2019-06-04 02:32:55 -05:00
Benjamin Popp
cb97ef3008 update to use constant 2019-06-04 02:20:47 -05:00
Benjamin Popp
e5d06743c8 Pulling in the remaining useful fixes from dev1
* call SearhcForPointersToAnchor as late as possible
* support PLMRuns as inner pointer formats
* only allow for PLM runs to be auto-added if the data is the correct format.
* trim excess spaces off of inner format parsing
*
2019-06-04 02:18:40 -05:00
Benjamin Popp
26d7581368 Edit stream array elements to support plm runs
I previously thought I'd need a different type of run for each type of stream, so I made a text specific one. But I realized that the ViewModel's for both PCSRuns and PLMRuns would have very similar interfaces. Mostly, they need to expose a function to push data to the model, or pull data to a text string. So I added an interface that does that, and now they can both use the same ViewModel.
2019-06-04 01:47:29 -05:00
Benjamin Popp
44951fde72 Make ArrayRunPointerSegment support plm runs 2019-06-04 01:39:01 -05:00