Files
novafarma/docs/CHARACTER_SETUP_GUIDE.md
2025-12-14 12:36:46 +01:00

250 lines
6.4 KiB
Markdown

# 🎮 KRVAVA ŽETEV - Character Setup Guide
Vodič za ustvarjanje in dodajanje novih karakterjev v igro.
---
## 📋 Trenutne Nastavitve Igralca
### Player Character (Protagonist)
- **Sprite**: `assets/sprites/player_walking_clean.png`
- **Texture Key**: `player_protagonist`
- **Frame Size**: 256x256 pixels
- **Total Size**: 1024x1024 pixels (4x4 grid = 16 frames)
- **Scale**: 0.5 (prikazuje kot 128x128)
- **Origin**: (0.5, 1.0) - bottom center
### Animation Layout
```
Row 1 (frames 0-3): DOWN (spredaj, proti kameri)
Row 2 (frames 4-7): LEFT (levo, stranski pogled)
Row 3 (frames 8-11): RIGHT (desno, stranski pogled)
Row 4 (frames 12-15): UP (zadaj, hrbtni pogled)
```
### Animacije
- `protagonist_walk_down` - frames 0-3 @ 8 fps
- `protagonist_walk_left` - frames 4-7 @ 8 fps
- `protagonist_walk_right` - frames 8-11 @ 8 fps
- `protagonist_walk_up` - frames 12-15 @ 8 fps
- `protagonist_idle_down` - frame 0
- `protagonist_idle_left` - frame 4
- `protagonist_idle_right` - frame 8
- `protagonist_idle_up` - frame 12
---
## 🎨 Kako Ustvariti Nov Karakter
### 1. Pripravi Spritesheet Sliko
**Zahteve:**
- **Format**: PNG s transparentnim ozadjem
- **Velikost**: 1024x1024 pixels (ali 512x512 ali 2048x2048 - mora biti deljivo s 4)
- **Grid**: 4x4 (16 frames)
- **Frame Size**: 256x256 pixels (ali 128x128, 512x512)
- **Ozadje**: 100% transparentno (brez šahovnice!)
**Če imaš sliko s šahovnico**, uporabi Python script:
```bash
python tools/remove_checkerboard.py
```
### 2. Shrani Sliko v Pravilno Mapo
```
c:\novafarma\assets\sprites\[character_name]_walking.png
```
Primer:
- `zombie_walking.png`
- `merchant_walking.png`
- `knight_walking.png`
### 3. Dodaj v PreloadScene.js
Odpri: `c:\novafarma\src\scenes\PreloadScene.js`
**V preload() funkciji dodaj:**
```javascript
// Nov Karakter - [IME]
this.load.spritesheet('[character_key]', 'assets/sprites/[character_name]_walking.png', {
frameWidth: 256, // Nastavi glede na velikost frame-a
frameHeight: 256
});
```
**V createAnimations() funkciji dodaj:**
```javascript
// [CHARACTER_NAME] Walking Animations
this.anims.create({
key: '[character]_walk_down',
frames: this.anims.generateFrameNumbers('[character_key]', { start: 0, end: 3 }),
frameRate: 8,
repeat: -1
});
this.anims.create({
key: '[character]_walk_left',
frames: this.anims.generateFrameNumbers('[character_key]', { start: 4, end: 7 }),
frameRate: 8,
repeat: -1
});
this.anims.create({
key: '[character]_walk_right',
frames: this.anims.generateFrameNumbers('[character_key]', { start: 8, end: 11 }),
frameRate: 8,
repeat: -1
});
this.anims.create({
key: '[character]_walk_up',
frames: this.anims.generateFrameNumbers('[character_key]', { start: 12, end: 15 }),
frameRate: 8,
repeat: -1
});
// Idle animations
this.anims.create({
key: '[character]_idle_down',
frames: [{ key: '[character_key]', frame: 0 }],
frameRate: 1
});
this.anims.create({
key: '[character]_idle_left',
frames: [{ key: '[character_key]', frame: 4 }],
frameRate: 1
});
this.anims.create({
key: '[character]_idle_right',
frames: [{ key: '[character_key]', frame: 8 }],
frameRate: 1
});
this.anims.create({
key: '[character]_idle_up',
frames: [{ key: '[character_key]', frame: 12 }],
frameRate: 1
});
```
### 4. Ustvari Character Class
Ustvari novo datoteko: `c:\novafarma\src\entities\[CharacterName].js`
**Template:**
```javascript
// [Character Name] Entity
class [ClassName] {
constructor(scene, gridX, gridY, offsetX = 0, offsetY = 0) {
this.scene = scene;
this.gridX = gridX;
this.gridY = gridY;
this.offsetX = offsetX;
this.offsetY = offsetY;
this.iso = new IsometricUtils(48, 24);
this.direction = 'down';
this.isMoving = false;
this.createSprite();
}
createSprite() {
const screenPos = this.iso.toScreen(this.gridX, this.gridY);
this.sprite = this.scene.add.sprite(
screenPos.x + this.offsetX,
screenPos.y + this.offsetY,
'[character_key]',
0
);
this.sprite.setOrigin(0.5, 1.0);
this.sprite.setScale(0.5); // Nastavi glede na velikost
// Play idle animation
if (this.scene.anims.exists('[character]_idle_down')) {
this.sprite.play('[character]_idle_down');
}
}
update(delta) {
// Add character logic here
}
destroy() {
if (this.sprite) this.sprite.destroy();
}
}
```
### 5. Dodaj v GameScene.js
```javascript
// Import character
// (če uporabljaš module system)
// V create() funkciji:
this.myCharacter = new [ClassName](this, 50, 50, this.terrainSystem.offsetX, this.terrainSystem.offsetY);
// V update() funkciji:
this.myCharacter.update(delta);
```
---
## 🛠️ Python Script za Odstranitev Šahovnice
**Lokacija:** `c:\novafarma\tools\remove_checkerboard.py`
**Uporaba:**
1. Odpri `remove_checkerboard.py`
2. Spremeni `input_file` in `output_file` pot
3. Zaženi: `python tools\remove_checkerboard.py`
**Primer:**
```python
input_file = r"C:\Users\Downloads\my_character.png"
output_file = r"c:\novafarma\assets\sprites\my_character_clean.png"
```
---
## ✅ Checklist za Nov Karakter
- [ ] Ustvari/pridobi spritesheet (1024x1024, 4x4 grid, transparentno ozadje)
- [ ] Odstrani šahovnico (če je potrebno)
- [ ] Shrani v `assets/sprites/`
- [ ] Dodaj spritesheet load v `PreloadScene.js`
- [ ] Dodaj animacije v `PreloadScene.js`
- [ ] Ustvari Character class (opcijsko)
- [ ] Dodaj v `GameScene.js` (opcijsko)
- [ ] Testiraj v igri (osveži s Ctrl+R)
---
## 📐 Velikosti & Skale
| Frame Size | Total Size | Priporočen Scale | Display Size |
|------------|------------|------------------|--------------|
| 128x128 | 512x512 | 1.0 | 128x128 |
| 256x256 | 1024x1024 | 0.5 | 128x128 |
| 512x512 | 2048x2048 | 0.25 | 128x128 |
---
## 🎯 Priporočila
1. **Consistent Size**: Vsi karakterji naj imajo enako display velikost (128x128)
2. **Transparent Background**: Vedno uporabi PNG s 100% transparentnim ozadjem
3. **Frame Rate**: 8 fps je idealno za walking animacije
4. **Origin Point**: (0.5, 1.0) za bottom-center je najboljše za isometric igre
5. **Backup**: Vedno shrani original pred odstranjevanjem šahovnice
---
**Zadnja posodobitev:** 14.12.2025
**Avtor:** KRVAVA ŽETEV Team