feat: Complete 2D Visual Overhaul - Isometric to Flat Top-Down
- NEW: Flat2DTerrainSystem.js (375 lines) - NEW: map2d_data.js procedural map (221 lines) - MODIFIED: GameScene async create, 2D terrain integration - MODIFIED: Player.js flat 2D positioning - MODIFIED: game.js disabled pixelArt for smooth rendering - FIXED: 15+ bugs (updateCulling, isometric conversions, grid lines) - ADDED: Phase 28 to TASKS.md - DOCS: DNEVNIK.md session summary Result: Working flat 2D game with Stardew Valley style! Time: 5.5 hours
This commit is contained in:
102
docs/HEIGHT_SYSTEM_PLAN.md
Normal file
102
docs/HEIGHT_SYSTEM_PLAN.md
Normal file
@@ -0,0 +1,102 @@
|
||||
# 🏔️ HEIGHT SYSTEM & 2.5D TERRAIN IMPLEMENTATION PLAN
|
||||
|
||||
## 📋 OVERVIEW
|
||||
|
||||
Transforming flat pixel-art terrain into 2.5D with procedural hills and elevation.
|
||||
|
||||
---
|
||||
|
||||
## 🎯 PHASE 1: HEIGHT GENERATION (IMPLEMENTING NOW)
|
||||
|
||||
### Changes:
|
||||
1. **Add height property to tiles** (already exists in terrainTypes)
|
||||
2. **Generate height using 2nd Perlin noise layer**
|
||||
3. **Visual height representation:**
|
||||
- Tint (darker = lower, lighter = higher)
|
||||
- Scale (higher tiles = slightly bigger)
|
||||
- Y-offset (elevation visual)
|
||||
|
||||
### Code Changes:
|
||||
|
||||
**TerrainSystem.js - generateChunk():**
|
||||
```javascript
|
||||
// NEW: Height noise (separate from terrain type noise)
|
||||
const heightNoise = this.noise.noise(x * 0.05, y * 0.05);
|
||||
const elevationHeight = Math.floor((heightNoise + 1) * 2.5); // 0-5 range
|
||||
|
||||
// Store height in tile
|
||||
this.tiles[y][x] = {
|
||||
type: tileType,
|
||||
height: elevationHeight, // NEW!
|
||||
solid: false
|
||||
};
|
||||
```
|
||||
|
||||
**TerrainSystem.js - updateCulling() rendering:**
|
||||
```javascript
|
||||
// Apply visual height effects
|
||||
const tile = this.tiles[y][x];
|
||||
const height = tile.height || 0;
|
||||
|
||||
// 1. Tint (darker low, lighter high)
|
||||
const tintValue = 0xffffff - (height * 0x111111);
|
||||
sprite.setTint(tintValue);
|
||||
|
||||
// 2. Scale (subtle)
|
||||
const scaleBonus = 1 + (height * 0.02);
|
||||
sprite.setScale(scaleBonus);
|
||||
|
||||
// 3. Y-offset (elevation)
|
||||
const yOffset = -(height * 4);
|
||||
sprite.y += yOffset;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎨 VISUAL RESULTS:
|
||||
|
||||
```
|
||||
Before (Flat):
|
||||
████████████
|
||||
████████████
|
||||
████████████
|
||||
|
||||
After (Hills):
|
||||
▓▓▓▓ ← Height 4 (lighter, higher)
|
||||
▒▒▒▒▒▒▒▒ ← Height 3
|
||||
░░░░░░░░░░░░ ← Height 2
|
||||
████████████ ← Height 0 (valleys, base)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🚀 NEXT STEPS (PHASE 2):
|
||||
|
||||
1. **Walkability constraints**
|
||||
- Can't walk over height diff > 1
|
||||
- Pathfinding with elevation
|
||||
|
||||
2. **Smooth transitions**
|
||||
- Slope tiles between heights
|
||||
- Gradient blending
|
||||
|
||||
3. **Cliff edges**
|
||||
- Visual edge sprites
|
||||
- Shadow effects
|
||||
|
||||
---
|
||||
|
||||
## 📊 CURRENT STATUS:
|
||||
|
||||
- ✅ TerrainTypes have height property
|
||||
- ✅ Perlin noise available
|
||||
- ⏳ Height generation (implementing)
|
||||
- ⏳ Visual rendering (implementing)
|
||||
- ❌ Walkability (Phase 2)
|
||||
- ❌ Slope transitions (Phase 2)
|
||||
|
||||
---
|
||||
|
||||
**Implementation Date:** 2025-12-14
|
||||
**Status:** In Progress
|
||||
**Files Modified:** TerrainSystem.js
|
||||
Reference in New Issue
Block a user