168 lines
6.7 KiB
Markdown
168 lines
6.7 KiB
Markdown
# Game Improvements - 2025
|
|
|
|
## Summary
|
|
This document outlines the major gameplay and UI improvements implemented in this update.
|
|
|
|
## Changes Overview
|
|
|
|
### 1. ✅ Distance Tracking in Meters
|
|
- **Changed**: Statistics now track actual distance walked in meters instead of stamina cost
|
|
- **Implementation**:
|
|
- Modified `move_player()` in `api/game_logic.py` to return distance as 5th value
|
|
- Distance calculated as: `int(coord_distance * 100)` for integer meters
|
|
- Updated move endpoint to track `distance_walked` in meters
|
|
- **Files Modified**:
|
|
- `api/game_logic.py` (lines 11-66)
|
|
- `api/main.py` (lines 738-780)
|
|
|
|
### 2. ✅ Integer Distance Display
|
|
- **Changed**: All distances rounded to integers (no decimals/centimeters)
|
|
- **Implementation**: Changed all `round(distance, 1)` to `int(distance)`
|
|
- **Files Modified**:
|
|
- `api/game_logic.py`
|
|
- `api/main.py` (direction details endpoint)
|
|
|
|
### 3. ✅ Game Title Update
|
|
- **Changed**: Game name updated to **"Echoes of the Ash"**
|
|
- **Files Modified**:
|
|
- `pwa/src/components/GameHeader.tsx` (line 18)
|
|
- `pwa/src/components/Login.tsx` (line 37)
|
|
- `pwa/index.html` (title tag)
|
|
- `api/main.py` (line 85 - API title)
|
|
|
|
### 4. ✅ Movement Cooldown System
|
|
- **Added**: 5-second cooldown between movements to prevent rapid zone hopping
|
|
- **Backend Implementation**:
|
|
- Database: Added `last_movement_time` FLOAT column to `players` table
|
|
- Migration: `migrate_add_movement_cooldown.py` (successfully executed)
|
|
- API validates cooldown in move endpoint (returns 400 if < 5 seconds)
|
|
- Game state endpoint returns `movement_cooldown` (seconds remaining)
|
|
- **Frontend Implementation**:
|
|
- State management: `movementCooldown` state variable
|
|
- Countdown timer: useEffect hook decrements every second
|
|
- Compass buttons: Disabled during cooldown
|
|
- Visual feedback: Shows `⏳ 3s` countdown instead of stamina cost
|
|
- Tooltip: Displays "Wait Xs before moving" when on cooldown
|
|
- **Duration**: Initially 30 seconds, reduced to 5 seconds based on feedback
|
|
- **Files Modified**:
|
|
- `api/database.py` (line 58 - schema)
|
|
- `api/main.py` (lines 423-433, 738-765 - cooldown logic)
|
|
- `pwa/src/components/Game.tsx` (lines 74-75, 93-99, 125-128, 474-498)
|
|
- `migrate_add_movement_cooldown.py` (new file)
|
|
- `Dockerfile.api` (line 22 - copy migrations)
|
|
|
|
### 5. ✅ Enhanced Danger Level Display
|
|
- **Changed**: Danger level badges enlarged and improved visibility
|
|
- **Improvements**:
|
|
- Font size: Increased to 1rem (from smaller)
|
|
- Padding: Increased to 0.5rem 1.2rem
|
|
- Border radius: Increased to 24px
|
|
- Borders: All levels have 2px solid borders
|
|
- Safe zones: New green badge styling for danger_level 0
|
|
- **Safe Zone Badge**:
|
|
- Background: `rgba(76, 175, 80, 0.2)`
|
|
- Color: `#4caf50` (green)
|
|
- Border: `2px solid #4caf50`
|
|
- **Files Modified**:
|
|
- `pwa/src/components/Game.css` (lines 267-320)
|
|
- `pwa/src/components/Game.tsx` (location display logic)
|
|
|
|
### 6. ✅ Enemy Turn Delay (Combat Animation)
|
|
- **Added**: 2-second dramatic pause for enemy turns in combat
|
|
- **Implementation**:
|
|
- Shows "🗡️ Enemy's turn..." message with orange pulsing animation
|
|
- Waits 2 seconds before displaying enemy attack results
|
|
- Player actions shown immediately
|
|
- Enemy actions shown after delay
|
|
- **Visual Style**:
|
|
- Orange background: `rgba(255, 152, 0, 0.2)`
|
|
- Border: `2px solid rgba(255, 152, 0, 0.5)`
|
|
- Animation: Pulse effect (scale and opacity)
|
|
- **Files Modified**:
|
|
- `pwa/src/components/Game.tsx` (lines 371-451 - handleCombatAction)
|
|
- `pwa/src/components/Game.css` (lines 2646-2675 - enemy-turn-message style)
|
|
|
|
### 7. ✅ Encounter Rate System
|
|
- **Added**: Random enemy encounters when arriving in dangerous zones
|
|
- **Mechanics**:
|
|
- Triggers only when moving to locations with `danger_level > 1`
|
|
- Uses `encounter_rate` from `danger_config` in `locations.json`
|
|
- Rolls random chance: if `random() < encounter_rate`, spawn enemy
|
|
- Selects random enemy from location's spawn table
|
|
- Automatically initiates combat upon arrival
|
|
- Does not trigger if already in combat
|
|
- **Backend Implementation**:
|
|
- Check in move endpoint after successful movement
|
|
- Uses existing `LOCATION_DANGER` and `get_random_npc_for_location()`
|
|
- Creates combat directly (not from wandering enemy table)
|
|
- Returns encounter data in move response
|
|
- **Frontend Implementation**:
|
|
- Detects `encounter.triggered` in move response
|
|
- Sets combat state immediately
|
|
- Shows ambush message in combat log
|
|
- Stores enemy info (name, image)
|
|
- Clears previous combat log
|
|
- **Example Rates**:
|
|
- Safe zones (danger 0): 0% encounter rate
|
|
- Low danger (danger 1): 10% encounter rate
|
|
- Medium danger (danger 2): 15-22% encounter rate
|
|
- High danger (danger 3): 25-30% encounter rate
|
|
- **Files Modified**:
|
|
- `api/main.py` (lines 780-835 - encounter check in move endpoint)
|
|
- `pwa/src/components/Game.tsx` (lines 165-218 - handleMove with encounter handling)
|
|
|
|
## Technical Details
|
|
|
|
### Database Changes
|
|
- **New Column**: `players.last_movement_time` (FLOAT, default 0)
|
|
- **Migration**: Successfully executed via `migrate_add_movement_cooldown.py`
|
|
|
|
### API Changes
|
|
- **Move Endpoint** (`POST /api/game/move`):
|
|
- Now validates 5-second cooldown
|
|
- Returns `encounter` object if triggered
|
|
- Updates `last_movement_time` timestamp
|
|
- Tracks distance in meters (not stamina)
|
|
- **Game State Endpoint** (`GET /api/game/state`):
|
|
- Now includes `movement_cooldown` (seconds remaining)
|
|
|
|
### Frontend Changes
|
|
- **New State Variables**:
|
|
- `movementCooldown` (number) - seconds remaining
|
|
- `enemyTurnMessage` (string) - shown during enemy turn delay
|
|
- **New Effects**:
|
|
- Countdown timer for movement cooldown
|
|
- **Updated Functions**:
|
|
- `handleMove()` - handles encounter responses
|
|
- `handleCombatAction()` - adds 2-second delay for enemy turns
|
|
- `renderCompassButton()` - shows cooldown countdown
|
|
|
|
## Configuration
|
|
- **Movement Cooldown**: 5 seconds (reduced from initial 30 seconds)
|
|
- **Enemy Turn Delay**: 2 seconds
|
|
- **Encounter Rates**: Configured per location in `gamedata/locations.json`
|
|
|
|
## Testing Notes
|
|
- ✅ All containers rebuilt successfully
|
|
- ✅ Migration executed without errors
|
|
- ✅ Movement cooldown functional (backend + frontend)
|
|
- ✅ Danger badges properly styled
|
|
- ✅ Combat turn delay working with animation
|
|
- ✅ Encounter system integrated with move endpoint
|
|
|
|
## Known Issues
|
|
- TypeScript lint errors (pre-existing configuration issues, do not affect functionality)
|
|
- No issues with core game mechanics
|
|
|
|
## Future Improvements
|
|
- Consider adding sound effects for enemy turns
|
|
- Add visual shake/impact effect during enemy attacks
|
|
- Consider different cooldown times based on distance traveled
|
|
- Add encounter notification sound/vibration
|
|
|
|
---
|
|
|
|
**Deployment Date**: 2025
|
|
**Status**: ✅ Successfully Deployed
|
|
**Game Version**: Updated to "Echoes of the Ash"
|