141 lines
4.7 KiB
Markdown
141 lines
4.7 KiB
Markdown
# 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)
|