liuyanghejerry/open-pokered/new-pokemon
Claude Code and agent skill by liuyanghejerry/open-pokered
- community
Checking that the SKILL.md file is still in the repository.
Add a new Pokémon species to the Pokémon Red/Blue reimplementation — create the species JSON (base stats, types, growth, moves, TM/HM flags, Pokédex entry, evolutions, learnset), understand the auto-assigned species id, handle sprites/cries/names, and make the species obtainable via wild encounters, gifts, or trainers. Use when the user wants to add, rebalance, or evolve a Pokémon.
Install
npx vskill@latest install liuyanghejerry/open-pokered/new-pokemonSKILL.md
new-pokemon — Adding a New Pokémon
One species = one file: crates/pokered-data/pokemon/<Species>.json. At build time pokered-data/build.rs::generate_species_enum regenerates the Species enum from these files: the canonical 151 keep dex ids 1–151 and new species are appended as id 152+ in filename order. No table edits are needed for the data to build — but see "Names, sprites, cries" for the presentation layer.
Naming rules
- PascalCase,
/^[A-Z][A-Za-z]+$/— no digits, no underscores (the name becomes a Rust enum variant).Noneis reserved. - The
speciesfield MUST equal the filename (Bulbasaur.json↔"species": "Bulbasaur") — build.rs asserts this. - Scene scripts reference it SCREAMING_SNAKE (
givePokemon("MR_MIME", 5)); data files use PascalCase.
Species JSON — full field guide
Invariants to respect (the example below is clean JSON — copy it, then fill in):
baseStats— hp/attack/defense/speed/special.- Single-typed species repeat
type1intype2(matches the ROM layout). catchRate— 0 = uncatchable … 255 = easiest;baseExp= EXP yield when defeated.growthRate— MediumFast | SlightlyFast | SlightlySlow | MediumSlow | Fast | Slow.initialMoves— EXACTLY 4 entries;"None"pads empty slots.tmHmFlags— 7 bytes (see below).pokedex—category≤ 11 chars, uppercase ASCII (the label box width);heightFeet/heightInches;weightDecipounds= tenths of a pound (190 = 19.0 lbs);flavorTextPages0–4 pages,'\n'= line break.evolutions— methodlevel(withlevel) /item(withitem+minLevel) /trade.
- Types — one of
Normal Fighting Flying Poison Ground Rock Bird Bug Ghost Fire Water Grass Electric Psychic Ice Dragon. - `tmHmFlags` — 7 bytes; bit n of byte i means TM/HM number
i*8 + n + 1is learnable (TM01…TM50, then HM01…HM05). Easiest reliable method: copy the bytes of a species with similar coverage (read_record(table: "pokemon", id: ...)a few) and flip from there. - `initialMoves` vs `learnset` —
initialMovesare what a level-1 (or freshly generated low-level) mon knows;learnsetis the level-up table, ordered by level. Move names are PascalCaseMoveIds (list_records(table: "moves")to browse; note ROM casing likeThunderpunch,PsychicM). - Evolution targets must themselves exist (or be created in the same batch). For an evolution into your new species, edit the base species'
evolutionsarray too.
Create it
propose_data_edit(table: "pokemon", id: "<Species>", content: <COMPLETE JSON>) — creates pokemon/<Species>.json (a "_file" key is never part of the record). To revise an existing species, read_record first and preserve untouched fields. The editor also has a dedicated Pokémon tab with a guided form, and POST /api/pokemon {name} creates a valid template if the user prefers clicking.
Names, sprites, cries (the presentation layer)
Data builds without these, but the game shows fallbacks until they land:
- Display name —
crates/pokered-data/src/lang_data.rs: add the English name to thespecies_name_enmatch and the Chinese name toSPECIES_ZH(indexed by species id). Fallback:???. (Rust edit — hand off.) - Battle sprites —
gfx/pokemon/front/<name>.pngandgfx/pokemon/back/<name>b.png, where<name>is the species name lowercased with spaces/dashes/apostrophes stripped (with a special case:MrMime→mr.mime). Missing files degrade gracefully (blank sprite), but ship them: draw in the editor's Pixel tab or use AI sprite generation. - Cry —
crates/pokered-data/src/cries.rshas a_ =>default, so new species get a generic cry; optionally add aCryDatarow (Rust edit). - Party icon —
mon_party_icons.rsfallback applies automatically.
Make it obtainable
A species file alone changes nothing in-game. Wire at least one of:
- Wild encounters — add it to a map's
wild.red/wild.bluegrass/water slots inmap.json(see the new-map skill). - Gift / event —
givePokemon("NEWMON", 15)in a.scenestoryline. - Trainers — add it to rosters in
trainers/*.json(see the new-trainer skill). - Evolution — listed in a base species'
evolutions. - Debug —
give_pokemonover the TCP debug server for quick testing.
Verify
cargo build -p pokered-data(regeneratesSpecies+ base-stats + evos/learnsets + Pokédex tables; a malformed file fails here with a clear panic).- In game:
cargo run --release --bin pokered-app --features debug-server -- run --headless --debug-port 9000 --skip-intro, then{"cmd":"give_pokemon","species":"Newmon","level":10}and{"cmd":"get_party"}. - Show it in the Pokédex by setting the seen/owned bits — or just battle it:
sample_battle.json+pokered-app battle --config ....
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingtools/pokered-editor/skills/new-pokemon/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/liuyanghejerry/open-pokered/new-pokemon)