Loopover - NDS
(copied from Simplenote)
For Loopover, it was a relatively simple game to make cheevos for. After getting a grasp of the game, I was able to narrow down the key addresses to get.
- The timer
- The moves
- The win condition
- Is the grid scrambled?
- The location of the letters on the grid
I could find the moves pretty easily, it was just make a move, filter, make another few moves, hit it with a last value plus 0x0X amount, and I found it eventually at 0x51098
as a 32 bit number.
Finding 0x51098
was very helpful, as I found the timer, win condition and scrambled indicator in the same area of memory.
The timer worked pretty much how I’d expect it to; you had to take the 32 bit value, convert it to denary, then divide by 60 to work out into seconds.
The next part was the location of the letters. This took longer than expected. I had the dilemna of whether the games memory address was the letter itself, or the actual location on the grid.
Code Review:
Set Design
Set design looks good, the game doesn't give much to work with so I don't have any feedback to give there.
Titles
Titles look good and are in title case.
Descriptions
Descriptions look solid.
Badges
Badges look good.
Points
I'm not sure if https://retroachievements.org/achievement/399842 is too high, I'm not any good at this sort of thing but the scores seem reasonable, could always be reduced later.
Code Notes
Code notes look good. I would go through and remove any question marks on addresses you're certain work at this point like 0x51090 Scrambled? and 0x510a0 Win?. For 0x510a0 Win? I would also add which value indicates the game has been won, like you did with 0x51094 Timer.
0x051090 Scrambled and 0x051094 Timer are 32bit, and 0x0510a0 Win probably is as well. For these values its not crucial to use the correct mem size but wrong mem sizes can result in issues in general.
Achievement Logic
Any feedback I give applies to all other similar achievements too
All
In general you don't have any delta checks. While the achievements might work without them, these ensure it only unlocks exactly at the correct moment. They're mostly needed for save protection, this game won't need that but its still good practice to include delta checks in the logic. The complete a grid achievements seem to unlock when 0x0510a0 Win? changes from 0 -> 1, so adding a delta 0x0510a0 = 0 should work. The spelling achievements might be trickier but I'll go over that below
"Speedy Loopover" - Complete a grid in under 7:30:00 https://retroachievements.org/achievement/399829
The PauseIf here doesn't do anything, there are no hit counts here for it to pause. https://docs.retroachievements.org/PauseIf-Flag/
You can remove the PauseIf and negate the condition, but condition 5 already covers this so you can remove condition 6 entirely.
"Lightning Loopover" - Complete a grid in under 2:30:00 https://retroachievements.org/achievement/399831
Same as above but with a ResetIf. There are no hit counts on the achievement to reset
"Why So Serious?" - Spell 'JOKER' across the middle row. https://retroachievements.org/achievement/399835
Both the ResetIf and PauseIf's do nothing here as well, so those conditions can have the flags removed and be negated. (0x051090 = 1 instead of ResetIf 0x051090 != 1)
For a delta check we can't use a Mem > Delta on 0x051098 Moves because it increments before the letters move into place, but I'm wondering if 0x05105c or 0x051064 would work. Both change values when letters are moving, you should experiment with those and figure out what they do. The Frozen and Pause behavior in Memory Bookmarks might be useful if you haven't tried those yet.
What do you think of having the achievement work in any row instead of only the middle one? And how about vertically or diagonally? I think in the middle row is fine but it'd be easy to add support for the other rows/columns, let me know if you think that would be good and want to try implementing it.
Leaderboards
The leaderboards don't need to display the values on screen since the game already shows the time and number of moves, but otherwise they look good. Ideally there would be more checks than just checking the timer > 0 (like mode, current game state) but this game is very simple so it makes sense here.
Rich Presence
The first condition uses Lookup:Menu but it will always display Menu. Otherwise it looks good.
Hubs
The game page doesn't have any hubs linked - the Am I Ready for Review? doc says a code reviewer can add them for you, so I guess you're able to edit the text fields but not add hubs? When I was a jr we couldn't edit RP or anything so I don't know, but let me know if I need to add hubs for you. The hubs on the Pokemon Mini set are a good place to look