Skip to content

feat: tell shoppers what a released Pokémon keeps - #291

Open
LuceteYang wants to merge 1 commit into
chattymin:mainfrom
LuceteYang:feat/shop-egg-release-note
Open

LuceteYang wants to merge 1 commit into
chattymin:mainfrom
LuceteYang:feat/shop-egg-release-note

Conversation

@LuceteYang

@LuceteYang LuceteYang commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Why

I bought an egg expecting to lose the Pokémon I was raising — and specifically expecting it to disappear from my Pokédex. Reading the code afterwards, I was wrong on both counts that matter.

The card says only "Send off your current Pokémon and start fresh with a new egg." Nothing follows it, so "send off" reads as "lose it", and the shiny warning sitting right next to it reinforces that something irreversible is happening.

What actually happens:

  • buyEgg() appends releasedDexEntry(from:) before clearing the active Pokémon, so the species stays in the Pokédex. FreshEggTests.testReleasedSpeciesStaysInTheDex locks this in.
  • chooseBase() halves the hatch weight of any base whose line you have already completed. That check reads collectedFinals, which only graduate() fills — releasing leaves it untouched, so a released Pokémon keeps its full weight and can hatch again at the same odds.

The one thing you do give up is the growth progress. The shop says none of this, so the card reads scarier than the feature is.

Egg card, before and after

And in Korean, where the description fits on one line so the note costs two:

Egg card in Korean, before and after

Rendered the same way as scripts/gen-settings-screenshots.py does its assets — the popover cannot be opened from a script, so the card is drawn in HTML with the colours and metrics sampled from assets/screenshot-shop.png / -ko.png.

What changes

Adds eggReleaseNote right under eggDescription:

A released Pokémon stays in your Pokédex and can hatch again at the same odds — only the growth progress is lost.

It goes in the description column rather than the price row, which belongs to the price, the button and eggShopLockedHint. Rendered only while there is a Pokémon to release. Translated for all seven languages.

Re-incubation is deliberately left out — eggDescription already says the new egg starts from scratch, and repeating it pushed the German string to three lines.

Testing

swift build and swift test (1048 tests) pass.

🤖 Generated with Claude Code

The egg card only said the current Pokémon is sent off, so the natural
reading was that its Pokédex entry goes with it. It does not: buyEgg()
appends releasedDexEntry() before clearing the active Pokémon, so the
species stays in the Pokédex.

The odds are worth stating too, and in the other direction from what
you would guess. chooseBase() halves the weight of any base whose line
you have already completed, and that check reads collectedFinals, which
only graduation fills. Releasing leaves it untouched, so a released
Pokémon keeps its full hatch weight and can come back at the same odds.

Add eggReleaseNote directly under eggDescription, where the reader has
just been told what they give up. The price row stays for the price,
the button, and eggShopLockedHint. Shown only while there is a Pokémon
to release.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
LuceteYang added a commit to LuceteYang/PikaTokenBar that referenced this pull request Sep 11, 2026
LuceteYang added a commit to LuceteYang/PikaTokenBar that referenced this pull request Sep 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant