467 lines
13 KiB
Markdown
467 lines
13 KiB
Markdown
# Development Roadmap
|
|
|
|
Phased development plan for the Roguelite Platformer.
|
|
|
|
---
|
|
|
|
## Overview
|
|
|
|
| Phase | Focus | Dependencies |
|
|
|-------|-------|--------------|
|
|
| 1 | Core Loop | None |
|
|
| 2 | Juice & Polish | Phase 1 |
|
|
| 3 | Meta-Progression | Phase 1 |
|
|
| 4 | Content | Phases 1-3 |
|
|
| 5 | Polish & Release | Phases 1-4 |
|
|
|
|
---
|
|
|
|
## Phase 1: Core Loop
|
|
|
|
**Goal:** Playable prototype with basic mechanics
|
|
|
|
### Project Setup
|
|
- [ ] Initialize Vite + Phaser 3 + TypeScript project
|
|
- [ ] Configure ESLint and Prettier
|
|
- [ ] Set up project structure (`src/`, `assets/`, `docs/`)
|
|
- [ ] Create `game.config.ts` with Phaser configuration
|
|
- [ ] Create `physics.config.ts` with Arcade physics settings
|
|
|
|
### Base Scenes
|
|
- [ ] **BootScene** - Initialize game settings
|
|
- [ ] **PreloadScene** - Asset loading with progress bar
|
|
- [ ] **GameScene** - Main gameplay scene
|
|
- [ ] **GameOverScene** - Death screen with restart option
|
|
|
|
### Player
|
|
- [ ] Create `Player.ts` entity class
|
|
- [ ] Create `PlayerController.ts` for input handling
|
|
- [ ] Implement horizontal movement (left/right)
|
|
- [ ] Implement jump mechanics
|
|
- [ ] Implement **Coyote Time** (100ms grace period)
|
|
- [ ] Implement **Input Buffering** (100ms jump buffer)
|
|
- [ ] Implement **Variable Jump Height** (hold for higher jump)
|
|
- [ ] Implement **Edge Correction** (4px ledge assist)
|
|
- [ ] Add responsive controls (minimal acceleration/drag)
|
|
|
|
### Projectile System
|
|
- [ ] Create `Projectile.ts` entity class
|
|
- [ ] Implement projectile firing (direction based on player facing)
|
|
- [ ] Implement projectile pool (max 3 active)
|
|
- [ ] Implement cooldown system (~3 seconds per projectile)
|
|
- [ ] Add projectile UI indicator in HUD
|
|
|
|
### Enemy (Patroller)
|
|
- [ ] Create `Enemy.ts` base class
|
|
- [ ] Create `Patroller.ts` enemy type
|
|
- [ ] Implement patrol behavior (back-and-forth movement)
|
|
- [ ] Implement platform edge detection
|
|
- [ ] Implement enemy states: ACTIVE, STUNNED
|
|
- [ ] Implement stun mechanic (3 seconds duration)
|
|
- [ ] Add visual stun indicator (circular timer)
|
|
- [ ] Implement collision: active enemy kills player
|
|
- [ ] Implement collision: stunned enemy is passable
|
|
|
|
### Collectibles
|
|
- [ ] Create `Coin.ts` entity class
|
|
- [ ] Implement coin collection mechanics
|
|
- [ ] Add coin counter to HUD
|
|
- [ ] Implement level completion condition (all coins collected)
|
|
|
|
### Level Structure
|
|
- [ ] Implement basic tilemap loading
|
|
- [ ] Create simple test level (single room)
|
|
- [ ] Implement player spawn point
|
|
- [ ] Implement level exit (triggers on all coins collected)
|
|
- [ ] Implement level transition logic
|
|
|
|
### Core HUD
|
|
- [ ] Create `UIScene.ts` (parallel overlay)
|
|
- [ ] Display coin counter (collected/total)
|
|
- [ ] Display projectile indicators with cooldowns
|
|
- [ ] Display current level number
|
|
|
|
### Game Over
|
|
- [ ] Implement player death on enemy contact
|
|
- [ ] Implement player death on hazard contact (spikes)
|
|
- [ ] Show Game Over screen with score
|
|
- [ ] Implement restart functionality
|
|
|
|
### Phase 1 Completion Criteria
|
|
- [ ] Player can move, jump, and shoot
|
|
- [ ] Game feel mechanics working (coyote time, input buffer, variable jump)
|
|
- [ ] Patroller enemy patrols and can be stunned
|
|
- [ ] Coins can be collected
|
|
- [ ] Level transitions work
|
|
- [ ] Death/restart cycle works
|
|
|
|
---
|
|
|
|
## Phase 2: Juice & Polish
|
|
|
|
**Goal:** Game feels good to play
|
|
|
|
### Particles
|
|
- [ ] Create `ParticleManager.ts` system
|
|
- [ ] **Dust particles** - on landing
|
|
- [ ] **Dust particles** - while running (periodic)
|
|
- [ ] **Projectile cloud** - on firing
|
|
- [ ] **Stun stars** - when enemy stunned
|
|
- [ ] **Coin sparkle** - coin idle animation
|
|
- [ ] **Death explosion** - on player death
|
|
|
|
### Visual Feedback
|
|
- [ ] Implement **Squash & Stretch** for player jump/land
|
|
- [ ] Implement **Squash** for enemy stun
|
|
- [ ] Add coin pulse animation
|
|
- [ ] Add projectile trail effect
|
|
|
|
### Screen Effects
|
|
- [ ] Create `CameraManager.ts` system
|
|
- [ ] Implement **Screen Shake** - micro shake on stun
|
|
- [ ] Implement **Screen Shake** - stronger shake on death
|
|
- [ ] Add settings option to disable screen shake
|
|
|
|
### Hitstop
|
|
- [ ] Implement **Freeze Frame** (2-3 frames) on projectile hit
|
|
- [ ] Apply hitstop to physics pause, not game pause
|
|
|
|
### Audio
|
|
- [ ] Create `AudioManager.ts` system
|
|
- [ ] **SFX**: Jump
|
|
- [ ] **SFX**: Land
|
|
- [ ] **SFX**: Shoot projectile
|
|
- [ ] **SFX**: Enemy stunned
|
|
- [ ] **SFX**: Coin collected
|
|
- [ ] **SFX**: Player death
|
|
- [ ] **SFX**: Level complete
|
|
- [ ] **SFX**: Menu selection
|
|
- [ ] **Music**: Gameplay loop
|
|
- [ ] **Music**: Menu theme
|
|
- [ ] Implement volume controls
|
|
|
|
### Phase 2 Completion Criteria
|
|
- [ ] All particle effects implemented
|
|
- [ ] Squash/stretch animations working
|
|
- [ ] Screen shake working with toggle option
|
|
- [ ] Hitstop adds impact to hits
|
|
- [ ] All sound effects in place
|
|
- [ ] Background music playing
|
|
|
|
---
|
|
|
|
## Phase 3: Meta-Progression
|
|
|
|
**Goal:** Death -> Shop -> New Run cycle
|
|
|
|
### Save System
|
|
- [ ] Create `SaveManager.ts` with localStorage
|
|
- [ ] Implement save data structure
|
|
- [ ] Implement save on state change
|
|
- [ ] Implement load on game start
|
|
- [ ] Implement save data migration (version support)
|
|
|
|
### State Management
|
|
- [ ] Create `GameStateManager.ts`
|
|
- [ ] Implement `RunState` (resets each run)
|
|
- [ ] Implement `MetaState` (persists across runs)
|
|
- [ ] Implement GasCoin currency system
|
|
- [ ] Implement coin -> GasCoin conversion (1:1 + level bonus)
|
|
|
|
### Shop Scene
|
|
- [ ] Create `ShopScene.ts`
|
|
- [ ] Design shop UI layout
|
|
- [ ] Implement upgrade display (name, description, price)
|
|
- [ ] Implement purchase mechanics
|
|
- [ ] Implement upgrade activation/deactivation
|
|
- [ ] Show owned upgrades vs available upgrades
|
|
- [ ] Show GasCoin balance
|
|
|
|
### Upgrade System
|
|
- [ ] Create `UpgradeManager.ts`
|
|
- [ ] Define `upgrades.config.ts` with all upgrades
|
|
- [ ] Implement upgrade effect application
|
|
- [ ] Implement 5-10 basic upgrades:
|
|
- [ ] Light Boots (+10% speed)
|
|
- [ ] Spring Boots (+15% jump)
|
|
- [ ] Heavy Armor (+1 HP, -15% speed)
|
|
- [ ] Large Magazine (+1 projectile)
|
|
- [ ] Fast Reload (-20% cooldown)
|
|
- [ ] Range Boost (+30% projectile range)
|
|
- [ ] Strong Stun (+1s stun duration)
|
|
- [ ] Magnet (coin attraction)
|
|
- [ ] Eagle Eye (minimap)
|
|
- [ ] Danger Sense (enemy highlight)
|
|
|
|
### Game Over Enhancement
|
|
- [ ] Show run statistics:
|
|
- [ ] Levels completed
|
|
- [ ] Coins collected
|
|
- [ ] Enemies stunned
|
|
- [ ] Time played
|
|
- [ ] Show GasCoins earned
|
|
- [ ] Add "Go to Shop" button
|
|
- [ ] Add "Play Again" button
|
|
|
|
### Phase 3 Completion Criteria
|
|
- [ ] Progress saves correctly
|
|
- [ ] GasCoins accumulate across runs
|
|
- [ ] Shop allows purchasing upgrades
|
|
- [ ] Purchased upgrades affect gameplay
|
|
- [ ] Game Over shows stats and earnings
|
|
|
|
---
|
|
|
|
## Phase 4: Content
|
|
|
|
**Goal:** Gameplay variety
|
|
|
|
### Additional Enemies
|
|
- [ ] **Jumper** - Vertical jumping enemy (level 3+)
|
|
- [ ] **Flyer** - Fixed flight path enemy (level 5+)
|
|
- [ ] **Chaser** - Slow pursuit enemy (level 7+)
|
|
- [ ] **Sprinter** - Fast patrol enemy (level 10+)
|
|
- [ ] Implement enemy spawn rules by level
|
|
|
|
### Hazards
|
|
- [ ] Create `Hazard.ts` base class
|
|
- [ ] **Spikes** - Static instant death (level 2+)
|
|
- [ ] **Falling Platform** - Collapses after 0.5s (level 4+)
|
|
- [ ] **Saw** - Moving along path (level 6+)
|
|
- [ ] **Turret** - Shoots at intervals (level 8+)
|
|
- [ ] **Laser** - Toggles on/off (level 10+)
|
|
- [ ] Implement hazard spawn rules by level
|
|
|
|
### Power-ups
|
|
- [ ] Create `PowerUp.ts` entity class
|
|
- [ ] **Shield** - Blocks 1 hit
|
|
- [ ] **Magnet** - Attracts coins (15s)
|
|
- [ ] **Clock** - Slows enemies 50% (10s)
|
|
- [ ] **Coffee** - +50% player speed (10s)
|
|
- [ ] **Infinity** - Unlimited projectiles (8s)
|
|
- [ ] **Ghost** - Phase through enemies (5s)
|
|
- [ ] Implement 10% spawn chance per level
|
|
- [ ] Add power-up timer to HUD
|
|
|
|
### Procedural Generation
|
|
- [ ] Create `LevelGenerator.ts`
|
|
- [ ] Create `RoomPlacer.ts` for room grid
|
|
- [ ] Create `PathValidator.ts` for path validation
|
|
- [ ] Design room templates (JSON)
|
|
- [ ] Implement 4x4 room grid system
|
|
- [ ] Implement guaranteed path algorithm
|
|
- [ ] Implement difficulty scaling:
|
|
- [ ] Levels 1-2: 6-8 rooms, 5-8 coins, 2-3 enemies
|
|
- [ ] Levels 3-5: 8-10 rooms, 8-12 coins, 4-6 enemies
|
|
- [ ] Levels 6-9: 10-12 rooms, 12-16 coins, 6-8 enemies
|
|
- [ ] Levels 10+: 12-16 rooms, 16-20 coins, 8-12 enemies
|
|
- [ ] Create `SeededRandom.ts` for deterministic generation
|
|
|
|
### More Upgrades
|
|
- [ ] **Double Jump** - Unlock: reach level 5
|
|
- [ ] **Dash** - Unlock: collect 500 coins in one run
|
|
- [ ] **Second Chance** - Unlock: die 50 times
|
|
- [ ] **Explosive Projectile** - Area stun, -1 ammo
|
|
- [ ] **Ricochet** - Bounces off walls
|
|
- [ ] **Rapid Fire** - -40% cooldown, -30% stun duration
|
|
- [ ] **Greed** - +50% coins, +25% enemies
|
|
- [ ] **Hardcore** - x2 score, no coyote time
|
|
- [ ] **Berserker** - Frenzy mode at 0 HP
|
|
- [ ] **Pacifist** - x3 score, no projectiles
|
|
- [ ] **Speedrun** - Time challenge mode
|
|
|
|
### Achievement System
|
|
- [ ] Create achievement tracking
|
|
- [ ] Implement achievement triggers
|
|
- [ ] Add achievement notifications
|
|
- [ ] Create achievement display in menu
|
|
- [ ] Implement unlock requirements for upgrades
|
|
|
|
### Phase 4 Completion Criteria
|
|
- [ ] All 5 enemy types implemented and balanced
|
|
- [ ] All 5 hazard types implemented
|
|
- [ ] All 6 power-ups working
|
|
- [ ] Procedural generation creates varied levels
|
|
- [ ] Difficulty scales appropriately
|
|
- [ ] Additional upgrades purchasable
|
|
- [ ] Achievements tracking and unlocking
|
|
|
|
---
|
|
|
|
## Phase 5: Polish & Release
|
|
|
|
**Goal:** Release-ready product
|
|
|
|
### Combo System
|
|
- [ ] Create `ScoreManager.ts`
|
|
- [ ] Implement combo multiplier (x1 -> x2 -> x3 -> x5 -> x10)
|
|
- [ ] Implement 2-second combo timeout
|
|
- [ ] Add combo display to HUD
|
|
- [ ] Implement level bonuses:
|
|
- [ ] Fast completion (<30s): +50% score
|
|
- [ ] No damage: +25% score
|
|
- [ ] No projectiles: +100% score
|
|
|
|
### Leaderboard
|
|
- [ ] Implement local leaderboard (top 10)
|
|
- [ ] Create leaderboard display screen
|
|
- [ ] Add score entry on new high score
|
|
- [ ] Show rank on Game Over screen
|
|
|
|
### Full UI/UX
|
|
- [ ] Create `MenuScene.ts` with full menu:
|
|
- [ ] Play button
|
|
- [ ] Shop button
|
|
- [ ] Leaderboard button
|
|
- [ ] Settings button
|
|
- [ ] Achievements button
|
|
- [ ] Create `PauseScene.ts`:
|
|
- [ ] Continue button
|
|
- [ ] Settings button
|
|
- [ ] Show current seed
|
|
- [ ] Quit to menu (with confirmation)
|
|
- [ ] Polish all UI transitions
|
|
- [ ] Add button hover/click feedback
|
|
|
|
### Seed System
|
|
- [ ] Display level seed on pause screen
|
|
- [ ] Implement seed input mode
|
|
- [ ] Add "Practice Mode" (seeded, no leaderboard)
|
|
|
|
### Settings
|
|
- [ ] Music volume slider
|
|
- [ ] SFX volume slider
|
|
- [ ] Screen shake toggle
|
|
- [ ] Show FPS toggle
|
|
- [ ] Reset progress (with confirmation)
|
|
|
|
### Balance Pass
|
|
- [ ] Tune player movement speeds
|
|
- [ ] Tune jump heights
|
|
- [ ] Tune projectile cooldowns
|
|
- [ ] Tune stun durations
|
|
- [ ] Tune enemy speeds and behaviors
|
|
- [ ] Tune upgrade costs
|
|
- [ ] Tune difficulty scaling
|
|
- [ ] Playtest and iterate
|
|
|
|
### Bug Fixing & QA
|
|
- [ ] Fix known bugs
|
|
- [ ] Test all features end-to-end
|
|
- [ ] Test save/load edge cases
|
|
- [ ] Test on multiple browsers
|
|
- [ ] Performance optimization
|
|
- [ ] Memory leak checks
|
|
|
|
### Phase 5 Completion Criteria
|
|
- [ ] Combo system adds depth to gameplay
|
|
- [ ] Leaderboard encourages replayability
|
|
- [ ] Full menu navigation working
|
|
- [ ] Seed system allows practice
|
|
- [ ] Settings all functional
|
|
- [ ] Game balanced and fair
|
|
- [ ] No critical bugs
|
|
|
|
---
|
|
|
|
## Future (Post-MVP)
|
|
|
|
### Backend Integration
|
|
- [ ] Global leaderboard API
|
|
- [ ] User accounts (optional)
|
|
- [ ] Cloud save sync
|
|
|
|
### Daily Challenges
|
|
- [ ] Daily seed generation
|
|
- [ ] Separate daily leaderboard
|
|
- [ ] Daily rewards
|
|
|
|
### Bosses
|
|
- [ ] Design boss mechanics
|
|
- [ ] Implement boss encounters (every 5 levels?)
|
|
- [ ] Boss-specific rewards
|
|
|
|
### Mobile Support
|
|
- [ ] Touch controls
|
|
- [ ] UI scaling
|
|
- [ ] Mobile-specific optimizations
|
|
|
|
### Multiplayer
|
|
- [ ] Race mode (2 players)
|
|
- [ ] Shared leaderboard
|
|
- [ ] Ghost replays
|
|
|
|
### Platform Release
|
|
- [ ] Steam integration
|
|
- [ ] Achievements (Steam)
|
|
- [ ] Cloud saves (Steam)
|
|
|
|
---
|
|
|
|
## Task Dependencies
|
|
|
|
```
|
|
Phase 1 (Core Loop)
|
|
│
|
|
├──────────────────┐
|
|
│ │
|
|
▼ ▼
|
|
Phase 2 Phase 3
|
|
(Juice) (Meta-Progression)
|
|
│ │
|
|
└─────────┬────────┘
|
|
│
|
|
▼
|
|
Phase 4 (Content)
|
|
│
|
|
▼
|
|
Phase 5 (Polish)
|
|
│
|
|
▼
|
|
RELEASE
|
|
│
|
|
▼
|
|
Future Updates
|
|
```
|
|
|
|
---
|
|
|
|
## Risk Mitigation
|
|
|
|
| Risk | Mitigation |
|
|
|------|------------|
|
|
| Scope creep | Stick to MVP features per phase |
|
|
| Game feel issues | Prioritize Phase 2 polish early |
|
|
| Balance problems | Iterative testing each phase |
|
|
| Save data corruption | Version migrations, backup system |
|
|
| Performance issues | Object pooling, culling from start |
|
|
|
|
---
|
|
|
|
## Success Metrics
|
|
|
|
### Phase 1
|
|
- Can play multiple rounds
|
|
- Death/restart cycle smooth
|
|
- Player movement feels responsive
|
|
|
|
### Phase 2
|
|
- Game "feels good" to play
|
|
- Feedback is satisfying
|
|
- Audio enhances experience
|
|
|
|
### Phase 3
|
|
- Players want to unlock upgrades
|
|
- Meta loop is engaging
|
|
- Progress feels meaningful
|
|
|
|
### Phase 4
|
|
- Variety keeps runs interesting
|
|
- Difficulty curve is fair
|
|
- Content feels sufficient
|
|
|
|
### Phase 5
|
|
- No critical bugs
|
|
- Performance is stable
|
|
- Ready for public release
|