{#if loadError} {:else if !current}

loading…

{:else} {@const species = current.pokemon}

#{species.number} · generation {species.generation}

{species.name}

{species.type1}{species.type2 ? ` / ${species.type2}` : ''} {#if species.isMythical}· mythical{:else if species.isLegendary}· legendary{/if} {#if species.isBaby}· baby{/if}

Base stats

{#each current.stats as stat (stat.name)}
{stat.name}{stat.value}
{/each}

Total: {current.stats.reduce((sum, s) => sum + s.value, 0)} · default form, current catalog values

{#if current.facts}

Species research

Abilities
{current.facts.abilities .map((a) => `${a.name}${a.hidden ? ' (hidden)' : ''}`) .join(', ')}
Height / weight
{current.facts.height / 10} m · {current.facts.weight / 10} kg
Egg groups
{current.facts.eggGroups.join(', ')}
Growth rate
{current.facts.growthRate}
Catch rate / base friendship
{current.facts.captureRate} / {current.facts.baseHappiness ?? '—'}
EV yield
{current.facts.evYield .map((v, i) => (v ? `${v} ${current.stats[i]?.name}` : '')) .filter(Boolean) .join(', ') || 'None'}
{/if}

Moves in {current.entry?.game ?? 'this game'}

{#if current.learnset.length}
{#each [...new Set(current.learnset.map((m) => m.method))] as method (method)}{/each}
MoveLearnPowerAccuracyPP{#each current.learnset.filter((m) => (moveMethod === 'all' || moveMethod === m.method) && `${m.name} ${m.type}` .toLowerCase() .includes(moveSearch.toLowerCase())) as move, i (`${move.id}-${move.method}-${move.level}-${i}`)}{move.name}{move.type} · {move.category}{move.method}{move.level ? ` · Lv. ${move.level}` : ''}{move.power ?? '—'}{move.accuracy === null ? '—' : `${move.accuracy}%`}{move.pp ?? '—'}{/each}

Learning methods are game-specific. Move power, accuracy and PP use the current catalog snapshot.

{:else}

No learnset is recorded for this game.

{/if}
{#if current.entry}

in {current.entry.game}

{availabilityLabels[current.entry.availability]} {#if current.entry.note} · {current.entry.note}{/if}

{#if current.entry.source === 'manual'}

corrected by hand

{/if}
{:else if gameId}

no catalog record for this game.

{/if} {#if steps.length}

evolution

{/if} {#if current.encounters.length}

where to find it

{:else if current.entry?.availability === 'catchable'}

no encounter details recorded.

{/if}

other games

{obtainableGames.length ? `obtainable in ${obtainableGames.map((game) => game.game).join(', ')}` : 'not obtainable in any game on record'}

{#if otherGames.length}

also present in {otherGames.map((game) => game.game).join(', ')}

{/if}
{#if isAdmin && current.entry}
{ formMessage = ''; return async ({ result, update }) => { await update({ reset: false }); if (result.type === 'success') { formMessage = 'saved'; version++; onsaved?.(); } else if (result.type === 'failure') formMessage = String(result.data?.message ?? 'Could not save'); }; }} >

correct this entry

{#if formMessage}

{formMessage}

{/if}
{/if} {/if}