Files
novafarma/maps/demo_project/README.md
2025-12-30 23:48:51 +01:00

495 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🗺️ DOLINASMRTI DEMO PROJECT - TILED
**Project Name:** Demo Project
**Map Name:** Micro Farm 8×8
**Tile Size:** 64×64 pixels
**Map Size:** 512×512 pixels (8×8 tiles)
**Format:** Orthogonal
**Created:** Dec 30, 2025
---
## 📁 PROJECT STRUCTURE
```
maps/demo_project/
├── README.md ← This file
├── demo_micro_farm.tmx ← Main map file (Tiled native)
├── demo_micro_farm.json ← Exported JSON (for Phaser.js)
├── tilesets/ ← All tileset definitions
│ ├── terrain_demo.tsx ← Grass, dirt, tilled soil
│ ├── crops_demo.tsx ← Wheat growth stages
│ └── objects_demo.tsx ← Buildings, decorations
├── templates/ ← Object templates
│ ├── player_spawn.tx ← Kai spawn template
│ ├── npc_spawn.tx ← NPC spawn template
│ └── collision_box.tx ← Collision template
└── objects/ ← Custom object types
└── object_types.json ← Object type definitions
```
---
## 🎨 TILESETS
### **1. TERRAIN (terrain_demo.tsx)**
**Type:** Collection of Images
**Tile Size:** 64×64
**Count:** 4 tiles
**Tiles:**
1. `grass_tile_styleA.png` - Base terrain
2. `dirt_tile_styleA.png` - Path variation
3. `tilled_dry_styleA.png` - Farmable dry soil
4. `tilled_watered_styleA.png` - Farmable wet soil
**Usage:** Base terrain layer, tilled soil layer
---
### **2. CROPS (crops_demo.tsx)**
**Type:** Collection of Images
**Tile Size:** 64×64
**Count:** 5 tiles
**Tiles:**
1. `wheat_stage0_styleA.png` - Just planted (brown mound)
2. `wheat_stage1_styleA.png` - Seedling (tiny sprout)
3. `wheat_stage2_styleA.png` - Young plant (4-5 leaves)
4. `wheat_stage3_styleA.png` - Mature plant (full stalks)
5. `wheat_stage4_styleA.png` - Ready to harvest (golden)
**Usage:** Crops layer (changes during gameplay)
---
### **3. OBJECTS (objects_demo.tsx)**
**Type:** Collection of Images
**Variable Sizes**
**Buildings:**
1. `tent_styleA.png` (64×64) - Player base
**Decorations:**
2. `campfire_styleA.png` (64×64) - Fire animation point
3. `dead_tree_styleA.png` (64×96) - Tall tree
4. `rock_styleA.png` (48×32) - Small rock
**Usage:** Buildings layer, Decorations layer
---
## 📚 LAYERS (Bottom to Top)
### **1. Base Terrain** (Tile Layer)
- **Purpose:** Ground tiles (grass, dirt)
- **Tileset:** terrain_demo
- **Fill:** Entire 8×8 with grass
- **Properties:** None
- **Opacity:** 100%
### **2. Tilled Soil** (Tile Layer)
- **Purpose:** Farmable areas
- **Tileset:** terrain_demo
- **Location:** 2×2 patch at (1,1)
- **Properties:**
- `farmable = true`
- `watered = false` (default)
### **3. Crops** (Tile Layer)
- **Purpose:** Growing plants
- **Tileset:** crops_demo
- **Dynamic:** Yes (changes via code)
- **Initial:** Empty (or stage 0 for demo)
### **4. Buildings** (Object Layer)
- **Purpose:** Structures with collision
- **Objects:**
- Tent at (6,1) - Type: `building`
- **Properties:**
- `collision = true`
- `interactable = false/true`
### **5. Decorations** (Object Layer)
- **Purpose:** Visual elements
- **Objects:**
- Campfire at (6,5) - Type: `decoration`
- Dead tree at (0,0) - Type: `decoration`
- Rock at (4,0) - Type: `decoration`
- **Properties:**
- `collision = false` (most)
### **6. Spawns** (Object Layer)
- **Purpose:** Entity spawn points
- **Objects:**
- Kai spawn at (2,5) - Type: `player`
- Zombie spawn at (4,4) - Type: `npc_zombie`
- **Properties (Kai):**
- `name = "kai_spawn"`
- `type = "player"`
- `facing = "south"`
- **Properties (Zombie):**
- `name = "zombie_1"`
- `type = "npc_zombie"`
- `ai = "idle_dig_loop"`
### **7. Collision** (Object Layer)
- **Purpose:** Invisible collision boundaries
- **Objects:**
- Rectangle around tent
- Rectangle around tree
- Rectangle around rock
- **Properties:**
- `type = "collision"`
- **Visible:** No (for debugging only)
---
## 👤 PLAYER (Kai)
### **Spawn Point**
- **Layer:** Spawns (Object Layer)
- **Type:** Rectangle (32×32)
- **Position:** Tile (2,5) = Pixel (128, 320)
- **Name:** `kai_spawn`
### **Custom Properties:**
```
type (string): "player"
facing (string): "south"
speed (int): 160
health (int): 100
```
### **Gameplay:**
- Spawns facing south (toward camera)
- Can move in 4 directions (WASD)
- Interacts with farmable tiles (E key)
- Waters crops (SPACE key)
- Harvests mature crops (H key)
---
## 🧟 NPC - ZOMBIE WORKER
### **Spawn Point**
- **Layer:** Spawns
- **Type:** Rectangle (32×32)
- **Position:** Tile (4,4) = Pixel (256, 256)
- **Name:** `zombie_1`
### **Custom Properties:**
```
type (string): "npc_zombie"
ai (string): "idle_dig_loop"
speed (int): 0 (stationary)
health (int): 50
```
### **AI Behavior:**
- Idle for 5 seconds
- Play dig animation (1 second)
- Return to idle
- Loop forever
---
## 🏕️ BUILDINGS
### **TENT (Player Base)**
- **Layer:** Buildings
- **Position:** Tile (6,1) = Pixel (384, 64)
- **Size:** 64×64
- **Type:** `building`
**Properties:**
```
name (string): "tent"
type (string): "building"
collision (bool): true
interactable (bool): false
description (string): "Your base camp. A place to rest."
```
**Collision:** Yes (player cannot walk through)
---
## 🎨 DECORATIONS
### **1. CAMPFIRE**
- **Position:** Tile (6,5) = Pixel (384, 320)
- **Size:** 64×64
- **Type:** `decoration`
**Properties:**
```
name (string): "campfire"
animated (bool): true (future: flickering)
light_radius (int): 128 (future: lighting)
```
### **2. DEAD TREE**
- **Position:** Tile (0,0) = Pixel (0, 0)
- **Size:** 64×96 (tall)
- **Type:** `decoration`
**Properties:**
```
name (string): "dead_tree"
collision (bool): true
height (int): 96
```
### **3. ROCK**
- **Position:** Tile (4,0) = Pixel (256, 0)
- **Size:** 48×32
- **Type:** `decoration`
**Properties:**
```
name (string): "rock"
collision (bool): true
```
---
## 🚧 COLLISION SYSTEM
### **Collision Boxes**
All on **Collision** layer (Object Layer)
**1. Tent Collision**
- Rectangle at (384, 64)
- Size: 64×64
- Type: `collision`
**2. Tree Collision**
- Rectangle at (0, 0)
- Size: 48×64 (narrower than sprite)
- Type: `collision`
**3. Rock Collision**
- Rectangle at (256, 0)
- Size: 40×28 (slightly smaller)
- Type: `collision`
**In Phaser.js:**
```javascript
// Add all collision objects to static group
const collisionLayer = map.getObjectLayer('Collision');
this.collisionGroup = this.physics.add.staticGroup();
collisionLayer.objects.forEach(obj => {
const rect = this.add.rectangle(
obj.x + obj.width/2,
obj.y + obj.height/2,
obj.width, obj.height,
0xff0000, 0 // Invisible
);
this.physics.add.existing(rect, true);
this.collisionGroup.add(rect);
});
// Collide player with group
this.physics.add.collider(this.player, this.collisionGroup);
```
---
## 🌾 FARMABLE TILES
### **Tilled Soil Patch**
- **Layer:** Tilled Soil
- **Tiles:** 2×2 = 4 tiles
- **Position:** Rows 1-2, Columns 1-2
- **Pixels:** (64,64) to (192,192)
### **Tile Properties:**
Each tilled soil tile has:
```
farmable (bool): true
watered (bool): false (default)
planted (bool): false (default)
crop_type (string): "" (empty until planted)
growth_stage (int): -1 (not planted)
```
### **Farming Code (Phaser.js):**
```javascript
// Track farmable tiles
this.farmTiles = [
{ x: 1, y: 1, worldX: 96, worldY: 96, planted: false },
{ x: 2, y: 1, worldX: 160, worldY: 96, planted: false },
{ x: 1, y: 2, worldX: 96, worldY: 160, planted: false },
{ x: 2, y: 2, worldX: 160, worldY: 160, planted: false }
];
```
---
## 🎮 GAMEPLAY FLOW
### **Demo Script Sequence:**
**0:00 - Tutorial Start**
- Text: "Use WASD to move!"
- Kai can walk around
**0:05 - Show Zombie**
- Camera pans to zombie at (4,4)
- Text: "Workers till the fields..."
- Zombie plays dig animation
**0:10 - Back to Player**
- Camera pans back to Kai
- Text: "Press E near soil to plant seeds!"
**0:15 - Farming Tutorial**
- Player plants wheat (manual or auto)
- Text: "Press SPACE to water!"
- Player waters crop
**0:20 - Growth Timelapse**
- Wheat grows: stage 0 → 1 → 2 → 3 → 4
- 2 seconds per stage (10 seconds total)
- Text: "Watch it grow!"
**0:30 - Harvest**
- Text: "Press H to harvest!"
- Wheat disappears
- Inventory UI shows +1 wheat bundle
**0:35 - Style Switch**
- Everything switches Style A → Style B
- Text: "Two art styles in one game!"
**0:40 - Ending**
- Fade to black
- Text: "This is just 1% of DolinaSmrti..."
- Text: "Support us on Kickstarter!"
**Total Length:** 45 seconds (repeatable)
---
## 📐 MAP LAYOUT REFERENCE
```
0 1 2 3 4 5 6 7
┌──┬──┬──┬──┬──┬──┬──┬──┐
0 │🌳│🌱│🌱│🌱│🪨│🌱│🌱│🌱│ Tree at (0,0), Rock at (4,0)
├──┼──┼──┼──┼──┼──┼──┼──┤
1 │🌱│🟫│🟫│🌱│🌱│🌱│⛺│🌱│ Tilled soil, Tent at (6,1)
├──┼──┼──┼──┼──┼──┼──┼──┤
2 │🌱│🟫│🟫│🌱│🌱│🌱│🌱│🌱│ Tilled soil
├──┼──┼──┼──┼──┼──┼──┼──┤
3 │🌱│🌱│🌱│🌱│🌱│🌱│🌱│🌱│ Open grass
├──┼──┼──┼──┼──┼──┼──┼──┤
4 │🌱│🌱│🌱│🌱│🧟│🌱│🌱│🌱│ Zombie at (4,4)
├──┼──┼──┼──┼──┼──┼──┼──┤
5 │🌱│🌱│👤│🌱│🌱│🌱│🔥│🌱│ Kai at (2,5), Campfire (6,5)
├──┼──┼──┼──┼──┼──┼──┼──┤
6 │🌱│🌱│🌱│🌱│🌱│🌱│🌱│🌱│ Open grass
├──┼──┼──┼──┼──┼──┼──┼──┤
7 │🌱│🌱│🌱│🌱│🌱│🌱│🌱│🌱│ Open grass
└──┴──┴──┴──┴──┴──┴──┴──┘
```
**Legend:**
- 🌱 = Grass tile
- 🟫 = Tilled soil (farmable)
- 👤 = Kai spawn point
- 🧟 = Zombie spawn
- ⛺ = Tent (building)
- 🔥 = Campfire (decoration)
- 🌳 = Dead tree (decoration)
- 🪨 = Rock (decoration)
---
## 🔧 EXPORT SETTINGS
### **For Phaser.js:**
1. **File → Export As...**
2. Format: `JSON map files (*.json)`
3. Settings:
- Embed tilesets: `No` (external)
- Resolve object types: `Yes`
- Detach templates: `No`
4. Save to: `maps/demo_project/demo_micro_farm.json`
### **JSON Structure:**
```json
{
"compressionlevel": -1,
"height": 8,
"width": 8,
"tileheight": 64,
"tilewidth": 64,
"layers": [...],
"tilesets": [...],
"type": "map",
"version": "1.10"
}
```
---
## 📋 QUICK BUILD CHECKLIST
- [ ] Create new map (8×8, 64×64 tiles)
- [ ] Add terrain tileset (4 tiles)
- [ ] Add crops tileset (5 tiles)
- [ ] Add objects tileset (4 objects)
- [ ] Create 7 layers (correct order!)
- [ ] Fill Base Terrain with grass
- [ ] Paint 2×2 tilled soil
- [ ] Place tent building
- [ ] Place 3 decorations
- [ ] Add Kai spawn point
- [ ] Add zombie spawn point
- [ ] Create collision boxes
- [ ] Set all custom properties
- [ ] Save as .tmx
- [ ] Export as .json
- [ ] Test in Phaser.js
**Time:** ~2 hours ☕
---
## 🎯 SUCCESS CRITERIA
**Map is ready when:**
1. ✅ All tilesets load without errors
2. ✅ Layers in correct order (terrain at bottom)
3. ✅ All spawns have custom properties
4. ✅ Collision objects properly placed
5. ✅ JSON exports successfully
6. ✅ File size < 50KB (lightweight)
7. ✅ No missing tile references
---
## 🚀 NEXT STEPS AFTER MAP
1. Open Phaser.js project
2. Load `demo_micro_farm.json`
3. Create tilesets in Phaser
4. Spawn player at kai_spawn
5. Add NPC at zombie spawn
6. Test collision
7. Implement farming mechanics
8. Add UI overlay
**See:** `docs/KICKSTARTER_DEMO_IMPLEMENTATION_GUIDE.md`
---
**HAPPY MAPPING! 🗺️✨**