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

🗺️ 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:

// 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):

// 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:

{
  "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! 🗺️