What a mess
This commit is contained in:
140
docs/GAME_UPDATES_DISTANCE_COOLDOWN.md
Normal file
140
docs/GAME_UPDATES_DISTANCE_COOLDOWN.md
Normal file
@@ -0,0 +1,140 @@
|
||||
# Game Updates - Distance, Title, Cooldown & UI Improvements
|
||||
|
||||
## Summary
|
||||
Implemented multiple enhancements including distance tracking in meters, game title update, movement cooldown, and UI improvements.
|
||||
|
||||
## Changes Implemented
|
||||
|
||||
### ✅ 1. Distance Tracking in Meters
|
||||
**Problem**: Statistics tracked stamina cost instead of actual distance
|
||||
**Solution**: Updated move system to calculate and track real distance in meters
|
||||
|
||||
**Files Changed**:
|
||||
- `api/game_logic.py`: Updated `move_player()` to return distance as 5th value
|
||||
- Changed distance calculation to `int(coord_distance * 100)` (rounds to integer meters)
|
||||
- Returns: `(success, message, new_location_id, stamina_cost, distance)`
|
||||
|
||||
- `api/main.py`:
|
||||
- Updated web move endpoint to track distance: `await db.update_player_statistics(current_user['id'], distance_walked=distance, increment=True)`
|
||||
- Updated bot move endpoint to track distance for Telegram users
|
||||
- Changed distance display in directions from `round(distance, 1)` to `int(distance)`
|
||||
|
||||
**Result**: Distance walked now shows actual meters traveled instead of stamina cost
|
||||
|
||||
---
|
||||
|
||||
### ✅ 2. Integer Distance Display
|
||||
**Problem**: Distances showed decimal places (e.g., "141.4m")
|
||||
**Solution**: Rounded all distances to integers
|
||||
|
||||
**Changes**:
|
||||
- All distance calculations now use `int()` instead of `round(x, 1)`
|
||||
- Displays as "141m" instead of "141.4m"
|
||||
|
||||
---
|
||||
|
||||
### ✅ 3. Game Title Update
|
||||
**Problem**: Game called "Echoes of the Ashes"
|
||||
**Solution**: Changed to "Echoes of the Ash"
|
||||
|
||||
**Files Changed**:
|
||||
- `pwa/src/components/GameHeader.tsx`: Updated `<h1>` title
|
||||
- `pwa/src/components/Login.tsx`: Updated login screen title
|
||||
- `pwa/index.html`: Updated page `<title>`
|
||||
- `api/main.py`: Updated FastAPI app title
|
||||
|
||||
---
|
||||
|
||||
### ✅ 4. 30-Second Movement Cooldown (Backend)
|
||||
**Problem**: Players could move too quickly between zones
|
||||
**Solution**: Added 30-second cooldown after each movement
|
||||
|
||||
**Database Migration**:
|
||||
- Created `migrate_add_movement_cooldown.py`
|
||||
- Added `last_movement_time FLOAT DEFAULT 0` column to `players` table
|
||||
- Successfully migrated database
|
||||
|
||||
**API Changes** (`api/main.py`):
|
||||
- Move endpoint now checks cooldown before allowing movement:
|
||||
```python
|
||||
cooldown_remaining = max(0, 30 - (current_time - last_movement))
|
||||
if cooldown_remaining > 0:
|
||||
raise HTTPException(400, f"You must wait {int(cooldown_remaining)} seconds before moving again.")
|
||||
```
|
||||
- Updates `last_movement_time` after successful move
|
||||
- Game state endpoint returns `movement_cooldown` (seconds remaining)
|
||||
|
||||
**Files Changed**:
|
||||
- `api/database.py`: Added `last_movement_time` column to players table definition
|
||||
- `api/main.py`: Added cooldown check in move endpoint
|
||||
- `migrate_add_movement_cooldown.py`: Migration script (✅ executed successfully)
|
||||
- `Dockerfile.api`: Added migration scripts to container
|
||||
|
||||
---
|
||||
|
||||
### ✅ 5. UI Improvements - Location Names & Danger Levels
|
||||
**Problem**: Location names not centered, danger levels too small, safe zones not indicated
|
||||
**Solution**: Enhanced danger badge styling and added safe zone indicator
|
||||
|
||||
**Changes** (`pwa/src/components/Game.tsx`):
|
||||
- Added safe zone badge for danger level 0:
|
||||
```tsx
|
||||
{location.danger_level === 0 && (
|
||||
<span className="danger-badge danger-safe" title="Safe Zone">
|
||||
✓ Safe
|
||||
</span>
|
||||
)}
|
||||
```
|
||||
|
||||
**CSS Changes** (`pwa/src/components/Game.css`):
|
||||
- Increased danger badge size:
|
||||
- Font size: `0.75rem` → `1rem`
|
||||
- Padding: `0.25rem 0.75rem` → `0.5rem 1.2rem`
|
||||
- Border radius: `20px` → `24px`
|
||||
- Gap: `0.25rem` → `0.4rem`
|
||||
- Border width: `1px` → `2px`
|
||||
|
||||
- Added `.danger-safe` style:
|
||||
```css
|
||||
.danger-safe {
|
||||
background: rgba(76, 175, 80, 0.2);
|
||||
color: #4caf50;
|
||||
border: 2px solid #4caf50;
|
||||
}
|
||||
```
|
||||
|
||||
**Result**: Danger badges are now larger and more prominent, safe zones clearly marked
|
||||
|
||||
---
|
||||
|
||||
## Still To Implement
|
||||
|
||||
### ⏳ Frontend Movement Cooldown
|
||||
- Disable movement buttons when on cooldown
|
||||
- Show countdown timer on buttons
|
||||
- Poll `movement_cooldown` from game state
|
||||
|
||||
### ⏳ Enemy Turn Delay in Combat
|
||||
- Add 2-second visual delay for enemy turns
|
||||
- Show "Enemy's turn..." message
|
||||
- Display outcome after delay for dynamic feel
|
||||
|
||||
### ⏳ Encounter Rate on Arrival
|
||||
- Check `encounter_rate` when moving to dangerous zones
|
||||
- Spawn enemy and initiate combat based on probability
|
||||
- Only for zones with danger_level > 1
|
||||
|
||||
---
|
||||
|
||||
## Deployment Status
|
||||
✅ API rebuilt and deployed
|
||||
✅ PWA rebuilt and deployed
|
||||
✅ Database migration executed successfully
|
||||
✅ All containers running
|
||||
|
||||
## Testing Recommendations
|
||||
1. Verify distance statistics show meters
|
||||
2. Test movement cooldown (30-second wait)
|
||||
3. Check danger badges display correctly (including safe zones)
|
||||
4. Confirm game title updated everywhere
|
||||
5. Validate integer distance display (no decimals)
|
||||
Reference in New Issue
Block a user