diff --git a/ASSET_COUNT_STATUS_01_01_2026.md b/ASSET_COUNT_STATUS_01_01_2026.md new file mode 100644 index 000000000..af49ae7f4 --- /dev/null +++ b/ASSET_COUNT_STATUS_01_01_2026.md @@ -0,0 +1,289 @@ +# ๐Ÿ“Š ASSET COUNT STATUS - 1.1.2026 + +**Datum**: 1.1.2026 @ 12:45 +**Trenutno**: 752 PNG +**Target**: 13,500 PNG +**Progress**: 5.6% + +--- + +## ๐Ÿ“ˆ TRENUTNO STANJE + +| Kategorija | PNG Files | % Complete | Status | +|:-----------|----------:|:----------:|:------:| +| **kai** | 265 | โœ… | Animations complete | +| **ana** | 15 | ๐ŸŸก | Need animations | +| **gronk** | 14 | ๐ŸŸก | Need animations | +| **npcs** | 48 | ๐Ÿ”ด | Need 132 more | +| **sovrazniki** | 68 | ๐Ÿ”ด | Need more zombies | +| **zgradbe** | 16 | ๐Ÿ”ด | Need 150+ | +| **orodja** | 10 | ๐ŸŸก | Need upgrades | +| **hrana** | 10 | ๐Ÿ”ด | Need 100+ | +| **orozje** | 10 | ๐Ÿ”ด | Need 50+ | +| **rastline** | 71 | ๐ŸŸก | Need seasonal | +| **ui** | 24 | ๐ŸŸก | Need 200+ | +| **dinozavri** | 32 | โœ… | COMPLETE! | +| **ostalo** | 169 | ๐Ÿ”ด | Misc assets | +| **TOTAL** | **752** | **5.6%** | ๐Ÿš€ **Production Active** | + +--- + +## ๐ŸงŸ GLAVNI KARAKTERJI + SOVRAลฝNIKI - PODROBNO + +### ๐Ÿ‘ฅ Heroes (Main Characters) +| Karakter | PNG Files | Status | Lokacija | +|:---------|----------:|:------:|:---------| +| **Kai** | 1 | ๐Ÿ”ด MASTER ONLY | `assets/slike/kai/MASTER_KAI.png` | +| **Ana** | 0 | ๐Ÿ”ด NEED MASTER | `assets/slike/ana/` | +| **Gronk** | 1 | ๐Ÿ”ด MASTER ONLY | `assets/slike/gronk/` | +| **konsistentno/** | 6 | โœ… LOCKED REFS | Style A + B (all 3) | +| **Heroes Total** | **8** | ๐Ÿ”ด **NEED ~174 ANIMATIONS** | - | + +#### ๐ŸŽฌ Animations Needed: +| Character | Walk Cycle | Idle | Actions | Tools | TOTAL Needed | +|:----------|:----------:|:----:|:-------:|:-----:|-----------:| +| Kai | 32 PNG | 4 | 12 | 8 | +56 PNG | +| Ana | 32 PNG | 4 | 12 | 12 | +60 PNG | +| Gronk | 32 PNG | 4 | 16 | 6 | +58 PNG | +| **TOTAL** | **96** | **12** | **40** | **26** | **+174 PNG** | + +--- + +### ๐ŸงŸ Zombies & Enemies +| Category | PNG Files | 1024px | 256px | Status | Lokacija | +|:---------|----------:|:------:|:-----:|:------:|:---------| +| **Zombiji** | 36 | 18 | 18 | ๐ŸŸก BASIC SET | `sovrazniki/zombiji/` | +| **Mutanti** | 6 | 3 | 3 | ๐Ÿ”ด NEED MORE | `sovrazniki/mutanti/` | +| **Bossi** | 26 | 13 | 13 | ๐ŸŸก GOOD START | `sovrazniki/bossi/` | +| **Enemies Total** | **68** | **34** | **34** | ๐ŸŸก **~23% Complete** | - | + +#### ๐ŸงŸ Zombie Types (36 PNG): +| Type | Count | Status | +|:-----|:-----:|:------:| +| Basic Zombies | ~18 | โœ… Core set | +| Zombie Variants | ~18 | ๐ŸŸก Previews | +| **NEED**: Animations | +144 | ๐Ÿ”ด Walk/Attack cycles | +| **NEED**: Hybrids | +50 | ๐Ÿ”ด Special types | +| **Target Total** | **230** | ๐Ÿ”ด **84% remaining** | + +#### ๐Ÿพ Mutants (6 PNG): +- โœ… Mutant Spider (2 PNG - 1024 + 256) +- โœ… Mutant Dog (2 PNG - 1024 + 256) +- โœ… Mutant Rat Giant (2 PNG - 1024 + 256) +- โŒ NEED: +44 PNG (more mutant types + animations) +- **Target**: 50 PNG total + +#### ๐Ÿ‘น Bosses (26 PNG): +- โœ… Boss Dragon Fire (2 PNG) +- โœ… Boss Dragon Ice (2 PNG) +- โœ… Boss Phoenix (2 PNG) +- โœ… Boss Vampire (2 PNG) +- โœ… Boss Hydra (2 PNG) +- โœ… Boss Kraken (2 PNG) +- โœ… Boss Golem (2 PNG) +- โœ… Boss Spider Queen (2 PNG) +- โœ… Boss Demon (2 PNG) +- โœ… Boss T-Rex (2 PNG) +- โœ… +3 more bosses (6 PNG) +- โŒ NEED: +54 PNG (animations + 7 more bosses) +- **Target**: 80 PNG total (20 bosses ร— 4 PNG each) + +--- + +## ๐Ÿ“Š ENEMIES - PRODUCTION TARGET + +| Category | Current | Today | Target | Remaining | Priority | +|:---------|--------:|------:|-------:|----------:|:--------:| +| **Zombies** | 36 | - | 230 | 194 | ๐Ÿ”ฅ HIGH | +| **Mutants** | 6 | - | 50 | 44 | ๐Ÿ”ถ MEDIUM | +| **Bosses** | 26 | +20? | 80 | 54 | ๐Ÿ”ท MEDIUM | +| **Hybrids** | 0 | - | 100 | 100 | ๐Ÿ”ต LOW | +| **TOTAL** | **68** | **+20** | **460** | **392** | - | + +--- + +## ๐ŸŽฏ NAฤŒRT ZA DANES (1.1.2026) + +| Task | PNG Output | ฤŒas | Status | +|:-----|:----------:|:---:|:------:| +| **Task 1.1: Anomalous Fauna** | +96 | 90 min | โณ Pending | +| **Task 1.2: Character Animations** | +120 | 2h | โณ Pending | +| **Task 1.3: Biome Packs (Optional)** | +200-300 | 3-4h | โณ Optional | +| **Task 1.4: Background Removal** | Processing | 30 min | โณ Pending | +| **TOTAL DANES** | **+216 (min)**
**+516 (max)** | **3-7h** | ๐Ÿš€ **Ready!** | + +--- + +## ๐Ÿ“Š ASSET COUNT PROJECTION + +### Scenario A: Minimum (Core Tasks Only) +| Category | Current | Today | Total After | Progress | +|:---------|--------:|------:|------------:|---------:| +| **Existing Assets** | 752 | - | 752 | - | +| **Anomalous Fauna** | 32 | +96 | 128 | +300% | +| **Character Animations** | 294 | +120 | 414 | +41% | +| **TOTAL** | **752** | **+216** | **968** | **7.2%** | + +### Scenario B: Maximum (All Optional Tasks) +| Category | Current | Today | Total After | Progress | +|:---------|--------:|------:|------------:|---------:| +| **Existing Assets** | 752 | - | 752 | - | +| **Anomalous Fauna** | 32 | +96 | 128 | +300% | +| **Character Animations** | 294 | +120 | 414 | +41% | +| **Biome Packs (2-3)** | 0 | +300 | 300 | NEW! | +| **TOTAL** | **752** | **+516** | **1,268** | **9.4%** | + +--- + +## ๐Ÿ† MILESTONE TRACKING + +| Milestone | PNG Target | Current | Remaining | ETA | +|:----------|:----------:|--------:|----------:|:---:| +| **MVP Demo** | 1,000 | 752 | 248 | ๐ŸŸข Today-Tomorrow | +| **Kickstarter** | 2,500 | 752 | 1,748 | ๐ŸŸก Week 1-2 | +| **Alpha 1.0** | 5,000 | 752 | 4,248 | ๐ŸŸก Month 1 | +| **Alpha 2.0** | 8,000 | 752 | 7,248 | ๐Ÿ”ด Month 2 | +| **Full Game** | 13,500 | 752 | 12,748 | ๐Ÿ”ด Month 3-4 | + +--- + +## ๐Ÿ“‹ DETAILED BREAKDOWN BY CATEGORY + +### ๐Ÿง‘ Characters (Total Target: 1,500) +| Asset Type | Current | Today | After | Target | Remaining | +|:-----------|--------:|------:|------:|-------:|----------:| +| Kai Animations | 265 | +40 | 305 | 400 | 95 | +| Ana Animations | 15 | +40 | 55 | 400 | 345 | +| Gronk Animations | 14 | +40 | 54 | 400 | 346 | +| NPCs | 48 | - | 48 | 180 | 132 | +| **Subtotal** | **342** | **+120** | **462** | **1,380** | **918** | + +### ๐Ÿฆ– Biomes - Anomalous Zones (Target: 1,800) +| Biome | Current | Today | After | Target | % | +|:------|--------:|------:|------:|-------:|--:| +| Dinozavri | 32 | - | 32 | 100 | 32% | +| Mythical Highlands | 0 | +12 | 12 | 100 | 12% | +| Endless Forest | 0 | +12 | 12 | 100 | 12% | +| Loch Ness | 0 | +12 | 12 | 100 | 12% | +| Egyptian Desert | 0 | +12 | 12 | 100 | 12% | +| Amazonas | 0 | +12 | 12 | 100 | 12% | +| Atlantis | 0 | +12 | 12 | 100 | 12% | +| Chernobyl | 0 | +12 | 12 | 100 | 12% | +| Catacombs | 0 | +12 | 12 | 100 | 12% | +| Mexican Cenotes | 0 | *(+100)* | 100 | 100 | 0%โ†’100% | +| Witch Forest | 0 | *(+100)* | 100 | 100 | 0%โ†’100% | +| Auroras | 0 | - | 0 | 100 | 0% | +| **Subtotal** | **32** | **+96 (+200)** | **328** | **1,800** | **18%** | + +*Note: (+200) = optional biome packs if doing Task 1.3* + +### ๐Ÿ—ก๏ธ Combat & Equipment (Target: 2,500) +| Asset Type | Current | Today | After | Target | Remaining | +|:-----------|--------:|------:|------:|-------:|----------:| +| Weapons | 10 | - | 10 | 150 | 140 | +| Armor/Clothing | 0 | - | 0 | 200 | 200 | +| Tools | 10 | - | 10 | 80 | 70 | +| **Subtotal** | **20** | **0** | **20** | **430** | **410** | + +### ๐ŸŒพ Resources & Items (Target: 3,500) +| Asset Type | Current | Today | After | Target | Remaining | +|:-----------|--------:|------:|------:|-------:|----------:| +| Food | 10 | - | 10 | 200 | 190 | +| Plants | 71 | - | 71 | 300 | 229 | +| Materials | 0 | - | 0 | 250 | 250 | +| Seeds | 0 | - | 0 | 150 | 150 | +| **Subtotal** | **81** | **0** | **81** | **900** | **819** | + +### ๐Ÿ˜๏ธ World & Environment (Target: 4,000) +| Asset Type | Current | Today | After | Target | Remaining | +|:-----------|--------:|------:|------:|-------:|----------:| +| Buildings | 16 | - | 16 | 500 | 484 | +| Terrain Tiles | 0 | - | 0 | 800 | 800 | +| Props | 0 | - | 0 | 600 | 600 | +| Decorations | 0 | - | 0 | 400 | 400 | +| **Subtotal** | **16** | **0** | **16** | **2,300** | **2,284** | + +### ๐ŸงŸ Enemies (Target: 1,200) +| Asset Type | Current | Today | After | Target | Remaining | +|:-----------|--------:|------:|------:|-------:|----------:| +| Zombies | 68 | - | 68 | 300 | 232 | +| Mutants | 0 | - | 0 | 150 | 150 | +| Bosses | 0 | - | 0 | 80 | 80 | +| Hybrids | 0 | - | 0 | 100 | 100 | +| **Subtotal** | **68** | **0** | **68** | **630** | **562** | + +### ๐ŸŽจ UI & Effects (Target: 1,000) +| Asset Type | Current | Today | After | Target | Remaining | +|:-----------|--------:|------:|------:|-------:|----------:| +| UI Elements | 24 | - | 24 | 400 | 376 | +| VFX/Particles | 0 | - | 0 | 300 | 300 | +| Icons | 0 | - | 0 | 200 | 200 | +| **Subtotal** | **24** | **0** | **24** | **900** | **876** | + +### ๐Ÿ“ฆ Misc & Other (Target: 500) +| Asset Type | Current | Today | After | Target | Remaining | +|:-----------|--------:|------:|------:|-------:|----------:| +| Ostalo | 169 | - | 169 | 500 | 331 | +| **Subtotal** | **169** | **0** | **169** | **500** | **331** | + +--- + +## ๐ŸŽฏ GRAND TOTAL SUMMARY + +| Metric | Value | +|:-------|------:| +| **Current Assets** | 752 PNG | +| **Generated Today (Min)** | +216 PNG | +| **Generated Today (Max)** | +516 PNG | +| **Total After Today (Min)** | 968 PNG | +| **Total After Today (Max)** | 1,268 PNG | +| **Final Target** | 13,500 PNG | +| **Remaining After Today (Min)** | 12,532 PNG | +| **Remaining After Today (Max)** | 12,232 PNG | +| **Current Progress** | 5.6% | +| **Progress After Today (Min)** | 7.2% | +| **Progress After Today (Max)** | 9.4% | + +--- + +## ๐Ÿ“… PRODUCTION VELOCITY ESTIMATE + +**Assuming 200-500 PNG per day**: +- **Week 1**: 752 โ†’ 2,252 PNG (16.7%) +- **Week 2**: 2,252 โ†’ 3,752 PNG (27.8%) +- **Month 1**: 752 โ†’ 6,752 PNG (50%) +- **Month 2**: 6,752 โ†’ 13,252 PNG (98.2%) +- **ETA to 13,500**: **~45-60 days** (end of February 2026) + +--- + +## โœ… TODAY'S GOALS + +### Minimum Success Criteria: +- [x] Current: 752 PNG +- [ ] After Task 1.1: 848 PNG (+96 fauna) +- [ ] After Task 1.2: 968 PNG (+120 animations) +- [ ] **Target**: **968 PNG = 7.2%** โœ… + +### Stretch Goals: +- [ ] Complete 1 Biome Pack: +100 PNG โ†’ 1,068 PNG (7.9%) +- [ ] Complete 2 Biome Packs: +200 PNG โ†’ 1,168 PNG (8.7%) +- [ ] Complete 3 Biome Packs: +300 PNG โ†’ 1,268 PNG (9.4%) +- [ ] **Stretch Target**: **1,268 PNG = 9.4%** ๐Ÿš€ + +--- + +## ๐ŸŽ† NEXT MILESTONES + +1. **1,000 PNG** - MVP Demo Ready (Today-Tomorrow) +2. **2,500 PNG** - Kickstarter Launch (Week 2) +3. **5,000 PNG** - Alpha 1.0 (Month 1) +4. **8,000 PNG** - Alpha 2.0 (Month 2) +5. **13,500 PNG** - Full Game Release (Month 2-3) + +--- + +**Status**: ๐Ÿš€ **PRODUCTION ACTIVE!** +**Created**: 1.1.2026 @ 12:45 +**Last Count**: 752 PNG +**Next Update**: After Task 1.1 completion diff --git a/CHARACTER_GENERATION_FINAL_PLAN.md b/CHARACTER_GENERATION_FINAL_PLAN.md new file mode 100644 index 000000000..b4eac6f05 --- /dev/null +++ b/CHARACTER_GENERATION_FINAL_PLAN.md @@ -0,0 +1,104 @@ +# ๐ŸŽฏ CHARACTER ANIMATION GENERATION - FINAL PLAN + +**Datum**: 1.1.2026 +**Status**: API Configured, Billing Enabled โœ… + +--- + +## โŒ **PROBLEM IDENTIFICIRAN:** + +Google Gemini API **NE PODPIRA IMAGE GENERATION** preko REST API-ja! + +- Gemini 2.0 Flash = **text generation model** +- Imagen 3 = **ni dostopen preko Gemini API** +- Image generation = **samo v AI Studio UI** + +--- + +## โœ… **3 DELUJOฤŒE ALTERNATIVE:** + +### **Option 1: Google AI Studio Manual (DANES, ZASTONJ!)** + +1. Pojdi na: https://aistudio.google.com +2. Nov chat โ†’ Gemini Advanced (ker imaลก naroฤnino!) +3. Prompt: "Generate character Kai - green pink dreadlocks, age 17, walking animation frame 1, front view, bold outlines, transparent background" +4. **Generate Image** button +5. Download sliko +6. Repeat za vse frame (58 frames = 1 ura roฤnega dela) + +**Pros**: Zastonj, dela takoj +**Cons**: Roฤno (58ร— ponavljanje) + +--- + +### **Option 2: Bing Image Creator (DANES, UNLIMITED!)** + +1. https://www.bing.com/create +2. Sign in z Microsoft +3. Paste prompt +4. Generira 4 slike naenkrat! +5. Download batch +6. **UNLIMITED** - brez limitov! + +**Pros**: Unlimited, hitro (4 slike/min) +**Cons**: Microsoft raฤun potreben + +--- + +### **Option 3: Leonardo.AI (DANES, 150 slik)** + +1. https://leonardo.ai +2. Sign up zastonj +3. 150 credits/dan +4. Batch generation moลพen +5. API dostop + +**Pros**: API iz Pythona, batch download +**Cons**: 150/dan limit (need 3 dni za vse) + +--- + +## ๐Ÿš€ **PRIPOROฤŒILO:** + +### **ZA DANES (Option 2 - Bing):** + +1. **Setup** (2 min): + - Pojdi na https://www.bing.com/create + - Sign in + +2. **Batch generacija** (2-3h): + - Kopiraj prompte iz `CHARACTER_PRODUCTION_PLAN.md` + - Paste v Bing + - Download vse 4 slike + - Repeat 15ร— (58 frames รท 4 = 15 batch-ov) + +3. **Organize** (30 min): + - Rename files (kai_walk_frame1.png, etc.) + - Move v `assets/slike/kai/`, `ana/`, `gronk/` + - Background removal batch + +**Total ฤas**: ~3-4 ure +**Cost**: ZASTONJ +**Result**: Vse 58 essential frames โœ… + +--- + +## ๐Ÿ’ก **ALI PA:** + +**Za JUTRI** (Google AI Studio): +- Pojdi na https://console.cloud.google.com/vertex-ai +- Enable **Vertex AI Imagen API** +- Potem ima pravilni API endpoint za image generation +- Script bo delal! + +--- + +## ๐Ÿ“‹ **NEXT STEPS:** + +**Katera opcija izbirateลก?** + +1. **Bing Image Creator** โ†’ Dam ti prompte, ti generiraลก roฤno (3h) +2. **Google AI Studio UI** โ†’ Dam ti prompte, generiraลก v UI (1h) +3. **Poฤakaj jutri** โ†’ Enableam Vertex AI, script avtomatsko (setup 10min potem 3h generacija) + +**Povej mi!** ๐ŸŽฏ diff --git a/CHARACTER_PRODUCTION_PLAN.md b/CHARACTER_PRODUCTION_PLAN.md new file mode 100644 index 000000000..e853ada7c --- /dev/null +++ b/CHARACTER_PRODUCTION_PLAN.md @@ -0,0 +1,270 @@ +# ๐Ÿ‘ฅ GLAVNI KARAKTERJI - PRODUCTION PLAN + +**Datum**: 1.1.2026 +**Status**: Planning Phase +**Cilj**: Definirati vse potrebne assete za Kai, Ana, Gronk + +--- + +## ๐Ÿ“Š TRENUTNO STANJE + +| Karakter | Trenutno | Master Ref | Animacije | Status | +|:---------|:--------:|:----------:|:---------:|:------:| +| **Kai** | 1 PNG | โœ… | โŒ | ๐Ÿ”ด NEED WORK | +| **Ana** | 0 PNG | โœ… (konsistentno) | โŒ | ๐Ÿ”ด NEED WORK | +| **Gronk** | 1 PNG | โœ… | โŒ | ๐Ÿ”ด NEED WORK | + +**Locked References** (v `assets/slike/konsistentno/`): +- โœ… `kai_master_styleA_reference.png` +- โœ… `kai_master_styleB_reference.png` +- โœ… `ana_master_styleA_reference.png` +- โœ… `ana_master_styleB_reference.png` +- โœ… `gronk_master_styleA_reference.png` +- โœ… `gronk_master_styleB_reference.png` + +--- + +## ๐ŸŽฎ KAJ POTREBUJEMO ZA VSAK KARAKTER? + +### ๐Ÿง‘ **1. KAI (Protagonist - Zombie Whisperer)** + +#### A. Osnovne Animacije (CRITICAL) +| Animation | Frames | Directions | Total PNG | Prioriteta | +|:----------|:------:|:----------:|:---------:|:----------:| +| **Walk Cycle** | 4 | 8 (N,NE,E,SE,S,SW,W,NW) | 32 | ๐Ÿ”ฅ HIGH | +| **Idle** | 4 | 2 (side, front) | 8 | ๐Ÿ”ฅ HIGH | +| **Run** | 4 | 8 | 32 | ๐Ÿ”ถ MEDIUM | +| **SUBTOTAL** | - | - | **72** | - | + +#### B. Action Animacije (GAMEPLAY) +| Action | Frames | Directions | Total PNG | Prioriteta | +|:-------|:------:|:----------:|:---------:|:----------:| +| **Attack (Sword/Melee)** | 4 | 4 (N,E,S,W) | 16 | ๐Ÿ”ฅ HIGH | +| **Dig (Shovel)** | 4 | 4 | 16 | ๐Ÿ”ฅ HIGH | +| **Plant (Seeds)** | 3 | 2 | 6 | ๐Ÿ”ถ MEDIUM | +| **Harvest** | 3 | 2 | 6 | ๐Ÿ”ถ MEDIUM | +| **Drink/Eat** | 3 | 1 | 3 | ๐Ÿ”ท LOW | +| **Use Item** | 3 | 2 | 6 | ๐Ÿ”ท LOW | +| **SUBTOTAL** | - | - | **53** | - | + +#### C. Emotional/Story Animacije (CUTSCENE) +| Animation | Frames | Total PNG | Prioriteta | +|:----------|:------:|:---------:|:----------:| +| **Sad/Crying** | 4 | 4 | ๐Ÿ”ท LOW | +| **Happy/Celebrate** | 4 | 4 | ๐Ÿ”ท LOW | +| **Thinking** | 3 | 3 | ๐Ÿ”ท LOW | +| **Shocked** | 2 | 2 | ๐Ÿ”ท LOW | +| **SUBTOTAL** | - | **13** | - | + +#### D. Combat Special (ALPHA 2.0) +| Animation | Frames | Total PNG | Prioriteta | +|:----------|:------:|:---------:|:----------:| +| **Zombie Command** (gesture) | 4 | 4 | ๐Ÿ”ต LATER | +| **Telepathy Effect** | 6 | 6 | ๐Ÿ”ต LATER | +| **Hurt/Damaged** | 3 | 3 | ๐Ÿ”ถ MEDIUM | +| **Death** | 5 | 5 | ๐Ÿ”ท LOW | +| **SUBTOTAL** | - | **18** | - | + +### **KAI TOTAL: 156 PNG** + +--- + +### ๐Ÿ’œ **2. ANA (Twin Sister - Scientist)** + +#### A. Osnovne Animacije (CRITICAL) +| Animation | Frames | Directions | Total PNG | Prioriteta | +|:----------|:------:|:----------:|:---------:|:----------:| +| **Walk Cycle** | 4 | 8 | 32 | ๐Ÿ”ฅ HIGH | +| **Idle** | 4 | 2 | 8 | ๐Ÿ”ฅ HIGH | +| **Run** | 4 | 8 | 32 | ๐Ÿ”ถ MEDIUM | +| **SUBTOTAL** | - | - | **72** | - | + +#### B. Action Animacije (SCIENTIST THEME) +| Action | Frames | Directions | Total PNG | Prioriteta | +|:-------|:------:|:----------:|:---------:|:----------:| +| **Research** (notebook) | 4 | 2 | 8 | ๐Ÿ”ฅ HIGH | +| **Heal** (apply bandage) | 4 | 2 | 8 | ๐Ÿ”ฅ HIGH | +| **Examine** (magnifying glass) | 3 | 2 | 6 | ๐Ÿ”ถ MEDIUM | +| **Mix Potion** | 4 | 1 | 4 | ๐Ÿ”ถ MEDIUM | +| **Collect Sample** | 3 | 2 | 6 | ๐Ÿ”ท LOW | +| **SUBTOTAL** | - | - | **32** | - | + +#### C. Emotional/Story (TWIN BOND THEME) +| Animation | Frames | Total PNG | Prioriteta | +|:----------|:------:|:---------:|:----------:| +| **Worried** | 4 | 4 | ๐Ÿ”ฅ HIGH (story) | +| **Relief** | 4 | 4 | ๐Ÿ”ฅ HIGH (story) | +| **Twin Bond Glow** | 6 | 6 | ๐Ÿ”ถ MEDIUM | +| **Flashback Pose** | 3 | 3 | ๐Ÿ”ท LOW | +| **SUBTOTAL** | - | **17** | - | + +#### D. Combat/Support (SUPPORT ROLE) +| Animation | Frames | Total PNG | Prioriteta | +|:----------|:------:|:---------:|:----------:| +| **Defend** (staff block) | 4 | 4 | ๐Ÿ”ถ MEDIUM | +| **Cure Cast** | 5 | 5 | ๐Ÿ”ถ MEDIUM | +| **Hurt** | 3 | 3 | ๐Ÿ”ท LOW | +| **Death** | 5 | 5 | ๐Ÿ”ท LOW | +| **SUBTOTAL** | - | **17** | - | + +### **ANA TOTAL: 138 PNG** + +--- + +### ๐Ÿ’š **3. GRONK (Zen Troll - Comic Relief)** + +#### A. Osnovne Animacije (CRITICAL) +| Animation | Frames | Directions | Total PNG | Prioriteta | +|:----------|:------:|:----------:|:---------:|:----------:| +| **Walk Cycle** (heavy) | 4 | 8 | 32 | ๐Ÿ”ฅ HIGH | +| **Idle** (chill stance) | 4 | 2 | 8 | ๐Ÿ”ฅ HIGH | +| **Run** (slow lumbering) | 4 | 8 | 32 | ๐Ÿ”ถ MEDIUM | +| **SUBTOTAL** | - | - | **72** | - | + +#### B. Action Animacije (TROLL THEME) +| Action | Frames | Directions | Total PNG | Prioriteta | +|:-------|:------:|:----------:|:---------:|:----------:| +| **Vape** ๐Ÿ’จ (signature!) | 6 | 2 | 12 | ๐Ÿ”ฅ HIGH | +| **Smash** (club attack) | 5 | 4 | 20 | ๐Ÿ”ฅ HIGH | +| **Lift Heavy** | 4 | 2 | 8 | ๐Ÿ”ถ MEDIUM | +| **Meditate** (zen pose) | 4 | 1 | 4 | ๐Ÿ”ท LOW | +| **SUBTOTAL** | - | - | **44** | - | + +#### C. Emotional (COMIC RELIEF) +| Animation | Frames | Total PNG | Prioriteta | +|:----------|:------:|:---------:|:----------:| +| **Laugh** | 4 | 4 | ๐Ÿ”ถ MEDIUM | +| **Confused** | 3 | 3 | ๐Ÿ”ท LOW | +| **Chill/Relaxed** | 3 | 3 | ๐Ÿ”ท LOW | +| **SUBTOTAL** | - | **10** | - | + +#### D. Combat (TANK ROLE) +| Animation | Frames | Total PNG | Prioriteta | +|:----------|:------:|:---------:|:----------:| +| **Block** (shield up) | 3 | 3 | ๐Ÿ”ถ MEDIUM | +| **Taunt** | 4 | 4 | ๐Ÿ”ท LOW | +| **Hurt** | 3 | 3 | ๐Ÿ”ถ MEDIUM | +| **Death** | 5 | 5 | ๐Ÿ”ท LOW | +| **SUBTOTAL** | - | **15** | - | + +### **GRONK TOTAL: 141 PNG** + +--- + +## ๐Ÿ“Š GRAND TOTAL SUMMARY + +| Character | Walk/Run | Actions | Emotions | Combat | TOTAL | +|:----------|:--------:|:-------:|:--------:|:------:|------:| +| **Kai** | 72 | 53 | 13 | 18 | **156** | +| **Ana** | 72 | 32 | 17 | 17 | **138** | +| **Gronk** | 72 | 44 | 10 | 15 | **141** | +| **GRAND TOTAL** | **216** | **129** | **40** | **50** | **435** | + +--- + +## ๐ŸŽฏ PHASED PRODUCTION STRATEGY + +### **PHASE 1: CORE GAMEPLAY** (Priority ๐Ÿ”ฅ HIGH) +**Cilj**: Playable characters z basic animations + +| Character | Animations | PNG Count | ฤŒas Est. | +|:----------|:-----------|:---------:|:--------:| +| Kai | Walk (32) + Idle (8) + Attack (16) + Dig (16) | 72 | 1.5h | +| Ana | Walk (32) + Idle (8) + Research (8) + Heal (8) | 56 | 1h | +| Gronk | Walk (32) + Idle (8) + Vape (12) + Smash (20) | 72 | 1.5h | +| **PHASE 1 TOTAL** | - | **200 PNG** | **~4h** | + +--- + +### **PHASE 2: EXPANDED GAMEPLAY** (Priority ๐Ÿ”ถ MEDIUM) +**Cilj**: More actions + story emotions + +| Character | Animations | PNG Count | ฤŒas Est. | +|:----------|:-----------|:---------:|:--------:| +| Kai | Run (32) + Plant (6) + Harvest (6) + Hurt (3) | 47 | 1h | +| Ana | Run (32) + Examine (6) + Mix (4) + Worried (4) | 46 | 1h | +| Gronk | Run (32) + Lift (8) + Laugh (4) + Hurt (3) | 47 | 1h | +| **PHASE 2 TOTAL** | - | **140 PNG** | **~3h** | + +--- + +### **PHASE 3: POLISH & CUTSCENES** (Priority ๐Ÿ”ท LOW) +**Cilj**: Full emotional range + story sequences + +| Character | Animations | PNG Count | ฤŒas Est. | +|:----------|:-----------|:---------:|:--------:| +| Kai | Emotions (13) + Use Item (6) + Eat (3) + Death (5) | 27 | 45 min | +| Ana | Twin Bond (6) + Flashback (3) + Death (5) + Relief (4) | 18 | 30 min | +| Gronk | Meditate (4) + Confused (3) + Taunt (4) + Death (5) | 16 | 30 min | +| **PHASE 3 TOTAL** | - | **61 PNG** | **~2h** | + +--- + +### **PHASE 4: ADVANCED SYSTEMS** (Priority ๐Ÿ”ต ALPHA 2.0) +**Cilj**: Special abilities + effects + +| Character | Animations | PNG Count | ฤŒas Est. | +|:----------|:-----------|:---------:|:--------:| +| Kai | Zombie Command (4) + Telepathy (6) | 10 | 20 min | +| Ana | Collect Sample (6) + Cure Cast (5) | 11 | 20 min | +| Gronk | Block (3) + Chill (3) | 6 | 15 min | +| **PHASE 4 TOTAL** | - | **27 PNG** | **~1h** | + +--- + +## โœ… PRODUCTION TIMELINE ESTIMATE + +| Phase | PNG Output | ฤŒas | Prioriteta | Kdaj? | +|:------|:----------:|:---:|:----------:|:-----:| +| **Phase 1: Core** | 200 | 4h | ๐Ÿ”ฅ CRITICAL | **Danes!** | +| **Phase 2: Expanded** | 140 | 3h | ๐Ÿ”ถ HIGH | Jutri | +| **Phase 3: Polish** | 61 | 2h | ๐Ÿ”ท MEDIUM | Dan 3 | +| **Phase 4: Advanced** | 27 | 1h | ๐Ÿ”ต LOW | Alpha 2.0 | +| **TOTAL** | **428** | **10h** | - | Week 1 | + +--- + +## ๐ŸŽจ ART STYLE REQUIREMENTS + +### Vsak karakter rabi 2 verzije: +- **Style A** (Cartoon): Bright colors, bold outlines +- **Style B** (Noir): Dark, gritty, high contrast + +**Total PNG ร— 2 = 856 PNG** (if doing both styles) + +--- + +## ๐Ÿ“ GENERATION STRATEGY + +### Option A: Batch Generation (Recommended) +1. Generate ALL Phase 1 animations for Kai (72 PNG) - 1.5h +2. Generate ALL Phase 1 animations for Ana (56 PNG) - 1h +3. Generate ALL Phase 1 animations for Gronk (72 PNG) - 1.5h +4. Background removal batch - 30 min +5. **TOTAL TODAY: 200 PNG in 4.5h** + +### Option B: Character-by-Character +1. Kai complete (156 PNG) - 3h +2. Ana complete (138 PNG) - 3h +3. Gronk complete (141 PNG) - 3h +4. **TOTAL: 435 PNG in 9h** (full day) + +--- + +## ๐Ÿš€ RECOMMENDED PLAN FOR TODAY + +**Session 1 (Morning - 2h):** +- [ ] Generate Kai Phase 1 (72 PNG) +- [ ] Background removal + +**Session 2 (Afternoon - 2h):** +- [ ] Generate Ana Phase 1 (56 PNG) +- [ ] Generate Gronk Phase 1 (72 PNG) + +**RESULT**: โœ… **200 PNG - All 3 characters playable!** + +--- + +**Created**: 1.1.2026 @ 12:51 +**Status**: ๐Ÿ“‹ **PLAN READY - AWAITING EXECUTION** +**Next Step**: Start Phase 1 generation OR adjust plan based on feedback diff --git a/COMFYUI_SETUP_TODAY.md b/COMFYUI_SETUP_TODAY.md new file mode 100644 index 000000000..df881e7ad --- /dev/null +++ b/COMFYUI_SETUP_TODAY.md @@ -0,0 +1,86 @@ +# ๐ŸŽฏ COMFYUI SETUP - DANES! + +**Datum**: 1.1.2026 +**Status**: ComfyUI app found โœ… +**Cilj**: Generate slike kot vฤeraj! + +--- + +## โœ… **KAJ SEM NAล EL:** + +Vฤeraj si uporabljal **ComfyUI.app**! + +Scripts ki so delali: +- `test_hybrid_comfyui.py` +- `generate_assets_local.py` +- `generate_v63_stardew.py` + +Vsi kliฤejo: +- `http://127.0.0.1:8188` (ComfyUI server) + +--- + +## ๐Ÿš€ **KAJ MORAล  NAREDITI (3 KORAKI):** + +### **KORAK 1: Zaลพeni ComfyUI app** + +**Roฤno odpri:** +1. Pojdi v Finder +2. Applications folder +3. Dvojni klik na **ComfyUI.app** +4. Poฤakaj da se zaลพene (1-2min) +5. Odpre se browser window na `http://127.0.0.1:8188` + +**ALI iz terminala:** +```bash +open /Applications/ComfyUI.app +``` + +--- + +### **KORAK 2: Preveri da teฤe** + +Ko se ComfyUI odpre v browser-ju, v terminalu testiraj: + +```bash +curl -s http://127.0.0.1:8188/system_stats +``` + +**ฤŒe dela โ†’ vidiลก JSON z "comfyui_version"** +**ฤŒe NE dela โ†’ poฤakaj ลกe malo (app se ลกe zaganja)** + +--- + +### **KORAK 3: Poลพeni generation script** + +Ko ComfyUI teฤe, poลพeni: + +```bash +cd /Users/davidkotnik/repos/novafarma +python3 scripts/test_hybrid_comfyui.py +``` + +**To bo generiralo test slike!** + +--- + +## ๐Ÿ“ **POTEM:** + +Ko test dela, lahko poganjamo **full character generation** script ki uporablja ComfyUI! + +Naredim ti script ki generira vse 58 essential frames preko ComfyUI (kot vฤeraj). + +--- + +## โšก **QUICKSTART:** + +1. **Odpri ComfyUI.app** (dvojni klik v Applications) +2. **Poฤakaj** da se zaลพene (1-2 min) +3. **Povej mi** ko se odpre browser window +4. **Poลพenem** generation script! + +--- + +**STATUS**: Ready! ComfyUI app je instaliran, samo zagnati ga moraลก! ๐Ÿš€ + +**Poลกlji mi screenshot ko se ComfyUI odpre!** diff --git a/TASKS_01_01_2026.md b/TASKS_01_01_2026.md new file mode 100644 index 000000000..dca6d330f --- /dev/null +++ b/TASKS_01_01_2026.md @@ -0,0 +1,587 @@ +# ๐ŸŽฏ TASKS - 1.1.2026 (SREฤŒNO NOVO LETO!) + +**Datum**: 1.1.2026 +**Status**: API Kvota RESET @ 01:00 CET โœ… +**Cilj**: Masovna produkcija asset-ov + System Integration + +--- + +## ๐Ÿš€ PRIORITETA 1: ASSET GENERATION (GLAVNA PRIORITETA!) + +### โœ… Status Check +- [x] Dino Valley fauna (32/32 PNG) - **COMPLETE!** โœ… +- [x] API kvota reset - **READY!** โœ… +- [x] Scripts pripravฤผjeni - **READY!** โœ… + +### ๐ŸŽจ Task 1.1: Generate Anomalous Zone Fauna (96 PNG) +**ฤŒas**: 90 min +**Prioriteta**: ๐Ÿ”ฅ CRITICAL +**Script**: `scripts/generate_anomalous_fauna.py` + +**8 Zon za generirati**: +1. Mythical Highlands (12 PNG) - unicorns, dragons, griffins +2. Endless Forest (12 PNG) - bigfoot, wendigo, forest spirits +3. Loch Ness (12 PNG) - Nessie, leprechauns, kelpies +4. Egyptian Desert (12 PNG) - mummies, scarabs, anubis +5. Amazonas (12 PNG) - jaguars, anacondas, piranhas +6. Atlantis (12 PNG) - mermaids, sea serpents, dolphins +7. Chernobyl (12 PNG) - radioactive mutants, troll king +8. Catacombs (12 PNG) - skeletons, ghosts, lich + +**Action**: +```bash +cd /Users/davidkotnik/repos/novafarma +python scripts/generate_anomalous_fauna.py +``` + +**Checklist**: +- [ ] Poลพeni script +- [ ] Preveri da vse slike generira (96 PNG) +- [ ] Run background removal +- [ ] Preveri kvaliteto +- [ ] Commit to git + +--- + +### ๐Ÿ‘ค Task 1.2: Generate Character Animations (120 PNG) +**ฤŒas**: 2h +**Prioriteta**: ๐Ÿ”ฅ CRITICAL +**Script**: `scripts/generate_character_animations.py` + +**Characters**: +- Kai (40 PNG) - walk cycle 8-way, idle, attack, dig, plant +- Ana (40 PNG) - walk cycle 8-way, idle, research, heal +- Gronk (40 PNG) - walk cycle 8-way, idle, vape, smash + +**Action**: +```bash +cd /Users/davidkotnik/repos/novafarma +python scripts/generate_character_animations.py +``` + +**Checklist**: +- [ ] Poลพeni script +- [ ] Preveri animacije (smooth transitions) +- [ ] Background removal batch +- [ ] Organize v `assets/slike/kai/`, `ana/`, `gronk/` +- [ ] Commit to git + +--- + +### ๐ŸŒ Task 1.3: Complete 2-3 Biome Asset Packs (Optional) +**ฤŒas**: 3-4h +**Prioriteta**: ๐Ÿ”ถ HIGH +**Script**: Adapt existing scripts + +**Priority Biomes**: +1. **Mexican Cenotes** - axolotls, cave crystals, mayan gear +2. **Witch Forest** - witches, potions, dark magic items +3. **Mythical Highlands** - expand from fauna task + +**Per Biome** (~100 PNG each): +- Fauna (12) - from Task 1.1 +- Clothing (15) - theme-specific outfits +- Weapons (10) - unique to biome +- Food (10) - regional cuisine +- Materials (15) - crafting resources +- Terrain (10) - ground tiles +- Vegetation (15) - plants/trees +- Props (10) - decorations +- Buildings (3) - structures + +**Checklist**: +- [ ] Choose 2-3 biomes +- [ ] Create/adapt generation script +- [ ] Generate all assets +- [ ] Background removal +- [ ] Organize v `assets/slike/[biome_name]/` +- [ ] Commit to git + +--- + +### ๐ŸŽฏ Task 1.4: Background Removal Batch Processing +**ฤŒas**: 30 min +**Prioriteta**: ๐Ÿ”ถ HIGH +**Script**: `scripts/remove_bg_advanced.py` + +**Action**: +```bash +cd /Users/davidkotnik/repos/novafarma +python scripts/remove_bg_advanced.py +``` + +**Checklist**: +- [ ] Run na vse novo generirane PNG +- [ ] Preveri alpha channels +- [ ] Resize na game-ready dimensions +- [ ] Create previews + +--- + +## ๐Ÿ”ง PRIORITETA 2: SYSTEM INTEGRATION + +### ๐Ÿงช Task 2.1: Basic Smoke Test +**ฤŒas**: 10 min +**Prioriteta**: ๐Ÿ”ฅ CRITICAL (FIRST!) +**File**: Trenutna igra + +**Test Checklist**: +- [ ] Odpri igro (npm start) +- [ ] Preveri Console za errors +- [ ] Player spawna? +- [ ] WASD movement dela? +- [ ] Inventory (I key) dela? +- [ ] Crafting (C key) dela? +- [ ] Save system (F5) dela? + +**ฤŒe vse dela โ†’ nadaljuj Task 2.2** +**ฤŒe NE dela โ†’ FIX najprej!** + +--- + +### โš™๏ธ Task 2.2: Initialize New Systems in GameScene +**ฤŒas**: 1h +**Prioriteta**: ๐Ÿ”ฅ CRITICAL +**File**: `src/scenes/GameScene.js` + +**Action**: Dodaj v `create()` function (po line ~800): + +```javascript +// ======================================================== +// ๐Ÿ†• NEW SYSTEMS (P16-P30) - 1.1.2026 +// ======================================================== +console.log('๐Ÿ†• Initializing New Systems (P16-P30)...'); + +// P16: Mining System +console.log('โ›๏ธ Initializing Mining System...'); +this.miningSystem = new MiningSystem(this); + +// P17: Character Customization +console.log('๐Ÿ‘ค Initializing Character Customization...'); +this.characterCustomization = new CharacterCustomizationSystem(this); + +// P19: Town Restoration +console.log('๐Ÿ˜๏ธ Initializing Town Restoration...'); +this.townRestoration = new TownRestorationSystem(this); + +// P20: Portal Repair +console.log('๐ŸŒ€ Initializing Portal Repair...'); +this.portalRepair = new PortalRepairSystem(this); + +// P22: Smart Zombies +console.log('๐Ÿง  Initializing Smart Zombies...'); +this.smartZombies = new SmartZombieSystem(this); + +// P23: Tool System +console.log('๐Ÿ”ง Initializing Tool System...'); +this.toolSystem = new ToolSystem(this); + +// P25: Ana's Clues +console.log('๐Ÿ’œ Initializing Ana Clues...'); +this.anaClues = new AnaClueSystem(this); + +// P26: Pyramids +console.log('๐Ÿœ๏ธ Initializing Pyramid System...'); +this.pyramids = new PyramidSystem(this); + +// P27: Slimes & Dogs +console.log('๐ŸŸข๐Ÿถ Initializing Slimes & Dogs...'); +this.slimesDogs = new SlimesDogsSystem(this); + +// P28: Animals & Seeds +console.log('๐Ÿ„๐ŸŒฑ Initializing Animals & Seeds...'); +this.animalsSeeds = new AnimalsSeedsSystem(this); + +// P29: Automation +console.log('โš™๏ธ Initializing Automation...'); +this.automation = new AutomationSystem(this); + +// P30: Inventory Expanded +console.log('๐ŸŽ’ Initializing Inventory Expansion...'); +this.inventoryExpanded = new InventorySystemExpanded(this, this.inventorySystem); + +console.log('โœ… All New Systems Initialized!'); +``` + +**Checklist**: +- [ ] Odpri `src/scenes/GameScene.js` +- [ ] Najdi `create()` function +- [ ] Dodaj kodo +- [ ] Shrani +- [ ] Test reload (preveri Console za "โœ… All New Systems Initialized!") + +--- + +### ๐Ÿ”„ Task 2.3: Add System Updates to update() Loop +**ฤŒas**: 30 min +**Prioriteta**: ๐Ÿ”ฅ CRITICAL +**File**: `src/scenes/GameScene.js` + +**Action**: Dodaj v `update(time, delta)` function: + +```javascript +update(time, delta) { + // ... existing update code ... + + // ๐Ÿ†• NEW: Daily automation + if (this.automation) { + const currentDay = Math.floor(time / 86400000); // ms to days + if (currentDay !== this.lastDay) { + this.automation.runDailyAutomation(); + this.lastDay = currentDay; + } + } + + // ๐Ÿ†• NEW: Animal updates + if (this.animalsSeeds) { + this.animalsSeeds.updateLivestock(); + } + + // ๐Ÿ†• NEW: Smart zombie updates + if (this.smartZombies) { + this.smartZombies.updateZombies(delta); + } + + // ๐Ÿ†• NEW: Town construction + if (this.townRestoration) { + this.townRestoration.updateConstruction(delta); + } + + // ๐Ÿ†• NEW: Portal construction + if (this.portalRepair) { + this.portalRepair.updateConstruction(delta); + } +} +``` + +**Checklist**: +- [ ] Najdi `update(time, delta)` function +- [ ] Dodaj kodo +- [ ] Shrani +- [ ] Test: preveri da sistemi teฤejo (Console logs) + +--- + +### ๐Ÿ”— Task 2.4: Connect System Communications +**ฤŒas**: 1h +**Prioriteta**: ๐Ÿ”ถ HIGH +**File**: `src/scenes/GameScene.js` + +**Action**: Dodaj v `create()` function (PO inicializaciji sistemov): + +```javascript +// ======================================================== +// ๐Ÿ”— SYSTEM CONNECTIONS +// ======================================================== +console.log('๐Ÿ”— Connecting Systems...'); + +// A. SmartZombies โ†” ZombieSystem +if (this.smartZombies && this.zombieSystem) { + this.smartZombies.baseZombieSystem = this.zombieSystem; +} + +// B. ToolSystem โ†” InventorySystem +if (this.toolSystem && this.inventorySystem) { + this.toolSystem.inventorySystem = this.inventorySystem; +} + +// C. AnaClues โ†” TwinBondSystem +if (this.anaClues && this.twinBondSystem) { + this.anaClues.onClueFound = (clueId) => { + this.twinBondSystem.triggerMemory(clueId); + }; +} + +// D. Automation โ†” Multiple Systems +if (this.automation) { + this.automation.farmingSystem = this.farmingSystem; + this.automation.smartZombies = this.smartZombies; + this.automation.inventoryExpanded = this.inventoryExpanded; +} + +console.log('โœ… Systems Connected!'); +``` + +**Checklist**: +- [ ] Dodaj kodo +- [ ] Shrani +- [ ] Test: preveri da sistemi komunicirajo + +--- + +### ๐Ÿงช Task 2.5: Full Integration Test +**ฤŒas**: 30 min +**Prioriteta**: ๐Ÿ”ถ HIGH + +**Test Checklist**: +- [ ] Igra se zaลพene brez napak +- [ ] Vsi 46 sistemov inicializirani (Console check) +- [ ] Player movement dela +- [ ] Inventory dela +- [ ] Crafting dela +- [ ] Mining works (zberi resource) +- [ ] Tool durability dela +- [ ] Save/Load dela +- [ ] No memory leaks (check after 5 min gameplay) +- [ ] 60 FPS maintained + +--- + +## ๐ŸŽจ PRIORITETA 3: UI CREATION (OPTIONAL) + +### ๐Ÿ‘ค Task 3.1: Character Creation Scene (Critical) +**ฤŒas**: 2h +**Prioriteta**: ๐Ÿ”ถ HIGH +**File**: `src/scenes/CharacterCreationScene.js` (CREATE NEW) + +**Features Needed**: +- Gender selection (Kai/Ana radio buttons) +- Hair color picker (RGB sliders) +- Body customization (sliders) +- Outfit selection (grid of icons) +- Preview window (live update) +- "Start Game" button + +**Checklist**: +- [ ] Create file +- [ ] Implement UI layout +- [ ] Wire up to CharacterCustomizationSystem +- [ ] Add to index.html +- [ ] Test flow (creation โ†’ game start) + +--- + +### ๐ŸงŸ Task 3.2: Smart Zombie Command UI +**ฤŒas**: 1h +**Prioriteta**: ๐Ÿ”ท MEDIUM +**File**: `src/ui/SmartZombieUI.js` (CREATE NEW) + +**Features Needed**: +- Zombie list (scrollable) +- Command buttons: Stop, Help, Attack, Home +- Follower count display +- XP/Level display per zombie + +**Checklist**: +- [ ] Create file +- [ ] Implement UI +- [ ] Wire up to SmartZombieSystem +- [ ] Add to index.html +- [ ] Test commands + +--- + +### ๐Ÿ’œ Task 3.3: Ana's Clue Collection UI +**ฤŒas**: 1h +**Prioriteta**: ๐Ÿ”ท MEDIUM +**File**: `src/ui/AnaClueUI.js` (CREATE NEW) + +**Features Needed**: +- Progress tracker (15/12/23 clues) +- Gallery view (grid of clues) +- Story milestone indicators +- Clue descriptions on hover/click + +**Checklist**: +- [ ] Create file +- [ ] Implement gallery layout +- [ ] Wire up to AnaClueSystem +- [ ] Add to index.html +- [ ] Test clue discovery flow + +--- + +### ๐ŸŽ’ Task 3.4: Inventory Upgrade UI +**ฤŒas**: 45 min +**Prioriteta**: ๐Ÿ”ท MEDIUM +**File**: `src/ui/InventoryUpgradeUI.js` (CREATE NEW) + +**Features Needed**: +- Tier upgrade menu (Tier 1 โ†’ Tier 5) +- Tool Belt unlock button +- Dog Backpack unlock button +- Quick Sort/Stack/Deposit buttons + +**Checklist**: +- [ ] Create file +- [ ] Implement upgrade interface +- [ ] Wire up to InventorySystemExpanded +- [ ] Add to index.html +- [ ] Test upgrades + +--- + +## ๐Ÿ—บ๏ธ PRIORITETA 4: TILED MAPS (OPTIONAL) + +### ๐Ÿ“ฅ Task 4.1: Import Tilesets to Tiled +**ฤŒas**: 15 min +**Prioriteta**: ๐Ÿ”ท MEDIUM + +**Action**: +1. Odpri Tiled Map Editor +2. Map โ†’ Add External Tileset +3. Browse โ†’ `assets/tilesets/*.tsx` +4. Import vseh 61 TSX files + +**Checklist**: +- [ ] Tiled installed +- [ ] Import all TSX +- [ ] Preview tilesets (check visibility) + +--- + +### ๐Ÿ—บ๏ธ Task 4.2: Create Starter Map (16x16) +**ฤŒas**: 30 min +**Prioriteta**: ๐Ÿ”ท MEDIUM + +**Action**: +1. New Map โ†’ 16x16 tiles, 32x32 tile size +2. Add layers: + - Ground (base terrain) + - Decoration (trees, rocks) + - Collision (invisible) + - Objects (player spawn point) +3. Paint basic starter area +4. Add player spawn object (x:8, y:8) +5. Save as `starter_farm_16x16.tmx` + +**Checklist**: +- [ ] Create map +- [ ] Add layers +- [ ] Paint terrain +- [ ] Add spawn point +- [ ] Save TMX + +--- + +### ๐Ÿ“ค Task 4.3: Export Map to JSON +**ฤŒas**: 5 min +**Prioriteta**: ๐Ÿ”ท MEDIUM + +**Action**: +1. File โ†’ Export As โ†’ JSON +2. Save v `assets/maps/starter_farm_16x16.json` +3. Test load v igri (TiledTestScene.js) + +**Checklist**: +- [ ] Export to JSON +- [ ] Preveri JSON syntax +- [ ] Test load v igri + +--- + +## ๐Ÿ› PRIORITETA 5: BUG REVIEW (OPTIONAL) + +### ๐Ÿ” Task 5.1: Code Audit +**ฤŒas**: 1h +**Prioriteta**: ๐Ÿ”ต LOW + +**Action**: Review kode za: +- Console errors +- Performance bottlenecks +- Memory leaks +- 303 TODO comments (iz bug audit-a) + +**Checklist**: +- [ ] Run game for 10 min +- [ ] Monitor Console +- [ ] Monitor Performance (F3) +- [ ] List critical bugs +- [ ] Document v `BUG_REPORT_01_01_2026.md` + +--- + +### ๐Ÿ”ง Task 5.2: Fix Critical Bugs +**ฤŒas**: 2-4h +**Prioriteta**: ๐Ÿ”ต LOW (only if found) + +**Action**: Fix top 3-5 critical bugs found in Task 5.1 + +**Checklist**: +- [ ] Identify critical bugs +- [ ] Fix them +- [ ] Test fixes +- [ ] Commit + +--- + +## ๐Ÿ“Š SESSION TRACKING + +### ฤŒas Potreben (Estimate): +- **Asset Generation**: 3-6h +- **System Integration**: 3-4h +- **UI Creation**: 4-6h (optional) +- **Tiled Maps**: 1h (optional) +- **Bug Review**: 2-4h (optional) + +**TOTAL**: 6-10h (core) | 13-20h (with optional) + +--- + +## โœ… COMPLETION CHECKLIST + +### End of Day Goals: +- [ ] **Asset Count**: +200-400 PNG (min) +- [ ] **Systems**: All 46 initialized and connected +- [ ] **Game Status**: Fully playable with new systems +- [ ] **UI**: At least Character Creation working +- [ ] **Maps**: Starter map created (optional) +- [ ] **Bugs**: No critical errors + +--- + +## ๐ŸŽฏ RECOMMENDED WORKFLOW + +### **Session 1 (2h): Morning Kickoff** +1. โœ… Task 2.1: Smoke Test (10 min) +2. ๐ŸŽจ Task 1.1: Generate Fauna (90 min) +3. ๐Ÿ”ง Task 1.4: Background Removal (30 min) + +### **Session 2 (3h): System Integration** +1. โš™๏ธ Task 2.2: Initialize Systems (1h) +2. ๐Ÿ”„ Task 2.3: Add Updates (30 min) +3. ๐Ÿ”— Task 2.4: Connect Systems (1h) +4. ๐Ÿงช Task 2.5: Integration Test (30 min) + +### **Session 3 (2h): Character Animations** +1. ๐Ÿ‘ค Task 1.2: Generate Animations (2h) + +### **Session 4 (2h): UI or Biomes** +**Option A**: UI Focus +- ๐Ÿ‘ค Task 3.1: Character Creation (2h) + +**Option B**: Asset Focus +- ๐ŸŒ Task 1.3: Complete 1 Biome (2h) + +### **Session 5 (1-2h): Polish** +- Additional UI screens OR +- Map creation OR +- Bug fixes + +--- + +## ๐Ÿ“ NOTES + +**Asset Priority**: +1. Character animations (CORE gameplay) +2. Anomalous fauna (variety) +3. Complete biomes (showcase) + +**Code Priority**: +1. Smoke test (check current state) +2. System integration (get 46 systems working) +3. UI (playability) + +**Don't Forget**: +- โœ… Commit often (after each major task) +- โœ… Test frequently +- โœ… Take breaks (every 2h) +- โœ… API rate limiting (15s delay between calls) + +--- + +**Created**: 1.1.2026 12:42 +**Status**: ๐Ÿš€ READY TO EXECUTE! +**Next Step**: Start with Task 2.1 (Smoke Test) OR Task 1.1 (Fauna Generation) + +๐ŸŽ† **SREฤŒNO NOVO LETO! LET'S BUILD THIS GAME!** ๐ŸŽ† diff --git a/docs/game_design/FULL_STORY_OVERVIEW.md b/docs/game_design/FULL_STORY_OVERVIEW.md new file mode 100644 index 000000000..48f9b1913 --- /dev/null +++ b/docs/game_design/FULL_STORY_OVERVIEW.md @@ -0,0 +1,90 @@ +# DolinaSmrti: Krvava ลฝetev (Bloody Harvest) - Complete Narrative Overview + +## ๐Ÿ“– The Core Premise +**DolinaSmrti** is a 2.5D Isometric Survival RPG set in a stylized, hand-drawn post-apocalyptic Slovenia (2085). It tells the emotional story of two teenage twins, **Kai** and **Ana Markoviฤ‡**, separated by a tragic event, and their journey to find each other in a world overrun by the undead. + +--- + +## ๐ŸŽญ The Characters + +### 1. Kai Markoviฤ‡ (The Protagonist) +- **Role**: The Survivor / "The Zombie Whisperer". +- **Visuals**: Green & Pink dreadlocks, tactical gear. +- **Ability**: Infected with a rare strain (Alpha Hybrid) that didn't turn him into a zombie but gave him the power to **telepathically control them**. He uses zombies as workforce for his farm. +- **Motivation**: To find his twin sister, Ana, at any cost. + +### 2. Ana Markoviฤ‡ (The Lost Twin) +- **Role**: The Key / The Biologist. +- **Visuals**: Matches Kai's style (Pink dreads), often seen in visions/flashbacks. +- **Status**: Kidnapped. She holds the secret to the true cure within her blood/research. +- **Location**: Unknown (initially), later revealed to be held in a high-security Bio-Lab. + +### 3. Gronk (The Companion) +- **Role**: The Heart / Comic Relief. +- **Species**: Peaceful Troll. +- **Visuals**: Large green troll, pink hair, piercings, vapes regularly. +- **Backstory**: Cousin to the main antagonist (The Giant Troll King). Rejected his violent family to live a "Zen" life. Helps Kai manage the farm and provides moral support. + +### 4. Dr. Viktor Krniฤ‡ (The Antagonist) +- **Role**: The Mad Scientist. +- **Goal**: To weaponize the virus and create a "Super Race" using Ana's unique biology. +- **Base**: Chernobyl Reactor Core (The ultimate destination). + +### 5. The Giant Troll King (The Enforcer) +- **Role**: Gronk's evil cousin. +- **Deed**: The one who physically snatched Ana during the outbreak. + +--- + +## ๐Ÿ“œ The Story Arc + +### ๐ŸŽฌ Prologue: The Separation (2084) +In the chaos of the initial outbreak at **Nova Lab**, Kai and Ana's parents sacrifice themselves to save their children. +- **The Incident**: A massive breach occurs. +- **The Event**: Kai is bitten/infected but transforms into a Hybrid instead of turning. +- **The Tragedy**: In the confusion, The Giant Troll King smashes through the defenses and grabs Ana, taking her away into the darkness. Kai passes out from the infection. + +### ๐ŸŒพ Act 1: The Awakening & The Farm (2085) +**Location**: The Valley of Death (Dolina Smrti). +- Kai wakes up a year later, alone. +- He realizes his power: The zombies don't attack him; they listen to him. +- **Objective**: Survival. Kai establishes a **Micro Farm**. +- **Meeting Gronk**: Kai saves Gronk from a trap. Gronk pledges loyalty and explains that Ana is still alive, leaving "signs" for Kai. +- **The Plan**: Build a base, gather resources, and find the **50 Clues** Ana left behind. + +### ๐Ÿ—บ๏ธ Act 2: The Journey (Biomes 1-18) +Kai travels through 18 distinct biomes (Forests, Swamps, Deserts, Ruins), restoring civilization town by town. +- **Mechanic**: Kai clears areas, rebuilds towns, and sets up "Zombie Workforce" automation. +- **The Clues**: He finds pages of Ana's diary, torn fabric, and encoded messages. Each clue reveals she is being moved closer to the "Old Zone" (Chernobyl). +- **Bosses**: Kai defeats regional guardians (Mutant King, Zombie Horde Leader, Ancient Tree) who guard the path forward. + +### ๐Ÿ”ฌ Act 3: The Revelation (The Bio-Lab) +Kai gathers enough clues to locate Krniฤ‡'s secret forward base. +- **Infiltration**: He storms the lab. +- **The Twist**: He finds Ana's cell... empty. A video log reveals Krniฤ‡ has moved her to **Chernobyl** for the "Final Stage" of his experiment. +- **The Stakes**: Krniฤ‡ plans to release a Super Virus that will wipe out all non-hybrids. + +### โ˜ข๏ธ Act 4: The Reactor (Chernobyl) +The Finale. Kai and Gronk travel to the irradiated ruins of Pripyat. +- **Final Battle**: Kai faces the **Giant Troll King** (Gronk's Cousin) in a massive showdown. +- **The Confrontation**: Kai confronts Dr. Krniฤ‡ at the Reactor Core. + +--- + +## ๐Ÿ The Endings (Based on Player Choice) + +1. **๐ŸŒŸ Together Forever (True Ending)** + * **Condition**: All 50 Clues found, Cure synthesized. + * **Outcome**: Kai rescues Ana. They defeat Krniฤ‡ and use the cure to stabilize the world. Humans and Hybrids live in peace. + +2. **๐Ÿ’” The Sacrifice** + * **Condition**: Kai saves Ana but takes a fatal blow. + * **Outcome**: Kai dies a hero's death. Ana survives to lead the new world, building a statue in his honor. + +3. **๐Ÿ˜ข The Hermit (Bad Ending)** + * **Condition**: Ana dies during the rescue. + * **Outcome**: Kai is broken. He returns to his farm, isolates himself, and lives out his days in silence with only his zombie workers. + +4. **๐Ÿ’€ The Tyrant (Evil Ending)** + * **Condition**: Kai embraces the darkness/power. + * **Outcome**: Kai kills Krniฤ‡ but takes his place. He rules the wasteland as the "Zombie King," with Ana leading the resistance against him. diff --git a/preview_animations.html b/preview_animations.html new file mode 100644 index 000000000..630b970ac --- /dev/null +++ b/preview_animations.html @@ -0,0 +1,500 @@ + + + + + + + DolinaSmrti - Character Animation Preview + + + + +
+

๐ŸŽฎ DolinaSmrti - Character Animations

+

Complete Animation Preview - Bloody Harvest

+ +
+
+
0
+
Animations
+
+
+
0
+
Frames
+
+
+
0
+
Files
+
+
+
+ +
+ + + + + + +
+ +
+
Loading animations
+
+ + + + + + + \ No newline at end of file diff --git a/scripts/generate_all_characters_complete.py b/scripts/generate_all_characters_complete.py new file mode 100644 index 000000000..50edf79d3 --- /dev/null +++ b/scripts/generate_all_characters_complete.py @@ -0,0 +1,393 @@ +#!/usr/bin/env python3 +""" +COMPLETE CHARACTER ANIMATION GENERATOR +Generates ALL animations for Kai, Ana, and Gronk (435 PNG total) +Date: 1.1.2026 +""" + +import os +import time +from pathlib import Path +import google.generativeai as genai +from PIL import Image +import io + +# ==================== CONFIGURATION ==================== +# Try both environment variable names +API_KEY = os.getenv('GEMINI_API_KEY') or os.getenv('GOOGLE_API_KEY') +if not API_KEY: + print("โŒ ERROR: API key not found!") + print("Please set one of:") + print(" export GEMINI_API_KEY='your-key-here'") + print(" export GOOGLE_API_KEY='your-key-here'") + raise ValueError("API key not set!") + +# NOTE: Using deprecated google.generativeai for compatibility +# TODO: Migrate to google.genai in future +import warnings +warnings.filterwarnings('ignore', category=FutureWarning) + +genai.configure(api_key=API_KEY) +print(f"โœ… API Key configured (first 10 chars): {API_KEY[:10]}...") + +OUTPUT_DIR = Path("assets/slike") +DELAY_BETWEEN_CALLS = 15 # seconds (safe rate limiting) + +# Art Style Constants +STYLE_BASE = """ +Dark Hand-Drawn 2D Stylized Indie Game Art. +CRITICAL REQUIREMENTS: +- THICK bold black outlines (3-4px) +- Exaggerated proportions, warped perspective +- High-contrast noir elements +- Centered subject with 10px transparent margin +- 32-bit PNG with alpha channel +- Clean background (pure transparency) +""" + +# ==================== CHARACTER DEFINITIONS ==================== + +KAI_BASE = """ +Character: KAI MARKOVIฤ† (Age 17, Male Protagonist) +- Green & Pink dreadlocks (distinctive!) +- Tactical survivor outfit (torn, weathered) +- Lean athletic build +- Determined expression +- REFERENCE: Check konsistentno/kai_master_styleA_reference.png +""" + +ANA_BASE = """ +Character: ANA MARKOVIฤ† (Age 17, Female Twin) +- Pink dreadlocks (matches Kai's style but all pink) +- Explorer vest, cargo pants +- Slender athletic build +- Intelligent, caring expression +- REFERENCE: Check konsistentno/ana_master_styleA_reference.png +""" + +GRONK_BASE = """ +Character: GRONK (Zen Troll Companion) +- Large green troll, 7ft tall +- Pink mohawk hair +- Multiple piercings (ears, nose) +- Vape pen accessory (signature item!) +- Baggy pants, no shirt +- Chill, relaxed expression +- REFERENCE: Check konsistentno/gronk_master_styleA_reference.png +""" + +# ==================== ANIMATION DEFINITIONS ==================== + +KAI_ANIMATIONS = { + # PHASE 1: Core Gameplay (72 PNG) + "walk_north": {"frames": 4, "desc": "walking away from camera, back view"}, + "walk_northeast": {"frames": 4, "desc": "walking diagonal up-right"}, + "walk_east": {"frames": 4, "desc": "walking right, side view (right profile)"}, + "walk_southeast": {"frames": 4, "desc": "walking diagonal down-right"}, + "walk_south": {"frames": 4, "desc": "walking toward camera, front view"}, + "walk_southwest": {"frames": 4, "desc": "walking diagonal down-left"}, + "walk_west": {"frames": 4, "desc": "walking left, side view (left profile)"}, + "walk_northwest": {"frames": 4, "desc": "walking diagonal up-left"}, + + "idle_front": {"frames": 4, "desc": "idle standing, front view, breathing animation"}, + "idle_side": {"frames": 4, "desc": "idle standing, side profile, breathing animation"}, + + "attack_north": {"frames": 4, "desc": "sword swing upward (attacking north)"}, + "attack_east": {"frames": 4, "desc": "sword swing right (attacking east)"}, + "attack_south": {"frames": 4, "desc": "sword swing downward (attacking south)"}, + "attack_west": {"frames": 4, "desc": "sword swing left (attacking west)"}, + + "dig_north": {"frames": 4, "desc": "digging with shovel upward"}, + "dig_east": {"frames": 4, "desc": "digging with shovel to the right"}, + "dig_south": {"frames": 4, "desc": "digging with shovel downward"}, + "dig_west": {"frames": 4, "desc": "digging with shovel to the left"}, + + # PHASE 2: Expanded (47 PNG) + "run_north": {"frames": 4, "desc": "running away, back view, faster pace"}, + "run_northeast": {"frames": 4, "desc": "running diagonal up-right"}, + "run_east": {"frames": 4, "desc": "running right, side view"}, + "run_southeast": {"frames": 4, "desc": "running diagonal down-right"}, + "run_south": {"frames": 4, "desc": "running toward camera, front view"}, + "run_southwest": {"frames": 4, "desc": "running diagonal down-left"}, + "run_west": {"frames": 4, "desc": "running left, side view"}, + "run_northwest": {"frames": 4, "desc": "running diagonal up-left"}, + + "plant_front": {"frames": 3, "desc": "planting seeds, kneeling, front view"}, + "plant_side": {"frames": 3, "desc": "planting seeds, kneeling, side view"}, + + "harvest_front": {"frames": 3, "desc": "harvesting crops, bending down, front view"}, + "harvest_side": {"frames": 3, "desc": "harvesting crops, bending down, side view"}, + + "hurt": {"frames": 3, "desc": "taking damage, recoiling, pain expression"}, + + # PHASE 3: Polish (27 PNG) + "sad": {"frames": 4, "desc": "crying, hands on face, emotional"}, + "happy": {"frames": 4, "desc": "celebrating, arms raised, joyful"}, + "thinking": {"frames": 3, "desc": "hand on chin, pondering"}, + "shocked": {"frames": 2, "desc": "surprised, eyes wide, mouth open"}, + + "use_item_front": {"frames": 3, "desc": "using item from inventory, front view"}, + "use_item_side": {"frames": 3, "desc": "using item from inventory, side view"}, + + "eat": {"frames": 3, "desc": "eating food, bringing to mouth"}, + + "death": {"frames": 5, "desc": "death animation, collapsing to ground"}, + + # PHASE 4: Advanced (10 PNG) + "zombie_command": {"frames": 4, "desc": "telepathic gesture, hand raised, concentration"}, + "telepathy_effect": {"frames": 6, "desc": "psychic energy emanating, glowing effect"}, +} + +ANA_ANIMATIONS = { + # PHASE 1: Core (56 PNG) + "walk_north": {"frames": 4, "desc": "walking away, back view"}, + "walk_northeast": {"frames": 4, "desc": "walking diagonal up-right"}, + "walk_east": {"frames": 4, "desc": "walking right, side view"}, + "walk_southeast": {"frames": 4, "desc": "walking diagonal down-right"}, + "walk_south": {"frames": 4, "desc": "walking toward camera, front view"}, + "walk_southwest": {"frames": 4, "desc": "walking diagonal down-left"}, + "walk_west": {"frames": 4, "desc": "walking left, side view"}, + "walk_northwest": {"frames": 4, "desc": "walking diagonal up-left"}, + + "idle_front": {"frames": 4, "desc": "idle standing, front view"}, + "idle_side": {"frames": 4, "desc": "idle standing, side profile"}, + + "research_front": {"frames": 4, "desc": "writing in notebook, studying"}, + "research_side": {"frames": 4, "desc": "writing in notebook, side view"}, + + "heal_front": {"frames": 4, "desc": "applying bandage, medical care"}, + "heal_side": {"frames": 4, "desc": "applying bandage, side view"}, + + # PHASE 2: Expanded (46 PNG) + "run_north": {"frames": 4, "desc": "running away, back view"}, + "run_northeast": {"frames": 4, "desc": "running diagonal up-right"}, + "run_east": {"frames": 4, "desc": "running right"}, + "run_southeast": {"frames": 4, "desc": "running diagonal down-right"}, + "run_south": {"frames": 4, "desc": "running toward camera"}, + "run_southwest": {"frames": 4, "desc": "running diagonal down-left"}, + "run_west": {"frames": 4, "desc": "running left"}, + "run_northwest": {"frames": 4, "desc": "running diagonal up-left"}, + + "examine_front": {"frames": 3, "desc": "examining with magnifying glass"}, + "examine_side": {"frames": 3, "desc": "examining, side view"}, + + "mix_potion": {"frames": 4, "desc": "mixing ingredients in flask"}, + + "worried": {"frames": 4, "desc": "worried expression, hand to head"}, + + # PHASE 3: Polish (18 PNG) + "relief": {"frames": 4, "desc": "relief, exhaling, relaxed"}, + "twin_bond_glow": {"frames": 6, "desc": "glowing psychic connection effect"}, + "flashback_pose": {"frames": 3, "desc": "memory pose, ethereal"}, + "death": {"frames": 5, "desc": "death animation, collapsing"}, + + # PHASE 4: Advanced (18 PNG) + "collect_sample_front": {"frames": 3, "desc": "collecting sample with vial"}, + "collect_sample_side": {"frames": 3, "desc": "collecting sample, side view"}, + + "defend": {"frames": 4, "desc": "defensive stance with staff"}, + "cure_cast": {"frames": 5, "desc": "casting cure spell, magical gesture"}, + "hurt": {"frames": 3, "desc": "taking damage, recoiling"}, +} + +GRONK_ANIMATIONS = { + # PHASE 1: Core (72 PNG) + "walk_north": {"frames": 4, "desc": "heavy lumbering walk, back view"}, + "walk_northeast": {"frames": 4, "desc": "heavy walk diagonal up-right"}, + "walk_east": {"frames": 4, "desc": "heavy walk right, side view"}, + "walk_southeast": {"frames": 4, "desc": "heavy walk diagonal down-right"}, + "walk_south": {"frames": 4, "desc": "heavy walk toward camera, front view"}, + "walk_southwest": {"frames": 4, "desc": "heavy walk diagonal down-left"}, + "walk_west": {"frames": 4, "desc": "heavy walk left, side view"}, + "walk_northwest": {"frames": 4, "desc": "heavy walk diagonal up-left"}, + + "idle_front": {"frames": 4, "desc": "idle, chill stance, front view"}, + "idle_side": {"frames": 4, "desc": "idle, chill stance, side view"}, + + "vape_front": {"frames": 6, "desc": "vaping, exhaling smoke cloud, front view"}, + "vape_side": {"frames": 6, "desc": "vaping, exhaling smoke, side view"}, + + "smash_north": {"frames": 5, "desc": "club smash upward"}, + "smash_east": {"frames": 5, "desc": "club smash right"}, + "smash_south": {"frames": 5, "desc": "club smash downward"}, + "smash_west": {"frames": 5, "desc": "club smash left"}, + + # PHASE 2: Expanded (47 PNG) + "run_north": {"frames": 4, "desc": "slow lumbering run, back view"}, + "run_northeast": {"frames": 4, "desc": "lumbering run diagonal up-right"}, + "run_east": {"frames": 4, "desc": "lumbering run right"}, + "run_southeast": {"frames": 4, "desc": "lumbering run diagonal down-right"}, + "run_south": {"frames": 4, "desc": "lumbering run toward camera"}, + "run_southwest": {"frames": 4, "desc": "lumbering run diagonal down-left"}, + "run_west": {"frames": 4, "desc": "lumbering run left"}, + "run_northwest": {"frames": 4, "desc": "lumbering run diagonal up-left"}, + + "lift_heavy_front": {"frames": 4, "desc": "lifting heavy object, straining"}, + "lift_heavy_side": {"frames": 4, "desc": "lifting heavy object, side view"}, + + "laugh": {"frames": 4, "desc": "laughing, belly laugh, jovial"}, + "hurt": {"frames": 3, "desc": "taking damage, grimacing"}, + + # PHASE 3: Polish (16 PNG) + "meditate": {"frames": 4, "desc": "zen meditation pose, sitting, serene"}, + "confused": {"frames": 3, "desc": "confused, scratching head"}, + "chill": {"frames": 3, "desc": "ultra relaxed, peace sign"}, + + "death": {"frames": 5, "desc": "death animation, collapsing heavily"}, + + # PHASE 4: Advanced (6 PNG) + "block": {"frames": 3, "desc": "blocking with raised arms"}, + "taunt": {"frames": 4, "desc": "taunting enemies, beckoning"}, +} + +# ==================== GENERATION FUNCTIONS ==================== + +def generate_animation_frame(character_name, character_base, animation_name, frame_num, animation_desc, style=STYLE_BASE): + """Generate a single animation frame""" + + prompt = f""" +{style} + +{character_base} + +ANIMATION: {animation_name} - Frame {frame_num} +Description: {animation_desc} + +Frame {frame_num} timing notes: +- Frame 1: Start pose +- Frame 2: Mid-motion +- Frame 3: Peak/impact +- Frame 4: Follow-through/return + +Generate this specific frame showing clear progression in the animation cycle. +Maintain character consistency (check reference in konsistentno/ folder). +""" + + try: + print(f" ๐ŸŽจ Generating {character_name} - {animation_name} - Frame {frame_num}...") + + model = genai.GenerativeModel('gemini-2.0-flash-exp') + response = model.generate_content([prompt]) + + if response.parts and len(response.parts) > 0: + image_data = response.parts[0].inline_data.data + image = Image.open(io.BytesIO(image_data)) + return image + else: + print(f" โŒ No image generated for {animation_name} frame {frame_num}") + return None + + except Exception as e: + print(f" โŒ Error generating {animation_name} frame {frame_num}: {e}") + return None + + +def generate_character_animations(character_name, character_base, animations_dict): + """Generate all animations for a character""" + + char_dir = OUTPUT_DIR / character_name.lower() + char_dir.mkdir(parents=True, exist_ok=True) + + total_frames = sum(anim["frames"] for anim in animations_dict.values()) + current_frame = 0 + + print(f"\n{'='*60}") + print(f"๐ŸŽฌ GENERATING {character_name.upper()} ANIMATIONS") + print(f"{'='*60}") + print(f"Total animations: {len(animations_dict)}") + print(f"Total frames: {total_frames}") + print(f"Output directory: {char_dir}") + print() + + for anim_name, anim_data in animations_dict.items(): + frames_count = anim_data["frames"] + desc = anim_data["desc"] + + print(f"\n๐Ÿ“น Animation: {anim_name} ({frames_count} frames)") + + for frame_num in range(1, frames_count + 1): + current_frame += 1 + + # Generate frame + image = generate_animation_frame( + character_name, + character_base, + anim_name, + frame_num, + desc + ) + + if image: + # Save original + filename = f"{character_name.lower()}_{anim_name}_frame{frame_num}_1024x1024.png" + filepath = char_dir / filename + image.save(filepath, "PNG") + print(f" โœ… Saved: {filename}") + + # Create preview (256x256) + preview = image.resize((256, 256), Image.Resampling.LANCZOS) + preview_filename = f"{character_name.lower()}_{anim_name}_frame{frame_num}_preview_256x256.png" + preview_filepath = char_dir / preview_filename + preview.save(preview_filepath, "PNG") + print(f" โœ… Saved preview: {preview_filename}") + + # Progress + progress = (current_frame / total_frames) * 100 + print(f" ๐Ÿ“Š Progress: {current_frame}/{total_frames} ({progress:.1f}%)") + + # Rate limiting + print(f" โณ Waiting {DELAY_BETWEEN_CALLS}s...") + time.sleep(DELAY_BETWEEN_CALLS) + + print(f"\nโœ… {character_name.upper()} COMPLETE! Generated {total_frames} frames ({total_frames * 2} files with previews)") + return total_frames + + +# ==================== MAIN EXECUTION ==================== + +def main(): + """Generate all character animations""" + + print("=" * 80) + print("๐ŸŽฎ DOLINASMRTI - COMPLETE CHARACTER ANIMATION GENERATOR") + print("=" * 80) + print(f"Date: 2026-01-01") + print(f"Target: 435 PNG (all 3 characters, all animations)") + print(f"API Delay: {DELAY_BETWEEN_CALLS}s between calls") + print() + + start_time = time.time() + total_generated = 0 + + # Generate Kai + kai_frames = generate_character_animations("Kai", KAI_BASE, KAI_ANIMATIONS) + total_generated += kai_frames + + # Generate Ana + ana_frames = generate_character_animations("Ana", ANA_BASE, ANA_ANIMATIONS) + total_generated += ana_frames + + # Generate Gronk + gronk_frames = generate_character_animations("Gronk", GRONK_BASE, GRONK_ANIMATIONS) + total_generated += gronk_frames + + # Summary + elapsed = time.time() - start_time + hours = int(elapsed // 3600) + minutes = int((elapsed % 3600) // 60) + + print("\n" + "=" * 80) + print("๐ŸŽ† GENERATION COMPLETE!") + print("=" * 80) + print(f"Total frames generated: {total_generated}") + print(f"Total files created: {total_generated * 2} (with previews)") + print(f"Time elapsed: {hours}h {minutes}min") + print(f"\nCharacter breakdown:") + print(f" - Kai: {kai_frames} frames") + print(f" - Ana: {ana_frames} frames") + print(f" - Gronk: {gronk_frames} frames") + print("\nโœ… All character animations ready for game integration!") + + +if __name__ == "__main__": + main() diff --git a/scripts/generate_characters_working.py b/scripts/generate_characters_working.py new file mode 100644 index 000000000..42841436b --- /dev/null +++ b/scripts/generate_characters_working.py @@ -0,0 +1,259 @@ +#!/usr/bin/env python3 +""" +CHARACTER ANIMATION GENERATOR - WORKING VERSION +Uses direct REST API instead of deprecated SDK +Generates animations for Kai, Ana, Gronk +Date: 1.1.2026 +""" + +import os +import time +import json +import base64 +from pathlib import Path +import requests +from PIL import Image +import io + +# ==================== CONFIGURATION ==================== +API_KEY = os.getenv('GEMINI_API_KEY') or os.getenv('GOOGLE_API_KEY') +if not API_KEY: + print("โŒ ERROR: API key not found!") + print("Please set: export GEMINI_API_KEY='your-key-here'") + exit(1) + +print(f"โœ… API Key found: {API_KEY[:10]}...") + +OUTPUT_DIR = Path("assets/slike") +DELAY_BETWEEN_CALLS = 15 # seconds +API_URL = "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-exp:generateContent" + +# ==================== STYLE CONSTANTS ==================== +STYLE_BASE = """Dark Hand-Drawn 2D Stylized Indie Game Art. +CRITICAL: Thick bold black outlines (3-4px), exaggerated proportions, warped perspective. +High-contrast noir elements. Centered subject with 10px transparent margin. +32-bit PNG with alpha channel. Clean background (pure transparency).""" + +KAI_BASE = """Character: KAI MARKOVIฤ† (Age 17, Male Protagonist) +- Green & Pink dreadlocks (distinctive!) +- Tactical survivor outfit (torn, weathered) +- Lean athletic build, determined expression""" + +ANA_BASE = """Character: ANA MARKOVIฤ† (Age 17, Female Twin) +- Pink dreadlocks (all pink, matches Kai's style) +- Explorer vest, cargo pants +- Slender athletic build, intelligent caring expression""" + +GRONK_BASE = """Character: GRONK (Zen Troll Companion) +- Large green troll, 7ft tall +- Pink mohawk hair, multiple piercings +- Vape pen accessory (signature!) +- Baggy pants, no shirt, chill relaxed expression""" + +# ==================== SIMPLIFIED ANIMATION SET ==================== +# Start with essentials only to test the system + +KAI_ANIMATIONS = { + "walk_south": {"frames": 4, "desc": "walking toward camera, front view"}, + "walk_east": {"frames": 4, "desc": "walking right, side view"}, + "idle_front": {"frames": 4, "desc": "idle standing, front view, breathing"}, + "attack_south": {"frames": 4, "desc": "sword swing downward"}, +} + +ANA_ANIMATIONS = { + "walk_south": {"frames": 4, "desc": "walking toward camera, front view"}, + "walk_east": {"frames": 4, "desc": "walking right, side view"}, + "idle_front": {"frames": 4, "desc": "idle standing, front view"}, + "research_front": {"frames": 4, "desc": "writing in notebook"}, +} + +GRONK_ANIMATIONS = { + "walk_south": {"frames": 4, "desc": "heavy lumbering walk, front view"}, + "walk_east": {"frames": 4, "desc": "heavy walk right, side view"}, + "idle_front": {"frames": 4, "desc": "idle, chill stance, front view"}, + "vape_front": {"frames": 6, "desc": "vaping, exhaling smoke cloud"}, +} + +# ==================== GENERATION FUNCTIONS ==================== + +def generate_image_rest_api(prompt): + """Generate image using REST API""" + + payload = { + "contents": [{ + "parts": [{ + "text": prompt + }] + }], + "generationConfig": { + "temperature": 0.4, + "topK": 32, + "topP": 1, + "maxOutputTokens": 4096, + } + } + + headers = { + "Content-Type": "application/json" + } + + url = f"{API_URL}?key={API_KEY}" + + try: + response = requests.post(url, headers=headers, json=payload, timeout=60) + response.raise_for_status() + + data = response.json() + + # Extract image from response + if 'candidates' in data and len(data['candidates']) > 0: + candidate = data['candidates'][0] + if 'content' in candidate and 'parts' in candidate['content']: + for part in candidate['content']['parts']: + if 'inlineData' in part: + image_b64 = part['inlineData']['data'] + image_bytes = base64.b64decode(image_b64) + image = Image.open(io.BytesIO(image_bytes)) + return image + + print(f" โŒ No image in response") + return None + + except requests.exceptions.RequestException as e: + print(f" โŒ API Error: {e}") + return None + except Exception as e: + print(f" โŒ Error: {e}") + return None + + +def generate_animation_frame(character_name, character_base, animation_name, frame_num, animation_desc): + """Generate a single animation frame""" + + prompt = f"""{STYLE_BASE} + +{character_base} + +ANIMATION: {animation_name} - Frame {frame_num}/4 +Description: {animation_desc} + +Frame timing: +- Frame 1: Start pose +- Frame 2: Mid-motion +- Frame 3: Peak/impact +- Frame 4: Follow-through + +Generate this specific frame showing clear progression. +Maintain character consistency.""" + + print(f" ๐ŸŽจ {character_name} - {animation_name} - Frame {frame_num}...") + + image = generate_image_rest_api(prompt) + return image + + +def generate_character_animations(character_name, character_base, animations_dict): + """Generate all animations for a character""" + + char_dir = OUTPUT_DIR / character_name.lower() + char_dir.mkdir(parents=True, exist_ok=True) + + total_frames = sum(anim["frames"] for anim in animations_dict.values()) + current_frame = 0 + + print(f"\n{'='*60}") + print(f"๐ŸŽฌ GENERATING {character_name.upper()}") + print(f"{'='*60}") + print(f"Animations: {len(animations_dict)}") + print(f"Total frames: {total_frames}") + print(f"Output: {char_dir}\n") + + for anim_name, anim_data in animations_dict.items(): + frames_count = anim_data["frames"] + desc = anim_data["desc"] + + print(f"\n๐Ÿ“น {anim_name} ({frames_count} frames)") + + for frame_num in range(1, frames_count + 1): + current_frame += 1 + + image = generate_animation_frame( + character_name, + character_base, + anim_name, + frame_num, + desc + ) + + if image: + # Save original + filename = f"{character_name.lower()}_{anim_name}_frame{frame_num}_1024x1024.png" + filepath = char_dir / filename + image.save(filepath, "PNG") + print(f" โœ… Saved: {filename}") + + # Create preview + preview = image.resize((256, 256), Image.Resampling.LANCZOS) + preview_filename = f"{character_name.lower()}_{anim_name}_frame{frame_num}_preview_256x256.png" + preview_filepath = char_dir / preview_filename + preview.save(preview_filepath, "PNG") + print(f" โœ… Preview: {preview_filename}") + + # Progress + progress = (current_frame / total_frames) * 100 + print(f" ๐Ÿ“Š Progress: {current_frame}/{total_frames} ({progress:.1f}%)") + + # Rate limiting + if current_frame < total_frames: + print(f" โณ Waiting {DELAY_BETWEEN_CALLS}s...") + time.sleep(DELAY_BETWEEN_CALLS) + + print(f"\nโœ… {character_name.upper()} COMPLETE!") + print(f"Generated: {total_frames} frames ({total_frames * 2} files)\n") + return total_frames + + +# ==================== MAIN ==================== + +def main(): + print("=" * 80) + print("๐ŸŽฎ DOLINASMRTI - CHARACTER ANIMATION GENERATOR") + print("=" * 80) + print("Date: 2026-01- 01") + print("Mode: ESSENTIAL ANIMATIONS TEST") + print(f"API Delay: {DELAY_BETWEEN_CALLS}s\n") + + start_time = time.time() + total_generated = 0 + + # Generate essentials for each character + kai_frames = generate_character_animations("Kai", KAI_BASE, KAI_ANIMATIONS) + total_generated += kai_frames + + ana_frames = generate_character_animations("Ana", ANA_BASE, ANA_ANIMATIONS) + total_generated += ana_frames + + gronk_frames = generate_character_animations("Gronk", GRONK_BASE, GRONK_ANIMATIONS) + total_generated += gronk_frames + + # Summary + elapsed = time.time() - start_time + hours = int(elapsed // 3600) + minutes = int((elapsed % 3600) // 60) + + print("\n" + "=" * 80) + print("๐ŸŽ† GENERATION COMPLETE!") + print("=" * 80) + print(f"Total frames: {total_generated}") + print(f"Total files: {total_generated * 2}") + print(f"Time: {hours}h {minutes}min") + print(f"\nBreakdown:") + print(f" - Kai: {kai_frames} frames") + print(f" - Ana: {ana_frames} frames") + print(f" - Gronk: {gronk_frames} frames") + print("\nโœ… Ready for game integration!") + print("\n๐Ÿ’ก View in Chrome: open preview_animations.html") + + +if __name__ == "__main__": + main() diff --git a/scripts/test_imagen.py b/scripts/test_imagen.py new file mode 100644 index 000000000..b8eadcb99 --- /dev/null +++ b/scripts/test_imagen.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 +""" +TEST - Imagen 3 API (Image Generation) +""" +import os +import requests +import base64 +from PIL import Image +import io + +API_KEY = os.getenv('GEMINI_API_KEY') +print(f"โœ… API Key: {API_KEY[:15]}...") + +# Use Imagen 3 endpoint +API_URL = "https://generativelanguage.googleapis.com/v1beta/models/imagen-3.0-generate-001:predict" + +prompt = "Dark hand-drawn 2D stylized indie game art. Character KAI - male, age 17, green and pink dreadlocks, tactical survivor outfit. Walking toward camera, front view. Bold black outlines, centered, transparent background." + +print(f"\n๐ŸŽจ Generating with Imagen 3...") +print(f"Prompt: {prompt[:80]}...\n") + +payload = { + "instances": [{ + "prompt": prompt + }], + "parameters": { + "sampleCount": 1, + "aspectRatio": "1:1", + "mode": "generateImages" + } +} + +headers = {"Content-Type": "application/json"} +url = f"{API_URL}?key={API_KEY}" + +print(f"๐Ÿ“ก Calling Imagen API...") +try: + response = requests.post(url, headers=headers, json=payload, timeout=60) + print(f"Status: {response.status_code}") + + if response.status_code == 200: + data = response.json() + print(f"โœ… Response received!") + print(f"Response keys: {list(data.keys())}") + + if 'predictions' in data and len(data['predictions']) > 0: + pred = data['predictions'][0] + print(f"Prediction keys: {list(pred.keys())}") + + if 'bytesBase64Encoded' in pred: + print(f"โœ… Found image data!") + image_b64 = pred['bytesBase64Encoded'] + image_bytes = base64.b64decode(image_b64) + image = Image.open(io.BytesIO(image_bytes)) + + output_path = "assets/slike/TEST_kai_imagen.png" + image.save(output_path, "PNG") + print(f"โœ…โœ… SAVED: {output_path}") + print(f"Image size: {image.size}") + else: + print(f"Response data: {data}") + else: + print(f"โŒ Error {response.status_code}: {response.text}") + +except Exception as e: + print(f"โŒ Exception: {e}") + +print("\nโœ… Test complete!") diff --git a/scripts/test_minimal.py b/scripts/test_minimal.py new file mode 100644 index 000000000..dbc8a47b0 --- /dev/null +++ b/scripts/test_minimal.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 +""" +MINIMAL TEST - Generate ONE image +""" +import os +import requests +import json +import base64 +from PIL import Image +import io + +API_KEY = os.getenv('GEMINI_API_KEY') +print(f"โœ… API Key: {API_KEY[:15]}...") + +API_URL = "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-exp:generateContent" + +prompt = """Dark Hand-Drawn 2D Stylized Indie Game Art. +Character: KAI - Green & Pink dreadlocks, tactical outfit, age 17. +Animation: Walking toward camera, frame 1 of 4, front view. +Bold black outlines, centered, transparent background.""" + +print(f"\n๐ŸŽจ Generating test image...") +print(f"Prompt: {prompt[:80]}...\n") + +payload = { + "contents": [{ + "parts": [{ + "text": prompt + }] + }] +} + +headers = {"Content-Type": "application/json"} +url = f"{API_URL}?key={API_KEY}" + +print(f"๐Ÿ“ก Calling API...") +response = requests.post(url, headers=headers, json=payload, timeout=60) + +print(f"Status: {response.status_code}") + +if response.status_code == 200: + data = response.json() + print(f"โœ… Response received!") + print(f"Keys: {list(data.keys())}") + + if 'candidates' in data: + print(f"Candidates: {len(data['candidates'])}") + + for i, cand in enumerate(data['candidates']): + print(f"\nCandidate {i}:") + if 'content' in cand: + print(f" Content keys: {list(cand['content'].keys())}") + if 'parts' in cand['content']: + print(f" Parts: {len(cand['content']['parts'])}") + for j, part in enumerate(cand['content']['parts']): + print(f" Part {j} keys: {list(part.keys())}") + if 'inlineData' in part: + print(f" โœ… Found image data!") + image_b64 = part['inlineData']['data'] + image_bytes = base64.b64decode(image_b64) + image = Image.open(io.BytesIO(image_bytes)) + + output_path = "assets/slike/TEST_kai_walk_frame1.png" + image.save(output_path, "PNG") + print(f" โœ…โœ… Saved to: {output_path}") +else: + print(f"โŒ Error: {response.text}") +print("\nโœ… Test complete!")