Agent skill
pokemon-green-en
Pokemon Green Version Text RPG. Gen 1 with 151 Pokemon, 165 moves, full Kanto region. English only. Activated when users mention 'pokemon', 'pikachu', 'battle', 'gym', 'wild', 'pokedex', 'new game', 'continue'. (project)
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/development/pokemon-green-en
SKILL.md
Pokemon Green Version - Text RPG (English)
A Claude skill that fully recreates Gen 1 Pokemon Green Version as a text-based RPG. (English only)
When to Invoke
This skill is automatically activated when:
- User mentions "pokemon", "pikachu"
- "new game", "continue", "start game" requests
- "battle", "gym", "wild", "pokedex" related conversation
Game Features
- 151 Pokemon: From Bulbasaur to Mew
- 165 Moves: All Gen 1 moves implemented
- 15 Type Chart: Including Gen 1 specific bugs
- Kanto Region: From Pallet Town to Pokemon League
- 8 Gyms: Brock, Misty, Lt. Surge, Erika, Koga, Sabrina, Blaine, Giovanni
- Save/Load: 10 slots + autosave
- BGM Autoplay: 45 tracks (macOS afplay)
- ASCII Art: 151 Pokemon sprites
- Cries: 151 Pokemon cries
Starting the Game
Initialization
pkill -f 'pokemon-green.*bgm' 2>/dev/null
BGM Rules
File path: data/audio/bgm/[filename].mp3
Main BGM Files
| Situation | Filename |
|---|---|
| Opening | opening.mp3 |
| Pallet Town | pallet_town.mp3 |
| Oak's Lab | oak_lab.mp3 |
| Route | route_theme.mp3 |
| Wild Battle | wild_battle.mp3 |
| Trainer Battle | trainer_battle.mp3 |
| Pokemon Center | pokemon_center.mp3 |
Playback Commands
# Stop BGM
pkill -f 'afplay.*pokemon-green' 2>/dev/null
# Play BGM (background loop, required!)
while true; do afplay [skillPath]/data/audio/bgm/[filename].mp3 2>/dev/null || break; done
run_in_background: true
Error Handling
|| break: Prevents infinite loop if file missing2>/dev/null: Hides error messages
New Game / Continue
- "new game" - Start a new adventure
- "continue" - Load saved game
Command System
Field Commands
- north/south/east/west: Move in that direction (e.g., "go north")
- go to [location]: Move to specific location (e.g., "go to Pewter City")
- status / party: Check party Pokemon (e.g., "check status")
- bag: Check inventory (e.g., "open bag")
- pokedex: Pokemon encyclopedia (e.g., "view pokedex")
- save: Save game (e.g., "save")
- talk: Talk to NPC (e.g., "talk")
- NPC: Check NPC info (e.g., "NPC list")
Battle Commands
- fight: Enter move selection mode
- [move name] / [number]: Use a move
- bag: Use item
- pokemon: Switch Pokemon
- run: Flee from wild battle
Audio Commands
- bgm off: Stop BGM
- bgm on: Play BGM
- volume [0-100]: Adjust volume
- cry: Pokemon cry
Move Sound Effects
Sound effect mapping: data/audio/sfx-mapping.json
Game Flow
Opening
- Prof. Oak greeting
- Set player name
- Set rival name
Pallet Town
- Choose starter at Oak's Lab (Bulbasaur/Charmander/Squirtle)
- First battle with rival
- Oak's Parcel delivery quest
Adventure Start
- Route 1 -> Viridian City -> Viridian Forest -> Pewter City (first gym)
- Collect 8 badges -> Victory Road -> Elite Four -> Champion
Battle System
Original Battle Screen (Gen 1 Recreation)
Battle screen is displayed simply like the original. Shows only essential elements without unnecessary tips or extra information.
Sprite Display Rules (Original Recreation):
- Opponent Pokemon: Full 13 lines (right-aligned) - Front view
- My Pokemon: Top 5-6 lines only (left, horizontally flipped) - Back view feel
- pokemon-ascii-mini.json sprites are 13 lines × 28 characters
- My Pokemon: flip horizontally and show only top portion
Battle Screen Layout:
╔════════════════════════════════════════════════════════════════╗
║ Wild Pokemon Lv.5 ║
║ ▓▓▓▓▓▓▓▓▓▓░░░░ HP ║
║ ║
║ [Opponent Pokemon Sprite] ║
║ (Full 13 lines - right align) ║
║ (Front view) ║
║ ║
║ [My Pokemon - Back view] ║
║ (Top 5-6 lines only - left) ║
║ (Horizontally flipped, bottom cut off) ║
║ ║
║ Pokemon Lv.5 ║
║ ▓▓▓▓▓▓▓▓▓▓▓▓▓░░ HP 22/22 ║
╠════════════════════════════════════════════════════════════════╣
║ A wild Pokemon appeared! ║
╠════════════════════════════════════════════════════════════════╣
║ FIGHT BAG ║
║ POKEMON RUN ║
╚════════════════════════════════════════════════════════════════╝
Actual Battle Screen Example:
╔════════════════════════════════════════════════════════════════╗
║ Wild PIKACHU Lv.5 ║
║ ▓▓▓▓▓▓▓▓▓▓░░░░ HP ║
║ ║
║ :. :+=. ║
║ .**. . .-*#**#- ║
║ -*: =*+::-+#***+- ║
║ .-*##%#+-:#%#+=+**+*+- ║
║ =%%#########- .=***-. ║
║ =%*#%#*+.:%%#*- -*#= ║
║ .=*#%%#*++*##%%*..+=: ║
║ .:.:+#*%#+=#%##*+=-: ║
║ :**==+*=+%%#=.. ║
║ :+*+++#%#%*: ║
║ .++*%*. ║
║ : ║
║ ║
║ : : ║
║ ++=*. ║
║ .-+-+--==.. ║
║ .-+*+==+-=++=++: ║
║ :++==+++++=-+=-=-:..== ║
║ :+=-=+==++--=---:-+**#+ ║
║ ║
║ BULBASAUR Lv.5 ║
║ ▓▓▓▓▓▓▓▓▓▓▓▓▓░░ HP 22/22 ║
╠════════════════════════════════════════════════════════════════╣
║ A wild PIKACHU appeared! ║
╠════════════════════════════════════════════════════════════════╣
║ FIGHT BAG ║
║ POKEMON RUN ║
╚════════════════════════════════════════════════════════════════╝
Message Display Principles (Original Faithful)
What to Display (same as original):
- "A wild [Pokemon] appeared!"
- "[Pokemon] used [Move]!"
- "It's super effective!" or "It's not very effective..."
- "A critical hit!"
- "[Pokemon] fainted!"
- Status condition messages
What NOT to Display (not in original):
- Damage numbers (HP bar decrease only)
- Type effectiveness hints/recommendations
- Move selection tips
- Tactical advice
- AI behavior predictions
ASCII Art Display
- Battle Start: pokemon-ascii.json (full art once)
- During Battle: pokemon-ascii-mini.json (mini art)
- Pokedex: pokemon-ascii.json (full art)
Damage Calculation (Gen 1)
Damage = ((2*Lv/5+2) * Power * A/D / 50 + 2) * STAB * Type * Crit * Random
Gen 1 Bug Recreation
- Psychic vs Ghost: 0x
- Focus Energy: Decreases critical rate
- Poison vs Bug: 2x
NPC System
NPC Sprite Loading Rules
Loading Order (Required!)
- Convert Korean->English in
data/sprites/npc-mapping.json - Load
data/sprites/npc_ascii/[EnglishName].jsonfile - Display
.downkey ASCII art
jq Loading Example
# Load sprite (cannot load directly with Korean name!)
jq -r '.down | join("\n")' data/sprites/npc_ascii/Professor_Oak.json
Main NPC English Filenames
| Name | Filename | Category |
|---|---|---|
| Prof. Oak | Professor_Oak.json | Story NPC |
| Nurse Joy | Nurse_Joy.json | Facility NPC |
| Rival | Rival.json | Champion |
| Brock | Brock.json | Gym Leader |
| Misty | Misty.json | Gym Leader |
Error Handling
- File not found: Skip sprite, show dialogue only
- JSON parse fail: Use default text
Dialogue Screen Example
+------------------------------------+
| [NPC Sprite] |
| |
| Nurse Joy: |
| "Welcome to the Pokemon Center!" |
+------------------------------------+
| [1] Yes [2] No |
+------------------------------------+
Save System
Saving
- Manual save: "save" or "save [slot number]"
- Auto save: Pokemon Center, city entry, after battle
Save Slots (10 + autosave)
- save [1-10]: Save to specific slot
- load [1-10]: Load specific slot
- save list: View all slots
Gym Information
- Pewter City - Brock (Rock) -> Boulder Badge
- Cerulean City - Misty (Water) -> Cascade Badge
- Vermilion City - Lt. Surge (Electric) -> Thunder Badge
- Celadon City - Erika (Grass) -> Rainbow Badge
- Fuchsia City - Koga (Poison) -> Soul Badge
- Saffron City - Sabrina (Psychic) -> Marsh Badge
- Cinnabar Island - Blaine (Fire) -> Volcano Badge
- Viridian City - Giovanni (Ground) -> Earth Badge
Data File Reference
Pokemon Data
- data/pokemon/species.json: 151 species data
- data/pokemon/learnsets.json: Level-up moves
- data/pokemon/evolutions.json: Evolution conditions
Move/Type Data
- data/moves/moves.json: 165 moves
- data/types/chart.json: 15 type chart
World Data
- data/world/locations.json: Towns/routes
- data/world/encounters.json: Wild encounters
- data/world/trainers.json: Trainers
Audio Data
- data/audio/bgm-mapping.json: 45 BGM mapping
- data/audio/cries-mapping.json: 151 cries
ASCII Art
- data/sprites/pokemon-ascii.json: Full art
- data/sprites/pokemon-ascii-mini.json: Mini art
- data/sprites/npc_ascii/: NPC mini art (94 individual files)
- data/sprites/npc-mapping.json: NPC Korean->filename mapping
Data Key Mapping (Optimized Format)
species.json
n=name, t=types, s=stats[hp,atk,def,spc,spd], c=catchRate, e=baseExp
g=growthRate(ms=medium_slow,mf=medium_fast,s=slow,f=fast), hw=[height,weight]
moves.json
i=id, n=name, t=type, c=category, p=power, a=accuracy, pp=pp, pr=priority, ef=effect
Type codes: N=Normal,F=Fire,W=Water,G=Grass,E=Electric,I=Ice,K=Fighting,P=Poison,R=Ground,Y=Flying,S=Psychic,B=Bug,O=Rock,H=Ghost,D=Dragon
Category: P=Physical, S=Special, X=Status
learnsets.json
lv=levelUp[[level,move]], tm=[number], hm=[number]
encounters.json
g=grass, c=cave, w=water, f=fishing
Format: [[pokemonID, minLv, maxLv, encounterRate]]
trainers.json
n=name, ti=title, g=gym, c=city, ty=type, b=badge, r=reward, tm=tmReward
o=order, d=dialogue, p=team[[id,lv,[moves]]], cl=class
gl=gymLeaders, e4=eliteFour, ch=champion, rt=routeTrainers
items.json
n=name, d=desc, p=price, cm=catchMod, ha=heal, c=cures, ra=revive
ppr=ppRestore, am=allMoves, sb=statBoost, ef=effect, st=steps, et=evoType
Categories: pb=pokeballs, pt=potions, sh=statusHealers, rv=revives, pp=ppItems
bt=battleItems, rp=repels, es=escapeItems, ev=evolutionStones, vi=vitamins
Data Loading
Extract only needed parts with jq (don't load entire large files)
jq '.["25"]' data/pokemon/species.json # Species data
jq '.["025"]' data/sprites/pokemon-ascii.json # Sprite (3 digits)
Key formats:
- species, learnsets: number key ("25")
- sprites: 3-digit key ("025")
References (Detailed Guides)
For detailed system information, refer to these documents:
- BGM System Guide (references/bgm-guide.md) - BGM autoplay, commands, event mapping
- Move SFX Guide (references/sfx-guide.md) - Move sound effects, download method
- ASCII Art Guide (references/ascii-guide.md) - ASCII art usage rules, data files
- NPC System Guide (references/npc-guide.md) - NPC sprite display, name mapping
- Cries Guide (references/cries-guide.md) - Cry playback timing, commands
- Data Integrity Guide (references/data-integrity.md) - Data validation rules, checklist
Language Settings
This skill is English only.
For Korean version, use the separate skill pokemon-green-ko.
Data File Structure
All names/messages are stored in single language format:
{
"name": "Bulbasaur",
"text": "A wild Pokemon appeared!"
}
Message files:
- data/messages/battle.json - Battle messages
Help
Use these commands anytime during the game:
- "help" - Command list
- "location" - Current location info
- "progress" - Story progress
Didn't find tool you were looking for?