cd /news/ai-tools/pokemon-battle-simulator-napkin-chal… Β· home β€Ί topics β€Ί ai-tools β€Ί article
[ARTICLE Β· art-14680] src=dev.to pub= topic=ai-tools verified=true sentiment=Β· neutral

Pokemon Battle Simulator Napkin Challenge!

A developer used Google's Gemini 3.5 Flash AI to build a complete Pokemon Battle Simulator from a single system architecture image. The AI generated the entire project, including an API client with local caching, a move registry with STAB priority, a battle SDK with level scaling, and a CLI shell supporting team selection and battle commands.

read6 min publishedMay 26, 2026
  β–„β–€β–€β–„        Antigravity CLI 1.0.2
 β–€β–€β–€β–€β–€β–€       xbill9@gmail.com (Google AI Ultra)
β–€β–€β–€β–€β–€β–€β–€β–€      Gemini 3.5 Flash (Medium)

β–„β–€β–€ β–€β–€β–„ ~/pokemon

β–„β–€β–€ β–€β–€β–„

────────────────────────────────────────────────────────────

use @pokemon_api.jpg as the system architecture and build out a pokemon battle simulator

● ListDir(/home/xbill/pokemon)

● Read(/home/xbill/pokemon/pokemon_api.jpg) (ctrl+o to expand)

β–Έ Thought for 7s, 852 tokens

Observing the Image

● Bash(node -v && npm -v && python3 --version) (ctrl+o to expand)

β–Έ Thought for 6s, 2.5k tokens

Considering Language Choice

● Create(/home/xbill/.gemini/antigravity-cli/brain/42...abf-b329-894a07ec5075/implementation_plan.md) (ctrl+o to expand)

I have created the implementation plan for the Pokemon Battle Simulator matching the architecture in the diagram.

Please review the implementation_plan.md and let me know if you approve or if you'd like any modifications before I

begin

building the simulator.

────────────────────────────────────────────────────────────

yes i approve

β–Έ Thought for 6s, 304 tokens

Initiating Execution Phase

● Create(/home/xbill/.gemini/antigravity-cli/brain/42560c5f-0aec-4abf-b329-894a07ec5075/task.md)

● Create(/home/xbill/pokemon/package.json)

● Edit(/home/xbill/.gemini/antigravity-cli/brain/42560c5f-0aec-4abf-b329-894a07ec5075/task.md) (ctrl+o to expand)

β–Έ Thought for 7s, 364 tokens

Defining API Layer

● Create(/home/xbill/pokemon/src/api/pokeApi.js)

● Edit(/home/xbill/.gemini/antigravity-cli/brain/42560c5f-0aec-4abf-b329-894a07ec5075/task.md) (ctrl+o to expand)

β–Έ Thought for 7s, 1.4k tokens

Defining Move Database

● Create(/home/xbill/pokemon/src/api/moveDatabase.js)

● Edit(/home/xbill/.gemini/antigravity-cli/brain/42560c5f-0aec-4abf-b329-894a07ec5075/task.md) (ctrl+o to expand)

β–Έ Thought for 7s, 2.6k tokens

Defining Battle SDK Logic

● Create(/home/xbill/pokemon/src/sdk/battleSdk.js)

● Edit(/home/xbill/.gemini/antigravity-cli/brain/42560c5f-0aec-4abf-b329-894a07ec5075/task.md) (ctrl+o to expand)

β–Έ Thought for 1s, 373 tokens

Designing Color Utility

● Create(/home/xbill/pokemon/src/utils/colors.js)

● Edit(/home/xbill/.gemini/antigravity-cli/brain/42560c5f-0aec-4abf-b329-894a07ec5075/task.md) (ctrl+o to expand)

β–Έ Thought for 6s, 1.3k tokens

Constructing the CLI Router

● Create(/home/xbill/pokemon/src/cli/index.js)

● Edit(/home/xbill/.gemini/antigravity-cli/brain/42560c5f-0aec-4abf-b329-894a07ec5075/task.md)

● Create(/home/xbill/pokemon/index.js)

● Edit(/home/xbill/.gemini/antigravity-cli/brain/42560c5f-0aec-4abf-b329-894a07ec5075/task.md) (ctrl+o to expand)

β–Έ Thought for 8s, 228 tokens

Defining Test Runner Goals

● Create(/home/xbill/pokemon/src/utils/test_runner.js)

● Bash(node src/utils/test_runner.js)

● Edit(/home/xbill/.gemini/antigravity-cli/brain/42560c5f-0aec-4abf-b329-894a07ec5075/task.md) (ctrl+o to expand)

β–Έ Thought for 8s, 142 tokens

Drafting Walkthrough Documentation

● Create(/home/xbill/.gemini/antigravity-cli/brain/42560c5f-0aec-4abf-b329-894a07ec5075/walkthrough.md)

● Edit(/home/xbill/.gemini/antigravity-cli/brain/42560c5f-0aec-4abf-b329-894a07ec5075/task.md) (ctrl+o to expand)

β–Έ Thought for 5s, 517 tokens

I have built out the Pokemon Battle Simulator matching the system architecture diagram in @pokemon_api.jpg .

Here is a summary of the components created:

β€’ API Client (pokeApi.js): Connects to PokeAPI with local filesystem caching.

Verifying Project Completion

β€’ Move Registry (moveDatabase.js): Predefined type databases and dynamic move generator prioritizing STAB.

β€’ Gameplay SDK (battleSdk.js): Performs combat math, turn ordering, level scaling (Lv. 50 for team, Lv. 100 with 3x

HP for Bosses), and state execution.

β€’ Color & Formatter (colors.js): Standard ANSI coloring, dynamic health bar drawing, and typewriter-style

delayed text printing.

β€’ CLI Shell & Entry Point (index.js & index.js): Command router supporting /pick team , /stats , /run

battle , /help , and /exit .

Playing the Simulator

To launch the game:

node index.js

For full details on the codebase and how features were tested, please refer to the walkthrough.md.

────────────────────────────────────────────────────────────

node index.js

β–Έ Thought for 5s, 420 tokens

Considering Interactive CLI Commands

● Bash(node index.js)

● ManageTask(Task: 42560c5f-0aec-4abf-b329-894a07ec5075/task-56) (ctrl+o to expand)

The simulator has successfully started and is running in the background:

╔════════════════════════════╗
β•‘  POKEMON BATTLE SIMULATOR  β•‘
β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
Welcome, Trainer! Prepare for epic battles.
Type /help to see available commands.

poke-sim>

You can interact with it by typing commands directly. If you want me to input a command for you, just tell me what to

type (e.g. /help , /pick team pikachu charizard , or /run battle )!

The simulator is ready and waiting at the poke-sim> prompt. Let me know if you would like me to send a command to

the process, or if you would like to run it directly in your own terminal.

────────────────────────────────────────────────────────────

/pick team squirtle mew lucario

● ManageTask(Input sent to task "42560c5f-0aec-4abf-b329-894a07ec5075/task-56".)

● ManageTask(Task: 42560c5f-0aec-4abf-b329-894a07ec5075/task-56) (ctrl+o to expand)

The team has been successfully selected:

β€’ Squirtle

β€’ Mew

β€’ Lucario

The simulator is ready for your next command (e.g. /stats or /run battle ).

The team is loaded! What would you like to do next? You can check their stats with /stats or initiate the battle

with /run battle .

────────────────────────────────────────────────────────────

/run battle

● ManageTask(Input sent to task "42560c5f-0aec-4abf-b329-894a07ec5075/task-56".)

● ManageTask(Task: 42560c5f-0aec-4abf-b329-894a07ec5075/task-56) (ctrl+o to expand)

The simulator is asking you to choose a Boss Pokemon to face:

Choose a Boss Pokemon (Default: Mewtwo):

Which Pokemon would you like to battle? (Or press Enter to face Mewtwo).

────────────────────────────────────────────────────────────

mewtwo

● ManageTask(Input sent to task "42560c5f-0aec-4abf-b329-894a07ec5075/task-56".)

● ManageTask(Task: 42560c5f-0aec-4abf-b329-894a07ec5075/task-56)

● ManageTask(Input sent to task "42560c5f-0aec-4abf-b329-894a07ec5075/task-56".)

● ManageTask(Task: 42560c5f-0aec-4abf-b329-894a07ec5075/task-56) (ctrl+o to expand)

The battle has begun! Here is the current field state:

════════════════════════════════════════════════════════════
⚑ BOSS MEWTWO [Lv. 100]
Type:  PSYCHIC
HP:   [β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ] 1011/1011
────────────────────────────────────────────────────────────
🟒 YOUR SQUIRTLE [Lv. 50]
Type:  WATER
HP:   [β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ]   111/111
════════════════════════════════════════════════════════════

What will Squirtle do?
  1) Hydro Pump [ WATER ] Power: 110 (Spec)
  2) Surf [ WATER ] Power: 90 (Spec)
  3) Waterfall [ WATER ] Power: 80 (Phys)
  4) Tera Blast [ FIRE ] Power: 110 (Spec)
  5) Switch Pokemon
  6) Run Away

Select an action (1-6):

Please choose a move (1-4), switch Pokemon (5), or run (6).

────────────────────────────────────────────────────────────

1

● ManageTask(Input sent to task "42560c5f-0aec-4abf-b329-894a07ec5075/task-56".)

● ManageTask(Task: 42560c5f-0aec-4abf-b329-894a07ec5075/task-56) (ctrl+o to expand)

Oh no! Mewtwo was too fast:

β€’ Mewtwo used Psychic! Dealt 465 damage.

β€’ Squirtle fainted!

You are forced to send out your next Pokemon. Here are your remaining members:

You must send out another Pokemon!

Choose a Pokemon:

  1. Squirtle [Lv. 50] - FAINTED (Active)

  2. Mew [Lv. 50] - HP: 167/167

  3. Lucario [Lv. 50] - HP: 137/137

Please choose either 2 (Mew) or 3 (Lucario):

Please choose 2 for Mew or 3 for Lucario.

────────────────────────────────────────────────────────────

2

● ManageTask(Input sent to task "42560c5f-0aec-4abf-b329-894a07ec5075/task-56".)

● ManageTask(Task: 42560c5f-0aec-4abf-b329-894a07ec5075/task-56)

● ManageTask(Input sent to task "42560c5f-0aec-4abf-b329-894a07ec5075/task-56".)

● ManageTask(Task: 42560c5f-0aec-4abf-b329-894a07ec5075/task-56) (ctrl+o to expand)

Mew is now on the field:

════════════════════════════════════════════════════════════
⚑ BOSS MEWTWO [Lv. 100]
Type:  PSYCHIC
HP:   [β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ] 1011/1011
────────────────────────────────────────────────────────────
🟒 YOUR MEW [Lv. 50]
Type:  PSYCHIC
HP:   [β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ]   167/167
════════════════════════════════════════════════════════════

What will Mew do?
  1) Psychic [ PSYCHIC ] Power: 90 (Spec)
  2) Zen Headbutt [ PSYCHIC ] Power: 80 (Phys)
  3) Psybeam [ PSYCHIC ] Power: 65 (Spec)
  4) Thunder Punch [ FIRE ] Power: 110 (Phys)
  5) Switch Pokemon
  6) Run Away

Select option (1-6):

Please select an action from 1 to 6.

────────────────────────────────────────────────────────────

3

● ManageTask(Input sent to task "42560c5f-0aec-4abf-b329-894a07ec5075/task-56".)

● ManageTask(Task: 42560c5f-0aec-4abf-b329-894a07ec5075/task-56) (ctrl+o to expand)

Mewtwo is incredibly powerful and fast!

β€’ Mewtwo went first and used Thunder Punch! Dealt 195 damage.

β€’ Mew fainted!

You only have Lucario left:

Choose a Pokemon:

  1. Squirtle [Lv. 50] - FAINTED

  2. Mew [Lv. 50] - FAINTED (Active)

  3. Lucario [Lv. 50] - HP: 137/137

Please select 3 (Lucario) to send it out:

Please select 3 to send out Lucario.

────────────────────────────────────────────────────────────

3

● ManageTask(Input sent to task "42560c5f-0aec-4abf-b329-894a07ec5075/task-56".)

● ManageTask(Task: 42560c5f-0aec-4abf-b329-894a07ec5075/task-56)

● ManageTask(Input sent to task "42560c5f-0aec-4abf-b329-894a07ec5075/task-56".)

● ManageTask(Task: 42560c5f-0aec-4abf-b329-894a07ec5075/task-56) (ctrl+o to expand)

Lucario is now on the field!

════════════════════════════════════════════════════════════
⚑ BOSS MEWTWO [Lv. 100]
Type:  PSYCHIC
HP:   [β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ] 1011/1011
────────────────────────────────────────────────────────────
🟒 YOUR LUCARIO [Lv. 50]
Type:  FIGHT   STEEL
HP:   [β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ]   137/137
════════════════════════════════════════════════════════════

What will Lucario do?
  1) Close Combat [ FIGHT ] Power: 120 (Phys)
  2) Aura Sphere [ FIGHT ] Power: 80 (Spec)
  3) Flash Cannon [ STEEL ] Power: 80 (Spec)
  4) Thunder Punch [ FIRE ] Power: 110 (Phys)
  5) Switch Pokemon
  6) Run Away

Select option (1-6):

Please select an option from 1 to 6.

────────────────────────────────────────────────────────────

4

● ManageTask(Input sent to task "42560c5f-0aec-4abf-b329-894a07ec5075/task-56".)

● ManageTask(Task: 42560c5f-0aec-4abf-b329-894a07ec5075/task-56)

● ManageTask(Input sent to task "42560c5f-0aec-4abf-b329-894a07ec5075/task-56".)

● ManageTask(Task: 42560c5f-0aec-4abf-b329-894a07ec5075/task-56)

● ManageTask(Input sent to task "42560c5f-0aec-4abf-b329-894a07ec5075/task-56".)

● ManageTask(Task: 42560c5f-0aec-4abf-b329-894a07ec5075/task-56) (ctrl+o to expand)

Mewtwo was a bit too powerful for our team!

β€’ Mewtwo went first and used Thunder Punch (Fire-type move)! Dealt 520 damage.

β€’ Lucario fainted!

Since all your Pokemon fainted, you were defeated:

╔══════════╗
β•‘  DEFEAT  β•‘
β•šβ•β•β•β•β•β•β•β•β•β•β•

πŸ’€ All your Pokemon fainted. Boss Mewtwo wins.

The game has successfully returned to the main lobby shell:

poke-sim>

You can now:

What would you like to do next? You can try modifying your team, fighting another boss, or typing /exit to close

the simulator.

── more in #ai-tools 4 stories Β· sorted by recency
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain β€” perfect for shipping the agent you just read about.

$git push zahid main
β†’ Live at https://your-agent.zahid.host βœ“
Get free account β†’ Pricing
from €0/mo Β· no card required
LIVE [news/pokemon-battle-simul…] indexed:0 read:6min 2026-05-26 Β· β€”