Releases: eperdeme/TamaPoke
Release list
TamaPoke v4.1.1
Older saves keep their boxed Pokemon when upgrading.
Back up before installing. There are no changes to gameplay, balance or controls, and no factory reset is needed.
Older Save Upgrades
- Converting an older party could save an empty box before the boxed Pokemon had been loaded. The party survived, but the box could then appear empty and stay that way after restarting.
- The upgrade now loads both the party and the box before saving their converted contents together.
- This protects older saves and backups that still need conversion. Saves already using the current record layout do not need this conversion.
- This update does not automatically recover a box that was already recorded as empty. Keep any backup made before the problem occurred; installing this update is not a recovery operation.
Additional Checks
- Release checks now run compatible tests on an emulated ESP32-S3, including real save storage, older-save upgrades, reboot persistence and watchdog detection.
- The existing battle-exit, audio and touch checks remain in place. These automated checks do not replace testing on a physical board.
The save format is unchanged. Downgrading remains unsupported.
TamaPoke v4.1
Battle wins save correctly, and leaving a battle no longer causes a delayed restart.
Replace v4.0 with this update. v4.0 did not fix the badge-loss problem and could restart shortly after a wild battle. It has been withdrawn.
Back up before installing. Your existing saved Pokemon, party, box, badges and Pokedex carry over. This update cannot recover progress that the previous firmware failed to save.
Badges survive a restart
- Preparing a team for battle could accidentally disable saving for the active Pokemon. A win awarded its badge on screen, but saving failed, the red warning triangle appeared, and the badge vanished after restarting.
- Battle preparation no longer breaks saving. Badges and training rewards are kept after a reboot.
- v4.0 incorrectly blamed this problem on full save storage. The warning was reporting failed saves, not proof that storage was full.
No delayed restart after a wild battle
- Stopping battle music partway through a note could leave the sound task stuck running without a pause. The board then restarted a few seconds after returning to the main screen.
- Stopping music now clears the unfinished notes and lets the sound task wait normally.
Verified on a real board
- A gym win, no red warning triangle, and badges still present after reboot.
- A wild win followed by a return to the main screen, without the delayed restart.
- The existing saved Pokemon, party, box, badge and Pokedex records survived the update.
The save format remains forward-only. Downgrading is unsupported; use the verified backup before any recovery operation.
TamaPoke v3.25
Galar and Paldea sprites, and sprite packs that install in about a third of the time.
Back up before installing, as usual. Your creature, Party and Box carry over unchanged.
Galar and Paldea are now playable
- The installer now offers Galar and Paldea sprite packs. Until now the board reported both as a missing pack while the installer had nothing to install, so the two regions stayed locked for everybody.
- Install them from the pack list like any other region. Once they are on the card, both regions open up for eggs, exploring, gyms and the Pokedex.
- Pokemon numbered 1000 and above, Gholdengo, Terapagos and Pecharunt among them, now draw properly. Without this firmware they would show as a bare number even with the pack installed.
Installing packs is much faster
- On a real board, the same 30 sprites went from 93 seconds to 34. The whole Paldea pack, about 29 MB, took under five minutes.
- While sprites arrive, the board shows a RECEIVING SPRITES screen with a file count instead of a game that stutters and misses taps. The game carries on by itself a few seconds after the last file.
- Most of the speed comes from this firmware. The installer page is a little faster even on older firmware.
No more re-sending packs you already have
- Adding a region changes the shared thumbnails, and that used to mark every pack you had as needing an update even though not one of its sprites had changed. Those packs now show as Current.
- So a board with the first seven regions only needs Galar and Paldea, about 55 MB, rather than all nine at 285 MB.
What to do
- Install this firmware, then tick Galar and Paldea in the pack list. Restart the board afterwards so the new thumbnails load.
TamaPoke v3.24
A larger Box, and one less surprising tap when your Party is full.
Back up before installing, as usual. Your current creature, Party and all 18 existing Box slots carry over. The update adds 18 empty Box slots without rearranging your collection.
The Box now holds 36 Pokemon
- Storage doubles from 18 to 36 Pokemon, across six pages of six.
- Existing Box contents keep their slots. The three new pages begin empty.
- Sorting by slot, number or level still changes only the view, never the saved order.
- Full backups and restores include all 36 Box slots.
Boxed Pokemon always open their details
- Tapping a boxed Pokemon now always opens its sheet with TO PARTY and RELEASE, even when all six Party slots are occupied.
- With a full Party, pressing TO PARTY then asks which Party member should exchange places with it. Previously the first tap skipped the sheet and jumped straight to that picker, which looked like the Box had simply closed.
- RELEASE remains permanent and still requires confirmation.
TamaPoke v3.23
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.
TamaPoke v3.22
Backups on the installer page now happen as part of flashing instead of being something you have to remember, and they are checked before you are told you have one.
Back up, then install
- The installer has a new Back up, then install button, and it is the primary one. It reads the save off the board, verifies it, downloads it as a
.tpsavefile and keeps a copy in your browser, and only then hands over to the flasher. Install without backup is still there if you want it. - Your browser may ask you to choose the board twice: once to read the save, once to flash. That is a limitation of how the two connections work and cannot be avoided from the page.
- A brand-new board, or one sitting in download mode, has no save to read. The page says so and goes straight through to the flasher rather than getting in the way.
Backups are now verified, not just downloaded
- A backup is checked before you are told it worked. The board reports how many bytes it produced; the page now compares that against what actually arrived and verifies the save's checksum. Previously a capture was accepted if it merely ended with the right line, so a read that stopped early could be downloaded and presented as a complete backup. A partial backup is worse than no backup, because you only find out when you need it.
- Restoring runs the same check before anything is sent, so a truncated or corrupted file is refused up front with a reason rather than after the whole upload.
- Restoring now waits for the board to acknowledge every chunk instead of assuming a fixed delay was long enough.
Recent backups, kept in this browser
- The Save vault now lists your recent backups with the date, trainer name and creature, and each one can be restored to a connected board or downloaded again in one click. Twelve are kept.
- This is a convenience, not a backup, and the page says so. They live only in that browser on that computer, and are lost if you clear site data, use private browsing, or move to another machine. The downloaded
.tpsavefile is the real backup. - Nothing is uploaded anywhere. There is no account, no server and no copy of your save outside your own machine, which is deliberate.
Firmware
STATSnow reports aboard=line, taken from the chip's own hardware ID. It exists so the installer can tell two devices' backups apart in that list. It identifies nothing else and authorises nothing.
Under the hood
- The page's save-handling code has tests for the first time, run against a save exported by the real firmware. The checksum is pinned to the published check value for its algorithm rather than to a second copy of it.
- The page could previously hold the serial port open after it believed it had disconnected, which would have stopped the flasher claiming the device. Fixed, and it is what makes the backup-then-install handoff work.
- The
.jscache keys the page uses to defeat CDN caching are now computed at build time instead of being typed by hand, and a release is refused if they have drifted.
Installer
- Published rebuilt v3.22 firmware and an updated web-installer manifest. Existing NVS saves remain outside the installer write ranges.
Full changelog: v3.21...v3.22
TamaPoke v3.21
A hardening release. Nothing behaves differently, and there is no bug here that anyone could have hit — if you are on v3.20 there is no urgency in taking it.
It closes the last remaining instance of the fault behind #4, found while writing that fix up rather than reported.
Gym region handling
- The team-select screen now remembers which region's gym it was opened for. It previously read the region from the gym menu every time it needed it, so the hard-mode team-size limit and the leader named at the top of the screen were answered from wherever the menu happened to be pointing rather than from the gym you had actually chosen.
- Confirming a fight now explicitly fights the region the team-select screen showed you, so the team limit you were given, the leader you were shown and the ladder the badge is filed under cannot disagree.
This was not reachable in v3.20. Every gesture that could move the gym menu already checks for the team-select screen first and backs out of it instead, so the menu could not move underneath it. The fix is here because that protection is an ordering that has to keep being true, and this is the same missing-snapshot mistake that put Brock's Onix into every region's gym — one screen earlier, and one dispatch-order change away from mattering.
A regression test now opens the picker on one region's gym, moves the menu underneath it to a region whose first gym fields a different number of creatures, and asserts the limit does not follow. It picks that second region by searching for one that actually differs instead of naming it, because the obvious pair (Johto and Kalos) both field two and made the test pass whether the fix was present or not.
Installer
- Published rebuilt v3.21 firmware and an updated web-installer manifest. Existing NVS saves remain outside the installer write ranges.
Full changelog: v3.20...v3.21
TamaPoke v3.20
Gym ladders outside Kanto (#4)
- Every gym leader now sends out their own team. In Johto, Hoenn, Sinnoh, Unova, Kalos and Alola, the leader opened with the correct creature but the moment you knocked it out the fight switched to Brock and his Onix. The battle kept a note of which region it belonged to and then never filled it in, so it fell back to Kanto for everything after the first creature.
- Badges earned outside Kanto are now recorded against the right region. The same missing note sent the badge to Kanto's ladder, which is why the next gym in your own region stayed locked and the other regions could not be progressed at all.
Badges you have already earned are unaffected. Any that were misfiled to Kanto stay where they were put, so a non-Kanto ladder may still show a gap you need to re-beat; the leader will now award it correctly.
Save integrity (#3)
- Saves are now written as complete, checksummed snapshots instead of around fifty separate values. A power cut, a four-second power-button hold, or one failed write partway through a save could previously leave some values updated and others not, so a creature could come back with its current Attack training beside its older Defence, Speed and species. The device now loads the newest complete snapshot and falls back to the previous one if the last write was interrupted.
- The same protection now covers player progress: badges, the Pokedex, the daily streak, medal totals and minigame records. A cut partway through those could leave a gym badge won with no Pokedex entry for the creature that earned it, or a medal counted on the creature but missing from your lifetime total.
- A retired creature waiting for a party slot is no longer lost if the device turns off before you choose one. The farewell handed the creature over in memory only and the party slot was not written until you accepted it, so powering off during the banner, or while the party screen sat open, left you with the new egg and nothing else. It is now stored together with the egg, so the two survive or fail as one.
- A save that cannot be completed now leaves the previous save untouched and retries, instead of applying half of itself. Write failures were previously ignored.
Upgrading is recommended for anyone who uses the power button to switch the device off, and strongly recommended for anyone who has seen a creature's species, training or badges change after a reboot, or who plays the gyms outside Kanto.
Existing saves are carried over automatically on first boot. Nothing is reset, and no action is needed.
Save diagnostics
- A warning triangle now appears beside the battery if saving has stopped working, meaning flash storage could not be opened or three writes in a row have failed. There was previously no sign of this on screen at all. If it appears, back the save up with
EXPORTover the serial console while you still can. - A pending save is now flushed when you begin holding the power button and when the battery reaches its low-battery warning, rather than only on a timer.
HEALTHover the serial console now reports whether saving is working and how much flash storage is left.
Installer
- Published rebuilt v3.20 firmware and an updated web-installer manifest. Existing NVS saves remain outside the installer write ranges.
Full changelog: v3.19...v3.20
TamaPoke v3.19
Explore every installed region
- Added a large
< REGION >selector to EXPLORE. Tap either arrow to choose where the next wild encounter comes from. - Explore selection is independent of the current egg region, so changing hunting grounds does not reroll or move the egg.
- Regions whose sprite pack is not installed are skipped automatically.
Localized move names
- Move names now follow the selected UI language in move cards, move pickers, battle buttons, level-up prompts, and battle narration.
- Added complete ASCII-safe move-name tables for Spanish, English, French, German, Italian, and Portuguese without changing the stable move IDs stored in existing saves.
Installer
- Published rebuilt v3.19 firmware and an updated web-installer manifest. Existing NVS saves remain outside the installer write ranges.
Full changelog: v3.18...v3.19
TamaPoke v3.18
Critical fix
- Prevent trainer and wild opponent objects from overwriting the creature stored in NVS. Previously, battling could replace the saved pet with the last opponent and alter Pokédex registration; the in-memory pet looked normal until a reboot or firmware update reloaded the corrupted save.
- Restrict persistent writes to the real
Petinstance opened withbegin(). Scratch opponents can no longer write to the shared save namespace.
Upgrading is strongly recommended for anyone using trainer battles or wild encounters.
UI
- Disabled FOCUS and box TAKE actions now show a visible reason, including when the party is full.
Installer
- Published rebuilt v3.18 firmware and an updated web-installer manifest. Existing NVS saves remain outside the installer write ranges.
Full changelog: v3.17...v3.18