a (allegedly! don't be ignorant!) poke snake mix # ASCII PokeMaze++ A fast-paced ASCII roguelite maze with turn-based Pokémon-style battles. Play as Charmander exploring an ASCII maze: collect coins, pick up items, handle changing weather, build up combos, level up, and face a Boss fight at the end. Runs entirely in the terminal — single Python file, no new dependencies.
Fully compatible with Python 2 and 3. Tests included. Works on Linux, macOS, and Windows.
- Quick Demo
- Getting Started
- Goal
- Controls
- HUD and Map Symbols
- Battle System
- Weather
- Combo Meter
- XP and Leveling
- Mystery Tiles (?)
- Items
- Enemies
- Boss Fight
- Difficulty & CLI Flags
- Usage Examples
- End-of-Run Summary
- Testing
- Compatibility & Optional Dependencies
- FAQ & Tips
- Credits
Run a non-interactive demo to see how it plays:
python PokeMaze.py --demo --quiet-titleFor reproducible runs, set a random seed:
python PokeMaze.py --demo --seed 1234-
Requirements: Python 2.7+ or any Python 3.x.
-
Run:
python PokeMaze.py
-
(Optional) Disable ANSI colors:
python PokeMaze.py --no-color # or export NO_COLOR=1
- Explore the maze and defeat all enemies to spawn and beat the Boss Onix.
- Collect coins (
$) to increase your Score. - Manage your items, Flamethrower PP, and HP carefully.
- Beware of poison, weather effects, and roaming enemies that move after your turn.
- Move:
W A S D - Help:
h - Quit:
q(asks confirmation if interactive)
In Battle:
A→ Ember (base dmg 10)L→ Flamethrower (base dmg 12, uses PP)R→ Run (50% success)P→ Potion (+25 HP)U→ Super Potion (+50 HP)D→ Antidote (cures poison)N→ Nothing (skip turn)
-
HUD displays: HP (with bar), inventory (Pot/Sup/Ant), enemies left, PP, Level, XP, Score, Steps, Combo, and Weather.
-
Map symbols:
@— you (Charmander)E— enemies$— coins?— mystery tiles*— items (Potion / Super Potion / Antidote)###— wall
Map wraps around edges unless you disable it with --no-wrap.
- Turn-based: Enemy acts first, then you.
- Attacks have miss, crit, and damage variance.
- Weather can alter accuracy or power.
- Poison deals damage at the start of your turn.
- Run has a 50% escape chance; escaping repositions you safely.
After winning a battle:
- Gain +20 Score.
- Chance to recover +10 HP.
- Chance to obtain a Potion.
- Earn XP toward leveling up.
Weather dynamically affects battles and exploration.
| Weather | Effect |
|---|---|
| Clear | Neutral |
| Sunny | Boosts Fire damage |
| Rain | Reduces Fire damage |
| Fog | Higher miss chance, weaker hits overall |
Weather lasts several turns and can reset or change randomly after a few moves.
- Consecutive hits increase your combo streak.
- Each streak adds bonus damage (up to +8 max).
- Breaking the streak (miss, skip, or item use) resets it.
- Satisfying “COMBO!” message included 😎
-
Earn XP by defeating enemies.
-
On Level Up:
- +10 Max HP (and heal +10 HP)
- Every 2 levels, +1 Flamethrower PP
-
XP requirement grows each level.
Stepping on a ? triggers a random surprise:
- Heal a bit (+20 HP)
- Get poisoned (or small consolation score if already poisoned)
- Gain +1 Flamethrower PP
- Coin rain! (+5–15 Score)
- Spawn a surprise enemy nearby
- Potion — heals 25 HP
- Super Potion — heals 50 HP
- Antidote — cures poison
Displayed as Pot, Sup, and Ant in the HUD. Enemies may drop Potions after battles.
Classic Pokémon-style foes with distinct stats:
- Machop – balanced
- Geodude – tough, strong hits (
Rock Slide) - Zubat – fragile, high miss/crit
- Onix – tanky, varied attacks
- Koffing – may poison (
Poison Gas)
Enemies roam between turns, adding constant pressure.
After all normal enemies are defeated, Boss Onix appears with high HP and deadly moves (Stone Edge, Earth Shake).
If there’s no free space, the boss battle starts immediately at your position.
Tweak gameplay from the command line:
| Flag | Description | Default |
|---|---|---|
--enemies N |
Number of enemies | 6 |
--potions N |
Number of Potions | 4 |
--superpotions N |
Super Potions | 2 |
--antidotes N |
Antidotes | 2 |
--coins N |
Coins | 8 |
--mystery N |
Mystery tiles | 4 |
--hard |
Hard mode (more enemies, fewer items) | off |
--no-wrap |
Disable edge wrapping | off |
--no-color |
Disable ANSI colors | off |
--demo |
Non-interactive demo | off |
--seed N |
RNG seed | none |
--quiet-title |
Skip splash screen | off |
--test |
Run built-in tests | off |
Note: Hard mode scales enemy count and reduces healing items automatically.
-
Normal run (no colors):
python PokeMaze.py --no-color
-
Chaos mode (more enemies + mystery):
python PokeMaze.py --enemies 10 --mystery 8
-
Demo, reproducible seed:
python PokeMaze.py --demo --seed 42 --quiet-title
-
Hard mode without wrap:
python PokeMaze.py --hard --no-wrap
After you win or lose, a summary displays:
-
Level, XP, and Score
-
Enemies defeated
-
Steps taken
-
Damage dealt/taken
-
Items used
-
Best combo streak
-
Optional achievements:
- HOT STREAK (6+ combo)
- ROAM SLAYER (6+ foes)
- COIN HOARDER (100+ Score)
Built-in test suite (no extra dependencies):
python PokeMaze.py --testTests cover: HP bar, map shape, placement collisions, enemy attack randomness, demo key validity, item usage, and map rendering.
-
No required dependencies.
-
Optional:
readchar: enables single-key input (otherwise falls back toinput()).colorama(Windows): fixes ANSI color support.
-
Set
NO_COLOR=1or--no-colorfor monochrome output.
Can I run out of Flamethrower PP?
Yes. Use Ember instead, or find ? tiles that restore +1 PP.
I’m poisoned, what now?
Use an Antidote. If you don’t have one, heal often and hunt for * items.
Do enemies chase me? They don’t pathfind, but they roam randomly, sometimes blocking or ambushing you.
Is wrap-around worth it?
Yes — it lets you teleport across edges for tactical movement. Disable it with --no-wrap for a more constrained experience.
Can I pause? Not formally, but the game waits for input between steps and battles in interactive mode.
- ASCII PokeMaze++ — by FBS with community contributions.