Repository navigation
TamaPoke v3.23
·
10 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
Two more gym ladders, a fourth minigame, every creature has a voice, and a pile of work on the one thing that matters most: not losing your save.
You do not need to do anything before installing. Your creature, party, box, badges, Pokedex and streak all carry over. Back up anyway from the installer page — that button exists for a reason.
Galar and Paldea gyms
- Both regions now have a full ladder: eight leaders, an Elite 4 and a champion, on easy and hard. That is nine ladders in total.
- Galar follows Sword. It has two version-exclusive gym slots, and a ladder is one fixed list, so a choice had to be made: Bea rather than Allister, Gordie rather than Melony. The two leaders Sword does not use fill Elite 4 seats instead, because Galar has no Elite 4 of its own.
- Paldea's Larry is the Normal gym leader and not also the Elite 4's Flying member. That doubling is canon, but the same name appearing twice in one ladder reads as a bug, so Penny takes that chair.
- Both are marked NOT VERIFIED in the source, like Unova, Kalos and Alola. There is no public disassembly of Sword/Shield or Scarlet/Violet to check them against, so their levels are approximate and said to be.
- Neither ladder appears until its sprite pack is on your card. They currently read NEEDS PACK, the same as the Pokedex and the egg pool already did.
A gym could show you a number instead of a creature
- The sprite-pack check was applied to the Pokedex and the egg pool but not to the gym ladders, so a ladder was enterable whether its creatures could be drawn or not. A leader could open a fight with a bare dex number where a Pokemon should be. Alola could already do this; adding Galar and Paldea would have made it ordinary. Now gated everywhere.
- A board with no microSD at all is unaffected — every region stays available, exactly as before.
A new minigame: MEMORY
- Four pads flash a sequence, you repeat it, and it gains a step every round. Your score is the longest sequence you got back, and it is kept as a record like the other three.
- It trains no stat, deliberately. Strength, speed and defence already have a game each, so a fourth would just be another grind. This one pays in joy and bond.
- It also costs almost no energy and burns no weight, which makes it the one to reach for when your creature is too worn out for the others.
Every creature has its own chirp
- Hatching, evolving, swapping who you are raising, sending one into battle, and opening a filled-in Pokedex entry all now play that species' own sound.
- Nothing is recorded. Each chirp is worked out from the creature's own typing and base stats — bulky things sound low, quick things sound high, and the heavy mineral types get a rattle. There is no cry data in this project and none is downloaded.
- Opening an unregistered dex entry stays silent, since the sound would give away the thing the "???" is hiding.
Pokedex filters, and sorting your box
- Tap the line under the region name in the Pokedex to filter: ALL / RAISED / CAUGHT / SHINY.
- RAISED and CAUGHT are genuinely different answers, not two names for one thing. The dex records what you have raised as your own creature — so a wild capture sitting in your box has never touched it. CAUGHT reads your party, your box and the creature on the panel.
- Tap the middle of the box screen to reorder it: by slot, by number, or by level. It only changes what you see; nothing in your box is moved or rewritten.
- A party member's sheet now offers MAKE ACTIVE or TO BOX. A boxed
member's sheet offers TO PARTY or RELEASE; release is permanent and
still requires confirmation.
Brightness, and a way to start over
- Settings is now two pages, paged from the rim. Page 1 is the clock; page 2 is sound, volume, brightness and language, plus RESET GAME.
- Brightness is saved, survives a reboot, and is included in your backup. It sets a ceiling on the automatic dimming rather than replacing it — the idle and sleep dimming protect the screen and are not preferences. The default is exactly what this firmware has always used, so nothing changes until you touch it.
- RESET GAME always asks first. There was previously no way to start a new game from the device at all, only over a serial cable.
Your creature is harder to lose
- Swapping who you are raising could duplicate one creature and destroy another if power was lost at the wrong moment. That exchange writes two separate records and nothing can make them one write, so it now records its intent first and finishes the job on the next boot. There is a test that cuts the power at five different points and checks that each creature still exists exactly once.
- A bad clock reading could age your creature two weeks it never lived. An unreadable clock used to overwrite the only record of when the device was last seen — which then turned the next good reading into a jump of decades — and a wild forward jump was trimmed to two weeks and then applied, which can carry a creature past its farewell and into the level cap in one boot. Readings are now judged: nonsense is refused and keeps the old reference, an implausible jump is adopted but ages nothing, and a genuine absence still applies in full. Nothing you earned is ever clamped away.
- Downgrading firmware could quietly throw away your party and box. A party/box record written by a newer build was too large for an older one to read, and the older build fell back to a less safe copy without saying so. Found by a test written for this release, and fixed.
- A creature swap between party and box was writing the largest block in the save twice for one move. Now once, which halves the wear and keeps a complete previous copy available.
Small things
- Your creature now has a temperament on its profile page — BOLD, STURDY, BRISK, HARDY, EAGER or CALM. It is read from the IVs rather than stored, so it is fixed at hatch, survives evolving, and is always true: a BRISK creature really is the fast one.
- The player card's last page is a five-line daily checklist — cared for, fed, clean, happy, rested. It is worked out from what the save already holds, so there is nothing to claim and nothing to reset; it turns over with the day by itself.
- With the screen off, the device now redraws far less often instead of at full rate. Battles and minigames keep their full rate, because pausing those would have broken them.
Under the hood
- The screen brightness, and the memory game's record, are new save fields. Both are additive: an older save simply has neither and behaves as it always did, and a
.tpsavefrom a previous version still restores. - The player record grew a field, which moves where the rest of it starts. It now carries its own layout size, so a record written by any previous build still loads — there is a test that builds one by hand and proves it, and the naive version of that change was checked to confirm it would have rejected every existing save.
- Four new test suites (
cry_test,clock_test,reset_test,view_test) and real coverage added to five more. The minigames had no flush coverage at all before this, in the one test that exists because a screen once shipped frozen. - The emulator's fake storage ignored namespaces entirely, sharing one map between them. That made the reset work look correct while a real board would have erased the very flag recording it. Fixed, along with a
remove()that now respects simulated write failures — without which a power-cut test could delete the journal it was meant to be testing.