6.7 KiB
6.7 KiB
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()inapi/game_logic.pyto return distance as 5th value - Distance calculated as:
int(coord_distance * 100)for integer meters - Updated move endpoint to track
distance_walkedin meters
- Modified
- 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)toint(distance) - Files Modified:
api/game_logic.pyapi/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_timeFLOAT column toplayerstable - 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)
- Database: Added
- Frontend Implementation:
- State management:
movementCooldownstate variable - Countdown timer: useEffect hook decrements every second
- Compass buttons: Disabled during cooldown
- Visual feedback: Shows
⏳ 3scountdown instead of stamina cost - Tooltip: Displays "Wait Xs before moving" when on cooldown
- State management:
- 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
- Background:
- 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)
- Orange background:
- 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_ratefromdanger_configinlocations.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
- Triggers only when moving to locations with
- Backend Implementation:
- Check in move endpoint after successful movement
- Uses existing
LOCATION_DANGERandget_random_npc_for_location() - Creates combat directly (not from wandering enemy table)
- Returns encounter data in move response
- Frontend Implementation:
- Detects
encounter.triggeredin move response - Sets combat state immediately
- Shows ambush message in combat log
- Stores enemy info (name, image)
- Clears previous combat log
- Detects
- 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
encounterobject if triggered - Updates
last_movement_timetimestamp - Tracks distance in meters (not stamina)
- Game State Endpoint (
GET /api/game/state):- Now includes
movement_cooldown(seconds remaining)
- Now includes
Frontend Changes
- New State Variables:
movementCooldown(number) - seconds remainingenemyTurnMessage(string) - shown during enemy turn delay
- New Effects:
- Countdown timer for movement cooldown
- Updated Functions:
handleMove()- handles encounter responseshandleCombatAction()- adds 2-second delay for enemy turnsrenderCompassButton()- 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"