commit 4f67bab67c20a01c89e95ea3a8ddecdf6a7f933f Author: Adam Reňak Date: Thu Apr 23 15:41:11 2026 +0200 first commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..efc9cea --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# Diplomova praca - Speech Therapy Game + diff --git a/config/levels.js b/config/levels.js new file mode 100644 index 0000000..951126f --- /dev/null +++ b/config/levels.js @@ -0,0 +1,11135 @@ +/** + * Konfigurácia levelov pre logopedickú hru + * Každý level má svoje špecifické nastavenia, slová na precvičovanie a obtiažnosť + * + * Štruktúra levelu: + * - id: jedinečný identifikátor levelu + * - worldId: ID sveta, do ktorého level patří + * - levelNumber: poradové číslo levelu v rámci sveta (1-20) + * - name: názov levelu + * - gameType: typ hry ('banik', 'pexeso', 'mario') + * - difficulty: obtiažnosť levelu (1-5) + * - words: pole slov na precvičovanie v tomto leveli + * - gameConfig: špecifické nastavenia pre daný typ hry + * - unlockRequirement: podmienka na odomknutie levelu + * - timeLimit: časový limit v sekundách (null = bez limitu) + * - minStarsToPass: minimálny počet hviezd potrebný na prejdenie levelu + * - pozicia na y min 6 maxx 15. x min 0 max 15 + */ + +const LEVELS_CONFIG = { + // =============================== + // SVET R - Písmeno R + // =============================== + world_r: [ + { + id: 'r_001', + worldId: 'world_r', + levelNumber: 1, + name: 'Prvé R-ka', + gameType: 'banik', + difficulty: 1, + words: ['rak', 'ryba', 'ruka'], + gameConfig: { + diamonds: 1, + golds: 3, + crystals: 1, + speechExercises: 1, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 12, y: 7 } + ], + golds: [ + { x: 2, y: 9 }, + { x: 5, y: 10 }, + { x: 10, y: 13 }, + ], + crystals: [ + { x: 11, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: null, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: true + }, + { + id: 'r_002', + worldId: 'world_r', + levelNumber: 2, + name: 'Prvé R-ka', + gameType: 'banik', + difficulty: 1, + words: ['rak', 'ryba', 'ruka', 'rád', 'drak'], + gameConfig: { + diamonds: 1, + golds: 3, + crystals: 2, + speechExercises: 1, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 6, y: 10 }, + ], + golds: [ + { x: 2, y: 9 }, + { x: 7, y: 8 }, + { x: 10, y: 8 } + ], + crystals: [ + { x: 9, y: 7 }, + { x: 10, y: 12 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'r_001', + minStars: 1 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'r_003', + worldId: 'world_r', + levelNumber: 3, + name: 'Prvé R-ka', + gameType: 'banik', + difficulty: 1, + words: ['rak', 'ryba', 'ruka', 'rosa', 'rád', 'drak'], + gameConfig: { + diamonds: 3, + golds: 5, + crystals: 1, + speechExercises: 1, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 8 }, + { x: 12, y: 7 }, + { x: 10, y: 12 } + ], + golds: [ + { x: 2, y: 9 }, + { x: 7, y: 8 }, + { x: 14, y: 9 }, + { x: 9, y: 10 }, + { x: 10, y: 12 } + ], + crystals: [ + { x: 1, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'r_002', + minStars: 2 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'r_004', + worldId: 'world_r', + levelNumber: 4, + name: 'Prvé R-ka', + gameType: 'banik', + difficulty: 1, + words: ['rak', 'ryba', 'ruka', 'rosa', 'rád', 'drak', 'traktor'], + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 2, + speechExercises: 2, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 8 }, + { x: 10, y: 7 }, + { x: 9, y: 14 } + ], + golds: [ + { x: 3, y: 9 }, + { x: 7, y: 8 }, + { x: 14, y: 6 } + ], + crystals: [ + { x: 4, y: 12 }, + { x: 7, y: 11 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'r_003', + minStars: 3 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'r_005', + worldId: 'world_r', + levelNumber: 5, + name: 'Prvé R-čka', + gameType: 'banik', + difficulty: 2, + words: ['ruka', 'rosa', 'rád', 'rok', 'drak', 'ráno'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 4, + speechExercises: 2, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 13, y: 8 }, + { x: 9, y: 10 }, + { x: 1, y: 14 } + ], + golds: [ + { x: 0, y: 9 }, + { x: 3, y: 10 }, + { x: 7, y: 8 } + ], + crystals: [ + { x: 2, y: 10 }, + { x: 6, y: 12 }, + { x: 14, y: 14 }, + { x: 8, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'r_004', + minStars: 4 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'r_006', + worldId: 'world_r', + levelNumber: 6, + name: 'Prvé R-čka', + gameType: 'banik', + difficulty: 2, + words: ['rok', 'rak', 'ruka', 'traktor', 'ryba', 'rádio', 'ráno'], + gameConfig: { + diamonds: 3, + golds: 5, + crystals: 2, + speechExercises: 3, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 7 }, + { x: 10, y: 7 }, + { x: 2, y: 14 } + ], + golds: [ + { x: 1, y: 9 }, + { x: 10, y: 10 }, + { x: 6, y: 7 }, + { x: 3, y: 15 }, + { x: 15, y: 12 } + ], + crystals: [ + { x: 7, y: 11 }, + { x: 10, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'r_005', + minStars: 5 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'r_007', + worldId: 'world_r', + levelNumber: 7, + name: 'Prvé R-čka', + gameType: 'banik', + difficulty: 2, + words: ['rok', 'rak', 'ruka', 'roh', 'ryba', 'rádio', 'ráno'], + gameConfig: { + diamonds: 2, + golds: 2, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 0, y: 10 }, + { x: 14, y: 14 } + ], + golds: [ + { x: 5, y: 8 }, + { x: 7, y: 12 } + ], + crystals: [ + { x: 10, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'r_006', + minStars: 6 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'r_008', + worldId: 'world_r', + levelNumber: 8, + name: 'Prvé R-čka', + gameType: 'banik', + difficulty: 2, + words: ['ryba', 'rádio', 'ráno', 'rakva', 'rámus'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 10, y: 6 }, + { x: 6, y: 14 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 8, y: 12 }, + { x: 1, y: 7 } + ], + crystals: [ + { x: 9, y: 15 }, + { x: 14, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'r_007', + minStars: 7 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'r_009', + worldId: 'world_r', + levelNumber: 9, + name: 'Prvé R-čka', + gameType: 'banik', + difficulty: 3, + words: ['rádio', 'ráno', 'rakva', 'rámus', 'párik'], + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 1, + speechExercises: 3, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 10 }, + { x: 10, y: 14 }, + { x: 2, y: 9 } + ], + golds: [ + { x: 7, y: 11 }, + { x: 12, y: 12 }, + { x: 0, y: 7 } + ], + crystals: [ + { x: 9, y: 11 }, + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'r_008', + minStars: 10 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'r_010', + worldId: 'world_r', + levelNumber: 10, + name: 'Prvé R-čka', + gameType: 'banik', + difficulty: 3, + words: ['ryba', 'rádio', 'ráno', 'rakva', 'rámus', 'rýchly'], + gameConfig: { + diamonds: 4, + golds: 6, + crystals: 1, + speechExercises: 3, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 6 }, + { x: 10, y: 14 }, + { x: 6, y: 8 }, + { x: 0, y: 10 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 12, y: 12 }, + { x: 1, y: 9 }, + { x: 3, y: 8 }, + { x: 5, y: 11 } + ], + crystals: [ + { x: 14, y: 10 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'r_009', + minStars: 11 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'r_011', + worldId: 'world_r', + levelNumber: 11, + name: 'Prvé Rka', + gameType: 'banik', + difficulty: 3, + words: ['rámus', 'rýchly', 'rakva', 'raketa'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 2, + speechExercises: 3, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 15, y: 14 }, + { x: 12, y: 15 }, + { x: 3, y: 12 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 4, y: 15 }, + { x: 5, y: 10 } + ], + crystals: [ + { x: 9, y: 13 }, + { x: 6, y: 7 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'r_010', + minStars: 12 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'r_012', + worldId: 'world_r', + levelNumber: 12, + name: 'Prvé R-čka', + gameType: 'banik', + difficulty: 3, + words: ['ryba', 'rádio', 'ráno', 'rakva', 'rámus', 'rýchly', 'raketa'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 7 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 6, y: 9 }, + { x: 7, y: 11 }, + { x: 14, y: 12 }, + { x: 4, y: 10 } + ], + crystals: [ + { x: 9, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'r_011', + minStars: 13 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'r_013', + worldId: 'world_r', + levelNumber: 13, + name: 'Prvé R-čka', + gameType: 'banik', + difficulty: 4, + words: ['ryba', 'rádio', 'ráno', 'rakva', 'rámus', 'rýchly', 'raketa', 'rybár', 'králik'], + gameConfig: { + diamonds: 5, + golds: 3, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 9, y: 11 }, + { x: 10, y: 14 }, + { x: 5, y: 9 }, + { x: 0, y: 10 } + ], + golds: [ + { x: 14, y: 9 }, // gold na pozícii 2,9 + { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 2, y: 6 } + ], + crystals: [ + { x: 3, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'r_012', + minStars: 14 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'r_014', + worldId: 'world_r', + levelNumber: 14, + name: 'Prvé R-čka', + gameType: 'banik', + difficulty: 4, + words: ['rámus', 'rýchly', 'raketa', 'rybár', 'králik'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 10 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 10, y: 10 }, + { x: 0, y: 12 }, + { x: 6, y: 13 }, + { x: 14, y: 15 } + ], + crystals: [ + { x: 9, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'r_013', + minStars: 15 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'r_015', + worldId: 'world_r', + levelNumber: 15, + name: 'Prvé R-čka', + gameType: 'banik', + difficulty: 4, + words: ['brána', 'pravda', 'mravec', 'raketa', 'drak'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 8 }, + { x: 10, y: 10 } + ], + golds: [ + { x: 0, y: 11 }, + { x: 4, y: 9 }, + { x: 7, y: 15 }, + { x: 15, y: 13 } + ], + crystals: [ + { x: 13, y: 12 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'r_014', + minStars: 16 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'r_016', + worldId: 'world_r', + levelNumber: 16, + name: 'Prvé R-čka', + gameType: 'banik', + difficulty: 5, + words: ['brána', 'pravda', 'mravec', 'rybár', 'tráva', 'králik', 'ryba', 'rádio', 'ráno', 'rakva', 'rak', 'ruka', 'rosa', 'rád', 'drak'], + gameConfig: { + diamonds: 5, + golds: 6, + crystals: 2, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 0, y: 8 }, + { x: 12, y: 10 }, + { x: 9, y: 12 }, + { x: 4, y: 13 }, + { x: 15, y: 15 } + ], + golds: [ + { x: 1, y: 8 }, + { x: 2, y: 15 }, + { x: 5, y: 13 }, + { x: 7, y: 9 }, + { x: 6, y: 15 }, + { x: 13, y: 7 } + ], + crystals: [ + { x: 10, y: 11 }, + { x: 2, y: 10 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'r_015', + minStars: 20 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + ], + world_l: [ + { + id: 'l_001', + worldId: 'world_l', + levelNumber: 1, + name: 'Prvé L-čka', + gameType: 'banik', + difficulty: 1, + words: ['lano', 'lopta', 'list', 'les'], // 4 slová pre začiatok + gameConfig: { + diamonds: 1, // málo diamantov pre začiatok + golds: 2, // trochu viac goldov + crystals: 1, // jeden kryštál + speechExercises: 1, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 8, y: 5 } // diamant v strede mapy + ], + golds: [ + { x: 3, y: 2 }, // gold vľavo hore + { x: 13, y: 8 } // gold vpravo dole + ], + crystals: [ + { x: 10, y: 4 } // kryštál vpravo + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: null, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: true + }, + { + id: 'l_002', + worldId: 'world_l', + levelNumber: 2, + name: 'Ľahké L-čka', + gameType: 'banik', + difficulty: 1, + words: ['lano', 'lopta', 'list', 'les', 'líška', 'lyžica'], // 6 slov + gameConfig: { + diamonds: 2, + golds: 3, + crystals: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 5, y: 3 }, + { x: 11, y: 7 } + ], + golds: [ + { x: 2, y: 5 }, + { x: 8, y: 2 }, + { x: 14, y: 9 } + ], + crystals: [ + { x: 7, y: 6 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'l_001', + minStars: 1 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'l_003', + worldId: 'world_l', + levelNumber: 3, + name: 'Lavička a lúka', + gameType: 'banik', + difficulty: 1, + words: ['lopta', 'list', 'líška', 'lyžica', 'lavička', 'lúka', 'ľalia'], // 7 slov + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 4, y: 4 }, + { x: 9, y: 8 }, + { x: 13, y: 2 } + ], + golds: [ + { x: 1, y: 7 }, + { x: 6, y: 5 }, + { x: 11, y: 3 } + ], + crystals: [ + { x: 3, y: 9 }, + { x: 14, y: 6 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'l_002', + minStars: 2 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'l_004', + worldId: 'world_l', + levelNumber: 4, + name: 'Lampa a lekár', + gameType: 'banik', + difficulty: 1, + words: ['lopta', 'lúka', 'lavička', 'lyžica', 'ľalia', 'lampa', 'lekár'], // 8 slov + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 2, y: 3 }, + { x: 8, y: 7 }, + { x: 12, y: 5 } + ], + golds: [ + { x: 5, y: 2 }, + { x: 7, y: 9 }, + { x: 10, y: 6 }, + { x: 14, y: 4 } + ], + crystals: [ + { x: 4, y: 8 }, + { x: 11, y: 1 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'l_003', + minStars: 3 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'l_005', + worldId: 'world_l', + levelNumber: 5, + name: 'Prvé opakovanie', // opakovací level + gameType: 'banik', + difficulty: 2, + words: ['lano', 'lopta', 'list', 'les', 'líška', 'lyžica', 'lavička', 'lúka', 'ľalia', 'lampa', 'lekár'], // 12 slov - opakovanie + gameConfig: { + diamonds: 4, + golds: 5, + crystals: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 8 }, + { x: 6, y: 6 }, + { x: 10, y: 4 }, + { x: 13, y: 8 } + ], + golds: [ + { x: 1, y: 5 }, + { x: 5, y: 9 }, + { x: 8, y: 3 }, + { x: 11, y: 7 }, + { x: 14, y: 2 } + ], + crystals: [ + { x: 7, y: 8 }, + { x: 12, y: 1 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'l_004', + minStars: 4 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'l_006', + worldId: 'world_l', + levelNumber: 6, + name: 'Lavína a lietadlo', + gameType: 'banik', + difficulty: 2, + words: ['lopta', 'lúka', 'lampa', 'lekár', 'líška', 'lavína', 'lietadlo', 'list', 'lev', 'lavička'], // 10 slov + gameConfig: { + diamonds: 4, + golds: 4, + crystals: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 2, y: 6 }, + { x: 7, y: 2 }, + { x: 9, y: 9 }, + { x: 14, y: 5 } + ], + golds: [ + { x: 4, y: 3 }, + { x: 6, y: 7 }, + { x: 11, y: 4 }, + { x: 13, y: 9 } + ], + crystals: [ + { x: 1, y: 8 }, + { x: 8, y: 5 }, + { x: 12, y: 2 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'l_005', + minStars: 5 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'l_007', + worldId: 'world_l', + levelNumber: 7, + name: 'Leňochod a lízatko', + gameType: 'banik', + difficulty: 2, + words: ['lopta', 'lúka', 'lavína', 'lietadlo', 'lev', 'lavička', 'leňochod', 'lupa', 'lúč', 'lízatko'], // 10 slov + gameConfig: { + diamonds: 4, + golds: 5, + crystals: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 4 }, + { x: 8, y: 8 }, + { x: 10, y: 2 }, + { x: 14, y: 7 } + ], + golds: [ + { x: 1, y: 3 }, + { x: 5, y: 6 }, + { x: 7, y: 1 }, + { x: 11, y: 9 }, + { x: 13, y: 4 } + ], + crystals: [ + { x: 6, y: 9 }, + { x: 12, y: 6 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'l_006', + minStars: 6 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'l_008', + worldId: 'world_l', + levelNumber: 8, + name: 'Lyže a letisko', + gameType: 'banik', + difficulty: 2, + words: ['lopta', 'lietadlo', 'lupa', 'lúč', 'lízatko', 'lavína', 'lyže', 'pílka', 'letisko', 'pílka'], // 10 slov + gameConfig: { + diamonds: 5, + golds: 4, + crystals: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 2, y: 2 }, + { x: 5, y: 7 }, + { x: 9, y: 4 }, + { x: 12, y: 8 }, + { x: 14, y: 1 } + ], + golds: [ + { x: 3, y: 5 }, + { x: 7, y: 3 }, + { x: 10, y: 9 }, + { x: 13, y: 6 } + ], + crystals: [ + { x: 4, y: 9 }, + { x: 8, y: 6 }, + { x: 11, y: 2 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'l_007', + minStars: 7 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'l_009', + worldId: 'world_l', + levelNumber: 9, + name: 'Levanduľa a ľudina', + gameType: 'banik', + difficulty: 2, + words: ['lopta', 'lúka', 'lietadlo', 'pílka', 'levanduľa', 'list', 'lavína', 'lízatko'], // 10 slov + gameConfig: { + diamonds: 5, + golds: 5, + crystals: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 4 }, + { x: 6, y: 2 }, + { x: 8, y: 9 }, + { x: 11, y: 5 }, + { x: 14, y: 8 } + ], + golds: [ + { x: 3, y: 7 }, + { x: 5, y: 3 }, + { x: 9, y: 6 }, + { x: 12, y: 1 }, + { x: 13, y: 9 } + ], + crystals: [ + { x: 7, y: 7 }, + { x: 10, y: 3 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'l_008', + minStars: 8 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'l_010', + worldId: 'world_l', + levelNumber: 10, + name: 'Veľké opakovanie', // opakovací level - všetky slová z 1-9 + gameType: 'banik', + difficulty: 3, + words: ['lano', 'lopta', 'list', 'les', 'líška', 'lyžica', 'lavička', 'lúka', 'ľalia', 'lampa', + 'lúč', 'lekár', 'lavína', 'lietadlo', 'lev', 'leňochod', 'lupa', 'lízatko', 'lyže', + 'letisko', 'pílka', 'levanduľa'], // 24 slov + gameConfig: { + diamonds: 6, + golds: 6, + crystals: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 2, y: 3 }, + { x: 4, y: 8 }, + { x: 7, y: 5 }, + { x: 10, y: 2 }, + { x: 12, y: 7 }, + { x: 14, y: 4 } + ], + golds: [ + { x: 1, y: 6 }, + { x: 5, y: 1 }, + { x: 6, y: 9 }, + { x: 9, y: 4 }, + { x: 11, y: 8 }, + { x: 13, y: 3 } + ], + crystals: [ + { x: 3, y: 5 }, + { x: 8, y: 7 }, + { x: 15, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'l_009', + minStars: 9 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'l_011', + worldId: 'world_l', + levelNumber: 11, + name: 'Lyžiar a lektvar', + gameType: 'banik', + difficulty: 3, + words: ['lopta', 'lúka', 'lietadlo', 'lavička', 'lupa', 'pílka', 'levanduľa', 'lyžiar', 'lektvar'], // 10 slov + gameConfig: { + diamonds: 5, + golds: 5, + crystals: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 1 }, + { x: 6, y: 4 }, + { x: 9, y: 8 }, + { x: 11, y: 3 }, + { x: 14, y: 6 } + ], + golds: [ + { x: 2, y: 7 }, + { x: 5, y: 5 }, + { x: 8, y: 2 }, + { x: 10, y: 9 }, + { x: 13, y: 2 } + ], + crystals: [ + { x: 4, y: 3 }, + { x: 7, y: 6 }, + { x: 12, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'l_010', + minStars: 10 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'l_012', + worldId: 'world_l', + levelNumber: 12, + name: 'Laboratórium', + gameType: 'banik', + difficulty: 3, + words: ['lopta', 'lúka', 'levanduľa', 'lektvar', 'lyžiar', 'laboratórium', 'lektor', 'lavína', 'lúčny', 'líška'], // 10 slov + gameConfig: { + diamonds: 5, + golds: 6, + crystals: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 2 }, + { x: 5, y: 8 }, + { x: 8, y: 4 }, + { x: 11, y: 7 }, + { x: 13, y: 1 } + ], + golds: [ + { x: 3, y: 6 }, + { x: 4, y: 2 }, + { x: 7, y: 9 }, + { x: 9, y: 3 }, + { x: 12, y: 5 }, + { x: 14, y: 8 } + ], + crystals: [ + { x: 6, y: 6 }, + { x: 10, y: 1 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'l_011', + minStars: 11 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'l_013', + worldId: 'world_l', + levelNumber: 13, + name: 'Leporelo a lodička', + gameType: 'banik', + difficulty: 3, + words: ['lopta', 'lúka', 'lektor', 'laboratórium', 'lúčny', 'levanduľa', 'leporelo', 'lodička', 'lízatko', 'lekáreň'], // 10 slov + gameConfig: { + diamonds: 6, + golds: 5, + crystals: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 2, y: 5 }, + { x: 5, y: 2 }, + { x: 7, y: 8 }, + { x: 10, y: 4 }, + { x: 12, y: 9 }, + { x: 15, y: 6 } + ], + golds: [ + { x: 3, y: 3 }, + { x: 6, y: 7 }, + { x: 9, y: 1 }, + { x: 11, y: 6 }, + { x: 14, y: 3 } + ], + crystals: [ + { x: 4, y: 9 }, + { x: 8, y: 5 }, + { x: 13, y: 7 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'l_012', + minStars: 12 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'l_014', + worldId: 'world_l', + levelNumber: 14, + name: 'Laborant a linkový', + gameType: 'banik', + difficulty: 3, + words: ['lopta', 'lúka', 'leporelo', 'lodička', 'lekáreň', 'lavína', 'lektor', 'laborant', 'listnatý'], // 10 slov + gameConfig: { + diamonds: 6, + golds: 6, + crystals: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 3 }, + { x: 4, y: 7 }, + { x: 7, y: 2 }, + { x: 9, y: 9 }, + { x: 12, y: 4 }, + { x: 14, y: 8 } + ], + golds: [ + { x: 2, y: 1 }, + { x: 5, y: 5 }, + { x: 8, y: 8 }, + { x: 10, y: 3 }, + { x: 11, y: 7 }, + { x: 13, y: 2 } + ], + crystals: [ + { x: 6, y: 3 }, + { x: 15, y: 5 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'l_013', + minStars: 13 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'l_015', + worldId: 'world_l', + levelNumber: 15, + name: 'Tretie opakovanie', // opakovací level - všetky slová z 1-14 + gameType: 'banik', + difficulty: 4, + words: ['lano', 'lopta', 'list', 'les', 'líška', 'lyžica', 'lavička', 'lúka', 'ľalia', 'lampa', + 'lúč', 'lekár', 'lavína', 'lietadlo', 'lev', 'leňochod', 'lupa', 'lízatko', 'lyže', 'leopard', + 'letisko', 'pílka', 'levanduľa', 'lyžiar', 'lektvar', 'laboratórium', 'lektor', 'lúčny', + 'leporelo', 'lodička', 'lekáreň', 'laborant', 'listnatý'], // 35 slov + gameConfig: { + diamonds: 7, + golds: 7, + crystals: 4, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 2, y: 2 }, + { x: 4, y: 5 }, + { x: 6, y: 8 }, + { x: 8, y: 3 }, + { x: 10, y: 6 }, + { x: 12, y: 1 }, + { x: 14, y: 9 } + ], + golds: [ + { x: 1, y: 7 }, + { x: 3, y: 4 }, + { x: 5, y: 1 }, + { x: 7, y: 6 }, + { x: 9, y: 8 }, + { x: 11, y: 3 }, + { x: 13, y: 5 } + ], + crystals: [ + { x: 2, y: 9 }, + { x: 6, y: 2 }, + { x: 10, y: 7 }, + { x: 15, y: 4 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'l_014', + minStars: 14 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'l_016', + worldId: 'world_l', + levelNumber: 16, + name: 'Liter a lievik', + gameType: 'banik', + difficulty: 4, + words: ['lopta', 'lúka', 'laborant', 'listnatý', 'levanduľa', 'liter', 'lievik', 'lampa', 'lopúch'], // 10 slov + gameConfig: { + diamonds: 6, + golds: 6, + crystals: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 6 }, + { x: 5, y: 3 }, + { x: 8, y: 7 }, + { x: 10, y: 2 }, + { x: 12, y: 8 }, + { x: 15, y: 1 } + ], + golds: [ + { x: 2, y: 4 }, + { x: 4, y: 9 }, + { x: 7, y: 1 }, + { x: 9, y: 5 }, + { x: 11, y: 9 }, + { x: 14, y: 6 } + ], + crystals: [ + { x: 6, y: 5 }, + { x: 10, y: 8 }, + { x: 13, y: 3 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'l_015', + minStars: 15 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + } + /*{ + id: 'l_017', + worldId: 'world_l', + levelNumber: 17, + name: 'Logopéd a lesník', + gameType: 'banik', + difficulty: 4, + words: ['lopta', 'lúka', 'liter', 'lievik', 'lopúch', 'lekáreň', 'logopéd', 'listnatý', 'lavína', 'lavička'], // 10 slov + gameConfig: { + diamonds: 7, + golds: 5, + crystals: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 5 }, + { x: 4, y: 2 }, + { x: 6, y: 9 }, + { x: 8, y: 4 }, + { x: 11, y: 7 }, + { x: 13, y: 1 }, + { x: 15, y: 8 } + ], + golds: [ + { x: 3, y: 8 }, + { x: 5, y: 4 }, + { x: 9, y: 6 }, + { x: 12, y: 3 }, + { x: 14, y: 5 } + ], + crystals: [ + { x: 2, y: 7 }, + { x: 7, y: 3 }, + { x: 10, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'l_016', + minStars: 16 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'l_018', + worldId: 'world_l', + levelNumber: 18, + name: 'Lesník a ľudovosť', + gameType: 'banik', + difficulty: 4, + words: ['lopta', 'lúka', 'logopéd', 'lopúch', 'liter', 'lievik', 'lesník', 'ľudovosť', 'laborant'], // 10 slov + gameConfig: { + diamonds: 7, + golds: 6, + crystals: 4, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 2, y: 3 }, + { x: 4, y: 6 }, + { x: 7, y: 1 }, + { x: 9, y: 8 }, + { x: 11, y: 4 }, + { x: 13, y: 9 }, + { x: 15, y: 2 } + ], + golds: [ + { x: 1, y: 8 }, + { x: 3, y: 5 }, + { x: 6, y: 7 }, + { x: 8, y: 3 }, + { x: 10, y: 6 }, + { x: 14, y: 7 } + ], + crystals: [ + { x: 5, y: 9 }, + { x: 9, y: 2 }, + { x: 12, y: 5 }, + { x: 15, y: 6 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'l_017', + minStars: 17 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'l_019', + worldId: 'world_l', + levelNumber: 19, + name: 'Predposledný level', + gameType: 'banik', + difficulty: 4, + words: ['lopta', 'lúka', 'logopéd', 'laborant', 'ľudovosť', 'liter', 'listnatý', 'levanduľa', 'lampa', 'lúčny'], // 10 slov + gameConfig: { + diamonds: 8, + golds: 6, + crystals: 4, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 2 }, + { x: 3, y: 7 }, + { x: 5, y: 3 }, + { x: 7, y: 9 }, + { x: 9, y: 5 }, + { x: 11, y: 1 }, + { x: 13, y: 6 }, + { x: 15, y: 4 } + ], + golds: [ + { x: 2, y: 5 }, + { x: 4, y: 8 }, + { x: 6, y: 1 }, + { x: 10, y: 7 }, + { x: 12, y: 3 }, + { x: 14, y: 9 } + ], + crystals: [ + { x: 3, y: 3 }, + { x: 8, y: 6 }, + { x: 11, y: 8 }, + { x: 14, y: 2 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'l_018', + minStars: 18 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'l_020', + worldId: 'world_l', + levelNumber: 20, + name: 'Veľké finále L', + gameType: 'banik', + difficulty: 5, + words: ['lano', 'lopta', 'list', 'les', 'líška', 'lyžica', 'lavička', 'lúka', 'ľalia', 'lampa', + 'lúč', 'lekár', 'lavína', 'lietadlo', 'lev', 'leňochod', 'lupa', 'lízatko', 'lyže', + 'letisko', 'lilka', 'levanduľa', ľudia', 'lyžiar', 'lektvar', 'laboratórium', 'lektor', 'lúčny', + 'leporelo', 'lodička', 'lekáreň', 'laborant', 'listnatý', 'liter', 'lievik', 'lopúch', + 'logopéd', 'lesník', 'ľudovosť'], + gameConfig: { + diamonds: 10, + golds: 8, + crystals: 5, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 4 }, + { x: 2, y: 8 }, + { x: 4, y: 1 }, + { x: 5, y: 6 }, + { x: 7, y: 3 }, + { x: 9, y: 7 }, + { x: 10, y: 2 }, + { x: 12, y: 9 }, + { x: 13, y: 5 }, + { x: 15, y: 7 } + ], + golds: [ + { x: 2, y: 2 }, + { x: 3, y: 6 }, + { x: 6, y: 8 }, + { x: 8, y: 1 }, + { x: 9, y: 4 }, + { x: 11, y: 6 }, + { x: 14, y: 3 }, + { x: 15, y: 9 } + ], + crystals: [ + { x: 4, y: 4 }, + { x: 6, y: 5 }, + { x: 8, y: 9 }, + { x: 11, y: 3 }, + { x: 13, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'l_019', + minStars: 19 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }*/ + ], + world_s: [ + { + id: 's_001', + worldId: 'world_s', + levelNumber: 1, + name: 'Prvé S-čka', + gameType: 'banik', + difficulty: 1, + words: ['slnko', 'sova', 'seno', 'soľ'], // 4 slová pre začiatok + gameConfig: { + diamonds: 1, // málo diamantov pre začiatok + golds: 2, // trochu viac goldov + crystals: 1, // jeden kryštál + speechExercises: 1, // 1 slovo na vyslovenie + listeningExercises: 1, // 1 slovo na počúvanie + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 7, y: 4 } // diamant v strede mapy + ], + golds: [ + { x: 4, y: 3 }, // gold vľavo + { x: 12, y: 7 } // gold vpravo + ], + crystals: [ + { x: 9, y: 6 } // kryštál vpravo + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: null, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: true + }, + { + id: 's_002', + worldId: 'world_s', + levelNumber: 2, + name: 'Suka a srdce', + gameType: 'banik', + difficulty: 1, + words: ['slnko', 'sova', 'seno', 'soľ', 'silák', 'srdce'], // 6 slov + gameConfig: { + diamonds: 2, + golds: 3, + crystals: 1, + speechExercises: 1, // stále 1 slovo + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 6, y: 2 }, + { x: 10, y: 8 } + ], + golds: [ + { x: 3, y: 6 }, + { x: 7, y: 4 }, + { x: 13, y: 5 } + ], + crystals: [ + { x: 11, y: 3 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 's_001', + minStars: 1 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 's_003', + worldId: 'world_s', + levelNumber: 3, + name: 'Stôl a silák', + gameType: 'banik', + difficulty: 1, + words: ['slnko', 'sova', 'seno', 'srdce', 'soľ', 'stôl', 'silák'], // 7 slov + gameConfig: { + diamonds: 2, + golds: 3, + crystals: 2, + speechExercises: 2, // zvyšujeme na 2 slová + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 5, y: 5 }, + { x: 12, y: 2 } + ], + golds: [ + { x: 2, y: 8 }, + { x: 8, y: 6 }, + { x: 14, y: 4 } + ], + crystals: [ + { x: 4, y: 3 }, + { x: 10, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 's_002', + minStars: 2 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 's_004', + worldId: 'world_s', + levelNumber: 4, + name: 'Sitko a sviečka', + gameType: 'banik', + difficulty: 1, + words: ['slnko', 'stôl', 'silák', 'sova', 'seno', 'srdce', 'sitko', 'sviečka'], // 8 slov + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 2, + speechExercises: 2, // 2 slová + listeningExercises: 2, // zvyšujeme aj posluch + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 4 }, + { x: 9, y: 7 }, + { x: 13, y: 3 } + ], + golds: [ + { x: 6, y: 8 }, + { x: 11, y: 5 }, + { x: 2, y: 2 } + ], + crystals: [ + { x: 7, y: 2 }, + { x: 14, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 's_003', + minStars: 3 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 's_005', + worldId: 'world_s', + levelNumber: 5, + name: 'Prvé opakovanie', // opakovací level + gameType: 'banik', + difficulty: 2, + words: ['slnko', 'sova', 'seno', 'soľ', 'srdce', 'stôl', 'silák', 'sitko', 'sviečka'], // 10 slov + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 2, + speechExercises: 3, // zvyšujeme na 3 slová + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 4, y: 6 }, + { x: 10, y: 3 }, + { x: 15, y: 9 } + ], + golds: [ + { x: 2, y: 4 }, + { x: 7, y: 7 }, + { x: 12, y: 1 }, + { x: 5, y: 9 } + ], + crystals: [ + { x: 8, y: 5 }, + { x: 13, y: 7 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 's_004', + minStars: 4 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 's_006', + worldId: 'world_s', + levelNumber: 6, + name: 'Skala a smiech', + gameType: 'banik', + difficulty: 2, + words: ['slnko', 'stôl', 'sitko', 'srdce', 'sviečka', 'skala', 'smiech', 'sneh', 'sliepka', 'slama'], // 10 slov + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 3, + speechExercises: 3, // 3 slová + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 7 }, + { x: 8, y: 2 }, + { x: 14, y: 6 } + ], + golds: [ + { x: 5, y: 4 }, + { x: 9, y: 8 }, + { x: 11, y: 2 }, + { x: 2, y: 9 } + ], + crystals: [ + { x: 6, y: 6 }, + { x: 12, y: 4 }, + { x: 4, y: 1 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 's_005', + minStars: 5 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 's_007', + worldId: 'world_s', + levelNumber: 7, + name: 'Sestra a sídlo', + gameType: 'banik', + difficulty: 2, + words: ['slnko', 'sneh', 'smiech', 'skala', 'sliepka', 'slama', 'sestra', 'sídlo', 'sklo', 'sladkosť'], // 10 slov + gameConfig: { + diamonds: 4, + golds: 4, + crystals: 2, + speechExercises: 3, + listeningExercises: 3, // zvyšujeme posluch + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 2, y: 3 }, + { x: 7, y: 9 }, + { x: 11, y: 5 }, + { x: 15, y: 2 } + ], + golds: [ + { x: 4, y: 7 }, + { x: 9, y: 3 }, + { x: 13, y: 8 }, + { x: 6, y: 1 } + ], + crystals: [ + { x: 5, y: 5 }, + { x: 10, y: 7 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 's_006', + minStars: 6 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 's_008', + worldId: 'world_s', + levelNumber: 8, + name: 'Sklo a stavba', + gameType: 'banik', + difficulty: 2, + words: ['slnko', 'sklo', 'sestra', 'sladkosť', 'sídlo', 'smiech', 'srdce', 'sliepka', 'skala', 'stavba'], // 10 slov + gameConfig: { + diamonds: 4, + golds: 5, + crystals: 3, + speechExercises: 4, // zvyšujeme na 4 + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 5 }, + { x: 8, y: 8 }, + { x: 12, y: 3 }, + { x: 14, y: 9 } + ], + golds: [ + { x: 1, y: 7 }, + { x: 5, y: 2 }, + { x: 9, y: 6 }, + { x: 11, y: 9 }, + { x: 15, y: 4 } + ], + crystals: [ + { x: 4, y: 4 }, + { x: 7, y: 7 }, + { x: 13, y: 1 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 's_007', + minStars: 7 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 's_009', + worldId: 'world_s', + levelNumber: 9, + name: 'Strom a stolička', + gameType: 'banik', + difficulty: 2, + words: ['slnko', 'sklo', 'sladkosť', 'stavba', 'srdce', 'sneh', 'strom', 'sitko', 'stolička', 'sused'], // 10 slov + gameConfig: { + diamonds: 4, + golds: 5, + crystals: 2, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 2, y: 6 }, + { x: 6, y: 3 }, + { x: 10, y: 8 }, + { x: 13, y: 2 } + ], + golds: [ + { x: 4, y: 9 }, + { x: 7, y: 5 }, + { x: 9, y: 1 }, + { x: 12, y: 6 }, + { x: 15, y: 7 } + ], + crystals: [ + { x: 5, y: 7 }, + { x: 11, y: 4 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 's_008', + minStars: 8 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 's_010', + worldId: 'world_s', + levelNumber: 10, + name: 'Druhé opakovanie', // veľké opakovanie + gameType: 'banik', + difficulty: 3, + words: ['slnko', 'sova', 'seno', 'soľ', 'srdce', 'stôl', 'silák', 'sitko', 'sviečka', + 'skala', 'smiech', 'sneh', 'sliepka', 'slama', 'sestra', 'sídlo', 'sklo', 'sladkosť', 'stavba', + 'strom', 'stolička', 'sused'], // 23 slov + gameConfig: { + diamonds: 5, + golds: 6, + crystals: 3, + speechExercises: 5, // 5 slov na vyslovenie + listeningExercises: 4, // 4 slová na počúvanie + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 3 }, + { x: 6, y: 7 }, + { x: 9, y: 2 }, + { x: 12, y: 5 }, + { x: 15, y: 8 } + ], + golds: [ + { x: 1, y: 5 }, + { x: 4, y: 8 }, + { x: 7, y: 4 }, + { x: 10, y: 6 }, + { x: 13, y: 9 }, + { x: 14, y: 1 } + ], + crystals: [ + { x: 5, y: 6 }, + { x: 8, y: 9 }, + { x: 11, y: 3 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 's_009', + minStars: 9 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 's_011', + worldId: 'world_s', + levelNumber: 11, + name: 'Sila a súťaž', + gameType: 'banik', + difficulty: 3, + words: ['slnko', 'sneh', 'strom', 'sladkosť', 'sestra', 'stavba', 'sused', 'smiech', 'sila', 'súťaž'], // 10 slov + gameConfig: { + diamonds: 4, + golds: 5, + crystals: 3, + speechExercises: 5, // viac rečových cvičení + listeningExercises: 4, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 2, y: 4 }, + { x: 7, y: 8 }, + { x: 11, y: 1 }, + { x: 14, y: 7 } + ], + golds: [ + { x: 4, y: 2 }, + { x: 6, y: 5 }, + { x: 9, y: 9 }, + { x: 12, y: 3 }, + { x: 15, y: 6 } + ], + crystals: [ + { x: 3, y: 9 }, + { x: 8, y: 3 }, + { x: 13, y: 5 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 's_010', + minStars: 10 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 's_012', + worldId: 'world_s', + levelNumber: 12, + name: 'Skriňa a siréna', + gameType: 'banik', + difficulty: 3, + words: ['slnko', 'súťaž', 'sila', 'smiech', 'sestra', 'skriňa', 'stolička', 'sliepka', 'sviečka', 'siréna'], // 10 slov + gameConfig: { + diamonds: 4, + golds: 6, + crystals: 2, + speechExercises: 5, + listeningExercises: 4, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 6 }, + { x: 8, y: 4 }, + { x: 10, y: 9 }, + { x: 15, y: 2 } + ], + golds: [ + { x: 1, y: 3 }, + { x: 5, y: 7 }, + { x: 7, y: 2 }, + { x: 9, y: 5 }, + { x: 12, y: 8 }, + { x: 14, y: 4 } + ], + crystals: [ + { x: 6, y: 9 }, + { x: 11, y: 6 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 's_011', + minStars: 11 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 's_013', + worldId: 'world_s', + levelNumber: 13, + name: 'Socha a sen', + gameType: 'banik', + difficulty: 3, + words: ['slnko', 'súťaž', 'siréna', 'stolička', 'skriňa', 'sladkosť', 'socha', 'sen', 'srdce', 'skokan'], // 10 slov + gameConfig: { + diamonds: 5, + golds: 5, + crystals: 3, + speechExercises: 6, // zvyšujeme na 6 + listeningExercises: 5, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 2, y: 2 }, + { x: 5, y: 8 }, + { x: 9, y: 3 }, + { x: 12, y: 7 }, + { x: 14, y: 5 } + ], + golds: [ + { x: 3, y: 5 }, + { x: 7, y: 6 }, + { x: 10, y: 1 }, + { x: 13, y: 9 }, + { x: 15, y: 3 } + ], + crystals: [ + { x: 4, y: 7 }, + { x: 8, y: 8 }, + { x: 11, y: 4 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 's_012', + minStars: 12 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 's_014', + worldId: 'world_s', + levelNumber: 14, + name: 'Skokan a svetlo', + gameType: 'banik', + difficulty: 3, + words: ['slnko', 'sen', 'skriňa', 'skokan', 'siréna', 'súťaž', 'srdce', 'socha', 'stavba', 'svetlo'], // 10 slov + gameConfig: { + diamonds: 5, + golds: 6, + crystals: 2, + speechExercises: 6, + listeningExercises: 5, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 4 }, + { x: 6, y: 2 }, + { x: 8, y: 7 }, + { x: 11, y: 9 }, + { x: 13, y: 3 } + ], + golds: [ + { x: 3, y: 8 }, + { x: 5, y: 5 }, + { x: 7, y: 1 }, + { x: 10, y: 5 }, + { x: 12, y: 6 }, + { x: 15, y: 8 } + ], + crystals: [ + { x: 4, y: 3 }, + { x: 14, y: 1 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 's_013', + minStars: 13 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 's_015', + worldId: 'world_s', + levelNumber: 15, + name: 'Tretie opakovanie', // opakovací level + gameType: 'banik', + difficulty: 4, + words: ['slnko', 'sova', 'seno', 'soľ', 'srdce', 'stôl', 'silák', 'sitko', 'sviečka', + 'skala', 'smiech', 'sneh', 'sliepka', 'slama', 'sestra', 'sídlo', 'sklo', 'sladkosť', 'stavba', + 'strom', 'stolička', 'sused', 'sila', 'súťaž', 'skriňa', 'siréna', 'socha', 'sen', 'skokan', + 'svetlo'], // 31 slov + gameConfig: { + diamonds: 6, + golds: 7, + crystals: 4, + speechExercises: 7, // 7 slov + listeningExercises: 6, // 6 slov + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 2, y: 5 }, + { x: 4, y: 8 }, + { x: 7, y: 3 }, + { x: 10, y: 7 }, + { x: 12, y: 2 }, + { x: 15, y: 9 } + ], + golds: [ + { x: 1, y: 2 }, + { x: 3, y: 7 }, + { x: 6, y: 4 }, + { x: 8, y: 9 }, + { x: 9, y: 1 }, + { x: 13, y: 6 }, + { x: 14, y: 3 } + ], + crystals: [ + { x: 5, y: 1 }, + { x: 7, y: 8 }, + { x: 11, y: 5 }, + { x: 15, y: 7 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 's_014', + minStars: 14 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 's_016', + worldId: 'world_s', + levelNumber: 16, + name: 'Slanina a sladký', + gameType: 'banik', + difficulty: 4, + words: ['slnko', 'svetlo', 'súťaž', 'sen', 'siréna', 'sneh', 'sliepka', 'smiech', 'slanina', 'sladký'], // 10 slov + gameConfig: { + diamonds: 5, + golds: 6, + crystals: 3, + speechExercises: 7, + listeningExercises: 6, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 4 }, + { x: 6, y: 7 }, + { x: 9, y: 2 }, + { x: 11, y: 8 }, + { x: 14, y: 5 } + ], + golds: [ + { x: 2, y: 6 }, + { x: 5, y: 3 }, + { x: 8, y: 5 }, + { x: 10, y: 9 }, + { x: 12, y: 1 }, + { x: 15, y: 4 } + ], + crystals: [ + { x: 4, y: 9 }, + { x: 7, y: 1 }, + { x: 13, y: 7 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 's_015', + minStars: 15 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + ], + world_ch: [ + { + id: 'ch_001', + worldId: 'world_ch', + levelNumber: 1, + name: 'Prvé Č-čka', + gameType: 'banik', + difficulty: 1, + words: ['čaj', 'čas', 'čiapka', 'čip'], + gameConfig: { + diamonds: 2, + golds: 5, + crystals: 3, + speechExercises: 1, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 8 }, // diamant na pozícii 3,8 + { x: 12, y: 7 } // diamant na pozícii 12,7 + ], + golds: [ + { x: 2, y: 9 }, // gold na pozícii 2,9 + { x: 7, y: 8 }, // gold na pozícii 7,8 + { x: 14, y: 6 }, // gold na pozícii 14,6 + { x: 9, y: 8 }, + { x: 10, y: 13 } + ], + crystals: [ + { x: 9, y: 12 }, // kryštál na pozícii 9,7 + { x: 3, y: 12 }, + { x: 11, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: null, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: true + }, + { + id: 'ch_002', + worldId: 'world_ch', + levelNumber: 2, + name: 'Prvé Č-čka', + gameType: 'banik', + difficulty: 1, + words: ['čiapka', 'čaj', 'česť', 'čip'], + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 2, + speechExercises: 2, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 8 }, // diamant na pozícii 3,8 + { x: 12, y: 7 }, // diamant na pozícii 12,7 + { x: 7, y: 13 } + ], + golds: [ + { x: 2, y: 9 }, // gold na pozícii 2,9 + { x: 7, y: 8 }, // gold na pozícii 7,8 + { x: 10, y: 8 } + ], + crystals: [ + { x: 9, y: 7 }, // kryštál na pozícii 9,7 + { x: 10, y: 12 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'ch_001', + minStars: 1 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'ch_003', + worldId: 'world_ch', + levelNumber: 3, + name: 'Prvé Č-čka', + gameType: 'banik', + difficulty: 1, + words: ['čip', 'čaj', 'čas', 'čiapka'], + gameConfig: { + diamonds: 3, + golds: 5, + crystals: 1, + speechExercises: 2, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 8 }, // diamant na pozícii 3,8 + { x: 12, y: 7 }, // diamant na pozícii 12,7 + { x: 10, y: 12 } + ], + golds: [ + { x: 2, y: 9 }, // gold na pozícii 2,9 + { x: 7, y: 8 }, // gold na pozícii 7,8 + { x: 14, y: 6 }, // gold na pozícii 14,6 + { x: 9, y: 8 }, + { x: 10, y: 8 } + ], + crystals: [ + { x: 9, y: 7 } // kryštál na pozícii 9,7 + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'ch_002', + minStars: 2 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'ch_004', + worldId: 'world_ch', + levelNumber: 4, + name: 'Prvé Č-čka', + gameType: 'banik', + difficulty: 1, + words: ['čiapka', 'čaj', 'čip', 'čas', 'česť'], + gameConfig: { + diamonds: 4, + golds: 3, + crystals: 1, + speechExercises: 2, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 4, y: 8 }, // diamant na pozícii 3,8 + { x: 10, y: 7 }, // diamant na pozícii 12,7 + { x: 4, y: 12 }, + { x: 9, y: 14 } + ], + golds: [ + { x: 3, y: 9 }, // gold na pozícii 2,9 + { x: 7, y: 8 }, // gold na pozícii 7,8 + { x: 14, y: 6 } // gold na pozícii 14,6 + ], + crystals: [ + { x: 7, y: 11 } // kryštál na pozícii 9,7 + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'ch_003', + minStars: 3 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'ch_005', + worldId: 'world_ch', + levelNumber: 5, + name: 'Prvé R-čka', + gameType: 'banik', + difficulty: 1, + words: ['čaj', 'čip', 'česť', 'čiapka', 'čas', 'čelo'], + gameConfig: { + diamonds: 4, + golds: 2, + crystals: 2, + speechExercises: 3, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 6, y: 4 }, // diamant na pozícii 3,8 + { x: 9, y: 7 }, // diamant na pozícii 12,7 + { x: 2, y: 10 }, + { x: 1, y: 14 } + ], + golds: [ + { x: 3, y: 9 }, // gold na pozícii 2,9 + { x: 7, y: 8 } // gold na pozícii 7,8 + ], + crystals: [ + { x: 7, y: 11 }, // kryštál na pozícii 9,7 + { x: 3, y: 6 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'ch_004', + minStars: 4 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'ch_006', + worldId: 'world_ch', + levelNumber: 6, + name: 'Prvé Č-čka', + gameType: 'banik', + difficulty: 1, + words: ['čelo', 'čiapka', 'čiara', 'česať', 'čip', 'čaj'], + gameConfig: { + diamonds: 4, + golds: 2, + crystals: 2, + speechExercises: 2, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 5 }, // diamant na pozícii 3,8 + { x: 4, y: 7 }, // diamant na pozícii 12,7 + { x: 6, y: 10 }, + { x: 2, y: 14 } + ], + golds: [ + { x: 10, y: 9 }, // gold na pozícii 2,9 + { x: 7, y: 12 } // gold na pozícii 7,8 + ], + crystals: [ + { x: 7, y: 11 }, // kryštál na pozícii 9,7 + { x: 10, y: 6 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'ch_005', + minStars: 5 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'ch_007', + worldId: 'world_ch', + levelNumber: 6, + name: 'Prvé Č-čka', + gameType: 'banik', + difficulty: 1, + words: ['čelo', 'čiapka', 'čajník', 'čert', 'česať'], + gameConfig: { + diamonds: 2, + golds: 2, + crystals: 2, + speechExercises: 2, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 5 }, // diamant na pozícii 3,8 + { x: 4, y: 7 }, // diamant na pozícii 12,7 + { x: 6, y: 10 }, + { x: 2, y: 14 } + ], + golds: [ + { x: 3, y: 8 }, // gold na pozícii 2,9 + { x: 7, y: 12 } // gold na pozícii 7,8 + ], + crystals: [ + { x: 7, y: 11 }, // kryštál na pozícii 9,7 + { x: 10, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'ch_006', + minStars: 5 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'ch_008', + worldId: 'world_ch', + levelNumber: 6, + name: 'Prvé Č-čka', + gameType: 'banik', + difficulty: 1, + words: ['čitateľ', 'čerešňa', 'čarodejník', 'čajník'], + gameConfig: { + diamonds: 2, + golds: 2, + crystals: 2, + speechExercises: 2, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 6 }, // diamant na pozícii 3,8 + { x: 6, y: 14 } + ], + golds: [ + { x: 10, y: 9 }, // gold na pozícii 2,9 + { x: 7, y: 11 }, // gold na pozícii 7,8 + { x: 8, y: 12 }, + { x: 1, y: 5 } + ], + crystals: [ + { x: 9, y: 11 }, // kryštál na pozícii 9,7 + { x: 14, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'ch_007', + minStars: 5 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'ch_009', + worldId: 'world_ch', + levelNumber: 9, + name: 'Z – istota', + gameType: 'banik', + difficulty: 3, + words: ['čitateľ', 'čerešňa', 'čarodejník', 'čaj', 'čiapka', 'čelo', 'činka', 'čokoláda', 'čajník'], + gameConfig: { + diamonds: 4, + golds: 5, + crystals: 2, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 2, y: 6 }, + { x: 6, y: 3 }, + { x: 10, y: 8 }, + { x: 13, y: 2 } + ], + golds: [ + { x: 4, y: 9 }, + { x: 7, y: 5 }, + { x: 9, y: 1 }, + { x: 12, y: 6 }, + { x: 15, y: 7 } + ], + crystals: [ + { x: 5, y: 7 }, + { x: 11, y: 4 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { levelId: 'ch_008', minStars: 10 }, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'ch_010', + worldId: 'world_ch', + levelNumber: 10, + name: 'Majster Z', + gameType: 'banik', + difficulty: 3, + words: ['čitateľ', 'čerešňa', 'čarodejník', 'čaj', 'čiapka', + 'vysávač', 'cvičky', 'značka' + ], + gameConfig: { + diamonds: 5, + golds: 6, + crystals: 3, + speechExercises: 5, // 5 slov na vyslovenie + listeningExercises: 4, // 4 slová na počúvanie + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 3 }, + { x: 6, y: 7 }, + { x: 9, y: 2 }, + { x: 12, y: 5 }, + { x: 15, y: 8 } + ], + golds: [ + { x: 1, y: 5 }, + { x: 4, y: 8 }, + { x: 7, y: 4 }, + { x: 10, y: 6 }, + { x: 13, y: 9 }, + { x: 14, y: 1 } + ], + crystals: [ + { x: 5, y: 6 }, + { x: 8, y: 9 }, + { x: 11, y: 3 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'ch_009', + minStars: 9 + }, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'ch_011', + worldId: 'world_ch', + levelNumber: 11, + name: 'Prvé zka', + gameType: 'banik', + difficulty: 3, + words: ['čitateľ', 'čerešňa', 'činka', 'čokoláda', 'čajník', + 'vysávač', 'cvičky', 'značka' + ], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 2, + speechExercises: 3, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 15, y: 14 }, + { x: 12, y: 15 }, + { x: 3, y: 12 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 4, y: 15 }, + { x: 5, y: 10 } + ], + crystals: [ + { x: 9, y: 13 }, + { x: 6, y: 7 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'ch_010', + minStars: 12 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'ch_012', + worldId: 'world_ch', + levelNumber: 12, + name: 'Prvé z-čka', + gameType: 'banik', + difficulty: 3, + words: ['zima', 'zub', 'zámok', 'zlato', 'zajac', + 'zebra', 'zvon', 'záves', 'zajtra', 'zelenina', 'zemiak', 'záhrada'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 7 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 6, y: 9 }, + { x: 7, y: 11 }, + { x: 14, y: 12 }, + { x: 4, y: 10 } + ], + crystals: [ + { x: 9, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'ch_011', + minStars: 13 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'ch_013', + worldId: 'world_ch', + levelNumber: 13, + name: 'Prvé z-tka', + gameType: 'banik', + difficulty: 4, + words: ['čitateľ', 'čerešňa', 'čarodejník', 'čaj', 'čiapka', 'čelo', 'činka', 'čokoláda', 'čajník', + 'vysávač', 'cvičky', 'značka' + ], + gameConfig: { + diamonds: 5, + golds: 3, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 9, y: 11 }, + { x: 10, y: 14 }, + { x: 5, y: 9 }, + { x: 0, y: 10 } + ], + golds: [ + { x: 14, y: 9 }, // gold na pozícii 2,9 + { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 2, y: 6 } + ], + crystals: [ + { x: 3, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'ch_012', + minStars: 14 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'ch_014', + worldId: 'world_ch', + levelNumber: 14, + name: 'Prvé z-čka', + gameType: 'banik', + difficulty: 4, + words: [ 'čaj', 'čiapka', 'čelo', 'činka', 'čokoláda', 'čajník', + 'vysávač', 'cvičky', 'značka' + ], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 10 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 10, y: 10 }, + { x: 0, y: 12 }, + { x: 6, y: 13 }, + { x: 14, y: 15 } + ], + crystals: [ + { x: 9, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'ch_013', + minStars: 15 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'ch_015', + worldId: 'world_ch', + levelNumber: 15, + name: 'Prvé t-čka', + gameType: 'banik', + difficulty: 4, + words: ['čip', 'čas', 'čitateľ', 'čerešňa', 'čarodejník', 'čaj', 'čiapka', 'čelo', 'činka', 'čokoláda', 'čajník', + 'vysávač', 'cvičky', 'značka' + ], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 8 }, + { x: 10, y: 10 } + ], + golds: [ + { x: 0, y: 11 }, + { x: 4, y: 9 }, + { x: 7, y: 15 }, + { x: 15, y: 13 } + ], + crystals: [ + { x: 13, y: 12 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'ch_014', + minStars: 16 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'ch_016', + worldId: 'world_ch', + levelNumber: 16, + name: 'Prvé t-čka', + gameType: 'banik', + difficulty: 5, + words: ['čip', 'čas', 'čitateľ', 'čerešňa', 'čarodejník', 'čaj', 'čiapka', 'čelo', 'činka', 'čokoláda', 'čajník', + 'vysávač', 'cvičky', 'značka', 'čiara', 'česať', 'čert' + ], + gameConfig: { + diamonds: 5, + golds: 6, + crystals: 2, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 0, y: 8 }, + { x: 12, y: 10 }, + { x: 9, y: 12 }, + { x: 4, y: 13 }, + { x: 15, y: 15 } + ], + golds: [ + { x: 1, y: 8 }, + { x: 2, y: 15 }, + { x: 5, y: 13 }, + { x: 7, y: 9 }, + { x: 6, y: 15 }, + { x: 13, y: 7 } + ], + crystals: [ + { x: 10, y: 11 }, + { x: 2, y: 10 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'ch_015', + minStars: 20 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + } + + ], + world_z: [ + { + id: 'z_001', + worldId: 'world_z', + levelNumber: 1, + name: 'Prvé Z-ka', + gameType: 'banik', + difficulty: 1, + words: ['zima', 'zub', 'zajac'], + gameConfig: { + diamonds: 1, // málo diamantov pre začiatok + golds: 2, // trochu viac goldov + crystals: 1, // jeden kryštál + speechExercises: 1, // 1 slovo na vyslovenie + listeningExercises: 1, // 1 slovo na počúvanie + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 7, y: 4 } // diamant v strede mapy + ], + golds: [ + { x: 4, y: 3 }, // gold vľavo + { x: 12, y: 7 } // gold vpravo + ], + crystals: [ + { x: 9, y: 6 } // kryštál vpravo + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: null, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: true + }, + { + id: 'z_002', + worldId: 'world_z', + levelNumber: 2, + name: 'Začíname so Z', + gameType: 'banik', + difficulty: 1, + words: ['zajac', 'zub', 'zima', 'zvon'], + gameConfig: { + diamonds: 2, + golds: 3, + crystals: 1, + speechExercises: 1, // stále 1 slovo + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 6, y: 2 }, + { x: 10, y: 8 } + ], + golds: [ + { x: 3, y: 6 }, + { x: 7, y: 4 }, + { x: 13, y: 5 } + ], + crystals: [ + { x: 11, y: 3 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'z_001', + minStars: 1 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'z_003', + worldId: 'world_z', + levelNumber: 3, + name: 'Z na začiatku', + gameType: 'banik', + difficulty: 1, + words: ['zebra', 'zajac', 'zvon', 'zima'], + gameConfig: { + diamonds: 2, + golds: 3, + crystals: 2, + speechExercises: 2, // zvyšujeme na 2 slová + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 5, y: 5 }, + { x: 12, y: 2 } + ], + golds: [ + { x: 2, y: 8 }, + { x: 8, y: 6 }, + { x: 14, y: 4 } + ], + crystals: [ + { x: 4, y: 3 }, + { x: 10, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'z_002', + minStars: 2 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'z_004', + worldId: 'world_z', + levelNumber: 4, + name: 'Z v slovách', + gameType: 'banik', + difficulty: 1, + words: ['zámok', 'zebra', 'zvon', 'zlatý'], + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 2, + speechExercises: 2, // 2 slová + listeningExercises: 2, // zvyšujeme aj posluch + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 4 }, + { x: 9, y: 7 }, + { x: 13, y: 3 } + ], + golds: [ + { x: 6, y: 8 }, + { x: 11, y: 5 }, + { x: 2, y: 2 } + ], + crystals: [ + { x: 7, y: 2 }, + { x: 14, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'z_003', + minStars: 3 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'z_005', + worldId: 'world_z', + levelNumber: 5, + name: 'Z-čka v akcii', + gameType: 'banik', + difficulty: 2, + words: ['zajtra', 'zámok', 'zlatý', 'zima'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 2, + speechExercises: 3, // zvyšujeme na 3 slová + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 4, y: 6 }, + { x: 10, y: 3 }, + { x: 15, y: 9 } + ], + golds: [ + { x: 2, y: 4 }, + { x: 7, y: 7 }, + { x: 12, y: 1 }, + { x: 5, y: 9 } + ], + crystals: [ + { x: 8, y: 5 }, + { x: 13, y: 7 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'z_004', + minStars: 4 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'z_006', + worldId: 'world_z', + levelNumber: 6, + name: 'Z v strede', + gameType: 'banik', + difficulty: 2, + words: ['koza', 'slza', 'vozík', 'jazyk'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 3, + speechExercises: 3, // 3 slová + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 7 }, + { x: 8, y: 2 }, + { x: 14, y: 6 } + ], + golds: [ + { x: 5, y: 4 }, + { x: 9, y: 8 }, + { x: 11, y: 2 }, + { x: 2, y: 9 } + ], + crystals: [ + { x: 6, y: 6 }, + { x: 12, y: 4 }, + { x: 4, y: 1 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'z_005', + minStars: 5 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'z_007', + worldId: 'world_z', + levelNumber: 7, + name: 'Z v rôznych pozíciách', + gameType: 'banik', + difficulty: 2, + words: ['zebra', 'slza', 'jazdec', 'zvonček'], + gameConfig: { + diamonds: 4, + golds: 4, + crystals: 2, + speechExercises: 3, + listeningExercises: 3, // zvyšujeme posluch + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 2, y: 3 }, + { x: 7, y: 9 }, + { x: 11, y: 5 }, + { x: 15, y: 2 } + ], + golds: [ + { x: 4, y: 7 }, + { x: 9, y: 3 }, + { x: 13, y: 8 }, + { x: 6, y: 1 } + ], + crystals: [ + { x: 5, y: 5 }, + { x: 10, y: 7 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'z_006', + minStars: 6 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'z_008', + worldId: 'world_z', + levelNumber: 8, + name: 'Dlhšie slová so Z', + gameType: 'banik', + difficulty: 2, + words: ['zmrzlina', 'zvonček', 'záhradník'], + gameConfig: { + diamonds: 4, + golds: 5, + crystals: 3, + speechExercises: 4, // zvyšujeme na 4 + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 5 }, + { x: 8, y: 8 }, + { x: 12, y: 3 }, + { x: 14, y: 9 } + ], + golds: [ + { x: 1, y: 7 }, + { x: 5, y: 2 }, + { x: 9, y: 6 }, + { x: 11, y: 9 }, + { x: 15, y: 4 } + ], + crystals: [ + { x: 4, y: 4 }, + { x: 7, y: 7 }, + { x: 13, y: 1 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'z_007', + minStars: 7 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'z_009', + worldId: 'world_z', + levelNumber: 9, + name: 'Z – istota', + gameType: 'banik', + difficulty: 3, + words: ['záhradník', 'zmrzlina', 'zvedavý'], + gameConfig: { + diamonds: 5, + golds: 6, + crystals: 3, + speechExercises: 5, // 5 slov na vyslovenie + listeningExercises: 4, // 4 slová na počúvanie + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 3 }, + { x: 6, y: 7 }, + { x: 9, y: 2 }, + { x: 12, y: 5 }, + { x: 15, y: 8 } + ], + golds: [ + { x: 1, y: 5 }, + { x: 4, y: 8 }, + { x: 7, y: 4 }, + { x: 10, y: 6 }, + { x: 13, y: 9 }, + { x: 14, y: 1 } + ], + crystals: [ + { x: 5, y: 6 }, + { x: 8, y: 9 }, + { x: 11, y: 3 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'z_008', + minStars: 9 + }, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'z_010', + worldId: 'world_z', + levelNumber: 10, + name: 'Majster Z', + gameType: 'banik', + difficulty: 3, + words: ['zmrzlina', 'zvedavý', 'záhrada', 'zvonček'], + gameConfig: { + diamonds: 5, + golds: 6, + crystals: 3, + speechExercises: 5, // 5 slov na vyslovenie + listeningExercises: 4, // 4 slová na počúvanie + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 3 }, + { x: 6, y: 7 }, + { x: 9, y: 2 }, + { x: 12, y: 5 }, + { x: 15, y: 8 } + ], + golds: [ + { x: 1, y: 5 }, + { x: 4, y: 8 }, + { x: 7, y: 4 }, + { x: 10, y: 6 }, + { x: 13, y: 9 }, + { x: 14, y: 1 } + ], + crystals: [ + { x: 5, y: 6 }, + { x: 8, y: 9 }, + { x: 11, y: 3 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'z_009', + minStars: 9 + }, + unlockRequirement: { levelId: 'z_009', minStars: 11 }, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'z_011', + worldId: 'world_z', + levelNumber: 11, + name: 'Prvé zka', + gameType: 'banik', + difficulty: 3, + words: ['zima', 'zub', 'zámok', 'zlato', 'zajac', + 'zebra', 'zvon', 'záves', 'zajtra', 'zelenina'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 2, + speechExercises: 3, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 15, y: 14 }, + { x: 12, y: 15 }, + { x: 3, y: 12 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 4, y: 15 }, + { x: 5, y: 10 } + ], + crystals: [ + { x: 9, y: 13 }, + { x: 6, y: 7 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'z_010', + minStars: 12 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'z_012', + worldId: 'world_z', + levelNumber: 12, + name: 'Prvé z-čka', + gameType: 'banik', + difficulty: 3, + words: ['zima', 'zub', 'zámok', 'zlato', 'zajac', + 'zebra', 'zvon', 'záves', 'zajtra', 'zelenina', 'zemiak', 'záhrada'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 7 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 6, y: 9 }, + { x: 7, y: 11 }, + { x: 14, y: 12 }, + { x: 4, y: 10 } + ], + crystals: [ + { x: 9, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'z_011', + minStars: 13 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'z_013', + worldId: 'world_z', + levelNumber: 13, + name: 'Prvé z-tka', + gameType: 'banik', + difficulty: 4, + words: ['zima', 'zub', 'zámok', 'zlato', 'zajac', + 'zebra', 'zvon', 'záves', 'zajtra', 'zelenina', 'zemiak', 'záhrada', 'záchod'], + gameConfig: { + diamonds: 5, + golds: 3, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 9, y: 11 }, + { x: 10, y: 14 }, + { x: 5, y: 9 }, + { x: 0, y: 10 } + ], + golds: [ + { x: 14, y: 9 }, // gold na pozícii 2,9 + { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 2, y: 6 } + ], + crystals: [ + { x: 3, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'z_012', + minStars: 14 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'z_014', + worldId: 'world_z', + levelNumber: 14, + name: 'Prvé z-čka', + gameType: 'banik', + difficulty: 4, + words: ['zima', 'zub', 'zámok', 'zlato', 'zajac', + 'zebra', 'zvon', 'záves', 'zajtra', 'zelenina', 'zemiak', 'záhrada', 'záchod', 'zvieratá', 'zelené'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 10 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 10, y: 10 }, + { x: 0, y: 12 }, + { x: 6, y: 13 }, + { x: 14, y: 15 } + ], + crystals: [ + { x: 9, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'z_013', + minStars: 15 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'z_015', + worldId: 'world_z', + levelNumber: 15, + name: 'Prvé t-čka', + gameType: 'banik', + difficulty: 4, + words: ['zima', 'zub', 'zámok', 'zlato', 'zajac', + 'zebra', 'zvon', 'záves', 'zajtra', 'zelenina', 'zemiak', 'záhrada', 'záchod', 'zvieratá'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 8 }, + { x: 10, y: 10 } + ], + golds: [ + { x: 0, y: 11 }, + { x: 4, y: 9 }, + { x: 7, y: 15 }, + { x: 15, y: 13 } + ], + crystals: [ + { x: 13, y: 12 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'z_014', + minStars: 16 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'z_016', + worldId: 'world_z', + levelNumber: 16, + name: 'Prvé t-čka', + gameType: 'banik', + difficulty: 5, + words: ['zima', 'zub', 'zámok', 'zlato', 'zajac', + 'zebra', 'zvon', 'záves', 'zajtra', 'zelenina', 'zemiak', 'záhrada', 'záchod', 'zvieratá', 'zmrzlina', 'zvedavý'], + gameConfig: { + diamonds: 5, + golds: 6, + crystals: 2, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 0, y: 8 }, + { x: 12, y: 10 }, + { x: 9, y: 12 }, + { x: 4, y: 13 }, + { x: 15, y: 15 } + ], + golds: [ + { x: 1, y: 8 }, + { x: 2, y: 15 }, + { x: 5, y: 13 }, + { x: 7, y: 9 }, + { x: 6, y: 15 }, + { x: 13, y: 7 } + ], + crystals: [ + { x: 10, y: 11 }, + { x: 2, y: 10 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'z_015', + minStars: 20 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + } + ], + world_c: [ + { + id: 'c_001', + worldId: 'world_c', + levelNumber: 1, + name: 'Prvé C-ka', + gameType: 'banik', + difficulty: 1, + words: ['palec', 'valec', 'cena', 'opica'], + gameConfig: { + diamonds: 1, + golds: 3, + crystals: 1, + speechExercises: 1, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 12, y: 7 } + ], + golds: [ + { x: 2, y: 9 }, + { x: 5, y: 10 }, + { x: 10, y: 13 }, + ], + crystals: [ + { x: 11, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: null, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: true + }, + { + id: 'c_002', + worldId: 'world_c', + levelNumber: 2, + name: 'Prvé C-ka', + gameType: 'banik', + difficulty: 1, + words: ['palec', 'valec', 'cena', 'opica', 'cesta', 'polica', 'maco'], + gameConfig: { + diamonds: 1, + golds: 3, + crystals: 2, + speechExercises: 1, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 6, y: 10 }, + ], + golds: [ + { x: 2, y: 9 }, + { x: 7, y: 8 }, + { x: 10, y: 8 } + ], + crystals: [ + { x: 9, y: 7 }, + { x: 10, y: 12 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'c_001', + minStars: 1 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'c_003', + worldId: 'world_c', + levelNumber: 3, + name: 'Prvé C-ka', + gameType: 'banik', + difficulty: 1, + words: ['palec', 'valec', 'cena', 'opica', 'cesta', 'polica', 'maco'], + gameConfig: { + diamonds: 3, + golds: 5, + crystals: 1, + speechExercises: 1, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 8 }, + { x: 12, y: 7 }, + { x: 10, y: 12 } + ], + golds: [ + { x: 2, y: 9 }, + { x: 7, y: 8 }, + { x: 14, y: 9 }, + { x: 9, y: 10 }, + { x: 10, y: 12 } + ], + crystals: [ + { x: 1, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'c_002', + minStars: 2 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'c_004', + worldId: 'world_c', + levelNumber: 4, + name: 'Prvé C-ka', + gameType: 'banik', + difficulty: 1, + words: ['palec', 'valec', 'cena', 'opica', 'cesta', 'polica', 'maco', 'cesto'], + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 2, + speechExercises: 2, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 8 }, + { x: 10, y: 7 }, + { x: 9, y: 14 } + ], + golds: [ + { x: 3, y: 9 }, + { x: 7, y: 8 }, + { x: 14, y: 6 } + ], + crystals: [ + { x: 4, y: 12 }, + { x: 7, y: 11 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'c_003', + minStars: 3 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'c_005', + worldId: 'worldc', + levelNumber: 5, + name: 'Prvé C-čka', + gameType: 'banik', + difficulty: 2, + words: ['cesta', 'polica', 'maco', 'cesto', 'citrón'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 4, + speechExercises: 2, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 13, y: 8 }, + { x: 9, y: 10 }, + { x: 1, y: 14 } + ], + golds: [ + { x: 0, y: 9 }, + { x: 3, y: 10 }, + { x: 7, y: 8 } + ], + crystals: [ + { x: 2, y: 10 }, + { x: 6, y: 12 }, + { x: 14, y: 14 }, + { x: 8, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'c_004', + minStars: 4 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'c_006', + worldId: 'world_c', + levelNumber: 6, + name: 'Prvé C-čka', + gameType: 'banik', + difficulty: 2, + words: ['palec', 'valec', 'cena', 'opica', 'cesta', 'polica', 'maco', 'cesto', 'citrón'], + gameConfig: { + diamonds: 3, + golds: 5, + crystals: 2, + speechExercises: 3, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 7 }, + { x: 10, y: 7 }, + { x: 2, y: 14 } + ], + golds: [ + { x: 1, y: 9 }, + { x: 10, y: 10 }, + { x: 6, y: 7 }, + { x: 3, y: 15 }, + { x: 15, y: 12 } + ], + crystals: [ + { x: 7, y: 11 }, + { x: 10, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'c_005', + minStars: 5 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'c_007', + worldId: 'world_c', + levelNumber: 7, + name: 'Prvé C-čka', + gameType: 'banik', + difficulty: 2, + words: ['polica', 'maco', 'cesto', 'citrón', 'cirkus', 'cukor', 'pec'], + gameConfig: { + diamonds: 2, + golds: 2, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 0, y: 10 }, + { x: 14, y: 14 } + ], + golds: [ + { x: 5, y: 8 }, + { x: 7, y: 12 } + ], + crystals: [ + { x: 10, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'c_006', + minStars: 6 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'c_008', + worldId: 'world_c', + levelNumber: 8, + name: 'Prvé C-čka', + gameType: 'banik', + difficulty: 2, + words: ['palec', 'valec', 'cena', 'opica', 'cesta', 'polica', 'maco', 'cesto', 'citrón', 'cirkus', 'cukor', 'pec'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 10, y: 6 }, + { x: 6, y: 14 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 8, y: 12 }, + { x: 1, y: 7 } + ], + crystals: [ + { x: 9, y: 15 }, + { x: 14, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'c_007', + minStars: 7 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'c_009', + worldId: 'world_c', + levelNumber: 9, + name: 'Prvé C-čka', + gameType: 'banik', + difficulty: 3, + words: ['palec', 'valec', 'cena', 'opica', 'cesta', 'polica', 'maco', 'cesto', 'citrón', 'cirkus', 'cukor', 'pec'], + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 1, + speechExercises: 3, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 10 }, + { x: 10, y: 14 }, + { x: 2, y: 9 } + ], + golds: [ + { x: 7, y: 11 }, + { x: 12, y: 12 }, + { x: 0, y: 7 } + ], + crystals: [ + { x: 9, y: 11 }, + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'c_008', + minStars: 10 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'c_010', + worldId: 'world_c', + levelNumber: 10, + name: 'Prvé C-čka', + gameType: 'banik', + difficulty: 3, + words: ['palec', 'valec', 'cena', 'opica', 'cesta', 'polica', 'maco', 'cesto', 'citrón', 'cirkus', 'cukor', 'pec'], + gameConfig: { + diamonds: 4, + golds: 6, + crystals: 1, + speechExercises: 3, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 6 }, + { x: 10, y: 14 }, + { x: 6, y: 8 }, + { x: 0, y: 10 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 12, y: 12 }, + { x: 1, y: 9 }, + { x: 3, y: 8 }, + { x: 5, y: 11 } + ], + crystals: [ + { x: 14, y: 10 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'c_009', + minStars: 11 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'c_011', + worldId: 'world_c', + levelNumber: 11, + name: 'Prvé Cka', + gameType: 'banik', + difficulty: 3, + words: ['palec', 'valec', 'cirkus', 'cukor', 'pec', 'facka', 'cap', 'cicavec'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 2, + speechExercises: 3, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 15, y: 14 }, + { x: 12, y: 15 }, + { x: 3, y: 12 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 4, y: 15 }, + { x: 5, y: 10 } + ], + crystals: [ + { x: 9, y: 13 }, + { x: 6, y: 7 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'c_010', + minStars: 12 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'c_012', + worldId: 'world_c', + levelNumber: 12, + name: 'Prvé C-čka', + gameType: 'banik', + difficulty: 3, + words: ['palec', 'valec', 'cena', 'opica', 'cesta', 'polica', 'maco', 'cesto', 'citrón', 'cirkus', 'cukor', 'pec', 'facka', 'cap', 'cicavec'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 7 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 6, y: 9 }, + { x: 7, y: 11 }, + { x: 14, y: 12 }, + { x: 4, y: 10 } + ], + crystals: [ + { x: 9, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'c_011', + minStars: 13 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'c_013', + worldId: 'world_c', + levelNumber: 13, + name: 'Prvé C-čka', + gameType: 'banik', + difficulty: 4, + words: ['palec', 'valec', 'cena', 'opica', 'cesta', 'polica', 'maco', 'cesto', 'citrón', 'cirkus', 'cukor', 'pec', 'facka', 'cap', 'cicavec', 'cop'], + gameConfig: { + diamonds: 5, + golds: 3, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 9, y: 11 }, + { x: 10, y: 14 }, + { x: 5, y: 9 }, + { x: 0, y: 10 } + ], + golds: [ + { x: 14, y: 9 }, // gold na pozícii 2,9 + { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 2, y: 6 } + ], + crystals: [ + { x: 3, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'c_012', + minStars: 14 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'c_014', + worldId: 'world_c', + levelNumber: 14, + name: 'Prvé C-čka', + gameType: 'banik', + difficulty: 4, + words: ['palec', 'valec', 'cena', 'opica', 'cesta', 'polica', 'maco', 'cesto', 'citrón', 'cirkus', 'cukor', 'pec', 'facka', 'cap', 'cicavec', 'cop'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 10 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 10, y: 10 }, + { x: 0, y: 12 }, + { x: 6, y: 13 }, + { x: 14, y: 15 } + ], + crystals: [ + { x: 9, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'c_013', + minStars: 15 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'c_015', + worldId: 'world_c', + levelNumber: 15, + name: 'Prvé C-čka', + gameType: 'banik', + difficulty: 4, + words: ['palec', 'valec', 'cena', 'opica', 'cesta', 'polica', 'maco', 'cesto', 'citrón', 'cirkus', 'cukor', 'pec', 'facka', 'cap', 'cicavec', 'cop'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 8 }, + { x: 10, y: 10 } + ], + golds: [ + { x: 0, y: 11 }, + { x: 4, y: 9 }, + { x: 7, y: 15 }, + { x: 15, y: 13 } + ], + crystals: [ + { x: 13, y: 12 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'c_014', + minStars: 16 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'c_016', + worldId: 'world_c', + levelNumber: 16, + name: 'Prvé C-čka', + gameType: 'banik', + difficulty: 5, + words: ['palec', 'valec', 'cena', 'opica', 'cesta', 'polica', 'maco', 'cesto', 'citrón', 'cirkus', 'cukor', 'pec', 'facka', 'cap', 'cicavec', 'cop'], + gameConfig: { + diamonds: 5, + golds: 6, + crystals: 2, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 0, y: 8 }, + { x: 12, y: 10 }, + { x: 9, y: 12 }, + { x: 4, y: 13 }, + { x: 15, y: 15 } + ], + golds: [ + { x: 1, y: 8 }, + { x: 2, y: 15 }, + { x: 5, y: 13 }, + { x: 7, y: 9 }, + { x: 6, y: 15 }, + { x: 13, y: 7 } + ], + crystals: [ + { x: 10, y: 11 }, + { x: 2, y: 10 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'c_015', + minStars: 20 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + ], + world_sh: [ + { + id: 'sh_001', + worldId: 'world_sh', + levelNumber: 1, + name: 'Prvé Š-ka', + gameType: 'banik', + difficulty: 1, + words: ['šum', 'šunka', 'šupka'], + gameConfig: { + diamonds: 1, + golds: 3, + crystals: 1, + speechExercises: 1, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 12, y: 7 } + ], + golds: [ + { x: 2, y: 9 }, + { x: 5, y: 10 }, + { x: 10, y: 13 }, + ], + crystals: [ + { x: 11, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: null, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: true + }, + { + id: 'sh_002', + worldId: 'world_sh', + levelNumber: 2, + name: 'Prvé Š-ka', + gameType: 'banik', + difficulty: 1, + words: ['šum', 'šunka', 'šupka', 'šošovka'], + gameConfig: { + diamonds: 1, + golds: 3, + crystals: 2, + speechExercises: 1, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 6, y: 10 }, + ], + golds: [ + { x: 2, y: 9 }, + { x: 7, y: 8 }, + { x: 10, y: 8 } + ], + crystals: [ + { x: 9, y: 7 }, + { x: 10, y: 12 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'sh_001', + minStars: 1 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'sh_003', + worldId: 'world_sh', + levelNumber: 3, + name: 'Prvé Š-ka', + gameType: 'banik', + difficulty: 1, + words: ['šum', 'šunka', 'šupka', 'šošovka', 'šaty', 'myš'], + gameConfig: { + diamonds: 3, + golds: 5, + crystals: 1, + speechExercises: 1, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 8 }, + { x: 12, y: 7 }, + { x: 10, y: 12 } + ], + golds: [ + { x: 2, y: 9 }, + { x: 7, y: 8 }, + { x: 14, y: 9 }, + { x: 9, y: 10 }, + { x: 10, y: 12 } + ], + crystals: [ + { x: 1, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'sh_002', + minStars: 2 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'sh_004', + worldId: 'world_sh', + levelNumber: 4, + name: 'Prvé Š-ka', + gameType: 'banik', + difficulty: 1, + words: ['šum', 'šunka', 'šupka', 'šošovka', 'šaty', 'myš'], + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 2, + speechExercises: 2, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 8 }, + { x: 10, y: 7 }, + { x: 9, y: 14 } + ], + golds: [ + { x: 3, y: 9 }, + { x: 7, y: 8 }, + { x: 14, y: 6 } + ], + crystals: [ + { x: 4, y: 12 }, + { x: 7, y: 11 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'sh_003', + minStars: 3 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'sh_005', + worldId: 'world_sh', + levelNumber: 5, + name: 'Prvé C-čka', + gameType: 'banik', + difficulty: 2, + words: ['šum', 'šunka', 'šupka', 'šošovka', 'šaty', 'škola', 'špagety', 'myš'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 4, + speechExercises: 2, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 13, y: 8 }, + { x: 9, y: 10 }, + { x: 1, y: 14 } + ], + golds: [ + { x: 0, y: 9 }, + { x: 3, y: 10 }, + { x: 7, y: 8 } + ], + crystals: [ + { x: 2, y: 10 }, + { x: 6, y: 12 }, + { x: 14, y: 14 }, + { x: 8, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'sh_004', + minStars: 4 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'sh_006', + worldId: 'world_sh', + levelNumber: 6, + name: 'Prvé Š-čka', + gameType: 'banik', + difficulty: 2, + words: ['šum', 'šunka', 'šupka', 'šošovka', 'šaty', 'škola', 'špagety', 'šport', 'šašo', 'myš'], + gameConfig: { + diamonds: 3, + golds: 5, + crystals: 2, + speechExercises: 3, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 7 }, + { x: 10, y: 7 }, + { x: 2, y: 14 } + ], + golds: [ + { x: 1, y: 9 }, + { x: 10, y: 10 }, + { x: 6, y: 7 }, + { x: 3, y: 15 }, + { x: 15, y: 12 } + ], + crystals: [ + { x: 7, y: 11 }, + { x: 10, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'sh_005', + minStars: 5 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'sh_007', + worldId: 'world_sh', + levelNumber: 7, + name: 'Prvé Š-čka', + gameType: 'banik', + difficulty: 2, + words: ['šum', 'šunka', 'šupka', 'šošovka', 'šaty', 'šibačka', 'šarkan', 'škola', 'kôš', 'guláš', 'myš', 'mikuláš'], + gameConfig: { + diamonds: 2, + golds: 2, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 0, y: 10 }, + { x: 14, y: 14 } + ], + golds: [ + { x: 5, y: 8 }, + { x: 7, y: 12 } + ], + crystals: [ + { x: 10, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'sh_006', + minStars: 6 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'sh_008', + worldId: 'world_sh', + levelNumber: 8, + name: 'Prvé Š-čka', + gameType: 'banik', + difficulty: 2, + words: ['šum', 'šunka', 'šupka', 'šošovka', 'šaty', 'šibačka', 'šarkan', 'škola', 'špagety', 'šport', 'šašo', 'šiška', 'taška', 'kôš', 'guláš', 'myš', 'mikuláš'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 10, y: 6 }, + { x: 6, y: 14 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 8, y: 12 }, + { x: 1, y: 7 } + ], + crystals: [ + { x: 9, y: 15 }, + { x: 14, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'sh_007', + minStars: 7 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'sh_009', + worldId: 'world_sh', + levelNumber: 9, + name: 'Prvé Š-čka', + gameType: 'banik', + difficulty: 3, + words: [ 'Lukáš', 'vešiak', 'kaša', 'šiška', 'taška', 'kôš', 'guláš', 'myš', 'mikuláš'], + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 1, + speechExercises: 3, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 10 }, + { x: 10, y: 14 }, + { x: 2, y: 9 } + ], + golds: [ + { x: 7, y: 11 }, + { x: 12, y: 12 }, + { x: 0, y: 7 } + ], + crystals: [ + { x: 9, y: 11 }, + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'sh_008', + minStars: 10 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'sh_010', + worldId: 'world_sh', + levelNumber: 10, + name: 'Prvé Š-čka', + gameType: 'banik', + difficulty: 3, + words: ['špagety', 'šport', 'šašo', 'šach', 'šatka', 'šípka', 'šofér', 'Lukáš', 'vešiak', 'kaša', 'šiška', 'taška', 'kôš', 'guláš', 'myš', 'mikuláš'], + gameConfig: { + diamonds: 4, + golds: 6, + crystals: 1, + speechExercises: 3, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 6 }, + { x: 10, y: 14 }, + { x: 6, y: 8 }, + { x: 0, y: 10 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 12, y: 12 }, + { x: 1, y: 9 }, + { x: 3, y: 8 }, + { x: 5, y: 11 } + ], + crystals: [ + { x: 14, y: 10 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'sh_009', + minStars: 11 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'sh_011', + worldId: 'world_sh', + levelNumber: 11, + name: 'Prvé Ška', + gameType: 'banik', + difficulty: 3, + words: ['škola', 'špagety', 'šport', 'šašo', 'šach', 'šatka', 'šípka', 'šofér', 'Lukáš', 'vešiak', 'kaša', 'šiška', 'taška', 'kôš', 'guláš', 'myš', 'mikuláš'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 2, + speechExercises: 3, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 15, y: 14 }, + { x: 12, y: 15 }, + { x: 3, y: 12 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 4, y: 15 }, + { x: 5, y: 10 } + ], + crystals: [ + { x: 9, y: 13 }, + { x: 6, y: 7 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'sh_010', + minStars: 12 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'sh_012', + worldId: 'world_sh', + levelNumber: 12, + name: 'Prvé Š-čka', + gameType: 'banik', + difficulty: 3, + words: ['šum', 'šunka', 'šupka', 'šošovka', 'šaty', 'šibačka', 'šarkan', 'škola', 'špagety', 'šport', 'šašo', 'šach', 'šatka', 'šípka', 'šofér', 'Lukáš', 'vešiak', 'kaša', 'šiška'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 7 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 6, y: 9 }, + { x: 7, y: 11 }, + { x: 14, y: 12 }, + { x: 4, y: 10 } + ], + crystals: [ + { x: 9, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'sh_011', + minStars: 13 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'sh_013', + worldId: 'world_sh', + levelNumber: 13, + name: 'Prvé Š-čka', + gameType: 'banik', + difficulty: 4, + words: ['šum', 'šunka', 'šupka', 'šošovka', 'šaty', 'šibačka', 'šarkan', 'škola', 'špagety', 'šport', 'šašo', 'šach', 'šatka', 'šípka', 'šofér', 'Lukáš', 'vešiak', 'kaša', 'šiška', 'taška'], + gameConfig: { + diamonds: 5, + golds: 3, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 9, y: 11 }, + { x: 10, y: 14 }, + { x: 5, y: 9 }, + { x: 0, y: 10 } + ], + golds: [ + { x: 14, y: 9 }, // gold na pozícii 2,9 + { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 2, y: 6 } + ], + crystals: [ + { x: 3, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'sh_012', + minStars: 14 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'sh_014', + worldId: 'world_sh', + levelNumber: 14, + name: 'Prvé Š-čka', + gameType: 'banik', + difficulty: 4, + words: [ 'šarkan', 'škola', 'špagety', 'šport', 'šašo', 'šach', 'šatka', 'šípka', 'šofér', 'kaša', 'šiška', 'taška', 'kôš', 'guláš', 'myš', 'mikuláš'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 10 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 10, y: 10 }, + { x: 0, y: 12 }, + { x: 6, y: 13 }, + { x: 14, y: 15 } + ], + crystals: [ + { x: 9, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'sh_013', + minStars: 15 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'sh_015', + worldId: 'world_sh', + levelNumber: 15, + name: 'Prvé Š-čka', + gameType: 'banik', + difficulty: 4, + words: [ 'šaty', 'šibačka', 'šarkan', 'škola', 'špagety', 'šport', 'šašo', 'šach', 'šatka', 'šípka', 'šofér', 'Lukáš', 'vešiak', 'kaša', 'šiška', 'taška', 'kôš', 'guláš', 'myš', 'mikuláš'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 8 }, + { x: 10, y: 10 } + ], + golds: [ + { x: 0, y: 11 }, + { x: 4, y: 9 }, + { x: 7, y: 15 }, + { x: 15, y: 13 } + ], + crystals: [ + { x: 13, y: 12 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'sh_014', + minStars: 16 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'sh_016', + worldId: 'world_sh', + levelNumber: 16, + name: 'Prvé Š-čka', + gameType: 'banik', + difficulty: 5, + words: ['šum', 'šunka', 'šupka', 'šošovka', 'šaty', 'šibačka', 'šarkan', 'škola', 'špagety', 'šport', 'šašo', 'šach', 'šatka', 'šípka', 'šofér', 'Lukáš', 'vešiak', 'kaša', 'šiška', 'taška', 'kôš', 'guláš', 'myš', 'mikuláš'], + gameConfig: { + diamonds: 5, + golds: 6, + crystals: 2, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 0, y: 8 }, + { x: 12, y: 10 }, + { x: 9, y: 12 }, + { x: 4, y: 13 }, + { x: 15, y: 15 } + ], + golds: [ + { x: 1, y: 8 }, + { x: 2, y: 15 }, + { x: 5, y: 13 }, + { x: 7, y: 9 }, + { x: 6, y: 15 }, + { x: 13, y: 7 } + ], + crystals: [ + { x: 10, y: 11 }, + { x: 2, y: 10 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'sh_015', + minStars: 20 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + ], + world_zh: [ + { + id: 'zh_001', + worldId: 'world_zh', + levelNumber: 1, + name: 'Prvé Ž-ka', + gameType: 'banik', + difficulty: 1, + words: ['žula', 'nožík'], + gameConfig: { + diamonds: 1, + golds: 3, + crystals: 1, + speechExercises: 1, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 12, y: 7 } + ], + golds: [ + { x: 2, y: 9 }, + { x: 5, y: 10 }, + { x: 10, y: 13 }, + ], + crystals: [ + { x: 11, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: null, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: true + }, + { + id: 'zh_002', + worldId: 'world_zh', + levelNumber: 2, + name: 'Prvé Ž-ka', + gameType: 'banik', + difficulty: 1, + words: ['žula', 'nožík', 'koža', 'žaba'], + gameConfig: { + diamonds: 1, + golds: 3, + crystals: 2, + speechExercises: 1, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 6, y: 10 }, + ], + golds: [ + { x: 2, y: 9 }, + { x: 7, y: 8 }, + { x: 10, y: 8 } + ], + crystals: [ + { x: 9, y: 7 }, + { x: 10, y: 12 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'zh_001', + minStars: 1 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'zh_003', + worldId: 'world_zh', + levelNumber: 3, + name: 'Prvé Ž-ka', + gameType: 'banik', + difficulty: 1, + words: ['žula', 'nožík', 'koža', 'žaba' , 'žena'], + gameConfig: { + diamonds: 3, + golds: 5, + crystals: 1, + speechExercises: 1, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 8 }, + { x: 12, y: 7 }, + { x: 10, y: 12 } + ], + golds: [ + { x: 2, y: 9 }, + { x: 7, y: 8 }, + { x: 14, y: 9 }, + { x: 9, y: 10 }, + { x: 10, y: 12 } + ], + crystals: [ + { x: 1, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'zh_002', + minStars: 2 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'zh_004', + worldId: 'world_zh', + levelNumber: 4, + name: 'Prvé Ž-ka', + gameType: 'banik', + difficulty: 1, + words: ['žula', 'nožík', 'koža', 'žaba' , 'žena', 'železo'], + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 2, + speechExercises: 2, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 8 }, + { x: 10, y: 7 }, + { x: 9, y: 14 } + ], + golds: [ + { x: 3, y: 9 }, + { x: 7, y: 8 }, + { x: 14, y: 6 } + ], + crystals: [ + { x: 4, y: 12 }, + { x: 7, y: 11 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'zh_003', + minStars: 3 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'zh_005', + worldId: 'world_zh', + levelNumber: 5, + name: 'Prvé Ž-čka', + gameType: 'banik', + difficulty: 2, + words: ['žula', 'nožík', 'koža', 'žaba' , 'žena', 'železo', 'pyžamo'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 4, + speechExercises: 2, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 13, y: 8 }, + { x: 9, y: 10 }, + { x: 1, y: 14 } + ], + golds: [ + { x: 0, y: 9 }, + { x: 3, y: 10 }, + { x: 7, y: 8 } + ], + crystals: [ + { x: 2, y: 10 }, + { x: 6, y: 12 }, + { x: 14, y: 14 }, + { x: 8, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'zh_004', + minStars: 4 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'zh_006', + worldId: 'world_zh', + levelNumber: 6, + name: 'Prvé Ž-čka', + gameType: 'banik', + difficulty: 2, + words: ['žula', 'nožík', 'koža', 'žaba' , 'žena', 'železo', 'pyžamo', 'bežať', 'žiletka'], + gameConfig: { + diamonds: 3, + golds: 5, + crystals: 2, + speechExercises: 3, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 7 }, + { x: 10, y: 7 }, + { x: 2, y: 14 } + ], + golds: [ + { x: 1, y: 9 }, + { x: 10, y: 10 }, + { x: 6, y: 7 }, + { x: 3, y: 15 }, + { x: 15, y: 12 } + ], + crystals: [ + { x: 7, y: 11 }, + { x: 10, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'zh_005', + minStars: 5 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'zh_007', + worldId: 'world_zh', + levelNumber: 7, + name: 'Prvé Ž-čka', + gameType: 'banik', + difficulty: 2, + words: ['žula', 'nožík', 'koža', 'žaba' , 'žena', 'železo', 'pyžamo', 'ležať', 'bežať', 'žiletka', 'žolík'], + gameConfig: { + diamonds: 2, + golds: 2, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 0, y: 10 }, + { x: 14, y: 14 } + ], + golds: [ + { x: 5, y: 8 }, + { x: 7, y: 12 } + ], + crystals: [ + { x: 10, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'zh_006', + minStars: 6 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'zh_008', + worldId: 'world_zh', + levelNumber: 8, + name: 'Prvé Ž-čka', + gameType: 'banik', + difficulty: 2, + words: ['žula', 'nožík', 'koža', 'žaba' , 'žena', 'železo', 'pyžamo', 'ležať', 'bežať', 'žiletka', 'žatva'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 10, y: 6 }, + { x: 6, y: 14 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 8, y: 12 }, + { x: 1, y: 7 } + ], + crystals: [ + { x: 9, y: 15 }, + { x: 14, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'zh_007', + minStars: 7 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'zh_009', + worldId: 'world_zh', + levelNumber: 9, + name: 'Prvé Ž-čka', + gameType: 'banik', + difficulty: 3, + words: ['koža', 'žaba' , 'žena', 'železo', 'pyžamo', 'žatva', 'žaluď', 'ruža'], + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 1, + speechExercises: 3, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 10 }, + { x: 10, y: 14 }, + { x: 2, y: 9 } + ], + golds: [ + { x: 7, y: 11 }, + { x: 12, y: 12 }, + { x: 0, y: 7 } + ], + crystals: [ + { x: 9, y: 11 }, + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'zh_008', + minStars: 10 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'zh_010', + worldId: 'world_zh', + levelNumber: 10, + name: 'Prvé Ž-čka', + gameType: 'banik', + difficulty: 3, + words: ['žula', 'nožík', 'koža', 'žaba' , 'žena', 'železo', 'pyžamo', 'žobrák', 'žralok', 'žehlička', 'ležať'], + gameConfig: { + diamonds: 4, + golds: 6, + crystals: 1, + speechExercises: 3, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 6 }, + { x: 10, y: 14 }, + { x: 6, y: 8 }, + { x: 0, y: 10 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 12, y: 12 }, + { x: 1, y: 9 }, + { x: 3, y: 8 }, + { x: 5, y: 11 } + ], + crystals: [ + { x: 14, y: 10 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'zh_009', + minStars: 11 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'zh_011', + worldId: 'world_zh', + levelNumber: 11, + name: 'Prvé Žka', + gameType: 'banik', + difficulty: 3, + words: ['žaba', 'žena', 'železo', 'pyžamo', 'žobrák', 'žralok', 'žehliť', 'ležať', 'bežať', 'žiletka', 'žuť', 'žolík', 'žatva'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 2, + speechExercises: 3, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 15, y: 14 }, + { x: 12, y: 15 }, + { x: 3, y: 12 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 4, y: 15 }, + { x: 5, y: 10 } + ], + crystals: [ + { x: 9, y: 13 }, + { x: 6, y: 7 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'zh_010', + minStars: 12 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'zh_012', + worldId: 'world_zh', + levelNumber: 12, + name: 'Prvé Ž-čka', + gameType: 'banik', + difficulty: 3, + words: ['žaba', 'žena', 'železo', 'pyžamo', 'žobrák', 'žralok', 'žehliť', 'ležať', 'bežať', 'žiletka', 'žuť', 'žolík', 'žatva'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 7 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 6, y: 9 }, + { x: 7, y: 11 }, + { x: 14, y: 12 }, + { x: 4, y: 10 } + ], + crystals: [ + { x: 9, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'zh_011', + minStars: 13 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'zh_013', + worldId: 'world_zh', + levelNumber: 13, + name: 'Prvé Ž-čka', + gameType: 'banik', + difficulty: 4, + words: ['koža', 'žaba' , 'žena', 'železo', 'pyžamo', 'žobrák', 'žralok', 'žehliť', 'ležať', 'bežať', 'žiletka', 'žuť', 'žolík', 'žatva', 'žaluď'], + gameConfig: { + diamonds: 5, + golds: 3, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 9, y: 11 }, + { x: 10, y: 14 }, + { x: 5, y: 9 }, + { x: 0, y: 10 } + ], + golds: [ + { x: 14, y: 9 }, // gold na pozícii 2,9 + { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 2, y: 6 } + ], + crystals: [ + { x: 3, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'zh_012', + minStars: 14 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'zh_014', + worldId: 'world_sh', + levelNumber: 14, + name: 'Prvé Š-čka', + gameType: 'banik', + difficulty: 4, + words: ['koža', 'žaba' , 'žena', 'železo', 'pyžamo', 'žobrák', 'žralok', 'žehliť', 'ležať', 'bežať', 'žiletka', 'žuť', 'žolík', 'žatva', 'žaluď'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 10 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 10, y: 10 }, + { x: 0, y: 12 }, + { x: 6, y: 13 }, + { x: 14, y: 15 } + ], + crystals: [ + { x: 9, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'zh_013', + minStars: 15 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'zh_015', + worldId: 'world_zh', + levelNumber: 15, + name: 'Prvé Ž-čka', + gameType: 'banik', + difficulty: 4, + words: ['žena', 'železo', 'pyžamo', 'žobrák', 'žralok', 'žehliť', 'ležať', 'bežať', 'žiletka', 'žuť', 'žolík', 'žatva', 'žaluď', 'ruža', 'žuvačka'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 8 }, + { x: 10, y: 10 } + ], + golds: [ + { x: 0, y: 11 }, + { x: 4, y: 9 }, + { x: 7, y: 15 }, + { x: 15, y: 13 } + ], + crystals: [ + { x: 13, y: 12 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'zh_014', + minStars: 16 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'zh_016', + worldId: 'world_zh', + levelNumber: 16, + name: 'Prvé Ž-čka', + gameType: 'banik', + difficulty: 5, + words: ['žula', 'nožík', 'koža', 'žaba' , 'žena', 'železo', 'pyžamo', 'žobrák', 'jazdec', 'žralok', 'žehliť', 'ležať', 'bežať', 'žiletka', 'žuť', 'žolík', 'žatva', 'žaluď', 'ruža', 'žuvačka', 'žriebä'], + gameConfig: { + diamonds: 5, + golds: 6, + crystals: 2, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 0, y: 8 }, + { x: 12, y: 10 }, + { x: 9, y: 12 }, + { x: 4, y: 13 }, + { x: 15, y: 15 } + ], + golds: [ + { x: 1, y: 8 }, + { x: 2, y: 15 }, + { x: 5, y: 13 }, + { x: 7, y: 9 }, + { x: 6, y: 15 }, + { x: 13, y: 7 } + ], + crystals: [ + { x: 10, y: 11 }, + { x: 2, y: 10 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'zh_015', + minStars: 20 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + ], + world_dh: [ + { + id: 'dh_001', + worldId: 'world_dh', + levelNumber: 1, + name: 'Prvé Ď-ka', + gameType: 'banik', + difficulty: 1, + words: ['loď', 'meď', 'dážď', 'hruď'], + gameConfig: { + diamonds: 1, + golds: 3, + crystals: 1, + speechExercises: 1, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 12, y: 7 } + ], + golds: [ + { x: 2, y: 9 }, + { x: 5, y: 10 }, + { x: 10, y: 13 }, + ], + crystals: [ + { x: 11, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: null, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: true + }, + { + id: 'dh_002', + worldId: 'world_dh', + levelNumber: 2, + name: 'Prvé Ď', + gameType: 'banik', + difficulty: 2, + words: ['loď', 'meď', 'dážď', 'hruď', 'loďka', 'medveď'], + gameConfig: { + diamonds: 1, + golds: 3, + crystals: 2, + speechExercises: 1, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 6, y: 10 }, + ], + golds: [ + { x: 2, y: 9 }, + { x: 7, y: 8 }, + { x: 10, y: 8 } + ], + crystals: [ + { x: 9, y: 7 }, + { x: 10, y: 12 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'dh_001', + minStars: 1 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'dh_003', + worldId: 'world_dh', + levelNumber: 3, + name: 'Prvé Ď-ka', + gameType: 'banik', + difficulty: 1, + words: ['loď', 'meď', 'dážď', 'hruď', 'loďka', 'medveď', 'ďasno'], + gameConfig: { + diamonds: 3, + golds: 5, + crystals: 1, + speechExercises: 1, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 8 }, + { x: 12, y: 7 }, + { x: 10, y: 12 } + ], + golds: [ + { x: 2, y: 9 }, + { x: 7, y: 8 }, + { x: 14, y: 9 }, + { x: 9, y: 10 }, + { x: 10, y: 12 } + ], + crystals: [ + { x: 1, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'dh_002', + minStars: 2 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'dh_004', + worldId: 'world_dh', + levelNumber: 4, + name: 'Prvé Ď-ka', + gameType: 'banik', + difficulty: 1, + words: ['loď', 'meď', 'dážď', 'hruď', 'loďka', 'medveď', 'ďasno', 'ďateľ'], + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 2, + speechExercises: 2, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 8 }, + { x: 10, y: 7 }, + { x: 9, y: 14 } + ], + golds: [ + { x: 3, y: 9 }, + { x: 7, y: 8 }, + { x: 14, y: 6 } + ], + crystals: [ + { x: 4, y: 12 }, + { x: 7, y: 11 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'dh_003', + minStars: 3 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'dh_005', + worldId: 'world_dh', + levelNumber: 5, + name: 'Prvé Ď-čka', + gameType: 'banik', + difficulty: 2, + words: ['loď', 'meď', 'dážď', 'hruď', 'loďka', 'medveď', 'ďakujem'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 4, + speechExercises: 2, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 13, y: 8 }, + { x: 9, y: 10 }, + { x: 1, y: 14 } + ], + golds: [ + { x: 0, y: 9 }, + { x: 3, y: 10 }, + { x: 7, y: 8 } + ], + crystals: [ + { x: 2, y: 10 }, + { x: 6, y: 12 }, + { x: 14, y: 14 }, + { x: 8, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'dh_004', + minStars: 4 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'dh_006', + worldId: 'world_dh', + levelNumber: 6, + name: 'Prvé Ď-čka', + gameType: 'banik', + difficulty: 2, + words: ['loď', 'meď', 'dážď', 'hruď', 'loďka', 'medveď', 'ďasno', 'ďateľ', 'ďakujem', 'ďumbier', 'žaluď'], + gameConfig: { + diamonds: 3, + golds: 5, + crystals: 2, + speechExercises: 3, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 7 }, + { x: 10, y: 7 }, + { x: 2, y: 14 } + ], + golds: [ + { x: 1, y: 9 }, + { x: 10, y: 10 }, + { x: 6, y: 7 }, + { x: 3, y: 15 }, + { x: 15, y: 12 } + ], + crystals: [ + { x: 7, y: 11 }, + { x: 10, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'dh_005', + minStars: 5 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'dh_007', + worldId: 'world_dh', + levelNumber: 7, + name: 'Prvé Ď-čka', + gameType: 'banik', + difficulty: 2, + words: ['loď', 'meď', 'dážď', 'hruď', 'loďka', 'medveď', 'ďasno', 'ďateľ', + 'ďakujem', 'ďumbier', 'žaluď', 'ďalekohľad'], + gameConfig: { + diamonds: 2, + golds: 2, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 0, y: 10 }, + { x: 14, y: 14 } + ], + golds: [ + { x: 5, y: 8 }, + { x: 7, y: 12 } + ], + crystals: [ + { x: 10, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'dh_006', + minStars: 6 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'dh_008', + worldId: 'world_dh', + levelNumber: 8, + name: 'Prvé Ď-čka', + gameType: 'banik', + difficulty: 2, + words: ['loď', 'meď', 'dážď', 'hruď', 'loďka', 'medveď', 'ďasno', 'ďateľ', + 'ďakujem', 'ďumbier', 'žaluď', 'ďalekohľad', 'dedina', 'dedo' ], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 10, y: 6 }, + { x: 6, y: 14 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 8, y: 12 }, + { x: 1, y: 7 } + ], + crystals: [ + { x: 9, y: 15 }, + { x: 14, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'dh_007', + minStars: 7 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'dh_009', + worldId: 'world_dh', + levelNumber: 9, + name: 'Prvé Ď-čka', + gameType: 'banik', + difficulty: 3, + words: ['loď', 'meď', 'dážď', 'hruď', 'loďka', 'medveď', 'ďasno', 'ďateľ', + 'ďakujem', 'ďumbier', 'žaluď', 'ďalekohľad', 'dedina', 'dedo' ], + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 1, + speechExercises: 3, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 10 }, + { x: 10, y: 14 }, + { x: 2, y: 9 } + ], + golds: [ + { x: 7, y: 11 }, + { x: 12, y: 12 }, + { x: 0, y: 7 } + ], + crystals: [ + { x: 9, y: 11 }, + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'dh_008', + minStars: 10 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'dh_010', + worldId: 'world_dh', + levelNumber: 10, + name: 'Prvé Ď-čka', + gameType: 'banik', + difficulty: 3, + words: ['loď', 'meď', 'dážď', 'hruď', 'loďka', 'medveď', 'ďasno', 'ďateľ', + 'ďakujem', 'ďumbier', 'žaluď', 'ďalekohľad', 'dedina', 'dedo' ], + gameConfig: { + diamonds: 4, + golds: 6, + crystals: 1, + speechExercises: 3, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 6 }, + { x: 10, y: 14 }, + { x: 6, y: 8 }, + { x: 0, y: 10 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 12, y: 12 }, + { x: 1, y: 9 }, + { x: 3, y: 8 }, + { x: 5, y: 11 } + ], + crystals: [ + { x: 14, y: 10 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'dh_009', + minStars: 11 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'dh_011', + worldId: 'world_dh', + levelNumber: 11, + name: 'Prvé Ďka', + gameType: 'banik', + difficulty: 3, + words: ['loď', 'meď', 'dážď', 'hruď', 'loďka', 'medveď', 'ďasno', 'ďateľ', + 'ďakujem', 'ďumbier', 'žaluď', 'ďalekohľad', 'dedina', 'dedo', 'divák', 'dievča'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 2, + speechExercises: 3, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 15, y: 14 }, + { x: 12, y: 15 }, + { x: 3, y: 12 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 4, y: 15 }, + { x: 5, y: 10 } + ], + crystals: [ + { x: 9, y: 13 }, + { x: 6, y: 7 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'dh_010', + minStars: 12 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'dh_012', + worldId: 'world_dh', + levelNumber: 12, + name: 'Prvé Ď-čka', + gameType: 'banik', + difficulty: 3, + words: ['ďasno', 'ďateľ', + 'ďakujem', 'ďumbier', 'žaluď', 'ďalekohľad', 'dedina', 'dedo', 'divák', 'dievča', 'desať'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 7 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 6, y: 9 }, + { x: 7, y: 11 }, + { x: 14, y: 12 }, + { x: 4, y: 10 } + ], + crystals: [ + { x: 9, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'dh_011', + minStars: 13 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'dh_013', + worldId: 'world_dh', + levelNumber: 13, + name: 'Prvé Ď-čka', + gameType: 'banik', + difficulty: 4, + words: ['loď', 'meď', 'dážď', 'hruď', 'loďka', 'medveď', 'ďasno', 'ďateľ', + 'ďakujem', 'ďumbier', 'žaluď', 'ďalekohľad', 'dedina', 'dedo', 'divák', 'dievča', 'reďkovka'], + gameConfig: { + diamonds: 5, + golds: 3, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 9, y: 11 }, + { x: 10, y: 14 }, + { x: 5, y: 9 }, + { x: 0, y: 10 } + ], + golds: [ + { x: 14, y: 9 }, // gold na pozícii 2,9 + { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 2, y: 6 } + ], + crystals: [ + { x: 3, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'dh_012', + minStars: 14 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'dh_014', + worldId: 'world_dh', + levelNumber: 14, + name: 'Prvé Ď-čka', + gameType: 'banik', + difficulty: 4, + words: ['loď', 'meď', 'dážď', 'hruď', + 'ďakujem', 'ďumbier', 'žaluď', 'ďalekohľad', 'dedina', 'dedo', 'divák', 'dievča', 'reďkovka'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 10 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 10, y: 10 }, + { x: 0, y: 12 }, + { x: 6, y: 13 }, + { x: 14, y: 15 } + ], + crystals: [ + { x: 9, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'dh_013', + minStars: 15 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'dh_015', + worldId: 'world_dh', + levelNumber: 15, + name: 'Prvé Ď-čka', + gameType: 'banik', + difficulty: 4, + words: ['loď', 'meď', 'dážď', 'hruď', 'loďka', 'medveď', 'ďasno', 'ďateľ', + 'ďakujem', 'ďumbier', 'žaluď', 'ďalekohľad', 'dedina', 'dedo', 'divák', 'dievča', 'ďobnutie'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 8 }, + { x: 10, y: 10 } + ], + golds: [ + { x: 0, y: 11 }, + { x: 4, y: 9 }, + { x: 7, y: 15 }, + { x: 15, y: 13 } + ], + crystals: [ + { x: 13, y: 12 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'dh_014', + minStars: 16 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'dh_016', + worldId: 'world_dh', + levelNumber: 16, + name: 'Prvé Ď-čka', + gameType: 'banik', + difficulty: 5, + words: ['loď', 'meď', 'dážď', 'hruď', 'loďka', 'medveď', 'ďasno', 'ďateľ', + 'ďakujem', 'ďumbier', 'žaluď', 'ďalekohľad', 'dedina', 'dedo', 'divák', 'dievča', 'ďobnutie', 'vzducholoď', 'deti'], + gameConfig: { + diamonds: 5, + golds: 6, + crystals: 2, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 0, y: 8 }, + { x: 12, y: 10 }, + { x: 9, y: 12 }, + { x: 4, y: 13 }, + { x: 15, y: 15 } + ], + golds: [ + { x: 1, y: 8 }, + { x: 2, y: 15 }, + { x: 5, y: 13 }, + { x: 7, y: 9 }, + { x: 6, y: 15 }, + { x: 13, y: 7 } + ], + crystals: [ + { x: 10, y: 11 }, + { x: 2, y: 10 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'dh_015', + minStars: 20 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + ], + world_d: [ + { + id: 'd_001', + worldId: 'world_d', + levelNumber: 1, + name: 'Prvé D-ka', + gameType: 'banik', + difficulty: 1, + words: ['dom', 'dúha', 'donut', 'dym'], + gameConfig: { + diamonds: 1, + golds: 3, + crystals: 1, + speechExercises: 1, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 12, y: 7 } + ], + golds: [ + { x: 2, y: 9 }, + { x: 5, y: 10 }, + { x: 10, y: 13 }, + ], + crystals: [ + { x: 11, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: null, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: true + }, + { + id: 'd_002', + worldId: 'world_d', + levelNumber: 2, + name: 'Prvé D', + gameType: 'banik', + difficulty: 2, + words: ['dom', 'dúha', 'donut', 'dym', 'duch', 'doska'], + gameConfig: { + diamonds: 1, + golds: 3, + crystals: 2, + speechExercises: 1, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 6, y: 10 }, + ], + golds: [ + { x: 2, y: 9 }, + { x: 7, y: 8 }, + { x: 10, y: 8 } + ], + crystals: [ + { x: 9, y: 7 }, + { x: 10, y: 12 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'd_001', + minStars: 1 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'd_003', + worldId: 'world_d', + levelNumber: 3, + name: 'Prvé Ď-ka', + gameType: 'banik', + difficulty: 1, + words: ['dynamit', 'dúha', 'dáma', 'dym', 'duch', 'doska'], + gameConfig: { + diamonds: 3, + golds: 5, + crystals: 1, + speechExercises: 1, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 8 }, + { x: 12, y: 7 }, + { x: 10, y: 12 } + ], + golds: [ + { x: 2, y: 9 }, + { x: 7, y: 8 }, + { x: 14, y: 9 }, + { x: 9, y: 10 }, + { x: 10, y: 12 } + ], + crystals: [ + { x: 1, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'd_002', + minStars: 2 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'd_004', + worldId: 'world_d', + levelNumber: 4, + name: 'Prvé Ď-ka', + gameType: 'banik', + difficulty: 1, + words: ['dom', 'dúha', 'donut', 'dym', 'duch', 'doska', 'dynamit', 'dáma'], + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 2, + speechExercises: 2, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 8 }, + { x: 10, y: 7 }, + { x: 9, y: 14 } + ], + golds: [ + { x: 3, y: 9 }, + { x: 7, y: 8 }, + { x: 14, y: 6 } + ], + crystals: [ + { x: 4, y: 12 }, + { x: 7, y: 11 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'd_003', + minStars: 3 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'd_005', + worldId: 'world_d', + levelNumber: 5, + name: 'Prvé Ď-čka', + gameType: 'banik', + difficulty: 2, + words: ['dom', 'dúha', 'donut', 'dym', 'duch', 'doska', 'dynamit', 'dáma', 'dukát', 'disk', 'disketa'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 4, + speechExercises: 2, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 13, y: 8 }, + { x: 9, y: 10 }, + { x: 1, y: 14 } + ], + golds: [ + { x: 0, y: 9 }, + { x: 3, y: 10 }, + { x: 7, y: 8 } + ], + crystals: [ + { x: 2, y: 10 }, + { x: 6, y: 12 }, + { x: 14, y: 14 }, + { x: 8, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'd_004', + minStars: 4 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'd_006', + worldId: 'world_d', + levelNumber: 6, + name: 'Prvé Ď-čka', + gameType: 'banik', + difficulty: 2, + words: ['domov', 'doklad', 'dudlík', 'diamant', 'dom', 'dúha', 'donut', 'dym', 'duch', + 'doska', 'dynamit', 'dáma', 'dukát', 'disk', 'disketa'], + gameConfig: { + diamonds: 3, + golds: 5, + crystals: 2, + speechExercises: 3, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 7 }, + { x: 10, y: 7 }, + { x: 2, y: 14 } + ], + golds: [ + { x: 1, y: 9 }, + { x: 10, y: 10 }, + { x: 6, y: 7 }, + { x: 3, y: 15 }, + { x: 15, y: 12 } + ], + crystals: [ + { x: 7, y: 11 }, + { x: 10, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'd_005', + minStars: 5 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'd_007', + worldId: 'world_d', + levelNumber: 7, + name: 'Prvé Ď-čka', + gameType: 'banik', + difficulty: 2, + words: ['domov', 'doklad', 'dudlík', 'diamant', 'dom', 'dúha', 'donut', 'dym', 'duch', + 'doska', 'dynamit', 'dáma', 'dukát', 'disk', 'disketa'], + gameConfig: { + diamonds: 2, + golds: 2, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 0, y: 10 }, + { x: 14, y: 14 } + ], + golds: [ + { x: 5, y: 8 }, + { x: 7, y: 12 } + ], + crystals: [ + { x: 10, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'd_006', + minStars: 6 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'd_008', + worldId: 'world_d', + levelNumber: 8, + name: 'Prvé Ď-čka', + gameType: 'banik', + difficulty: 2, + words: ['domov', 'doklad', 'dudlík', 'diamant', 'delfín', 'dúha', 'donut', 'dym', 'duch'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 10, y: 6 }, + { x: 6, y: 14 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 8, y: 12 }, + { x: 1, y: 7 } + ], + crystals: [ + { x: 9, y: 15 }, + { x: 14, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'd_007', + minStars: 7 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'd_009', + worldId: 'world_d', + levelNumber: 9, + name: 'Prvé Ď-čka', + gameType: 'banik', + difficulty: 3, + words: ['domov', 'doklad', 'dudlík', 'diamant', 'dom', 'dúha', 'donut', 'dym', 'duch', + 'doska', 'dynamit', 'dáma', 'dukát', 'disk', 'disketa', 'delfín', 'dáždnik', 'dvere'], + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 1, + speechExercises: 3, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 10 }, + { x: 10, y: 14 }, + { x: 2, y: 9 } + ], + golds: [ + { x: 7, y: 11 }, + { x: 12, y: 12 }, + { x: 0, y: 7 } + ], + crystals: [ + { x: 9, y: 11 }, + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'd_008', + minStars: 10 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'd_010', + worldId: 'world_d', + levelNumber: 10, + name: 'Prvé Ď-čka', + gameType: 'banik', + difficulty: 3, + words: ['domov', 'doklad', 'dudlík', + 'doska', 'dynamit', 'dáma', 'drak', 'disk', 'disketa', 'delfín', 'dáždnik', 'dvere' ], + gameConfig: { + diamonds: 4, + golds: 6, + crystals: 1, + speechExercises: 3, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 6 }, + { x: 10, y: 14 }, + { x: 6, y: 8 }, + { x: 0, y: 10 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 12, y: 12 }, + { x: 1, y: 9 }, + { x: 3, y: 8 }, + { x: 5, y: 11 } + ], + crystals: [ + { x: 14, y: 10 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'd_009', + minStars: 11 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'd_011', + worldId: 'world_d', + levelNumber: 11, + name: 'Prvé Ďka', + gameType: 'banik', + difficulty: 3, + words: ['domov', 'doklad', 'dudlík', 'diamant', 'dom', 'dúha', 'donut', 'dym', 'duch', + 'doska', 'dynamit', 'dáma', 'dukát', 'disk', 'disketa', 'delfín', 'dáždnik', 'dvere', 'drak'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 2, + speechExercises: 3, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 15, y: 14 }, + { x: 12, y: 15 }, + { x: 3, y: 12 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 4, y: 15 }, + { x: 5, y: 10 } + ], + crystals: [ + { x: 9, y: 13 }, + { x: 6, y: 7 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'd_010', + minStars: 12 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'd_012', + worldId: 'world_d', + levelNumber: 12, + name: 'Prvé Ď-čka', + gameType: 'banik', + difficulty: 3, + words: ['domov', 'doklad', 'dudlík', 'diamant', 'dom', 'dúha', 'donut', 'dym', 'duch', + 'doska', 'dynamit', 'dáma', 'dukát', 'disk', 'disketa', 'delfín', 'dáždnik', 'dvere', + 'drak', 'drevo', 'diera'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 7 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 6, y: 9 }, + { x: 7, y: 11 }, + { x: 14, y: 12 }, + { x: 4, y: 10 } + ], + crystals: [ + { x: 9, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'd_011', + minStars: 13 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'd_013', + worldId: 'world_d', + levelNumber: 13, + name: 'Prvé Ď-čka', + gameType: 'banik', + difficulty: 4, + words: ['domov', 'doklad', 'dudlík', 'diamant', 'dom', 'dúha', 'donut', 'dym', 'duch', + 'doska', 'dáždnik', 'dvere', + 'drak', 'drevo', 'diera', 'dinosaurus', 'doktor', 'sídlo', 'záhrada'], + gameConfig: { + diamonds: 5, + golds: 3, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 9, y: 11 }, + { x: 10, y: 14 }, + { x: 5, y: 9 }, + { x: 0, y: 10 } + ], + golds: [ + { x: 14, y: 9 }, // gold na pozícii 2,9 + { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 2, y: 6 } + ], + crystals: [ + { x: 3, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'd_012', + minStars: 14 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'd_014', + worldId: 'world_d', + levelNumber: 14, + name: 'Prvé Ď-čka', + gameType: 'banik', + difficulty: 4, + words: ['domov', 'doklad', 'dudlík', 'diamant', 'dom', 'dúha', 'donut', 'dym', 'duch', + 'doska', 'dynamit', 'dáma', 'dáždnik', 'dvere', + 'drak', 'drevo', 'diera', 'dinosaurus', 'doktor', 'sídlo', 'záhrada'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 10 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 10, y: 10 }, + { x: 0, y: 12 }, + { x: 6, y: 13 }, + { x: 14, y: 15 } + ], + crystals: [ + { x: 9, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'd_013', + minStars: 15 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'd_015', + worldId: 'world_d', + levelNumber: 15, + name: 'Prvé Ď-čka', + gameType: 'banik', + difficulty: 4, + words: ['domov', 'doklad', 'dudlík', 'dym', 'duch', + 'doska', 'dynamit', 'dáma', 'dukát', 'disk', 'disketa', 'delfín', 'dáždnik', 'dvere', + 'drak', 'drevo', 'diera', 'dinosaurus', 'doktor', 'sídlo', 'záhrada'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 8 }, + { x: 10, y: 10 } + ], + golds: [ + { x: 0, y: 11 }, + { x: 4, y: 9 }, + { x: 7, y: 15 }, + { x: 15, y: 13 } + ], + crystals: [ + { x: 13, y: 12 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'd_014', + minStars: 16 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'd_016', + worldId: 'world_d', + levelNumber: 16, + name: 'Prvé Ď-čka', + gameType: 'banik', + difficulty: 5, + words: ['domov', 'doklad', 'dudlík', 'diamant', 'dom', 'dúha', 'donut', 'dym', 'duch', + 'doska', 'dynamit', 'dáma', 'dukát', 'disk', 'disketa', 'delfín', 'dáždnik', 'dvere', + 'drak', 'drevo', 'diera', 'dinosaurus', 'doktor', 'sídlo', 'záhrada'], + gameConfig: { + diamonds: 5, + golds: 6, + crystals: 2, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 0, y: 8 }, + { x: 12, y: 10 }, + { x: 9, y: 12 }, + { x: 4, y: 13 }, + { x: 15, y: 15 } + ], + golds: [ + { x: 1, y: 8 }, + { x: 2, y: 15 }, + { x: 5, y: 13 }, + { x: 7, y: 9 }, + { x: 6, y: 15 }, + { x: 13, y: 7 } + ], + crystals: [ + { x: 10, y: 11 }, + { x: 2, y: 10 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'd_015', + minStars: 20 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + ], + world_t: [ + { + id: 't_001', + worldId: 'world_t', + levelNumber: 1, + name: 'Prvé T-ka', + gameType: 'banik', + difficulty: 1, + words: ['tona', 'tato', 'top', 'tón'], + gameConfig: { + diamonds: 1, + golds: 3, + crystals: 1, + speechExercises: 1, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 12, y: 7 } + ], + golds: [ + { x: 2, y: 9 }, + { x: 5, y: 10 }, + { x: 10, y: 13 }, + ], + crystals: [ + { x: 11, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: null, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: true + }, + { + id: 't_002', + worldId: 'world_t', + levelNumber: 2, + name: 'Prvé t', + gameType: 'banik', + difficulty: 2, + words: ['tona', 'tato', 'top', 'tón', 'tank', 'tuha'], + gameConfig: { + diamonds: 1, + golds: 3, + crystals: 2, + speechExercises: 1, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 6, y: 10 }, + ], + golds: [ + { x: 2, y: 9 }, + { x: 7, y: 8 }, + { x: 10, y: 8 } + ], + crystals: [ + { x: 9, y: 7 }, + { x: 10, y: 12 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 't_001', + minStars: 1 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 't_003', + worldId: 'world_t', + levelNumber: 3, + name: 'Prvé t-ka', + gameType: 'banik', + difficulty: 1, + words: ['tona', 'tablet', 'top', 'tón', 'tank', 'tuha'], + gameConfig: { + diamonds: 3, + golds: 5, + crystals: 1, + speechExercises: 1, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 8 }, + { x: 12, y: 7 }, + { x: 10, y: 12 } + ], + golds: [ + { x: 2, y: 9 }, + { x: 7, y: 8 }, + { x: 14, y: 9 }, + { x: 9, y: 10 }, + { x: 10, y: 12 } + ], + crystals: [ + { x: 1, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 't_002', + minStars: 2 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 't_004', + worldId: 'world_t', + levelNumber: 4, + name: 'Prvé t-ka', + gameType: 'banik', + difficulty: 1, + words: ['tona', 'tablet', 'top', 'tón', 'tulipán', 'tunel', 'telefón'], + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 2, + speechExercises: 2, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 8 }, + { x: 10, y: 7 }, + { x: 9, y: 14 } + ], + golds: [ + { x: 3, y: 9 }, + { x: 7, y: 8 }, + { x: 14, y: 6 } + ], + crystals: [ + { x: 4, y: 12 }, + { x: 7, y: 11 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 't_003', + minStars: 3 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 't_005', + worldId: 'world_t', + levelNumber: 5, + name: 'Prvé t-čka', + gameType: 'banik', + difficulty: 2, + words: ['tona', 'tablet', 'top', 'tón', 'tank', 'tuha', 'tulipán'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 4, + speechExercises: 2, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 13, y: 8 }, + { x: 9, y: 10 }, + { x: 1, y: 14 } + ], + golds: [ + { x: 0, y: 9 }, + { x: 3, y: 10 }, + { x: 7, y: 8 } + ], + crystals: [ + { x: 2, y: 10 }, + { x: 6, y: 12 }, + { x: 14, y: 14 }, + { x: 8, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 't_004', + minStars: 4 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 't_006', + worldId: 'world_t', + levelNumber: 6, + name: 'Prvé t-čka', + gameType: 'banik', + difficulty: 2, + words: ['tona', 'tablet', 'top', 'tón', 'tank', 'tuha', 'tulipán', 'tunel', 'telefón', 'auto', + 'Oto', 'tato'], + gameConfig: { + diamonds: 3, + golds: 5, + crystals: 2, + speechExercises: 3, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 7 }, + { x: 10, y: 7 }, + { x: 2, y: 14 } + ], + golds: [ + { x: 1, y: 9 }, + { x: 10, y: 10 }, + { x: 6, y: 7 }, + { x: 3, y: 15 }, + { x: 15, y: 12 } + ], + crystals: [ + { x: 7, y: 11 }, + { x: 10, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 't_005', + minStars: 5 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 't_007', + worldId: 'world_t', + levelNumber: 7, + name: 'Prvé t-čka', + gameType: 'banik', + difficulty: 2, + words: ['tona', 'tablet', 'top', 'tón', 'tank', 'tuha', 'auto', + 'Oto', 'tato'], + gameConfig: { + diamonds: 2, + golds: 2, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 0, y: 10 }, + { x: 14, y: 14 } + ], + golds: [ + { x: 5, y: 8 }, + { x: 7, y: 12 } + ], + crystals: [ + { x: 10, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 't_006', + minStars: 6 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 't_008', + worldId: 'world_t', + levelNumber: 8, + name: 'Prvé Ď-čka', + gameType: 'banik', + difficulty: 2, + words: ['tona', 'tablet', 'top', 'tón', 'tank', 'tuha', 'tulipán', 'tunel', 'telefón', 'auto', + 'Oto', 'tato', 'tanier'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 10, y: 6 }, + { x: 6, y: 14 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 8, y: 12 }, + { x: 1, y: 7 } + ], + crystals: [ + { x: 9, y: 15 }, + { x: 14, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 't_007', + minStars: 7 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 't_009', + worldId: 'world_t', + levelNumber: 9, + name: 'Prvé t-čka', + gameType: 'banik', + difficulty: 3, + words: ['tona', 'tablet', 'top', 'tón', 'tank', 'telefón', 'auto', + 'Oto', 'tato', 'tanier'], + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 1, + speechExercises: 3, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 10 }, + { x: 10, y: 14 }, + { x: 2, y: 9 } + ], + golds: [ + { x: 7, y: 11 }, + { x: 12, y: 12 }, + { x: 0, y: 7 } + ], + crystals: [ + { x: 9, y: 11 }, + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 't_008', + minStars: 10 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 't_010', + worldId: 'world_t', + levelNumber: 10, + name: 'Prvé Ď-čka', + gameType: 'banik', + difficulty: 3, + words: ['tona', 'tablet', 'top', 'tón', 'tank', 'tuha', 'tulipán', 'tunel', 'telefón', 'auto' + ], + gameConfig: { + diamonds: 4, + golds: 6, + crystals: 1, + speechExercises: 3, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 6 }, + { x: 10, y: 14 }, + { x: 6, y: 8 }, + { x: 0, y: 10 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 12, y: 12 }, + { x: 1, y: 9 }, + { x: 3, y: 8 }, + { x: 5, y: 11 } + ], + crystals: [ + { x: 14, y: 10 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 't_009', + minStars: 11 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 't_011', + worldId: 'world_t', + levelNumber: 11, + name: 'Prvé tka', + gameType: 'banik', + difficulty: 3, + words: ['tona', 'tablet', 'top', 'tón', 'tank', 'tuha', 'tulipán', 'tunel', 'telefón', 'auto', + 'Oto', 'tato', 'tanier'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 2, + speechExercises: 3, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 15, y: 14 }, + { x: 12, y: 15 }, + { x: 3, y: 12 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 4, y: 15 }, + { x: 5, y: 10 } + ], + crystals: [ + { x: 9, y: 13 }, + { x: 6, y: 7 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 't_010', + minStars: 12 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 't_012', + worldId: 'world_t', + levelNumber: 12, + name: 'Prvé t-čka', + gameType: 'banik', + difficulty: 3, + words: ['tona', 'tablet', 'top', 'tón', 'tank', 'tuha', 'tulipán', 'tunel', 'telefón', 'auto', + 'Oto', 'tato', 'tanier', 'tepláky'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 7 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 6, y: 9 }, + { x: 7, y: 11 }, + { x: 14, y: 12 }, + { x: 4, y: 10 } + ], + crystals: [ + { x: 9, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 't_011', + minStars: 13 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 't_013', + worldId: 'world_t', + levelNumber: 13, + name: 'Prvé t-čka', + gameType: 'banik', + difficulty: 4, + words: ['tona', 'tablet', 'top', 'tón', 'tank', 'tuha', 'tulipán', 'tunel', 'telefón', 'auto', + 'Oto', 'tato', 'tanier', 'tanec'], + gameConfig: { + diamonds: 5, + golds: 3, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 9, y: 11 }, + { x: 10, y: 14 }, + { x: 5, y: 9 }, + { x: 0, y: 10 } + ], + golds: [ + { x: 14, y: 9 }, // gold na pozícii 2,9 + { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 2, y: 6 } + ], + crystals: [ + { x: 3, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 't_012', + minStars: 14 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 't_014', + worldId: 'world_t', + levelNumber: 14, + name: 'Prvé t-čka', + gameType: 'banik', + difficulty: 4, + words: ['tona', 'tablet', 'top', 'tón', 'tank', 'tuha', 'tulipán', 'tunel', 'telefón', 'auto', + 'Oto', 'tato', 'tanier', 'tanec', 'teplota'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 10 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 10, y: 10 }, + { x: 0, y: 12 }, + { x: 6, y: 13 }, + { x: 14, y: 15 } + ], + crystals: [ + { x: 9, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 't_013', + minStars: 15 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 't_015', + worldId: 'world_t', + levelNumber: 15, + name: 'Prvé t-čka', + gameType: 'banik', + difficulty: 4, + words: ['tona', 'tablet', 'top', 'tón', 'telefón', 'auto', 'toaleta', + 'Oto', 'tato', 'tanier', 'tanec', 'teplota'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 8 }, + { x: 10, y: 10 } + ], + golds: [ + { x: 0, y: 11 }, + { x: 4, y: 9 }, + { x: 7, y: 15 }, + { x: 15, y: 13 } + ], + crystals: [ + { x: 13, y: 12 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 't_014', + minStars: 16 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 't_016', + worldId: 'world_t', + levelNumber: 16, + name: 'Prvé t-čka', + gameType: 'banik', + difficulty: 5, + words: ['tona', 'tablet', 'top', 'tón', 'tank', 'tuha', 'tulipán', 'tunel', 'telefón', 'auto', + 'Oto', 'tato', 'tanier', 'tanec', 'teplota', 'toaleta'], + gameConfig: { + diamonds: 5, + golds: 6, + crystals: 2, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 0, y: 8 }, + { x: 12, y: 10 }, + { x: 9, y: 12 }, + { x: 4, y: 13 }, + { x: 15, y: 15 } + ], + golds: [ + { x: 1, y: 8 }, + { x: 2, y: 15 }, + { x: 5, y: 13 }, + { x: 7, y: 9 }, + { x: 6, y: 15 }, + { x: 13, y: 7 } + ], + crystals: [ + { x: 10, y: 11 }, + { x: 2, y: 10 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 't_015', + minStars: 20 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + ], + world_th: [ + { + id: 'th_001', + worldId: 'world_th', + levelNumber: 1, + name: 'Prvé Th-ka', + gameType: 'banik', + difficulty: 1, + words: ['ťava', 'niť', 'sieť', 'kosť'], + gameConfig: { + diamonds: 1, + golds: 3, + crystals: 1, + speechExercises: 1, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 12, y: 7 } + ], + golds: [ + { x: 2, y: 9 }, + { x: 5, y: 10 }, + { x: 10, y: 13 }, + ], + crystals: [ + { x: 11, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: null, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: true + }, + { + id: 'th_002', + worldId: 'world_th', + levelNumber: 2, + name: 'Prvé th', + gameType: 'banik', + difficulty: 2, + words: ['ťava', 'niť', 'sieť', 'ťažiť', 'ťahať'], + gameConfig: { + diamonds: 1, + golds: 3, + crystals: 2, + speechExercises: 1, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 6, y: 10 }, + ], + golds: [ + { x: 2, y: 9 }, + { x: 7, y: 8 }, + { x: 10, y: 8 } + ], + crystals: [ + { x: 9, y: 7 }, + { x: 10, y: 12 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'th_001', + minStars: 1 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'th_003', + worldId: 'world_th', + levelNumber: 3, + name: 'Prvé th-ka', + gameType: 'banik', + difficulty: 1, + words: ['ťava', 'niť', 'sieť', 'ťažiť', 'ťahať', 'ťuk'], + gameConfig: { + diamonds: 3, + golds: 5, + crystals: 1, + speechExercises: 1, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 8 }, + { x: 12, y: 7 }, + { x: 10, y: 12 } + ], + golds: [ + { x: 2, y: 9 }, + { x: 7, y: 8 }, + { x: 14, y: 9 }, + { x: 9, y: 10 }, + { x: 10, y: 12 } + ], + crystals: [ + { x: 1, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'th_002', + minStars: 2 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'th_004', + worldId: 'world_th', + levelNumber: 4, + name: 'Prvé th-ka', + gameType: 'banik', + difficulty: 1, + words: ['ťuk', 'ťah', 'ťahák', 'chuť', + 'kosť', 'labuť', 'masť', 'pamäť', ], + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 2, + speechExercises: 2, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 8 }, + { x: 10, y: 7 }, + { x: 9, y: 14 } + ], + golds: [ + { x: 3, y: 9 }, + { x: 7, y: 8 }, + { x: 14, y: 6 } + ], + crystals: [ + { x: 4, y: 12 }, + { x: 7, y: 11 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'th_003', + minStars: 3 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'th_005', + worldId: 'world_th', + levelNumber: 5, + name: 'Prvé th-čka', + gameType: 'banik', + difficulty: 2, + words: ['ťava', 'niť', 'sieť', 'ťažiť', 'ťahať', 'ťuk', 'ťah', 'ťahák', 'chuť', + 'kosť', 'labuť', 'masť'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 4, + speechExercises: 2, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 13, y: 8 }, + { x: 9, y: 10 }, + { x: 1, y: 14 } + ], + golds: [ + { x: 0, y: 9 }, + { x: 3, y: 10 }, + { x: 7, y: 8 } + ], + crystals: [ + { x: 2, y: 10 }, + { x: 6, y: 12 }, + { x: 14, y: 14 }, + { x: 8, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'th_004', + minStars: 4 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'th_006', + worldId: 'world_th', + levelNumber: 6, + name: 'Prvé th-čka', + gameType: 'banik', + difficulty: 2, + words: ['ťava', 'niť', 'sieť', 'ťažiť', 'ťahať', 'ťuk', 'ťah', 'ťahák', 'chuť', + 'kosť', 'labuť', 'masť', 'pamäť', 'pleť'], + gameConfig: { + diamonds: 3, + golds: 5, + crystals: 2, + speechExercises: 3, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 7 }, + { x: 10, y: 7 }, + { x: 2, y: 14 } + ], + golds: [ + { x: 1, y: 9 }, + { x: 10, y: 10 }, + { x: 6, y: 7 }, + { x: 3, y: 15 }, + { x: 15, y: 12 } + ], + crystals: [ + { x: 7, y: 11 }, + { x: 10, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'th_005', + minStars: 5 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'th_007', + worldId: 'world_th', + levelNumber: 7, + name: 'Prvé th-čka', + gameType: 'banik', + difficulty: 2, + words: ['ťava', 'niť', 'sieť', 'ťažiť', 'ťahať', 'ťuk', 'ťah', 'ťahák', 'chuť', + 'kosť', 'labuť', 'masť', 'pamäť', 'pleť', 'púšť'], + gameConfig: { + diamonds: 2, + golds: 2, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 0, y: 10 }, + { x: 14, y: 14 } + ], + golds: [ + { x: 5, y: 8 }, + { x: 7, y: 12 } + ], + crystals: [ + { x: 10, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'th_006', + minStars: 6 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'th_008', + worldId: 'world_th', + levelNumber: 8, + name: 'Prvé Ť-čka', + gameType: 'banik', + difficulty: 2, + words: ['ťava', 'niť', 'sieť', 'ťažiť', 'ťahať', 'ťuk', 'ťah', 'ťahák', 'chuť', + 'kosť', 'labuť', 'masť', 'pamäť', 'pleť', 'púšť', 'povesť', 'ťahač'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 10, y: 6 }, + { x: 6, y: 14 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 8, y: 12 }, + { x: 1, y: 7 } + ], + crystals: [ + { x: 9, y: 15 }, + { x: 14, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'th_007', + minStars: 7 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'th_009', + worldId: 'world_th', + levelNumber: 9, + name: 'Prvé th-čka', + gameType: 'banik', + difficulty: 3, + words: [ + 'kosť', 'labuť', 'masť', 'pamäť', 'pleť', 'púšť', 'povesť', 'ťahač', 'ťukanec', 'päsť', + ], + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 1, + speechExercises: 3, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 10 }, + { x: 10, y: 14 }, + { x: 2, y: 9 } + ], + golds: [ + { x: 7, y: 11 }, + { x: 12, y: 12 }, + { x: 0, y: 7 } + ], + crystals: [ + { x: 9, y: 11 }, + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'th_008', + minStars: 10 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'th_010', + worldId: 'world_th', + levelNumber: 10, + name: 'Prvé Ť-čka', + gameType: 'banik', + difficulty: 3, + words: [ 'ťah', 'ťahák', 'chuť', + 'kosť', 'labuť', 'masť', 'pamäť', 'pleť', 'púšť', 'povesť', 'ťahač', 'ťukanec', 'päsť', + ], + gameConfig: { + diamonds: 4, + golds: 6, + crystals: 1, + speechExercises: 3, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 6 }, + { x: 10, y: 14 }, + { x: 6, y: 8 }, + { x: 0, y: 10 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 12, y: 12 }, + { x: 1, y: 9 }, + { x: 3, y: 8 }, + { x: 5, y: 11 } + ], + crystals: [ + { x: 14, y: 10 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'th_009', + minStars: 11 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'th_011', + worldId: 'world_th', + levelNumber: 11, + name: 'Prvé thka', + gameType: 'banik', + difficulty: 3, + words: ['ťahať', 'ťuk', 'ťah', 'ťahák', 'chuť', + 'kosť', 'labuť', 'masť', 'pamäť', 'pleť', 'púšť', 'povesť', 'ťahač', 'ťukanec', 'päsť', + 'ortuť', 'vlasť', ], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 2, + speechExercises: 3, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 15, y: 14 }, + { x: 12, y: 15 }, + { x: 3, y: 12 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 4, y: 15 }, + { x: 5, y: 10 } + ], + crystals: [ + { x: 9, y: 13 }, + { x: 6, y: 7 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'th_010', + minStars: 12 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'th_012', + worldId: 'world_th', + levelNumber: 12, + name: 'Prvé th-čka', + gameType: 'banik', + difficulty: 3, + words: [ + 'kosť', 'labuť', 'masť', 'pamäť', 'pleť', 'púšť', 'povesť', 'ťahač', 'ťukanec', 'päsť', + 'ortuť', 'vlasť', 'časť', 'súčasť'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 7 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 6, y: 9 }, + { x: 7, y: 11 }, + { x: 14, y: 12 }, + { x: 4, y: 10 } + ], + crystals: [ + { x: 9, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'th_011', + minStars: 13 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'th_013', + worldId: 'world_th', + levelNumber: 13, + name: 'Prvé th-čka', + gameType: 'banik', + difficulty: 4, + words: [ + 'ortuť', 'vlasť', 'časť', 'súčasť', 'cnosť', 'šesť', 'srsť'], + gameConfig: { + diamonds: 5, + golds: 3, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 9, y: 11 }, + { x: 10, y: 14 }, + { x: 5, y: 9 }, + { x: 0, y: 10 } + ], + golds: [ + { x: 14, y: 9 }, // gold na pozícii 2,9 + { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 2, y: 6 } + ], + crystals: [ + { x: 3, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'th_012', + minStars: 14 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'th_014', + worldId: 'world_th', + levelNumber: 14, + name: 'Prvé th-čka', + gameType: 'banik', + difficulty: 4, + words: [ + 'pleť', 'púšť', 'povesť', 'ťahač', 'ťukanec', 'päsť', + 'ortuť', 'vlasť', 'časť', 'súčasť'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 10 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 10, y: 10 }, + { x: 0, y: 12 }, + { x: 6, y: 13 }, + { x: 14, y: 15 } + ], + crystals: [ + { x: 9, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'th_013', + minStars: 15 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'th_015', + worldId: 'world_th', + levelNumber: 15, + name: 'Prvé th-čka', + gameType: 'banik', + difficulty: 4, + words: ['ťava', 'niť', 'sieť', 'ťažiť', 'ťahať', 'ťuk', 'ťah', 'ťahák', 'chuť', + 'kosť', 'labuť', 'masť', 'ťahač', 'ťukanec', 'päsť', + 'ortuť', 'vlasť', 'časť', 'súčasť', 'cnosť', 'šesť', 'srsť'], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 8 }, + { x: 10, y: 10 } + ], + golds: [ + { x: 0, y: 11 }, + { x: 4, y: 9 }, + { x: 7, y: 15 }, + { x: 15, y: 13 } + ], + crystals: [ + { x: 13, y: 12 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'th_014', + minStars: 16 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'th_016', + worldId: 'world_th', + levelNumber: 16, + name: 'Prvé th-čka', + gameType: 'banik', + difficulty: 5, + words: ['ťava', 'niť', 'sieť', 'ťažiť', 'ťahať', 'ťuk', 'ťah', 'ťahák', 'chuť', + 'kosť', 'labuť', 'masť', 'pamäť', 'pleť', 'púšť', 'povesť', 'ťahač', 'ťukanec', 'päsť', + 'ortuť', 'vlasť', 'časť', 'súčasť', 'cnosť', 'šesť', 'srsť'], + gameConfig: { + diamonds: 5, + golds: 6, + crystals: 2, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 0, y: 8 }, + { x: 12, y: 10 }, + { x: 9, y: 12 }, + { x: 4, y: 13 }, + { x: 15, y: 15 } + ], + golds: [ + { x: 1, y: 8 }, + { x: 2, y: 15 }, + { x: 5, y: 13 }, + { x: 7, y: 9 }, + { x: 6, y: 15 }, + { x: 13, y: 7 } + ], + crystals: [ + { x: 10, y: 11 }, + { x: 2, y: 10 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'th_015', + minStars: 20 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + ], + world_n: [ + { + id: 'n_001', + worldId: 'world_n', + levelNumber: 1, + name: 'Prvé n-ka', + gameType: 'banik', + difficulty: 1, + words: ['víno', 'noviny', 'menu', 'nos'], + gameConfig: { + diamonds: 1, + golds: 3, + crystals: 1, + speechExercises: 1, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 12, y: 7 } + ], + golds: [ + { x: 2, y: 9 }, + { x: 5, y: 10 }, + { x: 10, y: 13 }, + ], + crystals: [ + { x: 11, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: null, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: true + }, + { + id: 'n_002', + worldId: 'world_n', + levelNumber: 2, + name: 'Prvé n', + gameType: 'banik', + difficulty: 2, + words: ['vino', 'noviny', 'menu', 'noha', 'nuda', 'nos'], + gameConfig: { + diamonds: 1, + golds: 3, + crystals: 2, + speechExercises: 1, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 6, y: 10 }, + ], + golds: [ + { x: 2, y: 9 }, + { x: 7, y: 8 }, + { x: 10, y: 8 } + ], + crystals: [ + { x: 9, y: 7 }, + { x: 10, y: 12 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'n_001', + minStars: 1 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'n_003', + worldId: 'world_n', + levelNumber: 3, + name: 'Prvé n-ka', + gameType: 'banik', + difficulty: 1, + words: ['vino', 'noviny', 'menu', 'noc', 'nanuk'], + gameConfig: { + diamonds: 3, + golds: 5, + crystals: 1, + speechExercises: 1, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 8 }, + { x: 12, y: 7 }, + { x: 10, y: 12 } + ], + golds: [ + { x: 2, y: 9 }, + { x: 7, y: 8 }, + { x: 14, y: 9 }, + { x: 9, y: 10 }, + { x: 10, y: 12 } + ], + crystals: [ + { x: 1, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'n_002', + minStars: 2 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'n_004', + worldId: 'world_n', + levelNumber: 4, + name: 'Prvé n-ka', + gameType: 'banik', + difficulty: 1, + words: ['nuda', 'nos', 'vina', 'nula', 'noc', 'nanuk'], + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 2, + speechExercises: 2, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 8 }, + { x: 10, y: 7 }, + { x: 9, y: 14 } + ], + golds: [ + { x: 3, y: 9 }, + { x: 7, y: 8 }, + { x: 14, y: 6 } + ], + crystals: [ + { x: 4, y: 12 }, + { x: 7, y: 11 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'n_003', + minStars: 3 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'n_005', + worldId: 'world_n', + levelNumber: 5, + name: 'Prvé n-čka', + gameType: 'banik', + difficulty: 2, + words: ['vino', 'noviny', 'menu', 'noha', 'nuda', 'noc', 'nanuk'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 4, + speechExercises: 2, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 13, y: 8 }, + { x: 9, y: 10 }, + { x: 1, y: 14 } + ], + golds: [ + { x: 0, y: 9 }, + { x: 3, y: 10 }, + { x: 7, y: 8 } + ], + crystals: [ + { x: 2, y: 10 }, + { x: 6, y: 12 }, + { x: 14, y: 14 }, + { x: 8, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'n_004', + minStars: 4 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'n_006', + worldId: 'world_n', + levelNumber: 6, + name: 'Prvé n-čka', + gameType: 'banik', + difficulty: 2, + words: ['vino', 'noviny', 'menu', 'noha', 'nuda', 'nos', 'vina', 'nula', 'noc', 'nanuk'], + gameConfig: { + diamonds: 3, + golds: 5, + crystals: 2, + speechExercises: 3, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 7 }, + { x: 10, y: 7 }, + { x: 2, y: 14 } + ], + golds: [ + { x: 1, y: 9 }, + { x: 10, y: 10 }, + { x: 6, y: 7 }, + { x: 3, y: 15 }, + { x: 15, y: 12 } + ], + crystals: [ + { x: 7, y: 11 }, + { x: 10, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'n_005', + minStars: 5 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'n_007', + worldId: 'world_n', + levelNumber: 7, + name: 'Prvé n-čka', + gameType: 'banik', + difficulty: 2, + words: ['vino', 'noviny', + 'nápis', 'nádoba', 'nákup', 'nápoj', 'nafta', 'nikel', 'nábytok' + ], + gameConfig: { + diamonds: 2, + golds: 2, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 0, y: 10 }, + { x: 14, y: 14 } + ], + golds: [ + { x: 5, y: 8 }, + { x: 7, y: 12 } + ], + crystals: [ + { x: 10, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'n_006', + minStars: 6 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'n_008', + worldId: 'world_n', + levelNumber: 8, + name: 'Prvé n-čka', + gameType: 'banik', + difficulty: 2, + words: ['vino', 'noviny', 'menu', 'noha', 'nuda', 'nos', 'vina', 'nula', 'noc', 'nanuk', + 'nafta', 'nikel', 'nábytok' + ], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 10, y: 6 }, + { x: 6, y: 14 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 8, y: 12 }, + { x: 1, y: 7 } + ], + crystals: [ + { x: 9, y: 15 }, + { x: 14, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'n_007', + minStars: 7 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'n_009', + worldId: 'world_n', + levelNumber: 9, + name: 'Prvé n-čka', + gameType: 'banik', + difficulty: 3, + words: [ 'nuda', 'nos', 'vina', 'nula', 'noc', 'nanuk', + 'nápis', 'nádoba', 'nákup', 'nápoj', 'nafta', 'nikel', 'nábytok' + ], + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 1, + speechExercises: 3, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 10 }, + { x: 10, y: 14 }, + { x: 2, y: 9 } + ], + golds: [ + { x: 7, y: 11 }, + { x: 12, y: 12 }, + { x: 0, y: 7 } + ], + crystals: [ + { x: 9, y: 11 }, + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'n_008', + minStars: 10 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'n_010', + worldId: 'world_n', + levelNumber: 10, + name: 'Prvé n-čka', + gameType: 'banik', + difficulty: 3, + words: ['vino', 'noviny', 'menu', 'noha', 'nuda', 'nos', 'vina', 'nula', 'noc', 'nanuk', + 'nápis', 'nádoba', 'nákup' + ], + gameConfig: { + diamonds: 4, + golds: 6, + crystals: 1, + speechExercises: 3, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 6 }, + { x: 10, y: 14 }, + { x: 6, y: 8 }, + { x: 0, y: 10 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 12, y: 12 }, + { x: 1, y: 9 }, + { x: 3, y: 8 }, + { x: 5, y: 11 } + ], + crystals: [ + { x: 14, y: 10 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'n_009', + minStars: 11 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'n_011', + worldId: 'world_n', + levelNumber: 11, + name: 'Prvé nka', + gameType: 'banik', + difficulty: 3, + words: [ 'nula', 'noc', 'nanuk', + 'nápis', 'nádoba', 'nákup', 'nápoj', 'nafta', 'nikel', 'nábytok' + ], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 2, + speechExercises: 3, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 15, y: 14 }, + { x: 12, y: 15 }, + { x: 3, y: 12 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 4, y: 15 }, + { x: 5, y: 10 } + ], + crystals: [ + { x: 9, y: 13 }, + { x: 6, y: 7 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'n_010', + minStars: 12 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'n_012', + worldId: 'world_n', + levelNumber: 12, + name: 'Prvé n-čka', + gameType: 'banik', + difficulty: 3, + words: ['vino', 'noviny', 'menu', 'noha', 'nuda', 'nos', 'vina', 'nula', 'noc', 'nanuk', + 'nápis', 'nádoba', 'nákup', 'nápoj', 'nafta', 'nikel', 'nábytok' + ], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 7 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 6, y: 9 }, + { x: 7, y: 11 }, + { x: 14, y: 12 }, + { x: 4, y: 10 } + ], + crystals: [ + { x: 9, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'n_011', + minStars: 13 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'n_013', + worldId: 'world_n', + levelNumber: 13, + name: 'Prvé n-ka', + gameType: 'banik', + difficulty: 4, + words: ['vino', 'nápoj', 'nafta', 'nikel', 'nábytok', 'nástroj', 'nálepka', 'neón', + 'netvor', 'nádrž', 'náradie' + ], + gameConfig: { + diamonds: 5, + golds: 3, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 9, y: 11 }, + { x: 10, y: 14 }, + { x: 5, y: 9 }, + { x: 0, y: 10 } + ], + golds: [ + { x: 14, y: 9 }, // gold na pozícii 2,9 + { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 2, y: 6 } + ], + crystals: [ + { x: 3, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'n_012', + minStars: 14 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'n_014', + worldId: 'world_n', + levelNumber: 14, + name: 'Prvé n-čka', + gameType: 'banik', + difficulty: 4, + words: ['vino', 'noviny', 'nanuk', + 'nápis', 'nádoba', 'nákup', 'nástroj', 'nálepka', 'neón', + 'netvor', 'nádrž', 'náradie' + ], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 10 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 10, y: 10 }, + { x: 0, y: 12 }, + { x: 6, y: 13 }, + { x: 14, y: 15 } + ], + crystals: [ + { x: 9, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'n_013', + minStars: 15 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'n_015', + worldId: 'world_n', + levelNumber: 15, + name: 'Prvé n-čka', + gameType: 'banik', + difficulty: 4, + words: [ + 'nápis', 'nádoba', 'nákup', 'nápoj', 'nafta', 'nikel', 'nábytok', 'nástroj', 'nálepka', 'neón', + 'netvor', 'nádrž', 'náradie' + ], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 8 }, + { x: 10, y: 10 } + ], + golds: [ + { x: 0, y: 11 }, + { x: 4, y: 9 }, + { x: 7, y: 15 }, + { x: 15, y: 13 } + ], + crystals: [ + { x: 13, y: 12 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'n_014', + minStars: 16 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'n_016', + worldId: 'world_n', + levelNumber: 16, + name: 'Prvé n-čka', + gameType: 'banik', + difficulty: 5, + words: ['vino', 'noviny', 'menu', 'noha', 'nuda', 'nos', 'vina', 'nula', 'noc', 'nanuk', + 'nápis', 'nádoba', 'nákup', 'nápoj', 'nafta', 'nikel', 'nábytok', 'nástroj', 'nálepka', 'neón', + 'netvor', 'nádrž', 'náradie' + ], + gameConfig: { + diamonds: 5, + golds: 6, + crystals: 2, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 0, y: 8 }, + { x: 12, y: 10 }, + { x: 9, y: 12 }, + { x: 4, y: 13 }, + { x: 15, y: 15 } + ], + golds: [ + { x: 1, y: 8 }, + { x: 2, y: 15 }, + { x: 5, y: 13 }, + { x: 7, y: 9 }, + { x: 6, y: 15 }, + { x: 13, y: 7 } + ], + crystals: [ + { x: 10, y: 11 }, + { x: 2, y: 10 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'n_015', + minStars: 20 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + ], + world_nh: [ + { + id: 'nh_001', + worldId: 'world_nh', + levelNumber: 1, + name: 'Prvé nh-ka', + gameType: 'banik', + difficulty: 1, + words: ['vaňa', 'dlaň', 'peň', 'jeseň'], + gameConfig: { + diamonds: 1, + golds: 3, + crystals: 1, + speechExercises: 1, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 12, y: 7 } + ], + golds: [ + { x: 2, y: 9 }, + { x: 5, y: 10 }, + { x: 10, y: 13 }, + ], + crystals: [ + { x: 11, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: null, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: true + }, + { + id: 'nh_002', + worldId: 'world_nh', + levelNumber: 2, + name: 'Prvé n', + gameType: 'banik', + difficulty: 2, + words: [ 'vaňa', 'dlaň', 'peň', 'jeseň', 'ňaňa', 'baňa'], + gameConfig: { + diamonds: 1, + golds: 3, + crystals: 2, + speechExercises: 1, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 6, y: 10 }, + ], + golds: [ + { x: 2, y: 9 }, + { x: 7, y: 8 }, + { x: 10, y: 8 } + ], + crystals: [ + { x: 9, y: 7 }, + { x: 10, y: 12 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'nh_001', + minStars: 1 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'nh_003', + worldId: 'world_nh', + levelNumber: 3, + name: 'Prvé nh-ka', + gameType: 'banik', + difficulty: 1, + words: [ 'vaňa', 'dlaň', 'peň', 'jeseň', 'ňaňa', 'baňa'], + gameConfig: { + diamonds: 3, + golds: 5, + crystals: 1, + speechExercises: 1, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 8 }, + { x: 12, y: 7 }, + { x: 10, y: 12 } + ], + golds: [ + { x: 2, y: 9 }, + { x: 7, y: 8 }, + { x: 14, y: 9 }, + { x: 9, y: 10 }, + { x: 10, y: 12 } + ], + crystals: [ + { x: 1, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'nh_002', + minStars: 2 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'nh_004', + worldId: 'world_nh', + levelNumber: 4, + name: 'Prvé nh-ka', + gameType: 'banik', + difficulty: 1, + words: [ 'vaňa', 'deň', 'dyňa', 'tuleň', 'kuchyňa'], + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 2, + speechExercises: 2, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 8 }, + { x: 10, y: 7 }, + { x: 9, y: 14 } + ], + golds: [ + { x: 3, y: 9 }, + { x: 7, y: 8 }, + { x: 14, y: 6 } + ], + crystals: [ + { x: 4, y: 12 }, + { x: 7, y: 11 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'nh_003', + minStars: 3 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'nh_005', + worldId: 'world_nh', + levelNumber: 5, + name: 'Prvé nh-čka', + gameType: 'banik', + difficulty: 2, + words: [ 'baňa', 'deň', 'dyňa', 'tuleň', 'kuchyňa'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 4, + speechExercises: 2, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 13, y: 8 }, + { x: 9, y: 10 }, + { x: 1, y: 14 } + ], + golds: [ + { x: 0, y: 9 }, + { x: 3, y: 10 }, + { x: 7, y: 8 } + ], + crystals: [ + { x: 2, y: 10 }, + { x: 6, y: 12 }, + { x: 14, y: 14 }, + { x: 8, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'nh_004', + minStars: 4 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'nh_006', + worldId: 'world_nh', + levelNumber: 6, + name: 'Prvé nh-čka', + gameType: 'banik', + difficulty: 2, + words: ['peň', 'jeseň', 'ňaňa', 'baňa', 'deň', 'dyňa', 'kuchyňa'], + gameConfig: { + diamonds: 3, + golds: 5, + crystals: 2, + speechExercises: 3, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 7 }, + { x: 10, y: 7 }, + { x: 2, y: 14 } + ], + golds: [ + { x: 1, y: 9 }, + { x: 10, y: 10 }, + { x: 6, y: 7 }, + { x: 3, y: 15 }, + { x: 15, y: 12 } + ], + crystals: [ + { x: 7, y: 11 }, + { x: 10, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'nh_005', + minStars: 5 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'nh_007', + worldId: 'world_nh', + levelNumber: 7, + name: 'Prvé nh-čka', + gameType: 'banik', + difficulty: 2, + words: [ 'vaňa', 'dlaň', 'peň', 'jeseň', 'ňaňa', 'baňa', 'deň', 'dyňa', 'tuleň', 'kuchyňa'], + gameConfig: { + diamonds: 2, + golds: 2, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 0, y: 10 }, + { x: 14, y: 14 } + ], + golds: [ + { x: 5, y: 8 }, + { x: 7, y: 12 } + ], + crystals: [ + { x: 10, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'nh_006', + minStars: 6 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'nh_008', + worldId: 'world_nh', + levelNumber: 8, + name: 'Prvé nh-čka', + gameType: 'banik', + difficulty: 2, + words: [ 'vaňa', 'dlaň', 'peň', 'jeseň', 'ňaňa', 'baňa', 'deň', 'dyňa', 'tuleň', 'kuchyňa'], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 10, y: 6 }, + { x: 6, y: 14 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 8, y: 12 }, + { x: 1, y: 7 } + ], + crystals: [ + { x: 9, y: 15 }, + { x: 14, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'nh_007', + minStars: 7 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'nh_009', + worldId: 'world_nh', + levelNumber: 9, + name: 'Prvé nh-čka', + gameType: 'banik', + difficulty: 3, + words: [ 'kuchyňa', + 'kôň', 'hrebeň', 'báseň' + ], + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 1, + speechExercises: 3, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 10 }, + { x: 10, y: 14 }, + { x: 2, y: 9 } + ], + golds: [ + { x: 7, y: 11 }, + { x: 12, y: 12 }, + { x: 0, y: 7 } + ], + crystals: [ + { x: 9, y: 11 }, + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'nh_008', + minStars: 10 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'nh_010', + worldId: 'world_nh', + levelNumber: 10, + name: 'Prvé nh-čka', + gameType: 'banik', + difficulty: 3, + words: [ 'vaňa', 'deň', 'dyňa', 'tuleň', 'kuchyňa', + 'kôň', 'hrebeň', 'báseň' + ], + gameConfig: { + diamonds: 4, + golds: 6, + crystals: 1, + speechExercises: 3, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 6 }, + { x: 10, y: 14 }, + { x: 6, y: 8 }, + { x: 0, y: 10 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 12, y: 12 }, + { x: 1, y: 9 }, + { x: 3, y: 8 }, + { x: 5, y: 11 } + ], + crystals: [ + { x: 14, y: 10 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'nh_009', + minStars: 11 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'nh_011', + worldId: 'world_nh', + levelNumber: 11, + name: 'Prvé nhka', + gameType: 'banik', + difficulty: 3, + words: [ 'dyňa', 'tuleň', 'kuchyňa', + 'kôň', 'hrebeň', 'báseň' + ], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 2, + speechExercises: 3, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 15, y: 14 }, + { x: 12, y: 15 }, + { x: 3, y: 12 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 4, y: 15 }, + { x: 5, y: 10 } + ], + crystals: [ + { x: 9, y: 13 }, + { x: 6, y: 7 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'nh_010', + minStars: 12 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'nh_012', + worldId: 'world_nh', + levelNumber: 12, + name: 'Prvé nh-čka', + gameType: 'banik', + difficulty: 3, + words: [ 'jeseň', 'ňaňa', 'baňa', 'deň', 'dyňa', 'tuleň', 'kuchyňa', + 'kôň', 'hrebeň', 'báseň' + ], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 7 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 6, y: 9 }, + { x: 7, y: 11 }, + { x: 14, y: 12 }, + { x: 4, y: 10 } + ], + crystals: [ + { x: 9, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'nh_011', + minStars: 13 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'nh_013', + worldId: 'world_nh', + levelNumber: 13, + name: 'Prvé nh-ka', + gameType: 'banik', + difficulty: 4, + words: [ 'vaňa', 'dlaň', 'peň', 'jeseň', 'ňaňa', 'baňa', 'deň', 'dyňa', 'tuleň', 'kuchyňa', + 'kôň', 'hrebeň', 'báseň' + ], + gameConfig: { + diamonds: 5, + golds: 3, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 9, y: 11 }, + { x: 10, y: 14 }, + { x: 5, y: 9 }, + { x: 0, y: 10 } + ], + golds: [ + { x: 14, y: 9 }, // gold na pozícii 2,9 + { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 2, y: 6 } + ], + crystals: [ + { x: 3, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'nh_012', + minStars: 14 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'nh_014', + worldId: 'world_nh', + levelNumber: 14, + name: 'Prvé nh-čka', + gameType: 'banik', + difficulty: 4, + words: [ 'vaňa', 'kuchyňa', + 'kôň', 'hrebeň', 'báseň', 'laň', 'dielňa', 'remeň', 'vyhňa' + ], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 10 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 10, y: 10 }, + { x: 0, y: 12 }, + { x: 6, y: 13 }, + { x: 14, y: 15 } + ], + crystals: [ + { x: 9, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'nh_013', + minStars: 15 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'nh_015', + worldId: 'world_nh', + levelNumber: 15, + name: 'Prvé nh-čka', + gameType: 'banik', + difficulty: 4, + words: [ 'ňaňa', 'baňa', 'deň', 'dyňa', 'tuleň', 'kuchyňa', + 'kôň', 'hrebeň', 'báseň', 'laň', 'dielňa', 'remeň', 'vyhňa' + ], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 8 }, + { x: 10, y: 10 } + ], + golds: [ + { x: 0, y: 11 }, + { x: 4, y: 9 }, + { x: 7, y: 15 }, + { x: 15, y: 13 } + ], + crystals: [ + { x: 13, y: 12 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'nh_014', + minStars: 16 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'nh_016', + worldId: 'world_nh', + levelNumber: 16, + name: 'Prvé nh-čka', + gameType: 'banik', + difficulty: 5, + words: [ 'vaňa', 'dlaň', 'peň', 'jeseň', 'ňaňa', 'baňa', 'deň', 'dyňa', 'tuleň', 'kuchyňa', + 'kôň', 'hrebeň', 'báseň', 'laň', 'dielňa', 'remeň', 'vyhňa' + ], + gameConfig: { + diamonds: 5, + golds: 6, + crystals: 2, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 0, y: 8 }, + { x: 12, y: 10 }, + { x: 9, y: 12 }, + { x: 4, y: 13 }, + { x: 15, y: 15 } + ], + golds: [ + { x: 1, y: 8 }, + { x: 2, y: 15 }, + { x: 5, y: 13 }, + { x: 7, y: 9 }, + { x: 6, y: 15 }, + { x: 13, y: 7 } + ], + crystals: [ + { x: 10, y: 11 }, + { x: 2, y: 10 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'nh_015', + minStars: 20 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + ], + world_k: [ + { + id: 'k_001', + worldId: 'world_k', + levelNumber: 1, + name: 'Prvé k-ka', + gameType: 'banik', + difficulty: 1, + words: ['káva', 'kefa', 'kosť', 'kilo' + ], + gameConfig: { + diamonds: 1, + golds: 3, + crystals: 1, + speechExercises: 1, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 12, y: 7 } + ], + golds: [ + { x: 2, y: 9 }, + { x: 5, y: 10 }, + { x: 10, y: 13 }, + ], + crystals: [ + { x: 11, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: null, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: true + }, + { + id: 'k_002', + worldId: 'world_k', + levelNumber: 2, + name: 'Prvé k', + gameType: 'banik', + difficulty: 2, + words: ['káva', 'kefa', 'kosť', 'kilo', 'kuna' + ], + gameConfig: { + diamonds: 1, + golds: 3, + crystals: 2, + speechExercises: 1, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 6, y: 10 }, + ], + golds: [ + { x: 2, y: 9 }, + { x: 7, y: 8 }, + { x: 10, y: 8 } + ], + crystals: [ + { x: 9, y: 7 }, + { x: 10, y: 12 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'k_001', + minStars: 1 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'k_003', + worldId: 'world_k', + levelNumber: 3, + name: 'Prvé k-ka', + gameType: 'banik', + difficulty: 1, + words: ['káva', 'kefa', 'kosť', 'kilo', 'kuna', 'kupiť' + ], + gameConfig: { + diamonds: 3, + golds: 5, + crystals: 1, + speechExercises: 1, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 8 }, + { x: 12, y: 7 }, + { x: 10, y: 12 } + ], + golds: [ + { x: 2, y: 9 }, + { x: 7, y: 8 }, + { x: 14, y: 9 }, + { x: 9, y: 10 }, + { x: 10, y: 12 } + ], + crystals: [ + { x: 1, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'k_002', + minStars: 2 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'k_004', + worldId: 'world_k', + levelNumber: 4, + name: 'Prvé k-ka', + gameType: 'banik', + difficulty: 1, + words: ['káva', 'kilo', 'kuna', 'kupiť', 'múka', 'oko' + + ], + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 2, + speechExercises: 2, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 8 }, + { x: 10, y: 7 }, + { x: 9, y: 14 } + ], + golds: [ + { x: 3, y: 9 }, + { x: 7, y: 8 }, + { x: 14, y: 6 } + ], + crystals: [ + { x: 4, y: 12 }, + { x: 7, y: 11 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'k_003', + minStars: 3 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'k_005', + worldId: 'world_k', + levelNumber: 5, + name: 'Prvé k-čka', + gameType: 'banik', + difficulty: 2, + words: ['káva', 'kefa', 'kosť', 'kilo', 'kuna', 'kupiť', 'múka', 'oko', 'hák', 'hokej' + + ], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 4, + speechExercises: 2, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 13, y: 8 }, + { x: 9, y: 10 }, + { x: 1, y: 14 } + ], + golds: [ + { x: 0, y: 9 }, + { x: 3, y: 10 }, + { x: 7, y: 8 } + ], + crystals: [ + { x: 2, y: 10 }, + { x: 6, y: 12 }, + { x: 14, y: 14 }, + { x: 8, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'k_004', + minStars: 4 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'k_006', + worldId: 'world_k', + levelNumber: 6, + name: 'Prvé k-čka', + gameType: 'banik', + difficulty: 2, + words: ['kosť', 'kilo', 'kuna', 'kupiť', 'múka', 'oko', 'hák', 'hokej', + 'puk', 'Katka', 'kabát' + ], + gameConfig: { + diamonds: 3, + golds: 5, + crystals: 2, + speechExercises: 3, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 7 }, + { x: 10, y: 7 }, + { x: 2, y: 14 } + ], + golds: [ + { x: 1, y: 9 }, + { x: 10, y: 10 }, + { x: 6, y: 7 }, + { x: 3, y: 15 }, + { x: 15, y: 12 } + ], + crystals: [ + { x: 7, y: 11 }, + { x: 10, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'k_005', + minStars: 5 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'k_007', + worldId: 'world_k', + levelNumber: 7, + name: 'Prvé k-čka', + gameType: 'banik', + difficulty: 2, + words: [ 'múka', 'oko', 'hák', 'hokej', + 'puk', 'Katka', 'kabát', 'kukučka', 'kakao' + ], + gameConfig: { + diamonds: 2, + golds: 2, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 0, y: 10 }, + { x: 14, y: 14 } + ], + golds: [ + { x: 5, y: 8 }, + { x: 7, y: 12 } + ], + crystals: [ + { x: 10, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'k_006', + minStars: 6 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'k_008', + worldId: 'world_k', + levelNumber: 8, + name: 'Prvé k-čka', + gameType: 'banik', + difficulty: 2, + words: ['káva', 'kefa', 'kosť', 'kilo', 'kuna', 'kupiť', 'múka', 'oko', 'hák', 'hokej', + 'puk', 'Katka', 'kabát' + + ], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 10, y: 6 }, + { x: 6, y: 14 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 8, y: 12 }, + { x: 1, y: 7 } + ], + crystals: [ + { x: 9, y: 15 }, + { x: 14, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'k_007', + minStars: 7 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'k_009', + worldId: 'world_k', + levelNumber: 9, + name: 'Prvé k-čka', + gameType: 'banik', + difficulty: 3, + words: [ + 'puk', 'Katka', 'kabát', 'kukučka', 'kakao', 'kniha', 'koleno', 'kohút', 'koník' + + ], + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 1, + speechExercises: 3, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 10 }, + { x: 10, y: 14 }, + { x: 2, y: 9 } + ], + golds: [ + { x: 7, y: 11 }, + { x: 12, y: 12 }, + { x: 0, y: 7 } + ], + crystals: [ + { x: 9, y: 11 }, + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'k_008', + minStars: 10 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'k_010', + worldId: 'world_k', + levelNumber: 10, + name: 'Prvé k-čka', + gameType: 'banik', + difficulty: 3, + words: ['káva', 'kefa', 'kosť', 'kilo', 'kuna', 'kupiť', 'múka', 'oko', 'hák', 'hokej', + 'puk', 'Katka', 'kabát', 'kukučka', 'kakao', 'kniha', 'koleno', 'kohút', 'koník' + + ], + gameConfig: { + diamonds: 4, + golds: 6, + crystals: 1, + speechExercises: 3, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 6 }, + { x: 10, y: 14 }, + { x: 6, y: 8 }, + { x: 0, y: 10 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 12, y: 12 }, + { x: 1, y: 9 }, + { x: 3, y: 8 }, + { x: 5, y: 11 } + ], + crystals: [ + { x: 14, y: 10 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'k_009', + minStars: 11 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'k_011', + worldId: 'world_k', + levelNumber: 11, + name: 'Prvé kka', + gameType: 'banik', + difficulty: 3, + words: [ 'kuna', 'kupiť', 'múka', 'oko', 'hák', 'hokej', + 'kakao', 'kniha', 'koleno', 'kohút', 'koník', + 'kvet', 'kotol' + ], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 2, + speechExercises: 3, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 15, y: 14 }, + { x: 12, y: 15 }, + { x: 3, y: 12 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 4, y: 15 }, + { x: 5, y: 10 } + ], + crystals: [ + { x: 9, y: 13 }, + { x: 6, y: 7 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'k_010', + minStars: 12 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'k_012', + worldId: 'world_k', + levelNumber: 12, + name: 'Prvé k-čka', + gameType: 'banik', + difficulty: 3, + words: [ + 'puk', 'Katka', 'kabát', 'kukučka', 'kakao', 'kniha', 'koleno', 'kohút', 'koník', + 'kvet', 'kotol', 'keks', 'kopa' + ], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 7 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 6, y: 9 }, + { x: 7, y: 11 }, + { x: 14, y: 12 }, + { x: 4, y: 10 } + ], + crystals: [ + { x: 9, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'k_011', + minStars: 13 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'k_013', + worldId: 'world_k', + levelNumber: 13, + name: 'Prvé k-ka', + gameType: 'banik', + difficulty: 4, + words: ['káva', 'kefa', 'kosť', 'kilo', 'kuna', 'kupiť', 'múka', 'oko', 'hák', 'hokej', + 'puk', 'Katka', 'kabát', 'kukučka', 'kakao', 'kniha', 'koleno' + + ], + gameConfig: { + diamonds: 5, + golds: 3, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 9, y: 11 }, + { x: 10, y: 14 }, + { x: 5, y: 9 }, + { x: 0, y: 10 } + ], + golds: [ + { x: 14, y: 9 }, // gold na pozícii 2,9 + { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 2, y: 6 } + ], + crystals: [ + { x: 3, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'k_012', + minStars: 14 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'k_014', + worldId: 'world_k', + levelNumber: 14, + name: 'Prvé k-čka', + gameType: 'banik', + difficulty: 4, + words: [ + 'puk', 'Katka', 'kabát', 'kukučka', 'kakao', 'kniha', 'koleno', 'kohút', 'koník', + 'kvet', 'kotol', 'keks', 'kopa', 'krhla', 'kolík', 'košík' + ], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 10 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 10, y: 10 }, + { x: 0, y: 12 }, + { x: 6, y: 13 }, + { x: 14, y: 15 } + ], + crystals: [ + { x: 9, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'k_013', + minStars: 15 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'k_015', + worldId: 'world_k', + levelNumber: 15, + name: 'Prvé k-čka', + gameType: 'banik', + difficulty: 4, + words: [ + 'puk', 'Katka', 'kabát', 'kukučka', 'kakao', 'kniha', 'koleno', 'kohút', 'koník', + 'kvet', 'kotol', 'keks', 'kopa', 'krhla', 'kolík', 'košík', 'kočík', 'kapusta' + ], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 8 }, + { x: 10, y: 10 } + ], + golds: [ + { x: 0, y: 11 }, + { x: 4, y: 9 }, + { x: 7, y: 15 }, + { x: 15, y: 13 } + ], + crystals: [ + { x: 13, y: 12 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'k_014', + minStars: 16 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'k_016', + worldId: 'world_k', + levelNumber: 16, + name: 'Prvé k-čka', + gameType: 'banik', + difficulty: 5, + words: ['káva', 'kefa', 'kosť', 'kilo', 'kuna', 'kúpiť', 'múka', 'oko', 'hák', 'hokej', + 'puk', 'Katka', 'kabát', 'kukučka', 'kakao', 'kniha', 'koleno', 'kohút', 'koník', + 'kvet', 'kotol', 'keks', 'kopa', 'krhla', 'kolík', 'košík', 'kočík', 'kapusta' + ], + gameConfig: { + diamonds: 5, + golds: 6, + crystals: 2, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 0, y: 8 }, + { x: 12, y: 10 }, + { x: 9, y: 12 }, + { x: 4, y: 13 }, + { x: 15, y: 15 } + ], + golds: [ + { x: 1, y: 8 }, + { x: 2, y: 15 }, + { x: 5, y: 13 }, + { x: 7, y: 9 }, + { x: 6, y: 15 }, + { x: 13, y: 7 } + ], + crystals: [ + { x: 10, y: 11 }, + { x: 2, y: 10 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'k_015', + minStars: 20 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + ], + world_g: [ + { + id: 'g_001', + worldId: 'world_g', + levelNumber: 1, + name: 'Prvé g-ka', + gameType: 'banik', + difficulty: 1, + words: ['gajdy', 'gitara', 'guma', 'liga' + ], + gameConfig: { + diamonds: 1, + golds: 3, + crystals: 1, + speechExercises: 1, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 12, y: 7 } + ], + golds: [ + { x: 2, y: 9 }, + { x: 5, y: 10 }, + { x: 10, y: 13 }, + ], + crystals: [ + { x: 11, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: null, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: true + }, + { + id: 'g_002', + worldId: 'world_g', + levelNumber: 2, + name: 'Prvé g', + gameType: 'banik', + difficulty: 2, + words: ['gajdy', 'gitara', 'guma', 'liga', 'figa' + ], + gameConfig: { + diamonds: 1, + golds: 3, + crystals: 2, + speechExercises: 1, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 6, y: 10 }, + ], + golds: [ + { x: 2, y: 9 }, + { x: 7, y: 8 }, + { x: 10, y: 8 } + ], + crystals: [ + { x: 9, y: 7 }, + { x: 10, y: 12 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'g_001', + minStars: 1 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'g_003', + worldId: 'world_g', + levelNumber: 3, + name: 'Prvé g-ka', + gameType: 'banik', + difficulty: 1, + words: ['gajdy', 'gitara', 'guma', 'liga', 'figa', 'vagón', 'magnet' + ], + gameConfig: { + diamonds: 3, + golds: 5, + crystals: 1, + speechExercises: 1, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 8 }, + { x: 12, y: 7 }, + { x: 10, y: 12 } + ], + golds: [ + { x: 2, y: 9 }, + { x: 7, y: 8 }, + { x: 14, y: 9 }, + { x: 9, y: 10 }, + { x: 10, y: 12 } + ], + crystals: [ + { x: 1, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'g_002', + minStars: 2 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'g_004', + worldId: 'world_g', + levelNumber: 4, + name: 'Prvé g-ka', + gameType: 'banik', + difficulty: 1, + words: ['gajdy', 'gitara', 'figa', 'vagón', 'magnet', 'Gabo', 'gól', 'gombík' + ], + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 2, + speechExercises: 2, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 8 }, + { x: 10, y: 7 }, + { x: 9, y: 14 } + ], + golds: [ + { x: 3, y: 9 }, + { x: 7, y: 8 }, + { x: 14, y: 6 } + ], + crystals: [ + { x: 4, y: 12 }, + { x: 7, y: 11 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'g_003', + minStars: 3 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'g_005', + worldId: 'world_g', + levelNumber: 5, + name: 'Prvé g-čka', + gameType: 'banik', + difficulty: 2, + words: ['gajdy', 'gitara', 'guma', 'liga', 'figa', 'Gabo', 'gól', 'gombík' + ], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 4, + speechExercises: 2, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 13, y: 8 }, + { x: 9, y: 10 }, + { x: 1, y: 14 } + ], + golds: [ + { x: 0, y: 9 }, + { x: 3, y: 10 }, + { x: 7, y: 8 } + ], + crystals: [ + { x: 2, y: 10 }, + { x: 6, y: 12 }, + { x: 14, y: 14 }, + { x: 8, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'g_004', + minStars: 4 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'g_006', + worldId: 'world_g', + levelNumber: 6, + name: 'Prvé g-čka', + gameType: 'banik', + difficulty: 2, + words: ['gajdy', 'gitara', 'guma', 'liga', 'figa', 'vagón', 'magnet', 'Gabo', 'gól', 'gombík' + ], + gameConfig: { + diamonds: 3, + golds: 5, + crystals: 2, + speechExercises: 3, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 3, y: 7 }, + { x: 10, y: 7 }, + { x: 2, y: 14 } + ], + golds: [ + { x: 1, y: 9 }, + { x: 10, y: 10 }, + { x: 6, y: 7 }, + { x: 3, y: 15 }, + { x: 15, y: 12 } + ], + crystals: [ + { x: 7, y: 11 }, + { x: 10, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'g_005', + minStars: 5 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'g_007', + worldId: 'world_g', + levelNumber: 7, + name: 'Prvé g-čka', + gameType: 'banik', + difficulty: 2, + words: ['gajdy', 'Gabo', 'gól', 'gombík', + 'bageta', 'lego', 'gazda', 'gumáky', 'guľa' + ], + gameConfig: { + diamonds: 2, + golds: 2, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 0, y: 10 }, + { x: 14, y: 14 } + ], + golds: [ + { x: 5, y: 8 }, + { x: 7, y: 12 } + ], + crystals: [ + { x: 10, y: 9 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'g_006', + minStars: 6 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'g_008', + worldId: 'world_g', + levelNumber: 8, + name: 'Prvé g-čka', + gameType: 'banik', + difficulty: 2, + words: ['gajdy', 'gitara', 'guma', 'liga', 'figa', 'vagón', 'magnet', 'Gabo', 'gazda', 'gumáky', 'guľa' + ], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 10, y: 6 }, + { x: 6, y: 14 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 8, y: 12 }, + { x: 1, y: 7 } + ], + crystals: [ + { x: 9, y: 15 }, + { x: 14, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'g_007', + minStars: 7 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'g_009', + worldId: 'world_g', + levelNumber: 9, + name: 'Prvé g-čka', + gameType: 'banik', + difficulty: 3, + words: ['gajdy', 'gitara', 'guma', 'liga', 'figa', 'vagón', 'magnet', 'Gabo', 'gól', 'gombík', + 'bageta', 'lego', 'gazda', 'gumáky', 'guľa' + ], + gameConfig: { + diamonds: 3, + golds: 3, + crystals: 1, + speechExercises: 3, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 10 }, + { x: 10, y: 14 }, + { x: 2, y: 9 } + ], + golds: [ + { x: 7, y: 11 }, + { x: 12, y: 12 }, + { x: 0, y: 7 } + ], + crystals: [ + { x: 9, y: 11 }, + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'g_008', + minStars: 10 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'g_010', + worldId: 'world_g', + levelNumber: 10, + name: 'Prvé g-čka', + gameType: 'banik', + difficulty: 3, + words: ['gajdy', 'gitara', 'magnet', 'Gabo', 'gól', 'gombík', + 'guláš', 'gondola', 'gong', 'gunár', 'glóbus', 'gaštan' + + ], + gameConfig: { + diamonds: 4, + golds: 6, + crystals: 1, + speechExercises: 3, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 6 }, + { x: 10, y: 14 }, + { x: 6, y: 8 }, + { x: 0, y: 10 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 12, y: 12 }, + { x: 1, y: 9 }, + { x: 3, y: 8 }, + { x: 5, y: 11 } + ], + crystals: [ + { x: 14, y: 10 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'g_009', + minStars: 11 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'g_011', + worldId: 'world_g', + levelNumber: 11, + name: 'Prvé gka', + gameType: 'banik', + difficulty: 3, + words: ['gajdy', 'gitara', 'guma', 'liga', 'figa', 'vagón', 'magnet', 'Gabo', 'gól', 'gombík', + 'bageta', 'lego', 'gazda', 'gumáky', 'guľa', 'guláš' + ], + gameConfig: { + diamonds: 3, + golds: 4, + crystals: 2, + speechExercises: 3, + listeningExercises: 1, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 15, y: 14 }, + { x: 12, y: 15 }, + { x: 3, y: 12 } + ], + golds: [ + { x: 10, y: 9 }, + { x: 7, y: 11 }, + { x: 4, y: 15 }, + { x: 5, y: 10 } + ], + crystals: [ + { x: 9, y: 13 }, + { x: 6, y: 7 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'g_010', + minStars: 12 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'g_012', + worldId: 'world_g', + levelNumber: 12, + name: 'Prvé g-čka', + gameType: 'banik', + difficulty: 3, + words: ['Gabo', 'gól', 'gombík', + 'bageta', 'lego', 'gazda', 'gumáky', 'guľa', 'guláš', 'gondola', 'gong', 'gunár', + 'glóbus', 'gaštan' + ], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 7 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 6, y: 9 }, + { x: 7, y: 11 }, + { x: 14, y: 12 }, + { x: 4, y: 10 } + ], + crystals: [ + { x: 9, y: 15 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'g_011', + minStars: 13 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'g_013', + worldId: 'world_g', + levelNumber: 13, + name: 'Prvé g-ka', + gameType: 'banik', + difficulty: 4, + words: ['gajdy', 'gitara', 'guma', 'liga', 'figa', 'vagón', 'magnet', 'Gabo', 'gól', 'gombík', + 'bageta', 'lego', 'gazda', 'gumáky', 'guľa', 'guláš', 'gondola', 'gong', 'gunár', 'glóbus', 'gaštan' + + ], + gameConfig: { + diamonds: 5, + golds: 3, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 4, y: 12 }, // diamant na pozícii 3,8 + { x: 9, y: 11 }, + { x: 10, y: 14 }, + { x: 5, y: 9 }, + { x: 0, y: 10 } + ], + golds: [ + { x: 14, y: 9 }, // gold na pozícii 2,9 + { x: 7, y: 10 }, // gold na pozícii 7,8 + { x: 2, y: 6 } + ], + crystals: [ + { x: 3, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'g_012', + minStars: 14 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'g_014', + worldId: 'world_g', + levelNumber: 14, + name: 'Prvé g-čka', + gameType: 'banik', + difficulty: 4, + words: [ 'gong', 'gunár', 'glóbus', 'gaštan', + 'tágo', 'golf', 'bager', 'bungalov', 'kengura', 'doga', 'orgován', 'gorila' + ], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 4, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 10 }, + { x: 10, y: 14 } + ], + golds: [ + { x: 10, y: 10 }, + { x: 0, y: 12 }, + { x: 6, y: 13 }, + { x: 14, y: 15 } + ], + crystals: [ + { x: 9, y: 8 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'g_013', + minStars: 15 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'g_015', + worldId: 'world_g', + levelNumber: 15, + name: 'Prvé g-čka', + gameType: 'banik', + difficulty: 4, + words: [ + 'bageta', 'lego', 'gazda', 'gumáky', 'guľa', 'guláš', 'gondola', 'gong', 'gunár', 'glóbus', 'gaštan', + 'tágo', 'golf', 'bager', 'bungalov', 'kengura', 'doga', 'orgován', 'gorila' + ], + gameConfig: { + diamonds: 2, + golds: 4, + crystals: 1, + speechExercises: 3, + listeningExercises: 3, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 1, y: 8 }, + { x: 10, y: 10 } + ], + golds: [ + { x: 0, y: 11 }, + { x: 4, y: 9 }, + { x: 7, y: 15 }, + { x: 15, y: 13 } + ], + crystals: [ + { x: 13, y: 12 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'g_014', + minStars: 16 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + { + id: 'g_016', + worldId: 'world_g', + levelNumber: 16, + name: 'Prvé g-čka', + gameType: 'banik', + difficulty: 5, + words: ['gajdy', 'gitara', 'guma', 'liga', 'figa', 'vagón', 'magnet', 'Gabo', 'gól', 'gombík', + 'bageta', 'lego', 'gazda', 'gumáky', 'guľa', 'guláš', 'gondola', 'gong', 'gunár', 'glóbus', 'gaštan', + 'tágo', 'golf', 'bager', 'bungalov', 'kengura', 'doga', 'orgován', 'gorila' + ], + gameConfig: { + diamonds: 5, + golds: 6, + crystals: 2, + speechExercises: 4, + listeningExercises: 2, + mapSize: { width: 16, height: 10 } + }, + positions: { + diamonds: [ + { x: 0, y: 8 }, + { x: 12, y: 10 }, + { x: 9, y: 12 }, + { x: 4, y: 13 }, + { x: 15, y: 15 } + ], + golds: [ + { x: 1, y: 8 }, + { x: 2, y: 15 }, + { x: 5, y: 13 }, + { x: 7, y: 9 }, + { x: 6, y: 15 }, + { x: 13, y: 7 } + ], + crystals: [ + { x: 10, y: 11 }, + { x: 2, y: 10 } + ], + player: { x: 1, y: 1 } + }, + unlockRequirement: { + levelId: 'g_015', + minStars: 20 + }, + timeLimit: null, + minStarsToPass: 1, + isUnlocked: false + }, + ], +}; + +/** + * Funkcia na získanie všetkých levelov konkrétneho sveta + * @param {string} worldId - ID sveta + * @returns {Array} - pole levelov daného sveta + */ +function getWorldLevels(worldId) { + return LEVELS_CONFIG[worldId] || []; +} + +/** + * Funkcia na získanie konkrétneho levelu + * @param {string} levelId - ID levelu + * @returns {Object|null} - konfigurácia levelu alebo null + */ +function getLevelConfig(levelId) { + for (const worldId in LEVELS_CONFIG) { + const level = LEVELS_CONFIG[worldId].find(level => level.id === levelId); + if (level) return level; + } + return null; +} + +/** + * Funkcia na získanie levelu podľa sveta a čísla levelu + * @param {string} worldId - ID sveta + * @param {number} levelNumber - číslo levelu + * @returns {Object|null} - konfigurácia levelu alebo null + */ +function getLevelByNumber(worldId, levelNumber) { + const worldLevels = getWorldLevels(worldId); + return worldLevels.find(level => level.levelNumber === levelNumber) || null; +} + +/** + * Funkcia na získanie nasledujúceho levelu + * @param {string} currentLevelId - ID aktuálneho levelu + * @returns {Object|null} - konfigurácia nasledujúceho levelu alebo null + */ +function getNextLevel(currentLevelId) { + const currentLevel = getLevelConfig(currentLevelId); + if (!currentLevel) return null; + + return getLevelByNumber(currentLevel.worldId, currentLevel.levelNumber + 1); +} + +/** + * Funkcia na získanie predchádzajúceho levelu + * @param {string} currentLevelId - ID aktuálneho levelu + * @returns {Object|null} - konfigurácia predchádzajúceho levelu alebo null + */ +function getPreviousLevel(currentLevelId) { + const currentLevel = getLevelConfig(currentLevelId); + if (!currentLevel || currentLevel.levelNumber === 1) return null; + + return getLevelByNumber(currentLevel.worldId, currentLevel.levelNumber - 1); +} + +/** + * Funkcia na kontrolu, či je level odomknutý + * @param {string} levelId - ID levelu + * @returns {boolean} - true ak je level odomknutý + */ +function isLevelUnlocked(levelId) { + const level = getLevelConfig(levelId); + return level ? level.isUnlocked : false; +} + +/** + * Funkcia na získanie počtu levelov v svete + * @param {string} worldId - ID sveta + * @returns {number} - počet levelov v svete + */ +function getWorldLevelCount(worldId) { + return getWorldLevels(worldId).length; +} + +/** + * Funkcia na filtrovanie levelov podľa typu hry + * @param {string} worldId - ID sveta + * @param {string} gameType - typ hry ('banik', 'pexeso', 'mario') + * @returns {Array} - pole levelov s daným typom hry + */ +function getLevelsByGameType(worldId, gameType) { + return getWorldLevels(worldId).filter(level => level.gameType === gameType); +} + +// Export pre použitie v iných súboroch +if (typeof module !== 'undefined' && module.exports) { + module.exports = { + LEVELS_CONFIG, + getWorldLevels, + getLevelConfig, + getLevelByNumber, + getNextLevel, + getPreviousLevel, + isLevelUnlocked, + getWorldLevelCount, + getLevelsByGameType + }; +} \ No newline at end of file diff --git a/config/worlds.js b/config/worlds.js new file mode 100644 index 0000000..b98209b --- /dev/null +++ b/config/worlds.js @@ -0,0 +1,282 @@ +/** + * Konfigurácia svetov pre logopedickú hru + * Každý svet reprezentuje jedno písmeno/hlásku na precvičovanie + * + * Štruktúra sveta: + * - id: jedinečný identifikátor sveta + * - name: názov sveta (písmeno/hláska) + * - title: popisný názov sveta + * - description: krátky popis sveta + * - color: hlavná farba sveta (pre UI) + * - icon: ikona sveta (cesta k obrázku) + * - difficulty: obtiažnosť (1-5, kde 5 je najťažšia) + * - unlockRequirement: podmienka na odomknutie sveta + * - totalLevels: celkový počet levelov v svete + * - gameTypes: typy hier dostupné v tomto svete + */ + +const WORLDS_CONFIG = [ + { + id: 'world_r', + name: 'R', + title: 'R', + description: 'Precvičuj výslovnosť písmena R s rôznymi slovami', + color: '#FF6B6B', + icon: 'images/worlds/world_r.png', + difficulty: 4, + unlockRequirement: null, + totalLevels: 16, + gameTypes: ['banik', 'pexeso', 'mario'], + isUnlocked: true + }, + { + id: 'world_l', + name: 'L', + title: 'Svet písmena L', + description: 'Nauč sa správne vyslovovať písmeno L', + color: '#4ECDC4', + icon: 'images/worlds/world_l.png', + difficulty: 4, + unlockRequirement: null, + totalLevels: 16, + gameTypes: ['banik', 'pexeso', 'mario'], + isUnlocked: true + }, + { + id: 'world_c', + name: 'C', + title: 'Svet písmena C', + description: 'Precvičuj ostré písmeno C', + color: '#FFEAA7', + icon: 'images/worlds/world_c.png', + difficulty: 3, + unlockRequirement: null, + /*unlockRequirement: { + worldId: 'world_z', + minStars: 22 + },*/ + totalLevels: 16, + gameTypes: ['banik', 'pexeso', 'mario'], + isUnlocked: true + }, + { + id: 'world_z', + name: 'Z', + title: 'Svet písmena Z', + description: 'Zvládni buzivé písmeno Z', + color: '#96CEB4', + icon: 'images/worlds/world_z.png', + difficulty: 3, + /*unlockRequirement: { + worldId: 'world_s', + minStars: 20 + },*/ + unlockRequirement: null, + totalLevels: 16, + gameTypes: ['banik', 'pexeso', 'mario'], + isUnlocked: true + }, + { + id: 'world_s', + name: 'S', + title: 'Svet písmena S', + description: 'Precvičuj sykavky s písmenom S', + color: '#45B7D1', + icon: 'images/worlds/world_s.png', + difficulty: 3, + unlockRequirement: null, + totalLevels: 16, + gameTypes: ['banik', 'pexeso', 'mario'], + isUnlocked: true + }, + { + id: 'world_ch', + name: 'Č', + title: 'Svet písmena Č', + description: 'Čvachtaj s písmenom Č', + color: '#74B9FF', + icon: 'images/worlds/world_ch.png', + difficulty: 4, + unlockRequirement: null, + totalLevels: 16, + gameTypes: ['banik', 'pexeso', 'mario'], + isUnlocked: true + }, + { + id: 'world_zh', + name: 'Ž', + title: 'Svet písmena Ž', + description: 'Žuži s písmenom Ž', + color: '#FF9FF3', + icon: 'images/worlds/world_zh.png', + difficulty: 4, + unlockRequirement: null, + totalLevels: 16, + gameTypes: ['banik', 'pexeso', 'mario'], + isUnlocked: true + }, + { + id: 'world_sh', + name: 'Š', + title: 'Svet písmena Š', + description: 'Šušti s písmenom Š', + color: '#DDA0DD', + icon: 'images/worlds/world_sh.png', + difficulty: 4, + unlockRequirement: null, + totalLevels: 16, + gameTypes: ['banik', 'pexeso', 'mario'], + isUnlocked: true + }, + { + id: 'world_k', + name: 'K', + title: 'Svet písmena K', + description: 'Klopkaj s písmenom K', + color: '#00B894', + icon: 'images/worlds/world_k.png', + difficulty: 2, + unlockRequirement: null, + totalLevels: 16, + gameTypes: ['banik', 'pexeso', 'mario'], + isUnlocked: true + }, + { + id: 'world_g', + name: 'G', + title: 'Svet písmena G', + description: 'Grgaj s písmenom G', + color: '#E84393', + icon: 'images/worlds/world_g.png', + difficulty: 2, + unlockRequirement: null, + totalLevels: 16, + gameTypes: ['banik', 'pexeso', 'mario'], + isUnlocked: true + }, + { + id: 'world_d', + name: 'D', + title: 'Svet písmena D', + description: 'Dumaj s D', + color: '#5c1f34', + icon: 'images/worlds/world_d.png', + difficulty: 2, + unlockRequirement: null, + totalLevels: 16, + gameTypes: ['banik', 'pexeso', 'mario'], + isUnlocked: true + }, + { + id: 'world_t', + name: 'T', + title: 'Svet písmena T', + description: 'Tipuj s T', + color: '#e4970a', + icon: 'images/worlds/world_t.png', + difficulty: 2, + unlockRequirement: null, + totalLevels: 16, + gameTypes: ['banik', 'pexeso', 'mario'], + isUnlocked: true + }, + { + id: 'world_n', + name: 'N', + title: 'Svet písmena N', + description: 'Nafkaj s N', + color: '#3628fa', + icon: 'images/worlds/world_n.png', + difficulty: 2, + unlockRequirement: null, + totalLevels: 16, + gameTypes: ['banik', 'pexeso', 'mario'], + isUnlocked: true + }, + { + id: 'world_dh', + name: 'Ď', + title: 'Svet písmena Ď', + description: 'Ďabaj s mäkkým písmenom Ď', + color: '#FD79A8', // tmavoružová + icon: 'images/worlds/world_dh.png', + difficulty: 3, + unlockRequirement: null, + totalLevels: 16, + gameTypes: ['banik', 'pexeso', 'mario'], + isUnlocked: true + }, + { + id: 'world_th', + name: 'Ť', + title: 'Svet písmena Ť', + description: 'Ťukaj s mäkkým písmenom Ť', + color: '#FDCB6E', // oranžová + icon: 'images/worlds/world_th.png', + difficulty: 3, + unlockRequirement: null, + totalLevels: 16, + gameTypes: ['banik', 'pexeso', 'mario'], + isUnlocked: true + }, + { + id: 'world_nh', + name: 'Ň', + title: 'Svet písmena Ň', + description: 'Ňafaj s mäkkým písmenom Ň', + color: '#A29BFE', + icon: 'images/worlds/world_nh.png', + difficulty: 3, + unlockRequirement: null, + totalLevels: 16, + gameTypes: ['banik', 'pexeso', 'mario'], + isUnlocked: true + } + +]; + +/** + * Funkcia na získanie konfigurácie konkrétneho sveta + * @param {string} worldId - ID sveta + * @returns {Object|null} - konfigurácia sveta alebo null ak sa nenašiel + */ +function getWorldConfig(worldId) { + return WORLDS_CONFIG.find(world => world.id === worldId) || null; +} + +/** + * Funkcia na získanie všetkých svetov + * @returns {Array} - pole všetkých svetov + */ +function getAllWorlds() { + return WORLDS_CONFIG; +} + +/** + * Funkcia na získanie odomknutých svetov + * @returns {Array} - pole odomknutých svetov + */ +function getUnlockedWorlds() { + return WORLDS_CONFIG.filter(world => world.isUnlocked); +} + +/** + * Funkcia na kontrolu, či je svet odomknutý + * @param {string} worldId - ID sveta + * @returns {boolean} - true ak je svet odomknutý + */ +function isWorldUnlocked(worldId) { + const world = getWorldConfig(worldId); + return world ? world.isUnlocked : false; +} + +// Export pre použitie v iných súboroch +if (typeof module !== 'undefined' && module.exports) { + module.exports = { + WORLDS_CONFIG, + getWorldConfig, + getAllWorlds, + getUnlockedWorlds, + isWorldUnlocked + }; +} \ No newline at end of file diff --git a/css/miner.css b/css/miner.css new file mode 100644 index 0000000..c793f47 --- /dev/null +++ b/css/miner.css @@ -0,0 +1,2542 @@ +/* ===== GLOBÁLNE ŠTÝLY ===== */ + +/* Reset štýlov pre konzistenciu medzi prehliadačmi */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +/* Základné nastavenia pre body */ +body { + margin: 0; + padding: 0; + min-height: 100vh; + font-family: "Luckiest Guy", sans-serif; + overflow: hidden; + background: var(--Backgrtound, url('../images/worlds/background.jpg')) lightgray 50% / cover no-repeat; + box-shadow: 0 4px 4px 0 rgba(0, 0, 0, 0.25); + cursor: url('../images/cursor.png') 5 5, auto; + justify-content: center; + display: flex; +} + +/* ===== BACK BUTTON ===== */ +.back-button { + position: absolute; + top: 20px; + left: 30px; + color: #FFF; + text-align: center; + font-family: "Luckiest Guy", sans-serif; + font-size: 64px; + font-style: normal; + font-weight: 400; + line-height: normal; + cursor: url('../images/active_cursor4.png') 5 5, pointer; + z-index: 1001; + transition: transform 0.4s ease; +} + +.back-button:hover { + transform: rotate(8deg) scale(1.05); +} + +.back-button a { + color: #FFF; + text-decoration: none; + cursor: url('../images/active_cursor4.png') 5 5, pointer; +} + + +/* ===== LOADING ===== */ +.loading-screen { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: linear-gradient(135deg, #2c1810 0%, #1a0f08 100%); + z-index: 9999; + display: flex; + align-items: center; + justify-content: center; + opacity: 1; + transition: opacity 0.5s ease; +} + +.loading-content { + text-align: center; + color: white; +} + +.loading-logo { + margin-bottom: 2rem; +} + +.loading-text-jozino { + display: flex; + width: 444px; + height: 43px; + transform: rotate(0.093deg); + flex-direction: column; + justify-content: flex-end; + flex-shrink: 0; + + /* Štýlovanie textu */ + color: #FFF; + text-align: center; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy", sans-serif; + font-size: 100px; + font-style: normal; + font-weight: 400; + line-height: 18px; /* 20% */ + text-transform: uppercase; + margin-bottom: 0.5rem; + position: relative; + z-index: 10; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); +} + +.loading-text-banik { + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy", sans-serif; + font-size: 45px; + font-style: normal; + font-weight: 400; + line-height: 100%; + text-align: center; + text-transform: uppercase; + + /* Gradient pozadí pre text */ + background: conic-gradient(from 90deg at 50% 50%, #ECD517 0deg, #ECBB17 360deg); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + position: relative; + z-index: 20; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); +} + +.loading-spinner { + width: 50px; + height: 50px; + border: 4px solid rgba(236, 207, 23, 0.3); + border-top: 4px solid #ECCF17; + border-radius: 50%; + animation: spin 1s linear infinite; + margin: 0 auto 1rem; +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +.loading-message { + font-family: "Luckiest Guy", sans-serif; + font-size: 22px; + color: #ECCF17; + animation: pulse 1.5s ease-in-out infinite; +} + +@keyframes pulse { + 0%, 100% { opacity: 0.7; } + 50% { opacity: 1; } +} + + +/* ===== GAME ===== */ +/* Zatváracie X tlačidlo */ +.close { + position: absolute; + top: 20px; + right: 30px; + color: #FFF; + text-align: center; + font-family: "Luckiest Guy", sans-serif; + font-size: 64px; + font-style: normal; + font-weight: 400; + line-height: normal; + cursor: url('../images/active_cursor4.png') 5 5, pointer; + z-index: 1001; + transition: transform 0.4s ease; +} +.close:hover { + transform: rotate(15deg) scale(1.05); +} + +/* OKNO HRY */ +.hra { + width: 100%; + margin: 0 auto; + background-color: #17284900; + display: grid; + align-items: center; + grid-template-columns: 800px 300px; + justify-content: center; + text-align: center; + gap: 20px; + align-content: center; +} + +/* CANVAS */ +#gameCanvas { + background-image: url("../images/pozadie.jpg"); + min-width: 800px; + min-height: 800px; + max-height: 800px; + max-width: 800px; + display: flex; + flex-direction: column; + overflow: hidden; + border-radius: 10px; + border: 4px solid #AC3F0B; + background-size: cover; + background-position: center center; + background-repeat: no-repeat; + flex: 1; + transition: all 0.4s ease; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); +} + +/* HRÁČ */ +.player { + position: absolute; + width: 30px; + height: 30px; + background-color: red; + transition: transform 0.3s ease; /* Animácia rotácie */ +} +/* Rotácia hráča na základe smeru */ +.player.up { + transform: rotate(0deg); +} +.player.right { + transform: rotate(90deg); +} +.player.down { + transform: rotate(180deg); +} +.player.left { + transform: rotate(270deg); +} +.player::before { + content: ''; + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 10px 7px 0 7px; + border-color: black transparent transparent transparent; + top: -5px; + left: 50%; + transform: translateX(-50%); +} +/* Štýly pre šípku hráča */ +.player::before { + content: ''; + position: absolute; + width: 0; + height: 0; + border-style: solid; + border-width: 10px 7px 0 7px; + border-color: black transparent transparent transparent; + top: -5px; + left: 50%; + transform: translateX(-50%); +} +/* Šípka pre každý smer */ +.player.up::before { + border-width: 0 7px 10px 7px; + border-color: transparent transparent black transparent; + top: auto; + bottom: -5px; +} +.player.down::before { + border-width: 10px 7px 0 7px; + border-color: black transparent transparent transparent; + top: -5px; + bottom: auto; +} +.player.left::before { + border-width: 7px 10px 7px 0; + border-color: transparent black transparent transparent; + left: -5px; +} +.player.right::before { + border-width: 7px 0 7px 10px; + border-color: transparent transparent transparent black; + left: auto; + right: -5px; +} + +/* Side Panel */ +.stats-menu { + justify-content: center; + gap: 20px; + display: flex; + flex-direction: column; + align-items: stretch; +} + +/* logo sekcia */ +.logo-container { + position: relative; + transition: transform 0.4s ease; + cursor: url('../images/cursor.png') 5 5, default; +} + +.logo-container:hover { + transform: rotate(0.093deg) scale(1.05); +} + +.logo-text { + min-width: 230px; + max-width: 230px; + flex-shrink: 1; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); +} + +/* Hlavný text "JOŽINO" */ +.text-jozino { + display: flex; + min-width: 230px; + max-width: 230px; + flex-direction: column; + justify-content: flex-end; + flex-shrink: 0; + padding-top: 10px; + + /* Štýlovanie textu */ + color: #FFF; + text-align: center; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy", sans-serif; + font-size: 48px; + font-style: normal; + font-weight: 400; + text-transform: uppercase; + margin-bottom: 0.5rem; + position: relative; + z-index: 10; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); +} + +/* Podtext "BANÍK" */ +.text-banik { + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy", sans-serif; + font-size: 30px; + font-style: normal; + font-weight: 400; + line-height: 100%; + text-align: center; + text-transform: uppercase; + margin-top:-30px; + + /* Gradient pozadí pre text */ + background: conic-gradient(from 90deg at 50% 50%, #ECD517 0deg, #ECBB17 360deg); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + position: relative; + z-index: 20; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); + padding-bottom: 15px; +} + +.stats-menu h1 { + text-align: center; + font-family: "Luckiest Guy", sans-serif; + font-size: 38px; + font-style: normal; + font-weight: 400; + line-height: normal; + margin: 0; + padding: 5px 10px; + letter-spacing: 1.6px; + + background: linear-gradient(180deg, #EF0 0%, #FFD900 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + line-height: 150%; + text-transform: uppercase; + +} + +/* PANEL DIAMANTY, GOLDY*/ +.window{ + max-height: 250px; + min-width: 250px; + max-width: 250px; + background: url('../images/pozadie_button_mobile_2.png') lightgray 50% / cover no-repeat; + + flex: 1; /* Každé okno zaberie rovnaký priestor */ + border-radius: 10px; + display: flex; + flex-direction: column; + overflow: hidden; + justify-content: center; + align-items: center; + + border: 4px solid #AC3F0B; + transition: all 0.4s ease; + cursor: url('../images/cursor.png') 5 5, auto; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); +} + +/* PANEL DIAMANTY, GOLDY*/ +.menu-diamonds{ + max-height: 250px; + min-width: 250px; + max-width: 250px; + background: url('../images/pozadie_button_mobile_2.png') lightgray 50% / cover no-repeat; + + flex: 1; /* Každé okno zaberie rovnaký priestor */ + border-radius: 10px; + display: flex; + flex-direction: column; + overflow: hidden; + + border: 4px solid #AC3F0B; + transition: all 0.4s ease; + cursor: url('../images/cursor.png') 5 5, auto; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); +} + +/* PANEL DIAMANTY, GOLDY*/ +.menu-kov{ + max-height: 250px; + min-width: 250px; + max-width: 250px; + background: url('../images/pozadie_button_mobile_2.png') lightgray 50% / cover no-repeat; + + flex: 1; /* Každé okno zaberie rovnaký priestor */ + border-radius: 10px; + display: flex; + flex-direction: column; + overflow: hidden; + + border: 4px solid #AC3F0B; + transition: all 0.4s ease; + cursor: url('../images/cursor.png') 5 5, auto; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); +} + +.menu-golds{ + max-height: 250px; + min-width: 250px; + max-width: 250px; + background: url('../images/pozadie_button_mobile_2.png') lightgray 50% / cover no-repeat; + + flex: 1; /* Každé okno zaberie rovnaký priestor */ + border-radius: 10px; + display: flex; + flex-direction: column; + overflow: hidden; + + border: 4px solid #AC3F0B; + transition: all 0.4s ease; + cursor: url('../images/cursor.png') 5 5, auto; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); +} + +/* Štýly pre jednotlivé položky v menu */ +.item { + display: flex; + align-items: center; +} + +.item img { + width: 30px; + height: 30px; + margin-right: 10px; +} + +.diamonds-container, .golds-container, .kov-container { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: center; + padding: 0px 10px 15px 10px; +} +.diamond-item, .gold-item, .kov-item { + margin-right: 10px; +} +.diamond-image, .gold-image, .kov-image { + width: 30px; + height: auto; +} +.diamond-item:not(.collected) .diamond-image, .gold-item:not(.collected) .gold-image, .kov-item:not(.collected) .kov-image { + filter: grayscale(100%); +} + +.stats{ + padding-bottom: 15px; + justify-content: center; + align-items: center; +} + +.stats a { + text-align: center; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy"; + font-size: 24px; + font-style: normal; + font-weight: 400; + line-height: 20px; /* 50% */ + text-transform: uppercase; + + background: linear-gradient(180deg, #EF0 0%, #FFD900 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} + +.stats span { + color: #FFF; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy"; + font-size: 24px; + font-style: normal; + font-weight: 400; + line-height: normal; + justify-content: center; + display: inline-flex; + align-items: center; + gap: 4px; +} + +.stats img { + width: 24px; + height: 24px; +} + +/* ==== Cvičenie na výslovnosť ==== */ +/*Dialogové okno */ +.modal { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.14); + backdrop-filter: blur(9px); + z-index: 1000; + transition: all 0.3s ease; +} + +.modal.modal-open { + background: rgba(0, 0, 0, 0.14); + backdrop-filter: blur(9px); +} + +.execise-window{ + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + + + width: 70%; + height: 80%; + max-width: 450px; + max-height: 500px; + min-width: 400px; + min-height: 450px; + background: url('../images/pozadie_button_mobile_2.png') lightgray 50% / cover no-repeat; + + /* Vnútorný obsah */ + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + text-align: center; + padding: 2rem 3rem; + box-sizing: border-box; + border: 4px solid #ECCF17; + border-radius: 30px; + + /* Animácie */ + transition: all 0.4s ease; +} + +.cvicenie-content { + padding: 10px; + display: flex; + gap: 10px; + flex-direction: column; +} + +.cvicenie-text { + text-align: center; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy"; + font-size: 45px; + font-style: normal; + font-weight: 400; + text-transform: uppercase; + display: flex; + justify-content: center; + flex-direction: column; +} + +.cvicenie-text p { + background: linear-gradient(180deg, #EF0 0%, #FFD900 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + padding-top: 15px; +} + +.cvicenie-text button { + width: auto; + max-height: 200px; + display: block; +} + +.tlacidlo { + cursor: url('../images/active_cursor4.png') 5 5, pointer; + outline: none; /* Odstráňte ohraničenie */ + transition: transform 0.2s ease; /* Animácia pre plynulé zväčšenie */ + width: 253px; + height: 69px; + flex-shrink: 0; + border-radius: 30px; + border: 4px solid #1A511D; + background: linear-gradient(0deg, #15981E 0%, #0F1 100%); + position: relative; + justify-content: center; + display: flex; + align-items: center; +} + +.tlacidlo button { + background-color: transparent; + border: none +} + +.tlacidlo a { + text-align: center; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy"; + font-size: 40px; + font-style: normal; + font-weight: 400; + text-transform: uppercase; + background: linear-gradient(180deg, #EF0 0%, #FFD900 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} + +.tlacidlo:hover { + background-color: rgba(255, 228, 196, 0); + transform: scale(0.98); + border: 4px solid #9A0003; + background: linear-gradient(0deg, #AD0003 0%, #FF2528 100%); +} + +.tlacidlo:active { + background-color: rgba(255, 228, 196, 0); + transform: scale(0.98); + border: 4px solid #9A0003; + background: linear-gradient(0deg, #AD0003 0%, #FF2528 100%); +} + +/* Štýl div kontajnera počas nahrávania */ +.tlacidlo.recording { + background: linear-gradient(135deg, #e74c3c, #c0392b); + transform: scale(0.98); + animation: recording-pulse 1s ease-in-out infinite alternate; +} + +.tlacidlo.recording button { + background: transparent !important; + cursor: not-allowed !important; +} + +.tlacidlo.recording button a { + color: #fff !important; + text-shadow: 0 1px 2px rgba(0,0,0,0.5); +} + +/* Pulzovanie celého div-u */ +@keyframes recording-pulse { + 0% { + box-shadow: 0 0 0 0 rgba(231, 76, 60, 0.7); + opacity: 1; + } + 100% { + box-shadow: 0 0 0 10px rgba(231, 76, 60, 0); + opacity: 0.9; + } +} + +.cvicenie { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.14); + backdrop-filter: blur(9px); + z-index: 1000; + transition: all 0.3s ease; +} + +.cvicenie-content-2 { + padding: 20px; + display: flex; + gap: 5px; + flex-direction: column; + justify-content: center; +} + +.cvicenie-content-2 p { + color: #FFF; + text-align: center; + font-family: "Luckiest Guy", sans-serif; + font-size: 22px; + font-style: normal; + font-weight: 100; + line-height: normal; + margin: 0; + padding: 0px 10px; + letter-spacing: 1.6px; +} + +.cvicenie-content-2 h1 { + text-align: center; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy"; + font-size: 40px; + font-style: normal; + font-weight: 400; + text-transform: uppercase; + background: linear-gradient(180deg, #EF0 0%, #FFD900 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} + +.cvicenie-text img{ + min-width: 100px; + max-width: 300px; + max-height: 200px; + max-width: 253px; + height: 200px; + width: auto; +} + +.buttonsContainer { + gap: 10px; +} + +#buttonsContainer img { + width: 50px; /* Prispôsobte veľkosť podľa potreby */ + padding: 2px; + height: 50px; + cursor: url('../images/active_cursor4.png') 5 5, pointer; +} + +.buttonsContainer:hover img { + scale: 0.98; +} + +/* Vysledok element - skrytý na začiatku */ +.vysledok { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.85); + backdrop-filter: blur(5px); + display: none; /* PRIDANÉ: skrytý na začiatku */ + flex-direction: column; + align-items: center; + justify-content: center; + z-index: 1000; + border-radius: 30px; + overflow: hidden; +} + +/* Keď sa zobrazuje výsledok */ +.vysledok.show { + display: flex; +} + +/* Kontajner pre obsah vysledku */ +.vysledok center { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100%; + padding: 20px; + box-sizing: border-box; +} + +/* Obrázok výsledku */ +.vysledok img { + max-width: 300px !important; + max-height: 250px !important; + width: auto !important; + height: auto !important; + object-fit: contain; +} + +/* Správy v rámci vysledku */ +.vysledok .attempt-message, +.vysledok .success-message { + margin-top: 20px; + z-index: 1001; +} + + +.menu-container { + margin-bottom: 2rem; + z-index: 3; + position: relative; +} + +.main-menu ul { + list-style: none; + padding: 0; + margin: 0; +} + +.main-menu li { + margin-bottom: 1rem; +} + + +/* Štýlovanie menu tlačidiel */ +.menu-button { + display: flex; + align-items: center; + justify-content: center; + text-decoration: none; + cursor: pointer; + position: relative; + + /* Rozměry tlačidla podľa Figma */ + width: 250px; + height: 64px; + flex-shrink: 0; + border-radius: 30px; + + /* Tieň pre tlačidlá */ + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); + + /* Štandardné neaktívne tlačidlo */ + border: 4px solid #AC3F0B; + background: url('../images/pozadie_button.png') lightgray 50% / cover no-repeat; + + /* Prechod pre animácie */ + transition: all 0.3s ease; + + /* Text štýlovanie */ + font-family: "Luckiest Guy", sans-serif; + font-size: 32px; + font-style: normal; + font-weight: 400; + line-height: 20px; /* 50% */ + text-transform: uppercase; + text-align: center; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + + /* Základná farba textu pre neaktívne tlačidlá */ + color: #FFF; + + cursor: url('../images/active_cursor4.png') 5 5, pointer; + z-index: 10000; +} + + +/* Hover efekt pre menu tlačidlá */ +.menu-button:hover { + box-shadow: inset 0 0 20px 2px rgba(236, 207, 23, 0.3); + border: 4px solid #ECCF17; + scale: 0.98; +} + +/* Aktívne tlačidlo pri stlačení */ +.menu-button:active { + transform: rotate(0.093deg) translateY(0) scale(0.98); + filter: drop-shadow(2px 4px 4px rgba(0, 0, 0, 0.3)); +} + +/* Hviezdy v modali */ +.modal-stars { + display: flex; + gap: 5px; + justify-content: center; + margin-top: -15px; +} + +.modal-stars img { + width: 50px; + height: 50px; +} + +#blur-background { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + backdrop-filter: blur(4px); /* Rozmazanie všetkého pod #blur-background */ + z-index: 999; +} +.cvicenie-open #blur-background { + filter: blur(4px) grayscale(50%); /* Aplikuj rozmazanie a zosvetlenie pozadia, keď je dialogové okno otvorené */ +} + +.gameend{ + height: auto; + width: auto; + position: relative; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + text-align: center; +} + +/*Dialogové okno pre menu */ +.dialogove-okno { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.14); + backdrop-filter: blur(9px); + z-index: 1000; + transition: all 0.3s ease; +} + +/*menu button*/ +#menuButton { + position: absolute; + top: 10px; + left: 10px; + width: 43px; + height: 43px; + border-radius: 50%; + background-image: url("../images/menubutton.png"); + background-size: cover; + background-position: center; + border: none; + cursor: pointer; + outline: none; + z-index: 1000; + cursor: url('../images/active_cursor4.png') 5 5, pointer; +} +.kruhove-tlacidlo { + width: 43px; + height: 43px; + border-radius: 50%; /* Tvar kruhu */ + background-image: url("../images/menubutton.png"); /* Cesta k obrázku, ktorý chceš použiť ako pozadie */ + background-size: cover; /* Upravuje veľkosť obrázku na takú, aby pokrýval celé tlačidlo */ + background-position: center; /* Zarovnáva obrázok na strede */ + border: none; /* Bez ohraničenia */ + cursor: pointer; /* Zmení kurzor na ukazovateľ, aby naznačil interaktívnosť */ + outline: none; /* Odstráni ohraničenie po kliknutí */ + cursor: url('../images/active_cursor4.png') 5 5, pointer; +} +.kruhove-tlacidlo:focus { + outline: none; /* Odstráni ohraničenie po získaní zaostrenia */ +} + + +/* ===== AKČNÉ TLAČIDLO VĽAVO ===== */ +.action-controls { + position: fixed; + bottom: 25px; + left: 25px; + display: none; + padding: 20px; +} + +.action-button { + width: 80px; + height: 80px; + border: 4px solid #AC3F0B; + background: linear-gradient(180deg, #EF0 0%, #FFD900 100%); + color: #000; + cursor: url('../images/active_cursor4.png') 5 5, pointer; + border-radius: 50%; + transition: all 0.2s ease; + box-shadow: 0 6px 20px rgba(255, 217, 0, 0.4); + user-select: none; + -webkit-tap-highlight-color: transparent; + font-family: "Luckiest Guy", sans-serif; + font-size: 32px; + font-weight: bold; + display: flex; + align-items: center; + justify-content: center; + position: relative; + opacity: 0.6; +} + +.action-button::before { + content: ''; + position: absolute; + width: 100%; + height: 100%; + border-radius: 50%; + background: radial-gradient(circle at 30% 30%, rgba(255, 255, 255, 0.3), transparent 50%); + pointer-events: none; + opacity: 1; +} + +.action-button:hover { + transform: scale(1.05); + box-shadow: 0 8px 25px rgba(255, 217, 0, 0.6); + border: 4px solid #ECCF17; + background: linear-gradient(180deg, #FFD900 0%, #ECCF17 100%); + opacity: 1; +} + +.action-button:active { + transform: scale(0.95); + box-shadow: 0 4px 15px rgba(255, 217, 0, 0.4); + border: 4px solid #9A0003; + background: linear-gradient(0deg, #AD0003 0%, #FF2528 100%); + color: #FFF; + opacity: 1; +} + +/* ===== VIRTUAL JOYSTICK VPRAVO ===== */ +.joystick-controls { + position: fixed; + bottom: 25px; + right: 25px; + display: none; +} + +.virtual-joystick { + position: relative; + width: 120px; + height: 120px; + background: url('../images/pozadie_button_mobile_2.png') lightgray 50% / cover no-repeat; + backdrop-filter: blur(10px); + border-radius: 50%; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3); + border: 4px solid #AC3F0B; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); + touch-action: none; + user-select: none; + opacity: 0.6; +} + +/* Vnútorný kruh - oblasť pohybu */ +.joystick-base { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 90px; + height: 90px; + border-radius: 50%; + background: radial-gradient(circle at center, + rgba(21, 152, 30, 0.1) 0%, + rgba(21, 152, 30, 0.05) 50%, + transparent 80%); + border: 2px dashed rgba(21, 152, 30, 0.4); +} + +/* Pohyblivý knob */ +.joystick-knob { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 40px; + height: 40px; + background: linear-gradient(0deg, #15981E 0%, #0F1 100%); + border: 3px solid #1A511D; + border-radius: 50%; + box-shadow: 0 4px 15px rgba(21, 152, 30, 0.4); + transition: all 0.1s ease; + cursor: grab; + z-index: 10; + opacity: 1; +} + +.joystick-knob:active { + cursor: grabbing; + transform: translate(-50%, -50%) scale(1.1); + box-shadow: 0 6px 20px rgba(21, 152, 30, 0.6); + border: 3px solid #ECCF17; +} + +/* Indikátor smeru (šípka na knobe) */ +.joystick-knob::after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 12px; + height: 12px; + background: #FFF; + border-radius: 50%; + box-shadow: 0 0 0 2px #000; + opacity: 0.8; +} + +/* Aktivny stav joysticku */ +.virtual-joystick.active { + border: 4px solid #ECCF17; + box-shadow: 0 8px 32px rgba(236, 207, 23, 0.4); + opacity: 1; +} + +.virtual-joystick.active .joystick-base { + border: 2px solid rgba(236, 207, 23, 0.6); + background: radial-gradient(circle at center, + rgba(236, 207, 23, 0.15) 0%, + rgba(236, 207, 23, 0.08) 50%, + transparent 80%); +} + +/* ===== ANIMÁCIE PRE ZOBRAZENIE ===== */ +.action-controls.show, .joystick-controls.show { + animation: slideInMobile 0.3s ease-out; +} + +@keyframes slideInMobile { + from { + opacity: 0; + transform: translateY(20px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +/* ===== HAPTIC FEEDBACK SIMULÁCIA ===== */ +.action-button.pressed { + animation: hapticPulse 0.1s ease-out; +} + +@keyframes hapticPulse { + 0% { transform: scale(1); } + 50% { transform: scale(0.95); } + 100% { transform: scale(1); } +} + +/* Debug indikátor pozície (voliteľný) */ +.joystick-debug { + position: absolute; + top: -30px; + left: 50%; + transform: translateX(-50%); + background: rgba(0, 0, 0, 0.8); + color: white; + padding: 2px 8px; + border-radius: 10px; + font-size: 10px; + font-family: monospace; + display: none; +} + +.virtual-joystick.debug .joystick-debug { + display: block; +} + + + +/* ====================================== */ +/* Progress indikátor pre rečové cvičenie */ +/* ====================================== */ +.word-progress { + margin-bottom: -10px; + text-align: center; +} + +.progress-text { + font-family: "Luckiest Guy", sans-serif; + font-size: 18px; + color: #ffffff; + margin-bottom: 10px; + text-shadow: 1px 1px 2px rgba(0,0,0,0.1); +} + +.progress-bar { + width: 100%; + height: 12px; + background: rgba(255,255,255,0.3); + border-radius: 6px; + overflow: hidden; + border: 2px solid #e1e8f0; + box-shadow: inset 0 2px 4px rgba(0,0,0,0.1); +} + +.progress-fill { + height: 100%; + background: linear-gradient(90deg, #27ae60, #2ecc71); + border-radius: 4px; + transition: width 0.5s ease; + position: relative; +} + +.progress-fill::after { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: linear-gradient(90deg, transparent, rgba(255,255,255,0.3), transparent); + animation: progress-shine 2s ease-in-out infinite; +} + +@keyframes progress-shine { + 0% { transform: translateX(-100%); } + 100% { transform: translateX(100%); } +} + +/* ====================================== */ +/* Správa o zostávajúcich pokusoch - + prispôsobená exercise window */ +/* MODAL OKNA PRE CVICENIA */ +/* ====================================== */ +.attempt-message { + font-family: "Luckiest Guy", sans-serif; + font-size: 18px; + color: #fff; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + margin-top: 10px; + padding: 8px 15px; + background: linear-gradient(0deg, #AD0003 0%, #FF2528 100%); + border-radius: 20px; + border: 3px solid #9A0003; + display: inline-block; + text-shadow: 1px 1px 2px rgba(0,0,0,0.3); + box-shadow: 0 2px 6px rgba(0,0,0,0.3); + max-width: 280px; + text-transform: uppercase; +} + +.attempt-message.final-attempt { + background: linear-gradient(0deg, #8B0000 0%, #DC143C 100%); + border-color: #8B0000; + animation: final-attempt-warning 0.5s ease-in-out 3; +} + +@keyframes final-attempt-warning { + 0%, 100% { transform: scale(1); } + 50% { transform: scale(1.05); box-shadow: 0 4px 12px rgba(220, 20, 60, 0.5); } +} + +/* Správa o úspechu - prispôsobená exercise window */ +.success-message { + font-family: "Luckiest Guy", sans-serif; + font-size: 20px; + color: #fff; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + margin-top: 10px; + padding: 10px 20px; + background: linear-gradient(0deg, #15981E 0%, #0F1 100%); + border-radius: 20px; + border: 3px solid #1A511D; + display: inline-block; + text-shadow: 1px 1px 2px rgba(0,0,0,0.3); + box-shadow: 0 2px 6px rgba(0,0,0,0.3); + text-transform: uppercase; + animation: success-celebration 0.6s ease-out; +} + +@keyframes success-celebration { + 0% { + transform: scale(0.8); + opacity: 0; + } + 50% { + transform: scale(1.1); + box-shadow: 0 4px 12px rgba(21, 152, 30, 0.5); + } + 100% { + transform: scale(1); + opacity: 1; + box-shadow: 0 2px 6px rgba(0,0,0,0.3); + } +} + + +/* ==================================== + POSLUCHOVÉ CVIČENIE - ŠTÝLY +==================================== */ + +/* Inštrukcie pre posluchové cvičenie */ +.listening-instruction { + text-align: center; + margin: 8px 0; +} + +.listening-instruction p { + font-family: "Luckiest Guy", sans-serif; + font-size: 20px; + color: #fff; + -webkit-text-stroke: 1px #000; + text-shadow: 1px 1px 2px rgba(0,0,0,0.3); + margin: 0; + line-height: 1.2; + text-transform: uppercase; +} + +/* Status zvuku */ +.sound-status-container { + display: flex; + justify-content: center; + margin: 20px 0px 8px 0px; +} + +.sound-status { + font-family: "Luckiest Guy", sans-serif; + font-size: 20px; + color: #fff; + -webkit-text-stroke: 1px #000; + text-shadow: 1px 1px 2px rgba(0,0,0,0.3); + background: linear-gradient(135deg, #3498db, #2980b9); + padding: 12px 24px; + border-radius: 25px; + border: 3px solid #2c3e50; + box-shadow: 0 4px 8px rgba(0,0,0,0.2); + text-transform: uppercase; + animation: sound-pulse 2s ease-in-out infinite; +} + +@keyframes sound-pulse { + 0%, 100% { transform: scale(1); } + 50% { transform: scale(1.05); box-shadow: 0 6px 12px rgba(52, 152, 219, 0.3); } +} + +/* Informácie o pokusoch */ +.listening-attempts-info { + display: flex; + justify-content: center; + margin: 15px 0; +} + +.attempts-display { + font-family: "Luckiest Guy", sans-serif; + font-size: 18px; + color: #fff; + -webkit-text-stroke: 1px #000; + text-shadow: 1px 1px 2px rgba(0,0,0,0.3); + background: rgba(255, 255, 255, 0.1); + padding: 8px 16px; + border-radius: 20px; + border: 2px solid rgba(255, 255, 255, 0.2); + text-transform: uppercase; +} + +.attempts-display span { + color: #f39c12; + font-weight: bold; +} + +/* Kontajner pre tlačidlá */ +.listening-buttons-container { + display: flex; + justify-content: center; + gap: 30px; + margin: 5px 0; + flex-wrap: nowrap; + flex-direction: row; +} + +/* Tlačidlá pre posluchové cvičenie */ +.listening-btn { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + background: linear-gradient(135deg, #27ae60, #2ecc71); + border: 4px solid #1e8449; + border-radius: 25px; + padding: 20px 25px; + cursor: url('../images/active_cursor4.png') 5 5, pointer; + transition: all 0.3s ease; + box-shadow: 0 6px 12px rgba(0,0,0,0.2); + min-width: 140px; + position: relative; + overflow: hidden; +} + +.listening-btn img { + width: 50px; + height: 50px; + margin-bottom: 10px; + transition: transform 0.3s ease; + filter: drop-shadow(2px 2px 4px rgba(0,0,0,0.3)); +} + +.listening-btn span { + font-family: "Luckiest Guy", sans-serif; + font-size: 18px; + color: #fff; + -webkit-text-stroke: 1px #000; + text-shadow: 2px 2px 4px rgba(0,0,0,0.3); + text-transform: uppercase; + letter-spacing: 1px; +} + +/* Hover efekty */ +.listening-btn:hover { + transform: translateY(-3px) scale(1.05); + box-shadow: 0 8px 16px rgba(0,0,0,0.3); +} + +.listening-btn:hover img { + transform: scale(0.98); +} + +.listening-btn:hover::before { + content: ''; + position: absolute; + top: 0; + left: -100%; + width: 100%; + height: 100%; + background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent); + transition: left 0.5s ease; + left: 100%; +} + +/* Click efekt */ +.listening-btn:active { + transform: translateY(-1px) scale(1.02); + box-shadow: 0 4px 8px rgba(0,0,0,0.2); +} + +/* Špecifické farby pre tlačidlá */ +.listening-btn-same { + background: linear-gradient(135deg, #27ae60, #2ecc71); + border-color: #1e8449; +} + +.listening-btn-same:hover { + background: linear-gradient(135deg, #2ecc71, #58d68d); + border-color: #27ae60; +} + +.listening-btn-different { + background: linear-gradient(135deg, #e74c3c, #ec7063); + border-color: #c0392b; +} + +.listening-btn-different:hover { + background: linear-gradient(135deg, #ec7063, #f1948a); + border-color: #e74c3c; +} + +/* Kontajner pre výsledky */ +.listening-result { + display: flex; + justify-content: center; + margin: 20px 0; + opacity: 0; + transform: translateY(20px); + transition: all 0.5s ease; +} + +.listening-result.show { + opacity: 1; + transform: translateY(0); +} + +/* Výsledok - správny/nesprávny */ +.result-container { + display: flex; + flex-direction: column; + align-items: center; + gap: 15px; + padding: 20px; + border-radius: 25px; + max-width: 300px; + text-align: center; + position: relative; + overflow: hidden; +} + +.result-container.correct { + background: linear-gradient(135deg, rgba(46, 204, 113, 0.9), rgba(39, 174, 96, 0.9)); + border: 3px solid #27ae60; + box-shadow: 0 0 20px rgba(46, 204, 113, 0.4); +} + +.result-container.incorrect { + background: linear-gradient(135deg, rgba(231, 76, 60, 0.9), rgba(192, 57, 43, 0.9)); + border: 3px solid #c0392b; + box-shadow: 0 0 20px rgba(231, 76, 60, 0.4); +} + +.result-icon { + width: 80px; + height: 80px; + filter: drop-shadow(2px 2px 6px rgba(0,0,0,0.4)); + animation: result-icon-bounce 0.6s ease-out; +} + +@keyframes result-icon-bounce { + 0% { + transform: scale(0.3) rotate(-10deg); + opacity: 0; + } + 50% { + transform: scale(1.2) rotate(5deg); + } + 100% { + transform: scale(1) rotate(0deg); + opacity: 1; + } +} + +/* Správy o výsledku - prepojiť s existujúcimi štýlmi */ +.result-container .success-message, +.result-container .error-message { + margin: 0; +} + +/* Animácia pre progress bar - používa existujúce štýly z word-progress */ +#listening-word-progress { + margin-bottom: 10px; +} + +/* Dodatočné vylepšenia pre tlačidlá */ +.listening-btn::after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + width: 0; + height: 0; + background: rgba(255, 255, 255, 0.3); + border-radius: 50%; + transform: translate(-50%, -50%); + transition: width 0.4s ease, height 0.4s ease; +} + +.listening-btn:active::after { + width: 200%; + height: 200%; +} + +/* Pulzovanie pre posledný pokus */ +.error-message.final-attempt { + animation: final-warning-pulse 1s ease-in-out 3; +} + +@keyframes final-warning-pulse { + 0%, 100% { + transform: scale(1); + text-shadow: 2px 2px 4px rgba(0,0,0,0.3); + } + 50% { + transform: scale(1.05); + text-shadow: 2px 2px 8px rgba(0,0,0,0.5); + } +} + +/* Štýl pre blokované tlačidlá */ +.listening-btn.disabled-btn { + opacity: 0.5; + cursor: not-allowed !important; + pointer-events: none; /* Zabráni všetkým hover/click efektom */ + background: linear-gradient(135deg, #7f8c8d, #95a5a6) !important; + border-color: #626567 !important; + transform: none !important; + box-shadow: 0 2px 4px rgba(0,0,0,0.1) !important; +} + +/* Zablokované tlačidlá nemajú hover efekty */ +.listening-btn.disabled-btn:hover { + transform: none !important; + box-shadow: 0 2px 4px rgba(0,0,0,0.1) !important; + background: linear-gradient(135deg, #7f8c8d, #95a5a6) !important; + border-color: #626567 !important; +} + +/* Obrázky v blokovaných tlačidlách sú menej viditeľné */ +.listening-btn.disabled-btn img { + opacity: 0.5; + filter: grayscale(100%) drop-shadow(1px 1px 2px rgba(0,0,0,0.2)); +} + +/* Text v blokovaných tlačidlách */ +.listening-btn.disabled-btn span { + opacity: 0.7; + color: #bdc3c7 !important; + -webkit-text-stroke-color: #2c3e50 !important; +} + +/* Animácia pre odblokovanie tlačidiel */ +.listening-btn:not(.disabled-btn) { + transition: all 0.3s ease; +} + +/* Prehrávacie tlačidlá získajú jemnú animáciu keď sa odblokujú */ +@keyframes button-enable { + from { + opacity: 0.5; + transform: scale(0.95); + } + to { + opacity: 1; + transform: scale(1); + } +} + +.listening-btn:not(.disabled-btn):not(.listening-btn-same):not(.listening-btn-different) { + animation: button-enable 0.5s ease-out; +} + +/* Status indikátor počas prehrávania */ +.sound-status { + position: relative; + overflow: hidden; +} + +/* Animácia progress pre status text */ +.sound-status::after { + content: ''; + position: absolute; + bottom: 0; + left: 0; + height: 3px; + background: linear-gradient(90deg, #3498db, #2980b9); + animation: loading-progress 3s linear infinite; + width: 0%; +} + +@keyframes loading-progress { + 0% { width: 0%; } + 100% { width: 100%; } +} + + + + + + + + +/* MEDIA Q*/ +@media (max-width: 1200px) { + .hra { + max-width: 800px; + display: grid; + align-items: center; + grid-template-columns: 100%; + grid-template-rows: auto; + align-content: center; + } + + .game-window{ + justify-content: center; + gap: 20px; + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-content: space-around; + align-items: flex-start; + } + + .stats-menu { + justify-content: center; + gap: 10px; + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-content: space-around; + align-items: stretch; + } + .stats { + padding: 0px; + } + + .stats a { + font-size: 20px; + } + + .stats span { + font-size: 20px; + gap: 4px; + } + + .modal-stars { + display: flex; + gap: 5px; + justify-content: center; + margin-top: -15px !important; + } + + .modal-stars img { + width: 40px; + height: 40px; + } + + + .menu-golds, .menu-kov, .menu-diamonds, .window{ + max-height: 160px; + min-width: 190px; + max-width: 190px; + } + + .diamonds-container, .golds-container, .kov-container { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: center; + padding: 5px; + } + + .diamond-image, .gold-image, .kov-image { + width: 20px; /* Šírka obrázka diamantu */ + height: auto; + } + + .stats-menu h1 { + text-align: center; + font-family: "Luckiest Guy", sans-serif; + font-size: 24px; + font-style: normal; + font-weight: 400; + line-height: normal; + margin: 0; + padding: 5px 5px; + letter-spacing: 1.6px; + } + + .logo-container { + display: none; + } + + #gameCanvas { + } + + .joystick { + position: fixed; + bottom: 20px; + left: 20px; + display: block; + } + + .controls { + position: fixed; + bottom: 20px; + right: 20px; + display: block; + } + +} + +@media (max-width: 815px) { + .hra { + max-width: 640px; + display: grid; + align-items: center; + grid-template-columns: 100%; + grid-template-rows: auto; + align-content: center; + justify-items: center; + gap: 8px; + } + + .action-controls, .joystick-controls { + display: block; + } + + .game-window{ + justify-content: center; + gap: 20px; + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-content: space-around; + align-items: flex-start; + width: 100%; + } + + #gameCanvas { + min-width: 0; + min-height: 0; + max-height: 800px; + max-width: 800px; +} + + .stats-menu { + justify-content: center; + gap: 10px; + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-content: space-around; + align-items: stretch; + width: 50%; + } + + .stats { + padding: 0px; + } + + .stats img { + width: 16px !important; + height: 16px !important; + } + + .modal-stars { + display: flex; + gap: 5px; + justify-content: center; + margin-top: 0px !important; + } + + .modal-stars img { + width: 40px; + height: 40px; + } + + + .menu-golds, .menu-kov, .menu-diamonds, .window{ + max-height: 120px; + min-width: 150px; + max-width: 150px; + } + + .diamonds-container, .golds-container, .kov-container { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: center; + padding: 2px; + } + + .diamond-image, .gold-image, .kov-image { + width: 20px; /* Šírka obrázka diamantu */ + height: auto; + } + + .stats-menu h1 { + text-align: center; + font-family: "Luckiest Guy", sans-serif; + font-size: 18px; + font-style: normal; + font-weight: 400; + line-height: normal; + margin: 0; + padding: 2px 2px; + letter-spacing: 1.6px; + } + + .logo-container { + display: none; + } + + .listening-instruction p { + font-size: 18px; + } + + .sound-status { + font-size: 16px; + padding: 10px 18px; + } + + .listening-buttons-container { + gap: 20px; + margin: 20px 10px; + } + + .listening-btn { + min-width: 120px; + padding: 15px 20px; + } + + .listening-btn img { + width: 50px; + height: 50px; + } + + .listening-btn span { + font-size: 16px; + } + + .attempts-display { + font-size: 16px; + padding: 6px 12px; + } + + .result-icon { + width: 60px; + height: 60px; + } + .listening-btn.disabled-btn { + opacity: 0.4; + } + + .listening-btn.disabled-btn img { + opacity: 0.4; + } + + .listening-btn.disabled-btn span { + opacity: 0.6; + } +} + +@media (max-width: 650px) { + .hra { + max-width: 640px; + display: grid; + align-items: center; + grid-template-columns: 100%; + grid-template-rows: auto; + align-content: center; + justify-items: center; + gap: 4px; + width: 98%; + } + + .action-controls, .joystick-controls { + display: block; + } + + .game-window{ + justify-content: center; + gap: 20px; + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-content: space-around; + align-items: flex-start; + width: 100%; + } + + #gameCanvas { + min-width: 0; + min-height: 0; + max-height: 800px; + max-width: 800px; +} + + .stats-menu { + justify-content: center; + gap: 5px; + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-content: space-around; + align-items: stretch; + width: 100%; + } + + .stats { + padding: 0px; + } + + .stats img { + width: 18px; + height: 18px; + } + + .stats a { + font-size: 16px; + } + + .stats span { + font-size: 16px; + gap: 4px; + } + + .execise-window { + min-width: 0; + } + + .cvicenie-content-2 h1 { + font-size: 30px; + } + + .modal-stars { + display: flex; + gap: 5px; + justify-content: center; + margin-top: -15px; +} + +.modal-stars img { + width: 40px; + height: 40px; +} + + .menu-golds, .menu-kov, .menu-diamonds, .window{ + max-height: 100px; + min-width: 112px; + max-width: 112px; + } + + .window { + display: none; + } + + .diamonds-container, .golds-container, .kov-container { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: center; + padding: 2px; + } + + .diamond-image, .gold-image, .kov-image { + width: 16px; /* Šírka obrázka diamantu */ + height: auto; + } + + .stats-menu h1 { + font-size: 14px; + } + + .logo-container { + display: none; + } + + .action-controls, .joystick-controls { + bottom: 10px; + } + + .action-controls { + left: 10px; + padding: 8px; + } + + .joystick-controls { + right: 10px; + } + + .action-button { + width: 60px; + height: 60px; + font-size: 24px; + } + + .virtual-joystick { + width: 100px; + height: 100px; + } + + .joystick-base { + width: 75px; + height: 75px; + } + + .joystick-knob { + width: 35px; + height: 35px; + } + + #menuButton { + position: absolute; + top: 10px; + left: 10px; + width: 33px; + height: 33px; + border-radius: 50%; + background-image: url("../images/menubutton.png"); + background-size: cover; + background-position: center; + border: none; + cursor: url('../images/active_cursor4.png') 5 5, pointer; + outline: none; + z-index: 1000; + } + + .listening-instruction p { + font-size: 18px; + } + + .sound-status { + font-size: 16px; + padding: 10px 18px; + } + + .listening-buttons-container { + gap: 20px; + margin: 10px 10px; + } + + .listening-btn { + min-width: 120px; + padding: 15px 20px; + } + + .listening-btn img { + width: 50px; + height: 50px; + } + + .listening-btn span { + font-size: 16px; + } + + .attempts-display { + font-size: 16px; + padding: 6px 12px; + } + + .result-icon { + width: 60px; + height: 60px; + } + .listening-btn.disabled-btn { + opacity: 0.4; + } + + .listening-btn.disabled-btn img { + opacity: 0.4; + } + + .listening-btn.disabled-btn span { + opacity: 0.6; + } + +} + + +@media (max-width: 480px) { + .loading-logo { + margin-bottom: 2rem; + } + + .loading-text-jozino { + font-size: 64px; + width: auto; + line-height: 0px; /* 20% */ + } + + .loading-text-banik { + font-size: 30px; + line-height: 20px; /* 20% */ + } + + .loading-message { + font-size: 20px; + } + + .hra { + max-width: 480px; + display: grid; + align-items: center; + grid-template-columns: 100%; + grid-template-rows: auto; + align-content: center; + justify-items: center; + gap: 4px; + width: 98%; + } + + .action-controls, .joystick-controls { + display: block; + } + + .game-window{ + gap: 5px; + width: 100%; + } + + #gameCanvas { + min-width: 0; + min-height: 0; + max-height: 800px; + max-width: 800px; +} + + .stats-menu { + justify-content: center; + gap: 3px; + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-content: space-around; + align-items: stretch; + width: 100%; + } + + .stats { + padding: 0px; + } + + .stats img { + width: 14px; + height: 14px; + } + + .stats a { + font-size: 14px; + } + + .stats span { + font-size: 14px; + gap: 2px; + } + + .menu-golds, .menu-kov, .menu-diamonds, .window{ + max-height: 100px; + min-width: 88px; + max-width: 88px; + } + + .window { + display: none; + } + + .diamonds-container, .golds-container, .kov-container { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: center; + padding: 2px; + } + + .diamond-image, .gold-image, .kov-image { + width: 12px; /* Šírka obrázka diamantu */ + height: auto; + } + + .stats-menu h1 { + font-size: 12px; + } + + .logo-container { + display: none; + } + + .action-controls, .joystick-controls { + bottom: 10px; + } + + .action-controls { + left: 10px; + padding: 8px; + } + + .joystick-controls { + right: 10px; + } + + .action-button { + width: 50px; + height: 50px; + font-size: 20px; + } + + .virtual-joystick { + width: 80px; + height: 80px; + } + + .joystick-base { + width: 55px; + height: 55px; + } + + .joystick-knob { + width: 25px; + height: 25px; + } + + #menuButton { + position: absolute; + top: 10px; + left: 10px; + width: 24px; + height: 24px; + border-radius: 50%; + background-image: url("../images/menubutton.png"); + background-size: cover; + background-position: center; + border: none; + cursor: url('../images/active_cursor4.png') 5 5, pointer; + outline: none; + z-index: 1000; + } + + .menu-button { + width: 200px; + height: 54px; + font-size: 20px; + + } + + .execise-window { + width: 90%; + height: 80%; + max-width: 450px; + max-height: 450px; + padding: 1rem 2rem; + box-sizing: border-box; + border: 2px solid #ECCF17; + } + + .tlacidlo { + width: 150px; + height: 40px; + } + + .tlacidlo a { + font-size: 20px; + } + + .tlacidlo:hover { + transform: scale(0.98); + border: 3px solid #9A0003; + } + + .tlacidlo:active { + border: 3px solid #9A0003; + } + + .tlacidlo.recording { + background: linear-gradient(135deg, #e74c3c, #c0392b); + transform: scale(0.98); + animation: recording-pulse 1s ease-in-out infinite alternate; + } + + .cvicenie-text { + font-size: 25px; + } + + .word-progress { + margin-bottom: 0px; + } + + .progress-text { + font-size: 14px; + } + + .progress-bar { + width: 100%; + height: 10px; + border: 1px solid #e1e8f0; + } + + .progress-fill { + height: 100%; + } + + .listening-buttons-container { + gap: 15px; + } + + .listening-btn { + width: 80px; + padding: 12px 15px; + } + + .listening-instruction p { + font-size: 16px; + line-height: 1.3; + } + + .sound-status { + font-size: 14px; + padding: 8px 15px; + } + +} + +@media (max-width: 380px) { + .listening-buttons-container { + gap: 15px; + } + + .cvicenie-content-2 h1 { + font-size: 25px !important; + } + .listening-btn { + width: 90px; + padding: 8px 10px; + min-width: 80px; + } + + .listening-instruction p { + font-size: 14px; + line-height: 1.3; + } + + .sound-status { + font-size: 14px; + padding: 8px 12px; + } + + .listening-btn img { + width: 30px; + height: 30px; + } + + .listening-btn span { + font-size: 14px; + } +} + +@media (max-width: 200px) { + .listening-buttons-container { + gap: 15px; + } + + .cvicenie-content-2 { + padding: 20px; + display: flex; + gap: 5px; + flex-direction: column; + justify-content: center; + align-items: center; + } + + .cvicenie-content-2 h1 { + font-size: 25px !important; + } + .listening-btn { + width: 60px; + padding: 4px 4px; + min-width: 50px; + } + + .listening-instruction p { + font-size: 14px; + line-height: 1.3; + } + + .sound-status { + font-size: 12px; + padding: 8px 12px; + max-width: 80%; + } + + .listening-btn img { + width: 20px; + height: 20px; + } + + .listening-btn span { + font-size: 12px; + display: none; + } +} + +@media (max-height: 500px) { + .attempt-message { + font-size: 16px; + padding: 6px 12px; + margin-top: 8px; + } + + .success-message { + font-size: 18px; + padding: 8px 16px; + margin-top: 8px; + } +} + + + + + + + +/* =============================================== */ +/* PROGRESS BAR PRE PRELOADING */ +/* =============================================== */ + +/* Progress Container */ +.loading-progress-container { + width: 100%; + max-width: 400px; + margin: 1.5rem auto 0; +} + +/* Progress Bar */ +.loading-progress-bar { + width: 100%; + height: 8px; + background-color: rgba(236, 207, 23, 0.2); + border-radius: 4px; + overflow: hidden; + margin-bottom: 0.5rem; + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.3); +} + +/* Progress Fill */ +.loading-progress-fill { + height: 100%; + width: 0%; + background: linear-gradient(90deg, #ECCF17 0%, #FFE55C 50%, #ECCF17 100%); + border-radius: 4px; + transition: width 0.3s ease; + box-shadow: 0 0 10px rgba(236, 207, 23, 0.5); +} + +/* Progress Text */ +.loading-progress-text { + display: flex; + justify-content: space-between; + align-items: center; + font-family: "Luckiest Guy", sans-serif; + color: #ECCF17; + font-size: 14px; +} + +#loading-progress-percentage { + font-size: 16px; + font-weight: bold; +} + +#loading-progress-details { + font-size: 12px; + opacity: 0.8; +} + +/* Responzívnosť pre mobily */ +@media (max-width: 480px) { + .loading-progress-container { + max-width: 300px; + } + + .loading-progress-text { + font-size: 12px; + } + + #loading-progress-percentage { + font-size: 14px; + } + + #loading-progress-details { + font-size: 10px; + } +} \ No newline at end of file diff --git a/css/pexeso-menu.css b/css/pexeso-menu.css new file mode 100644 index 0000000..9c059c1 --- /dev/null +++ b/css/pexeso-menu.css @@ -0,0 +1,308 @@ + +.back-button { + position: absolute; + top: 20px; + left: 20px; + text-decoration: none; + font-size: 24px; + color: black; +} + +.nadpis { + font-size: clamp(36px, 5vw, 48px); + font-weight: bold; + color: white; + text-shadow: 0 4px 6px rgba(0,0,0,0.3); + margin-bottom: clamp(20px, 4vh, 40px); + text-align: center; +} + +.buttons-container { + display: flex; + gap: clamp(5px, 1vw, 30px); + flex-wrap: wrap; + justify-content: center; + width: 100%; + max-width: 1400px; + padding: 0 clamp(10px, 2vw, 20px); +} + +.square-button { + flex: 0 1 calc(20% - clamp(15px, 3vw, 30px)); + aspect-ratio: 1/1; + min-width: 200px; + max-width: 300px; + background-size: cover; + background-position: center; + background-repeat: no-repeat; + border: none; + cursor: pointer; + font-size: clamp(10px, 1.5vw, 12px); + font-weight: bold; + color: white; + text-shadow: 2px 2px 4px rgba(0,0,0,0.5); + display: flex; + align-items: center; + justify-content: center; + transition: all 0.3s ease; + position: relative; + overflow: hidden; + box-shadow: 0 10px 20px rgba(0,0,0,0.2); + margin: clamp(10px, 2vw, 15px); +} + +.square-button::before { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0,0,0,0.3); + opacity: 0; + transition: opacity 0.3s ease; +} + +.square-button:hover { + transform: translateY(-10px); + box-shadow: 0 15px 25px rgba(0,0,0,0.3); +} + +.square-button:hover::before { + opacity: 1; +} + +.square-button[data-letter="Š"] { + background-image: url('../images/pexeso-Š.png'); +} + +.square-button[data-letter="S"] { + background-image: url('../images/pexeso-S.png'); +} + +.square-button[data-letter="R"] { + background-image: url('../images/pexeso-R.png'); +} + + +.square-button[data-letter="Custom"] { + background-image: url('../images/pexeso-custom.png'); +} + + + + +.player-setup { + background: rgba(218, 218, 218, 0.5); + padding: 20px; + border-radius: 10px; + } + + .player-setup input { + margin: 0 1% 1% 0%; + padding: 1% 1% 1% 1%; + width: 46%; + border: 1px solid #ddd; + border-radius: 5px; + } + + + +#customLevelModal { + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background: rgba(255,255,255,0.9); + backdrop-filter: blur(10px); + padding: 40px; + border-radius: 20px; + box-shadow: 0 15px 30px rgba(0,0,0,0.2); + display: none; + flex-direction: column; + gap: 20px; + max-width: 800px; + width: 90%; + max-height: 90vh; + z-index: 1000; +} + +.word-list { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); + gap: 15px; + max-height: 500px; + overflow-y: auto; + padding: 20px; + background: rgba(218, 218, 218, 0.5); + border-radius: 15px; +} + +.word-item { + display: flex; + align-items: center; + gap: 10px; + padding: 10px; + background-color: white; + border-radius: 10px; + box-shadow: 0 4px 6px rgba(0,0,0,0.1); + transition: transform 0.2s ease; +} + +.word-item:hover { + transform: scale(1.05); +} + +.word-item img { + max-width: 50px; + max-height: 50px; + border-radius: 5px; +} + + +#customLevelModal button { + padding: 12px 24px; + background-color: rgba(240,240,240,0.5); /* Stejná barva jako pozadí word listu */ + color: #333; /* Barva textu podobná word listu */ + border: none; + border-radius: 10px; + cursor: pointer; + transition: background-color 0.3s ease, transform 0.2s ease; + font-family: 'MPLUSRounded1c-Medium', sans-serif; + font-weight: bold; +} + + +#customLevelModal button:hover { + background-color: rgba(220,220,220,0.7); /* Lehce tmavší varianta pozadí */ + transform: scale(1.05); /* Jemný efekt zvětšení při hover */ +} + +/* Specificky pro tlačítko "Začít hru" */ +#customLevelModal button { + background-color: white; +} + +#customLevelModal button:first-of-type:hover { + background-color: rgba(220,220,220,0.7); /* Lehce tmavší varianta pozadí */ +} + + + + + + +/* Média dotaz pro mobilní zařízení */ +@media screen and (max-width: 768px) { + body { + padding: 10px; + min-height: 100vh; + height: auto; + overflow-x: hidden; + overflow-y: auto; + } + + .back-button { + top: 10px; + left: 10px; + font-size: 20px; + } + + .nadpis { + font-size: 32px; + margin-bottom: 20px; + } + + .buttons-container { + gap: 15px; + padding: 0 10px; + } + + .square-button { + min-width: 150px; + min-height: 150px; + font-size: 10px; + } + + #customLevelModal { + padding: 20px; + width: 95%; + max-height: 95vh; + } + + .word-list { + grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)); + gap: 10px; + padding: 10px; + max-height: 400px; + } + + .word-item { + padding: 5px; + gap: 5px; + } + + .word-item img { + max-width: 40px; + max-height: 40px; + } + + #customLevelModal button { + padding: 10px 20px; + font-size: 14px; + } +} + +/* Pro velmi malé obrazovky */ +@media screen and (max-width: 480px) { + body { + padding: 5px; + } + + .nadpis { + font-size: 28px; + margin-bottom: 15px; + } + + .buttons-container { + gap: 10px; + } + + .square-button { + min-width: 120px; + min-height: 120px; + font-size: 9px; + } + + #customLevelModal { + padding: 15px; + width: 98%; + } + + .word-list { + grid-template-columns: repeat(auto-fill, minmax(80px, 1fr)); + gap: 5px; + max-height: 350px; + } + + .word-item { + padding: 3px; + } + + .word-item img { + max-width: 30px; + max-height: 30px; + } + + #customLevelModal button { + padding: 8px 16px; + font-size: 12px; + } +} + +@font-face { + font-family: 'MPLUSRounded1c-Black'; + src: url('../fonts/MPLUSRounded1c-Black.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} diff --git a/css/pexeso-old.css b/css/pexeso-old.css new file mode 100644 index 0000000..6313a10 --- /dev/null +++ b/css/pexeso-old.css @@ -0,0 +1,557 @@ +/* FONTY */ +@font-face { + font-family: 'MPLUSRounded1c-Black'; + src: url('../fonts/MPLUSRounded1c-Black.ttf') format('truetype'); + /* Možné ďalšie formáty fontov (woff, woff2, svg) a ich cesty by sa tiež mali uviesť */ + font-weight: normal; + font-style: normal; + } + @font-face { + font-family: 'MPLUSRounded1c-Medium'; + src: url('../fonts/MPLUSRounded1c-Medium.ttf') format('truetype'); + /* Možné ďalšie formáty fontov (woff, woff2, svg) a ich cesty by sa tiež mali uviesť */ + font-weight: normal; + font-style: normal; + } + @font-face { + font-family: 'MPLUSRounded1c-ExtraBold'; + src: url('../fonts/MPLUSRounded1c-ExtraBold.ttf') format('truetype'); + /* Možné ďalšie formáty fontov (woff, woff2, svg) a ich cesty by sa tiež mali uviesť */ + font-weight: normal; + font-style: normal; + } + @font-face { + font-family: 'MPLUSRounded1c-Bold'; + src: url('../fonts/MPLUSRounded1c-Bold.ttf') format('truetype'); + /* Možné ďalšie formáty fontov (woff, woff2, svg) a ich cesty by sa tiež mali uviesť */ + font-weight: normal; + font-style: normal; + } + + body { + margin: 0; + padding: clamp(10px, 2vw, 20px); + min-height: 90vh; + display: flex; + flex-direction: column; + background-image: url('../images/pozadieg.jpg'); + background-size: cover; + background-position: center; + font-family: 'MPLUSRounded1c-Medium', sans-serif; + overflow-x: hidden; +} + +.game-container { + display: grid; + grid-template-columns: repeat(6, 1fr); + gap: 10px; + max-width: 900px; + margin: 20px auto; +} + + +/* koniec hry okno */ + +.modal { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.7); + z-index: 1000; + justify-content: center; + align-items: center; +} + +.modal-content { + background-color: white; + padding: 2rem; + border-radius: 15px; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); + text-align: center; + max-width: 500px; + width: 90%; + z-index: 1001; /* Vyšší než modal */ + position: relative; +} + +.modal h2 { + color: #2c3e50; + margin-bottom: 1.5rem; +} + +.game-stats { + background-color: #f8f9fa; + padding: 1rem; + border-radius: 10px; + margin: 1.5rem 0; +} + +.game-stats p { + margin: 0.5rem 0; + color: #2c3e50; +} + +.modal-buttons { + display: flex; + justify-content: center; + gap: 1rem; + margin-top: 1.5rem; +} + +.modal-button { + padding: 0.8rem 1.5rem; + border: none; + border-radius: 5px; + cursor: pointer; + font-size: 1rem; + transition: all 0.3s ease; +} + +#restartGameBtn { + background-color: #4CAF50; + color: white; +} + +#backToMenuBtn { + background-color: #2196F3; + color: white; +} + +.modal-button:hover { + transform: translateY(-2px); + opacity: 0.9; +} + +#winnerInfo { + margin: 1rem 0; + padding: 1rem; + background-color: #e8f5e9; + border-radius: 10px; +} + +#winnerText { + color: #2e7d32; + margin: 0; +} + + + + + +/* karty */ + +.card { +aspect-ratio: 1; +background-image: url("../images/pexeso.png"); +background-size: cover; +background-position: center; +background-repeat: no-repeat; +display: flex; +flex-direction: column; +align-items: center; +justify-content: center; +cursor: pointer; +transition: transform 0.3s; +position: relative; +overflow: hidden; +transform-style: preserve-3d; +} + +.card.flipped { +background-image: url("../images/hra.png"); +transform: rotateY(0); +} + +.card img { +max-width: 70%; +max-height: 60%; +position: absolute; +top: 10%; /* Posun obrázku nahoru */ +backface-visibility: hidden; +transform: rotateY(180deg); +transition: transform 0.3s; +} + +.card-word { +font-size: 15px; +position: absolute; +bottom: 15px; /* Umístění textu dolů */ +left: 0; +right: 0; +text-align: center; +color: white; +text-shadow: 1px 1px 2px black; +backface-visibility: hidden; +transform: rotateY(180deg); +transition: transform 0.3s; +font-family: 'MPLUSRounded1c-Bold', sans-serif; + +} + +.card.flipped { +transform: rotateY(0); +} + +.card.flipped img, +.card.flipped .card-word { +transform: rotateY(0); +} + +.stats { + text-align: center; + margin: 20px; + font-size: 1.2em; + color: white; +} + +.back-button { + position: absolute; + top: 20px; + left: 20px; + text-decoration: none; + font-size: 24px; + color: black; +} + + +.mic-indicator { + width: 100%; + display: flex; + flex-direction: row; /* zmena na row pre horizontálne usporiadanie */ + align-items: center; /* vertikálne zarovnanie na stred */ + justify-content: center; /* horizontálne zarovnanie na stred */ + gap: 10px; /* medzera medzi bodkou a tlačidlom */ + margin: 10px 0; +} + +.recording-status { + width: 15px; + height: 15px; + border-radius: 50%; + background-color: red; + animation: pulse 1s infinite; + display: none; +} + +@keyframes pulse { + 0% { transform: scale(1); opacity: 1; } + 50% { transform: scale(1.2); opacity: 0.7; } + 100% { transform: scale(1); opacity: 1; } +} + + +.players-container { + display: flex; + justify-content: center; + width: 100%; + margin-bottom: 20px; + margin-top: 20px; +} + +.player-indicator { + background-color: #3a1304; + border: 3px double #96530f; + border-radius: 0px; + padding: 15px; + text-align: center; + min-width: 250px; + transition: all 0.3s ease; + margin: 0 10px; +} + +.player-indicator .current-player { + font-size: 16px; + margin-bottom: 10px; +} + +.player-indicator .player-name { + font-weight: bold; +} + +.player-indicator .player-scores { + display: flex; + flex-direction: column; + align-items: center; + font-size: 14px; +} + +.player-indicator .player-scores div { + margin: 5px 0; +} + +.player-indicator.active-player { + transform: scale(1.1); + border: 3px solid #1eff00; + box-shadow: 0 0 10px rgba(0,0,0,0.1); + background-size: 100% 100%; +} + + + + + + + + + +/* Rozmazané pozadie */ + +/* Pridáme wrapper pre hlavný obsah */ +.game-wrapper { + transition: filter 0.3s ease; +} + +/* Keď je speech container aktívny, aplikujeme blur na wrapper */ +.blur-background .game-wrapper { + filter: blur(5px); + z-index: -1; +} + +/* Obrázok slova */ +.match-text { + font-size: 1.2em; + position: relative; + color: white; + text-shadow: 2px 2px 4px rgba(0,0,0,0.5); + margin: 5% auto 5% auto; + +} + +/* Tlačidlo mikrofónu */ +#micButton { + padding: 10px 20px; + border-radius: 25px; + border: none; + cursor: pointer; + font-size: 1.2em; + background: linear-gradient(45deg, #ff6b6b, #4ecdc4); /* rozprávkové farby */ + color: white; + transition: all 0.3s ease; +} + +/* Neaktívny stav tlačidla */ +#micButton:not(.active) { + background: linear-gradient(45deg, #ff9a9e, #fad0c4); +} + +/* Aktívny stav tlačidla */ +#micButton.active { + background: linear-gradient(45deg, #4facfe, #00f2fe); +} + +/* Text pre zostávajúce pokusy */ +.attempts-left { + margin-top: 15px; + color: #838383; + font-size: 0.9em; +} + +.word-image { + max-width: 100px; + max-height: 100px; + height: auto; + margin: 2% auto 2% auto; + display: block; +} + +.speech-container { + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background-color: #3a1304; + border: 3px solid #96530f; + padding: 20px; + text-align: center; + display: none; + z-index: 1000; + flex-direction: column; + align-items: center; + min-width: 300px; /* zabezpečí minimálnu šírku pre obsah */ + filter: blur(0px); +} + +.feedback-image { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 300px; + height: auto; + z-index: 1001; /* aby bol nad rozmazaným obsahom */ +} + + + + +/* Média dotaz pro mobilní zařízení */ +@media screen and (max-width: 768px) { + body { + height: 100vh; + background-size: cover; + background-position: center; + } + + .game-container { + grid-template-columns: repeat(4, 1fr); /* Méně sloupců pro menší obrazovky */ + gap: 5px; + margin: 10px auto; + padding: 0 10px; + } + + .card { + aspect-ratio: 1; + font-size: 12px; + } + + .card img { + max-width: 60%; + max-height: 50%; + top: 15%; /* Mírná úprava pozice */ + } + + .card-word { + font-size: 12px; + bottom: 10px; + } + + .stats { + font-size: 1em; + margin: 10px; + } + + .back-button { + top: 10px; + left: 10px; + font-size: 20px; + } + + .speech-container { + bottom: 10px; + width: 90%; + padding: 10px; + } + + .players-container { + flex-direction: column; + align-items: center; + margin-bottom: 10px; + margin-top: 10px; + } + + .player-indicator { + min-width: 200px; + margin: 5px 0; + padding: 10px; + } + + .player-indicator .current-player { + font-size: 14px; + } + + .modal-content { + width: 90%; + padding: 20px; + } +} + +/* Pro velmi malé obrazovky (mobilní telefony) */ +@media screen and (max-width: 480px) { + .game-container { + grid-template-columns: repeat(3, 1fr); /* Ještě méně sloupců */ + gap: 3px; + } + + .card { + font-size: 10px; + } + + .card img { + max-width: 50%; + max-height: 40%; + } + + .card-word { + font-size: 10px; + } + + .player-indicator { + min-width: 180px; + } +} + + +/* Responzivní úpravy pro tablety a mobilní zařízení */ +@media screen and (max-width: 1024px) { + .player-indicator { + width: calc(50% - 20px); /* Rozdělení na 2 sloupce */ + min-width: 200px; + margin: 10px; + } +} + +@media screen and (max-width: 768px) { + .players-container { + flex-direction: column; + align-items: center; + } + + .player-indicator { + width: 90%; /* Téměř plná šířka */ + max-width: 400px; + min-width: 180px; + margin: 10px 0; + } +} + +@media screen and (max-width: 480px) { + .player-indicator { + width: 95%; /* Ještě větší šířka */ + padding: 10px; + } + + .player-indicator .current-player { + font-size: 14px; + } + + .player-indicator .player-scores { + font-size: 12px; + } +} + +/* Zbytek původního CSS zůstává stejný */ +.player-indicator .current-player { + font-size: 16px; + margin-bottom: 10px; +} + +.player-indicator .player-name { + font-weight: bold; +} + +.player-indicator .player-scores { + display: flex; + flex-direction: column; + align-items: center; +} + +.player-indicator .player-scores div { + margin: 5px 0; +} + +.player-indicator.active-player { + transform: scale(1.05); + box-shadow: 0 0 10px rgba(0,0,0,0.1); +} + + + + + + + + + diff --git a/css/pexeso.css b/css/pexeso.css new file mode 100644 index 0000000..84f2ae4 --- /dev/null +++ b/css/pexeso.css @@ -0,0 +1,1652 @@ +/* ============================ */ +/* ====== GLOBÁLNE ŠTÝLY ====== */ +/* ============================ */ + +/* ================================================ */ +/* Reset štýlov pre konzistenciu medzi prehliadačmi */ +/* ================================================ */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} +/* ============================ */ +/* Základné nastavenia pre body */ +/* ============================ */ +body { + margin: 0; + padding: 0; + min-height: 100vh; + font-family: "Luckiest Guy", sans-serif; + overflow-x: hidden; + background: var(--Backgrtound, url('../images/worlds/background.jpg')) lightgray 50% / cover no-repeat; + box-shadow: 0 4px 4px 0 rgba(0, 0, 0, 0.25); + cursor: url('../images/cursor.png') 5 5, auto; + justify-content: center; + display: flex; +} + +/* ============================= */ +/* ========== LOADING ========== */ +/* ============================= */ +.loading-screen { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: linear-gradient(135deg, #2c1810 0%, #1a0f08 100%); + z-index: 9999; + display: flex; + align-items: center; + justify-content: center; + opacity: 1; + transition: opacity 0.5s ease; +} + +.loading-content { + text-align: center; + color: white; +} + +.loading-logo { + margin-bottom: 2rem; +} + +.loading-text-jozino { + display: flex; + width: 444px; + height: 43px; + transform: rotate(0.093deg); + flex-direction: column; + justify-content: flex-end; + flex-shrink: 0; + + /* Štýlovanie textu */ + color: #FFF; + text-align: center; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy", sans-serif; + font-size: 100px; + font-style: normal; + font-weight: 400; + line-height: 18px; /* 20% */ + text-transform: uppercase; + margin-bottom: 0.5rem; + position: relative; + z-index: 10; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); +} + +.loading-text-banik { + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy", sans-serif; + font-size: 45px; + font-style: normal; + font-weight: 400; + line-height: 100%; + text-align: center; + text-transform: uppercase; + + /* Gradient pozadí pre text */ + background: conic-gradient(from 90deg at 50% 50%, #ECD517 0deg, #ECBB17 360deg); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + position: relative; + z-index: 20; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); +} + +.loading-spinner { + width: 50px; + height: 50px; + border: 4px solid rgba(236, 207, 23, 0.3); + border-top: 4px solid #ECCF17; + border-radius: 50%; + animation: spin 1s linear infinite; + margin: 0 auto 1rem; +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +.loading-message { + font-family: "Luckiest Guy", sans-serif; + font-size: 22px; + color: #ECCF17; + animation: pulse 1.5s ease-in-out infinite; +} + +@keyframes pulse { + 0%, 100% { opacity: 0.7; } + 50% { opacity: 1; } +} + +/* Hlavný kontajner pre progress bar */ +/* Obsahuje progress bar a textové informácie */ +.loading-progress-container { + width: 100%; /* Celá šírka */ + max-width: 400px; /* Maximálna šírka 400px */ + margin: 1.5rem auto 0; /* Vertikálny spacing a centrovanie */ +} + +/* Progress Bar (pozadie) */ +/* Sivý pruh ktorý reprezentuje 0-100% */ +.loading-progress-bar { + width: 100%; /* Celá šírka kontajnera */ + height: 8px; /* Výška progress baru */ + background-color: rgba(236, 207, 23, 0.2); /* Priehľadná žltá farba pozadia */ + border-radius: 4px; /* Zaoblené rohy */ + overflow: hidden; /* Skryje obsah mimo progress baru */ + margin-bottom: 0.5rem; /* Spacing pod progress barom */ + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.3); /* Vnútorný tieň pre 3D efekt */ +} + +/* Progress Fill (žltý pásik) */ +/* Animovaný žltý pásik ktorý sa napĺňa */ +.loading-progress-fill { + height: 100%; /* Celá výška progress baru */ + width: 0%; /* Začína na 0% */ + background: linear-gradient(90deg, #ECCF17 0%, #FFE55C 50%, #ECCF17 100%); /* Žltý gradient */ + border-radius: 4px; /* Zaoblené rohy */ + transition: width 0.3s ease; /* Plynulá animácia šírky */ + box-shadow: 0 0 10px rgba(236, 207, 23, 0.5); /* Žltý svietiaci efekt */ +} + +/* Progress Text (percentá a detaily) */ +/* Zobrazuje percento a počet načítaných zdrojov */ +.loading-progress-text { + display: flex; /* Flexbox pre rozmiestnenie textu */ + justify-content: space-between; /* Text na ľavej a pravej strane */ + align-items: center; /* Vertikálne vycentrovanie */ + font-family: "Luckiest Guy", sans-serif; /* Font rovnaký ako v hre */ + color: #ECCF17; /* Žltá farba textu */ + font-size: 14px; /* Veľkosť textu */ +} + +/* Progress Percentage (napr. "75%") */ +/* Zobrazuje aktuálne percento načítania */ +#loading-progress-percentage { + font-size: 16px; /* Väčší text pre percento */ + font-weight: bold; /* Tučný text */ +} + +/* Progress Details (napr. "15/20 zdrojov") */ +/* Zobrazuje počet načítaných zdrojov */ +#loading-progress-details { + font-size: 12px; /* Menší text pre detaily */ + opacity: 0.8; /* Mierne priehľadný text */ +} + + + +/* ============================ */ +/* Horný, bočný menuu button */ +/* ============================ */ +#menuButton { + position: absolute; + top: 10px; + left: 10px; + width: 43px; + height: 43px; + border-radius: 50%; + background-image: url("../images/menubutton.png"); + background-size: cover; + background-position: center; + border: none; + cursor: pointer; + outline: none; + z-index: 1000; + cursor: url('../images/active_cursor4.png') 5 5, pointer; +} +.kruhove-tlacidlo { + width: 43px; + height: 43px; + border-radius: 50%; /* Tvar kruhu */ + background-image: url("../images/menubutton.png"); /* Cesta k obrázku, ktorý chceš použiť ako pozadie */ + background-size: cover; /* Upravuje veľkosť obrázku na takú, aby pokrýval celé tlačidlo */ + background-position: center; /* Zarovnáva obrázok na strede */ + border: none; /* Bez ohraničenia */ + cursor: pointer; /* Zmení kurzor na ukazovateľ, aby naznačil interaktívnosť */ + outline: none; /* Odstráni ohraničenie po kliknutí */ + cursor: url('../images/active_cursor4.png') 5 5, pointer; +} +.kruhove-tlacidlo:focus { + outline: none; /* Odstráni ohraničenie po získaní zaostrenia */ +} + + + +/* ============================= */ +/* ========== MODALY ========= */ +/* ============================= */ + +.modal { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.14); + backdrop-filter: blur(9px); + z-index: 1000; + transition: all 0.3s ease; +} + +.modal.modal-open { + background: rgba(0, 0, 0, 0.14); + backdrop-filter: blur(9px); +} + +.execise-window{ + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + + + width: 70%; + height: 80%; + max-width: 450px; + max-height: 500px; + min-width: 400px; + min-height: 450px; + background: url('../images/pozadie_button_mobile_2.png') lightgray 50% / cover no-repeat; + + /* Vnútorný obsah */ + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + text-align: center; + padding: 2rem 3rem; + box-sizing: border-box; + border: 4px solid #ECCF17; + border-radius: 30px; + + /* Animácie */ + transition: all 0.4s ease; +} + +/* Vysledok element - skrytý na začiatku */ +.vysledok { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.85); + backdrop-filter: blur(5px); + display: none; /* PRIDANÉ: skrytý na začiatku */ + flex-direction: column; + align-items: center; + justify-content: center; + z-index: 1000; + border-radius: 30px; + overflow: hidden; +} + +/* Keď sa zobrazuje výsledok */ +.vysledok.show { + display: flex; +} + +/* Kontajner pre obsah vysledku */ +.vysledok center { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100%; + padding: 20px; + box-sizing: border-box; +} + +/* Obrázok výsledku */ +.vysledok img { + max-width: 300px !important; + max-height: 250px !important; + width: auto !important; + height: auto !important; + object-fit: contain; +} + +/* Správy v rámci vysledku */ +.vysledok .attempt-message, +.vysledok .success-message { + margin-top: 20px; + z-index: 1001; +} + +/* Style pre recove cvicenie */ +.cvicenie-content { + padding: 10px; + display: flex; + gap: 10px; + flex-direction: column; +} + +.cvicenie-text { + text-align: center; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy"; + font-size: 45px; + font-style: normal; + font-weight: 400; + text-transform: uppercase; + display: flex; + justify-content: center; + flex-direction: column; +} + +.cvicenie-text p { + background: linear-gradient(180deg, #EF0 0%, #FFD900 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + padding-top: 15px; +} + +.cvicenie-text button { + width: auto; + max-height: 200px; + display: block; +} + +.cvicenie-text img{ + min-width: 100px; + max-width: 300px; + max-height: 200px; + max-width: 253px; + height: 200px; + width: auto; +} + +/* Štýl div kontajnera pred a po nahravani */ +.tlacidlo { + cursor: url('../images/active_cursor4.png') 5 5, pointer; + outline: none; /* Odstráňte ohraničenie */ + transition: transform 0.2s ease; /* Animácia pre plynulé zväčšenie */ + width: 253px; + height: 69px; + flex-shrink: 0; + border-radius: 30px; + border: 4px solid #1A511D; + background: linear-gradient(0deg, #15981E 0%, #0F1 100%); + position: relative; + justify-content: center; + display: flex; + align-items: center; +} +.tlacidlo button { + background-color: transparent; + border: none +} +.tlacidlo a { + text-align: center; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy"; + font-size: 40px; + font-style: normal; + font-weight: 400; + text-transform: uppercase; + background: linear-gradient(180deg, #EF0 0%, #FFD900 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} +.tlacidlo:hover { + background-color: rgba(255, 228, 196, 0); + transform: scale(0.98); + border: 4px solid #9A0003; + background: linear-gradient(0deg, #AD0003 0%, #FF2528 100%); +} +.tlacidlo:active { + background-color: rgba(255, 228, 196, 0); + transform: scale(0.98); + border: 4px solid #9A0003; + background: linear-gradient(0deg, #AD0003 0%, #FF2528 100%); +} +/* Štýl div kontajnera počas nahrávania */ +.tlacidlo.recording { + background: linear-gradient(135deg, #e74c3c, #c0392b); + transform: scale(0.98); + animation: recording-pulse 1s ease-in-out infinite alternate; +} +.tlacidlo.recording button { + background: transparent !important; + cursor: not-allowed !important; +} +.tlacidlo.recording button a { + color: #fff !important; + text-shadow: 0 1px 2px rgba(0,0,0,0.5); +} +/* Pulzovanie celého div-u */ +@keyframes recording-pulse { + 0% { + box-shadow: 0 0 0 0 rgba(231, 76, 60, 0.7); + opacity: 1; + } + 100% { + box-shadow: 0 0 0 10px rgba(231, 76, 60, 0); + opacity: 0.9; + } +} + + +/* Style pre posluchove cvicenie */ +.cvicenie { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.14); + backdrop-filter: blur(9px); + z-index: 1000; + transition: all 0.3s ease; +} +.cvicenie-content-2 { + padding: 20px; + display: flex; + gap: 5px; + flex-direction: column; + justify-content: center; +} +.cvicenie-content-2 p { + color: #FFF; + text-align: center; + font-family: "Luckiest Guy", sans-serif; + font-size: 22px; + font-style: normal; + font-weight: 100; + line-height: normal; + margin: 0; + padding: 0px 10px; + letter-spacing: 1.6px; +} +.cvicenie-content-2 h1 { + text-align: center; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy"; + font-size: 40px; + font-style: normal; + font-weight: 400; + text-transform: uppercase; + background: linear-gradient(180deg, #EF0 0%, #FFD900 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} +.buttonsContainer { + gap: 10px; +} +#buttonsContainer img { + width: 50px; /* Prispôsobte veľkosť podľa potreby */ + padding: 2px; + height: 50px; + cursor: url('../images/active_cursor4.png') 5 5, pointer; +} +.buttonsContainer:hover img { + scale: 0.98; +} + + +/* Modal pre pauzu/back to menu */ +.main-menu ul { + list-style: none; + padding: 0; + margin: 0; +} +.main-menu li { + margin-bottom: 1rem; +} +/* Štýlovanie menu tlačidiel */ +.menu-button { + display: flex; + align-items: center; + justify-content: center; + text-decoration: none; + cursor: pointer; + position: relative; + + /* Rozměry tlačidla podľa Figma */ + width: 250px; + height: 64px; + flex-shrink: 0; + border-radius: 30px; + + /* Tieň pre tlačidlá */ + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); + + /* Štandardné neaktívne tlačidlo */ + border: 4px solid #AC3F0B; + background: url('../images/pozadie_button.png') lightgray 50% / cover no-repeat; + + /* Prechod pre animácie */ + transition: all 0.3s ease; + + /* Text štýlovanie */ + font-family: "Luckiest Guy", sans-serif; + font-size: 32px; + font-style: normal; + font-weight: 400; + line-height: 20px; /* 50% */ + text-transform: uppercase; + text-align: center; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + + /* Základná farba textu pre neaktívne tlačidlá */ + color: #FFF; + + cursor: url('../images/active_cursor4.png') 5 5, pointer; + z-index: 10000; +} +/* Hover efekt pre menu tlačidlá */ +.menu-button:hover { + box-shadow: inset 0 0 20px 2px rgba(236, 207, 23, 0.3); + border: 4px solid #ECCF17; + scale: 0.98; +} +/* Aktívne tlačidlo pri stlačení */ +.menu-button:active { + transform: rotate(0.093deg) translateY(0) scale(0.98); + filter: drop-shadow(2px 4px 4px rgba(0, 0, 0, 0.3)); +} + + +/*Modal pre endgame - game over*/ +.stats{ + padding-bottom: 15px; + justify-content: center; + align-items: center; +} +.stats a { + text-align: center; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy"; + font-size: 24px; + font-style: normal; + font-weight: 400; + line-height: 20px; /* 50% */ + text-transform: uppercase; + + background: linear-gradient(180deg, #EF0 0%, #FFD900 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} +.stats span { + color: #FFF; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy"; + font-size: 24px; + font-style: normal; + font-weight: 400; + line-height: normal; + justify-content: center; + display: inline-flex; + align-items: center; + gap: 4px; +} +.stats img { + width: 24px; + height: 24px; +} +/* Hviezdy v modali */ +.modal-stars { + display: flex; + gap: 5px; + justify-content: center; + margin-top: -15px; +} +.modal-stars img { + width: 50px; + height: 50px; +} +.gameend{ + height: auto; + width: auto; + position: relative; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + text-align: center; +} + +/*Dialogové okno pre menu */ +.dialogove-okno { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.14); + backdrop-filter: blur(9px); + z-index: 1000; + transition: all 0.3s ease; +} +.close { + position: absolute; + top: 20px; + right: 30px; + color: #FFF; + text-align: center; + font-family: "Luckiest Guy", sans-serif; + font-size: 64px; + font-style: normal; + font-weight: 400; + line-height: normal; + cursor: url('../images/active_cursor4.png') 5 5, pointer; + z-index: 1001; + transition: transform 0.4s ease; +} +.close:hover { + transform: rotate(15deg) scale(1.05); +} + +#blur-background { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + backdrop-filter: blur(4px); /* Rozmazanie všetkého pod #blur-background */ + z-index: 999; +} +.cvicenie-open #blur-background { + filter: blur(4px) grayscale(50%); /* Aplikuj rozmazanie a zosvetlenie pozadia, keď je dialogové okno otvorené */ +} + + +/* ============================= */ +/* ========= OKNO HRY ======== */ +/* ============================= */ +.main-container { + width: 100%; + margin: 0 auto; + background-color: #17284900; + display: flex; + flex-direction: column; + align-items: center; + grid-template-columns: 800px 300px; + justify-content: center; + text-align: center; + gap: 20px; + align-content: center; +} + +/* ============================= */ +/* ======== HORNÝ PANEL ======== */ +/* ============================= */ +.top-panel { + display: flex; + align-items: center; + justify-content: center; + gap: 40px; + height: 80px; + flex-shrink: 0; +} + +.panel-item { + width: 253px; + height: 69px; + border-radius: 30px; + border: 4px solid #AC3F0B; + background-image: url('../images/pozadie_button_mobile_2.png'); + background-size: cover; + background-position: center; + display: flex; + align-items: center; + justify-content: center; + font-size: 40px; + color: #FFF; + text-align: center; + text-transform: uppercase; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; +} + +/* Stredný panel - PEXESO s odlišným borderom a textom */ +.game-title { + border: 4px solid #ECCF17 !important; +} + +.game-title span { + background: linear-gradient(180deg, #EF0 0%, #FFD900 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + -webkit-text-stroke: unset; +} + +/* ============================= */ +/* ========== CANVAS ========== */ +/* ============================= */ +.content-section { + display: flex; + justify-content: flex-start; + align-items: flex-start; + gap: 20px; + max-width: 1200px; + flex-wrap: wrap; + flex-direction: row; + align-content: center; + margin: 0; + background-color: #17284900; +} + +/* Hlavný herný canvas */ +/* Hlavný herný canvas */ +/* Zmena z flexbox na CSS Grid - karty sa budú rozmiestňovať cez + grid-template-columns definovaný v pravidlách .cards-N nižšie. */ +#gameCanvas { + background-image: url("../images/pozadie.jpg"); + min-width: 800px; /* Desktopová veľkosť */ + min-height: 800px; + max-width: 800px; + max-height: 800px; + + /* === GRID NASTAVENIE === */ + display: grid; /* Mriežkový layout pre karty */ + gap: 1.5%; /* Medzera medzi kartami (% zo šírky canvasu) */ + padding: 2%; /* Vnútorný odstup od okrajov canvasu */ + align-content: center; /* Vertikálne vycentrovanie gridu ak je menší */ + justify-content: center; /* Horizontálne vycentrovanie */ + align-items: stretch; /* Karty vyplnia výšku bunky */ + justify-items: stretch; /* Karty vyplnia šírku bunky */ + + /* === VZHĽAD === */ + overflow: hidden; + border-radius: 10px; + border: 4px solid #AC3F0B; + background-size: cover; + background-position: center center; + background-repeat: no-repeat; + transition: all 0.4s ease; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); + + /* === BOX-SIZING === */ + /* Padding sa počíta dovnútra - canvas zostane presne 800x800 */ + box-sizing: border-box; +} + +/* =========================================== */ +/* ZÁKLADNÉ NASTAVENIE KARTY */ +/* Toto je predvolené nastavenie pre karty */ +/* =========================================== */ +/* =========================================== */ +/* ZÁKLADNÉ NASTAVENIE KARTY */ +/* Karta vyplní bunku gridu cez 100% šírky. */ +/* Aspect-ratio 1/1 zabezpečí štvorec. */ +/* container-type umožňuje používať cqw units */ +/* (napr. font-size: 20cqw = 20% šírky karty) */ +/* =========================================== */ +.card-container { + display: flex; /* Flexbox pre centrovanie obsahu vnútri */ + width: 100%; /* Vyplní celú šírku gridovej bunky */ + height: auto; /* Výška sa dopočíta z aspect-ratio */ + aspect-ratio: 1 / 1; /* Karta je vždy štvorec */ + + /* Container Queries - umožňuje cqw units pre obsah karty */ + container-type: inline-size; /* 1cqw = 1% šírky karty */ + + background-image: url('../images/pozadie_button_mobile_2.png'); + border: 2px solid #ECCF17 !important; + border-radius: 10px; + + /* Centrované vnútro */ + flex-direction: column; /* Obrázok nad textom */ + align-items: center; /* Horizontálne vycentrovanie */ + justify-content: center; /* Vertikálne vycentrovanie */ + + /* Animácie */ + transition: all 0.5s ease; + + /* 3D efekt pre flip */ + perspective: 1000px; + transform-style: preserve-3d; + position: relative; + + /* Box-sizing zabezpečí že border je započítaný v rozmere */ + box-sizing: border-box; +} + +.card-container:hover { + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); + box-shadow: 0 0 20px 2px #ECCF17 inset; + cursor: url('../images/active_cursor4.png') 5 5, pointer; + scale: 0.98; +} + +/* ===== ANIMÁCIA OTÁČANIA KARIET ===== */ +.card-container.flipping { + transform: rotateY(90deg) scale(1.05); + transition: transform 0.3s ease; +} + +/* ===== ANIMÁCIA PRE NESPRÁVNE PÁRY (TRASENIE) ===== */ +@keyframes wrongMatch { + 0% { transform: translateX(0); } + 25% { transform: translateX(-5px); } + 75% { transform: translateX(5px); } + 100% { transform: translateX(0); } +} + +.card-container.wrong-match { + animation: wrongMatch 0.5s ease; + border-color: #ff4757 !important; + box-shadow: 0 0 15px 2px rgba(255, 71, 87, 0.5) inset !important; +} + +/* ===== ANIMÁCIA PRE SPRÁVNU ODPOVEĎ (NÁJDENÝ PÁR) ===== */ +@keyframes correctMatch { + 0% { + border-color: #16B921; + box-shadow: 0 0 15px 2px rgba(22, 185, 33, 0.3) inset; + } + 50% { + border-color: #1ED929; + box-shadow: 0 0 25px 4px rgba(30, 217, 41, 0.6) inset; + transform: scale(1.08); + } + 100% { + border-color: #16B921; + box-shadow: 0 0 15px 2px rgba(22, 185, 33, 0.3) inset; + transform: scale(1.02); + } +} + +.card-container.correct-match { + animation: correctMatch 0.6s ease; +} + +/* =========================================== */ +/* OBRÁZKY A TEXT V KARTÁCH */ +/* Všetko v relatívnych jednotkách: */ +/* - obrázok: 55% rozmerov karty */ +/* - text: cqw = % šírky karty */ +/* Takto sa automaticky škáluje s veľkosťou */ +/* karty bez potreby rôznych pravidiel. */ +/* =========================================== */ +.card-container img { + width: 55%; /* 55% šírky karty */ + height: 55%; /* 55% výšky karty */ + object-fit: contain; /* Zachová pomer strán obrázku */ +} + +/* Text na rubovej strane karty (PEXESO) - väčší */ +.card-container span { + font-size: 20cqw; /* 20% šírky karty (napr. 160px karta = 32px font) */ + + /* Farebný gradient (nezmenené) */ + background: linear-gradient(180deg, #EF0 0%, #FFD900 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + -webkit-text-stroke: unset; + + /* Text nesmie pretekať kartu */ + max-width: 90%; /* Max 90% šírky karty */ + overflow: hidden; /* Skryje pretekajúci text */ + text-overflow: ellipsis; /* "..." ak je text príliš dlhý */ + white-space: nowrap; /* Neláme text */ + padding: 0 5%; /* Malý odstup od okrajov */ +} + +/* Text po otočení karty (konkrétne slovo) - menší aby sa zmestil */ +.card-container.flipped span { + font-size: 11cqw; /* 11% šírky karty (pre dlhšie slová) */ +} + +/* =========================================== */ +/* Blikanie času v posledných 10 sekundách */ +/* =========================================== */ +#game-time.time-warning { + animation: time-blink 0.5s ease-in-out infinite; +} + +@keyframes time-blink { + 0%, 100% { + color: #ffffff; + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5); + } + 50% { + color: #ff0000; + text-shadow: 0 0 10px rgba(255, 0, 0, 0.8), + 2px 2px 4px rgba(0, 0, 0, 0.5); + } +} + +.time-display { + transition: color 0.3s ease; +} + +/* Červené upozornenie keď ostáva málo času */ +.time-display.warning { + color: #ff6b6b !important; + animation: timePulse 1s ease-in-out infinite; +} + +@keyframes timePulse { + 0%, 100% { + transform: scale(1); + text-shadow: 0 0 10px rgba(255, 107, 107, 0.5); + } + 50% { + transform: scale(1.1); + text-shadow: 0 0 20px rgba(255, 107, 107, 0.8); + } +} + +/* =========================================== */ +/* ===== PAUSE MENU ===== */ +/* =========================================== */ + +/* Hlavný container pause menu */ +.pause-modal { + display: none; /* Skrytý na začiatku */ + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.14); + backdrop-filter: blur(9px); + z-index: 1000; + transition: all 0.3s ease; +} + +/* Overlay (tmavé pozadie) */ +.pause-modal-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1; +} + +/* Samotný modal box */ +.pause-modal-content { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + z-index: 2; + + /* Rovnaké rozmery ako execise-window */ + width: 70%; + max-width: 450px; + min-width: 400px; + + /* DÔLEŽITÉ: Používame ROVNAKÉ pozadie ako ostatné modaly */ + background: url('../images/pozadie_button_mobile_2.png') lightgray 50% / cover no-repeat; + + /* Rovnaký border ako ostatné modaly */ + border: 4px solid #ECCF17; + border-radius: 30px; + + /* Padding */ + padding: 2rem 3rem; + box-sizing: border-box; + + /* Animácie */ + transition: all 0.4s ease; +} + +/* Header pause menu */ +.pause-modal-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 30px; + padding-bottom: 0; + position: relative; +} + +/* Nadpis "PAUZA" */ +.pause-modal-header h2 { + font-family: 'Luckiest Guy', sans-serif; + font-size: 64px; + font-style: normal; + font-weight: 400; + line-height: normal; + text-transform: uppercase; + margin: 0; + padding: 0; + + /* Gradient text ako ostatné texty */ + background: linear-gradient(180deg, #EF0 0%, #FFD900 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + + /* Text stroke */ + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; +} + +/* Close button (X) - ROVNAKÝ ako v pôvodnom .close */ +.pause-close-btn { + position: absolute; + top: -20px; + right: -10px; + background: none; + border: none; + padding: 0; + margin: 0; + + /* Text štýl */ + color: #FFF; + text-align: center; + font-family: "Luckiest Guy", sans-serif; + font-size: 64px; + font-style: normal; + font-weight: 400; + line-height: normal; + + /* Cursor */ + cursor: url('../images/active_cursor4.png') 5 5, pointer; + + /* Animácie */ + transition: transform 0.4s ease; + z-index: 1001; +} + +.pause-close-btn:hover { + transform: rotate(15deg) scale(1.05); +} + +/* Body pause menu */ +.pause-modal-body { + padding: 10px 0; +} + +/* Menu navigácia */ +.pause-menu { + margin: 0; + padding: 0; +} + +.pause-menu ul { + list-style: none; + padding: 0; + margin: 0; + display: flex; + flex-direction: column; + gap: 15px; +} + +.pause-menu li { + margin: 0; + padding: 0; +} + +.pause-button { + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + position: relative; + + /* Rozmery tlačidla */ + width: 100%; + min-width: 250px; + height: 64px; + flex-shrink: 0; + border-radius: 30px; + + /* Tieň */ + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); + + /* Border a pozadie - ROVNAKÉ ako ostatné tlačidlá */ + border: 4px solid #AC3F0B; + background: url('../images/pozadie_button.png') lightgray 50% / cover no-repeat; + + /* Prechod pre animácie */ + transition: all 0.3s ease; + + /* Text štýlovanie - ROVNAKÉ ako menu-button */ + font-family: "Luckiest Guy", sans-serif; + font-size: 32px; + font-style: normal; + font-weight: 400; + line-height: 20px; + text-transform: uppercase; + text-align: center; + + /* Text stroke */ + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + + /* Farba textu - BIELA ako v originálnych tlačidlách */ + color: #FFF; + + /* Cursor */ + cursor: url('../images/active_cursor4.png') 5 5, pointer; + z-index: 10000; +} + +.pause-button:hover { + box-shadow: inset 0 0 20px 2px rgba(236, 207, 23, 0.3); + border: 4px solid #ECCF17; + transform: scale(0.98); +} + +.pause-button:active { + transform: translateY(0) scale(0.98); + filter: drop-shadow(2px 4px 4px rgba(0, 0, 0, 0.3)); +} + +/* =============================================== */ +/* side panel s hráčmi */ +/* =============================================== */ +.side-panel { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 20px; + width: 300px; + min-height: 800px; + max-height: 800px; + +} +.players-panel { + display: flex; + flex-direction: column; + align-items: center; + gap: 20px; + width: 100%; + min-height: 158px; + border-radius: 30px; + border: 4px solid #AC3F0B; + background-image: url('../images/pozadie_button_mobile_2.png'); + background-size: cover; + background-position: center; + background-repeat: no-repeat; + padding: 20px; + box-sizing: border-box; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); +} + +.players-panel :active { + display: flex; + flex-direction: column; + align-items: center; + gap: 20px; + width: 100%; + min-height: 158px; + background-image: url('../images/pozadie_button_mobile_2.png'); + background-size: cover; + background-position: center; + background-repeat: no-repeat; + padding: 20px; + box-sizing: border-box; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); + border-radius: 30px; + border: 4px solid #ECCF17; + box-shadow: 0 0 20px 2px #ECCF17 inset; +} + +.players-panel span { + font-size: 60px; + color: #FFF; + text-align: center; + text-transform: uppercase; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; +} + +.players-panel h1 { + font-size: 40px; + margin: 0; + padding: 0; +} + +.players-panel .name { + background: linear-gradient(180deg, #EF0 0%, #FFD900 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + -webkit-text-stroke: unset; +} + +.player-1 .name { + background: linear-gradient(176deg, #00E5FF 3.52%, #2494A1 96.48%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} + +.player-2 .name { + background: linear-gradient(176deg, #1EFF00 3.52%, #8EE046 96.48%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} + +.player-3 .name { + background: linear-gradient(176deg, #5579D4 3.52%, #008CFF 96.48%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} + +.player-4 .name { + background: linear-gradient(176deg, #D455D2 3.52%, #F0D 96.48%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} + +/* ========================================== + POČÍTADLO VYBRANÝCH SLOV - "Vybraných: X / 14 slov" + ========================================== */ + +.selection-counter { + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + padding: 12px 20px; + margin-bottom: 15px; + background: rgba(255, 255, 255, 0.1); + border: 2px solid rgba(236, 207, 23, 0.3); + border-radius: 12px; + font-family: "Luckiest Guy", sans-serif; + transition: all 0.3s ease; +} + +.counter-label { + color: rgba(255, 255, 255, 0.8); + font-size: 16px; + -webkit-text-stroke: 0.5px #000; +} + +.counter-value { + color: #ECCF17; + font-size: 28px; + font-weight: bold; + -webkit-text-stroke: 1px #000; + transition: all 0.3s ease; +} + +.counter-separator { + color: rgba(255, 255, 255, 0.6); + font-size: 20px; +} + +.counter-max { + color: rgba(255, 255, 255, 0.8); + font-size: 20px; + -webkit-text-stroke: 0.5px #000; +} + +.counter-suffix { + color: rgba(255, 255, 255, 0.8); + font-size: 16px; + -webkit-text-stroke: 0.5px #000; +} + +/* Stavy počítadla */ +.selection-counter.too-few { + border-color: rgba(255, 71, 87, 0.6); + background: rgba(255, 71, 87, 0.1); +} + +.selection-counter.too-few .counter-value { + color: #ff4757; +} + +.selection-counter.ok { + border-color: rgba(76, 209, 55, 0.6); + background: rgba(76, 209, 55, 0.1); +} + +.selection-counter.ok .counter-value { + color: #4CD137; +} + +.selection-counter.at-max { + border-color: rgba(255, 165, 0, 0.8); + background: rgba(255, 165, 0, 0.15); +} + +.selection-counter.at-max .counter-value { + color: #FFA500; +} + +/* Upozornenie o limite */ +.pexeso-selection-limit-warning { + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + z-index: 10000; + background: linear-gradient(135deg, #FFA500 0%, #FF8C00 100%); + border: 4px solid #AC3F0B; + border-radius: 20px; + padding: 25px 40px; + box-shadow: 0 10px 40px rgba(0, 0, 0, 0.5); + animation: slideInBounce 0.5s ease-out; + opacity: 1; + transition: opacity 0.5s ease; +} + +.warning-content { + display: flex; + align-items: center; + gap: 15px; +} + +.warning-icon { + font-size: 40px; +} + +.warning-text { + color: #FFFFFF; + font-family: "Luckiest Guy", sans-serif; + font-size: 24px; + font-weight: bold; + -webkit-text-stroke: 2px #AC3F0B; + text-shadow: 3px 3px 6px rgba(0, 0, 0, 0.5); +} + +@keyframes slideInBounce { + 0% { + transform: translate(-50%, -150%); + opacity: 0; + } + 60% { + transform: translate(-50%, -45%); + opacity: 1; + } + 80% { + transform: translate(-50%, -52%); + } + 100% { + transform: translate(-50%, -50%); + } +} + +/* =============================================== */ +/* GRID ROZLOŽENIE PRE KAŽDÝ POČET KARIET */ +/* Definuje iba počet stĺpcov - šírka karty sa */ +/* automaticky vypočíta z gridu (1fr = 1 podiel). */ +/* Veľkosť karty, obrázku a textu je riešená cez */ +/* aspect-ratio a cqw v .card-container vyššie. */ +/* =============================================== */ + +/* 4 karty = 2 stĺpce (2×2) */ +#gameCanvas.cards-4 { grid-template-columns: repeat(2, 1fr); } + +/* 6 kariet = 3 stĺpce (3×2) */ +#gameCanvas.cards-6 { grid-template-columns: repeat(3, 1fr); } + +/* 8 kariet = 4 stĺpce (4×2) */ +#gameCanvas.cards-8 { grid-template-columns: repeat(4, 1fr); } + +/* 10 kariet = 5 stĺpcov (5×2) */ +#gameCanvas.cards-10 { grid-template-columns: repeat(4, 1fr); } + +/* 12 kariet = 4 stĺpce (4×3) */ +#gameCanvas.cards-12 { grid-template-columns: repeat(4, 1fr); } + +/* 14 kariet = 7 stĺpcov (7×2) */ +#gameCanvas.cards-14 { grid-template-columns: repeat(4, 1fr); } + +/* 16 kariet = 4 stĺpce (4×4) - ŠTANDARDNÁ VEĽKOSŤ */ +#gameCanvas.cards-16 { grid-template-columns: repeat(4, 1fr); } + +/* 18 kariet = 6 stĺpcov (6×3) */ +#gameCanvas.cards-18 { grid-template-columns: repeat(5, 1fr); } + +/* 20 kariet = 5 stĺpcov (5×4) */ +#gameCanvas.cards-20 { grid-template-columns: repeat(5, 1fr); } + +/* 22-24 kariet = 6 stĺpcov (6×4, 22 bude mať 2 prázdne bunky) */ +#gameCanvas.cards-22, +#gameCanvas.cards-23, +#gameCanvas.cards-24 { grid-template-columns: repeat(5, 1fr); } + +/* 25 kariet = 5 stĺpcov (5×5) */ +#gameCanvas.cards-25 { grid-template-columns: repeat(5, 1fr); } + +/* 26-28 kariet = 7 stĺpcov */ +#gameCanvas.cards-26, +#gameCanvas.cards-27, +#gameCanvas.cards-28 { grid-template-columns: repeat(6, 1fr); } + +/* 30 kariet = 6 stĺpcov (6×5) */ +#gameCanvas.cards-29, +#gameCanvas.cards-30 { grid-template-columns: repeat(6, 1fr); } + +/* 32-34 kariet = 7 stĺpcov */ +#gameCanvas.cards-31, +#gameCanvas.cards-32, +#gameCanvas.cards-33, +#gameCanvas.cards-34 { grid-template-columns: repeat(7, 1fr); } + +/* 36 kariet = 6 stĺpcov (6×6) */ +#gameCanvas.cards-35, +#gameCanvas.cards-36 { grid-template-columns: repeat(7, 1fr); } + +/* 38-41 kariet = 7 stĺpcov */ +#gameCanvas.cards-37, +#gameCanvas.cards-38, +#gameCanvas.cards-39, +#gameCanvas.cards-40, +#gameCanvas.cards-41 { grid-template-columns: repeat(7, 1fr); } + + +/* ============================================================ */ +/* ==== RESPONZÍVNY LAYOUT ==== */ +/* ============================================================ */ + +@media (max-width: 1199px), (max-height: 899px) { + .main-container { + width: 100%; /* Plná šírka viewportu */ + padding: 8px; /* Odstup od okrajov obrazovky */ + gap: 10px; /* Menšia medzera medzi sekciami */ + } + + /* -------------------------------------------------------- */ + /* HORNÝ PANEL (čas / PEXESO / pokusy) */ + /* -------------------------------------------------------- */ + .top-panel { + width: 100%; /* Plná šírka rodiča */ + max-width: 800px; /* Ale nie širší ako canvas */ + height: auto; /* Výška podľa obsahu */ + gap: 10px; /* Menší rozostup medzi boxmi */ + flex-wrap: nowrap; /* Ostanú v jednom riadku */ + justify-content: space-between; /* Rovnomerne rozložené */ + } + + /* Jednotlivé boxy v hornom paneli (čas, názov hry, pokusy) */ + .panel-item { + flex: 1 1 0; /* Rovnaký podiel priestoru */ + min-width: 0; /* Dovolí flex-u zmrštiť box */ + max-width: 240px; /* Horný limit pre širšie obrazovky */ + width: auto; /* Prepis desktopovej fixnej šírky 253px */ + height: 56px; /* Nižší box ako na desktope */ + font-size: 28px; /* Menší text */ + border-width: 3px; /* Tenší border */ + } + + /* -------------------------------------------------------- */ + /* CONTENT SECTION */ + /* Zmena z riadku [canvas | panel] na stĺpec [canvas] */ + /* [panel] */ + /* -------------------------------------------------------- */ + .content-section { + flex-direction: column; /* Stĺpec namiesto riadku */ + align-items: center; /* Vycentrovať deti */ + width: 100%; /* Plná šírka */ + max-width: 800px; /* Ale maximálne ako canvas */ + gap: 10px; /* Medzera medzi canvasom a panelom */ + flex-wrap: nowrap; /* Neumožniť wrap - stĺpec je jasný */ + } + + /* -------------------------------------------------------- */ + /* GAME CANVAS - RESPONZÍVNY */ + /* Canvas je vždy štvorec (aspect-ratio 1:1). */ + /* Jeho šírka sa vypočíta ako menšia z: */ + /* - 100% šírky rodiča */ + /* - dostupnej výšky viewportu mínus rezervácia (240px */ + /* na top-panel + side-panel + gaps + padding) */ + /* Takto sa canvas vždy zmestí na obrazovku bez scrollovania*/ + /* -------------------------------------------------------- */ + #gameCanvas { + min-width: 0; + min-height: 0; + width: min(calc(100vw - 20px), calc(100dvh - 200px), 800px); + height: min(calc(100vw - 20px), calc(100dvh - 200px), 800px); + } + + /* -------------------------------------------------------- */ + /* SIDE PANEL (hráči) */ + /* Namiesto stĺpca vedľa canvasu - riadok pod canvasom */ + /* -------------------------------------------------------- */ + .side-panel { + width: 100%; /* Plná šírka rodiča */ + max-width: 800px; /* Ako canvas */ + min-height: auto; /* Zrušíme 800px z desktopu */ + max-height: unset; /* Zrušíme 800px z desktopu */ + flex-direction: row; /* Vedľa seba, nie pod sebou */ + flex-wrap: wrap; /* Povoliť zalomenie na nový riadok */ + justify-content: center; /* Vycentrovanie hráčov */ + gap: 10px; /* Menšia medzera medzi hráčmi */ + } + + /* Panel jedného hráča - kompaktnejší, 2-4 sa zmestia vedľa seba */ + .players-panel { + width: auto; /* Šírka podľa obsahu */ + min-width: 140px; /* Ale aspoň 140px široký */ + max-width: 200px; /* Max 200px široký */ + flex: 1 1 auto; /* Povolený rast aj zmrštenie */ + min-height: 80px; /* Nižšia min. výška */ + padding: 8px 12px; /* Menší vnútorný padding */ + } + + /* Meno hráča - menší font */ + .players-panel h1 { + font-size: 22px; + } + + /* Skóre hráča - menší font */ + .players-panel span { + font-size: 32px; + } +} + +/* ============================================================ */ +/* ==== DROBNÉ ÚPRAVY PRE ÚZKE OBRAZOVKY (< 768px) ==== */ +/* ==== Tieto sú o modálnych oknách, NIE o layoute ==== */ +/* ============================================================ */ +@media (max-width: 768px) { + + /* Pause modal a cvičenie okno - zmestia sa aj na telefón */ + .execise-window, + .pause-modal-content { + min-width: 90%; /* Zrušenie fixnej šírky */ + width: 90%; /* 90% šírky obrazovky */ + max-height: 90vh; /* Max 90% výšky viewportu */ + overflow-y: auto; /* Scroll ak je obsah dlhý */ + padding: 1.5rem 1rem; /* Menší padding */ + } + + /* Nadpis "PAUZA" - menší font na telefóne */ + .pause-modal-header h2 { + font-size: 40px; + } + + /* Tlačidlá v modáloch - plná šírka */ + .tlacidlo, + .menu-button, + .pause-button { + width: 100%; /* Plná šírka */ + min-width: unset; /* Zruš fixnú min šírku */ + height: 55px; /* Nižšie */ + font-size: 24px; /* Menší text */ + } + + /* Nadpis "PEXESO" v hornom paneli - menší */ + .game-title span { + font-size: 24px; + } +} + + + +@media (max-width: 480px) { + .loading-progress-container { + max-width: 300px; + } + + .loading-progress-text { + font-size: 12px; + } + + #loading-progress-percentage { + font-size: 14px; + } + + #loading-progress-details { + font-size: 10px; + } + .pause-modal-content { + width: 95%; + min-width: 280px; + padding: 1rem 1.5rem; + } + + .pause-modal-header h2 { + font-size: 36px; + } + + .pause-close-btn { + font-size: 40px; + } + + .pause-button { + font-size: 20px; + height: 48px; + min-width: 180px; + } + + #menuButton, .kruhove-tlacidlo { + width: 35px; + height: 35px; + top: 5px; + left: 5px; + } + + .cvicenie-text p, .loading-text-jozino { + font-size: 30px; + } + + .cvicenie-text img { + max-height: 120px; + } +} + + + diff --git a/css/style.css b/css/style.css new file mode 100644 index 0000000..d866e9b --- /dev/null +++ b/css/style.css @@ -0,0 +1,753 @@ +/* ===== GLOBÁLNE ŠTÝLY ===== */ + +/* Reset štýlov pre konzistenciu medzi prehliadačmi */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +/* Základné nastavenia pre body */ +body { + margin: 0; + padding: 0; + min-height: 100vh; + font-family: "Luckiest Guy", sans-serif; + overflow: hidden; /* Zabráni scrollovaniu */ + background: var(--Backgrtound, url('../images/worlds/background.jpg')) lightgray 50% / cover no-repeat; + box-shadow: 0 4px 4px 0 rgba(0, 0, 0, 0.25); + cursor: url('../images/cursor.png') 5 5, auto; +} + + + + +/* ===== HLAVNÝ KONTAJNER ===== */ +/* Flexbox kontajner pre rozloženie na ľavo/pravo */ +.container { + display: flex; + width: 100vw; + height: 100vh; + align-items: center; + justify-content: center; + padding: 4rem 5rem; + gap: 5rem; +} + +/* ===== ĽAVÁ SEKCIA (Logo + Menu) ===== */ +.left-section { + display: flex; + flex-direction: column; + align-items: center; + justify-content: flex-end; + position: relative; + right: auto; + z-index: 2; + margin-top: 2rem; +} + +/* ===== LOGO SEKCIA ===== */ + +.logo-container { + margin-bottom: 3rem; + position: relative; + z-index: 3; + + /* Prechod pre animácie */ + transition: transform 0.4s ease; + cursor: url('../images/cursor.png') 5 5, auto; +} + +.logo-container:hover { + transform: rotate(0.093deg) scale(1.05); +} + +.logo-text { + /* Základné nastavenia pre logo text kontajner */ + width: 444px; + height: 73px; + flex-shrink: 0; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); +} + +/* Hlavný text "JOŽINO" */ +.text-jozino { + display: flex; + width: 444px; + height: 43px; + transform: rotate(0.093deg); + flex-direction: column; + justify-content: flex-end; + flex-shrink: 0; + + /* Štýlovanie textu */ + color: #FFF; + text-align: center; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy", sans-serif; + font-size: 100px; + font-style: normal; + font-weight: 400; + line-height: 18px; /* 20% */ + text-transform: uppercase; + margin-bottom: 0.5rem; + position: relative; + z-index: 10; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); +} + +/* Podtext "BANÍK" */ +.text-banik { + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy", sans-serif; + font-size: 45px; + font-style: normal; + font-weight: 400; + line-height: 100%; + text-align: center; + text-transform: uppercase; + + /* Gradient pozadí pre text */ + background: conic-gradient(from 90deg at 50% 50%, #ECD517 0deg, #ECBB17 360deg); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + position: relative; + z-index: 20; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); +} + + + +/* ===== LOADING ===== */ +.loading-screen { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: linear-gradient(135deg, #2c1810 0%, #1a0f08 100%); + z-index: 9999; + display: flex; + align-items: center; + justify-content: center; + opacity: 1; + transition: opacity 0.5s ease; +} + +.loading-content { + text-align: center; + color: white; +} + +.loading-logo { + margin-bottom: 2rem; +} + +.loading-text-jozino { + display: flex; + width: 444px; + height: 43px; + transform: rotate(0.093deg); + flex-direction: column; + justify-content: flex-end; + flex-shrink: 0; + + /* Štýlovanie textu */ + color: #FFF; + text-align: center; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy", sans-serif; + font-size: 100px; + font-style: normal; + font-weight: 400; + line-height: 18px; /* 20% */ + text-transform: uppercase; + margin-bottom: 0.5rem; + position: relative; + z-index: 10; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); +} + +.loading-text-banik { + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy", sans-serif; + font-size: 45px; + font-style: normal; + font-weight: 400; + line-height: 100%; + text-align: center; + text-transform: uppercase; + + /* Gradient pozadí pre text */ + background: conic-gradient(from 90deg at 50% 50%, #ECD517 0deg, #ECBB17 360deg); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + position: relative; + z-index: 20; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); +} + +.loading-spinner { + width: 50px; + height: 50px; + border: 4px solid rgba(236, 207, 23, 0.3); + border-top: 4px solid #ECCF17; + border-radius: 50%; + animation: spin 1s linear infinite; + margin: 0 auto 1rem; +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +.loading-message { + font-family: "Luckiest Guy", sans-serif; + font-size: 22px; + color: #ECCF17; + animation: pulse 1.5s ease-in-out infinite; +} + +@keyframes pulse { + 0%, 100% { opacity: 0.7; } + 50% { opacity: 1; } +} + + + + +/* ===== MENU SEKCIA ===== */ +.menu-container { + margin-bottom: 2rem; + z-index: 3; + position: relative; +} + +.main-menu ul { + list-style: none; + padding: 0; + margin: 0; +} + +.main-menu li { + margin-bottom: 1.5rem; +} + +/* Štýlovanie menu tlačidiel */ +.menu-button { + display: flex; + align-items: center; + justify-content: center; + text-decoration: none; + cursor: pointer; + position: relative; + + /* Rozměry tlačidla podľa Figma */ + width: 253.111px; + height: 69.409px; + flex-shrink: 0; + border-radius: 30px; + + /* Tieň pre tlačidlá */ + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); + + /* Štandardné neaktívne tlačidlo */ + border: 4px solid #AC3F0B; + background: url('../images/pozadie_button.png') lightgray 50% / cover no-repeat; + + /* Prechod pre animácie */ + transition: all 0.3s ease; + + /* Text štýlovanie */ + font-family: "Luckiest Guy", sans-serif; + font-size: 40px; + font-style: normal; + font-weight: 400; + line-height: 20px; /* 50% */ + text-transform: uppercase; + text-align: center; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + + /* Základná farba textu pre neaktívne tlačidlá */ + color: #FFF; + + cursor: url('../images/active_cursor4.png') 5 5, pointer; +} + +/* Štýlovanie pre hlavné/aktívne tlačidlo (ŠTART) */ +.menu-button.primary { + background: url('../images/pozadie_button.png') lightgray 50% / cover no-repeat; + color: linear-gradient(180deg, #EF0 0%, #FFD900 100%); +} + +.menu-button.primary span { + background: linear-gradient(180deg, #EF0 0%, #FFD900 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + line-height: 150%; +} + +/* Hover efekt pre menu tlačidlá */ +.menu-button:hover { + box-shadow: inset 0 0 20px 2px rgba(236, 207, 23, 0.3); + border: 4px solid #ECCF17; +} + +/* Aktívne tlačidlo pri stlačení */ +.menu-button:active { + transform: rotate(0.093deg) translateY(0) scale(0.98); + filter: drop-shadow(2px 4px 4px rgba(0, 0, 0, 0.3)); +} + +/* ===== RADIÁLNY GRADIENT POZADÍ ===== */ +.radial-background { + position: absolute; + bottom: -100px; + left: 0; + transform: rotate(0.093deg); + + background: radial-gradient(43.78% 43.78% at 50% 50%, #000 0%, rgba(0, 0, 0, 0.00) 100%); + width: 540px; + height: 540px; + flex-shrink: 0; + z-index: 1; + pointer-events: none; +} + + + + +/* ===== PRAVÁ SEKCIA (Postavička) ===== */ +.right-section { + display: flex; + align-items: center; + justify-content: flex-start; + position: relative; + margin-top: 4rem; +} + +.character-container { + position: relative; +} + +/* Obrázok postavičky */ +.character-image { + /* Rozměry a transformácie podľa Figma */ + width: 507px; + height: 439px; + transform: rotate(0.093deg); + flex-shrink: 0; + aspect-ratio: 82/71; + transition: transform 0.4s ease; +} + +/* Hover efekt pre postavičku */ +.character-image:hover { + transform: rotate(0.093deg) scale(1.05); +} + + + + +/* ===== MODÁLNE OKNO (pre pravidlá) ===== */ +/* Modal overlay - cez celú obrazovku */ +.modal { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.14); + backdrop-filter: blur(9px); + z-index: 1000; + transition: all 0.3s ease; +} + +.modal.modal-open { + background: rgba(0, 0, 0, 0.14); + backdrop-filter: blur(9px); +} + +/* Zatváracie X tlačidlo */ +.close { + position: absolute; + top: 20px; + right: 30px; + color: #FFF; + text-align: center; + font-family: "Luckiest Guy", sans-serif; + font-size: 64px; + font-style: normal; + font-weight: 400; + line-height: normal; + cursor: url('../images/active_cursor4.png') 5 5, pointer; + z-index: 1001; + transition: transform 0.4s ease; +} + +.close:hover { + transform: rotate(15deg) scale(1.05); +} + +/* Modal obsah - zarovnaný na stred */ +.modal-content { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + + + width: 70%; + height: 80%; + max-width: 750px; + max-height: 550px; + background: url('../images/pozadie_button_mobile_2.png') lightgray 50% / cover no-repeat; + + /* Vnútorný obsah */ + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + padding: 2rem 3rem; + box-sizing: border-box; + border: 4px solid #ECCF17; + border-radius: 30px; + + /* Animácie */ + transition: all 0.4s ease; +} + + +/* Názov v modal okne */ +.modal-content h2 { + margin: 0 0 1rem 0; + text-align: center; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy", sans-serif; + font-size: 45px; + font-style: normal; + font-weight: 400; + line-height: 120%; + text-transform: uppercase; + + background: linear-gradient(180deg, #EF0 0%, #FFD900 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} + +/* Obsah textu */ +.modal-content p { + color: #FFF; + text-align: center; + font-family: "Luckiest Guy", sans-serif; + font-size: 22px; + font-style: normal; + font-weight: 100; + line-height: normal; + margin: 0; + padding: 0px 10px; + letter-spacing: 1.6px; +} + +/* Obsah textu - kontajner pre scroll */ +.modal-text-content { + flex: 1; + overflow-y: auto; + max-height: calc(100% - 150px); + position: relative; +} + +.modal-text-content span { + background: linear-gradient(180deg, #EF0 0%, #FFD900 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + line-height: 150%; +} + +/* Skrytie scrollbaru úplne */ +.modal-text-content::-webkit-scrollbar { + display: none; +} + +.modal-text-content { + -ms-overflow-style: none; + scrollbar-width: none; +} + +/* Šípka hore - opravená farba */ +.modal-arrow-up { + width: 0; + height: 0; + border-left: 15px solid transparent; + border-right: 15px solid transparent; + border-bottom: 20px solid #FBDB68; + position: relative; + margin-bottom: 1rem; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); + cursor: url('../images/active_cursor4.png') 5 5, pointer; + transition: transform 0.3s ease, opacity 0.3s ease; +} + +.modal-arrow-up::before { + content: ''; + position: absolute; + bottom: -23px; + left: -18px; + width: 0; + height: 0; + border-left: 18px solid transparent; + border-right: 18px solid transparent; + border-bottom: 23px solid #FBDB68; +} + +.modal-arrow-up:hover { + transform: translateY(-2px); + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)) drop-shadow(0 0 10px rgba(255, 187, 0, 0.8)); +} + +/* Šípka dole - opravená farba */ +.modal-arrow-down { + width: 0; + height: 0; + border-left: 15px solid transparent; + border-right: 15px solid transparent; + border-top: 20px solid #FBDB68; + position: relative; + margin-top: 1rem; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); + cursor: url('../images/active_cursor4.png') 5 5, pointer; + transition: transform 0.3s ease, opacity 0.3s ease; +} + +.modal-arrow-down::before { + content: ''; + position: absolute; + top: -23px; + left: -18px; + width: 0; + height: 0; + border-left: 18px solid transparent; + border-right: 18px solid transparent; + border-top: 23px solid #FBDB68; +} + +.modal-arrow-down:hover { + transform: translateY(2px); + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)) drop-shadow(0 0 10px rgba(255, 187, 0, 0.8)); +} + + + + +/* ===== RESPONZÍVNE ŠTÝLY ===== */ +/* Pre tablety a menšie obrazovky */ +@media (max-width: 1024px) { + .container { + padding: 1rem; + gap: 1rem; + } + + .text-jozino { + font-size: 80px; + width: auto; + } + + .text-banik { + font-size: 35px; + } + + .character-image { + width: 400px; + height: 346px; + } + + .radial-background { + width: 400px; + height: 400px; + } +} + +/* Pre mobilné zariadenia */ +@media (max-width: 900px) { + .container { + padding: 0.5rem; + } + + .menu-button { + font-size: 2rem; + padding: 0.8rem 2rem; + } + + .radial-background { + width: 300px; + height: 300px; + } + + .right-section{ + display: none; + } + + .close { + font-size: 44px; + } + + .modal-content { + padding: 1rem 2rem; + } + + .modal-content h2 { + margin: 0 0 1rem 0; + font-size: 35px; + } + + .modal-content p { + font-size: 18px; + padding: 0px 10px; + letter-spacing: 1.6px; + } +} + +/* Pre veľmi malé mobilné zariadenia */ +@media (max-width: 480px) { + .menu-button { + font-size: 1.2rem; + padding: 0.6rem 1.5rem; + } + + .right-section{ + display: none; + } + + .menu-button { + width: 100%; + max-height: 49.409px; + } + + .close { + font-size: 30px; + } + + .modal-content { + padding: 1rem 1rem; + } + + .modal-content h2 { + margin: 0 0 1rem 0; + font-size: 28px; + } + + .modal-content p { + font-size: 14px; + padding: 0px 5px; + letter-spacing: 1.6px; + margin-bottom: 0.5rem; + } + + .loading-logo { + margin-bottom: 2rem; + } + + .loading-text-jozino { + font-size: 64px; + width: auto; + line-height: 0px; /* 20% */ + } + + .loading-text-banik { + font-size: 30px; + line-height: 20px; /* 20% */ + } + + .loading-message { + font-size: 20px; + } + +} + +@media (max-width: 290px) { + .logo-container { + margin-bottom: 1rem; + position: relative; + } + + .text-jozino { + font-size: 35px; + width: auto; + line-height: 0px; /* 20% */ + } + + .text-banik { + font-size: 20px; + line-height: 20px; /* 20% */ + } + + .menu-button { + font-size: 0.8rem; + padding: 0.6rem 1.0rem; + } + + .right-section{ + display: none; + } + + .menu-button { + width: 100%; + max-height: 39.409px; + } + + .main-menu li { + margin-bottom: 0.8rem; + } + + .close { + font-size: 20px; + } + + .modal-content { + padding: 1rem 1rem; + } + + .modal-content h2 { + margin: 0 0 1rem 0; + font-size: 20px; + } + + .modal-content p { + font-size: 10px; + padding: 0px 5px; + letter-spacing: 1.6px; + margin-bottom: 0.5rem; + } + + .loading-logo { + margin-bottom: 2rem; + } + + .loading-text-jozino { + font-size: 35px; + width: auto; + line-height: 0px; /* 20% */ + } + + .loading-text-banik { + font-size: 20px; + line-height: 20px; /* 20% */ + } + + .loading-message { + font-size: 18px; + } +} \ No newline at end of file diff --git a/css/superjozino.css b/css/superjozino.css new file mode 100644 index 0000000..9804f43 --- /dev/null +++ b/css/superjozino.css @@ -0,0 +1,996 @@ +/* Základné štýly */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + display: flex; + justify-content: center; + align-items: center; + min-height: 100vh; + background-color: #333; + font-family: 'Arial', sans-serif; +} + +.game-container { + position: relative; +} + +#gameCanvas { + background-color: #000; + max-width: 100%; + height: auto; +} + +/* Tlačidlá */ +.button { + background: #4CAF50; + color: white; + padding: 12px 24px; + border: none; + border-radius: 25px; + font-size: 16px; + cursor: pointer; + transition: all 0.3s ease; + margin: 5px; +} + +.button:hover { + background: #45a049; + transform: scale(1.05); +} + +.button:active { + transform: translateY(1px); + box-shadow: 0 2px 4px rgba(0,0,0,0.1); +} + +/* Modálne okná */ +.modal { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.8); + display: none; + justify-content: center; + align-items: center; + z-index: 1000; + backdrop-filter: blur(5px); +} + +.modal-content { + background: white; + padding: 30px; + border-radius: 15px; + text-align: center; + max-width: 500px; + width: 90%; + box-shadow: 0 5px 15px rgba(0,0,0,0.3); + animation: modalAppear 0.3s ease-out; +} + +@keyframes modalAppear { + from { + opacity: 0; + transform: translateY(-20px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +/* Rečové cvičenia */ +.speech-modal { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.9); + display: none; + justify-content: center; + align-items: center; + z-index: 1000; +} + +.speech-content { + position: relative; + background: white; + padding: 30px; + border-radius: 15px; + text-align: center; + max-width: 400px; + width: 90%; +} + +.speech-content img { + max-width: 200px; + margin-bottom: 20px; + border-radius: 10px; + box-shadow: 0 3px 6px rgba(0,0,0,0.1); +} + +.speech-content h2 { + font-size: 24px; + color: #333; + margin-bottom: 20px; +} + +.attempts-info { + font-size: 16px; + color: #666; + margin: 10px 0; +} + +#startRecording { + background: #2196F3; + color: white; + padding: 12px 24px; + border: none; + border-radius: 25px; + font-size: 16px; + cursor: pointer; + transition: all 0.3s ease; + margin: 10px 0; +} + +#startRecording:hover:not(:disabled) { + background: #1976D2; + transform: scale(1.05); +} + +#startRecording:disabled { + background: #ccc; + cursor: not-allowed; +} + +.result-message { + font-size: 16px; + font-weight: bold; + margin: 10px 0; + min-height: 20px; +} + +#startRecording:hover { + background: #1976D2; + transform: scale(1.05); +} + +#startRecording:active { + transform: scale(0.95); +} + +/* Efekty pre správne/nesprávne odpovede */ +.correct-answer { + animation: correctPulse 0.5s ease-out; +} + +.wrong-answer { + animation: wrongShake 0.5s ease-in-out; +} + +@keyframes correctPulse { + 0% { + transform: scale(1); + box-shadow: 0 0 0 0 rgba(76, 175, 80, 0.7); + } + 50% { + transform: scale(1.05); + box-shadow: 0 0 0 10px rgba(76, 175, 80, 0); + } + 100% { + transform: scale(1); + box-shadow: 0 0 0 0 rgba(76, 175, 80, 0); + } +} + +@keyframes wrongShake { + 0%, 100% { + transform: translateX(0); + } + 25% { + transform: translateX(-10px); + } + 75% { + transform: translateX(10px); + } +} + +/* Game Over modal */ +.game-over-modal { + background: rgba(0, 0, 0, 0.95); +} + +.game-over-content { + background: linear-gradient(145deg, #2c3e50, #3498db); + color: white; + padding: 40px; + border-radius: 20px; + text-align: center; +} + +.game-over-content h2 { + font-size: 36px; + margin-bottom: 20px; + text-transform: uppercase; + letter-spacing: 2px; +} + +.game-over-content p { + margin: 10px 0; + font-size: 18px; +} + +.game-over-buttons { + margin-top: 30px; + display: flex; + justify-content: center; + gap: 20px; +} + +/* Level Complete modal */ +.level-complete-modal { + background: rgba(0, 0, 0, 0.95); +} + +.level-complete-content { + background: linear-gradient(145deg, #27ae60, #2ecc71); + color: white; +} + +/* Animácia pre hviezdy */ +.star { + font-size: 40px; + color: #FFD700; + animation: starPop 0.5s ease-out; + display: inline-block; + margin: 0 10px; +} + +@keyframes starPop { + 0% { + transform: scale(0); + } + 50% { + transform: scale(1.2); + } + 100% { + transform: scale(1); + } +} + +/* Mobile controls */ +.mobile-controls { + display: none; + position: absolute; + bottom: 20px; + left: 50%; + transform: translateX(-50%); + gap: 20px; +} + +@media (max-width: 800px) { + .mobile-controls { + display: flex; + } +} + +/* Debug panel */ +.debug-panel { + position: fixed; + top: 10px; + left: 10px; + background: rgba(0, 0, 0, 0.8); + padding: 15px; + border-radius: 10px; + color: white; + font-family: monospace; + font-size: 14px; + z-index: 100; +} + +.debug-panel button { + background: #444; + color: white; + border: none; + padding: 5px 10px; + margin-bottom: 10px; + cursor: pointer; + border-radius: 5px; +} + +.debug-panel button:hover { + background: #666; +} + + + +/* ====================================== */ +/* POSLUCHOVÉ CVIČENIE - MODAL & DIALÓG */ +/* ====================================== */ + +#zvuky { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.85); + display: flex; + justify-content: center; + align-items: center; + z-index: 10000; +} + +#blur-background { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.5); + backdrop-filter: blur(5px); + z-index: 9999; +} + +.listening-exercise-dialog { + background: linear-gradient(145deg, #ffffff, #f0f0f0); + border-radius: 30px; + padding: 40px; + box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3); + max-width: 600px; + width: 90%; + animation: dialogSlideIn 0.4s ease-out; +} + +@keyframes dialogSlideIn { + from { + transform: translateY(-50px); + opacity: 0; + } + to { + transform: translateY(0); + opacity: 1; + } +} + +.dialog-header { + text-align: center; + margin-bottom: 30px; + border-bottom: 3px solid #3498db; + padding-bottom: 20px; +} + +.dialog-header h2 { + font-family: "Luckiest Guy", sans-serif; + font-size: 32px; + color: #2c3e50; + margin: 0 0 10px 0; + text-transform: uppercase; + letter-spacing: 2px; +} + +.progress-indicator { + font-family: "Luckiest Guy", sans-serif; + font-size: 18px; + color: #7f8c8d; +} + +.dialog-content { + display: flex; + flex-direction: column; + gap: 25px; +} + +.listening-info { + background: #ecf0f1; + border-radius: 15px; + padding: 20px; + border-left: 5px solid #3498db; +} + +.instruction-text { + font-family: Arial, sans-serif; + font-size: 18px; + color: #2c3e50; + margin: 0; + line-height: 1.6; +} + +.attempts-display { + text-align: center; + font-family: "Luckiest Guy", sans-serif; + font-size: 20px; + color: #2c3e50; + text-shadow: 1px 1px 2px rgba(0,0,0,0.3); + background: rgba(255, 255, 255, 0.1); + padding: 8px 16px; + border-radius: 20px; + border: 2px solid rgba(255, 255, 255, 0.2); + text-transform: uppercase; +} + +.attempts-display span { + color: #f39c12; + font-weight: bold; +} + +/* Tlačidlá pre prehrávanie zvukov */ +.sound-buttons-container { + display: flex; + justify-content: center; + gap: 20px; + margin: 10px 0; +} + +.sound-play-btn { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + background: linear-gradient(135deg, #3498db, #5dade2); + border: 4px solid #2980b9; + border-radius: 20px; + padding: 15px 20px; + cursor: pointer; + transition: all 0.3s ease; + box-shadow: 0 6px 12px rgba(0,0,0,0.2); + min-width: 120px; +} + +.sound-play-btn img { + width: 40px; + height: 40px; + margin-bottom: 8px; + transition: transform 0.3s ease; + filter: drop-shadow(2px 2px 4px rgba(0,0,0,0.3)); +} + +.sound-play-btn span { + font-family: "Luckiest Guy", sans-serif; + font-size: 16px; + color: #fff; + text-shadow: 2px 2px 4px rgba(0,0,0,0.3); + text-transform: uppercase; +} + +.sound-play-btn:hover { + transform: translateY(-3px) scale(1.05); + box-shadow: 0 8px 16px rgba(0,0,0,0.3); +} + +.sound-play-btn:active { + transform: translateY(-1px) scale(1.02); +} + +/* Kontajner pre tlačidlá odpovedí */ +.listening-buttons-container { + display: flex; + justify-content: center; + gap: 30px; + margin: 5px 0; + flex-wrap: nowrap; + flex-direction: row; +} + +/* Tlačidlá pre posluchové cvičenie */ +.listening-btn { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + background: linear-gradient(135deg, #27ae60, #2ecc71); + border: 4px solid #1e8449; + border-radius: 25px; + padding: 20px 25px; + cursor: pointer; + transition: all 0.3s ease; + box-shadow: 0 6px 12px rgba(0,0,0,0.2); + min-width: 140px; + position: relative; + overflow: hidden; +} + +.listening-btn img { + width: 50px; + height: 50px; + margin-bottom: 10px; + transition: transform 0.3s ease; + filter: drop-shadow(2px 2px 4px rgba(0,0,0,0.3)); +} + +.listening-btn span { + font-family: "Luckiest Guy", sans-serif; + font-size: 18px; + color: #fff; + text-shadow: 2px 2px 4px rgba(0,0,0,0.3); + text-transform: uppercase; + letter-spacing: 1px; +} + +/* Hover efekty */ +.listening-btn:hover { + transform: translateY(-3px) scale(1.05); + box-shadow: 0 8px 16px rgba(0,0,0,0.3); +} + +.listening-btn:hover img { + transform: scale(0.98); +} + +.listening-btn:hover::before { + content: ''; + position: absolute; + top: 0; + left: -100%; + width: 100%; + height: 100%; + background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent); + transition: left 0.5s ease; + left: 100%; +} + +/* Click efekt */ +.listening-btn:active { + transform: translateY(-1px) scale(1.02); + box-shadow: 0 4px 8px rgba(0,0,0,0.2); +} + +/* Špecifické farby pre tlačidlá */ +.listening-btn-same { + background: linear-gradient(135deg, #27ae60, #2ecc71); + border-color: #1e8449; +} + +.listening-btn-same:hover { + background: linear-gradient(135deg, #2ecc71, #58d68d); + border-color: #27ae60; +} + +.listening-btn-different { + background: linear-gradient(135deg, #e74c3c, #ec7063); + border-color: #c0392b; +} + +.listening-btn-different:hover { + background: linear-gradient(135deg, #ec7063, #f1948a); + border-color: #e74c3c; +} + +/* Kontajner pre výsledky */ +.listening-result { + display: flex; + justify-content: center; + margin: 20px 0; + opacity: 0; + transform: translateY(20px); + transition: all 0.5s ease; +} + +.listening-result.show { + opacity: 1; + transform: translateY(0); +} + +/* Výsledok - správny/nesprávny */ +.result-container { + display: flex; + align-items: center; + gap: 15px; + background: #fff; + padding: 20px 30px; + border-radius: 20px; + box-shadow: 0 4px 12px rgba(0,0,0,0.15); + font-family: "Luckiest Guy", sans-serif; + font-size: 24px; +} + +.result-container.correct { + background: linear-gradient(135deg, #27ae60, #2ecc71); + color: white; + animation: correctPulse 0.6s ease-out; +} + +.result-container.incorrect { + background: linear-gradient(135deg, #e74c3c, #ec7063); + color: white; + animation: wrongShake 0.6s ease-in-out; +} + +@keyframes correctPulse { + 0% { + transform: scale(1); + box-shadow: 0 0 0 0 rgba(39, 174, 96, 0.7); + } + 50% { + transform: scale(1.1); + box-shadow: 0 0 0 20px rgba(39, 174, 96, 0); + } + 100% { + transform: scale(1); + box-shadow: 0 0 0 0 rgba(39, 174, 96, 0); + } +} + +@keyframes wrongShake { + 0%, 100% { + transform: translateX(0); + } + 20%, 60% { + transform: translateX(-15px); + } + 40%, 80% { + transform: translateX(15px); + } +} + +/* Responzívny dizajn */ +@media (max-width: 768px) { + .listening-exercise-dialog { + padding: 25px; + max-width: 95%; + } + + .dialog-header h2 { + font-size: 24px; + } + + .listening-buttons-container { + flex-direction: column; + gap: 15px; + } + + .listening-btn { + width: 100%; + min-width: unset; + } + + .sound-buttons-container { + flex-direction: column; + gap: 15px; + } +} + + + +/* ====================================== */ +/* VIRTUAL JOYSTICK PRE MOBILY */ +/* (SuperJozino Edition) */ +/* ====================================== */ + +/* ===== AKČNÉ TLAČIDLO VĽAVO (JUMP) ===== */ +.action-controls { + position: fixed; + bottom: 25px; + left: 25px; + display: none; /* Skryté na desktopu */ + padding: 20px; + z-index: 1000; +} + +.action-button { + width: 80px; + height: 80px; + border: 4px solid #AC3F0B; + background: linear-gradient(180deg, #EF0 0%, #FFD900 100%); + color: #000; + cursor: pointer; + border-radius: 50%; + transition: all 0.2s ease; + box-shadow: 0 6px 20px rgba(255, 217, 0, 0.4); + user-select: none; + -webkit-tap-highlight-color: transparent; + font-family: "Luckiest Guy", sans-serif; + font-size: 32px; + font-weight: bold; + display: flex; + align-items: center; + justify-content: center; + position: relative; + opacity: 0.6; +} + +/* Svetelný efekt na tlačidle */ +.action-button::before { + content: ''; + position: absolute; + width: 100%; + height: 100%; + border-radius: 50%; + background: radial-gradient(circle at 30% 30%, rgba(255, 255, 255, 0.3), transparent 50%); + pointer-events: none; + opacity: 1; +} + +/* Hover efekt */ +.action-button:hover { + transform: scale(1.05); + box-shadow: 0 8px 25px rgba(255, 217, 0, 0.6); + border: 4px solid #ECCF17; + background: linear-gradient(180deg, #FFD900 0%, #ECCF17 100%); + opacity: 1; +} + +/* Stlačenie tlačidla */ +.action-button:active { + transform: scale(0.95); + box-shadow: 0 4px 15px rgba(255, 217, 0, 0.4); + border: 4px solid #9A0003; + background: linear-gradient(0deg, #AD0003 0%, #FF2528 100%); + color: #FFF; + opacity: 1; +} + +/* Haptic feedback animácia */ +.action-button.pressed { + animation: hapticPulse 0.1s ease-out; +} + +@keyframes hapticPulse { + 0% { transform: scale(1); } + 50% { transform: scale(0.95); } + 100% { transform: scale(1); } +} + +/* ===== VIRTUAL JOYSTICK VPRAVO ===== */ +.joystick-controls { + position: fixed; + bottom: 25px; + right: 25px; + display: none; /* Skryté na desktopu */ + z-index: 1000; +} + +/* Vonkajší kruh joysticku */ +.virtual-joystick { + position: relative; + width: 120px; + height: 120px; + background: rgba(50, 50, 50, 0.5); + backdrop-filter: blur(10px); + border-radius: 50%; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3); + border: 4px solid #AC3F0B; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); + touch-action: none; + user-select: none; + opacity: 0.6; + transition: all 0.2s ease; +} + +/* Vnútorný kruh - oblasť pohybu */ +.joystick-base { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 90px; + height: 90px; + border-radius: 50%; + background: radial-gradient(circle at center, + rgba(21, 152, 30, 0.1) 0%, + rgba(21, 152, 30, 0.05) 50%, + transparent 80%); + border: 2px dashed rgba(21, 152, 30, 0.4); + transition: all 0.2s ease; +} + +/* Pohyblivý knob (ovládač) */ +.joystick-knob { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 40px; + height: 40px; + background: linear-gradient(0deg, #15981E 0%, #0F1 100%); + border: 3px solid #1A511D; + border-radius: 50%; + box-shadow: 0 4px 15px rgba(21, 152, 30, 0.4); + transition: all 0.1s ease; + cursor: grab; + z-index: 10; + opacity: 1; +} + +/* Stlačený knob */ +.joystick-knob:active { + cursor: grabbing; + transform: translate(-50%, -50%) scale(1.1); + box-shadow: 0 6px 20px rgba(21, 152, 30, 0.6); + border: 3px solid #ECCF17; +} + +/* Indikátor smeru (bodka v strede knobu) */ +.joystick-knob::after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 12px; + height: 12px; + background: #FFF; + border-radius: 50%; + box-shadow: 0 0 0 2px #000; + opacity: 0.8; +} + +/* Aktívny stav joysticku (keď sa používa) */ +.virtual-joystick.active { + border: 4px solid #ECCF17; + box-shadow: 0 8px 32px rgba(236, 207, 23, 0.4); + opacity: 1; +} + +.virtual-joystick.active .joystick-base { + border: 2px solid rgba(236, 207, 23, 0.6); + background: radial-gradient(circle at center, + rgba(236, 207, 23, 0.15) 0%, + rgba(236, 207, 23, 0.08) 50%, + transparent 80%); +} + +/* ===== ANIMÁCIE PRE ZOBRAZENIE ===== */ +.action-controls.show, .joystick-controls.show { + animation: slideInMobile 0.3s ease-out; +} + +@keyframes slideInMobile { + from { + opacity: 0; + transform: translateY(20px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +/* ===== ZOBRAZENIE NA MOBILNÝCH ZARIADENIACH ===== */ +@media (max-width: 800px) { + .action-controls { + display: block; + } + + .joystick-controls { + display: block; + } + + /* Skryť pôvodné mobilné tlačidlá */ + .mobile-controls { + display: none !important; + } +} + +/* Pre menšie mobily (telefóny) */ +@media (max-width: 480px) { + .action-button { + width: 70px; + height: 70px; + font-size: 28px; + bottom: 15px; + left: 15px; + } + + .action-controls { + bottom: 15px; + left: 15px; + padding: 15px; + } + + .virtual-joystick { + width: 100px; + height: 100px; + } + + .joystick-base { + width: 75px; + height: 75px; + } + + .joystick-knob { + width: 35px; + height: 35px; + } + + .joystick-controls { + bottom: 15px; + right: 15px; + } +} + +/* Pre veľmi malé telefóny */ +@media (max-width: 360px) { + .action-button { + width: 60px; + height: 60px; + font-size: 24px; + bottom: 10px; + left: 10px; + } + + .action-controls { + bottom: 10px; + left: 10px; + padding: 10px; + } + + .virtual-joystick { + width: 90px; + height: 90px; + } + + .joystick-base { + width: 65px; + height: 65px; + } + + .joystick-knob { + width: 30px; + height: 30px; + } + + .joystick-controls { + bottom: 10px; + right: 10px; + } +} + +/* ===== DEBUG REŽIM (voliteľný) ===== */ +.joystick-debug { + position: absolute; + top: -30px; + left: 50%; + transform: translateX(-50%); + background: rgba(0, 0, 0, 0.8); + color: white; + padding: 2px 8px; + border-radius: 10px; + font-size: 10px; + font-family: monospace; + display: none; + white-space: nowrap; +} + +.virtual-joystick.debug .joystick-debug { + display: block; +} + +/* ===== LANDSCAPE MÓDY (horizontálna orientácia) ===== */ +@media (max-width: 800px) and (orientation: landscape) { + .action-controls { + bottom: 15px; + left: 15px; + } + + .joystick-controls { + bottom: 15px; + right: 15px; + } + + .action-button { + width: 65px; + height: 65px; + font-size: 26px; + } + + .virtual-joystick { + width: 95px; + height: 95px; + } + + .joystick-knob { + width: 32px; + height: 32px; + } +} + + + + diff --git a/css/worldsmenu.css b/css/worldsmenu.css new file mode 100644 index 0000000..0bef275 --- /dev/null +++ b/css/worldsmenu.css @@ -0,0 +1,2802 @@ +/* ===== GLOBÁLNE ŠTÝLY ===== */ + +/* Reset štýlov pre konzistenciu medzi prehliadačmi */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +/* Základné nastavenia pre body */ +body { + margin: 0; + padding: 0; + min-height: 100vh; + font-family: "Luckiest Guy", sans-serif; + background: var(--Backgrtound, url('../images/worlds/background.jpg')) lightgray 50% / cover no-repeat; + box-shadow: 0 4px 4px 0 rgba(0, 0, 0, 0.25); + cursor: url('../images/cursor.png') 5 5, auto; + backdrop-filter: blur(4px); +} + +/* ===== BACK BUTTON ===== */ +.back-button { + position: absolute; + top: 5px; + left: 15px; + color: #FFF; + text-align: center; + font-family: "Luckiest Guy", sans-serif; + font-size: 44px; + font-style: normal; + font-weight: 400; + line-height: normal; + cursor: url('../images/active_cursor4.png') 5 5, pointer; + z-index: 1001; + transition: transform 0.4s ease; +} + +.back-button:hover { + transform: rotate(8deg) scale(1.05); +} + +.back-button a { + color: #FFF; + text-decoration: none; + cursor: url('../images/active_cursor4.png') 5 5, pointer; +} + + + +/* ==================================== +/ / +/ / +/ / + LOADING PAGE +/ / +/ / +/ / +==================================== */ +.loading-screen { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: linear-gradient(135deg, #2c1810 0%, #1a0f08 100%); + z-index: 9999; + display: flex; + align-items: center; + justify-content: center; + opacity: 1; + transition: opacity 0.5s ease; +} + +.loading-content { + text-align: center; + color: white; +} + +.loading-logo { + margin-bottom: 2rem; +} + +.loading-text-jozino { + display: flex; + width: 444px; + height: 43px; + transform: rotate(0.093deg); + flex-direction: column; + justify-content: flex-end; + flex-shrink: 0; + + /* Štýlovanie textu */ + color: #FFF; + text-align: center; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy", sans-serif; + font-size: 100px; + font-style: normal; + font-weight: 400; + line-height: 18px; /* 20% */ + text-transform: uppercase; + margin-bottom: 0.5rem; + position: relative; + z-index: 10; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); +} + +.loading-text-banik { + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy", sans-serif; + font-size: 45px; + font-style: normal; + font-weight: 400; + line-height: 100%; + text-align: center; + text-transform: uppercase; + + /* Gradient pozadí pre text */ + background: conic-gradient(from 90deg at 50% 50%, #ECD517 0deg, #ECBB17 360deg); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + position: relative; + z-index: 20; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); +} + +.loading-spinner { + width: 50px; + height: 50px; + border: 4px solid rgba(236, 207, 23, 0.3); + border-top: 4px solid #ECCF17; + border-radius: 50%; + animation: spin 1s linear infinite; + margin: 0 auto 1rem; +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +.loading-message { + font-family: "Luckiest Guy", sans-serif; + font-size: 22px; + color: #ECCF17; + animation: pulse 1.5s ease-in-out infinite; +} + +@keyframes pulse { + 0%, 100% { opacity: 0.7; } + 50% { opacity: 1; } +} + + + + +/* ===== HLAVNÝ KONTAINER ===== */ +.main-container { + display: flex; + flex-direction: column; + height: 100vh; + padding: 20px 20px 20px 20px; /* Top padding pre back button */ + gap: 20px; + justify-content: center; +} + +/* ==================================== +/ / +/ / +/ / + HORNÁ SEKCIA + WORLDS MENU +/ / +/ / +/ / +==================================== */ +.worlds-navigation { + display: flex; + align-items: center; + justify-content: center; + gap: 20px; + height: 70px; /* Fixná výška pre hornú sekciu */ +} + +/* Navigačné šípky - rovnaké ako v modáloch */ +.nav-arrow { + background: none; + font-size: 48px; + height: 48px; + width: 48px; + color: #FBDB68; + cursor: url('../images/active_cursor4.png') 5 5, pointer; + transition: all 0.3s ease; + padding: 0; + display: flex; + align-items: center; + justify-content: center; + border-radius: 90px; + border: none; +} + +.nav-arrow:hover { + transform: scale(1.1); +} + +.nav-arrow:active { + transform: scale(0.95); +} + +/* CSS šípky */ +.arrow-icon { + width: 0; + height: 0; + transition: all 0.3s ease; +} + +.arrow-left { + border-top: 18px solid transparent; + border-bottom: 18px solid transparent; + border-right: 32px solid #FBDB68; +} + +.arrow-right { + border-top: 18px solid transparent; + border-bottom: 18px solid transparent; + border-left: 30px solid #FBDB68; +} + +.nav-arrow:hover .arrow-left { + border-right-color: #FFE94A; +} + +.nav-arrow:hover .arrow-right { + border-left-color: #FFE94A; +} + +/* Kontainer pre tlačidlá svetov */ +.worlds-buttons-container { + display: flex; + gap: 48px; + align-items: center; +} + +/* Tlačidlá svetov - zatial základné štýly */ +.world-button { + width: 250px; + height: 68px; + border: 1px solid #000; + border-radius: 30px; + color: #FFF; + font-family: "Luckiest Guy", sans-serif; + cursor: url('../images/active_cursor4.png') 5 5, pointer; + transition: all 0.3s ease; + text-transform: uppercase; + box-shadow: 0 4px 40px 0 rgba(0, 0, 0, 0.50) inset; + background-size: 115%; + background-position: center center; + background-repeat: no-repeat; + overflow: hidden; +} + +/* Špecifické pozadia pre jednotlivé svety */ +.world-z { + background-image: url(../images/worlds/world_z.jpg); +} +.world-s { + background-image: url(../images/worlds/world_s.png); +} +.world-r { + background-image: url(../images/worlds/world_r.png); +} +.world-l { + background-image: url(../images/worlds/world_l.png); +} +.world-c { + background-image: url(../images/worlds/world_c.png); +} +.world-š { + background-image: url(../images/worlds/world_sh.png); +} +.world-ž { + background-image: url(../images/worlds/world_zh.png); +} +.world-č { + background-image: url(../images/worlds/world_ch.png); +} +.world-ď { + background-image: url(../images/worlds/world_dh.png); +} +.world-ť { + background-image: url(../images/worlds/world_th.png); +} +.world-ň { + background-image: url(../images/worlds/world_nh.png); +} +.world-d { + background-image: url(../images/worlds/world_d.png); +} +.world-t { + background-image: url(../images/worlds/world_t.png); +} +.world-n { + background-image: url(../images/worlds/world_n.png); +} +.world-k { + background-image: url(../images/worlds/world_k.png); +} +.world-g { + background-image: url(../images/worlds/world_g.png); +} + + + +.world-button span{ + color: #FFF; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy", sans-serif; + font-size: 48px; + font-style: normal; + font-weight: 400; + line-height: 70px; +} + +/* Aktívne tlačidlo sveta */ +.world-button.active { + border-color: #00FF00; + border: 5px solid #16B921; + box-shadow: 0 0 20px rgba(0, 255, 0, 0.5); +} + +.world-button.active span { + color: #FFF; + -webkit-text-stroke-width: 3px; + -webkit-text-stroke-color: #16B921; + font-family: "Luckiest Guy"; + font-size: 50px; + font-style: normal; + font-weight: 400; + line-height: 60px; +} + +.world-button:hover { + transform: scale(1.05); +} + + + + + +/* ==================================== +/ / +/ / +/ / + DOLNA SEKCIA + Štýly pre level window +/ / +/ / +/ / +==================================== */ +.content-section { + display: flex; + justify-content: center; + gap: 20px; + min-height: 0; /* Umožní flex itemom zmenšiť sa */ +} + +/* ===== ĽAVÝ PANEL - HERNÉ OKNO ===== */ +.game-panel { + min-width: 800px; + min-height: 800px; + max-height: 800px; + max-width: 800px; + display: flex; + flex-direction: column; + overflow: hidden; + border-radius: 10px 10px 10px 10px; + border: 2px solid #000; + background-size: cover; + background-position: center center; + background-repeat: no-repeat; + transition: background-image 0.5s ease; + +} + +.game-panel-header { + height: 100px; + border-radius: 10px 10px 0 0; + display: flex; + align-items: center; + justify-content: center; +} + +.game-panel-header h2 { + color: #FFF; + text-shadow: 4px 8px 8px rgba(0, 0, 0, 0.30); + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy"; + font-size: 54px; + font-style: normal; + font-weight: 400; + line-height: normal; +} + +.game-window { + width: 800px; + height: 700px; /* 800 - 100 pre header */ + overflow: hidden; + background: transparent; + border-top: none; +} + +.level-card{ + position: relative; + width: 150px; + height: 125px; + aspect-ratio: 6/5; + + background: url('../images/pozadie_button_mobile_2.png') lightgray 50% / cover no-repeat; + + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + padding: auto 1rem; + box-sizing: border-box; + border: 4px solid #AC3F0B; + border-radius: 30px; + + transition: all 0.4s ease; + + cursor: url('../images/active_cursor4.png') 5 5, pointer; + + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); +} + +.level-card:hover{ + box-shadow: inset 0 0 20px 2px rgba(236, 207, 23, 0.3); + border: 4px solid #ECCF17; + scale: 0.98; +} + +.lock img{ + width: 55px; + height: auto; + pointer-events: none; + display: flex; + justify-content: center; + align-items: center; + +} + +.lock { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + + display: flex; + justify-content: center; + align-items: center; + + background: rgba(0, 0, 0, 0.14); + backdrop-filter: blur(4px); + + border-radius: 30px; + z-index: 1000; +} + +.level-card h1 { + text-align: center; + font-family: "Luckiest Guy", sans-serif; + margin: 0; + padding: 0px 10px; + letter-spacing: 1.6px; + color: #FFF; + font-size: 64px; + font-style: normal; + font-weight: 400; + line-height: normal; +} + +.level-stars{ + display: flex; + +} + +.level-stars img{ + width: 25px; + height: 25px; + aspect-ratio: 1/1; +} + +.deactive-star{ + opacity: 0.35; +} + +.active-star{ + opacity: 1; +} + + +/* Špecifické pozadia pre jednotlivé svety */ +.game-panel.world-z-bg { + background-image: url(../images/worlds/world_z.jpg); +} +.game-panel.world-s-bg { + background-image: url(../images/worlds/world_s.png); +} +.game-panel.world-r-bg { + background-image: url(../images/worlds/world_r.png); +} +.game-panel.world-l-bg { + background-image: url(../images/worlds/world_l.png); +} +.game-panel.world-c-bg { + background-image: url(../images/worlds/world_c.png); +} +.game-panel.world-š-bg { + background-image: url(../images/worlds/world_sh.png); +} +.game-panel.world-ž-bg { + background-image: url(../images/worlds/world_zh.png); +} +.game-panel.world-č-bg { + background-image: url(../images/worlds/world_ch.png); +} +.game-panel.world-ď-bg { + background-image: url(../images/worlds/world_dh.png); +} +.game-panel.world-ť-bg { + background-image: url(../images/worlds/world_th.png); +} +.game-panel.world-ň-bg { + background-image: url(../images/worlds/world_nh.png); +} +.game-panel.world-d-bg { + background-image: url(../images/worlds/world_d.png); +} +.game-panel.world-t-bg { + background-image: url(../images/worlds/world_t.png); +} +.game-panel.world-n-bg { + background-image: url(../images/worlds/world_n.png); +} +.game-panel.world-k-bg { + background-image: url(../images/worlds/world_k.png); +} +.game-panel.world-g-bg { + background-image: url(../images/worlds/world_g.png); +} + +/* Fallback pozadie ak nie je špecifikované */ +.game-panel:not([class*="world-"]) { + background: #87CEEB; /* Svetlo modrá ako pôvodná */ +} + +.levels-grid { + width: 100%; + height: 100%; + padding: 20px; + gap: 20px; + display: flex; + flex-wrap: wrap; + align-content: flex-start; + justify-content: center; + align-items: center; + /* Grid pre levely sa definuje neskôr */ +} + + +/* ==================================== +/ / +/ / +/ / + SIDE PANEL + Štýly pre side windows +/ / +/ / +/ / +==================================== */ +.side-panel { + width: 300px; + height: 800px; + display: flex; + flex-direction: column; + gap: 20px; +} + +.panel-window { + flex: 1; /* Každé okno zaberie rovnaký priestor */ + border: 4px solid #ECCF17; + background: url('../images/pozadie_button.png') lightgray 50% / cover no-repeat; + border-radius: 10px; + display: flex; + flex-direction: column; + overflow: hidden; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); + +} + +.pexeso-window { + flex: 1; /* Každé okno zaberie rovnaký priestor */ + background: url('../images/worlds/world_g.png') lightgray 50% / cover no-repeat; + border-radius: 10px; + display: flex; + flex-direction: column; + overflow: hidden; + + border: 4px solid #AC3F0B; + transition: all 0.4s ease; + cursor: url('../images/active_cursor4.png') 5 5, pointer; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); +} + +.miner-window { + flex: 1; /* Každé okno zaberie rovnaký priestor */ + background: url('../images/worlds/background.png') lightgray 50% / cover no-repeat; + border-radius: 10px; + display: flex; + flex-direction: column; + overflow: hidden; + + border: 4px solid #AC3F0B; + transition: all 0.4s ease; + cursor: url('../images/active_cursor4.png') 5 5, pointer; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); +} + +.window-header { + height: 50px; + background: rgba(0, 0, 0, 0.3); + display: flex; + align-items: center; + justify-content: center; + border-bottom: 2px solid #000; +} + +.window-header h3 { + color: #FFF; + font-family: "Luckiest Guy", sans-serif; + font-size: 20px; + text-transform: uppercase; + -webkit-text-stroke: 1px #000; +} + +.window-content { + flex: 1; + display: flex; + align-items: center; + justify-content: center; + padding: 20px; +} + +.stars-section { + display: flex; + align-items: flex-end; +} + +.stars-section img { + display: flex; +} + +.side-star img { + display: flex; + width: 66px; + height: auto; +} + +.middle-star img { + display: flex; + width: 88px; + height: auto; +} + +/* Štýly pre okno hviezd */ +.stars-window .window-content { + flex-direction: column; +} + +.stars-display { + display: flex; + align-items: center; + gap: 10px; +} + +.stars-count { + font-family: "Luckiest Guy", sans-serif; + font-size: 48px; + color: #FFD700; + font-style: normal; + font-weight: 400; + -webkit-text-stroke: 1px #000; +} + +.stars-total { + font-family: "Luckiest Guy", sans-serif; + font-size: 48px; + color: #FFF; + font-style: normal; + font-weight: 400; + -webkit-text-stroke: 1px #000; +} + +/* Štýly pre cvičné tlačidlá */ +.practice-button { + width: 100%; + height: 100%; + background: none; + border: none; + border-radius: 10px; + cursor: url('../images/active_cursor4.png') 5 5, pointer; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + transition: all 0.4s ease; +} + +.practice-button h2 { + color: #FFF; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy"; + font-size: 48px; + font-style: normal; + font-weight: 400; + line-height: normal; +} + +.practice-button h3 { + color: #FFF; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy"; + font-size: 64px; + font-style: normal; + font-weight: 400; + line-height: normal; + + background: conic-gradient(from 90deg at 50% 50%, #ECD517 0deg, #ECBB17 360deg); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} + +.miner-window:hover { + box-shadow: inset 0 0 20px 2px rgba(236, 207, 23, 0.3); + border: 4px solid #ECCF17; + scale: 0.98; +} + +.pexeso-window:hover { + box-shadow: inset 0 0 20px 2px rgba(236, 207, 23, 0.3); + border: 4px solid #ECCF17; + scale: 0.98; +} + +.practice-icon { + width: 150px; + height: 150px; + object-fit: contain; +} + +/* ==================================== +/ / +/ / +/ / + LEVEL DETAIL MODAL - CSS ŠTÝLY + Štýly pre modal s detailami levelu +/ / +/ / +/ / +==================================== */ + +/* Overlay modalu */ +.level-modal-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.7); + backdrop-filter: blur(5px); + display: flex; + align-items: center; + justify-content: center; + z-index: 10000; + padding: 20px; +} + +/* Zatváracie X tlačidlo */ +.close { + position: absolute; + top: 20px; + right: 30px; + color: #FFF; + text-align: center; + font-family: "Luckiest Guy", sans-serif; + font-size: 64px; + font-style: normal; + font-weight: 400; + line-height: normal; + cursor: url('../images/active_cursor4.png') 5 5, pointer; + z-index: 1001; + transition: transform 0.4s ease; +} + +.close:hover { + transform: rotate(15deg) scale(1.05); +} + +/* Obsah modalu */ +.level-modal-content { + background: url('../images/pozadie_button_mobile_2.png') lightgray 50% / cover no-repeat; + border: 4px solid #ECCF17; + border-radius: 20px; + width: 100%; + max-width: 600px; + max-height: 90vh; + overflow: hidden; + box-shadow: 0 20px 40px rgba(0, 0, 0, 0.5); + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); + display: flex; + flex-direction: column; +} + +/* Hlavička modalu */ +.level-modal-header { + padding: 20px 25px 10px 25px; + display: flex; + align-items: center; + justify-content: center; + text-align: center; +} + +.level-modal-header h2 { + color: #FFF; + font-family: "Luckiest Guy", sans-serif; + font-size: 42px; + font-weight: 400; + margin: 0; + -webkit-text-stroke: 1px #000; + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5); + font-style: normal; + text-transform: uppercase; +} + +/* Telo modalu */ +.level-modal-body { + padding: 10px 25px; + display: flex; + gap: 10px; + flex: 1; + overflow-y: auto; + flex-direction: column; +} + +.level-modal-body::-webkit-scrollbar { + width: 8px; +} + +.level-modal-body::-webkit-scrollbar-track { + background: rgba(0, 0, 0, 0.2); + border-radius: 10px; + border: 1px solid rgba(255, 255, 255, 0.1); +} + +.level-modal-body::-webkit-scrollbar-thumb { + background: linear-gradient(180deg, #ECCF17 0%, #FBDB68 50%, #FFD900 100%); + border: 1px solid rgba(255, 255, 255, 0.2); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); + transition: all 0.3s ease; +} + +.level-modal-body::-webkit-scrollbar-thumb:hover { + background: linear-gradient(180deg, #FFE94A 0%, #ECCF17 50%, #FBDB68 100%); + transform: scaleX(1.2); + box-shadow: 0 3px 6px rgba(236, 207, 23, 0.4); + border-color: rgba(255, 255, 255, 0.4); +} + +.level-modal-body::-webkit-scrollbar-thumb:active { + background: linear-gradient(180deg, #ECD517 0%, #ECBB17 100%); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.2); +} + +.level-modal-body::-webkit-scrollbar-corner { + background: transparent; +} + +.level-info, +.level-progress { + flex: 1; +} + +.level-modal-body p { + color: #FFF; + font-family: "Luckiest Guy", sans-serif; + font-size: 20px; + margin: 0 0 12px 0; + -webkit-text-stroke: 0.5px #000; +} + +.level-modal-body strong { + text-align: center; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy"; + font-size: 20px; + font-style: normal; + font-weight: 400; + text-transform: uppercase; + background: linear-gradient(180deg, #EF0 0%, #FFD900 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} + +/* Slová na precvičovanie */ +.words-list { + display: flex; + flex-wrap: wrap; + gap: 8px; + margin-top: 10px; +} + +.word-tag { + background: rgba(236, 207, 23, 0.2); + border: 1px solid #ECCF17; + border-radius: 15px; + padding: 6px 12px; + color: #FFF; + font-family: "Luckiest Guy", sans-serif; + font-size: 14px; + -webkit-text-stroke: 0.5px #000; + text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); +} + +/* Hviezdy v modali */ +.modal-stars { + display: flex; + gap: 5px; + padding-bottom: 19px; + margin-top: -12px; +} + +.modal-stars img { + width: 30px; + height: 30px; +} + +/* Pätka modalu */ +.level-modal-footer { + padding: 10px 25px 20px 25px; + display: flex; + gap: 15px; + justify-content: center; +} + +/* Tlačidlá v modali */ +.btn-primary, +.btn-secondary { + padding: 12px 24px; + border: none; + border-radius: 25px; + font-family: "Luckiest Guy", sans-serif; + font-size: 16px; + cursor: url('../images/active_cursor4.png') 5 5, pointer; + transition: all 0.3s ease; + -webkit-text-stroke: 0.5px #000; + + +} + +.level-modal-footer button{ + border-radius: 30px; + border: 4px solid #1A511D; + background: linear-gradient(0deg, #15981E 0%, #0F1 100%); +} + +.btn-primary a { + text-align: center; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy"; + font-size: 30px; + font-style: normal; + font-weight: 400; + line-height: 20px; /* 50% */ + text-transform: uppercase; + + background: linear-gradient(180deg, #EF0 0%, #FFD900 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} + +.btn-primary:hover { + background: linear-gradient(0deg, #107517 0%, rgb(12, 196, 25) 100%); + scale: 0.98; + box-shadow: 0 4px 8px rgba(236, 207, 23, 0.3); +} + +.btn-primary:hover a { + text-align: center; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy"; + font-size: 30px; + font-style: normal; + font-weight: 400; + line-height: 20px; /* 50% */ + text-transform: uppercase; + + background: linear-gradient(180deg, rgb(255, 145, 0) 0%, #ff4800 100%); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} + +.btn-secondary { + background: rgba(255, 255, 255, 0.2); + color: #FFF; + border: 2px solid rgba(255, 255, 255, 0.3); +} + +.btn-secondary:hover { + background: rgba(255, 255, 255, 0.3); + border-color: rgba(255, 255, 255, 0.5); + transform: translateY(-2px); + box-shadow: 0 4px 8px rgba(255, 255, 255, 0.1); +} + +/* ===== TRAINING MODAL STYLES ===== */ +.words-display-section { + margin-bottom: 5px; +} + +.words-display-section h3 { + color: #ECCF17; + font-family: "Luckiest Guy", sans-serif; + font-size: 18px; + margin-bottom: 10px; + text-align: left; + -webkit-text-stroke: 1px #000; + font-weight: 400; +} + +.subtitle-modal { + color: #ECCF17; + font-family: "Luckiest Guy", sans-serif; + font-size: 24px; + margin-bottom: 10px; + text-align: center; + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.5); + text-transform: uppercase; + -webkit-text-stroke: 1px #000; + font-weight: 400; +} + +.words-scrollable-container { + max-height: 200px; + overflow-y: auto; + border: 2px solid rgba(255, 255, 255, 0.3); + border-radius: 10px; + background: rgba(0, 0, 0, 0.3); + padding: 10px; +} + +.words-scrollable-container::-webkit-scrollbar { + width: 8px; +} + +.words-scrollable-container::-webkit-scrollbar-track { + background: rgba(0, 0, 0, 0.2); + border-radius: 10px; + border: 1px solid rgba(255, 255, 255, 0.1); +} + +.words-scrollable-container::-webkit-scrollbar-thumb { + background: linear-gradient(180deg, #ECCF17 0%, #FBDB68 50%, #FFD900 100%); + border: 1px solid rgba(255, 255, 255, 0.2); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); + transition: all 0.3s ease; +} + +.words-scrollable-container::-webkit-scrollbar-thumb:hover { + background: linear-gradient(180deg, #FFE94A 0%, #ECCF17 50%, #FBDB68 100%); + transform: scaleX(1.2); + box-shadow: 0 3px 6px rgba(236, 207, 23, 0.4); + border-color: rgba(255, 255, 255, 0.4); +} + +.words-scrollable-container::-webkit-scrollbar-thumb:active { + background: linear-gradient(180deg, #ECD517 0%, #ECBB17 100%); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.2); +} + +/* Corner (roh scrollbaru) - skrytý */ +.words-scrollable-container::-webkit-scrollbar-corner { + background: transparent; +} + +/* ===== ALTERNATÍVNY ŠTÝL PRE FIREFOX ===== */ +@supports (-moz-appearance: none) { + .words-scrollable-container { + scrollbar-width: thin; + scrollbar-color: #ECCF17 rgba(0, 0, 0, 0.2); + } +} + +/* ===== SMOOTH SCROLLING ===== */ +.words-scrollable-container { + scroll-behavior: smooth; /* Plynulé scrollovanie */ +} + +.words-list { + display: flex; + flex-wrap: wrap; + gap: 8px; + min-height: 40px; +} + +.word-item { + background: rgba(255, 255, 255, 0.2); + color: white; + padding: 6px 12px; + border-radius: 15px; + font-family: "Luckiest Guy", sans-serif; + font-size: 14px; + transition: all 0.3s ease; + border: 2px solid transparent; + user-select: none; + cursor: url('../images/active_cursor4.png') 5 5, pointer; +} + +.word-item:hover { + background: rgba(255, 255, 255, 0.3); + transform: scale(1.05); +} + +.word-item.selected { + background: linear-gradient(135deg, #00b894, #00cec9); + border: 2px solid #fff; + color: white; +} + +/* Umožni kliknúť na locked slová */ +.word-item.locked { + background: rgba(255, 255, 255, 0.15) !important; + color: rgba(255, 255, 255, 0.8) !important; + cursor: url('../images/active_cursor4.png') 5 5, pointer !important; + font-style: normal !important; +} + +.word-item.locked:hover { + background: rgba(255, 255, 255, 0.25) !important; + transform: scale(1.05); +} + +.word-item.locked.selected { + background: linear-gradient(135deg, #00b894, #00cec9) !important; + color: white !important; + border: 2px solid #fff !important; +} +.words-options { + margin: 0; + display: flex; + flex-direction: column; + gap: 10px; +} + +.checkbox-option { + display: flex; + align-items: center; + font-family: "Luckiest Guy", sans-serif; + font-size: 16px; + color: white; + background: rgba(255, 255, 255, 0.1); + padding: 10px 15px; + border-radius: 20px; + transition: all 0.3s ease; + cursor: url('../images/active_cursor4.png') 5 5, pointer; +} + +.checkbox-option:hover { + background: rgba(255, 255, 255, 0.2); +} + +.checkbox-option input[type="checkbox"] { + margin-right: 10px; + transform: scale(1.2); + cursor: url('../images/active_cursor4.png') 5 5, pointer; +} + +.items-settings { + margin-top: 20px; + border-top: 2px solid rgba(255, 255, 255, 0.3); + padding-top: 15px; +} + +.items-settings h3 { + color: #ECCF17; + font-family: "Luckiest Guy", sans-serif; + font-size: 18px; + margin-bottom: 15px; + text-align: center; + +} + +.items-controls { + display: flex; + flex-direction: column; + gap: 10px; +} + +.item-control { + display: flex; + align-items: center; + justify-content: space-between; + background: rgba(255, 255, 255, 0.1); + padding: 10px 15px; + border-radius: 15px; +} + +.item-control label { + font-family: "Luckiest Guy", sans-serif; + font-size: 14px; + color: white; + flex: 1; + cursor: url('../images/cursor.png') 5 5, auto; +} + +.item-control input[type="number"] { + width: 60px; + padding: 5px 8px; + border: 2px solid #ECCF17; + border-radius: 10px; + background: rgba(255, 255, 255, 0.9); + font-family: "Luckiest Guy", sans-serif; + font-size: 16px; + text-align: center; +} + +.item-control input[type="number"]:focus { + outline: none; + border-color: #00cec9; + box-shadow: 0 0 5px rgba(0, 206, 201, 0.5); +} + + +/* ===== DODATOČNÉ ŠTÝLY PRE LEPŠÍ UX ===== */ + +/* Indikátor že obsah je scrollovateľný - jemný gradient na spodku */ +.words-scrollable-container::after { + content: ''; + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 20px; + background: linear-gradient(to top, rgba(0, 0, 0, 0.3), transparent); + pointer-events: none; /* Neblokuje interakcie */ + border-radius: 0 0 8px 8px; /* Zaoblené spodné rohy */ + transition: opacity 0.3s ease; +} + +/* Skry gradient keď je scrollnuté na spodok */ +.words-scrollable-container.scrolled-to-bottom::after { + opacity: 0; +} + + + + + + + + + + + + + + + + + + +/* ==================================== +/ / +/ / +/ / + RESPONZÍVNE ŠTYLY +/ / +/ / +/ / +==================================== */ +@media (max-width: 1100px) { + /* ===== BACK BUTTON ===== */ + .back-button { + position: absolute; + top: 10px; + left: 10px; + font-size: 35px; + font-weight: 400; + } + + .main-container { + padding: 20px 20px 20px 20px; /* Top padding pre back button */ + gap: 10px; + justify-content: center; + height: auto; + min-height: 100vh; + } + + .content-section { + flex: 0; /* Zaberie zvyšok miesta */ + min-height: 0; /* Umožní flex itemom zmenšiť sa */ + gap: 15px; + + display: grid; + grid-template-columns: 1fr; + flex-direction: column; + align-items: center; + justify-content: center; + justify-items: center; + } + + /* ===== HORNÁ SEKCIA - NAVIGÁCIA SVETOV ===== */ + .worlds-navigation { + gap: 20px; + height: 60px; /* Fixná výška pre hornú sekciu */ + margin-bottom: 10px; + } + + /* Navigačné šípky - rovnaké ako v modáloch */ + .nav-arrow { + background: none; + font-size: 38px; + height: 38px; + width: 38px; + } + + .arrow-left { + border-top: 14px solid transparent; + border-bottom: 14px solid transparent; + border-right: 24px solid #FBDB68; + } + + .arrow-right { + border-top: 14px solid transparent; + border-bottom: 14px solid transparent; + border-left: 24px solid #FBDB68; + } + + /* Kontainer pre tlačidlá svetov */ + .worlds-buttons-container { + gap: 38px; + } + + /* Tlačidlá svetov - zatial základné štýly */ + .world-button { + width: 220px; + height: 60px; + } + + .world-button span{ + font-size: 42px; + line-height: 60px; + } + + .world-button.active span { + font-size: 42px; + line-height: 55px; + } + + + +/* ===== Dolny PANEL - 3 OKNÁ ===== */ +.side-panel { + width: 800px; + height: auto; + display: flex; + flex-direction: column; + align-items: left; + gap: 20px; + flex-direction: row; + justify-content: center; +} + +.panel-window, .pexeso-window, .miner-window { + min-height: 60px; + max-height: 80px; + max-width: 250px; + min-width: 250px; + display: flex; + flex-direction: column; + overflow: hidden; + justify-content: center; + border-radius: 24px; + padding: 0; + filter: drop-shadow(4px 8px 8px rgba(0, 0, 0, 0.30)); +} + +.window-content { + flex: 1; + display: flex; + align-items: center; + justify-content: center; + padding: 20px; +} + +.stars-section { + display: flex; + align-items: flex-end; +} + +.stars-section img { + display: flex; +} + +.side-star img { + display: none; +} + +.middle-star img { + display: flex; + width: 50px; + height: auto; +} + +/* Štýly pre okno hviezd */ +.stars-window .window-content { + flex-direction: row; + padding: 0px; +} + +.stars-display { + display: flex; + align-items: center; + gap: 10px; +} + +.stars-count { + font-family: "Luckiest Guy", sans-serif; + font-size: 40px; + color: #FFD700; + font-style: normal; + font-weight: 400; + -webkit-text-stroke: 1px #000; +} + +.stars-total { + font-family: "Luckiest Guy", sans-serif; + font-size: 40px; + color: #FFF; + font-style: normal; + font-weight: 400; + -webkit-text-stroke: 1px #000; +} + +/* Štýly pre cvičné tlačidlá */ +.practice-button { + width: 100%; + height: 100%; + background: none; + border: none; + border-radius: 10px; + cursor: url('../images/active_cursor4.png') 5 5, pointer; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + transition: all 0.4s ease; +} + +.practice-button h2 { + color: #FFF; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy"; + font-size: 40px; + font-style: normal; + font-weight: 400; + line-height: normal; +} + +.practice-button h3 { + color: #FFF; + -webkit-text-stroke-width: 1px; + -webkit-text-stroke-color: #000; + font-family: "Luckiest Guy"; + font-size: 40px; + font-style: normal; + font-weight: 400; + line-height: normal; + + background: conic-gradient(from 90deg at 50% 50%, #ECD517 0deg, #ECBB17 360deg); + background-clip: text; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} + +.miner-window:hover { + box-shadow: inset 0 0 20px 2px rgba(236, 207, 23, 0.3); + border: 4px solid #ECCF17; + scale: 0.98; +} + +.pexeso-window:hover { + box-shadow: inset 0 0 20px 2px rgba(236, 207, 23, 0.3); + border: 4px solid #ECCF17; + scale: 0.98; +} + +.practice-icon { + display: none; +} + + + + + +} + +/* Pre tablety a menšie obrazovky */ +@media (max-width: 1024px) { + + /* ===== BACK BUTTON ===== */ + .back-button { + position: absolute; + top: 10px; + left: 20px; + font-size: 35px; + font-weight: 400; + margin: 0; + padding: 0; + } + + .main-container { + padding: 20px 20px 20px 20px; /* Top padding pre back button */ + gap: 10px; + justify-content: center; + } + + .content-section { + flex: 0; /* Zaberie zvyšok miesta */ + min-height: 0; /* Umožní flex itemom zmenšiť sa */ + gap: 15px; + } + + /* ===== HORNÁ SEKCIA - NAVIGÁCIA SVETOV ===== */ + .worlds-navigation { + gap: 15px; + height: 60px; /* Fixná výška pre hornú sekciu */ + margin-bottom: 5px; + } + + /* Navigačné šípky - rovnaké ako v modáloch */ + .nav-arrow { + background: none; + font-size: 38px; + height: 38px; + width: 38px; + } + + .arrow-left { + border-top: 14px solid transparent; + border-bottom: 14px solid transparent; + border-right: 24px solid #FBDB68; + } + + .arrow-right { + border-top: 14px solid transparent; + border-bottom: 14px solid transparent; + border-left: 24px solid #FBDB68; + } + + /* Kontainer pre tlačidlá svetov */ + .worlds-buttons-container { + gap: 28px; + } + + /* Tlačidlá svetov - zatial základné štýly */ + .world-button { + width: 200px; + height: 60px; + } + + .world-button span{ + font-size: 42px; + line-height: 60px; + } + + .world-button.active span { + font-size: 42px; + line-height: 55px; + } + + + .side-panel { + width: 650px; + } + + .panel-window, .pexeso-window, .miner-window { + min-height: 50px; + max-height: 70px; + display: flex; + border-radius: 30px; + } + + .practice-button h2 { + font-size: 38px; + } + + .practice-button h3 { + font-size: 38px; + } + + .practice-icon { + width: 120px; + height: 120px; + display: none; + } + + .stars-count, .stars-total { + font-size: 38px; + } + + .side-star img { + width: 56px; + display: none; + } + + .middle-star img { + width: 34px; + } + + .stars-window .window-content { + flex-direction: row; + padding: 0px; + } + + +} + +/* Pre mobilné zariadenia */ +@media (max-width: 900px) { + .words-scrollable-container::-webkit-scrollbar { + width: 12px; /* Širší pre touch zariadenia */ + } + + .words-scrollable-container::-webkit-scrollbar-thumb { + border-radius: 6px; /* Menej zaoblené pre mobilné */ + } + + .back-button { + position: absolute; + top: 5px; + left: 10px; + font-size: 24px; + font-weight: 400; + margin: 0; + padding: 0; + } + + .main-container { + padding: 25px 20px 20px 20px; /* Top padding pre back button */ + gap: 10px; + justify-content: center; + } + + .content-section { + flex: 0; /* Zaberie zvyšok miesta */ + gap: 15px; + width: 100%; + height: 100%; + } + + /* ===== HORNÁ SEKCIA - NAVIGÁCIA SVETOV ===== */ + .worlds-navigation { + gap: 15px; + height: 50px; /* Fixná výška pre hornú sekciu */ + margin-bottom: 10px; + } + + /* Navigačné šípky - rovnaké ako v modáloch */ + .nav-arrow { + background: none; + font-size: 33px; + height: 33px; + width: 33px; + } + + .arrow-left { + border-top: 12px solid transparent; + border-bottom: 12px solid transparent; + border-right: 16px solid #FBDB68; + } + + .arrow-right { + border-top: 12px solid transparent; + border-bottom: 12px solid transparent; + border-left: 16px solid #FBDB68; + } + + /* Kontainer pre tlačidlá svetov */ + .worlds-buttons-container { + gap: 24px; + } + + /* Tlačidlá svetov - zatial základné štýly */ + .world-button { + width: 165px; + height: 50px; + } + + .world-button span{ + font-size: 35px; + line-height: 55px; + } + + .world-button.active span { + font-size: 33px; + line-height: 42px; + } + + + .game-panel { + width: 600px; + height: 600px; + min-width: 600px; + min-height: 600px; + max-width: 600px; + max-height: 600px; + } + + .game-panel-header { + height: 62px; + } + + .game-panel-header h2 { + font-size: 36px; + } + + .game-window { + width: 600px; + height: 530px; + } + + .levels-grid { + padding: 12px; + gap: 12px; + } + + .level-card { + width: 95px; + height: 79px; + } + + .level-card h1 { + font-size: 40px; + } + + .level-stars img { + width: 18px; + height: 18px; + } + + .lock img { + width: 36px; + } + + .side-panel { + width: 600px; + justify-content: center; + flex: 0; + } + + .panel-window, .pexeso-window, .miner-window { + min-height: 45px; + max-height: 55px; + max-width: 180px; + min-width: 180px; + display: flex; + border-radius: 30px; + padding: 0; + } + + .practice-button h2 { + font-size: 28px; + } + + .practice-button h3 { + font-size: 28px; + } + + .practice-icon { + display: none; + } + + .stars-count, .stars-total { + font-size: 28px; + } + + .side-star img { + display: none; + } + + .middle-star img { + width: 24px; + } + + + .words-scrollable-container { + max-height: 150px; + } + + .word-item { + font-size: 12px; + padding: 4px 8px; + } + + .items-controls { + gap: 8px; + } + + .item-control { + padding: 8px 12px; + } + + .item-control input[type="number"] { + width: 50px; + } + + .players-controls { + gap: 8px; + } + + .player-count-control { + flex-direction: column; + align-items: flex-start; + gap: 8px; + padding: 12px; + } + + .player-count-control select { + width: 100%; + min-width: unset; + } + + .player-input-group { + flex-direction: column; + align-items: flex-start; + gap: 6px; + padding: 10px 12px; + } + + .player-input-group label { + min-width: unset; + font-size: 13px; + } + + .player-name-input { + width: 100%; + margin-left: 0; + font-size: 13px; + } + + .players-settings h3 { + font-size: 20px; + } +} + +@media (max-width: 670px) { + /* ===== BACK BUTTON ===== */ + .back-button { + position: absolute; + top: 2px; + left: 10px; + font-size: 20px; + font-weight: 400; + } + + .main-container { + padding: 35px 20px 20px 20px; /* Top padding pre back button */ + gap: 0px; + justify-content: center; + } + + .content-section { + flex: 0; /* Zaberie zvyšok miesta */ + gap: 10px; + width: 100%; + height: 100%; + } + + /* ===== HORNÁ SEKCIA - NAVIGÁCIA SVETOV ===== */ + .worlds-navigation { + gap: 10px; + height: 50px; /* Fixná výška pre hornú sekciu */ + margin-bottom: 8px; + } + + /* Navigačné šípky - rovnaké ako v modáloch */ + .nav-arrow { + background: none; + font-size: 24px; + height: 24px; + width: 24px; + } + + .arrow-left { + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + border-right: 12px solid #FBDB68; + } + + .arrow-right { + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + border-left: 12px solid #FBDB68; + } + + /* Kontainer pre tlačidlá svetov */ + .worlds-buttons-container { + gap: 14px; + } + + /* Tlačidlá svetov - zatial základné štýly */ + .world-button { + width: 125px; + height: 40px; + padding: 0; + } + + .world-button span{ + font-size: 30px; + line-height: 0px; + } + + .world-button.active span { + font-size: 30px; + line-height: 0px; + -webkit-text-stroke-width: 2px; + } + + /* Aktívne tlačidlo sveta */ + .world-button.active { + border: 3px solid #16B921; + } + + .game-panel { + width: 450px; + height: 450px; + min-width: 450px; + min-height: 450px; + max-width: 450px; + max-height: 450px; + } + + .game-panel-header { + height: 59px; + } + + .game-panel-header h2 { + font-size: 32px; + } + + .game-window { + width: 440px; + height: 411px; + } + + .levels-grid { + padding: 12px; + gap: 12px; + } + + .level-card { + width: 90px; + height: 75px; + border-radius: 14px; + } + + .level-card h1 { + font-size: 38px; + } + + .level-stars img { + width: 16px; + height: 16px; + } + + .lock img { + width: 32px; + } + + .side-panel { + width: 450px; + justify-content: center; + flex: 0; + } + + .panel-window, .pexeso-window, .miner-window { + min-height: 35px; + max-height: 45px; + max-width: 120px; + min-width: 120px; + display: flex; + border-radius: 30px; + padding: 0; + border: 2px solid #AC3F0B; + } + + .practice-button h2 { + font-size: 21px; + } + + .practice-button h3 { + font-size: 21px; + } + + .practice-icon { + display: none; + } + + .stars-count, .stars-total { + font-size: 21px; + } + + .side-star img { + display: none; + } + + .middle-star img { + width: 20px; + } + + .level-modal-content { + max-width: 95%; + margin: 10px; + } + + .level-modal-body { + flex-direction: column; + gap: 20px; + padding: 20px; + } + + .level-modal-header h2 { + font-size: 28px; + } + + .level-modal-body p { + font-size: 18px; + } + + .level-modal-body strong { + font-size: 18px; + } + + .word-tag { + font-size: 18px; + padding: 4px 8px; + } + + .btn-primary, + .btn-secondary { + padding: 10px 18px; + font-size: 18px; + } + + .btn-primary a { + font-size: 28px; + } + + .btn-primary:hover a { + font-size: 28px; + } + +} + +/* Pre veľmi malé mobilné zariadenia */ +@media (max-width: 480px) { + /* ===== BACK BUTTON ===== */ + .back-button { + position: absolute; + top: 5px; + left: 5px; + font-size: 18px; + font-weight: 400; + } + + .loading-logo { + margin-bottom: 2rem; + } + + .loading-text-jozino { + font-size: 64px; + width: auto; + line-height: 0px; /* 20% */ + } + + .loading-text-banik { + font-size: 30px; + line-height: 20px; /* 20% */ + } + + .loading-message { + font-size: 20px; + } + + /* ===== HORNÁ SEKCIA - NAVIGÁCIA SVETOV ===== */ + .worlds-navigation { + gap: 10px; + height: 50px; /* Fixná výška pre hornú sekciu */ + margin-bottom: 8px; + } + + /* Navigačné šípky - rovnaké ako v modáloch */ + .nav-arrow { + background: none; + font-size: 24px; + height: 24px; + width: 24px; + } + + .arrow-left { + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + border-right: 12px solid #FBDB68; + } + + .arrow-right { + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + border-left: 12px solid #FBDB68; + } + + /* Kontainer pre tlačidlá svetov */ + .worlds-buttons-container { + gap: 14px; + } + + /* Tlačidlá svetov - zatial základné štýly */ + .world-button { + width: 50px; + height: 50px; + padding: 0; + } + + .world-button span{ + font-size: 30px; + line-height: 0px; + } + + + .world-button.active span { + font-size: 30px; + line-height: 0px; + -webkit-text-stroke-width: 2px; + } + + /* Aktívne tlačidlo sveta */ + .world-button.active { + border: 3px solid #16B921; + } + + + + .main-container { + padding: 10px 0px 5px 0px; /* Top padding pre back button */ + gap: 0px; + justify-content: center; + } + + .content-section { + flex: 0; /* Zaberie zvyšok miesta */ + gap: 10px; + width: 100%; + height: 100vh; + } + + .game-panel { + width: calc(100vw - 20px); + height: calc(100vw - 20px); + min-width: 270px; + min-height: 270px; + max-width: 400px; + max-height: 400px; + } + + .game-panel-header { + height: calc((100vw - 10px) * 0.125); + min-height: 35px; + max-height: 47px; + } + + .game-panel-header h2 { + font-size: 24px; + } + + .game-window { + width: 100%; + height: calc((100vw - 10px) * 0.875); + min-height: 245px; + max-height: 333px; + } + + .levels-grid { + padding: 8px; + gap: 6px; + } + + .level-card { + width: calc((100vw - 40px) / 4); + height: calc((100vw - 40px) / 4 * 0.8); + min-width: 60px; + min-height: 48px; + max-width: 80px; + max-height: 64px; + border: 2px solid #AC3F0B; + } + + .level-card h1 { + font-size: 26px; + } + + .level-stars img { + width: 12px; + height: 12px; + } + + .lock img { + width: 24px; + } + + .side-panel { + width: 250px; + justify-content: center; + flex: 0; + gap: 5px; + } + + .panel-window, .pexeso-window, .miner-window { + min-height: 35px; + max-height: 45px; + max-width: 80px; + min-width: 80px; + display: flex; + border-radius: 30px; + padding: 0; + border: 2px solid #AC3F0B; + } + + .practice-button h2 { + font-size: 16px; + } + + .practice-button h3 { + font-size: 16px; + } + + .practice-icon { + display: none; + } + + .stars-count, .stars-total { + font-size: 16px; + } + + .side-star img { + display: none; + } + + .middle-star img { + width: 16px; + } + + .level-modal-content { + max-width: 95%; + margin: 10px; + } + + .level-modal-body { + flex-direction: column; + gap: 20px; + padding: 20px; + } + + .level-modal-header h2 { + font-size: 22px; + } + + .level-modal-body p { + font-size: 14px; + } + + .level-modal-body strong { + font-size: 14px; + } + + .word-tag { + font-size: 12px; + padding: 4px 8px; + } + + .btn-primary, + .btn-secondary { + padding: 10px 18px; + font-size: 14px; + } + + .level-modal-footer { + flex-direction: column; + gap: 10px; + } + + .btn-primary, + .btn-secondary { + width: 100%; + text-align: center; + } + + .btn-primary a { + font-size: 20px; + } + + .btn-primary:hover a { + font-size: 20px; + } + + .players-settings { + padding: 12px; + margin-top: 10px; + } + + .players-settings h3 { + font-size: 18px; + margin-bottom: 10px; + } + + .player-count-control label, + .player-input-group label { + font-size: 12px; + cursor: url('../images/cursor.png') 5 5, auto; + } + + .player-count-control select, + .player-name-input { + font-size: 12px; + padding: 5px 8px; + } + + .words-scrollable-container::-webkit-scrollbar { + width: 14px; + } + +} + +@media (max-width: 290px) { + /* ===== BACK BUTTON ===== */ + .back-button { + position: absolute; + top: 5px; + left: 5px; + font-size: 18px; + font-weight: 400; + } + + .loading-logo { + margin-bottom: 2rem; + } + + .loading-text-jozino { + font-size: 35px; + width: auto; + line-height: 0px; /* 20% */ + } + + .loading-text-banik { + font-size: 20px; + line-height: 20px; /* 20% */ + } + + .loading-message { + font-size: 18px; + } + + /* ===== HORNÁ SEKCIA - NAVIGÁCIA SVETOV ===== */ + .worlds-navigation { + gap: 4px; + height: 50px; /* Fixná výška pre hornú sekciu */ + margin-bottom: 0px; + } + + /* Navigačné šípky - rovnaké ako v modáloch */ + .nav-arrow { + background: none; + font-size: 24px; + height: 24px; + width: 24px; + } + + .arrow-left { + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + border-right: 12px solid #FBDB68; + } + + .arrow-right { + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + border-left: 12px solid #FBDB68; + } + + /* Kontainer pre tlačidlá svetov */ + .worlds-buttons-container { + gap: 8px; + } + + /* Tlačidlá svetov - zatial základné štýly */ + .world-button { + width: 30px; + height: 30px; + padding: 0; + display: flex; + justify-content: center; + justify-items: center; + align-items: center; + } + + .world-button span{ + font-size: 20px; + line-height: 0px; + padding-top: -10px; + } + + .world-button.active span { + font-size: 20px; + line-height: 0px; + -webkit-text-stroke-width: 2px; + } + + /* Aktívne tlačidlo sveta */ + .world-button.active { + border: 3px solid #16B921; + } + + + + .main-container { + padding: 5px 0px 2px 0px; /* Top padding pre back button */ + gap: 0px; + justify-content: center; + } + + .content-section { + flex: 0; /* Zaberie zvyšok miesta */ + gap: 5px; + width: 100%; + height: 100vh; + } + + .game-panel { + width: calc(100vw - 30px); + height: calc(100vw - 30px); + min-width: 170px; + min-height: 170px; + max-width: 270px; + max-height: 270px; + } + + .game-panel-header { + height: calc((100vw - 10px) * 0.125); + min-height: 25px; + max-height: 30px; + } + + .game-panel-header h2 { + font-size: 16px; + } + + .game-window { + width: 100%; + height: calc((100vw - 10px) * 0.875); + min-height: 245px; + max-height: 333px; + } + + .levels-grid { + padding: 4px; + gap: 4px; + } + + .level-card { + width: calc((100vw - 40px) / 4); + height: calc((100vw - 40px) / 4 * 0.8); + min-width: 50px; + min-height: 38px; + max-width: 60px; + max-height: 44px; + border: 1px solid #AC3F0B; + border-radius: 8px; + } + + .level-card h1 { + font-size: 18px; + } + + .level-stars img { + width: 8px; + height: 8px; + } + + .lock img { + width: 18px; + } + + + + .side-panel { + width: 180px; + justify-content: center; + flex: 0; + gap: 5px; + } + + .panel-window, .pexeso-window, .miner-window { + min-height: 20px; + max-height: 30px; + max-width: 50px; + min-width: 50px; + display: flex; + border-radius: 12px; + padding: 0; + border: 2px solid #AC3F0B; + } + + .practice-button h2 { + font-size: 8px; + } + + .practice-button h3 { + font-size: 8px; + } + + .practice-icon { + display: none; + } + + .stars-display{ + gap:0px; + } + + .stars-count, .stars-total { + font-size: 8px; + gap: 0px; + padding: 0px; + } + + .side-star img { + display: none; + } + + .middle-star img { + width: 8px; + } +} + + +/* ===== ACCESSIBILITY - pre používateľov ktorí preferujú menšie animácie ===== */ +@media (prefers-reduced-motion: reduce) { + .words-scrollable-container::-webkit-scrollbar-thumb { + transition: none; /* Bez animácií */ + } + + .words-scrollable-container { + scroll-behavior: auto; /* Bez smooth scrollingu */ + } +} + + + + + + +/* ==================================== + PEXESO TRAINING MODAL - CSS ŠTÝLY + Dodatočné štýly pre pexeso tréning modal + Pridať do worldsmenu.css súboru +==================================== */ + +/* Dodatočné štýly pre players nastavenia v pexeso modali */ +.players-settings { + background: rgba(255, 255, 255, 0.1); + padding: 15px; + border-radius: 12px; + border: 2px solid rgba(236, 207, 23, 0.3); + margin-top: 15px; +} + +.players-settings h3 { + color: #ECCF17; + font-family: "Luckiest Guy", sans-serif; + font-size: 24px; + font-weight: 400; + margin: 0 0 15px 0; + text-align: center; + -webkit-text-stroke: 1px #000; +} + +.players-controls { + display: flex; + flex-direction: column; + gap: 12px; +} + +.player-count-control { + display: flex; + align-items: center; + justify-content: space-between; + padding: 8px 12px; + background: rgba(255, 255, 255, 0.1); + border-radius: 8px; + border: 1px solid rgba(236, 207, 23, 0.2); +} + +.player-count-control label { + color: #FFF; + font-family: "Luckiest Guy", sans-serif; + font-size: 16px; + font-weight: 400; + -webkit-text-stroke: 0.5px #000; + cursor: url('../images/cursor.png') 5 5, auto; +} + +.player-count-control select { + background: rgba(255, 255, 255, 0.9); + border: 2px solid #ECCF17; + border-radius: 6px; + padding: 6px 12px; + font-family: "Luckiest Guy", sans-serif; + font-size: 14px; + color: #333; + cursor: url('../images/active_cursor4.png') 5 5, pointer; + min-width: 160px; +} + +.player-count-control select:focus { + outline: none; + box-shadow: 0 0 8px rgba(236, 207, 23, 0.5); +} + +.players-names-container { + display: flex; + flex-direction: column; + gap: 10px; + margin-top: 10px; +} + +.player-input-group { + display: flex; + align-items: center; + justify-content: space-between; + padding: 8px 12px; + background: rgba(255, 255, 255, 0.05); + border-radius: 6px; + border: 1px solid rgba(236, 207, 23, 0.1); +} + +.player-input-group label { + color: #FFF; + font-family: "Luckiest Guy", sans-serif; + font-size: 14px; + font-weight: 400; + -webkit-text-stroke: 0.5px #000; + min-width: 70px; + cursor: url('../images/cursor.png') 5 5, auto; +} + +.player-name-input { + background: rgba(255, 255, 255, 0.9); + border: 1px solid #ECCF17; + border-radius: 4px; + padding: 6px 10px; + font-family: "Luckiest Guy", sans-serif; + font-size: 14px; + color: #333; + flex: 1; + margin-left: 10px; +} + +.player-name-input:focus { + outline: none; + box-shadow: 0 0 6px rgba(236, 207, 23, 0.4); + border-color: #ECCF17; +} + +.player-name-input::placeholder { + color: #666; + font-style: normal; +} + + + + + + + + + + + + + + +/* Tlačidlo pre rozšírené nastavenia */ +.toggle-advanced-btn { + width: 100%; + background: rgba(236, 207, 23, 0.2); + border: 2px solid #ECCF17; + border-radius: 12px; + padding: 12px 20px; + margin-top: 15px; + font-family: "Luckiest Guy", sans-serif; + font-size: 16px; + color: white; + cursor: url('../images/active_cursor4.png') 5 5, pointer; + transition: all 0.3s ease; + display: flex; + align-items: center; + justify-content: center; + gap: 10px; +} + +.toggle-advanced-btn:hover { + background: rgba(236, 207, 23, 0.3); + transform: scale(0.98); +} + +.toggle-advanced-btn:active { + transform: scale(0.98); +} + +/* Ikona šípky v tlačidle */ +#toggle-icon { + font-size: 14px; + transition: transform 0.3s ease; +} + +/* Rotácia šípky keď sú rozšírené nastavenia otvorené */ +.toggle-advanced-btn.active #toggle-icon { + transform: rotate(180deg); +} + +/* Panel rozšírených nastavení */ +.advanced-settings { + margin-top: 15px; + padding: 15px; + background: rgba(255, 255, 255, 0.05); + border: 2px solid rgba(236, 207, 23, 0.2); + border-radius: 12px; + animation: slideDown 0.3s ease; + gap: 10px; + display: flex; + flex-direction: column; +} + +@keyframes slideDown { + from { + opacity: 0; + transform: translateY(-10px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +/* Upravené štýly pre item-control v rozšírených nastaveniach */ +.advanced-settings .item-control { + background: rgba(255, 255, 255, 0.08); + border: 1px solid rgba(236, 207, 23, 0.3); + cursor: url('../images/cursor.png') 5 5, auto; +} + +.advanced-settings .item-control label { + display: flex; + align-items: center; + gap: 5px; + cursor: url('../images/cursor.png') 5 5, auto; +} \ No newline at end of file diff --git a/game.html b/game.html new file mode 100644 index 0000000..06ba158 --- /dev/null +++ b/game.html @@ -0,0 +1,204 @@ + + + + + + + + + Baník Jožino: Logopedická hra - Diplomová práca + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+ + +
+
+
+
+ +
+ 0% + Pripravujem hru... +
+
+ + +
Načítavam zdroje...
+
+
+ + + + + +
+
+ +
+ +
+
+
+
+
JOŽINO
+
BANÍK
+
+
+
+
+ Čas: + 00:00 +
+
+ Slová: + 0 + / + 0 +
+
+
+ + + +
+ + +
+
+ +
+ + +
+
+
+
+
0, 0
+
+
+
+ +
+ + + +
+
+
+

ROZPOZNAJ SLOVÁ

+

Sú slová rovnaké?

+
+
+
+
+ +
+
+
+

Prešiel si level!

+
+
+ Čas: + 02:43 +
+
+ Slová: + 4 + / + 4 +
+
+ +
+ +
+
+
+
+ +
+
+ × + +
+
+ +
+ + + + + + \ No newline at end of file diff --git a/images/Akohrat.png b/images/Akohrat.png new file mode 100644 index 0000000..fbfce4f Binary files /dev/null and b/images/Akohrat.png differ diff --git a/images/Datový zdroj 11.png b/images/Datový zdroj 11.png new file mode 100644 index 0000000..a69c94e Binary files /dev/null and b/images/Datový zdroj 11.png differ diff --git a/images/Datový zdroj 12.png b/images/Datový zdroj 12.png new file mode 100644 index 0000000..b2d0779 Binary files /dev/null and b/images/Datový zdroj 12.png differ diff --git a/images/active_cursor.png b/images/active_cursor.png new file mode 100644 index 0000000..b5fc183 Binary files /dev/null and b/images/active_cursor.png differ diff --git a/images/active_cursor2.png b/images/active_cursor2.png new file mode 100644 index 0000000..370c3ac Binary files /dev/null and b/images/active_cursor2.png differ diff --git a/images/active_cursor3.png b/images/active_cursor3.png new file mode 100644 index 0000000..bbaa30c Binary files /dev/null and b/images/active_cursor3.png differ diff --git a/images/active_cursor4.png b/images/active_cursor4.png new file mode 100644 index 0000000..52b373c Binary files /dev/null and b/images/active_cursor4.png differ diff --git a/images/background.png b/images/background.png new file mode 100644 index 0000000..113fa72 Binary files /dev/null and b/images/background.png differ diff --git a/images/banik-icon.png b/images/banik-icon.png new file mode 100644 index 0000000..8f03736 Binary files /dev/null and b/images/banik-icon.png differ diff --git a/images/banik.png b/images/banik.png new file mode 100644 index 0000000..8f03736 Binary files /dev/null and b/images/banik.png differ diff --git a/images/close.png b/images/close.png new file mode 100644 index 0000000..8bf6117 Binary files /dev/null and b/images/close.png differ diff --git a/images/cursor.png b/images/cursor.png new file mode 100644 index 0000000..be80e5f Binary files /dev/null and b/images/cursor.png differ diff --git a/images/cvicenie.png b/images/cvicenie.png new file mode 100644 index 0000000..a54d140 Binary files /dev/null and b/images/cvicenie.png differ diff --git a/images/diamanty.png b/images/diamanty.png new file mode 100644 index 0000000..5ec3ff0 Binary files /dev/null and b/images/diamanty.png differ diff --git a/images/diamond.png b/images/diamond.png new file mode 100644 index 0000000..ac082a7 Binary files /dev/null and b/images/diamond.png differ diff --git a/images/diamond1.png b/images/diamond1.png new file mode 100644 index 0000000..2c024c3 Binary files /dev/null and b/images/diamond1.png differ diff --git a/images/diamond2.png b/images/diamond2.png new file mode 100644 index 0000000..c06e099 Binary files /dev/null and b/images/diamond2.png differ diff --git a/images/dragon.png b/images/dragon.png new file mode 100644 index 0000000..38e8c7c Binary files /dev/null and b/images/dragon.png differ diff --git a/images/drak2.png b/images/drak2.png new file mode 100644 index 0000000..38e8c7c Binary files /dev/null and b/images/drak2.png differ diff --git a/images/gold.png b/images/gold.png new file mode 100644 index 0000000..d9a7710 Binary files /dev/null and b/images/gold.png differ diff --git a/images/gulka.png b/images/gulka.png new file mode 100644 index 0000000..a6179de Binary files /dev/null and b/images/gulka.png differ diff --git a/images/hra.png b/images/hra.png new file mode 100644 index 0000000..93e83c9 Binary files /dev/null and b/images/hra.png differ diff --git a/images/hrac-chrbat.png b/images/hrac-chrbat.png new file mode 100644 index 0000000..b979b34 Binary files /dev/null and b/images/hrac-chrbat.png differ diff --git a/images/hrac-kope-vlavo.png b/images/hrac-kope-vlavo.png new file mode 100644 index 0000000..4128e73 Binary files /dev/null and b/images/hrac-kope-vlavo.png differ diff --git a/images/hrac-kope-vpravo.png b/images/hrac-kope-vpravo.png new file mode 100644 index 0000000..333772e Binary files /dev/null and b/images/hrac-kope-vpravo.png differ diff --git a/images/hrac-otoceny-vlavo.png b/images/hrac-otoceny-vlavo.png new file mode 100644 index 0000000..6def572 Binary files /dev/null and b/images/hrac-otoceny-vlavo.png differ diff --git a/images/hrac-otoceny-vpravo.png b/images/hrac-otoceny-vpravo.png new file mode 100644 index 0000000..05b25f9 Binary files /dev/null and b/images/hrac-otoceny-vpravo.png differ diff --git a/images/hrac.png b/images/hrac.png new file mode 100644 index 0000000..c700bef Binary files /dev/null and b/images/hrac.png differ diff --git a/images/hviezda.png b/images/hviezda.png new file mode 100644 index 0000000..66c6566 Binary files /dev/null and b/images/hviezda.png differ diff --git a/images/info.png b/images/info.png new file mode 100644 index 0000000..7efe893 Binary files /dev/null and b/images/info.png differ diff --git a/images/informacie-okno.png b/images/informacie-okno.png new file mode 100644 index 0000000..d598899 Binary files /dev/null and b/images/informacie-okno.png differ diff --git a/images/informacieokno.png b/images/informacieokno.png new file mode 100644 index 0000000..0e9f324 Binary files /dev/null and b/images/informacieokno.png differ diff --git a/images/kov.png b/images/kov.png new file mode 100644 index 0000000..fb3d47b Binary files /dev/null and b/images/kov.png differ diff --git a/images/mario-icon.png b/images/mario-icon.png new file mode 100644 index 0000000..c700bef Binary files /dev/null and b/images/mario-icon.png differ diff --git a/images/menu.png b/images/menu.png new file mode 100644 index 0000000..f3836ed Binary files /dev/null and b/images/menu.png differ diff --git a/images/menu1.png b/images/menu1.png new file mode 100644 index 0000000..87dca81 Binary files /dev/null and b/images/menu1.png differ diff --git a/images/menu_male.png b/images/menu_male.png new file mode 100644 index 0000000..c474d6e Binary files /dev/null and b/images/menu_male.png differ diff --git a/images/menubutton.png b/images/menubutton.png new file mode 100644 index 0000000..b082abf Binary files /dev/null and b/images/menubutton.png differ diff --git a/images/nastavenia.png b/images/nastavenia.png new file mode 100644 index 0000000..92a2df9 Binary files /dev/null and b/images/nastavenia.png differ diff --git a/images/nastaveniahry.png b/images/nastaveniahry.png new file mode 100644 index 0000000..a69c94e Binary files /dev/null and b/images/nastaveniahry.png differ diff --git a/images/nespravne.png b/images/nespravne.png new file mode 100644 index 0000000..6e30917 Binary files /dev/null and b/images/nespravne.png differ diff --git a/images/pes.png b/images/pes.png new file mode 100644 index 0000000..38e8c7c Binary files /dev/null and b/images/pes.png differ diff --git a/images/pexeso-Custom.png b/images/pexeso-Custom.png new file mode 100644 index 0000000..c1267b9 Binary files /dev/null and b/images/pexeso-Custom.png differ diff --git a/images/pexeso-R.png b/images/pexeso-R.png new file mode 100644 index 0000000..2866abe Binary files /dev/null and b/images/pexeso-R.png differ diff --git a/images/pexeso-Z.png b/images/pexeso-Z.png new file mode 100644 index 0000000..77cf5aa Binary files /dev/null and b/images/pexeso-Z.png differ diff --git a/images/pexeso-icon.png b/images/pexeso-icon.png new file mode 100644 index 0000000..12fd0fc Binary files /dev/null and b/images/pexeso-icon.png differ diff --git a/images/pexeso-Š.png b/images/pexeso-Š.png new file mode 100644 index 0000000..95deb20 Binary files /dev/null and b/images/pexeso-Š.png differ diff --git a/images/pexeso.png b/images/pexeso.png new file mode 100644 index 0000000..12fd0fc Binary files /dev/null and b/images/pexeso.png differ diff --git a/images/pexesomenu.png b/images/pexesomenu.png new file mode 100644 index 0000000..54b0322 Binary files /dev/null and b/images/pexesomenu.png differ diff --git a/images/pozadie button mobile.png b/images/pozadie button mobile.png new file mode 100644 index 0000000..3484938 Binary files /dev/null and b/images/pozadie button mobile.png differ diff --git a/images/pozadie.jpg b/images/pozadie.jpg new file mode 100644 index 0000000..eee707b Binary files /dev/null and b/images/pozadie.jpg differ diff --git a/images/pozadie_button.png b/images/pozadie_button.png new file mode 100644 index 0000000..fbb8d17 Binary files /dev/null and b/images/pozadie_button.png differ diff --git a/images/pozadie_button_mobile_2.png b/images/pozadie_button_mobile_2.png new file mode 100644 index 0000000..84c68bc Binary files /dev/null and b/images/pozadie_button_mobile_2.png differ diff --git a/images/pozadieg.jpg b/images/pozadieg.jpg new file mode 100644 index 0000000..113fa72 Binary files /dev/null and b/images/pozadieg.jpg differ diff --git a/images/pozadiemenu.png b/images/pozadiemenu.png new file mode 100644 index 0000000..d133894 Binary files /dev/null and b/images/pozadiemenu.png differ diff --git a/images/pozadiemenudiamant.png b/images/pozadiemenudiamant.png new file mode 100644 index 0000000..d57e04f Binary files /dev/null and b/images/pozadiemenudiamant.png differ diff --git a/images/pozadiemenudiamant1.png b/images/pozadiemenudiamant1.png new file mode 100644 index 0000000..2f6c36d Binary files /dev/null and b/images/pozadiemenudiamant1.png differ diff --git a/images/pozadiemenukov.png b/images/pozadiemenukov.png new file mode 100644 index 0000000..3f0b20f Binary files /dev/null and b/images/pozadiemenukov.png differ diff --git a/images/pozadiemenuzlato.png b/images/pozadiemenuzlato.png new file mode 100644 index 0000000..95db4cc Binary files /dev/null and b/images/pozadiemenuzlato.png differ diff --git a/images/pozadiemenuzlato1.png b/images/pozadiemenuzlato1.png new file mode 100644 index 0000000..41ae3af Binary files /dev/null and b/images/pozadiemenuzlato1.png differ diff --git a/images/restart.png b/images/restart.png new file mode 100644 index 0000000..dff91d6 Binary files /dev/null and b/images/restart.png differ diff --git a/images/restart_male.png b/images/restart_male.png new file mode 100644 index 0000000..2943122 Binary files /dev/null and b/images/restart_male.png differ diff --git a/images/rovnake.png b/images/rovnake.png new file mode 100644 index 0000000..fd1aa87 Binary files /dev/null and b/images/rovnake.png differ diff --git a/images/rozdielne.png b/images/rozdielne.png new file mode 100644 index 0000000..8bf6117 Binary files /dev/null and b/images/rozdielne.png differ diff --git a/images/sleepdragon.png b/images/sleepdragon.png new file mode 100644 index 0000000..b7d5b76 Binary files /dev/null and b/images/sleepdragon.png differ diff --git a/images/slider0.png b/images/slider0.png new file mode 100644 index 0000000..e354120 Binary files /dev/null and b/images/slider0.png differ diff --git a/images/slider1.png b/images/slider1.png new file mode 100644 index 0000000..c3d525b Binary files /dev/null and b/images/slider1.png differ diff --git a/images/slova.zip b/images/slova.zip new file mode 100644 index 0000000..ff5c3e3 Binary files /dev/null and b/images/slova.zip differ diff --git a/images/slova/Gabo.png b/images/slova/Gabo.png new file mode 100644 index 0000000..303b7a2 Binary files /dev/null and b/images/slova/Gabo.png differ diff --git a/images/slova/Katka.png b/images/slova/Katka.png new file mode 100644 index 0000000..0ca1cb9 Binary files /dev/null and b/images/slova/Katka.png differ diff --git a/images/slova/Lukáš.png b/images/slova/Lukáš.png new file mode 100644 index 0000000..fa73ce2 Binary files /dev/null and b/images/slova/Lukáš.png differ diff --git a/images/slova/Oto.png b/images/slova/Oto.png new file mode 100644 index 0000000..1f4c6e2 Binary files /dev/null and b/images/slova/Oto.png differ diff --git a/images/slova/ananás.png b/images/slova/ananás.png new file mode 100644 index 0000000..014cefc Binary files /dev/null and b/images/slova/ananás.png differ diff --git a/images/slova/auto.png b/images/slova/auto.png new file mode 100644 index 0000000..70a6d37 Binary files /dev/null and b/images/slova/auto.png differ diff --git a/images/slova/bager.png b/images/slova/bager.png new file mode 100644 index 0000000..8fdb9bf Binary files /dev/null and b/images/slova/bager.png differ diff --git a/images/slova/bageta.png b/images/slova/bageta.png new file mode 100644 index 0000000..3365937 Binary files /dev/null and b/images/slova/bageta.png differ diff --git a/images/slova/baran.png b/images/slova/baran.png new file mode 100644 index 0000000..8225cb2 Binary files /dev/null and b/images/slova/baran.png differ diff --git a/images/slova/baňa.png b/images/slova/baňa.png new file mode 100644 index 0000000..528943b Binary files /dev/null and b/images/slova/baňa.png differ diff --git a/images/slova/bežať.png b/images/slova/bežať.png new file mode 100644 index 0000000..cc80a93 Binary files /dev/null and b/images/slova/bežať.png differ diff --git a/images/slova/brána.png b/images/slova/brána.png new file mode 100644 index 0000000..0bd09e3 Binary files /dev/null and b/images/slova/brána.png differ diff --git a/images/slova/bránka.png b/images/slova/bránka.png new file mode 100644 index 0000000..54b72bf Binary files /dev/null and b/images/slova/bránka.png differ diff --git a/images/slova/bungalov.png b/images/slova/bungalov.png new file mode 100644 index 0000000..e6df04d Binary files /dev/null and b/images/slova/bungalov.png differ diff --git a/images/slova/báseň.png b/images/slova/báseň.png new file mode 100644 index 0000000..761cf38 Binary files /dev/null and b/images/slova/báseň.png differ diff --git a/images/slova/cap.png b/images/slova/cap.png new file mode 100644 index 0000000..bb96864 Binary files /dev/null and b/images/slova/cap.png differ diff --git a/images/slova/cena.png b/images/slova/cena.png new file mode 100644 index 0000000..e8fd0c5 Binary files /dev/null and b/images/slova/cena.png differ diff --git a/images/slova/cesta.png b/images/slova/cesta.png new file mode 100644 index 0000000..a3f7b99 Binary files /dev/null and b/images/slova/cesta.png differ diff --git a/images/slova/cesto.png b/images/slova/cesto.png new file mode 100644 index 0000000..86414fa Binary files /dev/null and b/images/slova/cesto.png differ diff --git a/images/slova/chuť.png b/images/slova/chuť.png new file mode 100644 index 0000000..e504cf9 Binary files /dev/null and b/images/slova/chuť.png differ diff --git a/images/slova/cicavec.png b/images/slova/cicavec.png new file mode 100644 index 0000000..f92a19e Binary files /dev/null and b/images/slova/cicavec.png differ diff --git a/images/slova/cirkus.png b/images/slova/cirkus.png new file mode 100644 index 0000000..7fe47aa Binary files /dev/null and b/images/slova/cirkus.png differ diff --git a/images/slova/citrón.png b/images/slova/citrón.png new file mode 100644 index 0000000..c4f054f Binary files /dev/null and b/images/slova/citrón.png differ diff --git a/images/slova/cnosť.png b/images/slova/cnosť.png new file mode 100644 index 0000000..fec3f92 Binary files /dev/null and b/images/slova/cnosť.png differ diff --git a/images/slova/cop.png b/images/slova/cop.png new file mode 100644 index 0000000..404fa50 Binary files /dev/null and b/images/slova/cop.png differ diff --git a/images/slova/cukor.png b/images/slova/cukor.png new file mode 100644 index 0000000..fa0a4eb Binary files /dev/null and b/images/slova/cukor.png differ diff --git a/images/slova/cukrík.png b/images/slova/cukrík.png new file mode 100644 index 0000000..70fa3a0 Binary files /dev/null and b/images/slova/cukrík.png differ diff --git a/images/slova/cvičky.png b/images/slova/cvičky.png new file mode 100644 index 0000000..49745f0 Binary files /dev/null and b/images/slova/cvičky.png differ diff --git a/images/slova/dar.png b/images/slova/dar.png new file mode 100644 index 0000000..34f808b Binary files /dev/null and b/images/slova/dar.png differ diff --git a/images/slova/dedina.png b/images/slova/dedina.png new file mode 100644 index 0000000..ffc5de7 Binary files /dev/null and b/images/slova/dedina.png differ diff --git a/images/slova/dedo.png b/images/slova/dedo.png new file mode 100644 index 0000000..d511ec3 Binary files /dev/null and b/images/slova/dedo.png differ diff --git a/images/slova/delfín.png b/images/slova/delfín.png new file mode 100644 index 0000000..497ed90 Binary files /dev/null and b/images/slova/delfín.png differ diff --git a/images/slova/desať.png b/images/slova/desať.png new file mode 100644 index 0000000..3fe4178 Binary files /dev/null and b/images/slova/desať.png differ diff --git a/images/slova/deti.png b/images/slova/deti.png new file mode 100644 index 0000000..476c320 Binary files /dev/null and b/images/slova/deti.png differ diff --git a/images/slova/deväť.png b/images/slova/deväť.png new file mode 100644 index 0000000..29361ac Binary files /dev/null and b/images/slova/deväť.png differ diff --git a/images/slova/deň.png b/images/slova/deň.png new file mode 100644 index 0000000..e3000ab Binary files /dev/null and b/images/slova/deň.png differ diff --git a/images/slova/diamant.png b/images/slova/diamant.png new file mode 100644 index 0000000..41e847a Binary files /dev/null and b/images/slova/diamant.png differ diff --git a/images/slova/dielňa.png b/images/slova/dielňa.png new file mode 100644 index 0000000..3a422a9 Binary files /dev/null and b/images/slova/dielňa.png differ diff --git a/images/slova/diera.png b/images/slova/diera.png new file mode 100644 index 0000000..8945442 Binary files /dev/null and b/images/slova/diera.png differ diff --git a/images/slova/dievča.png b/images/slova/dievča.png new file mode 100644 index 0000000..c42a7ff Binary files /dev/null and b/images/slova/dievča.png differ diff --git a/images/slova/dinosaurus.png b/images/slova/dinosaurus.png new file mode 100644 index 0000000..6edbdcf Binary files /dev/null and b/images/slova/dinosaurus.png differ diff --git a/images/slova/disk.png b/images/slova/disk.png new file mode 100644 index 0000000..16deeda Binary files /dev/null and b/images/slova/disk.png differ diff --git a/images/slova/disketa.png b/images/slova/disketa.png new file mode 100644 index 0000000..074b189 Binary files /dev/null and b/images/slova/disketa.png differ diff --git a/images/slova/divák.png b/images/slova/divák.png new file mode 100644 index 0000000..914c903 Binary files /dev/null and b/images/slova/divák.png differ diff --git a/images/slova/dlaň.png b/images/slova/dlaň.png new file mode 100644 index 0000000..fef03ac Binary files /dev/null and b/images/slova/dlaň.png differ diff --git a/images/slova/doga.png b/images/slova/doga.png new file mode 100644 index 0000000..1042484 Binary files /dev/null and b/images/slova/doga.png differ diff --git a/images/slova/doklad.png b/images/slova/doklad.png new file mode 100644 index 0000000..d6314f2 Binary files /dev/null and b/images/slova/doklad.png differ diff --git a/images/slova/doktor.png b/images/slova/doktor.png new file mode 100644 index 0000000..15505a7 Binary files /dev/null and b/images/slova/doktor.png differ diff --git a/images/slova/dom.png b/images/slova/dom.png new file mode 100644 index 0000000..134cbbc Binary files /dev/null and b/images/slova/dom.png differ diff --git a/images/slova/domov.png b/images/slova/domov.png new file mode 100644 index 0000000..3239f90 Binary files /dev/null and b/images/slova/domov.png differ diff --git a/images/slova/donut.png b/images/slova/donut.png new file mode 100644 index 0000000..f9dbc5f Binary files /dev/null and b/images/slova/donut.png differ diff --git a/images/slova/doska.png b/images/slova/doska.png new file mode 100644 index 0000000..4db345e Binary files /dev/null and b/images/slova/doska.png differ diff --git a/images/slova/drak.png b/images/slova/drak.png new file mode 100644 index 0000000..42065d6 Binary files /dev/null and b/images/slova/drak.png differ diff --git a/images/slova/drevo.png b/images/slova/drevo.png new file mode 100644 index 0000000..c7baedd Binary files /dev/null and b/images/slova/drevo.png differ diff --git a/images/slova/duch.png b/images/slova/duch.png new file mode 100644 index 0000000..2788fa7 Binary files /dev/null and b/images/slova/duch.png differ diff --git a/images/slova/dudlík.png b/images/slova/dudlík.png new file mode 100644 index 0000000..fbe399a Binary files /dev/null and b/images/slova/dudlík.png differ diff --git a/images/slova/dukát.png b/images/slova/dukát.png new file mode 100644 index 0000000..41be88c Binary files /dev/null and b/images/slova/dukát.png differ diff --git a/images/slova/dvere.png b/images/slova/dvere.png new file mode 100644 index 0000000..5ae3e9b Binary files /dev/null and b/images/slova/dvere.png differ diff --git a/images/slova/dym.png b/images/slova/dym.png new file mode 100644 index 0000000..ac6fa59 Binary files /dev/null and b/images/slova/dym.png differ diff --git a/images/slova/dynamit.png b/images/slova/dynamit.png new file mode 100644 index 0000000..15a8555 Binary files /dev/null and b/images/slova/dynamit.png differ diff --git a/images/slova/dyňa.png b/images/slova/dyňa.png new file mode 100644 index 0000000..29abd11 Binary files /dev/null and b/images/slova/dyňa.png differ diff --git a/images/slova/dáma.png b/images/slova/dáma.png new file mode 100644 index 0000000..9bf1879 Binary files /dev/null and b/images/slova/dáma.png differ diff --git a/images/slova/dáždnik.png b/images/slova/dáždnik.png new file mode 100644 index 0000000..7193e42 Binary files /dev/null and b/images/slova/dáždnik.png differ diff --git a/images/slova/dážď.png b/images/slova/dážď.png new file mode 100644 index 0000000..3282e69 Binary files /dev/null and b/images/slova/dážď.png differ diff --git a/images/slova/dúha.png b/images/slova/dúha.png new file mode 100644 index 0000000..33e42e2 Binary files /dev/null and b/images/slova/dúha.png differ diff --git a/images/slova/facka.png b/images/slova/facka.png new file mode 100644 index 0000000..8e0670a Binary files /dev/null and b/images/slova/facka.png differ diff --git a/images/slova/figa.png b/images/slova/figa.png new file mode 100644 index 0000000..3b4f9ec Binary files /dev/null and b/images/slova/figa.png differ diff --git a/images/slova/fľaša.png b/images/slova/fľaša.png new file mode 100644 index 0000000..0ea74d5 Binary files /dev/null and b/images/slova/fľaša.png differ diff --git a/images/slova/fľaša.webp b/images/slova/fľaša.webp new file mode 100644 index 0000000..a443148 Binary files /dev/null and b/images/slova/fľaša.webp differ diff --git a/images/slova/gajdy.png b/images/slova/gajdy.png new file mode 100644 index 0000000..7e864c1 Binary files /dev/null and b/images/slova/gajdy.png differ diff --git a/images/slova/gazda.png b/images/slova/gazda.png new file mode 100644 index 0000000..0cb3515 Binary files /dev/null and b/images/slova/gazda.png differ diff --git a/images/slova/gaštan.png b/images/slova/gaštan.png new file mode 100644 index 0000000..7a8319f Binary files /dev/null and b/images/slova/gaštan.png differ diff --git a/images/slova/gitara.png b/images/slova/gitara.png new file mode 100644 index 0000000..b1aae0b Binary files /dev/null and b/images/slova/gitara.png differ diff --git a/images/slova/glóbus.png b/images/slova/glóbus.png new file mode 100644 index 0000000..e26ce33 Binary files /dev/null and b/images/slova/glóbus.png differ diff --git a/images/slova/golf.png b/images/slova/golf.png new file mode 100644 index 0000000..7f1d270 Binary files /dev/null and b/images/slova/golf.png differ diff --git a/images/slova/gombík.png b/images/slova/gombík.png new file mode 100644 index 0000000..fe72c41 Binary files /dev/null and b/images/slova/gombík.png differ diff --git a/images/slova/gondola.png b/images/slova/gondola.png new file mode 100644 index 0000000..e7ec03b Binary files /dev/null and b/images/slova/gondola.png differ diff --git a/images/slova/gong.png b/images/slova/gong.png new file mode 100644 index 0000000..8cd95bf Binary files /dev/null and b/images/slova/gong.png differ diff --git a/images/slova/gorila.png b/images/slova/gorila.png new file mode 100644 index 0000000..c03028a Binary files /dev/null and b/images/slova/gorila.png differ diff --git a/images/slova/guláš.png b/images/slova/guláš.png new file mode 100644 index 0000000..5fb7b06 Binary files /dev/null and b/images/slova/guláš.png differ diff --git a/images/slova/guma.png b/images/slova/guma.png new file mode 100644 index 0000000..9b9bdd0 Binary files /dev/null and b/images/slova/guma.png differ diff --git a/images/slova/gumáky.png b/images/slova/gumáky.png new file mode 100644 index 0000000..3ca1f1d Binary files /dev/null and b/images/slova/gumáky.png differ diff --git a/images/slova/gunár.png b/images/slova/gunár.png new file mode 100644 index 0000000..04ee5d4 Binary files /dev/null and b/images/slova/gunár.png differ diff --git a/images/slova/guľa.png b/images/slova/guľa.png new file mode 100644 index 0000000..5895486 Binary files /dev/null and b/images/slova/guľa.png differ diff --git a/images/slova/guľáš.png b/images/slova/guľáš.png new file mode 100644 index 0000000..9e7e459 Binary files /dev/null and b/images/slova/guľáš.png differ diff --git a/images/slova/gól.png b/images/slova/gól.png new file mode 100644 index 0000000..d4252ea Binary files /dev/null and b/images/slova/gól.png differ diff --git a/images/slova/hokej.png b/images/slova/hokej.png new file mode 100644 index 0000000..4593d94 Binary files /dev/null and b/images/slova/hokej.png differ diff --git a/images/slova/hrebeň.png b/images/slova/hrebeň.png new file mode 100644 index 0000000..b6513f1 Binary files /dev/null and b/images/slova/hrebeň.png differ diff --git a/images/slova/hroch.png b/images/slova/hroch.png new file mode 100644 index 0000000..ea7e19b Binary files /dev/null and b/images/slova/hroch.png differ diff --git a/images/slova/hruď.png b/images/slova/hruď.png new file mode 100644 index 0000000..8027c1a Binary files /dev/null and b/images/slova/hruď.png differ diff --git a/images/slova/hus.png b/images/slova/hus.png new file mode 100644 index 0000000..add427c Binary files /dev/null and b/images/slova/hus.png differ diff --git a/images/slova/hák.png b/images/slova/hák.png new file mode 100644 index 0000000..46da191 Binary files /dev/null and b/images/slova/hák.png differ diff --git a/images/slova/jazdec.png b/images/slova/jazdec.png new file mode 100644 index 0000000..92b15fd Binary files /dev/null and b/images/slova/jazdec.png differ diff --git a/images/slova/jazyk.png b/images/slova/jazyk.png new file mode 100644 index 0000000..3c942b4 Binary files /dev/null and b/images/slova/jazyk.png differ diff --git a/images/slova/jeseň.png b/images/slova/jeseň.png new file mode 100644 index 0000000..a99d934 Binary files /dev/null and b/images/slova/jeseň.png differ diff --git a/images/slova/kabát.png b/images/slova/kabát.png new file mode 100644 index 0000000..422054c Binary files /dev/null and b/images/slova/kabát.png differ diff --git a/images/slova/kakao.png b/images/slova/kakao.png new file mode 100644 index 0000000..aea6544 Binary files /dev/null and b/images/slova/kakao.png differ diff --git a/images/slova/kaktus.png b/images/slova/kaktus.png new file mode 100644 index 0000000..e8db1a6 Binary files /dev/null and b/images/slova/kaktus.png differ diff --git a/images/slova/kapusta.png b/images/slova/kapusta.png new file mode 100644 index 0000000..d112e11 Binary files /dev/null and b/images/slova/kapusta.png differ diff --git a/images/slova/kačka.png b/images/slova/kačka.png new file mode 100644 index 0000000..79e4881 Binary files /dev/null and b/images/slova/kačka.png differ diff --git a/images/slova/kaša.png b/images/slova/kaša.png new file mode 100644 index 0000000..a058869 Binary files /dev/null and b/images/slova/kaša.png differ diff --git a/images/slova/kefa.png b/images/slova/kefa.png new file mode 100644 index 0000000..1860bb0 Binary files /dev/null and b/images/slova/kefa.png differ diff --git a/images/slova/keks.png b/images/slova/keks.png new file mode 100644 index 0000000..b817cc6 Binary files /dev/null and b/images/slova/keks.png differ diff --git a/images/slova/kengura.png b/images/slova/kengura.png new file mode 100644 index 0000000..a60064b Binary files /dev/null and b/images/slova/kengura.png differ diff --git a/images/slova/kilo.png b/images/slova/kilo.png new file mode 100644 index 0000000..018b316 Binary files /dev/null and b/images/slova/kilo.png differ diff --git a/images/slova/kniha.png b/images/slova/kniha.png new file mode 100644 index 0000000..eae275b Binary files /dev/null and b/images/slova/kniha.png differ diff --git a/images/slova/kohút.png b/images/slova/kohút.png new file mode 100644 index 0000000..ece5d50 Binary files /dev/null and b/images/slova/kohút.png differ diff --git a/images/slova/koleno.png b/images/slova/koleno.png new file mode 100644 index 0000000..89d7053 Binary files /dev/null and b/images/slova/koleno.png differ diff --git a/images/slova/koleso.png b/images/slova/koleso.png new file mode 100644 index 0000000..554f9ff Binary files /dev/null and b/images/slova/koleso.png differ diff --git a/images/slova/kolík.png b/images/slova/kolík.png new file mode 100644 index 0000000..6abf7bd Binary files /dev/null and b/images/slova/kolík.png differ diff --git a/images/slova/koník.png b/images/slova/koník.png new file mode 100644 index 0000000..aae2f0e Binary files /dev/null and b/images/slova/koník.png differ diff --git a/images/slova/kopa.png b/images/slova/kopa.png new file mode 100644 index 0000000..5a94646 Binary files /dev/null and b/images/slova/kopa.png differ diff --git a/images/slova/kosť.png b/images/slova/kosť.png new file mode 100644 index 0000000..18c6bcb Binary files /dev/null and b/images/slova/kosť.png differ diff --git a/images/slova/kotol.png b/images/slova/kotol.png new file mode 100644 index 0000000..caaf7a9 Binary files /dev/null and b/images/slova/kotol.png differ diff --git a/images/slova/koza.png b/images/slova/koza.png new file mode 100644 index 0000000..bb96864 Binary files /dev/null and b/images/slova/koza.png differ diff --git a/images/slova/kočík.png b/images/slova/kočík.png new file mode 100644 index 0000000..eb55da3 Binary files /dev/null and b/images/slova/kočík.png differ diff --git a/images/slova/košeľa.webp b/images/slova/košeľa.webp new file mode 100644 index 0000000..5c5e8f9 Binary files /dev/null and b/images/slova/košeľa.webp differ diff --git a/images/slova/košík.png b/images/slova/košík.png new file mode 100644 index 0000000..5f6b7f2 Binary files /dev/null and b/images/slova/košík.png differ diff --git a/images/slova/košík.webp b/images/slova/košík.webp new file mode 100644 index 0000000..51fe8d3 Binary files /dev/null and b/images/slova/košík.webp differ diff --git a/images/slova/koža.png b/images/slova/koža.png new file mode 100644 index 0000000..d463ce1 Binary files /dev/null and b/images/slova/koža.png differ diff --git a/images/slova/krava.png b/images/slova/krava.png new file mode 100644 index 0000000..cb3b9a5 Binary files /dev/null and b/images/slova/krava.png differ diff --git a/images/slova/krhla.png b/images/slova/krhla.png new file mode 100644 index 0000000..5df8434 Binary files /dev/null and b/images/slova/krhla.png differ diff --git a/images/slova/krokodíl.png b/images/slova/krokodíl.png new file mode 100644 index 0000000..a799e18 Binary files /dev/null and b/images/slova/krokodíl.png differ diff --git a/images/slova/krtko.png b/images/slova/krtko.png new file mode 100644 index 0000000..003373c Binary files /dev/null and b/images/slova/krtko.png differ diff --git a/images/slova/králik.png b/images/slova/králik.png new file mode 100644 index 0000000..52979b9 Binary files /dev/null and b/images/slova/králik.png differ diff --git a/images/slova/kuchyňa.png b/images/slova/kuchyňa.png new file mode 100644 index 0000000..f25b14f Binary files /dev/null and b/images/slova/kuchyňa.png differ diff --git a/images/slova/kukučka.png b/images/slova/kukučka.png new file mode 100644 index 0000000..4c1092e Binary files /dev/null and b/images/slova/kukučka.png differ diff --git a/images/slova/kuna.png b/images/slova/kuna.png new file mode 100644 index 0000000..33aa650 Binary files /dev/null and b/images/slova/kuna.png differ diff --git a/images/slova/kvet.png b/images/slova/kvet.png new file mode 100644 index 0000000..c8768bc Binary files /dev/null and b/images/slova/kvet.png differ diff --git a/images/slova/káva.png b/images/slova/káva.png new file mode 100644 index 0000000..e33f1a9 Binary files /dev/null and b/images/slova/káva.png differ diff --git a/images/slova/kôň.png b/images/slova/kôň.png new file mode 100644 index 0000000..aae2f0e Binary files /dev/null and b/images/slova/kôň.png differ diff --git a/images/slova/kôš.png b/images/slova/kôš.png new file mode 100644 index 0000000..a7a125f Binary files /dev/null and b/images/slova/kôš.png differ diff --git a/images/slova/kôš.webp b/images/slova/kôš.webp new file mode 100644 index 0000000..9b6131e Binary files /dev/null and b/images/slova/kôš.webp differ diff --git a/images/slova/kúpiť.png b/images/slova/kúpiť.png new file mode 100644 index 0000000..70b7700 Binary files /dev/null and b/images/slova/kúpiť.png differ diff --git a/images/slova/laborant.png b/images/slova/laborant.png new file mode 100644 index 0000000..ae903bb Binary files /dev/null and b/images/slova/laborant.png differ diff --git a/images/slova/laboratórium.png b/images/slova/laboratórium.png new file mode 100644 index 0000000..32262f6 Binary files /dev/null and b/images/slova/laboratórium.png differ diff --git a/images/slova/labuť.png b/images/slova/labuť.png new file mode 100644 index 0000000..8cad05e Binary files /dev/null and b/images/slova/labuť.png differ diff --git a/images/slova/lampa.png b/images/slova/lampa.png new file mode 100644 index 0000000..886a00c Binary files /dev/null and b/images/slova/lampa.png differ diff --git a/images/slova/lano.png b/images/slova/lano.png new file mode 100644 index 0000000..559a129 Binary files /dev/null and b/images/slova/lano.png differ diff --git a/images/slova/lavička.png b/images/slova/lavička.png new file mode 100644 index 0000000..bedf571 Binary files /dev/null and b/images/slova/lavička.png differ diff --git a/images/slova/lavína.png b/images/slova/lavína.png new file mode 100644 index 0000000..8fe678c Binary files /dev/null and b/images/slova/lavína.png differ diff --git a/images/slova/laň.png b/images/slova/laň.png new file mode 100644 index 0000000..8e20cf5 Binary files /dev/null and b/images/slova/laň.png differ diff --git a/images/slova/lego.png b/images/slova/lego.png new file mode 100644 index 0000000..c0f53d0 Binary files /dev/null and b/images/slova/lego.png differ diff --git a/images/slova/lektor.png b/images/slova/lektor.png new file mode 100644 index 0000000..8dfa569 Binary files /dev/null and b/images/slova/lektor.png differ diff --git a/images/slova/lektvar.png b/images/slova/lektvar.png new file mode 100644 index 0000000..71c002c Binary files /dev/null and b/images/slova/lektvar.png differ diff --git a/images/slova/lekár.png b/images/slova/lekár.png new file mode 100644 index 0000000..4d352b5 Binary files /dev/null and b/images/slova/lekár.png differ diff --git a/images/slova/lekáreň.png b/images/slova/lekáreň.png new file mode 100644 index 0000000..70f432e Binary files /dev/null and b/images/slova/lekáreň.png differ diff --git a/images/slova/leopard.png b/images/slova/leopard.png new file mode 100644 index 0000000..72408af Binary files /dev/null and b/images/slova/leopard.png differ diff --git a/images/slova/leporelo.png b/images/slova/leporelo.png new file mode 100644 index 0000000..f5b97be Binary files /dev/null and b/images/slova/leporelo.png differ diff --git a/images/slova/les.png b/images/slova/les.png new file mode 100644 index 0000000..e70efcd Binary files /dev/null and b/images/slova/les.png differ diff --git a/images/slova/letisko.png b/images/slova/letisko.png new file mode 100644 index 0000000..e8a6fd8 Binary files /dev/null and b/images/slova/letisko.png differ diff --git a/images/slova/lev.png b/images/slova/lev.png new file mode 100644 index 0000000..61e0b48 Binary files /dev/null and b/images/slova/lev.png differ diff --git a/images/slova/levanduľa.png b/images/slova/levanduľa.png new file mode 100644 index 0000000..bd35092 Binary files /dev/null and b/images/slova/levanduľa.png differ diff --git a/images/slova/leňochod.png b/images/slova/leňochod.png new file mode 100644 index 0000000..2a236c2 Binary files /dev/null and b/images/slova/leňochod.png differ diff --git a/images/slova/ležať.png b/images/slova/ležať.png new file mode 100644 index 0000000..7dbdd64 Binary files /dev/null and b/images/slova/ležať.png differ diff --git a/images/slova/lietadlo.png b/images/slova/lietadlo.png new file mode 100644 index 0000000..ee5909a Binary files /dev/null and b/images/slova/lietadlo.png differ diff --git a/images/slova/lievik.png b/images/slova/lievik.png new file mode 100644 index 0000000..ccfb709 Binary files /dev/null and b/images/slova/lievik.png differ diff --git a/images/slova/liga.png b/images/slova/liga.png new file mode 100644 index 0000000..1f7c979 Binary files /dev/null and b/images/slova/liga.png differ diff --git a/images/slova/list.png b/images/slova/list.png new file mode 100644 index 0000000..a0baa29 Binary files /dev/null and b/images/slova/list.png differ diff --git a/images/slova/listnatý.png b/images/slova/listnatý.png new file mode 100644 index 0000000..0d01cb7 Binary files /dev/null and b/images/slova/listnatý.png differ diff --git a/images/slova/liter.png b/images/slova/liter.png new file mode 100644 index 0000000..675c6ea Binary files /dev/null and b/images/slova/liter.png differ diff --git a/images/slova/lodička.png b/images/slova/lodička.png new file mode 100644 index 0000000..51b0290 Binary files /dev/null and b/images/slova/lodička.png differ diff --git a/images/slova/lopta.png b/images/slova/lopta.png new file mode 100644 index 0000000..d87f80e Binary files /dev/null and b/images/slova/lopta.png differ diff --git a/images/slova/lopúch.png b/images/slova/lopúch.png new file mode 100644 index 0000000..e96058d Binary files /dev/null and b/images/slova/lopúch.png differ diff --git a/images/slova/loď.png b/images/slova/loď.png new file mode 100644 index 0000000..c405452 Binary files /dev/null and b/images/slova/loď.png differ diff --git a/images/slova/loďka.png b/images/slova/loďka.png new file mode 100644 index 0000000..db5bb6a Binary files /dev/null and b/images/slova/loďka.png differ diff --git a/images/slova/lupa.png b/images/slova/lupa.png new file mode 100644 index 0000000..1e22c70 Binary files /dev/null and b/images/slova/lupa.png differ diff --git a/images/slova/lyže.png b/images/slova/lyže.png new file mode 100644 index 0000000..ee49be3 Binary files /dev/null and b/images/slova/lyže.png differ diff --git a/images/slova/lyžiar.png b/images/slova/lyžiar.png new file mode 100644 index 0000000..5ad3fb2 Binary files /dev/null and b/images/slova/lyžiar.png differ diff --git a/images/slova/lyžica.png b/images/slova/lyžica.png new file mode 100644 index 0000000..86dda62 Binary files /dev/null and b/images/slova/lyžica.png differ diff --git a/images/slova/lízatko.png b/images/slova/lízatko.png new file mode 100644 index 0000000..3c62a06 Binary files /dev/null and b/images/slova/lízatko.png differ diff --git a/images/slova/líška.png b/images/slova/líška.png new file mode 100644 index 0000000..c153c34 Binary files /dev/null and b/images/slova/líška.png differ diff --git a/images/slova/líška.webp b/images/slova/líška.webp new file mode 100644 index 0000000..3b8529c Binary files /dev/null and b/images/slova/líška.webp differ diff --git a/images/slova/lúka.png b/images/slova/lúka.png new file mode 100644 index 0000000..522becc Binary files /dev/null and b/images/slova/lúka.png differ diff --git a/images/slova/lúč.png b/images/slova/lúč.png new file mode 100644 index 0000000..b8d0ea9 Binary files /dev/null and b/images/slova/lúč.png differ diff --git a/images/slova/lúčny.png b/images/slova/lúčny.png new file mode 100644 index 0000000..da6d81b Binary files /dev/null and b/images/slova/lúčny.png differ diff --git a/images/slova/maco.png b/images/slova/maco.png new file mode 100644 index 0000000..b8e1489 Binary files /dev/null and b/images/slova/maco.png differ diff --git a/images/slova/magnet.png b/images/slova/magnet.png new file mode 100644 index 0000000..77a02f2 Binary files /dev/null and b/images/slova/magnet.png differ diff --git a/images/slova/masť.png b/images/slova/masť.png new file mode 100644 index 0000000..2300da9 Binary files /dev/null and b/images/slova/masť.png differ diff --git a/images/slova/mašľa.png b/images/slova/mašľa.png new file mode 100644 index 0000000..2ba7445 Binary files /dev/null and b/images/slova/mašľa.png differ diff --git a/images/slova/medveď.png b/images/slova/medveď.png new file mode 100644 index 0000000..4e3eda9 Binary files /dev/null and b/images/slova/medveď.png differ diff --git a/images/slova/menu.png b/images/slova/menu.png new file mode 100644 index 0000000..459f55b Binary files /dev/null and b/images/slova/menu.png differ diff --git a/images/slova/meď.png b/images/slova/meď.png new file mode 100644 index 0000000..002bc0b Binary files /dev/null and b/images/slova/meď.png differ diff --git a/images/slova/mikuláš.png b/images/slova/mikuláš.png new file mode 100644 index 0000000..f9c74ad Binary files /dev/null and b/images/slova/mikuláš.png differ diff --git a/images/slova/mravec.png b/images/slova/mravec.png new file mode 100644 index 0000000..6090124 Binary files /dev/null and b/images/slova/mravec.png differ diff --git a/images/slova/mušľa.webp b/images/slova/mušľa.webp new file mode 100644 index 0000000..9e40c21 Binary files /dev/null and b/images/slova/mušľa.webp differ diff --git a/images/slova/myš.png b/images/slova/myš.png new file mode 100644 index 0000000..c261ff1 Binary files /dev/null and b/images/slova/myš.png differ diff --git a/images/slova/myš.webp b/images/slova/myš.webp new file mode 100644 index 0000000..c55fd7d Binary files /dev/null and b/images/slova/myš.webp differ diff --git a/images/slova/múka.png b/images/slova/múka.png new file mode 100644 index 0000000..6de8d38 Binary files /dev/null and b/images/slova/múka.png differ diff --git a/images/slova/nafta.png b/images/slova/nafta.png new file mode 100644 index 0000000..e10ed20 Binary files /dev/null and b/images/slova/nafta.png differ diff --git a/images/slova/nanuk.png b/images/slova/nanuk.png new file mode 100644 index 0000000..1666dca Binary files /dev/null and b/images/slova/nanuk.png differ diff --git a/images/slova/netvor.png b/images/slova/netvor.png new file mode 100644 index 0000000..bbea79a Binary files /dev/null and b/images/slova/netvor.png differ diff --git a/images/slova/neón.png b/images/slova/neón.png new file mode 100644 index 0000000..15242ce Binary files /dev/null and b/images/slova/neón.png differ diff --git a/images/slova/nikel.png b/images/slova/nikel.png new file mode 100644 index 0000000..ff98bb6 Binary files /dev/null and b/images/slova/nikel.png differ diff --git a/images/slova/niť.png b/images/slova/niť.png new file mode 100644 index 0000000..cf3539e Binary files /dev/null and b/images/slova/niť.png differ diff --git a/images/slova/noc.png b/images/slova/noc.png new file mode 100644 index 0000000..19b100b Binary files /dev/null and b/images/slova/noc.png differ diff --git a/images/slova/noha.png b/images/slova/noha.png new file mode 100644 index 0000000..5507c50 Binary files /dev/null and b/images/slova/noha.png differ diff --git a/images/slova/nos.png b/images/slova/nos.png new file mode 100644 index 0000000..7a83697 Binary files /dev/null and b/images/slova/nos.png differ diff --git a/images/slova/noviny.png b/images/slova/noviny.png new file mode 100644 index 0000000..b87d928 Binary files /dev/null and b/images/slova/noviny.png differ diff --git a/images/slova/nožík.png b/images/slova/nožík.png new file mode 100644 index 0000000..24e0a32 Binary files /dev/null and b/images/slova/nožík.png differ diff --git a/images/slova/nuda.png b/images/slova/nuda.png new file mode 100644 index 0000000..64a0943 Binary files /dev/null and b/images/slova/nuda.png differ diff --git a/images/slova/nula.png b/images/slova/nula.png new file mode 100644 index 0000000..fc870f6 Binary files /dev/null and b/images/slova/nula.png differ diff --git a/images/slova/nábytok.png b/images/slova/nábytok.png new file mode 100644 index 0000000..3b437ab Binary files /dev/null and b/images/slova/nábytok.png differ diff --git a/images/slova/nádoba.png b/images/slova/nádoba.png new file mode 100644 index 0000000..f929c8a Binary files /dev/null and b/images/slova/nádoba.png differ diff --git a/images/slova/nádrž.png b/images/slova/nádrž.png new file mode 100644 index 0000000..c1bfb02 Binary files /dev/null and b/images/slova/nádrž.png differ diff --git a/images/slova/nákup.png b/images/slova/nákup.png new file mode 100644 index 0000000..ca57421 Binary files /dev/null and b/images/slova/nákup.png differ diff --git a/images/slova/nálepka.png b/images/slova/nálepka.png new file mode 100644 index 0000000..a2df584 Binary files /dev/null and b/images/slova/nálepka.png differ diff --git a/images/slova/nápis.png b/images/slova/nápis.png new file mode 100644 index 0000000..4a6ca34 Binary files /dev/null and b/images/slova/nápis.png differ diff --git a/images/slova/nápoj.png b/images/slova/nápoj.png new file mode 100644 index 0000000..0785bda Binary files /dev/null and b/images/slova/nápoj.png differ diff --git a/images/slova/náradie.png b/images/slova/náradie.png new file mode 100644 index 0000000..7949ced Binary files /dev/null and b/images/slova/náradie.png differ diff --git a/images/slova/nástroj.png b/images/slova/nástroj.png new file mode 100644 index 0000000..51a6e77 Binary files /dev/null and b/images/slova/nástroj.png differ diff --git a/images/slova/oko.png b/images/slova/oko.png new file mode 100644 index 0000000..c89ec59 Binary files /dev/null and b/images/slova/oko.png differ diff --git a/images/slova/opica.png b/images/slova/opica.png new file mode 100644 index 0000000..c4cec6f Binary files /dev/null and b/images/slova/opica.png differ diff --git a/images/slova/orgován.png b/images/slova/orgován.png new file mode 100644 index 0000000..3dd104a Binary files /dev/null and b/images/slova/orgován.png differ diff --git a/images/slova/ortuť.png b/images/slova/ortuť.png new file mode 100644 index 0000000..fbd0a77 Binary files /dev/null and b/images/slova/ortuť.png differ diff --git a/images/slova/osuška.png b/images/slova/osuška.png new file mode 100644 index 0000000..a8d5188 Binary files /dev/null and b/images/slova/osuška.png differ diff --git a/images/slova/palec.png b/images/slova/palec.png new file mode 100644 index 0000000..f218dcc Binary files /dev/null and b/images/slova/palec.png differ diff --git a/images/slova/pamäť.png b/images/slova/pamäť.png new file mode 100644 index 0000000..b807480 Binary files /dev/null and b/images/slova/pamäť.png differ diff --git a/images/slova/pec.png b/images/slova/pec.png new file mode 100644 index 0000000..71e9edb Binary files /dev/null and b/images/slova/pec.png differ diff --git a/images/slova/pero.png b/images/slova/pero.png new file mode 100644 index 0000000..32ebc6a Binary files /dev/null and b/images/slova/pero.png differ diff --git a/images/slova/peň.png b/images/slova/peň.png new file mode 100644 index 0000000..506072d Binary files /dev/null and b/images/slova/peň.png differ diff --git a/images/slova/pištoľ.png b/images/slova/pištoľ.png new file mode 100644 index 0000000..53805d6 Binary files /dev/null and b/images/slova/pištoľ.png differ diff --git a/images/slova/pleť.png b/images/slova/pleť.png new file mode 100644 index 0000000..2af038a Binary files /dev/null and b/images/slova/pleť.png differ diff --git a/images/slova/polica.png b/images/slova/polica.png new file mode 100644 index 0000000..584b031 Binary files /dev/null and b/images/slova/polica.png differ diff --git a/images/slova/povesť.png b/images/slova/povesť.png new file mode 100644 index 0000000..77840d8 Binary files /dev/null and b/images/slova/povesť.png differ diff --git a/images/slova/prak.png b/images/slova/prak.png new file mode 100644 index 0000000..4bf0ebe Binary files /dev/null and b/images/slova/prak.png differ diff --git a/images/slova/pravda.png b/images/slova/pravda.png new file mode 100644 index 0000000..07e4dc0 Binary files /dev/null and b/images/slova/pravda.png differ diff --git a/images/slova/princezná.png b/images/slova/princezná.png new file mode 100644 index 0000000..9e31282 Binary files /dev/null and b/images/slova/princezná.png differ diff --git a/images/slova/prsteň.png b/images/slova/prsteň.png new file mode 100644 index 0000000..29beac0 Binary files /dev/null and b/images/slova/prsteň.png differ diff --git a/images/slova/práčka.png b/images/slova/práčka.png new file mode 100644 index 0000000..9ce4548 Binary files /dev/null and b/images/slova/práčka.png differ diff --git a/images/slova/puk.png b/images/slova/puk.png new file mode 100644 index 0000000..94b8265 Binary files /dev/null and b/images/slova/puk.png differ diff --git a/images/slova/pyžamo.png b/images/slova/pyžamo.png new file mode 100644 index 0000000..7294960 Binary files /dev/null and b/images/slova/pyžamo.png differ diff --git a/images/slova/párik.png b/images/slova/párik.png new file mode 100644 index 0000000..88d57ec Binary files /dev/null and b/images/slova/párik.png differ diff --git a/images/slova/päsť.png b/images/slova/päsť.png new file mode 100644 index 0000000..ea3348d Binary files /dev/null and b/images/slova/päsť.png differ diff --git a/images/slova/pílka.png b/images/slova/pílka.png new file mode 100644 index 0000000..6dd57a6 Binary files /dev/null and b/images/slova/pílka.png differ diff --git a/images/slova/púšť.png b/images/slova/púšť.png new file mode 100644 index 0000000..d02ed83 Binary files /dev/null and b/images/slova/púšť.png differ diff --git a/images/slova/rak.png b/images/slova/rak.png new file mode 100644 index 0000000..b272dbf Binary files /dev/null and b/images/slova/rak.png differ diff --git a/images/slova/rakva.png b/images/slova/rakva.png new file mode 100644 index 0000000..563a5fa Binary files /dev/null and b/images/slova/rakva.png differ diff --git a/images/slova/remeň.png b/images/slova/remeň.png new file mode 100644 index 0000000..bfdee08 Binary files /dev/null and b/images/slova/remeň.png differ diff --git a/images/slova/reďkovka.png b/images/slova/reďkovka.png new file mode 100644 index 0000000..05c528c Binary files /dev/null and b/images/slova/reďkovka.png differ diff --git a/images/slova/rocket.png b/images/slova/rocket.png new file mode 100644 index 0000000..f7a5d74 Binary files /dev/null and b/images/slova/rocket.png differ diff --git a/images/slova/roh.png b/images/slova/roh.png new file mode 100644 index 0000000..2c2a6f1 Binary files /dev/null and b/images/slova/roh.png differ diff --git a/images/slova/rok.png b/images/slova/rok.png new file mode 100644 index 0000000..6d8aa20 Binary files /dev/null and b/images/slova/rok.png differ diff --git a/images/slova/rosa.png b/images/slova/rosa.png new file mode 100644 index 0000000..1d4f428 Binary files /dev/null and b/images/slova/rosa.png differ diff --git a/images/slova/ruka.png b/images/slova/ruka.png new file mode 100644 index 0000000..5c651f0 Binary files /dev/null and b/images/slova/ruka.png differ diff --git a/images/slova/ruža.png b/images/slova/ruža.png new file mode 100644 index 0000000..98fefdd Binary files /dev/null and b/images/slova/ruža.png differ diff --git a/images/slova/ryba.png b/images/slova/ryba.png new file mode 100644 index 0000000..f94cc55 Binary files /dev/null and b/images/slova/ryba.png differ diff --git a/images/slova/rybár.png b/images/slova/rybár.png new file mode 100644 index 0000000..709f272 Binary files /dev/null and b/images/slova/rybár.png differ diff --git a/images/slova/rád.png b/images/slova/rád.png new file mode 100644 index 0000000..7d10a6d Binary files /dev/null and b/images/slova/rád.png differ diff --git a/images/slova/rádio.png b/images/slova/rádio.png new file mode 100644 index 0000000..3f92d72 Binary files /dev/null and b/images/slova/rádio.png differ diff --git a/images/slova/rámus.png b/images/slova/rámus.png new file mode 100644 index 0000000..ce19f70 Binary files /dev/null and b/images/slova/rámus.png differ diff --git a/images/slova/ráno.png b/images/slova/ráno.png new file mode 100644 index 0000000..b75cae1 Binary files /dev/null and b/images/slova/ráno.png differ diff --git a/images/slova/rýchly.png b/images/slova/rýchly.png new file mode 100644 index 0000000..f33d8f5 Binary files /dev/null and b/images/slova/rýchly.png differ diff --git a/images/slova/sen.png b/images/slova/sen.png new file mode 100644 index 0000000..44ee9b7 Binary files /dev/null and b/images/slova/sen.png differ diff --git a/images/slova/seno.png b/images/slova/seno.png new file mode 100644 index 0000000..9419c0f Binary files /dev/null and b/images/slova/seno.png differ diff --git a/images/slova/sestra.png b/images/slova/sestra.png new file mode 100644 index 0000000..2b03102 Binary files /dev/null and b/images/slova/sestra.png differ diff --git a/images/slova/sieť.png b/images/slova/sieť.png new file mode 100644 index 0000000..c6a706d Binary files /dev/null and b/images/slova/sieť.png differ diff --git a/images/slova/sila.png b/images/slova/sila.png new file mode 100644 index 0000000..f2948d7 Binary files /dev/null and b/images/slova/sila.png differ diff --git a/images/slova/silák.png b/images/slova/silák.png new file mode 100644 index 0000000..505058b Binary files /dev/null and b/images/slova/silák.png differ diff --git a/images/slova/siréna.png b/images/slova/siréna.png new file mode 100644 index 0000000..2a61a95 Binary files /dev/null and b/images/slova/siréna.png differ diff --git a/images/slova/sitko.png b/images/slova/sitko.png new file mode 100644 index 0000000..8e41b4f Binary files /dev/null and b/images/slova/sitko.png differ diff --git a/images/slova/skala.png b/images/slova/skala.png new file mode 100644 index 0000000..d0bd892 Binary files /dev/null and b/images/slova/skala.png differ diff --git a/images/slova/sklo.png b/images/slova/sklo.png new file mode 100644 index 0000000..428b19c Binary files /dev/null and b/images/slova/sklo.png differ diff --git a/images/slova/skokan.png b/images/slova/skokan.png new file mode 100644 index 0000000..da22cc2 Binary files /dev/null and b/images/slova/skokan.png differ diff --git a/images/slova/skriňa.png b/images/slova/skriňa.png new file mode 100644 index 0000000..3cf60e3 Binary files /dev/null and b/images/slova/skriňa.png differ diff --git a/images/slova/sladkosť.png b/images/slova/sladkosť.png new file mode 100644 index 0000000..481b720 Binary files /dev/null and b/images/slova/sladkosť.png differ diff --git a/images/slova/sladký.png b/images/slova/sladký.png new file mode 100644 index 0000000..3ab4358 Binary files /dev/null and b/images/slova/sladký.png differ diff --git a/images/slova/slama.png b/images/slova/slama.png new file mode 100644 index 0000000..97cb801 Binary files /dev/null and b/images/slova/slama.png differ diff --git a/images/slova/slanina.png b/images/slova/slanina.png new file mode 100644 index 0000000..9c6b42a Binary files /dev/null and b/images/slova/slanina.png differ diff --git a/images/slova/sliepka.png b/images/slova/sliepka.png new file mode 100644 index 0000000..9fdd17c Binary files /dev/null and b/images/slova/sliepka.png differ diff --git a/images/slova/slnko.png b/images/slova/slnko.png new file mode 100644 index 0000000..d3e434c Binary files /dev/null and b/images/slova/slnko.png differ diff --git a/images/slova/slza.png b/images/slova/slza.png new file mode 100644 index 0000000..58330eb Binary files /dev/null and b/images/slova/slza.png differ diff --git a/images/slova/smiech.png b/images/slova/smiech.png new file mode 100644 index 0000000..93bc5d0 Binary files /dev/null and b/images/slova/smiech.png differ diff --git a/images/slova/sneh.png b/images/slova/sneh.png new file mode 100644 index 0000000..2b8ba36 Binary files /dev/null and b/images/slova/sneh.png differ diff --git a/images/slova/sob.png b/images/slova/sob.png new file mode 100644 index 0000000..7e1fa4b Binary files /dev/null and b/images/slova/sob.png differ diff --git a/images/slova/socha.png b/images/slova/socha.png new file mode 100644 index 0000000..1e10434 Binary files /dev/null and b/images/slova/socha.png differ diff --git a/images/slova/sova.png b/images/slova/sova.png new file mode 100644 index 0000000..6afdabb Binary files /dev/null and b/images/slova/sova.png differ diff --git a/images/slova/soľ.png b/images/slova/soľ.png new file mode 100644 index 0000000..7556365 Binary files /dev/null and b/images/slova/soľ.png differ diff --git a/images/slova/soška.png b/images/slova/soška.png new file mode 100644 index 0000000..8cb56d9 Binary files /dev/null and b/images/slova/soška.png differ diff --git a/images/slova/srdce.png b/images/slova/srdce.png new file mode 100644 index 0000000..d63f497 Binary files /dev/null and b/images/slova/srdce.png differ diff --git a/images/slova/srsť.png b/images/slova/srsť.png new file mode 100644 index 0000000..265024e Binary files /dev/null and b/images/slova/srsť.png differ diff --git a/images/slova/sršeň.png b/images/slova/sršeň.png new file mode 100644 index 0000000..2686a3d Binary files /dev/null and b/images/slova/sršeň.png differ diff --git a/images/slova/stavba.png b/images/slova/stavba.png new file mode 100644 index 0000000..f2a8d65 Binary files /dev/null and b/images/slova/stavba.png differ diff --git a/images/slova/stolička.png b/images/slova/stolička.png new file mode 100644 index 0000000..7ea0afe Binary files /dev/null and b/images/slova/stolička.png differ diff --git a/images/slova/strom.png b/images/slova/strom.png new file mode 100644 index 0000000..53c184c Binary files /dev/null and b/images/slova/strom.png differ diff --git a/images/slova/stôl.png b/images/slova/stôl.png new file mode 100644 index 0000000..da80cf9 Binary files /dev/null and b/images/slova/stôl.png differ diff --git a/images/slova/sused.png b/images/slova/sused.png new file mode 100644 index 0000000..93701b4 Binary files /dev/null and b/images/slova/sused.png differ diff --git a/images/slova/svetlo.png b/images/slova/svetlo.png new file mode 100644 index 0000000..ca006bb Binary files /dev/null and b/images/slova/svetlo.png differ diff --git a/images/slova/sviečka.png b/images/slova/sviečka.png new file mode 100644 index 0000000..d743189 Binary files /dev/null and b/images/slova/sviečka.png differ diff --git a/images/slova/syr.png b/images/slova/syr.png new file mode 100644 index 0000000..71e9da6 Binary files /dev/null and b/images/slova/syr.png differ diff --git a/images/slova/sídlo.png b/images/slova/sídlo.png new file mode 100644 index 0000000..3239f90 Binary files /dev/null and b/images/slova/sídlo.png differ diff --git a/images/slova/súčasť.png b/images/slova/súčasť.png new file mode 100644 index 0000000..77c1320 Binary files /dev/null and b/images/slova/súčasť.png differ diff --git a/images/slova/súťaž.png b/images/slova/súťaž.png new file mode 100644 index 0000000..f19d1e2 Binary files /dev/null and b/images/slova/súťaž.png differ diff --git a/images/slova/tablet.png b/images/slova/tablet.png new file mode 100644 index 0000000..cc790ad Binary files /dev/null and b/images/slova/tablet.png differ diff --git a/images/slova/tanec.png b/images/slova/tanec.png new file mode 100644 index 0000000..fa14905 Binary files /dev/null and b/images/slova/tanec.png differ diff --git a/images/slova/tanier.png b/images/slova/tanier.png new file mode 100644 index 0000000..365cf5e Binary files /dev/null and b/images/slova/tanier.png differ diff --git a/images/slova/tank.png b/images/slova/tank.png new file mode 100644 index 0000000..e79edf9 Binary files /dev/null and b/images/slova/tank.png differ diff --git a/images/slova/tato.png b/images/slova/tato.png new file mode 100644 index 0000000..1b55327 Binary files /dev/null and b/images/slova/tato.png differ diff --git a/images/slova/taška.png b/images/slova/taška.png new file mode 100644 index 0000000..4371042 Binary files /dev/null and b/images/slova/taška.png differ diff --git a/images/slova/telefón.png b/images/slova/telefón.png new file mode 100644 index 0000000..9836f36 Binary files /dev/null and b/images/slova/telefón.png differ diff --git a/images/slova/teplota.png b/images/slova/teplota.png new file mode 100644 index 0000000..f9bed9a Binary files /dev/null and b/images/slova/teplota.png differ diff --git a/images/slova/tepláky.png b/images/slova/tepláky.png new file mode 100644 index 0000000..0040cba Binary files /dev/null and b/images/slova/tepláky.png differ diff --git a/images/slova/tiger.png b/images/slova/tiger.png new file mode 100644 index 0000000..1b156d6 Binary files /dev/null and b/images/slova/tiger.png differ diff --git a/images/slova/toaleta.png b/images/slova/toaleta.png new file mode 100644 index 0000000..718b69e Binary files /dev/null and b/images/slova/toaleta.png differ diff --git a/images/slova/tona.png b/images/slova/tona.png new file mode 100644 index 0000000..b16108b Binary files /dev/null and b/images/slova/tona.png differ diff --git a/images/slova/top.png b/images/slova/top.png new file mode 100644 index 0000000..c4fcf6b Binary files /dev/null and b/images/slova/top.png differ diff --git a/images/slova/torta.png b/images/slova/torta.png new file mode 100644 index 0000000..3021a4d Binary files /dev/null and b/images/slova/torta.png differ diff --git a/images/slova/traktor.png b/images/slova/traktor.png new file mode 100644 index 0000000..7e98af2 Binary files /dev/null and b/images/slova/traktor.png differ diff --git a/images/slova/tričko.png b/images/slova/tričko.png new file mode 100644 index 0000000..ff06c62 Binary files /dev/null and b/images/slova/tričko.png differ diff --git a/images/slova/tráva.png b/images/slova/tráva.png new file mode 100644 index 0000000..89bad50 Binary files /dev/null and b/images/slova/tráva.png differ diff --git a/images/slova/trúbka.png b/images/slova/trúbka.png new file mode 100644 index 0000000..86066ca Binary files /dev/null and b/images/slova/trúbka.png differ diff --git a/images/slova/tuha.png b/images/slova/tuha.png new file mode 100644 index 0000000..2849a2e Binary files /dev/null and b/images/slova/tuha.png differ diff --git a/images/slova/tuleň.png b/images/slova/tuleň.png new file mode 100644 index 0000000..4d0d673 Binary files /dev/null and b/images/slova/tuleň.png differ diff --git a/images/slova/tulipán.png b/images/slova/tulipán.png new file mode 100644 index 0000000..3251ccf Binary files /dev/null and b/images/slova/tulipán.png differ diff --git a/images/slova/tunel.png b/images/slova/tunel.png new file mode 100644 index 0000000..131e65e Binary files /dev/null and b/images/slova/tunel.png differ diff --git a/images/slova/tágo.png b/images/slova/tágo.png new file mode 100644 index 0000000..798d29e Binary files /dev/null and b/images/slova/tágo.png differ diff --git a/images/slova/tón.png b/images/slova/tón.png new file mode 100644 index 0000000..8540ff3 Binary files /dev/null and b/images/slova/tón.png differ diff --git a/images/slova/uši.png b/images/slova/uši.png new file mode 100644 index 0000000..ac6e6b7 Binary files /dev/null and b/images/slova/uši.png differ diff --git a/images/slova/vagón.png b/images/slova/vagón.png new file mode 100644 index 0000000..eca1ba7 Binary files /dev/null and b/images/slova/vagón.png differ diff --git a/images/slova/valec.png b/images/slova/valec.png new file mode 100644 index 0000000..56aeeba Binary files /dev/null and b/images/slova/valec.png differ diff --git a/images/slova/vaňa.png b/images/slova/vaňa.png new file mode 100644 index 0000000..21f8024 Binary files /dev/null and b/images/slova/vaňa.png differ diff --git a/images/slova/vešiak.png b/images/slova/vešiak.png new file mode 100644 index 0000000..ce62d8c Binary files /dev/null and b/images/slova/vešiak.png differ diff --git a/images/slova/vina.png b/images/slova/vina.png new file mode 100644 index 0000000..a6f25bc Binary files /dev/null and b/images/slova/vina.png differ diff --git a/images/slova/vlasť.png b/images/slova/vlasť.png new file mode 100644 index 0000000..c09a826 Binary files /dev/null and b/images/slova/vlasť.png differ diff --git a/images/slova/vozík.png b/images/slova/vozík.png new file mode 100644 index 0000000..7bf8634 Binary files /dev/null and b/images/slova/vozík.png differ diff --git a/images/slova/vyhňa.png b/images/slova/vyhňa.png new file mode 100644 index 0000000..b0031c1 Binary files /dev/null and b/images/slova/vyhňa.png differ diff --git a/images/slova/vysávač.png b/images/slova/vysávač.png new file mode 100644 index 0000000..09a0e64 Binary files /dev/null and b/images/slova/vysávač.png differ diff --git a/images/slova/vzducholoď.png b/images/slova/vzducholoď.png new file mode 100644 index 0000000..4978ad4 Binary files /dev/null and b/images/slova/vzducholoď.png differ diff --git a/images/slova/víno.png b/images/slova/víno.png new file mode 100644 index 0000000..7dd82ed Binary files /dev/null and b/images/slova/víno.png differ diff --git a/images/slova/včela.png b/images/slova/včela.png new file mode 100644 index 0000000..e2cefec Binary files /dev/null and b/images/slova/včela.png differ diff --git a/images/slova/zajac.png b/images/slova/zajac.png new file mode 100644 index 0000000..52979b9 Binary files /dev/null and b/images/slova/zajac.png differ diff --git a/images/slova/zajtra.png b/images/slova/zajtra.png new file mode 100644 index 0000000..afa7e72 Binary files /dev/null and b/images/slova/zajtra.png differ diff --git a/images/slova/zebra.png b/images/slova/zebra.png new file mode 100644 index 0000000..6601d4c Binary files /dev/null and b/images/slova/zebra.png differ diff --git a/images/slova/zelenina.png b/images/slova/zelenina.png new file mode 100644 index 0000000..db44cd6 Binary files /dev/null and b/images/slova/zelenina.png differ diff --git a/images/slova/zelené.png b/images/slova/zelené.png new file mode 100644 index 0000000..c9fb968 Binary files /dev/null and b/images/slova/zelené.png differ diff --git a/images/slova/zemiak.png b/images/slova/zemiak.png new file mode 100644 index 0000000..a24e4d1 Binary files /dev/null and b/images/slova/zemiak.png differ diff --git a/images/slova/zima.png b/images/slova/zima.png new file mode 100644 index 0000000..2229d43 Binary files /dev/null and b/images/slova/zima.png differ diff --git a/images/slova/zlato.png b/images/slova/zlato.png new file mode 100644 index 0000000..d95357f Binary files /dev/null and b/images/slova/zlato.png differ diff --git a/images/slova/zlatý.png b/images/slova/zlatý.png new file mode 100644 index 0000000..d95357f Binary files /dev/null and b/images/slova/zlatý.png differ diff --git a/images/slova/zmrzlina.png b/images/slova/zmrzlina.png new file mode 100644 index 0000000..c594f23 Binary files /dev/null and b/images/slova/zmrzlina.png differ diff --git a/images/slova/značka.png b/images/slova/značka.png new file mode 100644 index 0000000..39b67f5 Binary files /dev/null and b/images/slova/značka.png differ diff --git a/images/slova/zošit.webp b/images/slova/zošit.webp new file mode 100644 index 0000000..6098a79 Binary files /dev/null and b/images/slova/zošit.webp differ diff --git a/images/slova/zub.png b/images/slova/zub.png new file mode 100644 index 0000000..7b882b8 Binary files /dev/null and b/images/slova/zub.png differ diff --git a/images/slova/zvedavý.png b/images/slova/zvedavý.png new file mode 100644 index 0000000..5bd254c Binary files /dev/null and b/images/slova/zvedavý.png differ diff --git a/images/slova/zvieratá.png b/images/slova/zvieratá.png new file mode 100644 index 0000000..d8f897f Binary files /dev/null and b/images/slova/zvieratá.png differ diff --git a/images/slova/zvon.png b/images/slova/zvon.png new file mode 100644 index 0000000..d9285aa Binary files /dev/null and b/images/slova/zvon.png differ diff --git a/images/slova/zvonček.png b/images/slova/zvonček.png new file mode 100644 index 0000000..2399ec5 Binary files /dev/null and b/images/slova/zvonček.png differ diff --git a/images/slova/záchod.png b/images/slova/záchod.png new file mode 100644 index 0000000..ff1f6fc Binary files /dev/null and b/images/slova/záchod.png differ diff --git a/images/slova/záhrada.png b/images/slova/záhrada.png new file mode 100644 index 0000000..f9a3e79 Binary files /dev/null and b/images/slova/záhrada.png differ diff --git a/images/slova/záhradník.png b/images/slova/záhradník.png new file mode 100644 index 0000000..0b46dd0 Binary files /dev/null and b/images/slova/záhradník.png differ diff --git a/images/slova/zámok.png b/images/slova/zámok.png new file mode 100644 index 0000000..986b67f Binary files /dev/null and b/images/slova/zámok.png differ diff --git a/images/slova/záves.png b/images/slova/záves.png new file mode 100644 index 0000000..630ccae Binary files /dev/null and b/images/slova/záves.png differ diff --git a/images/slova/čaj.png b/images/slova/čaj.png new file mode 100644 index 0000000..bda3ee3 Binary files /dev/null and b/images/slova/čaj.png differ diff --git a/images/slova/čajník.png b/images/slova/čajník.png new file mode 100644 index 0000000..5816544 Binary files /dev/null and b/images/slova/čajník.png differ diff --git a/images/slova/čarodejník.png b/images/slova/čarodejník.png new file mode 100644 index 0000000..2c4e5a3 Binary files /dev/null and b/images/slova/čarodejník.png differ diff --git a/images/slova/čarovný.png b/images/slova/čarovný.png new file mode 100644 index 0000000..678c6dd Binary files /dev/null and b/images/slova/čarovný.png differ diff --git a/images/slova/čas.png b/images/slova/čas.png new file mode 100644 index 0000000..a2c6c0f Binary files /dev/null and b/images/slova/čas.png differ diff --git a/images/slova/časť.png b/images/slova/časť.png new file mode 100644 index 0000000..c4d6726 Binary files /dev/null and b/images/slova/časť.png differ diff --git a/images/slova/čelo.png b/images/slova/čelo.png new file mode 100644 index 0000000..a12dd9d Binary files /dev/null and b/images/slova/čelo.png differ diff --git a/images/slova/čerešňa.png b/images/slova/čerešňa.png new file mode 100644 index 0000000..a51ebb9 Binary files /dev/null and b/images/slova/čerešňa.png differ diff --git a/images/slova/čert.png b/images/slova/čert.png new file mode 100644 index 0000000..aec6099 Binary files /dev/null and b/images/slova/čert.png differ diff --git a/images/slova/česať.png b/images/slova/česať.png new file mode 100644 index 0000000..d361898 Binary files /dev/null and b/images/slova/česať.png differ diff --git a/images/slova/česť.png b/images/slova/česť.png new file mode 100644 index 0000000..c38ad4b Binary files /dev/null and b/images/slova/česť.png differ diff --git a/images/slova/čiapka.png b/images/slova/čiapka.png new file mode 100644 index 0000000..7d1c42d Binary files /dev/null and b/images/slova/čiapka.png differ diff --git a/images/slova/čiara.png b/images/slova/čiara.png new file mode 100644 index 0000000..01da3fb Binary files /dev/null and b/images/slova/čiara.png differ diff --git a/images/slova/činka.png b/images/slova/činka.png new file mode 100644 index 0000000..7700d74 Binary files /dev/null and b/images/slova/činka.png differ diff --git a/images/slova/čip.png b/images/slova/čip.png new file mode 100644 index 0000000..66f8908 Binary files /dev/null and b/images/slova/čip.png differ diff --git a/images/slova/čitateľ.png b/images/slova/čitateľ.png new file mode 100644 index 0000000..c79dd03 Binary files /dev/null and b/images/slova/čitateľ.png differ diff --git a/images/slova/čokoláda.png b/images/slova/čokoláda.png new file mode 100644 index 0000000..5514780 Binary files /dev/null and b/images/slova/čokoláda.png differ diff --git a/images/slova/ďakujem.png b/images/slova/ďakujem.png new file mode 100644 index 0000000..5d3df77 Binary files /dev/null and b/images/slova/ďakujem.png differ diff --git a/images/slova/ďalekohľad.png b/images/slova/ďalekohľad.png new file mode 100644 index 0000000..5942e27 Binary files /dev/null and b/images/slova/ďalekohľad.png differ diff --git a/images/slova/ďasno.png b/images/slova/ďasno.png new file mode 100644 index 0000000..bdfba47 Binary files /dev/null and b/images/slova/ďasno.png differ diff --git a/images/slova/ďateľ.png b/images/slova/ďateľ.png new file mode 100644 index 0000000..12cdc15 Binary files /dev/null and b/images/slova/ďateľ.png differ diff --git a/images/slova/ďobnutie.png b/images/slova/ďobnutie.png new file mode 100644 index 0000000..669e4a1 Binary files /dev/null and b/images/slova/ďobnutie.png differ diff --git a/images/slova/ďumbier.png b/images/slova/ďumbier.png new file mode 100644 index 0000000..e92d52e Binary files /dev/null and b/images/slova/ďumbier.png differ diff --git a/images/slova/ľalia.png b/images/slova/ľalia.png new file mode 100644 index 0000000..9d61159 Binary files /dev/null and b/images/slova/ľalia.png differ diff --git a/images/slova/ľudia.png b/images/slova/ľudia.png new file mode 100644 index 0000000..bb6808f Binary files /dev/null and b/images/slova/ľudia.png differ diff --git a/images/slova/ňaňa.png b/images/slova/ňaňa.png new file mode 100644 index 0000000..a307350 Binary files /dev/null and b/images/slova/ňaňa.png differ diff --git a/images/slova/šach.png b/images/slova/šach.png new file mode 100644 index 0000000..f394d86 Binary files /dev/null and b/images/slova/šach.png differ diff --git a/images/slova/šampón.jpg.png b/images/slova/šampón.jpg.png new file mode 100644 index 0000000..5eb16ff Binary files /dev/null and b/images/slova/šampón.jpg.png differ diff --git a/images/slova/šampón.png b/images/slova/šampón.png new file mode 100644 index 0000000..d228b2b Binary files /dev/null and b/images/slova/šampón.png differ diff --git a/images/slova/šarkan.png b/images/slova/šarkan.png new file mode 100644 index 0000000..875a1a5 Binary files /dev/null and b/images/slova/šarkan.png differ diff --git a/images/slova/šatka.png b/images/slova/šatka.png new file mode 100644 index 0000000..c1122ab Binary files /dev/null and b/images/slova/šatka.png differ diff --git a/images/slova/šaty.png b/images/slova/šaty.png new file mode 100644 index 0000000..835da3b Binary files /dev/null and b/images/slova/šaty.png differ diff --git a/images/slova/šašo.png b/images/slova/šašo.png new file mode 100644 index 0000000..ffd82e7 Binary files /dev/null and b/images/slova/šašo.png differ diff --git a/images/slova/šesť.png b/images/slova/šesť.png new file mode 100644 index 0000000..7bae0f1 Binary files /dev/null and b/images/slova/šesť.png differ diff --git a/images/slova/šibačka.png b/images/slova/šibačka.png new file mode 100644 index 0000000..c850b5c Binary files /dev/null and b/images/slova/šibačka.png differ diff --git a/images/slova/šiltovka.png b/images/slova/šiltovka.png new file mode 100644 index 0000000..8e45b62 Binary files /dev/null and b/images/slova/šiltovka.png differ diff --git a/images/slova/šimpanz.png b/images/slova/šimpanz.png new file mode 100644 index 0000000..76d6cc6 Binary files /dev/null and b/images/slova/šimpanz.png differ diff --git a/images/slova/šiška.png b/images/slova/šiška.png new file mode 100644 index 0000000..ec63534 Binary files /dev/null and b/images/slova/šiška.png differ diff --git a/images/slova/škola.png b/images/slova/škola.png new file mode 100644 index 0000000..a01a7de Binary files /dev/null and b/images/slova/škola.png differ diff --git a/images/slova/šmolinka.png b/images/slova/šmolinka.png new file mode 100644 index 0000000..6aaf95b Binary files /dev/null and b/images/slova/šmolinka.png differ diff --git a/images/slova/šofér.png b/images/slova/šofér.png new file mode 100644 index 0000000..7d57164 Binary files /dev/null and b/images/slova/šofér.png differ diff --git a/images/slova/šošovka.png b/images/slova/šošovka.png new file mode 100644 index 0000000..09f7378 Binary files /dev/null and b/images/slova/šošovka.png differ diff --git a/images/slova/špagety.png b/images/slova/špagety.png new file mode 100644 index 0000000..ca69fe6 Binary files /dev/null and b/images/slova/špagety.png differ diff --git a/images/slova/šport.png b/images/slova/šport.png new file mode 100644 index 0000000..f9a13f4 Binary files /dev/null and b/images/slova/šport.png differ diff --git a/images/slova/štipec.png b/images/slova/štipec.png new file mode 100644 index 0000000..513a38f Binary files /dev/null and b/images/slova/štipec.png differ diff --git a/images/slova/šum.png b/images/slova/šum.png new file mode 100644 index 0000000..5f51ebc Binary files /dev/null and b/images/slova/šum.png differ diff --git a/images/slova/šunka.png b/images/slova/šunka.png new file mode 100644 index 0000000..4607285 Binary files /dev/null and b/images/slova/šunka.png differ diff --git a/images/slova/šupka.png b/images/slova/šupka.png new file mode 100644 index 0000000..a0f9d38 Binary files /dev/null and b/images/slova/šupka.png differ diff --git a/images/slova/švihadlo.png b/images/slova/švihadlo.png new file mode 100644 index 0000000..500d59b Binary files /dev/null and b/images/slova/švihadlo.png differ diff --git a/images/slova/šálka.png b/images/slova/šálka.png new file mode 100644 index 0000000..acc36b7 Binary files /dev/null and b/images/slova/šálka.png differ diff --git a/images/slova/šíp.png b/images/slova/šíp.png new file mode 100644 index 0000000..4942d6c Binary files /dev/null and b/images/slova/šíp.png differ diff --git a/images/slova/šípka.png b/images/slova/šípka.png new file mode 100644 index 0000000..f2b3e07 Binary files /dev/null and b/images/slova/šípka.png differ diff --git a/images/slova/šťastie.webp b/images/slova/šťastie.webp new file mode 100644 index 0000000..74aeed9 Binary files /dev/null and b/images/slova/šťastie.webp differ diff --git a/images/slova/ťah.png b/images/slova/ťah.png new file mode 100644 index 0000000..d4c5b0d Binary files /dev/null and b/images/slova/ťah.png differ diff --git a/images/slova/ťahač.png b/images/slova/ťahač.png new file mode 100644 index 0000000..e21a722 Binary files /dev/null and b/images/slova/ťahač.png differ diff --git a/images/slova/ťahať.png b/images/slova/ťahať.png new file mode 100644 index 0000000..e9410b8 Binary files /dev/null and b/images/slova/ťahať.png differ diff --git a/images/slova/ťahák.png b/images/slova/ťahák.png new file mode 100644 index 0000000..995e323 Binary files /dev/null and b/images/slova/ťahák.png differ diff --git a/images/slova/ťava.png b/images/slova/ťava.png new file mode 100644 index 0000000..6110f1c Binary files /dev/null and b/images/slova/ťava.png differ diff --git a/images/slova/ťažiť.png b/images/slova/ťažiť.png new file mode 100644 index 0000000..5bd7af4 Binary files /dev/null and b/images/slova/ťažiť.png differ diff --git a/images/slova/ťuk.png b/images/slova/ťuk.png new file mode 100644 index 0000000..5956914 Binary files /dev/null and b/images/slova/ťuk.png differ diff --git a/images/slova/ťukanec.png b/images/slova/ťukanec.png new file mode 100644 index 0000000..40d08fd Binary files /dev/null and b/images/slova/ťukanec.png differ diff --git a/images/slova/žaba.png b/images/slova/žaba.png new file mode 100644 index 0000000..e4f0022 Binary files /dev/null and b/images/slova/žaba.png differ diff --git a/images/slova/žaluď.png b/images/slova/žaluď.png new file mode 100644 index 0000000..bb573a2 Binary files /dev/null and b/images/slova/žaluď.png differ diff --git a/images/slova/žatva.png b/images/slova/žatva.png new file mode 100644 index 0000000..930dcaf Binary files /dev/null and b/images/slova/žatva.png differ diff --git a/images/slova/žehlička.png b/images/slova/žehlička.png new file mode 100644 index 0000000..1e4047c Binary files /dev/null and b/images/slova/žehlička.png differ diff --git a/images/slova/žehliť.png b/images/slova/žehliť.png new file mode 100644 index 0000000..32b1e4d Binary files /dev/null and b/images/slova/žehliť.png differ diff --git a/images/slova/železo.png b/images/slova/železo.png new file mode 100644 index 0000000..cff4a6b Binary files /dev/null and b/images/slova/železo.png differ diff --git a/images/slova/žena.png b/images/slova/žena.png new file mode 100644 index 0000000..70f684d Binary files /dev/null and b/images/slova/žena.png differ diff --git a/images/slova/žiletka.png b/images/slova/žiletka.png new file mode 100644 index 0000000..b755b9b Binary files /dev/null and b/images/slova/žiletka.png differ diff --git a/images/slova/žobrák.png b/images/slova/žobrák.png new file mode 100644 index 0000000..b71db33 Binary files /dev/null and b/images/slova/žobrák.png differ diff --git a/images/slova/žolík.png b/images/slova/žolík.png new file mode 100644 index 0000000..fbf69fc Binary files /dev/null and b/images/slova/žolík.png differ diff --git a/images/slova/žolík2.png b/images/slova/žolík2.png new file mode 100644 index 0000000..48c1c78 Binary files /dev/null and b/images/slova/žolík2.png differ diff --git a/images/slova/žralok.png b/images/slova/žralok.png new file mode 100644 index 0000000..f6d0e2f Binary files /dev/null and b/images/slova/žralok.png differ diff --git a/images/slova/žriebä.png b/images/slova/žriebä.png new file mode 100644 index 0000000..87036d2 Binary files /dev/null and b/images/slova/žriebä.png differ diff --git a/images/slova/žula.png b/images/slova/žula.png new file mode 100644 index 0000000..f1a1c61 Binary files /dev/null and b/images/slova/žula.png differ diff --git a/images/slova/žuvačka.png b/images/slova/žuvačka.png new file mode 100644 index 0000000..ad298a6 Binary files /dev/null and b/images/slova/žuvačka.png differ diff --git a/images/slova/žuť.png b/images/slova/žuť.png new file mode 100644 index 0000000..e22f3d5 Binary files /dev/null and b/images/slova/žuť.png differ diff --git a/images/spat.png b/images/spat.png new file mode 100644 index 0000000..8445a73 Binary files /dev/null and b/images/spat.png differ diff --git a/images/spravne.png b/images/spravne.png new file mode 100644 index 0000000..51447d3 Binary files /dev/null and b/images/spravne.png differ diff --git a/images/spustithru.png b/images/spustithru.png new file mode 100644 index 0000000..1f40b5e Binary files /dev/null and b/images/spustithru.png differ diff --git a/images/star_active.png b/images/star_active.png new file mode 100644 index 0000000..66c6566 Binary files /dev/null and b/images/star_active.png differ diff --git a/images/star_inactive.png b/images/star_inactive.png new file mode 100644 index 0000000..ee69391 Binary files /dev/null and b/images/star_inactive.png differ diff --git a/images/stone.png b/images/stone.png new file mode 100644 index 0000000..c298251 Binary files /dev/null and b/images/stone.png differ diff --git a/images/superjozino/assets/Checkpoint/flag.png b/images/superjozino/assets/Checkpoint/flag.png new file mode 100644 index 0000000..fb55836 Binary files /dev/null and b/images/superjozino/assets/Checkpoint/flag.png differ diff --git a/images/superjozino/assets/Checkpoint/idleflag.png b/images/superjozino/assets/Checkpoint/idleflag.png new file mode 100644 index 0000000..2d9be55 Binary files /dev/null and b/images/superjozino/assets/Checkpoint/idleflag.png differ diff --git a/images/superjozino/assets/Checkpoint/noflag.png b/images/superjozino/assets/Checkpoint/noflag.png new file mode 100644 index 0000000..82cb0a3 Binary files /dev/null and b/images/superjozino/assets/Checkpoint/noflag.png differ diff --git a/images/superjozino/assets/mobs/AngryPig/Hit 1 (36x30).png b/images/superjozino/assets/mobs/AngryPig/Hit 1 (36x30).png new file mode 100644 index 0000000..a3e336d Binary files /dev/null and b/images/superjozino/assets/mobs/AngryPig/Hit 1 (36x30).png differ diff --git a/images/superjozino/assets/mobs/AngryPig/hit.png b/images/superjozino/assets/mobs/AngryPig/hit.png new file mode 100644 index 0000000..23c3f35 Binary files /dev/null and b/images/superjozino/assets/mobs/AngryPig/hit.png differ diff --git a/images/superjozino/assets/mobs/AngryPig/idle.png b/images/superjozino/assets/mobs/AngryPig/idle.png new file mode 100644 index 0000000..8c47491 Binary files /dev/null and b/images/superjozino/assets/mobs/AngryPig/idle.png differ diff --git a/images/superjozino/assets/mobs/AngryPig/run.png b/images/superjozino/assets/mobs/AngryPig/run.png new file mode 100644 index 0000000..a7b656d Binary files /dev/null and b/images/superjozino/assets/mobs/AngryPig/run.png differ diff --git a/images/superjozino/assets/mobs/AngryPig/walk.png b/images/superjozino/assets/mobs/AngryPig/walk.png new file mode 100644 index 0000000..4b0d7b2 Binary files /dev/null and b/images/superjozino/assets/mobs/AngryPig/walk.png differ diff --git a/images/superjozino/assets/mobs/Bat/ceiling_in.png b/images/superjozino/assets/mobs/Bat/ceiling_in.png new file mode 100644 index 0000000..51b9f9d Binary files /dev/null and b/images/superjozino/assets/mobs/Bat/ceiling_in.png differ diff --git a/images/superjozino/assets/mobs/Bat/ceiling_out.png b/images/superjozino/assets/mobs/Bat/ceiling_out.png new file mode 100644 index 0000000..ce41470 Binary files /dev/null and b/images/superjozino/assets/mobs/Bat/ceiling_out.png differ diff --git a/images/superjozino/assets/mobs/Bat/flying.png b/images/superjozino/assets/mobs/Bat/flying.png new file mode 100644 index 0000000..7dd4f9c Binary files /dev/null and b/images/superjozino/assets/mobs/Bat/flying.png differ diff --git a/images/superjozino/assets/mobs/Bat/hit.png b/images/superjozino/assets/mobs/Bat/hit.png new file mode 100644 index 0000000..4601ac0 Binary files /dev/null and b/images/superjozino/assets/mobs/Bat/hit.png differ diff --git a/images/superjozino/assets/mobs/Bat/idle.png b/images/superjozino/assets/mobs/Bat/idle.png new file mode 100644 index 0000000..594aa27 Binary files /dev/null and b/images/superjozino/assets/mobs/Bat/idle.png differ diff --git a/images/superjozino/assets/mobs/Chameleon/attack.png b/images/superjozino/assets/mobs/Chameleon/attack.png new file mode 100644 index 0000000..07e6268 Binary files /dev/null and b/images/superjozino/assets/mobs/Chameleon/attack.png differ diff --git a/images/superjozino/assets/mobs/Chameleon/hit.png b/images/superjozino/assets/mobs/Chameleon/hit.png new file mode 100644 index 0000000..f372209 Binary files /dev/null and b/images/superjozino/assets/mobs/Chameleon/hit.png differ diff --git a/images/superjozino/assets/mobs/Chameleon/idle.png b/images/superjozino/assets/mobs/Chameleon/idle.png new file mode 100644 index 0000000..f62a7ba Binary files /dev/null and b/images/superjozino/assets/mobs/Chameleon/idle.png differ diff --git a/images/superjozino/assets/mobs/Chameleon/run.png b/images/superjozino/assets/mobs/Chameleon/run.png new file mode 100644 index 0000000..63b90ab Binary files /dev/null and b/images/superjozino/assets/mobs/Chameleon/run.png differ diff --git a/images/superjozino/assets/mobs/Ghost/Gost Particles (48x16).png b/images/superjozino/assets/mobs/Ghost/Gost Particles (48x16).png new file mode 100644 index 0000000..62cf582 Binary files /dev/null and b/images/superjozino/assets/mobs/Ghost/Gost Particles (48x16).png differ diff --git a/images/superjozino/assets/mobs/Ghost/appear.png b/images/superjozino/assets/mobs/Ghost/appear.png new file mode 100644 index 0000000..cc2c536 Binary files /dev/null and b/images/superjozino/assets/mobs/Ghost/appear.png differ diff --git a/images/superjozino/assets/mobs/Ghost/disappear.png b/images/superjozino/assets/mobs/Ghost/disappear.png new file mode 100644 index 0000000..1b44ac7 Binary files /dev/null and b/images/superjozino/assets/mobs/Ghost/disappear.png differ diff --git a/images/superjozino/assets/mobs/Ghost/hit.png b/images/superjozino/assets/mobs/Ghost/hit.png new file mode 100644 index 0000000..9e02c3c Binary files /dev/null and b/images/superjozino/assets/mobs/Ghost/hit.png differ diff --git a/images/superjozino/assets/mobs/Ghost/idle.png b/images/superjozino/assets/mobs/Ghost/idle.png new file mode 100644 index 0000000..38783b0 Binary files /dev/null and b/images/superjozino/assets/mobs/Ghost/idle.png differ diff --git a/images/superjozino/assets/mobs/Mushroom/Hit.png b/images/superjozino/assets/mobs/Mushroom/Hit.png new file mode 100644 index 0000000..44b8dbc Binary files /dev/null and b/images/superjozino/assets/mobs/Mushroom/Hit.png differ diff --git a/images/superjozino/assets/mobs/Mushroom/Idle (32x32).png b/images/superjozino/assets/mobs/Mushroom/Idle (32x32).png new file mode 100644 index 0000000..b1d643b Binary files /dev/null and b/images/superjozino/assets/mobs/Mushroom/Idle (32x32).png differ diff --git a/images/superjozino/assets/mobs/Mushroom/Run (32x32).png b/images/superjozino/assets/mobs/Mushroom/Run (32x32).png new file mode 100644 index 0000000..4b14218 Binary files /dev/null and b/images/superjozino/assets/mobs/Mushroom/Run (32x32).png differ diff --git a/images/superjozino/assets/mobs/Plant/Attack (44x42).png b/images/superjozino/assets/mobs/Plant/Attack (44x42).png new file mode 100644 index 0000000..efa3ca4 Binary files /dev/null and b/images/superjozino/assets/mobs/Plant/Attack (44x42).png differ diff --git a/images/superjozino/assets/mobs/Plant/Bullet Pieces.png b/images/superjozino/assets/mobs/Plant/Bullet Pieces.png new file mode 100644 index 0000000..569c32c Binary files /dev/null and b/images/superjozino/assets/mobs/Plant/Bullet Pieces.png differ diff --git a/images/superjozino/assets/mobs/Plant/Bullet.png b/images/superjozino/assets/mobs/Plant/Bullet.png new file mode 100644 index 0000000..531ddf3 Binary files /dev/null and b/images/superjozino/assets/mobs/Plant/Bullet.png differ diff --git a/images/superjozino/assets/mobs/Plant/Hit (44x42).png b/images/superjozino/assets/mobs/Plant/Hit (44x42).png new file mode 100644 index 0000000..5a76995 Binary files /dev/null and b/images/superjozino/assets/mobs/Plant/Hit (44x42).png differ diff --git a/images/superjozino/assets/mobs/Plant/Idle (44x42).png b/images/superjozino/assets/mobs/Plant/Idle (44x42).png new file mode 100644 index 0000000..64cc352 Binary files /dev/null and b/images/superjozino/assets/mobs/Plant/Idle (44x42).png differ diff --git a/images/superjozino/assets/mobs/Radish/Hit (30x38).png b/images/superjozino/assets/mobs/Radish/Hit (30x38).png new file mode 100644 index 0000000..0566de4 Binary files /dev/null and b/images/superjozino/assets/mobs/Radish/Hit (30x38).png differ diff --git a/images/superjozino/assets/mobs/Radish/Idle 1 (30x38).png b/images/superjozino/assets/mobs/Radish/Idle 1 (30x38).png new file mode 100644 index 0000000..9e52e00 Binary files /dev/null and b/images/superjozino/assets/mobs/Radish/Idle 1 (30x38).png differ diff --git a/images/superjozino/assets/mobs/Radish/Idle 2 (30x38).png b/images/superjozino/assets/mobs/Radish/Idle 2 (30x38).png new file mode 100644 index 0000000..a56b50c Binary files /dev/null and b/images/superjozino/assets/mobs/Radish/Idle 2 (30x38).png differ diff --git a/images/superjozino/assets/mobs/Radish/Leafs.png b/images/superjozino/assets/mobs/Radish/Leafs.png new file mode 100644 index 0000000..a7a4615 Binary files /dev/null and b/images/superjozino/assets/mobs/Radish/Leafs.png differ diff --git a/images/superjozino/assets/mobs/Radish/Run (30x38).png b/images/superjozino/assets/mobs/Radish/Run (30x38).png new file mode 100644 index 0000000..01ea032 Binary files /dev/null and b/images/superjozino/assets/mobs/Radish/Run (30x38).png differ diff --git a/images/superjozino/assets/mobs/Rocks/Rock1_Hit.png b/images/superjozino/assets/mobs/Rocks/Rock1_Hit.png new file mode 100644 index 0000000..99c7c8a Binary files /dev/null and b/images/superjozino/assets/mobs/Rocks/Rock1_Hit.png differ diff --git a/images/superjozino/assets/mobs/Rocks/Rock1_Idle (38x34).png b/images/superjozino/assets/mobs/Rocks/Rock1_Idle (38x34).png new file mode 100644 index 0000000..3ed0f89 Binary files /dev/null and b/images/superjozino/assets/mobs/Rocks/Rock1_Idle (38x34).png differ diff --git a/images/superjozino/assets/mobs/Rocks/Rock1_Run (38x34).png b/images/superjozino/assets/mobs/Rocks/Rock1_Run (38x34).png new file mode 100644 index 0000000..6d8998c Binary files /dev/null and b/images/superjozino/assets/mobs/Rocks/Rock1_Run (38x34).png differ diff --git a/images/superjozino/assets/mobs/Rocks/Rock2_Hit (32x28).png b/images/superjozino/assets/mobs/Rocks/Rock2_Hit (32x28).png new file mode 100644 index 0000000..454adfa Binary files /dev/null and b/images/superjozino/assets/mobs/Rocks/Rock2_Hit (32x28).png differ diff --git a/images/superjozino/assets/mobs/Rocks/Rock2_Idle (32x28).png b/images/superjozino/assets/mobs/Rocks/Rock2_Idle (32x28).png new file mode 100644 index 0000000..72e74cf Binary files /dev/null and b/images/superjozino/assets/mobs/Rocks/Rock2_Idle (32x28).png differ diff --git a/images/superjozino/assets/mobs/Rocks/Rock2_Run (32x28).png b/images/superjozino/assets/mobs/Rocks/Rock2_Run (32x28).png new file mode 100644 index 0000000..518d555 Binary files /dev/null and b/images/superjozino/assets/mobs/Rocks/Rock2_Run (32x28).png differ diff --git a/images/superjozino/assets/mobs/Rocks/Rock3_Hit (22x18).png b/images/superjozino/assets/mobs/Rocks/Rock3_Hit (22x18).png new file mode 100644 index 0000000..01c930a Binary files /dev/null and b/images/superjozino/assets/mobs/Rocks/Rock3_Hit (22x18).png differ diff --git a/images/superjozino/assets/mobs/Rocks/Rock3_Idle (22x18).png b/images/superjozino/assets/mobs/Rocks/Rock3_Idle (22x18).png new file mode 100644 index 0000000..4498a70 Binary files /dev/null and b/images/superjozino/assets/mobs/Rocks/Rock3_Idle (22x18).png differ diff --git a/images/superjozino/assets/mobs/Rocks/Rock3_Run (22x18).png b/images/superjozino/assets/mobs/Rocks/Rock3_Run (22x18).png new file mode 100644 index 0000000..dcf9b92 Binary files /dev/null and b/images/superjozino/assets/mobs/Rocks/Rock3_Run (22x18).png differ diff --git a/images/superjozino/assets/mobs/Skull/Hit (52x54).png b/images/superjozino/assets/mobs/Skull/Hit (52x54).png new file mode 100644 index 0000000..2f65038 Binary files /dev/null and b/images/superjozino/assets/mobs/Skull/Hit (52x54).png differ diff --git a/images/superjozino/assets/mobs/Skull/Hit Wall 1 (52x54).png b/images/superjozino/assets/mobs/Skull/Hit Wall 1 (52x54).png new file mode 100644 index 0000000..e386211 Binary files /dev/null and b/images/superjozino/assets/mobs/Skull/Hit Wall 1 (52x54).png differ diff --git a/images/superjozino/assets/mobs/Skull/Hit Wall 2 (52x54).png b/images/superjozino/assets/mobs/Skull/Hit Wall 2 (52x54).png new file mode 100644 index 0000000..f53924f Binary files /dev/null and b/images/superjozino/assets/mobs/Skull/Hit Wall 2 (52x54).png differ diff --git a/images/superjozino/assets/mobs/Skull/Idle 1 (52x54).png b/images/superjozino/assets/mobs/Skull/Idle 1 (52x54).png new file mode 100644 index 0000000..ef03c0f Binary files /dev/null and b/images/superjozino/assets/mobs/Skull/Idle 1 (52x54).png differ diff --git a/images/superjozino/assets/mobs/Skull/Idle 2 (52x54).png b/images/superjozino/assets/mobs/Skull/Idle 2 (52x54).png new file mode 100644 index 0000000..1793851 Binary files /dev/null and b/images/superjozino/assets/mobs/Skull/Idle 2 (52x54).png differ diff --git a/images/superjozino/assets/mobs/Skull/Orange Particle.png b/images/superjozino/assets/mobs/Skull/Orange Particle.png new file mode 100644 index 0000000..3abe6e9 Binary files /dev/null and b/images/superjozino/assets/mobs/Skull/Orange Particle.png differ diff --git a/images/superjozino/assets/mobs/Skull/Red Particle.png b/images/superjozino/assets/mobs/Skull/Red Particle.png new file mode 100644 index 0000000..1068e50 Binary files /dev/null and b/images/superjozino/assets/mobs/Skull/Red Particle.png differ diff --git a/images/superjozino/assets/mobs/Slime/Hit (44x30).png b/images/superjozino/assets/mobs/Slime/Hit (44x30).png new file mode 100644 index 0000000..731f77c Binary files /dev/null and b/images/superjozino/assets/mobs/Slime/Hit (44x30).png differ diff --git a/images/superjozino/assets/mobs/Slime/Idle-Run (44x30).png b/images/superjozino/assets/mobs/Slime/Idle-Run (44x30).png new file mode 100644 index 0000000..aa905ee Binary files /dev/null and b/images/superjozino/assets/mobs/Slime/Idle-Run (44x30).png differ diff --git a/images/superjozino/assets/mobs/Slime/Particles (62x16).png b/images/superjozino/assets/mobs/Slime/Particles (62x16).png new file mode 100644 index 0000000..ac630b1 Binary files /dev/null and b/images/superjozino/assets/mobs/Slime/Particles (62x16).png differ diff --git a/images/superjozino/assets/mobs/Trunk/Attack (64x32).png b/images/superjozino/assets/mobs/Trunk/Attack (64x32).png new file mode 100644 index 0000000..822e74c Binary files /dev/null and b/images/superjozino/assets/mobs/Trunk/Attack (64x32).png differ diff --git a/images/superjozino/assets/mobs/Trunk/Bullet Pieces.png b/images/superjozino/assets/mobs/Trunk/Bullet Pieces.png new file mode 100644 index 0000000..c221a2d Binary files /dev/null and b/images/superjozino/assets/mobs/Trunk/Bullet Pieces.png differ diff --git a/images/superjozino/assets/mobs/Trunk/Bullet.png b/images/superjozino/assets/mobs/Trunk/Bullet.png new file mode 100644 index 0000000..405802f Binary files /dev/null and b/images/superjozino/assets/mobs/Trunk/Bullet.png differ diff --git a/images/superjozino/assets/mobs/Trunk/Hit (64x32).png b/images/superjozino/assets/mobs/Trunk/Hit (64x32).png new file mode 100644 index 0000000..97ab464 Binary files /dev/null and b/images/superjozino/assets/mobs/Trunk/Hit (64x32).png differ diff --git a/images/superjozino/assets/mobs/Trunk/Idle (64x32).png b/images/superjozino/assets/mobs/Trunk/Idle (64x32).png new file mode 100644 index 0000000..537015d Binary files /dev/null and b/images/superjozino/assets/mobs/Trunk/Idle (64x32).png differ diff --git a/images/superjozino/assets/mobs/Trunk/Run (64x32).png b/images/superjozino/assets/mobs/Trunk/Run (64x32).png new file mode 100644 index 0000000..1616593 Binary files /dev/null and b/images/superjozino/assets/mobs/Trunk/Run (64x32).png differ diff --git a/images/superjozino/assets/mobs/Turtle/Hit (44x26).png b/images/superjozino/assets/mobs/Turtle/Hit (44x26).png new file mode 100644 index 0000000..6a092ec Binary files /dev/null and b/images/superjozino/assets/mobs/Turtle/Hit (44x26).png differ diff --git a/images/superjozino/assets/mobs/Turtle/Idle 1 (44x26).png b/images/superjozino/assets/mobs/Turtle/Idle 1 (44x26).png new file mode 100644 index 0000000..15b099f Binary files /dev/null and b/images/superjozino/assets/mobs/Turtle/Idle 1 (44x26).png differ diff --git a/images/superjozino/assets/mobs/Turtle/Idle 2 (44x26).png b/images/superjozino/assets/mobs/Turtle/Idle 2 (44x26).png new file mode 100644 index 0000000..01ccd68 Binary files /dev/null and b/images/superjozino/assets/mobs/Turtle/Idle 2 (44x26).png differ diff --git a/images/superjozino/assets/mobs/Turtle/Spikes in (44x26).png b/images/superjozino/assets/mobs/Turtle/Spikes in (44x26).png new file mode 100644 index 0000000..26b653d Binary files /dev/null and b/images/superjozino/assets/mobs/Turtle/Spikes in (44x26).png differ diff --git a/images/superjozino/assets/mobs/Turtle/Spikes out (44x26).png b/images/superjozino/assets/mobs/Turtle/Spikes out (44x26).png new file mode 100644 index 0000000..1a9747b Binary files /dev/null and b/images/superjozino/assets/mobs/Turtle/Spikes out (44x26).png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_000.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_000.png new file mode 100644 index 0000000..f0ff62f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_000.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_001.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_001.png new file mode 100644 index 0000000..f0ff62f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_001.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_002.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_002.png new file mode 100644 index 0000000..f0ff62f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_002.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_003.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_003.png new file mode 100644 index 0000000..f0ff62f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_003.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_004.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_004.png new file mode 100644 index 0000000..f0ff62f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_004.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_005.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_005.png new file mode 100644 index 0000000..f0ff62f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_005.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_006.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_006.png new file mode 100644 index 0000000..f0ff62f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_006.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_007.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_007.png new file mode 100644 index 0000000..f0ff62f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_007.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_008.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_008.png new file mode 100644 index 0000000..f0ff62f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_008.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_009.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_009.png new file mode 100644 index 0000000..f0ff62f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_back_facing_009.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_000.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_000.png new file mode 100644 index 0000000..260cd6f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_000.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_001.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_001.png new file mode 100644 index 0000000..260cd6f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_001.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_002.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_002.png new file mode 100644 index 0000000..260cd6f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_002.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_003.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_003.png new file mode 100644 index 0000000..260cd6f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_003.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_004.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_004.png new file mode 100644 index 0000000..260cd6f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_004.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_005.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_005.png new file mode 100644 index 0000000..260cd6f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_005.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_006.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_006.png new file mode 100644 index 0000000..260cd6f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_006.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_007.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_007.png new file mode 100644 index 0000000..260cd6f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_007.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_008.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_008.png new file mode 100644 index 0000000..260cd6f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_008.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_009.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_009.png new file mode 100644 index 0000000..260cd6f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_front_facing_009.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_000.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_000.png new file mode 100644 index 0000000..301486b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_000.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_001.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_001.png new file mode 100644 index 0000000..301486b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_001.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_002.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_002.png new file mode 100644 index 0000000..301486b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_002.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_003.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_003.png new file mode 100644 index 0000000..301486b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_003.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_004.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_004.png new file mode 100644 index 0000000..301486b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_004.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_005.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_005.png new file mode 100644 index 0000000..301486b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_005.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_006.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_006.png new file mode 100644 index 0000000..301486b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_006.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_007.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_007.png new file mode 100644 index 0000000..301486b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_007.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_008.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_008.png new file mode 100644 index 0000000..301486b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_008.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_009.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_009.png new file mode 100644 index 0000000..301486b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_base_side_facing_009.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_crouch_000.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_crouch_000.png new file mode 100644 index 0000000..a27e354 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_crouch_000.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_crouch_001.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_crouch_001.png new file mode 100644 index 0000000..3d83756 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_crouch_001.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_crouch_002.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_crouch_002.png new file mode 100644 index 0000000..c4bc817 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_crouch_002.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_crouch_003.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_crouch_003.png new file mode 100644 index 0000000..c4bc817 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_crouch_003.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_crouch_004.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_crouch_004.png new file mode 100644 index 0000000..af99b10 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_crouch_004.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_crouch_005.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_crouch_005.png new file mode 100644 index 0000000..eada904 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_crouch_005.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_defend_000.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_defend_000.png new file mode 100644 index 0000000..301486b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_defend_000.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_defend_001.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_defend_001.png new file mode 100644 index 0000000..b53c838 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_defend_001.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_defend_002.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_defend_002.png new file mode 100644 index 0000000..aba071f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_defend_002.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_defend_003.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_defend_003.png new file mode 100644 index 0000000..6caf927 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_defend_003.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_defend_004.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_defend_004.png new file mode 100644 index 0000000..0034a30 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_defend_004.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_die_000.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_die_000.png new file mode 100644 index 0000000..a27e354 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_die_000.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_die_001.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_die_001.png new file mode 100644 index 0000000..0e0c059 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_die_001.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_die_002.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_die_002.png new file mode 100644 index 0000000..7081272 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_die_002.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_die_003.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_die_003.png new file mode 100644 index 0000000..1cea1b0 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_die_003.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_die_004.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_die_004.png new file mode 100644 index 0000000..49d650f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_die_004.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_dig_000.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_dig_000.png new file mode 100644 index 0000000..05632e3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_dig_000.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_dig_001.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_dig_001.png new file mode 100644 index 0000000..de24698 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_dig_001.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_dig_002.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_dig_002.png new file mode 100644 index 0000000..61e5fff Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_dig_002.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_dig_003.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_dig_003.png new file mode 100644 index 0000000..0daa0dd Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_dig_003.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_dig_004.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_dig_004.png new file mode 100644 index 0000000..d452252 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_dig_004.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_dig_005.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_dig_005.png new file mode 100644 index 0000000..18561f8 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_dig_005.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_dig_006.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_dig_006.png new file mode 100644 index 0000000..08960ba Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_dig_006.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_dig_007.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_dig_007.png new file mode 100644 index 0000000..d3169d3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_dig_007.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_000.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_000.png new file mode 100644 index 0000000..66cddab Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_000.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_001.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_001.png new file mode 100644 index 0000000..aa83d11 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_001.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_002.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_002.png new file mode 100644 index 0000000..27b6e84 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_002.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_003.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_003.png new file mode 100644 index 0000000..b057788 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_003.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_004.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_004.png new file mode 100644 index 0000000..53bf2e2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_004.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_005.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_005.png new file mode 100644 index 0000000..460c4b3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_005.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_006.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_006.png new file mode 100644 index 0000000..c9dd465 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_006.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_007.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_007.png new file mode 100644 index 0000000..a6079f1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_007.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_008.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_008.png new file mode 100644 index 0000000..1d4da2d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_008.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_009.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_009.png new file mode 100644 index 0000000..11abd43 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_falling_009.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_000.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_000.png new file mode 100644 index 0000000..b1eeba6 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_000.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_001.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_001.png new file mode 100644 index 0000000..4484b8e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_001.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_002.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_002.png new file mode 100644 index 0000000..1cb2b98 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_002.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_003.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_003.png new file mode 100644 index 0000000..fba2f2f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_003.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_004.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_004.png new file mode 100644 index 0000000..2b92154 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_004.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_005.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_005.png new file mode 100644 index 0000000..8107bde Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_005.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_006.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_006.png new file mode 100644 index 0000000..3223b54 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_006.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_007.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_007.png new file mode 100644 index 0000000..f248125 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_007.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_008.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_008.png new file mode 100644 index 0000000..d39c6d0 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_008.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_009.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_009.png new file mode 100644 index 0000000..ee25375 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_horizontal_slide_009.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_hurt_000.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_hurt_000.png new file mode 100644 index 0000000..301486b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_hurt_000.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_hurt_001.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_hurt_001.png new file mode 100644 index 0000000..563f7b7 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_hurt_001.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_hurt_002.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_hurt_002.png new file mode 100644 index 0000000..30d93e8 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_hurt_002.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_hurt_003.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_hurt_003.png new file mode 100644 index 0000000..2621a55 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_hurt_003.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_hurt_004.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_hurt_004.png new file mode 100644 index 0000000..c06a165 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_hurt_004.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_000.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_000.png new file mode 100644 index 0000000..301486b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_000.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_001.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_001.png new file mode 100644 index 0000000..4a95a9d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_001.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_002.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_002.png new file mode 100644 index 0000000..7d4b029 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_002.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_003.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_003.png new file mode 100644 index 0000000..ad6d417 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_003.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_004.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_004.png new file mode 100644 index 0000000..6cd44b5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_004.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_005.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_005.png new file mode 100644 index 0000000..15298c8 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_005.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_006.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_006.png new file mode 100644 index 0000000..9bcbe76 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_006.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_007.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_007.png new file mode 100644 index 0000000..b0d24fe Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_007.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_008.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_008.png new file mode 100644 index 0000000..13e5f97 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_008.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_009.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_009.png new file mode 100644 index 0000000..44c3901 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_009.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_010.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_010.png new file mode 100644 index 0000000..605f474 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_010.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_011.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_011.png new file mode 100644 index 0000000..dbd2fd4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_011.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_012.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_012.png new file mode 100644 index 0000000..77059d1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_012.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_013.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_013.png new file mode 100644 index 0000000..60da5ca Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_013.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_014.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_014.png new file mode 100644 index 0000000..77c5c7a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_014.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_015.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_015.png new file mode 100644 index 0000000..c1b32f8 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_015.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_016.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_016.png new file mode 100644 index 0000000..726abee Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_016.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_017.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_017.png new file mode 100644 index 0000000..a16ee5f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_017.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_018.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_018.png new file mode 100644 index 0000000..e7f7c24 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_018.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_019.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_019.png new file mode 100644 index 0000000..4a62773 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_019.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_000.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_000.png new file mode 100644 index 0000000..f0ff62f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_000.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_001.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_001.png new file mode 100644 index 0000000..6f7bb55 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_001.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_002.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_002.png new file mode 100644 index 0000000..62c1a93 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_002.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_003.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_003.png new file mode 100644 index 0000000..202c0be Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_003.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_004.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_004.png new file mode 100644 index 0000000..f62c13c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_004.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_005.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_005.png new file mode 100644 index 0000000..a1fd333 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_005.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_006.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_006.png new file mode 100644 index 0000000..0c80811 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_006.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_007.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_007.png new file mode 100644 index 0000000..2c1d4bf Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_007.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_008.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_008.png new file mode 100644 index 0000000..b791fb6 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_008.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_009.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_009.png new file mode 100644 index 0000000..b3b2c14 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_009.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_010.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_010.png new file mode 100644 index 0000000..9200181 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_010.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_011.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_011.png new file mode 100644 index 0000000..424978c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_011.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_012.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_012.png new file mode 100644 index 0000000..5e1d5bd Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_012.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_013.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_013.png new file mode 100644 index 0000000..7c9f863 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_013.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_014.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_014.png new file mode 100644 index 0000000..0fbd98b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_014.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_015.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_015.png new file mode 100644 index 0000000..fbbc13a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_015.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_016.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_016.png new file mode 100644 index 0000000..6bdd2d3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_016.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_017.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_017.png new file mode 100644 index 0000000..ef16645 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_017.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_018.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_018.png new file mode 100644 index 0000000..c0b45bb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_018.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_019.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_019.png new file mode 100644 index 0000000..258f20c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_back_019.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_000.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_000.png new file mode 100644 index 0000000..260cd6f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_000.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_001.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_001.png new file mode 100644 index 0000000..fa01483 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_001.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_002.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_002.png new file mode 100644 index 0000000..7e787e5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_002.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_003.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_003.png new file mode 100644 index 0000000..e088e85 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_003.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_004.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_004.png new file mode 100644 index 0000000..35617c5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_004.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_005.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_005.png new file mode 100644 index 0000000..3b4057f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_005.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_006.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_006.png new file mode 100644 index 0000000..c8c8ac5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_006.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_007.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_007.png new file mode 100644 index 0000000..54c9436 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_007.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_008.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_008.png new file mode 100644 index 0000000..d6b67a0 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_008.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_009.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_009.png new file mode 100644 index 0000000..2216c9f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_009.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_010.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_010.png new file mode 100644 index 0000000..8c2bba4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_010.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_011.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_011.png new file mode 100644 index 0000000..04717e5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_011.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_012.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_012.png new file mode 100644 index 0000000..4a7e9ac Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_012.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_013.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_013.png new file mode 100644 index 0000000..4afb811 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_013.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_014.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_014.png new file mode 100644 index 0000000..23bd2a0 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_014.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_015.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_015.png new file mode 100644 index 0000000..d5a0a33 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_015.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_016.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_016.png new file mode 100644 index 0000000..58046ff Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_016.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_017.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_017.png new file mode 100644 index 0000000..6cec408 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_017.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_018.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_018.png new file mode 100644 index 0000000..a342415 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_018.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_019.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_019.png new file mode 100644 index 0000000..265ffda Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_front_facing_019.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_000.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_000.png new file mode 100644 index 0000000..ec50b0b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_000.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_001.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_001.png new file mode 100644 index 0000000..2da6317 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_001.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_002.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_002.png new file mode 100644 index 0000000..b1e6b1a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_002.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_003.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_003.png new file mode 100644 index 0000000..f31eda5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_003.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_004.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_004.png new file mode 100644 index 0000000..87af3c6 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_004.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_005.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_005.png new file mode 100644 index 0000000..4101e9b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_005.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_006.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_006.png new file mode 100644 index 0000000..bd960e6 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_006.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_007.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_007.png new file mode 100644 index 0000000..fa9cf23 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_007.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_008.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_008.png new file mode 100644 index 0000000..c770cf4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_008.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_009.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_009.png new file mode 100644 index 0000000..493d171 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_009.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_010.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_010.png new file mode 100644 index 0000000..ad6be34 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_010.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_011.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_011.png new file mode 100644 index 0000000..8d3bb3f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_011.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_012.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_012.png new file mode 100644 index 0000000..a216242 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_012.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_013.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_013.png new file mode 100644 index 0000000..bfb9ce3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_013.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_014.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_014.png new file mode 100644 index 0000000..4d98257 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_014.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_015.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_015.png new file mode 100644 index 0000000..5ee7458 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_idle_on_ladder_015.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_000.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_000.png new file mode 100644 index 0000000..a27e354 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_000.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_001.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_001.png new file mode 100644 index 0000000..0d66a3e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_001.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_002.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_002.png new file mode 100644 index 0000000..6fe14d9 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_002.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_003.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_003.png new file mode 100644 index 0000000..96fa6c4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_003.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_004.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_004.png new file mode 100644 index 0000000..202f2b0 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_004.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_005.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_005.png new file mode 100644 index 0000000..866065f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_005.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_006.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_006.png new file mode 100644 index 0000000..cd42e62 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_006.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_007.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_007.png new file mode 100644 index 0000000..f58a1fd Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_007.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_008.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_008.png new file mode 100644 index 0000000..4bd169b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_008.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_009.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_009.png new file mode 100644 index 0000000..56767d0 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_jump_009.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_ladder_climb_000.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_ladder_climb_000.png new file mode 100644 index 0000000..8a30818 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_ladder_climb_000.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_ladder_climb_001.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_ladder_climb_001.png new file mode 100644 index 0000000..2d26eeb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_ladder_climb_001.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_ladder_climb_002.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_ladder_climb_002.png new file mode 100644 index 0000000..6bbf383 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_ladder_climb_002.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_ladder_climb_003.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_ladder_climb_003.png new file mode 100644 index 0000000..d931ecd Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_ladder_climb_003.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_ladder_climb_004.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_ladder_climb_004.png new file mode 100644 index 0000000..21553a2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_ladder_climb_004.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_ladder_climb_005.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_ladder_climb_005.png new file mode 100644 index 0000000..6e68f96 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_ladder_climb_005.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_ladder_climb_006.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_ladder_climb_006.png new file mode 100644 index 0000000..91d44d5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_ladder_climb_006.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_ladder_climb_007.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_ladder_climb_007.png new file mode 100644 index 0000000..4b03118 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_ladder_climb_007.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_pull_000.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_pull_000.png new file mode 100644 index 0000000..60d9173 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_pull_000.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_pull_001.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_pull_001.png new file mode 100644 index 0000000..a5a7b56 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_pull_001.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_pull_002.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_pull_002.png new file mode 100644 index 0000000..87d453b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_pull_002.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_pull_003.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_pull_003.png new file mode 100644 index 0000000..19e2b70 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_pull_003.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_pull_004.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_pull_004.png new file mode 100644 index 0000000..3326ba5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_pull_004.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_pull_005.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_pull_005.png new file mode 100644 index 0000000..8c0a374 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_pull_005.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_pull_006.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_pull_006.png new file mode 100644 index 0000000..9341846 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_pull_006.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_pull_007.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_pull_007.png new file mode 100644 index 0000000..0b9433c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_pull_007.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_push_000.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_push_000.png new file mode 100644 index 0000000..65c3204 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_push_000.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_push_001.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_push_001.png new file mode 100644 index 0000000..296163b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_push_001.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_push_002.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_push_002.png new file mode 100644 index 0000000..40bba60 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_push_002.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_push_003.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_push_003.png new file mode 100644 index 0000000..bf37b0d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_push_003.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_push_004.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_push_004.png new file mode 100644 index 0000000..7d87569 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_push_004.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_push_005.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_push_005.png new file mode 100644 index 0000000..3afa153 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_push_005.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_push_006.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_push_006.png new file mode 100644 index 0000000..c0fbc0a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_push_006.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_push_007.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_push_007.png new file mode 100644 index 0000000..1996d41 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_push_007.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_run_000.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_run_000.png new file mode 100644 index 0000000..018081f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_run_000.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_run_001.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_run_001.png new file mode 100644 index 0000000..05fb368 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_run_001.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_run_002.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_run_002.png new file mode 100644 index 0000000..9510a99 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_run_002.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_run_003.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_run_003.png new file mode 100644 index 0000000..ee93c0d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_run_003.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_run_004.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_run_004.png new file mode 100644 index 0000000..31ffcb8 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_run_004.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_run_005.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_run_005.png new file mode 100644 index 0000000..489b501 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_run_005.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_run_006.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_run_006.png new file mode 100644 index 0000000..7b8fede Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_run_006.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_run_007.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_run_007.png new file mode 100644 index 0000000..be37d4d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_run_007.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_shoot_000.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_shoot_000.png new file mode 100644 index 0000000..85b59ab Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_shoot_000.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_shoot_001.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_shoot_001.png new file mode 100644 index 0000000..5d3d15e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_shoot_001.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_shoot_002.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_shoot_002.png new file mode 100644 index 0000000..b79ec52 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_shoot_002.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_shoot_003.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_shoot_003.png new file mode 100644 index 0000000..5f5b0e0 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_shoot_003.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_shoot_004.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_shoot_004.png new file mode 100644 index 0000000..f08735b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_shoot_004.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_throw_something_000.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_throw_something_000.png new file mode 100644 index 0000000..5c3eec3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_throw_something_000.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_throw_something_001.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_throw_something_001.png new file mode 100644 index 0000000..ccddaf4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_throw_something_001.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_throw_something_002.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_throw_something_002.png new file mode 100644 index 0000000..2c81d38 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_throw_something_002.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_throw_something_003.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_throw_something_003.png new file mode 100644 index 0000000..7a480f4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_throw_something_003.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_throw_something_004.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_throw_something_004.png new file mode 100644 index 0000000..524fae7 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_throw_something_004.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_throw_something_005.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_throw_something_005.png new file mode 100644 index 0000000..3ec1db9 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_throw_something_005.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_throw_something_006.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_throw_something_006.png new file mode 100644 index 0000000..aef4e58 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_throw_something_006.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_throw_something_007.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_throw_something_007.png new file mode 100644 index 0000000..74b6441 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_throw_something_007.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_use_pickaxe_000.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_use_pickaxe_000.png new file mode 100644 index 0000000..a27e354 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_use_pickaxe_000.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_use_pickaxe_001.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_use_pickaxe_001.png new file mode 100644 index 0000000..1044d0c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_use_pickaxe_001.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_use_pickaxe_002.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_use_pickaxe_002.png new file mode 100644 index 0000000..38ee4f3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_use_pickaxe_002.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_use_pickaxe_003.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_use_pickaxe_003.png new file mode 100644 index 0000000..1d8f421 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_use_pickaxe_003.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_use_pickaxe_004.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_use_pickaxe_004.png new file mode 100644 index 0000000..040ae7e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_use_pickaxe_004.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_use_pickaxe_005.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_use_pickaxe_005.png new file mode 100644 index 0000000..e12f1e6 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_use_pickaxe_005.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_use_pickaxe_006.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_use_pickaxe_006.png new file mode 100644 index 0000000..4789371 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_use_pickaxe_006.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_000.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_000.png new file mode 100644 index 0000000..f7d69b5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_000.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_001.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_001.png new file mode 100644 index 0000000..1c1c178 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_001.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_002.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_002.png new file mode 100644 index 0000000..eadd969 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_002.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_003.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_003.png new file mode 100644 index 0000000..53db21e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_003.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_004.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_004.png new file mode 100644 index 0000000..b727674 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_004.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_005.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_005.png new file mode 100644 index 0000000..9f8c292 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_005.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_006.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_006.png new file mode 100644 index 0000000..6a5547e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_006.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_007.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_007.png new file mode 100644 index 0000000..181166b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_007.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_008.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_008.png new file mode 100644 index 0000000..427cb60 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_008.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_009.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_009.png new file mode 100644 index 0000000..23536f1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_vertical_slide_009.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_000.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_000.png new file mode 100644 index 0000000..0493909 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_000.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_001.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_001.png new file mode 100644 index 0000000..39515e7 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_001.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_002.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_002.png new file mode 100644 index 0000000..fff682e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_002.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_003.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_003.png new file mode 100644 index 0000000..a5cbb6d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_003.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_004.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_004.png new file mode 100644 index 0000000..2d60f1e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_004.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_005.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_005.png new file mode 100644 index 0000000..b4d9f61 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_005.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_006.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_006.png new file mode 100644 index 0000000..770ae87 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_006.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_007.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_007.png new file mode 100644 index 0000000..ed8c674 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_007.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_backward_000.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_backward_000.png new file mode 100644 index 0000000..c2da5b7 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_backward_000.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_backward_001.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_backward_001.png new file mode 100644 index 0000000..2046583 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_backward_001.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_backward_002.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_backward_002.png new file mode 100644 index 0000000..f629d96 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_backward_002.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_backward_003.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_backward_003.png new file mode 100644 index 0000000..6fc47a1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_backward_003.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_backward_004.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_backward_004.png new file mode 100644 index 0000000..61bc1bc Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_backward_004.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_backward_005.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_backward_005.png new file mode 100644 index 0000000..3538392 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_backward_005.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_backward_006.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_backward_006.png new file mode 100644 index 0000000..b2a7928 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_backward_006.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_backward_007.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_backward_007.png new file mode 100644 index 0000000..14644f6 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_backward_007.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_forward_facing_000.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_forward_facing_000.png new file mode 100644 index 0000000..1474000 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_forward_facing_000.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_forward_facing_001.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_forward_facing_001.png new file mode 100644 index 0000000..f1b1cde Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_forward_facing_001.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_forward_facing_002.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_forward_facing_002.png new file mode 100644 index 0000000..edeeb6d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_forward_facing_002.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_forward_facing_003.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_forward_facing_003.png new file mode 100644 index 0000000..4cde2d1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_forward_facing_003.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_forward_facing_004.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_forward_facing_004.png new file mode 100644 index 0000000..0bb7cfe Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_forward_facing_004.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_forward_facing_005.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_forward_facing_005.png new file mode 100644 index 0000000..ba4f8da Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_forward_facing_005.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_forward_facing_006.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_forward_facing_006.png new file mode 100644 index 0000000..fc59223 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_forward_facing_006.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_forward_facing_007.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_forward_facing_007.png new file mode 100644 index 0000000..cb518bd Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_walk_forward_facing_007.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_000.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_000.png new file mode 100644 index 0000000..33c01aa Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_000.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_001.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_001.png new file mode 100644 index 0000000..7dbd312 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_001.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_002.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_002.png new file mode 100644 index 0000000..006d689 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_002.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_003.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_003.png new file mode 100644 index 0000000..951b742 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_003.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_004.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_004.png new file mode 100644 index 0000000..f78c234 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_004.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_005.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_005.png new file mode 100644 index 0000000..b055984 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_005.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_006.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_006.png new file mode 100644 index 0000000..153d20a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_006.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_007.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_007.png new file mode 100644 index 0000000..8fb6215 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_007.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_008.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_008.png new file mode 100644 index 0000000..b2a104d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_008.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_009.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_009.png new file mode 100644 index 0000000..359d5dc Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_009.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_010.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_010.png new file mode 100644 index 0000000..78aac0a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_010.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_011.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_011.png new file mode 100644 index 0000000..909a759 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_011.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_012.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_012.png new file mode 100644 index 0000000..777f2fc Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_012.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_013.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_013.png new file mode 100644 index 0000000..c8d0709 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_013.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_014.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_014.png new file mode 100644 index 0000000..5470513 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_014.png differ diff --git a/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_015.png b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_015.png new file mode 100644 index 0000000..d248889 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/green_miner/__green_miner_whacked_015.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_000.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_000.png new file mode 100644 index 0000000..b183f5b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_000.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_001.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_001.png new file mode 100644 index 0000000..b183f5b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_001.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_002.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_002.png new file mode 100644 index 0000000..b183f5b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_002.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_003.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_003.png new file mode 100644 index 0000000..b183f5b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_003.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_004.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_004.png new file mode 100644 index 0000000..b183f5b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_004.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_005.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_005.png new file mode 100644 index 0000000..b183f5b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_005.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_006.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_006.png new file mode 100644 index 0000000..b183f5b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_006.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_007.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_007.png new file mode 100644 index 0000000..b183f5b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_007.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_008.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_008.png new file mode 100644 index 0000000..b183f5b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_008.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_009.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_009.png new file mode 100644 index 0000000..b183f5b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_back_facing_009.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_000.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_000.png new file mode 100644 index 0000000..9a1d6bb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_000.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_001.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_001.png new file mode 100644 index 0000000..9a1d6bb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_001.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_002.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_002.png new file mode 100644 index 0000000..9a1d6bb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_002.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_003.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_003.png new file mode 100644 index 0000000..9a1d6bb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_003.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_004.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_004.png new file mode 100644 index 0000000..9a1d6bb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_004.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_005.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_005.png new file mode 100644 index 0000000..9a1d6bb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_005.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_006.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_006.png new file mode 100644 index 0000000..9a1d6bb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_006.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_007.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_007.png new file mode 100644 index 0000000..9a1d6bb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_007.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_008.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_008.png new file mode 100644 index 0000000..9a1d6bb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_008.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_009.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_009.png new file mode 100644 index 0000000..9a1d6bb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_front_facing_009.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_000.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_000.png new file mode 100644 index 0000000..cef9813 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_000.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_001.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_001.png new file mode 100644 index 0000000..cef9813 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_001.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_002.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_002.png new file mode 100644 index 0000000..cef9813 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_002.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_003.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_003.png new file mode 100644 index 0000000..cef9813 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_003.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_004.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_004.png new file mode 100644 index 0000000..cef9813 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_004.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_005.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_005.png new file mode 100644 index 0000000..cef9813 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_005.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_006.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_006.png new file mode 100644 index 0000000..cef9813 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_006.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_007.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_007.png new file mode 100644 index 0000000..cef9813 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_007.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_008.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_008.png new file mode 100644 index 0000000..cef9813 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_008.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_009.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_009.png new file mode 100644 index 0000000..cef9813 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_base_side_facing_009.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_crouch_000.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_crouch_000.png new file mode 100644 index 0000000..7fae992 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_crouch_000.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_crouch_001.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_crouch_001.png new file mode 100644 index 0000000..172e47f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_crouch_001.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_crouch_002.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_crouch_002.png new file mode 100644 index 0000000..e418b30 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_crouch_002.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_crouch_003.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_crouch_003.png new file mode 100644 index 0000000..e418b30 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_crouch_003.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_crouch_004.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_crouch_004.png new file mode 100644 index 0000000..d9da890 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_crouch_004.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_crouch_005.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_crouch_005.png new file mode 100644 index 0000000..9cbe19e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_crouch_005.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_defend_000.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_defend_000.png new file mode 100644 index 0000000..cef9813 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_defend_000.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_defend_001.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_defend_001.png new file mode 100644 index 0000000..ae9b3e4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_defend_001.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_defend_002.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_defend_002.png new file mode 100644 index 0000000..a713256 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_defend_002.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_defend_003.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_defend_003.png new file mode 100644 index 0000000..3808e30 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_defend_003.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_defend_004.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_defend_004.png new file mode 100644 index 0000000..aaf6228 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_defend_004.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_die_000.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_die_000.png new file mode 100644 index 0000000..7fae992 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_die_000.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_die_001.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_die_001.png new file mode 100644 index 0000000..6a83fa2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_die_001.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_die_002.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_die_002.png new file mode 100644 index 0000000..6bdc69a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_die_002.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_die_003.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_die_003.png new file mode 100644 index 0000000..430b0f3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_die_003.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_die_004.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_die_004.png new file mode 100644 index 0000000..a339b2a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_die_004.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_dig_000.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_dig_000.png new file mode 100644 index 0000000..f3bde5e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_dig_000.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_dig_001.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_dig_001.png new file mode 100644 index 0000000..3a8d5c4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_dig_001.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_dig_002.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_dig_002.png new file mode 100644 index 0000000..b200569 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_dig_002.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_dig_003.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_dig_003.png new file mode 100644 index 0000000..8e6a131 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_dig_003.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_dig_004.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_dig_004.png new file mode 100644 index 0000000..547b66c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_dig_004.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_dig_005.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_dig_005.png new file mode 100644 index 0000000..4740edb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_dig_005.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_dig_006.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_dig_006.png new file mode 100644 index 0000000..4942b97 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_dig_006.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_dig_007.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_dig_007.png new file mode 100644 index 0000000..7c61049 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_dig_007.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_000.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_000.png new file mode 100644 index 0000000..23aa492 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_000.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_001.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_001.png new file mode 100644 index 0000000..88d1f2c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_001.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_002.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_002.png new file mode 100644 index 0000000..7df1931 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_002.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_003.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_003.png new file mode 100644 index 0000000..677c627 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_003.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_004.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_004.png new file mode 100644 index 0000000..d9b0e44 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_004.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_005.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_005.png new file mode 100644 index 0000000..8d95c0b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_005.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_006.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_006.png new file mode 100644 index 0000000..d5d1765 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_006.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_007.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_007.png new file mode 100644 index 0000000..8e63a9f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_007.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_008.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_008.png new file mode 100644 index 0000000..e9bf450 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_008.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_009.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_009.png new file mode 100644 index 0000000..66268b7 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_falling_009.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_000.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_000.png new file mode 100644 index 0000000..c9f71de Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_000.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_001.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_001.png new file mode 100644 index 0000000..0e69f80 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_001.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_002.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_002.png new file mode 100644 index 0000000..efb0e89 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_002.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_003.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_003.png new file mode 100644 index 0000000..e30348b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_003.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_004.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_004.png new file mode 100644 index 0000000..e5104ce Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_004.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_005.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_005.png new file mode 100644 index 0000000..36b35a2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_005.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_006.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_006.png new file mode 100644 index 0000000..478fb30 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_006.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_007.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_007.png new file mode 100644 index 0000000..dea8716 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_007.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_008.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_008.png new file mode 100644 index 0000000..bdee83a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_008.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_009.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_009.png new file mode 100644 index 0000000..e3295f3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_horizontal_slide_009.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_hurt_000.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_hurt_000.png new file mode 100644 index 0000000..9ea249e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_hurt_000.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_hurt_001.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_hurt_001.png new file mode 100644 index 0000000..2181899 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_hurt_001.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_hurt_002.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_hurt_002.png new file mode 100644 index 0000000..bd3cf14 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_hurt_002.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_hurt_003.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_hurt_003.png new file mode 100644 index 0000000..73ab9fe Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_hurt_003.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_hurt_004.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_hurt_004.png new file mode 100644 index 0000000..8f789e1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_hurt_004.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_000.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_000.png new file mode 100644 index 0000000..cef9813 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_000.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_001.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_001.png new file mode 100644 index 0000000..9e82bbe Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_001.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_002.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_002.png new file mode 100644 index 0000000..890716e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_002.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_003.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_003.png new file mode 100644 index 0000000..ffedd6e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_003.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_004.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_004.png new file mode 100644 index 0000000..7c7a790 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_004.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_005.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_005.png new file mode 100644 index 0000000..38bd5ad Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_005.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_006.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_006.png new file mode 100644 index 0000000..a527355 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_006.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_007.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_007.png new file mode 100644 index 0000000..f1e610a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_007.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_008.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_008.png new file mode 100644 index 0000000..9a87ef2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_008.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_009.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_009.png new file mode 100644 index 0000000..e267a07 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_009.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_010.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_010.png new file mode 100644 index 0000000..5200e4f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_010.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_011.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_011.png new file mode 100644 index 0000000..6613dbf Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_011.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_012.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_012.png new file mode 100644 index 0000000..291f2eb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_012.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_013.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_013.png new file mode 100644 index 0000000..55b24ff Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_013.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_014.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_014.png new file mode 100644 index 0000000..7798943 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_014.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_015.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_015.png new file mode 100644 index 0000000..9fb16e1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_015.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_016.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_016.png new file mode 100644 index 0000000..01f773e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_016.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_017.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_017.png new file mode 100644 index 0000000..d0cd580 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_017.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_018.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_018.png new file mode 100644 index 0000000..10e947d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_018.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_019.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_019.png new file mode 100644 index 0000000..d514efd Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_019.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_000.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_000.png new file mode 100644 index 0000000..b183f5b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_000.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_001.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_001.png new file mode 100644 index 0000000..1164166 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_001.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_002.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_002.png new file mode 100644 index 0000000..15d1daf Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_002.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_003.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_003.png new file mode 100644 index 0000000..abd5f23 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_003.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_004.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_004.png new file mode 100644 index 0000000..4d7e77c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_004.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_005.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_005.png new file mode 100644 index 0000000..b425104 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_005.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_006.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_006.png new file mode 100644 index 0000000..416b6b9 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_006.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_007.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_007.png new file mode 100644 index 0000000..7a2c8be Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_007.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_008.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_008.png new file mode 100644 index 0000000..01100e3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_008.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_009.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_009.png new file mode 100644 index 0000000..91f587d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_009.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_010.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_010.png new file mode 100644 index 0000000..be32eb0 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_010.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_011.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_011.png new file mode 100644 index 0000000..103fae8 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_011.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_012.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_012.png new file mode 100644 index 0000000..7054bea Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_012.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_013.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_013.png new file mode 100644 index 0000000..50658b3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_013.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_014.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_014.png new file mode 100644 index 0000000..cc11990 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_014.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_015.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_015.png new file mode 100644 index 0000000..f42e473 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_015.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_016.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_016.png new file mode 100644 index 0000000..e91d3e9 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_016.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_017.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_017.png new file mode 100644 index 0000000..2c5ac88 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_017.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_018.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_018.png new file mode 100644 index 0000000..622122e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_018.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_019.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_019.png new file mode 100644 index 0000000..bd75a52 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_back_019.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_000.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_000.png new file mode 100644 index 0000000..9a1d6bb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_000.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_001.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_001.png new file mode 100644 index 0000000..c43abd0 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_001.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_002.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_002.png new file mode 100644 index 0000000..5667472 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_002.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_003.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_003.png new file mode 100644 index 0000000..2564e37 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_003.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_004.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_004.png new file mode 100644 index 0000000..4ca7b39 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_004.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_005.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_005.png new file mode 100644 index 0000000..2a880f1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_005.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_006.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_006.png new file mode 100644 index 0000000..186a459 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_006.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_007.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_007.png new file mode 100644 index 0000000..9c33d55 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_007.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_008.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_008.png new file mode 100644 index 0000000..97fd3dc Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_008.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_009.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_009.png new file mode 100644 index 0000000..a4678ab Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_009.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_010.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_010.png new file mode 100644 index 0000000..c0de9ec Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_010.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_011.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_011.png new file mode 100644 index 0000000..8c93b64 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_011.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_012.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_012.png new file mode 100644 index 0000000..296a888 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_012.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_013.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_013.png new file mode 100644 index 0000000..c013733 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_013.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_014.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_014.png new file mode 100644 index 0000000..acbbc10 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_014.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_015.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_015.png new file mode 100644 index 0000000..a4fa934 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_015.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_016.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_016.png new file mode 100644 index 0000000..0d148f5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_016.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_017.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_017.png new file mode 100644 index 0000000..814571f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_017.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_018.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_018.png new file mode 100644 index 0000000..edae924 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_018.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_019.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_019.png new file mode 100644 index 0000000..84ec4d4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_front_facing_019.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_000.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_000.png new file mode 100644 index 0000000..684a99c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_000.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_001.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_001.png new file mode 100644 index 0000000..29ab50b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_001.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_002.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_002.png new file mode 100644 index 0000000..8db425c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_002.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_003.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_003.png new file mode 100644 index 0000000..1b368ae Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_003.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_004.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_004.png new file mode 100644 index 0000000..2ff01a3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_004.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_005.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_005.png new file mode 100644 index 0000000..aa26148 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_005.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_006.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_006.png new file mode 100644 index 0000000..46c7948 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_006.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_007.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_007.png new file mode 100644 index 0000000..d3d7167 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_007.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_008.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_008.png new file mode 100644 index 0000000..2abc2b2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_008.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_009.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_009.png new file mode 100644 index 0000000..412b9ef Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_009.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_010.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_010.png new file mode 100644 index 0000000..b196d9b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_010.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_011.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_011.png new file mode 100644 index 0000000..493caeb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_011.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_012.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_012.png new file mode 100644 index 0000000..24bcc7b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_012.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_013.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_013.png new file mode 100644 index 0000000..278e521 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_013.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_014.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_014.png new file mode 100644 index 0000000..da0a97f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_014.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_015.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_015.png new file mode 100644 index 0000000..301f75e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_idle_on_ladder_015.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_000.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_000.png new file mode 100644 index 0000000..7fae992 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_000.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_001.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_001.png new file mode 100644 index 0000000..009eaf2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_001.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_002.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_002.png new file mode 100644 index 0000000..6763088 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_002.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_003.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_003.png new file mode 100644 index 0000000..fbff9a7 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_003.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_004.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_004.png new file mode 100644 index 0000000..3a73923 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_004.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_005.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_005.png new file mode 100644 index 0000000..d535f3d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_005.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_006.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_006.png new file mode 100644 index 0000000..a6420a1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_006.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_007.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_007.png new file mode 100644 index 0000000..e99175e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_007.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_008.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_008.png new file mode 100644 index 0000000..9a78b80 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_008.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_009.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_009.png new file mode 100644 index 0000000..3e23354 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_jump_009.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_ladder_climb_000.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_ladder_climb_000.png new file mode 100644 index 0000000..621e69a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_ladder_climb_000.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_ladder_climb_001.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_ladder_climb_001.png new file mode 100644 index 0000000..01d311d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_ladder_climb_001.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_ladder_climb_002.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_ladder_climb_002.png new file mode 100644 index 0000000..cff4b2c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_ladder_climb_002.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_ladder_climb_003.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_ladder_climb_003.png new file mode 100644 index 0000000..eb3f185 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_ladder_climb_003.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_ladder_climb_004.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_ladder_climb_004.png new file mode 100644 index 0000000..215a142 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_ladder_climb_004.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_ladder_climb_005.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_ladder_climb_005.png new file mode 100644 index 0000000..89c3896 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_ladder_climb_005.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_ladder_climb_006.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_ladder_climb_006.png new file mode 100644 index 0000000..23cbf68 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_ladder_climb_006.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_ladder_climb_007.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_ladder_climb_007.png new file mode 100644 index 0000000..d3320f2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_ladder_climb_007.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_pull_000.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_pull_000.png new file mode 100644 index 0000000..b030753 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_pull_000.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_pull_001.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_pull_001.png new file mode 100644 index 0000000..f516c69 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_pull_001.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_pull_002.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_pull_002.png new file mode 100644 index 0000000..a3198f9 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_pull_002.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_pull_003.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_pull_003.png new file mode 100644 index 0000000..02d0b66 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_pull_003.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_pull_004.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_pull_004.png new file mode 100644 index 0000000..6b82a33 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_pull_004.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_pull_005.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_pull_005.png new file mode 100644 index 0000000..837779e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_pull_005.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_pull_006.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_pull_006.png new file mode 100644 index 0000000..fba14c0 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_pull_006.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_pull_007.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_pull_007.png new file mode 100644 index 0000000..2077dc7 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_pull_007.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_push_000.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_push_000.png new file mode 100644 index 0000000..3339abb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_push_000.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_push_001.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_push_001.png new file mode 100644 index 0000000..7585c92 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_push_001.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_push_002.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_push_002.png new file mode 100644 index 0000000..b8dafe5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_push_002.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_push_003.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_push_003.png new file mode 100644 index 0000000..91771e0 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_push_003.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_push_004.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_push_004.png new file mode 100644 index 0000000..c0aa557 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_push_004.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_push_005.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_push_005.png new file mode 100644 index 0000000..78c9c1e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_push_005.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_push_006.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_push_006.png new file mode 100644 index 0000000..7a4ff9a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_push_006.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_push_007.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_push_007.png new file mode 100644 index 0000000..b87364d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_push_007.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_run_000.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_run_000.png new file mode 100644 index 0000000..01de034 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_run_000.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_run_001.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_run_001.png new file mode 100644 index 0000000..9e7c19f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_run_001.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_run_002.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_run_002.png new file mode 100644 index 0000000..1c68414 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_run_002.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_run_003.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_run_003.png new file mode 100644 index 0000000..2fa3c4d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_run_003.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_run_004.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_run_004.png new file mode 100644 index 0000000..f404ac3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_run_004.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_run_005.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_run_005.png new file mode 100644 index 0000000..6ed910f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_run_005.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_run_006.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_run_006.png new file mode 100644 index 0000000..257084e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_run_006.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_run_007.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_run_007.png new file mode 100644 index 0000000..8f17682 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_run_007.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_shoot_000.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_shoot_000.png new file mode 100644 index 0000000..a57d4a6 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_shoot_000.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_shoot_001.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_shoot_001.png new file mode 100644 index 0000000..7384c79 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_shoot_001.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_shoot_002.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_shoot_002.png new file mode 100644 index 0000000..e550a6f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_shoot_002.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_shoot_003.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_shoot_003.png new file mode 100644 index 0000000..17bc7aa Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_shoot_003.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_shoot_004.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_shoot_004.png new file mode 100644 index 0000000..7b8dd71 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_shoot_004.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_throw_something_000.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_throw_something_000.png new file mode 100644 index 0000000..6cd2d65 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_throw_something_000.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_throw_something_001.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_throw_something_001.png new file mode 100644 index 0000000..76bb711 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_throw_something_001.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_throw_something_002.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_throw_something_002.png new file mode 100644 index 0000000..58a91e4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_throw_something_002.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_throw_something_003.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_throw_something_003.png new file mode 100644 index 0000000..d798e9f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_throw_something_003.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_throw_something_004.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_throw_something_004.png new file mode 100644 index 0000000..ecd4465 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_throw_something_004.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_throw_something_005.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_throw_something_005.png new file mode 100644 index 0000000..9d2385e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_throw_something_005.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_throw_something_006.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_throw_something_006.png new file mode 100644 index 0000000..876fe89 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_throw_something_006.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_throw_something_007.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_throw_something_007.png new file mode 100644 index 0000000..01dd22f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_throw_something_007.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_use_pickaxe_000.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_use_pickaxe_000.png new file mode 100644 index 0000000..7fae992 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_use_pickaxe_000.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_use_pickaxe_001.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_use_pickaxe_001.png new file mode 100644 index 0000000..f543918 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_use_pickaxe_001.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_use_pickaxe_002.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_use_pickaxe_002.png new file mode 100644 index 0000000..a319431 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_use_pickaxe_002.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_use_pickaxe_003.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_use_pickaxe_003.png new file mode 100644 index 0000000..09fff6b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_use_pickaxe_003.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_use_pickaxe_004.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_use_pickaxe_004.png new file mode 100644 index 0000000..53cf28a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_use_pickaxe_004.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_use_pickaxe_005.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_use_pickaxe_005.png new file mode 100644 index 0000000..31b3dd8 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_use_pickaxe_005.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_use_pickaxe_006.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_use_pickaxe_006.png new file mode 100644 index 0000000..5fe5dc4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_use_pickaxe_006.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_000.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_000.png new file mode 100644 index 0000000..d140843 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_000.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_001.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_001.png new file mode 100644 index 0000000..6a29a37 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_001.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_002.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_002.png new file mode 100644 index 0000000..72812e8 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_002.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_003.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_003.png new file mode 100644 index 0000000..51b8fe8 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_003.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_004.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_004.png new file mode 100644 index 0000000..192a30d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_004.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_005.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_005.png new file mode 100644 index 0000000..b600d05 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_005.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_006.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_006.png new file mode 100644 index 0000000..690902e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_006.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_007.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_007.png new file mode 100644 index 0000000..ba777bb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_007.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_008.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_008.png new file mode 100644 index 0000000..5c8711c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_008.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_009.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_009.png new file mode 100644 index 0000000..fa48b5d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_vertical_slide_009.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_000.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_000.png new file mode 100644 index 0000000..8ace7b2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_000.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_001.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_001.png new file mode 100644 index 0000000..dc8ce6c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_001.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_002.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_002.png new file mode 100644 index 0000000..53ef189 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_002.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_003.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_003.png new file mode 100644 index 0000000..a27ec47 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_003.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_004.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_004.png new file mode 100644 index 0000000..10dfa01 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_004.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_005.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_005.png new file mode 100644 index 0000000..0b20f49 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_005.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_006.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_006.png new file mode 100644 index 0000000..d600a3e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_006.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_007.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_007.png new file mode 100644 index 0000000..2eabbcf Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_007.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_backward_000.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_backward_000.png new file mode 100644 index 0000000..faa8573 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_backward_000.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_backward_001.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_backward_001.png new file mode 100644 index 0000000..53f9362 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_backward_001.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_backward_002.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_backward_002.png new file mode 100644 index 0000000..ccefde2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_backward_002.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_backward_003.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_backward_003.png new file mode 100644 index 0000000..6c1b8f5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_backward_003.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_backward_004.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_backward_004.png new file mode 100644 index 0000000..31cb376 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_backward_004.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_backward_005.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_backward_005.png new file mode 100644 index 0000000..3b98efe Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_backward_005.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_backward_006.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_backward_006.png new file mode 100644 index 0000000..4aada9a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_backward_006.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_backward_007.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_backward_007.png new file mode 100644 index 0000000..9c7376a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_backward_007.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_forward_facing_000.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_forward_facing_000.png new file mode 100644 index 0000000..eb4e5c2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_forward_facing_000.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_forward_facing_001.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_forward_facing_001.png new file mode 100644 index 0000000..ff14b10 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_forward_facing_001.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_forward_facing_002.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_forward_facing_002.png new file mode 100644 index 0000000..dce0509 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_forward_facing_002.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_forward_facing_003.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_forward_facing_003.png new file mode 100644 index 0000000..582b6a5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_forward_facing_003.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_forward_facing_004.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_forward_facing_004.png new file mode 100644 index 0000000..a85ff3f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_forward_facing_004.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_forward_facing_005.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_forward_facing_005.png new file mode 100644 index 0000000..8d4423e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_forward_facing_005.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_forward_facing_006.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_forward_facing_006.png new file mode 100644 index 0000000..3ab19e8 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_forward_facing_006.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_forward_facing_007.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_forward_facing_007.png new file mode 100644 index 0000000..5475343 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_walk_forward_facing_007.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_000.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_000.png new file mode 100644 index 0000000..4f484e4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_000.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_001.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_001.png new file mode 100644 index 0000000..0b32331 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_001.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_002.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_002.png new file mode 100644 index 0000000..1127a5e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_002.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_003.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_003.png new file mode 100644 index 0000000..0bcaaa9 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_003.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_004.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_004.png new file mode 100644 index 0000000..42201cf Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_004.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_005.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_005.png new file mode 100644 index 0000000..614767a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_005.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_006.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_006.png new file mode 100644 index 0000000..5a18b89 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_006.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_007.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_007.png new file mode 100644 index 0000000..27895e0 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_007.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_008.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_008.png new file mode 100644 index 0000000..5cfa66b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_008.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_009.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_009.png new file mode 100644 index 0000000..d5e9be7 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_009.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_010.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_010.png new file mode 100644 index 0000000..b35130a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_010.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_011.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_011.png new file mode 100644 index 0000000..105aff1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_011.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_012.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_012.png new file mode 100644 index 0000000..f11f56c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_012.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_013.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_013.png new file mode 100644 index 0000000..d2bb528 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_013.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_014.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_014.png new file mode 100644 index 0000000..9629e00 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_014.png differ diff --git a/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_015.png b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_015.png new file mode 100644 index 0000000..61657bf Binary files /dev/null and b/images/superjozino/assets/player/keyframes/old_miner/__old_miner_whacked_015.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_000.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_000.png new file mode 100644 index 0000000..b979b34 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_001.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_001.png new file mode 100644 index 0000000..b979b34 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_002.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_002.png new file mode 100644 index 0000000..b979b34 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_003.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_003.png new file mode 100644 index 0000000..b979b34 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_004.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_004.png new file mode 100644 index 0000000..b979b34 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_005.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_005.png new file mode 100644 index 0000000..b979b34 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_006.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_006.png new file mode 100644 index 0000000..b979b34 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_007.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_007.png new file mode 100644 index 0000000..b979b34 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_008.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_008.png new file mode 100644 index 0000000..b979b34 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_008.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_009.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_009.png new file mode 100644 index 0000000..b979b34 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_back_facing_009.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_000.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_000.png new file mode 100644 index 0000000..2fc7616 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_001.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_001.png new file mode 100644 index 0000000..2fc7616 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_002.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_002.png new file mode 100644 index 0000000..2fc7616 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_003.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_003.png new file mode 100644 index 0000000..2fc7616 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_004.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_004.png new file mode 100644 index 0000000..2fc7616 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_005.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_005.png new file mode 100644 index 0000000..2fc7616 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_006.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_006.png new file mode 100644 index 0000000..2fc7616 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_007.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_007.png new file mode 100644 index 0000000..2fc7616 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_008.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_008.png new file mode 100644 index 0000000..2fc7616 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_008.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_009.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_009.png new file mode 100644 index 0000000..2fc7616 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_front_facing_009.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_000.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_000.png new file mode 100644 index 0000000..f14ac9c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_001.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_001.png new file mode 100644 index 0000000..f14ac9c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_002.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_002.png new file mode 100644 index 0000000..f14ac9c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_003.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_003.png new file mode 100644 index 0000000..f14ac9c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_004.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_004.png new file mode 100644 index 0000000..f14ac9c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_005.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_005.png new file mode 100644 index 0000000..f14ac9c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_006.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_006.png new file mode 100644 index 0000000..f14ac9c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_007.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_007.png new file mode 100644 index 0000000..f14ac9c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_008.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_008.png new file mode 100644 index 0000000..f14ac9c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_008.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_009.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_009.png new file mode 100644 index 0000000..f14ac9c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_base_side_facing_009.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_crouch_000.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_crouch_000.png new file mode 100644 index 0000000..bf4b1f5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_crouch_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_crouch_001.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_crouch_001.png new file mode 100644 index 0000000..1417c3f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_crouch_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_crouch_002.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_crouch_002.png new file mode 100644 index 0000000..25fd0b1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_crouch_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_crouch_003.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_crouch_003.png new file mode 100644 index 0000000..25fd0b1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_crouch_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_crouch_004.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_crouch_004.png new file mode 100644 index 0000000..0172939 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_crouch_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_crouch_005.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_crouch_005.png new file mode 100644 index 0000000..cfaba07 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_crouch_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_defend_000.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_defend_000.png new file mode 100644 index 0000000..f14ac9c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_defend_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_defend_001.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_defend_001.png new file mode 100644 index 0000000..abe2704 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_defend_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_defend_002.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_defend_002.png new file mode 100644 index 0000000..a5a6c77 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_defend_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_defend_003.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_defend_003.png new file mode 100644 index 0000000..1bf1058 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_defend_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_defend_004.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_defend_004.png new file mode 100644 index 0000000..3bc8320 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_defend_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_die_000.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_die_000.png new file mode 100644 index 0000000..bf4b1f5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_die_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_die_001.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_die_001.png new file mode 100644 index 0000000..0a3372a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_die_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_die_002.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_die_002.png new file mode 100644 index 0000000..ef4c187 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_die_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_die_003.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_die_003.png new file mode 100644 index 0000000..db0f1bd Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_die_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_die_004.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_die_004.png new file mode 100644 index 0000000..7825c72 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_die_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_dig_000.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_dig_000.png new file mode 100644 index 0000000..cc15d04 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_dig_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_dig_001.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_dig_001.png new file mode 100644 index 0000000..dafc6fe Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_dig_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_dig_002.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_dig_002.png new file mode 100644 index 0000000..b40a89b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_dig_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_dig_003.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_dig_003.png new file mode 100644 index 0000000..20c844e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_dig_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_dig_004.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_dig_004.png new file mode 100644 index 0000000..defe2d2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_dig_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_dig_005.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_dig_005.png new file mode 100644 index 0000000..2b7bb1c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_dig_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_dig_006.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_dig_006.png new file mode 100644 index 0000000..110b85c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_dig_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_dig_007.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_dig_007.png new file mode 100644 index 0000000..fbf97f7 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_dig_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_000.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_000.png new file mode 100644 index 0000000..0970348 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_001.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_001.png new file mode 100644 index 0000000..8078d45 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_002.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_002.png new file mode 100644 index 0000000..f00a71a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_003.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_003.png new file mode 100644 index 0000000..c2e56dc Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_004.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_004.png new file mode 100644 index 0000000..d83edf9 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_005.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_005.png new file mode 100644 index 0000000..ea0d9d0 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_006.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_006.png new file mode 100644 index 0000000..2df996a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_007.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_007.png new file mode 100644 index 0000000..cfeb81f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_008.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_008.png new file mode 100644 index 0000000..b922c54 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_008.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_009.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_009.png new file mode 100644 index 0000000..d34b69a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_falling_009.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_000.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_000.png new file mode 100644 index 0000000..3c2dede Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_001.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_001.png new file mode 100644 index 0000000..d1babc0 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_002.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_002.png new file mode 100644 index 0000000..848b48e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_003.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_003.png new file mode 100644 index 0000000..d91f86a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_004.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_004.png new file mode 100644 index 0000000..3a09798 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_005.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_005.png new file mode 100644 index 0000000..0c1eac1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_006.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_006.png new file mode 100644 index 0000000..98e03ca Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_007.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_007.png new file mode 100644 index 0000000..215ba43 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_008.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_008.png new file mode 100644 index 0000000..362fd9c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_008.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_009.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_009.png new file mode 100644 index 0000000..09fe489 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_horizontal_slide_009.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_hurt_000.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_hurt_000.png new file mode 100644 index 0000000..5af3d8e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_hurt_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_hurt_001.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_hurt_001.png new file mode 100644 index 0000000..9f0dbcc Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_hurt_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_hurt_002.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_hurt_002.png new file mode 100644 index 0000000..d339687 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_hurt_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_hurt_003.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_hurt_003.png new file mode 100644 index 0000000..96a47d1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_hurt_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_hurt_004.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_hurt_004.png new file mode 100644 index 0000000..c7af363 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_hurt_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_000.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_000.png new file mode 100644 index 0000000..f14ac9c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_001.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_001.png new file mode 100644 index 0000000..a7c8640 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_002.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_002.png new file mode 100644 index 0000000..4043247 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_003.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_003.png new file mode 100644 index 0000000..ad3151f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_004.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_004.png new file mode 100644 index 0000000..4eac3c1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_005.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_005.png new file mode 100644 index 0000000..1edd136 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_006.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_006.png new file mode 100644 index 0000000..4ed4fe0 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_007.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_007.png new file mode 100644 index 0000000..b4017a5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_008.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_008.png new file mode 100644 index 0000000..8716171 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_008.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_009.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_009.png new file mode 100644 index 0000000..ff35c0e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_009.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_010.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_010.png new file mode 100644 index 0000000..03c3d63 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_010.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_011.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_011.png new file mode 100644 index 0000000..9a7ab6a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_011.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_012.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_012.png new file mode 100644 index 0000000..436eb37 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_012.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_013.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_013.png new file mode 100644 index 0000000..b11a764 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_013.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_014.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_014.png new file mode 100644 index 0000000..ac54bcc Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_014.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_015.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_015.png new file mode 100644 index 0000000..322dc4d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_015.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_016.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_016.png new file mode 100644 index 0000000..8bdb301 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_016.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_017.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_017.png new file mode 100644 index 0000000..01da0e6 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_017.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_018.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_018.png new file mode 100644 index 0000000..57ace53 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_018.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_019.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_019.png new file mode 100644 index 0000000..b590a9c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_019.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_000.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_000.png new file mode 100644 index 0000000..b979b34 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_001.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_001.png new file mode 100644 index 0000000..97cda29 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_002.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_002.png new file mode 100644 index 0000000..260b19a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_003.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_003.png new file mode 100644 index 0000000..b6ea396 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_004.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_004.png new file mode 100644 index 0000000..2ab9e67 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_005.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_005.png new file mode 100644 index 0000000..be60fff Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_006.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_006.png new file mode 100644 index 0000000..e79e4f1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_007.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_007.png new file mode 100644 index 0000000..9f2a051 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_008.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_008.png new file mode 100644 index 0000000..aa41afd Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_008.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_009.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_009.png new file mode 100644 index 0000000..9236519 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_009.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_010.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_010.png new file mode 100644 index 0000000..4a876d2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_010.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_011.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_011.png new file mode 100644 index 0000000..8723630 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_011.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_012.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_012.png new file mode 100644 index 0000000..4d7d387 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_012.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_013.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_013.png new file mode 100644 index 0000000..5516d24 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_013.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_014.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_014.png new file mode 100644 index 0000000..56c9543 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_014.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_015.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_015.png new file mode 100644 index 0000000..c2085bf Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_015.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_016.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_016.png new file mode 100644 index 0000000..f3f10ae Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_016.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_017.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_017.png new file mode 100644 index 0000000..a1fb00c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_017.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_018.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_018.png new file mode 100644 index 0000000..c840821 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_018.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_019.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_019.png new file mode 100644 index 0000000..d44e820 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_back_019.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_000.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_000.png new file mode 100644 index 0000000..2fc7616 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_001.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_001.png new file mode 100644 index 0000000..07c0266 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_002.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_002.png new file mode 100644 index 0000000..06c7d7e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_003.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_003.png new file mode 100644 index 0000000..780af1d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_004.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_004.png new file mode 100644 index 0000000..682b397 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_005.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_005.png new file mode 100644 index 0000000..e18dd31 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_006.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_006.png new file mode 100644 index 0000000..c60dd3c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_007.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_007.png new file mode 100644 index 0000000..4f4e28a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_008.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_008.png new file mode 100644 index 0000000..9a9e23b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_008.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_009.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_009.png new file mode 100644 index 0000000..9c14558 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_009.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_010.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_010.png new file mode 100644 index 0000000..5e62d49 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_010.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_011.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_011.png new file mode 100644 index 0000000..bddbb57 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_011.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_012.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_012.png new file mode 100644 index 0000000..ee5daca Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_012.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_013.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_013.png new file mode 100644 index 0000000..ea37c70 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_013.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_014.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_014.png new file mode 100644 index 0000000..5e9ddd4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_014.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_015.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_015.png new file mode 100644 index 0000000..5626238 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_015.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_016.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_016.png new file mode 100644 index 0000000..c1f3da2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_016.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_017.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_017.png new file mode 100644 index 0000000..5b98eff Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_017.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_018.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_018.png new file mode 100644 index 0000000..2cc2a4e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_018.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_019.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_019.png new file mode 100644 index 0000000..5ee29ce Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_front_facing_019.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_000.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_000.png new file mode 100644 index 0000000..95c9dc1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_001.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_001.png new file mode 100644 index 0000000..d9c15c2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_002.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_002.png new file mode 100644 index 0000000..97c6a58 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_003.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_003.png new file mode 100644 index 0000000..84fe441 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_004.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_004.png new file mode 100644 index 0000000..f39a2e5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_005.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_005.png new file mode 100644 index 0000000..2a107b3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_006.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_006.png new file mode 100644 index 0000000..2f46244 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_007.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_007.png new file mode 100644 index 0000000..8a469d3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_008.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_008.png new file mode 100644 index 0000000..a569773 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_008.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_009.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_009.png new file mode 100644 index 0000000..6028f71 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_009.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_010.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_010.png new file mode 100644 index 0000000..a39aa5f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_010.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_011.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_011.png new file mode 100644 index 0000000..a69546c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_011.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_012.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_012.png new file mode 100644 index 0000000..8d1d9ba Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_012.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_013.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_013.png new file mode 100644 index 0000000..21fd52d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_013.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_014.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_014.png new file mode 100644 index 0000000..c6197b3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_014.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_015.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_015.png new file mode 100644 index 0000000..5793bf4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_idle_on_ladder_015.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_000.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_000.png new file mode 100644 index 0000000..bf4b1f5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_001.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_001.png new file mode 100644 index 0000000..ecd3472 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_002.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_002.png new file mode 100644 index 0000000..a48d3ff Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_003.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_003.png new file mode 100644 index 0000000..d686013 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_004.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_004.png new file mode 100644 index 0000000..20e3dff Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_005.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_005.png new file mode 100644 index 0000000..7dfb432 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_006.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_006.png new file mode 100644 index 0000000..f9cfa57 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_007.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_007.png new file mode 100644 index 0000000..7a5b31c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_008.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_008.png new file mode 100644 index 0000000..e10a6db Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_008.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_009.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_009.png new file mode 100644 index 0000000..e880d7a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_jump_009.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_ladder_climb_000.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_ladder_climb_000.png new file mode 100644 index 0000000..fc33b89 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_ladder_climb_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_ladder_climb_001.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_ladder_climb_001.png new file mode 100644 index 0000000..e6c3e13 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_ladder_climb_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_ladder_climb_002.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_ladder_climb_002.png new file mode 100644 index 0000000..1f6094c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_ladder_climb_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_ladder_climb_003.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_ladder_climb_003.png new file mode 100644 index 0000000..d5d3e05 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_ladder_climb_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_ladder_climb_004.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_ladder_climb_004.png new file mode 100644 index 0000000..63c31fc Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_ladder_climb_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_ladder_climb_005.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_ladder_climb_005.png new file mode 100644 index 0000000..e3ef1fa Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_ladder_climb_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_ladder_climb_006.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_ladder_climb_006.png new file mode 100644 index 0000000..e7b6c57 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_ladder_climb_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_ladder_climb_007.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_ladder_climb_007.png new file mode 100644 index 0000000..50cf7e3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_ladder_climb_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_pull_000.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_pull_000.png new file mode 100644 index 0000000..767d661 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_pull_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_pull_001.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_pull_001.png new file mode 100644 index 0000000..6b2d213 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_pull_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_pull_002.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_pull_002.png new file mode 100644 index 0000000..7be4cea Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_pull_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_pull_003.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_pull_003.png new file mode 100644 index 0000000..da672ed Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_pull_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_pull_004.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_pull_004.png new file mode 100644 index 0000000..27ae8d2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_pull_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_pull_005.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_pull_005.png new file mode 100644 index 0000000..fb6be14 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_pull_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_pull_006.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_pull_006.png new file mode 100644 index 0000000..57c1483 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_pull_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_pull_007.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_pull_007.png new file mode 100644 index 0000000..4bc48af Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_pull_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_push_000.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_push_000.png new file mode 100644 index 0000000..cea83ee Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_push_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_push_001.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_push_001.png new file mode 100644 index 0000000..36dc438 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_push_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_push_002.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_push_002.png new file mode 100644 index 0000000..72453a8 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_push_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_push_003.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_push_003.png new file mode 100644 index 0000000..803a5ec Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_push_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_push_004.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_push_004.png new file mode 100644 index 0000000..04d8d0b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_push_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_push_005.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_push_005.png new file mode 100644 index 0000000..a720be2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_push_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_push_006.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_push_006.png new file mode 100644 index 0000000..3ae7531 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_push_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_push_007.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_push_007.png new file mode 100644 index 0000000..d42917c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_push_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_run_000.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_run_000.png new file mode 100644 index 0000000..768ebbe Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_run_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_run_001.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_run_001.png new file mode 100644 index 0000000..404f4fe Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_run_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_run_002.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_run_002.png new file mode 100644 index 0000000..41347e3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_run_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_run_003.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_run_003.png new file mode 100644 index 0000000..866347b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_run_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_run_004.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_run_004.png new file mode 100644 index 0000000..4c73485 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_run_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_run_005.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_run_005.png new file mode 100644 index 0000000..9a027e1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_run_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_run_006.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_run_006.png new file mode 100644 index 0000000..d718e00 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_run_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_run_007.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_run_007.png new file mode 100644 index 0000000..a88c7d0 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_run_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_shoot_000.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_shoot_000.png new file mode 100644 index 0000000..4846d5e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_shoot_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_shoot_001.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_shoot_001.png new file mode 100644 index 0000000..50e0a0b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_shoot_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_shoot_002.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_shoot_002.png new file mode 100644 index 0000000..84c0123 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_shoot_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_shoot_003.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_shoot_003.png new file mode 100644 index 0000000..9a47475 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_shoot_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_shoot_004.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_shoot_004.png new file mode 100644 index 0000000..77cf168 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_shoot_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_throw_something_000.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_throw_something_000.png new file mode 100644 index 0000000..5362b42 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_throw_something_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_throw_something_001.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_throw_something_001.png new file mode 100644 index 0000000..448dd8c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_throw_something_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_throw_something_002.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_throw_something_002.png new file mode 100644 index 0000000..4df619b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_throw_something_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_throw_something_003.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_throw_something_003.png new file mode 100644 index 0000000..a8acadb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_throw_something_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_throw_something_004.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_throw_something_004.png new file mode 100644 index 0000000..2bff9b4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_throw_something_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_throw_something_005.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_throw_something_005.png new file mode 100644 index 0000000..d1663e8 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_throw_something_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_throw_something_006.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_throw_something_006.png new file mode 100644 index 0000000..35f3584 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_throw_something_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_throw_something_007.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_throw_something_007.png new file mode 100644 index 0000000..2480506 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_throw_something_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_use_pickaxe_000.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_use_pickaxe_000.png new file mode 100644 index 0000000..bf4b1f5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_use_pickaxe_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_use_pickaxe_001.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_use_pickaxe_001.png new file mode 100644 index 0000000..a771a65 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_use_pickaxe_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_use_pickaxe_002.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_use_pickaxe_002.png new file mode 100644 index 0000000..633ffdd Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_use_pickaxe_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_use_pickaxe_003.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_use_pickaxe_003.png new file mode 100644 index 0000000..91b6b20 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_use_pickaxe_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_use_pickaxe_004.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_use_pickaxe_004.png new file mode 100644 index 0000000..1f20643 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_use_pickaxe_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_use_pickaxe_005.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_use_pickaxe_005.png new file mode 100644 index 0000000..9713655 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_use_pickaxe_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_use_pickaxe_006.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_use_pickaxe_006.png new file mode 100644 index 0000000..997c34f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_use_pickaxe_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_000.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_000.png new file mode 100644 index 0000000..d805bc3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_001.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_001.png new file mode 100644 index 0000000..64fa145 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_002.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_002.png new file mode 100644 index 0000000..26b5fcb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_003.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_003.png new file mode 100644 index 0000000..e3a39ef Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_004.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_004.png new file mode 100644 index 0000000..77b3946 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_005.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_005.png new file mode 100644 index 0000000..d79553a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_006.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_006.png new file mode 100644 index 0000000..7580f1d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_007.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_007.png new file mode 100644 index 0000000..c760a5d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_008.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_008.png new file mode 100644 index 0000000..e4b130f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_008.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_009.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_009.png new file mode 100644 index 0000000..9e5d211 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_vertical_slide_009.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_000.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_000.png new file mode 100644 index 0000000..55d9fb2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_001.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_001.png new file mode 100644 index 0000000..494774f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_002.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_002.png new file mode 100644 index 0000000..5f582a2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_003.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_003.png new file mode 100644 index 0000000..a068b1c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_004.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_004.png new file mode 100644 index 0000000..1ea68da Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_005.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_005.png new file mode 100644 index 0000000..52961f4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_006.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_006.png new file mode 100644 index 0000000..eaeb18e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_007.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_007.png new file mode 100644 index 0000000..6dff85b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_backward_000.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_backward_000.png new file mode 100644 index 0000000..a2ef86a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_backward_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_backward_001.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_backward_001.png new file mode 100644 index 0000000..3bbc12b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_backward_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_backward_002.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_backward_002.png new file mode 100644 index 0000000..2eb4e47 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_backward_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_backward_003.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_backward_003.png new file mode 100644 index 0000000..2f32588 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_backward_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_backward_004.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_backward_004.png new file mode 100644 index 0000000..6a2caa1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_backward_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_backward_005.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_backward_005.png new file mode 100644 index 0000000..e70440d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_backward_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_backward_006.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_backward_006.png new file mode 100644 index 0000000..da1e10e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_backward_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_backward_007.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_backward_007.png new file mode 100644 index 0000000..182beab Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_backward_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_forward_facing_000.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_forward_facing_000.png new file mode 100644 index 0000000..64e5c1b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_forward_facing_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_forward_facing_001.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_forward_facing_001.png new file mode 100644 index 0000000..c4d3343 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_forward_facing_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_forward_facing_002.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_forward_facing_002.png new file mode 100644 index 0000000..ae1cb01 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_forward_facing_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_forward_facing_003.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_forward_facing_003.png new file mode 100644 index 0000000..5afa5ea Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_forward_facing_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_forward_facing_004.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_forward_facing_004.png new file mode 100644 index 0000000..16d0168 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_forward_facing_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_forward_facing_005.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_forward_facing_005.png new file mode 100644 index 0000000..f295fab Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_forward_facing_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_forward_facing_006.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_forward_facing_006.png new file mode 100644 index 0000000..eee72c2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_forward_facing_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_forward_facing_007.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_forward_facing_007.png new file mode 100644 index 0000000..8eb3d2a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_walk_forward_facing_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_000.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_000.png new file mode 100644 index 0000000..60d150e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_001.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_001.png new file mode 100644 index 0000000..e563931 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_002.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_002.png new file mode 100644 index 0000000..1e00812 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_003.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_003.png new file mode 100644 index 0000000..3da8163 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_004.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_004.png new file mode 100644 index 0000000..1198172 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_005.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_005.png new file mode 100644 index 0000000..5e54671 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_006.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_006.png new file mode 100644 index 0000000..717743a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_007.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_007.png new file mode 100644 index 0000000..f918458 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_008.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_008.png new file mode 100644 index 0000000..8be6f1f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_008.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_009.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_009.png new file mode 100644 index 0000000..9cd49a2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_009.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_010.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_010.png new file mode 100644 index 0000000..76d6d72 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_010.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_011.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_011.png new file mode 100644 index 0000000..a233a95 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_011.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_012.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_012.png new file mode 100644 index 0000000..36f8f5a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_012.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_013.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_013.png new file mode 100644 index 0000000..bc39aae Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_013.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_014.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_014.png new file mode 100644 index 0000000..c20e29b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_014.png differ diff --git a/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_015.png b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_015.png new file mode 100644 index 0000000..8486310 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_head_miner/__miner_whacked_015.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_000.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_000.png new file mode 100644 index 0000000..b203662 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_001.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_001.png new file mode 100644 index 0000000..b203662 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_002.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_002.png new file mode 100644 index 0000000..b203662 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_003.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_003.png new file mode 100644 index 0000000..b203662 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_004.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_004.png new file mode 100644 index 0000000..b203662 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_005.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_005.png new file mode 100644 index 0000000..b203662 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_006.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_006.png new file mode 100644 index 0000000..b203662 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_007.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_007.png new file mode 100644 index 0000000..b203662 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_008.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_008.png new file mode 100644 index 0000000..b203662 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_008.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_009.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_009.png new file mode 100644 index 0000000..b203662 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_back_facing_009.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_000.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_000.png new file mode 100644 index 0000000..1c4eb39 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_001.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_001.png new file mode 100644 index 0000000..1c4eb39 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_002.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_002.png new file mode 100644 index 0000000..1c4eb39 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_003.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_003.png new file mode 100644 index 0000000..1c4eb39 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_004.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_004.png new file mode 100644 index 0000000..1c4eb39 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_005.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_005.png new file mode 100644 index 0000000..1c4eb39 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_006.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_006.png new file mode 100644 index 0000000..1c4eb39 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_007.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_007.png new file mode 100644 index 0000000..1c4eb39 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_008.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_008.png new file mode 100644 index 0000000..1c4eb39 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_008.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_009.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_009.png new file mode 100644 index 0000000..1c4eb39 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_front_facing_009.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_000.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_000.png new file mode 100644 index 0000000..348701a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_001.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_001.png new file mode 100644 index 0000000..348701a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_002.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_002.png new file mode 100644 index 0000000..348701a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_003.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_003.png new file mode 100644 index 0000000..348701a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_004.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_004.png new file mode 100644 index 0000000..348701a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_005.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_005.png new file mode 100644 index 0000000..348701a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_006.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_006.png new file mode 100644 index 0000000..348701a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_007.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_007.png new file mode 100644 index 0000000..348701a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_008.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_008.png new file mode 100644 index 0000000..348701a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_008.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_009.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_009.png new file mode 100644 index 0000000..348701a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_base_side_facing_009.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_crouch_000.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_crouch_000.png new file mode 100644 index 0000000..2cec0c1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_crouch_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_crouch_001.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_crouch_001.png new file mode 100644 index 0000000..8a6196d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_crouch_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_crouch_002.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_crouch_002.png new file mode 100644 index 0000000..32820a2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_crouch_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_crouch_003.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_crouch_003.png new file mode 100644 index 0000000..32820a2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_crouch_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_crouch_004.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_crouch_004.png new file mode 100644 index 0000000..9943261 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_crouch_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_crouch_005.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_crouch_005.png new file mode 100644 index 0000000..cd1b190 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_crouch_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_defend_000.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_defend_000.png new file mode 100644 index 0000000..348701a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_defend_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_defend_001.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_defend_001.png new file mode 100644 index 0000000..9121865 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_defend_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_defend_002.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_defend_002.png new file mode 100644 index 0000000..30ab552 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_defend_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_defend_003.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_defend_003.png new file mode 100644 index 0000000..ad746e2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_defend_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_defend_004.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_defend_004.png new file mode 100644 index 0000000..7e9c8fd Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_defend_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_die_000.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_die_000.png new file mode 100644 index 0000000..2cec0c1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_die_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_die_001.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_die_001.png new file mode 100644 index 0000000..f40c101 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_die_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_die_002.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_die_002.png new file mode 100644 index 0000000..c2ae43d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_die_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_die_003.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_die_003.png new file mode 100644 index 0000000..a433860 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_die_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_die_004.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_die_004.png new file mode 100644 index 0000000..2afaf95 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_die_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_dig_000.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_dig_000.png new file mode 100644 index 0000000..d372351 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_dig_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_dig_001.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_dig_001.png new file mode 100644 index 0000000..f847865 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_dig_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_dig_002.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_dig_002.png new file mode 100644 index 0000000..a4d1421 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_dig_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_dig_003.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_dig_003.png new file mode 100644 index 0000000..0e3d8fa Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_dig_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_dig_004.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_dig_004.png new file mode 100644 index 0000000..f79f425 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_dig_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_dig_005.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_dig_005.png new file mode 100644 index 0000000..3853f03 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_dig_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_dig_006.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_dig_006.png new file mode 100644 index 0000000..6bbcebe Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_dig_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_dig_007.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_dig_007.png new file mode 100644 index 0000000..aac249e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_dig_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_000.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_000.png new file mode 100644 index 0000000..de008db Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_001.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_001.png new file mode 100644 index 0000000..faa645f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_002.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_002.png new file mode 100644 index 0000000..9733e37 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_003.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_003.png new file mode 100644 index 0000000..93adb29 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_004.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_004.png new file mode 100644 index 0000000..7b048c0 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_005.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_005.png new file mode 100644 index 0000000..6baabe5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_006.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_006.png new file mode 100644 index 0000000..fc16ecf Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_007.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_007.png new file mode 100644 index 0000000..c00d9f8 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_008.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_008.png new file mode 100644 index 0000000..ecdb9c4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_008.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_009.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_009.png new file mode 100644 index 0000000..ab67b38 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_falling_009.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_000.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_000.png new file mode 100644 index 0000000..a706398 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_001.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_001.png new file mode 100644 index 0000000..2f2faa7 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_002.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_002.png new file mode 100644 index 0000000..015b4d7 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_003.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_003.png new file mode 100644 index 0000000..2ff4d1c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_004.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_004.png new file mode 100644 index 0000000..99c9830 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_005.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_005.png new file mode 100644 index 0000000..a203972 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_006.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_006.png new file mode 100644 index 0000000..d02b38e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_007.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_007.png new file mode 100644 index 0000000..bcce9b5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_008.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_008.png new file mode 100644 index 0000000..ee80279 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_008.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_009.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_009.png new file mode 100644 index 0000000..4aa2bfe Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_horizontal_slide_009.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_hurt_000.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_hurt_000.png new file mode 100644 index 0000000..301dd9f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_hurt_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_hurt_001.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_hurt_001.png new file mode 100644 index 0000000..e835eca Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_hurt_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_hurt_002.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_hurt_002.png new file mode 100644 index 0000000..be62101 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_hurt_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_hurt_003.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_hurt_003.png new file mode 100644 index 0000000..dd982f5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_hurt_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_hurt_004.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_hurt_004.png new file mode 100644 index 0000000..8d02ffb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_hurt_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_000.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_000.png new file mode 100644 index 0000000..348701a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_001.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_001.png new file mode 100644 index 0000000..cb77459 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_002.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_002.png new file mode 100644 index 0000000..0772747 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_003.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_003.png new file mode 100644 index 0000000..68d7a5f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_004.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_004.png new file mode 100644 index 0000000..e5d9f00 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_005.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_005.png new file mode 100644 index 0000000..0417b51 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_006.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_006.png new file mode 100644 index 0000000..26c12a9 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_007.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_007.png new file mode 100644 index 0000000..47e80fc Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_008.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_008.png new file mode 100644 index 0000000..4f8a277 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_008.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_009.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_009.png new file mode 100644 index 0000000..2d614a8 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_009.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_010.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_010.png new file mode 100644 index 0000000..b5d3730 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_010.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_011.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_011.png new file mode 100644 index 0000000..b7168a7 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_011.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_012.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_012.png new file mode 100644 index 0000000..f95b0ef Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_012.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_013.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_013.png new file mode 100644 index 0000000..81969f1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_013.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_014.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_014.png new file mode 100644 index 0000000..7c85635 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_014.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_015.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_015.png new file mode 100644 index 0000000..ccbfd87 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_015.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_016.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_016.png new file mode 100644 index 0000000..b520d02 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_016.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_017.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_017.png new file mode 100644 index 0000000..e89ef64 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_017.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_018.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_018.png new file mode 100644 index 0000000..d7cfebe Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_018.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_019.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_019.png new file mode 100644 index 0000000..fdc384d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_019.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_000.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_000.png new file mode 100644 index 0000000..b203662 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_001.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_001.png new file mode 100644 index 0000000..f11db8a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_002.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_002.png new file mode 100644 index 0000000..09a84ae Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_003.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_003.png new file mode 100644 index 0000000..739f588 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_004.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_004.png new file mode 100644 index 0000000..ec35d64 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_005.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_005.png new file mode 100644 index 0000000..a7193df Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_006.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_006.png new file mode 100644 index 0000000..0fac006 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_007.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_007.png new file mode 100644 index 0000000..8b352f8 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_008.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_008.png new file mode 100644 index 0000000..90b3f44 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_008.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_009.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_009.png new file mode 100644 index 0000000..9cc11be Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_009.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_010.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_010.png new file mode 100644 index 0000000..9f96776 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_010.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_011.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_011.png new file mode 100644 index 0000000..c80d178 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_011.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_012.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_012.png new file mode 100644 index 0000000..e91470e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_012.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_013.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_013.png new file mode 100644 index 0000000..fa1e5c0 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_013.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_014.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_014.png new file mode 100644 index 0000000..3240e0a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_014.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_015.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_015.png new file mode 100644 index 0000000..c8d8e5a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_015.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_016.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_016.png new file mode 100644 index 0000000..a729e88 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_016.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_017.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_017.png new file mode 100644 index 0000000..20473e5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_017.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_018.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_018.png new file mode 100644 index 0000000..7b29187 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_018.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_019.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_019.png new file mode 100644 index 0000000..cd92eed Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_back_019.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_000.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_000.png new file mode 100644 index 0000000..1c4eb39 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_001.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_001.png new file mode 100644 index 0000000..cd01584 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_002.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_002.png new file mode 100644 index 0000000..d6a57fd Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_003.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_003.png new file mode 100644 index 0000000..b14b9d3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_004.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_004.png new file mode 100644 index 0000000..9bbda32 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_005.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_005.png new file mode 100644 index 0000000..7a8a30b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_006.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_006.png new file mode 100644 index 0000000..6f7565b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_007.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_007.png new file mode 100644 index 0000000..e2c978c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_008.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_008.png new file mode 100644 index 0000000..7f6207b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_008.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_009.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_009.png new file mode 100644 index 0000000..538d042 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_009.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_010.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_010.png new file mode 100644 index 0000000..73a6431 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_010.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_011.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_011.png new file mode 100644 index 0000000..df1402b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_011.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_012.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_012.png new file mode 100644 index 0000000..4fc3632 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_012.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_013.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_013.png new file mode 100644 index 0000000..68ed11d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_013.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_014.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_014.png new file mode 100644 index 0000000..76117f9 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_014.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_015.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_015.png new file mode 100644 index 0000000..a0ccc4d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_015.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_016.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_016.png new file mode 100644 index 0000000..40f49c7 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_016.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_017.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_017.png new file mode 100644 index 0000000..c619c95 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_017.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_018.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_018.png new file mode 100644 index 0000000..53d9993 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_018.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_019.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_019.png new file mode 100644 index 0000000..492e495 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_front_facing_019.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_000.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_000.png new file mode 100644 index 0000000..86190ca Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_001.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_001.png new file mode 100644 index 0000000..f0d3e2e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_002.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_002.png new file mode 100644 index 0000000..05a18ff Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_003.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_003.png new file mode 100644 index 0000000..3b4f333 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_004.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_004.png new file mode 100644 index 0000000..201d206 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_005.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_005.png new file mode 100644 index 0000000..332074f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_006.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_006.png new file mode 100644 index 0000000..5e39dc5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_007.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_007.png new file mode 100644 index 0000000..f0d3d27 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_008.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_008.png new file mode 100644 index 0000000..9059f89 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_008.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_009.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_009.png new file mode 100644 index 0000000..19b097b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_009.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_010.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_010.png new file mode 100644 index 0000000..0f11aa4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_010.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_011.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_011.png new file mode 100644 index 0000000..f60337f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_011.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_012.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_012.png new file mode 100644 index 0000000..e9c16da Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_012.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_013.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_013.png new file mode 100644 index 0000000..60bbcd7 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_013.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_014.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_014.png new file mode 100644 index 0000000..44328d7 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_014.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_015.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_015.png new file mode 100644 index 0000000..9c7c45e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_idle_on_ladder_015.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_000.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_000.png new file mode 100644 index 0000000..2cec0c1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_001.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_001.png new file mode 100644 index 0000000..4d406c4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_002.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_002.png new file mode 100644 index 0000000..08f0851 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_003.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_003.png new file mode 100644 index 0000000..fa9b34c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_004.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_004.png new file mode 100644 index 0000000..c625c42 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_005.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_005.png new file mode 100644 index 0000000..acb9062 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_006.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_006.png new file mode 100644 index 0000000..d5cfbe9 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_007.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_007.png new file mode 100644 index 0000000..304c605 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_008.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_008.png new file mode 100644 index 0000000..5f355f0 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_008.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_009.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_009.png new file mode 100644 index 0000000..5a8632a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_jump_009.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_ladder_climb_000.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_ladder_climb_000.png new file mode 100644 index 0000000..95167bc Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_ladder_climb_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_ladder_climb_001.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_ladder_climb_001.png new file mode 100644 index 0000000..35ccb0f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_ladder_climb_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_ladder_climb_002.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_ladder_climb_002.png new file mode 100644 index 0000000..aa4123d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_ladder_climb_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_ladder_climb_003.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_ladder_climb_003.png new file mode 100644 index 0000000..5ddf846 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_ladder_climb_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_ladder_climb_004.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_ladder_climb_004.png new file mode 100644 index 0000000..1d58557 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_ladder_climb_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_ladder_climb_005.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_ladder_climb_005.png new file mode 100644 index 0000000..c580b7b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_ladder_climb_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_ladder_climb_006.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_ladder_climb_006.png new file mode 100644 index 0000000..2706faa Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_ladder_climb_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_ladder_climb_007.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_ladder_climb_007.png new file mode 100644 index 0000000..3d1c970 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_ladder_climb_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_pull_000.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_pull_000.png new file mode 100644 index 0000000..be718d9 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_pull_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_pull_001.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_pull_001.png new file mode 100644 index 0000000..b4eb866 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_pull_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_pull_002.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_pull_002.png new file mode 100644 index 0000000..366bbc0 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_pull_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_pull_003.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_pull_003.png new file mode 100644 index 0000000..a7f5833 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_pull_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_pull_004.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_pull_004.png new file mode 100644 index 0000000..5ca9f7c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_pull_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_pull_005.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_pull_005.png new file mode 100644 index 0000000..9027b51 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_pull_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_pull_006.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_pull_006.png new file mode 100644 index 0000000..ec93c4b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_pull_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_pull_007.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_pull_007.png new file mode 100644 index 0000000..d0bcdc6 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_pull_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_push_000.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_push_000.png new file mode 100644 index 0000000..95d0a66 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_push_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_push_001.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_push_001.png new file mode 100644 index 0000000..27c5c46 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_push_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_push_002.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_push_002.png new file mode 100644 index 0000000..cd56004 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_push_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_push_003.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_push_003.png new file mode 100644 index 0000000..8229f94 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_push_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_push_004.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_push_004.png new file mode 100644 index 0000000..64b4612 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_push_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_push_005.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_push_005.png new file mode 100644 index 0000000..19283a1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_push_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_push_006.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_push_006.png new file mode 100644 index 0000000..a3a797e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_push_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_push_007.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_push_007.png new file mode 100644 index 0000000..85ab3f2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_push_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_run_000.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_run_000.png new file mode 100644 index 0000000..215556c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_run_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_run_001.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_run_001.png new file mode 100644 index 0000000..4a881f8 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_run_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_run_002.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_run_002.png new file mode 100644 index 0000000..4887b6b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_run_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_run_003.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_run_003.png new file mode 100644 index 0000000..88ad1e0 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_run_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_run_004.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_run_004.png new file mode 100644 index 0000000..c8988b0 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_run_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_run_005.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_run_005.png new file mode 100644 index 0000000..6915c7b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_run_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_run_006.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_run_006.png new file mode 100644 index 0000000..367c46d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_run_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_run_007.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_run_007.png new file mode 100644 index 0000000..63f20e2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_run_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_shoot_000.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_shoot_000.png new file mode 100644 index 0000000..e58d27d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_shoot_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_shoot_001.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_shoot_001.png new file mode 100644 index 0000000..7f87e87 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_shoot_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_shoot_002.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_shoot_002.png new file mode 100644 index 0000000..0e5371e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_shoot_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_shoot_003.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_shoot_003.png new file mode 100644 index 0000000..208367d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_shoot_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_shoot_004.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_shoot_004.png new file mode 100644 index 0000000..ebfc719 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_shoot_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_throw_something_000.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_throw_something_000.png new file mode 100644 index 0000000..bcc1ab7 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_throw_something_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_throw_something_001.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_throw_something_001.png new file mode 100644 index 0000000..923774a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_throw_something_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_throw_something_002.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_throw_something_002.png new file mode 100644 index 0000000..7a555cc Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_throw_something_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_throw_something_003.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_throw_something_003.png new file mode 100644 index 0000000..5173c39 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_throw_something_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_throw_something_004.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_throw_something_004.png new file mode 100644 index 0000000..3a8e969 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_throw_something_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_throw_something_005.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_throw_something_005.png new file mode 100644 index 0000000..6b6cf19 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_throw_something_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_throw_something_006.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_throw_something_006.png new file mode 100644 index 0000000..2f2e6af Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_throw_something_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_throw_something_007.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_throw_something_007.png new file mode 100644 index 0000000..fadb25f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_throw_something_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_use_pickaxe_000.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_use_pickaxe_000.png new file mode 100644 index 0000000..2cec0c1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_use_pickaxe_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_use_pickaxe_001.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_use_pickaxe_001.png new file mode 100644 index 0000000..de34b35 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_use_pickaxe_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_use_pickaxe_002.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_use_pickaxe_002.png new file mode 100644 index 0000000..b9e8225 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_use_pickaxe_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_use_pickaxe_003.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_use_pickaxe_003.png new file mode 100644 index 0000000..f53d80b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_use_pickaxe_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_use_pickaxe_004.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_use_pickaxe_004.png new file mode 100644 index 0000000..990bbfd Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_use_pickaxe_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_use_pickaxe_005.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_use_pickaxe_005.png new file mode 100644 index 0000000..85977c3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_use_pickaxe_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_use_pickaxe_006.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_use_pickaxe_006.png new file mode 100644 index 0000000..e066687 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_use_pickaxe_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_000.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_000.png new file mode 100644 index 0000000..2b82358 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_001.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_001.png new file mode 100644 index 0000000..298891a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_002.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_002.png new file mode 100644 index 0000000..3df2d50 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_003.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_003.png new file mode 100644 index 0000000..42627df Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_004.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_004.png new file mode 100644 index 0000000..dca78f9 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_005.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_005.png new file mode 100644 index 0000000..58b3aac Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_006.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_006.png new file mode 100644 index 0000000..77b08cf Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_007.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_007.png new file mode 100644 index 0000000..7b000dc Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_008.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_008.png new file mode 100644 index 0000000..0d59344 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_008.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_009.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_009.png new file mode 100644 index 0000000..f934d81 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_vertical_slide_009.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_000.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_000.png new file mode 100644 index 0000000..8a9bd66 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_001.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_001.png new file mode 100644 index 0000000..02aa4d3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_002.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_002.png new file mode 100644 index 0000000..9524919 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_003.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_003.png new file mode 100644 index 0000000..c8bead9 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_004.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_004.png new file mode 100644 index 0000000..a227f59 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_005.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_005.png new file mode 100644 index 0000000..f35c229 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_006.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_006.png new file mode 100644 index 0000000..cce1e85 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_007.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_007.png new file mode 100644 index 0000000..cb2f523 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_backward_000.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_backward_000.png new file mode 100644 index 0000000..f2764af Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_backward_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_backward_001.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_backward_001.png new file mode 100644 index 0000000..ed406e3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_backward_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_backward_002.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_backward_002.png new file mode 100644 index 0000000..4f26d6c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_backward_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_backward_003.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_backward_003.png new file mode 100644 index 0000000..0bfc4a4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_backward_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_backward_004.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_backward_004.png new file mode 100644 index 0000000..3b50866 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_backward_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_backward_005.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_backward_005.png new file mode 100644 index 0000000..a67e794 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_backward_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_backward_006.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_backward_006.png new file mode 100644 index 0000000..e82ed7d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_backward_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_backward_007.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_backward_007.png new file mode 100644 index 0000000..54d7ea5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_backward_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_forward_facing_000.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_forward_facing_000.png new file mode 100644 index 0000000..6dfe80a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_forward_facing_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_forward_facing_001.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_forward_facing_001.png new file mode 100644 index 0000000..50c8f0c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_forward_facing_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_forward_facing_002.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_forward_facing_002.png new file mode 100644 index 0000000..033613f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_forward_facing_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_forward_facing_003.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_forward_facing_003.png new file mode 100644 index 0000000..20744de Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_forward_facing_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_forward_facing_004.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_forward_facing_004.png new file mode 100644 index 0000000..7caebbb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_forward_facing_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_forward_facing_005.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_forward_facing_005.png new file mode 100644 index 0000000..8156284 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_forward_facing_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_forward_facing_006.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_forward_facing_006.png new file mode 100644 index 0000000..8715459 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_forward_facing_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_forward_facing_007.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_forward_facing_007.png new file mode 100644 index 0000000..9acdc59 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_walk_forward_facing_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_000.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_000.png new file mode 100644 index 0000000..188f924 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_000.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_001.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_001.png new file mode 100644 index 0000000..7f12d1c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_001.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_002.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_002.png new file mode 100644 index 0000000..72e4165 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_002.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_003.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_003.png new file mode 100644 index 0000000..efe4176 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_003.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_004.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_004.png new file mode 100644 index 0000000..4246e23 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_004.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_005.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_005.png new file mode 100644 index 0000000..c4b0c03 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_005.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_006.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_006.png new file mode 100644 index 0000000..e616383 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_006.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_007.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_007.png new file mode 100644 index 0000000..d0a83fc Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_007.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_008.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_008.png new file mode 100644 index 0000000..9d78e31 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_008.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_009.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_009.png new file mode 100644 index 0000000..f9db083 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_009.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_010.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_010.png new file mode 100644 index 0000000..9a58160 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_010.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_011.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_011.png new file mode 100644 index 0000000..e72b378 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_011.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_012.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_012.png new file mode 100644 index 0000000..dd7c129 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_012.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_013.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_013.png new file mode 100644 index 0000000..c959d41 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_013.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_014.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_014.png new file mode 100644 index 0000000..08c61d1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_014.png differ diff --git a/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_015.png b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_015.png new file mode 100644 index 0000000..2a5fd14 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/red_shirt_miner/__red_shirt_miner_whacked_015.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_000.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_000.png new file mode 100644 index 0000000..54befeb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_000.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_001.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_001.png new file mode 100644 index 0000000..54befeb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_001.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_002.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_002.png new file mode 100644 index 0000000..54befeb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_002.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_003.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_003.png new file mode 100644 index 0000000..54befeb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_003.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_004.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_004.png new file mode 100644 index 0000000..54befeb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_004.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_005.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_005.png new file mode 100644 index 0000000..54befeb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_005.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_006.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_006.png new file mode 100644 index 0000000..54befeb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_006.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_007.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_007.png new file mode 100644 index 0000000..54befeb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_007.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_008.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_008.png new file mode 100644 index 0000000..54befeb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_008.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_009.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_009.png new file mode 100644 index 0000000..54befeb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_back_facing_009.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_000.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_000.png new file mode 100644 index 0000000..b03ee3a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_000.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_001.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_001.png new file mode 100644 index 0000000..b03ee3a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_001.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_002.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_002.png new file mode 100644 index 0000000..b03ee3a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_002.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_003.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_003.png new file mode 100644 index 0000000..b03ee3a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_003.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_004.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_004.png new file mode 100644 index 0000000..b03ee3a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_004.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_005.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_005.png new file mode 100644 index 0000000..b03ee3a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_005.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_006.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_006.png new file mode 100644 index 0000000..b03ee3a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_006.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_007.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_007.png new file mode 100644 index 0000000..b03ee3a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_007.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_008.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_008.png new file mode 100644 index 0000000..b03ee3a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_008.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_009.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_009.png new file mode 100644 index 0000000..b03ee3a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_front_facing_009.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_000.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_000.png new file mode 100644 index 0000000..c7f0061 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_000.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_001.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_001.png new file mode 100644 index 0000000..c7f0061 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_001.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_002.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_002.png new file mode 100644 index 0000000..c7f0061 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_002.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_003.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_003.png new file mode 100644 index 0000000..c7f0061 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_003.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_004.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_004.png new file mode 100644 index 0000000..c7f0061 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_004.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_005.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_005.png new file mode 100644 index 0000000..c7f0061 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_005.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_006.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_006.png new file mode 100644 index 0000000..c7f0061 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_006.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_007.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_007.png new file mode 100644 index 0000000..c7f0061 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_007.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_008.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_008.png new file mode 100644 index 0000000..c7f0061 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_008.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_009.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_009.png new file mode 100644 index 0000000..c7f0061 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_base_side_facing_009.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_crouch_000.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_crouch_000.png new file mode 100644 index 0000000..add03f2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_crouch_000.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_crouch_001.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_crouch_001.png new file mode 100644 index 0000000..9e080f8 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_crouch_001.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_crouch_002.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_crouch_002.png new file mode 100644 index 0000000..8f03a21 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_crouch_002.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_crouch_003.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_crouch_003.png new file mode 100644 index 0000000..8f03a21 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_crouch_003.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_crouch_004.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_crouch_004.png new file mode 100644 index 0000000..f0d8bbd Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_crouch_004.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_crouch_005.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_crouch_005.png new file mode 100644 index 0000000..a476977 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_crouch_005.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_defend_000.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_defend_000.png new file mode 100644 index 0000000..c7f0061 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_defend_000.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_defend_001.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_defend_001.png new file mode 100644 index 0000000..e279e19 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_defend_001.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_defend_002.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_defend_002.png new file mode 100644 index 0000000..5517d8a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_defend_002.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_defend_003.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_defend_003.png new file mode 100644 index 0000000..e8862e0 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_defend_003.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_defend_004.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_defend_004.png new file mode 100644 index 0000000..f51eaf4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_defend_004.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_die_000.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_die_000.png new file mode 100644 index 0000000..add03f2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_die_000.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_die_001.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_die_001.png new file mode 100644 index 0000000..58772a5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_die_001.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_die_002.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_die_002.png new file mode 100644 index 0000000..e2db595 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_die_002.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_die_003.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_die_003.png new file mode 100644 index 0000000..56e9fba Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_die_003.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_die_004.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_die_004.png new file mode 100644 index 0000000..3d58b26 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_die_004.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_dig_000.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_dig_000.png new file mode 100644 index 0000000..f8c3def Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_dig_000.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_dig_001.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_dig_001.png new file mode 100644 index 0000000..8e51f29 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_dig_001.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_dig_002.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_dig_002.png new file mode 100644 index 0000000..1a8ed51 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_dig_002.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_dig_003.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_dig_003.png new file mode 100644 index 0000000..4420026 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_dig_003.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_dig_004.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_dig_004.png new file mode 100644 index 0000000..0c21284 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_dig_004.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_dig_005.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_dig_005.png new file mode 100644 index 0000000..1b5216e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_dig_005.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_dig_006.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_dig_006.png new file mode 100644 index 0000000..b7e6704 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_dig_006.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_dig_007.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_dig_007.png new file mode 100644 index 0000000..eba1e5f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_dig_007.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_000.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_000.png new file mode 100644 index 0000000..dcc2fdc Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_000.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_001.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_001.png new file mode 100644 index 0000000..1219425 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_001.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_002.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_002.png new file mode 100644 index 0000000..d3fa59a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_002.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_003.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_003.png new file mode 100644 index 0000000..09467e8 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_003.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_004.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_004.png new file mode 100644 index 0000000..c67960e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_004.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_005.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_005.png new file mode 100644 index 0000000..cb4ba3f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_005.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_006.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_006.png new file mode 100644 index 0000000..5e4d736 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_006.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_007.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_007.png new file mode 100644 index 0000000..8b92429 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_007.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_008.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_008.png new file mode 100644 index 0000000..a2048d4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_008.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_009.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_009.png new file mode 100644 index 0000000..299f06e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_falling_009.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_000.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_000.png new file mode 100644 index 0000000..a8ef04e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_000.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_001.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_001.png new file mode 100644 index 0000000..74adc27 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_001.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_002.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_002.png new file mode 100644 index 0000000..9946b2e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_002.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_003.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_003.png new file mode 100644 index 0000000..1308766 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_003.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_004.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_004.png new file mode 100644 index 0000000..70a0d01 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_004.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_005.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_005.png new file mode 100644 index 0000000..7a73e40 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_005.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_006.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_006.png new file mode 100644 index 0000000..a79de92 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_006.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_007.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_007.png new file mode 100644 index 0000000..5e16a8a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_007.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_008.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_008.png new file mode 100644 index 0000000..7e2bbdc Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_008.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_009.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_009.png new file mode 100644 index 0000000..a290def Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_horizontal_slide_009.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_hurt_000.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_hurt_000.png new file mode 100644 index 0000000..c7f0061 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_hurt_000.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_hurt_001.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_hurt_001.png new file mode 100644 index 0000000..6024f24 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_hurt_001.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_hurt_002.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_hurt_002.png new file mode 100644 index 0000000..18819b2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_hurt_002.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_hurt_003.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_hurt_003.png new file mode 100644 index 0000000..c00d2ad Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_hurt_003.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_hurt_004.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_hurt_004.png new file mode 100644 index 0000000..c39e689 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_hurt_004.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_000.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_000.png new file mode 100644 index 0000000..c7f0061 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_000.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_001.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_001.png new file mode 100644 index 0000000..a36ea63 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_001.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_002.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_002.png new file mode 100644 index 0000000..a5aa085 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_002.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_003.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_003.png new file mode 100644 index 0000000..c2762c9 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_003.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_004.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_004.png new file mode 100644 index 0000000..3c13d77 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_004.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_005.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_005.png new file mode 100644 index 0000000..8cd7345 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_005.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_006.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_006.png new file mode 100644 index 0000000..36a0e14 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_006.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_007.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_007.png new file mode 100644 index 0000000..e591409 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_007.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_008.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_008.png new file mode 100644 index 0000000..bab1b88 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_008.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_009.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_009.png new file mode 100644 index 0000000..6bcc688 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_009.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_010.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_010.png new file mode 100644 index 0000000..9ec0bf3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_010.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_011.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_011.png new file mode 100644 index 0000000..f15ce1a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_011.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_012.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_012.png new file mode 100644 index 0000000..10bf364 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_012.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_013.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_013.png new file mode 100644 index 0000000..8950a18 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_013.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_014.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_014.png new file mode 100644 index 0000000..440d0d8 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_014.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_015.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_015.png new file mode 100644 index 0000000..38fb27c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_015.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_016.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_016.png new file mode 100644 index 0000000..e6a9b14 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_016.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_017.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_017.png new file mode 100644 index 0000000..8ada5a5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_017.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_018.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_018.png new file mode 100644 index 0000000..d12688b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_018.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_019.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_019.png new file mode 100644 index 0000000..789f66b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_019.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_000.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_000.png new file mode 100644 index 0000000..54befeb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_000.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_001.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_001.png new file mode 100644 index 0000000..926cf85 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_001.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_002.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_002.png new file mode 100644 index 0000000..8579c47 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_002.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_003.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_003.png new file mode 100644 index 0000000..03c06b7 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_003.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_004.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_004.png new file mode 100644 index 0000000..87a80f9 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_004.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_005.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_005.png new file mode 100644 index 0000000..844f52f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_005.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_006.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_006.png new file mode 100644 index 0000000..35014b3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_006.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_007.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_007.png new file mode 100644 index 0000000..5774446 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_007.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_008.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_008.png new file mode 100644 index 0000000..73377cb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_008.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_009.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_009.png new file mode 100644 index 0000000..fb6b2f3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_009.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_010.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_010.png new file mode 100644 index 0000000..eaff1d4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_010.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_011.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_011.png new file mode 100644 index 0000000..7a76eab Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_011.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_012.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_012.png new file mode 100644 index 0000000..0da76f8 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_012.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_013.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_013.png new file mode 100644 index 0000000..9385187 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_013.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_014.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_014.png new file mode 100644 index 0000000..e95c4a5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_014.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_015.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_015.png new file mode 100644 index 0000000..e3f755a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_015.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_016.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_016.png new file mode 100644 index 0000000..658f801 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_016.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_017.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_017.png new file mode 100644 index 0000000..d0d2657 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_017.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_018.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_018.png new file mode 100644 index 0000000..455126e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_018.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_019.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_019.png new file mode 100644 index 0000000..0577864 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_back_019.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_000.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_000.png new file mode 100644 index 0000000..b03ee3a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_000.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_001.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_001.png new file mode 100644 index 0000000..e2fabe3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_001.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_002.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_002.png new file mode 100644 index 0000000..b873f23 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_002.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_003.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_003.png new file mode 100644 index 0000000..6ebf08b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_003.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_004.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_004.png new file mode 100644 index 0000000..6bc6ed4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_004.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_005.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_005.png new file mode 100644 index 0000000..27b996d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_005.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_006.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_006.png new file mode 100644 index 0000000..273410d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_006.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_007.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_007.png new file mode 100644 index 0000000..cc4c8cd Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_007.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_008.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_008.png new file mode 100644 index 0000000..5dbe6e3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_008.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_009.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_009.png new file mode 100644 index 0000000..c675fec Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_009.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_010.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_010.png new file mode 100644 index 0000000..689ff31 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_010.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_011.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_011.png new file mode 100644 index 0000000..d26587e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_011.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_012.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_012.png new file mode 100644 index 0000000..36e3133 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_012.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_013.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_013.png new file mode 100644 index 0000000..9acaf7a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_013.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_014.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_014.png new file mode 100644 index 0000000..d1412d4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_014.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_015.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_015.png new file mode 100644 index 0000000..01498fe Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_015.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_016.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_016.png new file mode 100644 index 0000000..a16a677 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_016.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_017.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_017.png new file mode 100644 index 0000000..b209254 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_017.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_018.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_018.png new file mode 100644 index 0000000..d172839 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_018.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_019.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_019.png new file mode 100644 index 0000000..de959d7 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_front_facing_019.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_000.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_000.png new file mode 100644 index 0000000..0c54808 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_000.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_001.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_001.png new file mode 100644 index 0000000..bca551f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_001.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_002.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_002.png new file mode 100644 index 0000000..9ef8e51 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_002.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_003.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_003.png new file mode 100644 index 0000000..3df39e7 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_003.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_004.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_004.png new file mode 100644 index 0000000..40ca2f4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_004.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_005.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_005.png new file mode 100644 index 0000000..cd9b3a5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_005.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_006.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_006.png new file mode 100644 index 0000000..9750fef Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_006.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_007.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_007.png new file mode 100644 index 0000000..e9dd5ac Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_007.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_008.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_008.png new file mode 100644 index 0000000..d84a4cf Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_008.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_009.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_009.png new file mode 100644 index 0000000..4b8dad7 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_009.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_010.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_010.png new file mode 100644 index 0000000..aa73c75 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_010.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_011.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_011.png new file mode 100644 index 0000000..40485a6 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_011.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_012.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_012.png new file mode 100644 index 0000000..a638f5c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_012.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_013.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_013.png new file mode 100644 index 0000000..bc16a2b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_013.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_014.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_014.png new file mode 100644 index 0000000..0ec3a40 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_014.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_015.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_015.png new file mode 100644 index 0000000..eb85eee Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_idle_on_ladder_015.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_000.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_000.png new file mode 100644 index 0000000..add03f2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_000.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_001.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_001.png new file mode 100644 index 0000000..bb4301f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_001.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_002.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_002.png new file mode 100644 index 0000000..77d1fd1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_002.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_003.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_003.png new file mode 100644 index 0000000..7c36f7a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_003.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_004.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_004.png new file mode 100644 index 0000000..aef2cde Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_004.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_005.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_005.png new file mode 100644 index 0000000..7290661 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_005.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_006.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_006.png new file mode 100644 index 0000000..82d8b86 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_006.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_007.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_007.png new file mode 100644 index 0000000..8c9d8c7 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_007.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_008.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_008.png new file mode 100644 index 0000000..f1d9b05 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_008.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_009.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_009.png new file mode 100644 index 0000000..d21f589 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_jump_009.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_ladder_climb_000.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_ladder_climb_000.png new file mode 100644 index 0000000..6575780 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_ladder_climb_000.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_ladder_climb_001.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_ladder_climb_001.png new file mode 100644 index 0000000..2ac3c23 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_ladder_climb_001.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_ladder_climb_002.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_ladder_climb_002.png new file mode 100644 index 0000000..9d58d5a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_ladder_climb_002.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_ladder_climb_003.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_ladder_climb_003.png new file mode 100644 index 0000000..54ac5f8 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_ladder_climb_003.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_ladder_climb_004.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_ladder_climb_004.png new file mode 100644 index 0000000..e3dfcf4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_ladder_climb_004.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_ladder_climb_005.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_ladder_climb_005.png new file mode 100644 index 0000000..832ce28 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_ladder_climb_005.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_ladder_climb_006.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_ladder_climb_006.png new file mode 100644 index 0000000..53bc097 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_ladder_climb_006.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_ladder_climb_007.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_ladder_climb_007.png new file mode 100644 index 0000000..760c92b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_ladder_climb_007.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_pull_000.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_pull_000.png new file mode 100644 index 0000000..fec806e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_pull_000.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_pull_001.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_pull_001.png new file mode 100644 index 0000000..2670378 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_pull_001.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_pull_002.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_pull_002.png new file mode 100644 index 0000000..d3fc3da Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_pull_002.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_pull_003.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_pull_003.png new file mode 100644 index 0000000..e09bcdc Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_pull_003.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_pull_004.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_pull_004.png new file mode 100644 index 0000000..e02b46a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_pull_004.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_pull_005.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_pull_005.png new file mode 100644 index 0000000..1431b5e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_pull_005.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_pull_006.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_pull_006.png new file mode 100644 index 0000000..dcc8a03 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_pull_006.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_pull_007.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_pull_007.png new file mode 100644 index 0000000..7d8030c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_pull_007.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_push_000.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_push_000.png new file mode 100644 index 0000000..ad599b8 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_push_000.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_push_001.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_push_001.png new file mode 100644 index 0000000..ce99bf7 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_push_001.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_push_002.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_push_002.png new file mode 100644 index 0000000..a01e8dd Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_push_002.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_push_003.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_push_003.png new file mode 100644 index 0000000..e7e46e6 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_push_003.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_push_004.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_push_004.png new file mode 100644 index 0000000..f36f353 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_push_004.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_push_005.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_push_005.png new file mode 100644 index 0000000..2f046f6 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_push_005.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_push_006.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_push_006.png new file mode 100644 index 0000000..afd85fb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_push_006.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_push_007.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_push_007.png new file mode 100644 index 0000000..a27eae8 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_push_007.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_run_000.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_run_000.png new file mode 100644 index 0000000..349c050 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_run_000.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_run_001.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_run_001.png new file mode 100644 index 0000000..ddaa3e6 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_run_001.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_run_002.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_run_002.png new file mode 100644 index 0000000..637fa93 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_run_002.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_run_003.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_run_003.png new file mode 100644 index 0000000..ea819de Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_run_003.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_run_004.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_run_004.png new file mode 100644 index 0000000..24bdd10 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_run_004.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_run_005.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_run_005.png new file mode 100644 index 0000000..1baf260 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_run_005.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_run_006.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_run_006.png new file mode 100644 index 0000000..780a457 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_run_006.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_run_007.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_run_007.png new file mode 100644 index 0000000..fc73e87 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_run_007.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_shoot_000.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_shoot_000.png new file mode 100644 index 0000000..165d498 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_shoot_000.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_shoot_001.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_shoot_001.png new file mode 100644 index 0000000..83644cd Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_shoot_001.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_shoot_002.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_shoot_002.png new file mode 100644 index 0000000..464c467 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_shoot_002.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_shoot_003.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_shoot_003.png new file mode 100644 index 0000000..045c0b3 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_shoot_003.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_shoot_004.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_shoot_004.png new file mode 100644 index 0000000..e6c71fb Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_shoot_004.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_throw_something_000.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_throw_something_000.png new file mode 100644 index 0000000..36c2116 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_throw_something_000.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_throw_something_001.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_throw_something_001.png new file mode 100644 index 0000000..335e0ec Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_throw_something_001.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_throw_something_002.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_throw_something_002.png new file mode 100644 index 0000000..399ce9e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_throw_something_002.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_throw_something_003.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_throw_something_003.png new file mode 100644 index 0000000..ac2440e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_throw_something_003.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_throw_something_004.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_throw_something_004.png new file mode 100644 index 0000000..f40851f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_throw_something_004.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_throw_something_005.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_throw_something_005.png new file mode 100644 index 0000000..30996de Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_throw_something_005.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_throw_something_006.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_throw_something_006.png new file mode 100644 index 0000000..18b68d7 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_throw_something_006.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_throw_something_007.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_throw_something_007.png new file mode 100644 index 0000000..9821018 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_throw_something_007.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_use_pickaxe_000.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_use_pickaxe_000.png new file mode 100644 index 0000000..add03f2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_use_pickaxe_000.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_use_pickaxe_001.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_use_pickaxe_001.png new file mode 100644 index 0000000..2be9bb1 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_use_pickaxe_001.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_use_pickaxe_002.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_use_pickaxe_002.png new file mode 100644 index 0000000..cbea927 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_use_pickaxe_002.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_use_pickaxe_003.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_use_pickaxe_003.png new file mode 100644 index 0000000..247ea1d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_use_pickaxe_003.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_use_pickaxe_004.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_use_pickaxe_004.png new file mode 100644 index 0000000..c23bf13 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_use_pickaxe_004.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_use_pickaxe_005.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_use_pickaxe_005.png new file mode 100644 index 0000000..c6f9f9a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_use_pickaxe_005.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_use_pickaxe_006.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_use_pickaxe_006.png new file mode 100644 index 0000000..2c3cfdd Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_use_pickaxe_006.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_000.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_000.png new file mode 100644 index 0000000..83a9317 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_000.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_001.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_001.png new file mode 100644 index 0000000..98bb9db Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_001.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_002.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_002.png new file mode 100644 index 0000000..830769b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_002.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_003.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_003.png new file mode 100644 index 0000000..2415631 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_003.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_004.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_004.png new file mode 100644 index 0000000..b15bbcd Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_004.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_005.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_005.png new file mode 100644 index 0000000..78a044c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_005.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_006.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_006.png new file mode 100644 index 0000000..27d8f95 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_006.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_007.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_007.png new file mode 100644 index 0000000..69f21a7 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_007.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_008.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_008.png new file mode 100644 index 0000000..50e7636 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_008.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_009.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_009.png new file mode 100644 index 0000000..6c70e00 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_vertical_slide_009.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_000.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_000.png new file mode 100644 index 0000000..cc4c571 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_000.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_001.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_001.png new file mode 100644 index 0000000..909f06a Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_001.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_002.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_002.png new file mode 100644 index 0000000..fba1004 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_002.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_003.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_003.png new file mode 100644 index 0000000..8877dd6 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_003.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_004.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_004.png new file mode 100644 index 0000000..a98d2ca Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_004.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_005.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_005.png new file mode 100644 index 0000000..aa2d856 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_005.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_006.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_006.png new file mode 100644 index 0000000..e77e43b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_006.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_007.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_007.png new file mode 100644 index 0000000..71d7575 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_007.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_backward_000.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_backward_000.png new file mode 100644 index 0000000..bd03bb7 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_backward_000.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_backward_001.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_backward_001.png new file mode 100644 index 0000000..95a19a6 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_backward_001.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_backward_002.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_backward_002.png new file mode 100644 index 0000000..d9cdf67 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_backward_002.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_backward_003.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_backward_003.png new file mode 100644 index 0000000..42caa2f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_backward_003.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_backward_004.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_backward_004.png new file mode 100644 index 0000000..72f9aee Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_backward_004.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_backward_005.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_backward_005.png new file mode 100644 index 0000000..80042b5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_backward_005.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_backward_006.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_backward_006.png new file mode 100644 index 0000000..e91c134 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_backward_006.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_backward_007.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_backward_007.png new file mode 100644 index 0000000..9219ad7 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_backward_007.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_forward_facing_000.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_forward_facing_000.png new file mode 100644 index 0000000..8bd68b7 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_forward_facing_000.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_forward_facing_001.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_forward_facing_001.png new file mode 100644 index 0000000..ff3c268 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_forward_facing_001.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_forward_facing_002.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_forward_facing_002.png new file mode 100644 index 0000000..8cfe441 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_forward_facing_002.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_forward_facing_003.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_forward_facing_003.png new file mode 100644 index 0000000..b7f506f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_forward_facing_003.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_forward_facing_004.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_forward_facing_004.png new file mode 100644 index 0000000..f83377c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_forward_facing_004.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_forward_facing_005.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_forward_facing_005.png new file mode 100644 index 0000000..784fdda Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_forward_facing_005.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_forward_facing_006.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_forward_facing_006.png new file mode 100644 index 0000000..78e65d9 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_forward_facing_006.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_forward_facing_007.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_forward_facing_007.png new file mode 100644 index 0000000..8b2f464 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_walk_forward_facing_007.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_000.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_000.png new file mode 100644 index 0000000..b35db0d Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_000.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_001.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_001.png new file mode 100644 index 0000000..0e305a5 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_001.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_002.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_002.png new file mode 100644 index 0000000..3217123 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_002.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_003.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_003.png new file mode 100644 index 0000000..3b12785 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_003.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_004.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_004.png new file mode 100644 index 0000000..fecffe2 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_004.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_005.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_005.png new file mode 100644 index 0000000..af3ef94 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_005.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_006.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_006.png new file mode 100644 index 0000000..0f1a835 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_006.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_007.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_007.png new file mode 100644 index 0000000..67b2e42 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_007.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_008.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_008.png new file mode 100644 index 0000000..97755a4 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_008.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_009.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_009.png new file mode 100644 index 0000000..5a6732f Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_009.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_010.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_010.png new file mode 100644 index 0000000..20c9d6b Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_010.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_011.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_011.png new file mode 100644 index 0000000..bf7269e Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_011.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_012.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_012.png new file mode 100644 index 0000000..e359f9c Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_012.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_013.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_013.png new file mode 100644 index 0000000..6285961 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_013.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_014.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_014.png new file mode 100644 index 0000000..11a36ba Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_014.png differ diff --git a/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_015.png b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_015.png new file mode 100644 index 0000000..0966b74 Binary files /dev/null and b/images/superjozino/assets/player/keyframes/yellow_hat/__yellow_hat_whacked_015.png differ diff --git a/images/superjozino/assets/terrain.png b/images/superjozino/assets/terrain.png new file mode 100644 index 0000000..6674ca1 Binary files /dev/null and b/images/superjozino/assets/terrain.png differ diff --git a/images/superjozino/assets/treasure/Big Map/Folding/01.png b/images/superjozino/assets/treasure/Big Map/Folding/01.png new file mode 100644 index 0000000..e4acbd2 Binary files /dev/null and b/images/superjozino/assets/treasure/Big Map/Folding/01.png differ diff --git a/images/superjozino/assets/treasure/Big Map/Folding/02.png b/images/superjozino/assets/treasure/Big Map/Folding/02.png new file mode 100644 index 0000000..3589ecc Binary files /dev/null and b/images/superjozino/assets/treasure/Big Map/Folding/02.png differ diff --git a/images/superjozino/assets/treasure/Big Map/Folding/03.png b/images/superjozino/assets/treasure/Big Map/Folding/03.png new file mode 100644 index 0000000..dcdea8f Binary files /dev/null and b/images/superjozino/assets/treasure/Big Map/Folding/03.png differ diff --git a/images/superjozino/assets/treasure/Big Map/Folding/04.png b/images/superjozino/assets/treasure/Big Map/Folding/04.png new file mode 100644 index 0000000..08ddf98 Binary files /dev/null and b/images/superjozino/assets/treasure/Big Map/Folding/04.png differ diff --git a/images/superjozino/assets/treasure/Big Map/Idle/01.png b/images/superjozino/assets/treasure/Big Map/Idle/01.png new file mode 100644 index 0000000..8a5be7a Binary files /dev/null and b/images/superjozino/assets/treasure/Big Map/Idle/01.png differ diff --git a/images/superjozino/assets/treasure/Big Map/Idle/02.png b/images/superjozino/assets/treasure/Big Map/Idle/02.png new file mode 100644 index 0000000..7c77922 Binary files /dev/null and b/images/superjozino/assets/treasure/Big Map/Idle/02.png differ diff --git a/images/superjozino/assets/treasure/Big Map/Idle/03.png b/images/superjozino/assets/treasure/Big Map/Idle/03.png new file mode 100644 index 0000000..9e0a7f0 Binary files /dev/null and b/images/superjozino/assets/treasure/Big Map/Idle/03.png differ diff --git a/images/superjozino/assets/treasure/Big Map/Idle/04.png b/images/superjozino/assets/treasure/Big Map/Idle/04.png new file mode 100644 index 0000000..cef4096 Binary files /dev/null and b/images/superjozino/assets/treasure/Big Map/Idle/04.png differ diff --git a/images/superjozino/assets/treasure/Big Map/Idle/05.png b/images/superjozino/assets/treasure/Big Map/Idle/05.png new file mode 100644 index 0000000..60e59b1 Binary files /dev/null and b/images/superjozino/assets/treasure/Big Map/Idle/05.png differ diff --git a/images/superjozino/assets/treasure/Big Map/Idle/06.png b/images/superjozino/assets/treasure/Big Map/Idle/06.png new file mode 100644 index 0000000..accd295 Binary files /dev/null and b/images/superjozino/assets/treasure/Big Map/Idle/06.png differ diff --git a/images/superjozino/assets/treasure/Big Map/Idle/07.png b/images/superjozino/assets/treasure/Big Map/Idle/07.png new file mode 100644 index 0000000..acb079d Binary files /dev/null and b/images/superjozino/assets/treasure/Big Map/Idle/07.png differ diff --git a/images/superjozino/assets/treasure/Big Map/Idle/08.png b/images/superjozino/assets/treasure/Big Map/Idle/08.png new file mode 100644 index 0000000..7322cf1 Binary files /dev/null and b/images/superjozino/assets/treasure/Big Map/Idle/08.png differ diff --git a/images/superjozino/assets/treasure/Big Map/Idle/09.png b/images/superjozino/assets/treasure/Big Map/Idle/09.png new file mode 100644 index 0000000..bd2f2d7 Binary files /dev/null and b/images/superjozino/assets/treasure/Big Map/Idle/09.png differ diff --git a/images/superjozino/assets/treasure/Big Map/Idle/10.png b/images/superjozino/assets/treasure/Big Map/Idle/10.png new file mode 100644 index 0000000..803cf36 Binary files /dev/null and b/images/superjozino/assets/treasure/Big Map/Idle/10.png differ diff --git a/images/superjozino/assets/treasure/Big Map/Idle/11.png b/images/superjozino/assets/treasure/Big Map/Idle/11.png new file mode 100644 index 0000000..ed0c242 Binary files /dev/null and b/images/superjozino/assets/treasure/Big Map/Idle/11.png differ diff --git a/images/superjozino/assets/treasure/Big Map/Unfolding/01.png b/images/superjozino/assets/treasure/Big Map/Unfolding/01.png new file mode 100644 index 0000000..08ddf98 Binary files /dev/null and b/images/superjozino/assets/treasure/Big Map/Unfolding/01.png differ diff --git a/images/superjozino/assets/treasure/Big Map/Unfolding/02.png b/images/superjozino/assets/treasure/Big Map/Unfolding/02.png new file mode 100644 index 0000000..dcdea8f Binary files /dev/null and b/images/superjozino/assets/treasure/Big Map/Unfolding/02.png differ diff --git a/images/superjozino/assets/treasure/Big Map/Unfolding/03.png b/images/superjozino/assets/treasure/Big Map/Unfolding/03.png new file mode 100644 index 0000000..3589ecc Binary files /dev/null and b/images/superjozino/assets/treasure/Big Map/Unfolding/03.png differ diff --git a/images/superjozino/assets/treasure/Big Map/Unfolding/04.png b/images/superjozino/assets/treasure/Big Map/Unfolding/04.png new file mode 100644 index 0000000..e4acbd2 Binary files /dev/null and b/images/superjozino/assets/treasure/Big Map/Unfolding/04.png differ diff --git a/images/superjozino/assets/treasure/Big Map/Unfolding/05.png b/images/superjozino/assets/treasure/Big Map/Unfolding/05.png new file mode 100644 index 0000000..8a5be7a Binary files /dev/null and b/images/superjozino/assets/treasure/Big Map/Unfolding/05.png differ diff --git a/images/superjozino/assets/treasure/Blue Diamond/01.png b/images/superjozino/assets/treasure/Blue Diamond/01.png new file mode 100644 index 0000000..8035a04 Binary files /dev/null and b/images/superjozino/assets/treasure/Blue Diamond/01.png differ diff --git a/images/superjozino/assets/treasure/Blue Diamond/02.png b/images/superjozino/assets/treasure/Blue Diamond/02.png new file mode 100644 index 0000000..42cc7eb Binary files /dev/null and b/images/superjozino/assets/treasure/Blue Diamond/02.png differ diff --git a/images/superjozino/assets/treasure/Blue Diamond/03.png b/images/superjozino/assets/treasure/Blue Diamond/03.png new file mode 100644 index 0000000..ecbbcb5 Binary files /dev/null and b/images/superjozino/assets/treasure/Blue Diamond/03.png differ diff --git a/images/superjozino/assets/treasure/Blue Diamond/04.png b/images/superjozino/assets/treasure/Blue Diamond/04.png new file mode 100644 index 0000000..3967995 Binary files /dev/null and b/images/superjozino/assets/treasure/Blue Diamond/04.png differ diff --git a/images/superjozino/assets/treasure/Blue Potion/01.png b/images/superjozino/assets/treasure/Blue Potion/01.png new file mode 100644 index 0000000..93a58a5 Binary files /dev/null and b/images/superjozino/assets/treasure/Blue Potion/01.png differ diff --git a/images/superjozino/assets/treasure/Blue Potion/02.png b/images/superjozino/assets/treasure/Blue Potion/02.png new file mode 100644 index 0000000..8d001ba Binary files /dev/null and b/images/superjozino/assets/treasure/Blue Potion/02.png differ diff --git a/images/superjozino/assets/treasure/Blue Potion/03.png b/images/superjozino/assets/treasure/Blue Potion/03.png new file mode 100644 index 0000000..1220a21 Binary files /dev/null and b/images/superjozino/assets/treasure/Blue Potion/03.png differ diff --git a/images/superjozino/assets/treasure/Blue Potion/04.png b/images/superjozino/assets/treasure/Blue Potion/04.png new file mode 100644 index 0000000..da7d5c4 Binary files /dev/null and b/images/superjozino/assets/treasure/Blue Potion/04.png differ diff --git a/images/superjozino/assets/treasure/Blue Potion/05.png b/images/superjozino/assets/treasure/Blue Potion/05.png new file mode 100644 index 0000000..482b0f9 Binary files /dev/null and b/images/superjozino/assets/treasure/Blue Potion/05.png differ diff --git a/images/superjozino/assets/treasure/Blue Potion/06.png b/images/superjozino/assets/treasure/Blue Potion/06.png new file mode 100644 index 0000000..5083eb5 Binary files /dev/null and b/images/superjozino/assets/treasure/Blue Potion/06.png differ diff --git a/images/superjozino/assets/treasure/Blue Potion/07.png b/images/superjozino/assets/treasure/Blue Potion/07.png new file mode 100644 index 0000000..bdf985a Binary files /dev/null and b/images/superjozino/assets/treasure/Blue Potion/07.png differ diff --git a/images/superjozino/assets/treasure/Coin Effect/01.png b/images/superjozino/assets/treasure/Coin Effect/01.png new file mode 100644 index 0000000..0ba1048 Binary files /dev/null and b/images/superjozino/assets/treasure/Coin Effect/01.png differ diff --git a/images/superjozino/assets/treasure/Coin Effect/02.png b/images/superjozino/assets/treasure/Coin Effect/02.png new file mode 100644 index 0000000..bbc9972 Binary files /dev/null and b/images/superjozino/assets/treasure/Coin Effect/02.png differ diff --git a/images/superjozino/assets/treasure/Coin Effect/03.png b/images/superjozino/assets/treasure/Coin Effect/03.png new file mode 100644 index 0000000..6365d56 Binary files /dev/null and b/images/superjozino/assets/treasure/Coin Effect/03.png differ diff --git a/images/superjozino/assets/treasure/Diamond Effect/01.png b/images/superjozino/assets/treasure/Diamond Effect/01.png new file mode 100644 index 0000000..5866a8e Binary files /dev/null and b/images/superjozino/assets/treasure/Diamond Effect/01.png differ diff --git a/images/superjozino/assets/treasure/Diamond Effect/02.png b/images/superjozino/assets/treasure/Diamond Effect/02.png new file mode 100644 index 0000000..716560a Binary files /dev/null and b/images/superjozino/assets/treasure/Diamond Effect/02.png differ diff --git a/images/superjozino/assets/treasure/Diamond Effect/03.png b/images/superjozino/assets/treasure/Diamond Effect/03.png new file mode 100644 index 0000000..c137f2e Binary files /dev/null and b/images/superjozino/assets/treasure/Diamond Effect/03.png differ diff --git a/images/superjozino/assets/treasure/Diamond Effect/04.png b/images/superjozino/assets/treasure/Diamond Effect/04.png new file mode 100644 index 0000000..da43ee5 Binary files /dev/null and b/images/superjozino/assets/treasure/Diamond Effect/04.png differ diff --git a/images/superjozino/assets/treasure/Gold Coin/01.png b/images/superjozino/assets/treasure/Gold Coin/01.png new file mode 100644 index 0000000..620d36e Binary files /dev/null and b/images/superjozino/assets/treasure/Gold Coin/01.png differ diff --git a/images/superjozino/assets/treasure/Gold Coin/02.png b/images/superjozino/assets/treasure/Gold Coin/02.png new file mode 100644 index 0000000..6dfe5f4 Binary files /dev/null and b/images/superjozino/assets/treasure/Gold Coin/02.png differ diff --git a/images/superjozino/assets/treasure/Gold Coin/03.png b/images/superjozino/assets/treasure/Gold Coin/03.png new file mode 100644 index 0000000..b7d316e Binary files /dev/null and b/images/superjozino/assets/treasure/Gold Coin/03.png differ diff --git a/images/superjozino/assets/treasure/Gold Coin/04.png b/images/superjozino/assets/treasure/Gold Coin/04.png new file mode 100644 index 0000000..9d5bf46 Binary files /dev/null and b/images/superjozino/assets/treasure/Gold Coin/04.png differ diff --git a/images/superjozino/assets/treasure/Golden Skull/01.png b/images/superjozino/assets/treasure/Golden Skull/01.png new file mode 100644 index 0000000..10abbe5 Binary files /dev/null and b/images/superjozino/assets/treasure/Golden Skull/01.png differ diff --git a/images/superjozino/assets/treasure/Golden Skull/02.png b/images/superjozino/assets/treasure/Golden Skull/02.png new file mode 100644 index 0000000..15bb970 Binary files /dev/null and b/images/superjozino/assets/treasure/Golden Skull/02.png differ diff --git a/images/superjozino/assets/treasure/Golden Skull/03.png b/images/superjozino/assets/treasure/Golden Skull/03.png new file mode 100644 index 0000000..217c7dd Binary files /dev/null and b/images/superjozino/assets/treasure/Golden Skull/03.png differ diff --git a/images/superjozino/assets/treasure/Golden Skull/04.png b/images/superjozino/assets/treasure/Golden Skull/04.png new file mode 100644 index 0000000..60b0be7 Binary files /dev/null and b/images/superjozino/assets/treasure/Golden Skull/04.png differ diff --git a/images/superjozino/assets/treasure/Golden Skull/05.png b/images/superjozino/assets/treasure/Golden Skull/05.png new file mode 100644 index 0000000..e147530 Binary files /dev/null and b/images/superjozino/assets/treasure/Golden Skull/05.png differ diff --git a/images/superjozino/assets/treasure/Golden Skull/06.png b/images/superjozino/assets/treasure/Golden Skull/06.png new file mode 100644 index 0000000..38e1edb Binary files /dev/null and b/images/superjozino/assets/treasure/Golden Skull/06.png differ diff --git a/images/superjozino/assets/treasure/Golden Skull/07.png b/images/superjozino/assets/treasure/Golden Skull/07.png new file mode 100644 index 0000000..8ee4596 Binary files /dev/null and b/images/superjozino/assets/treasure/Golden Skull/07.png differ diff --git a/images/superjozino/assets/treasure/Golden Skull/08.png b/images/superjozino/assets/treasure/Golden Skull/08.png new file mode 100644 index 0000000..4d19d03 Binary files /dev/null and b/images/superjozino/assets/treasure/Golden Skull/08.png differ diff --git a/images/superjozino/assets/treasure/Green Bottle/01.png b/images/superjozino/assets/treasure/Green Bottle/01.png new file mode 100644 index 0000000..ed61ed2 Binary files /dev/null and b/images/superjozino/assets/treasure/Green Bottle/01.png differ diff --git a/images/superjozino/assets/treasure/Green Bottle/02.png b/images/superjozino/assets/treasure/Green Bottle/02.png new file mode 100644 index 0000000..5fe6511 Binary files /dev/null and b/images/superjozino/assets/treasure/Green Bottle/02.png differ diff --git a/images/superjozino/assets/treasure/Green Bottle/03.png b/images/superjozino/assets/treasure/Green Bottle/03.png new file mode 100644 index 0000000..fc0de7c Binary files /dev/null and b/images/superjozino/assets/treasure/Green Bottle/03.png differ diff --git a/images/superjozino/assets/treasure/Green Bottle/04.png b/images/superjozino/assets/treasure/Green Bottle/04.png new file mode 100644 index 0000000..0751637 Binary files /dev/null and b/images/superjozino/assets/treasure/Green Bottle/04.png differ diff --git a/images/superjozino/assets/treasure/Green Bottle/05.png b/images/superjozino/assets/treasure/Green Bottle/05.png new file mode 100644 index 0000000..592cd56 Binary files /dev/null and b/images/superjozino/assets/treasure/Green Bottle/05.png differ diff --git a/images/superjozino/assets/treasure/Green Bottle/06.png b/images/superjozino/assets/treasure/Green Bottle/06.png new file mode 100644 index 0000000..a19440d Binary files /dev/null and b/images/superjozino/assets/treasure/Green Bottle/06.png differ diff --git a/images/superjozino/assets/treasure/Green Bottle/07.png b/images/superjozino/assets/treasure/Green Bottle/07.png new file mode 100644 index 0000000..89a1a54 Binary files /dev/null and b/images/superjozino/assets/treasure/Green Bottle/07.png differ diff --git a/images/superjozino/assets/treasure/Green Diamond/01.png b/images/superjozino/assets/treasure/Green Diamond/01.png new file mode 100644 index 0000000..ecf3549 Binary files /dev/null and b/images/superjozino/assets/treasure/Green Diamond/01.png differ diff --git a/images/superjozino/assets/treasure/Green Diamond/02.png b/images/superjozino/assets/treasure/Green Diamond/02.png new file mode 100644 index 0000000..0f4e3f7 Binary files /dev/null and b/images/superjozino/assets/treasure/Green Diamond/02.png differ diff --git a/images/superjozino/assets/treasure/Green Diamond/03.png b/images/superjozino/assets/treasure/Green Diamond/03.png new file mode 100644 index 0000000..ad77364 Binary files /dev/null and b/images/superjozino/assets/treasure/Green Diamond/03.png differ diff --git a/images/superjozino/assets/treasure/Green Diamond/04.png b/images/superjozino/assets/treasure/Green Diamond/04.png new file mode 100644 index 0000000..7bb35f1 Binary files /dev/null and b/images/superjozino/assets/treasure/Green Diamond/04.png differ diff --git a/images/superjozino/assets/treasure/Map Effect/In/01.png b/images/superjozino/assets/treasure/Map Effect/In/01.png new file mode 100644 index 0000000..ceb87ce Binary files /dev/null and b/images/superjozino/assets/treasure/Map Effect/In/01.png differ diff --git a/images/superjozino/assets/treasure/Map Effect/In/02.png b/images/superjozino/assets/treasure/Map Effect/In/02.png new file mode 100644 index 0000000..1ab7d84 Binary files /dev/null and b/images/superjozino/assets/treasure/Map Effect/In/02.png differ diff --git a/images/superjozino/assets/treasure/Map Effect/In/03.png b/images/superjozino/assets/treasure/Map Effect/In/03.png new file mode 100644 index 0000000..7c326a9 Binary files /dev/null and b/images/superjozino/assets/treasure/Map Effect/In/03.png differ diff --git a/images/superjozino/assets/treasure/Map Effect/Out/01.png b/images/superjozino/assets/treasure/Map Effect/Out/01.png new file mode 100644 index 0000000..7c326a9 Binary files /dev/null and b/images/superjozino/assets/treasure/Map Effect/Out/01.png differ diff --git a/images/superjozino/assets/treasure/Map Effect/Out/02.png b/images/superjozino/assets/treasure/Map Effect/Out/02.png new file mode 100644 index 0000000..57be30c Binary files /dev/null and b/images/superjozino/assets/treasure/Map Effect/Out/02.png differ diff --git a/images/superjozino/assets/treasure/Map Effect/Out/03.png b/images/superjozino/assets/treasure/Map Effect/Out/03.png new file mode 100644 index 0000000..1c65f21 Binary files /dev/null and b/images/superjozino/assets/treasure/Map Effect/Out/03.png differ diff --git a/images/superjozino/assets/treasure/Potion Effect/01.png b/images/superjozino/assets/treasure/Potion Effect/01.png new file mode 100644 index 0000000..0356c2b Binary files /dev/null and b/images/superjozino/assets/treasure/Potion Effect/01.png differ diff --git a/images/superjozino/assets/treasure/Potion Effect/02.png b/images/superjozino/assets/treasure/Potion Effect/02.png new file mode 100644 index 0000000..4a2cf22 Binary files /dev/null and b/images/superjozino/assets/treasure/Potion Effect/02.png differ diff --git a/images/superjozino/assets/treasure/Potion Effect/03.png b/images/superjozino/assets/treasure/Potion Effect/03.png new file mode 100644 index 0000000..329030c Binary files /dev/null and b/images/superjozino/assets/treasure/Potion Effect/03.png differ diff --git a/images/superjozino/assets/treasure/Potion Effect/04.png b/images/superjozino/assets/treasure/Potion Effect/04.png new file mode 100644 index 0000000..21fa02c Binary files /dev/null and b/images/superjozino/assets/treasure/Potion Effect/04.png differ diff --git a/images/superjozino/assets/treasure/Red Diamond/01.png b/images/superjozino/assets/treasure/Red Diamond/01.png new file mode 100644 index 0000000..f1cac81 Binary files /dev/null and b/images/superjozino/assets/treasure/Red Diamond/01.png differ diff --git a/images/superjozino/assets/treasure/Red Diamond/02.png b/images/superjozino/assets/treasure/Red Diamond/02.png new file mode 100644 index 0000000..8fa5686 Binary files /dev/null and b/images/superjozino/assets/treasure/Red Diamond/02.png differ diff --git a/images/superjozino/assets/treasure/Red Diamond/03.png b/images/superjozino/assets/treasure/Red Diamond/03.png new file mode 100644 index 0000000..69ac236 Binary files /dev/null and b/images/superjozino/assets/treasure/Red Diamond/03.png differ diff --git a/images/superjozino/assets/treasure/Red Diamond/04.png b/images/superjozino/assets/treasure/Red Diamond/04.png new file mode 100644 index 0000000..501f206 Binary files /dev/null and b/images/superjozino/assets/treasure/Red Diamond/04.png differ diff --git a/images/superjozino/assets/treasure/Red Potion/01.png b/images/superjozino/assets/treasure/Red Potion/01.png new file mode 100644 index 0000000..176d5bc Binary files /dev/null and b/images/superjozino/assets/treasure/Red Potion/01.png differ diff --git a/images/superjozino/assets/treasure/Red Potion/02.png b/images/superjozino/assets/treasure/Red Potion/02.png new file mode 100644 index 0000000..0f7c347 Binary files /dev/null and b/images/superjozino/assets/treasure/Red Potion/02.png differ diff --git a/images/superjozino/assets/treasure/Red Potion/03.png b/images/superjozino/assets/treasure/Red Potion/03.png new file mode 100644 index 0000000..032d1f1 Binary files /dev/null and b/images/superjozino/assets/treasure/Red Potion/03.png differ diff --git a/images/superjozino/assets/treasure/Red Potion/04.png b/images/superjozino/assets/treasure/Red Potion/04.png new file mode 100644 index 0000000..da9a6f4 Binary files /dev/null and b/images/superjozino/assets/treasure/Red Potion/04.png differ diff --git a/images/superjozino/assets/treasure/Red Potion/05.png b/images/superjozino/assets/treasure/Red Potion/05.png new file mode 100644 index 0000000..c59a6f2 Binary files /dev/null and b/images/superjozino/assets/treasure/Red Potion/05.png differ diff --git a/images/superjozino/assets/treasure/Red Potion/06.png b/images/superjozino/assets/treasure/Red Potion/06.png new file mode 100644 index 0000000..ec9fd5d Binary files /dev/null and b/images/superjozino/assets/treasure/Red Potion/06.png differ diff --git a/images/superjozino/assets/treasure/Red Potion/07.png b/images/superjozino/assets/treasure/Red Potion/07.png new file mode 100644 index 0000000..553baac Binary files /dev/null and b/images/superjozino/assets/treasure/Red Potion/07.png differ diff --git a/images/superjozino/assets/treasure/Silver Coin/01.png b/images/superjozino/assets/treasure/Silver Coin/01.png new file mode 100644 index 0000000..5fa5b4e Binary files /dev/null and b/images/superjozino/assets/treasure/Silver Coin/01.png differ diff --git a/images/superjozino/assets/treasure/Silver Coin/02.png b/images/superjozino/assets/treasure/Silver Coin/02.png new file mode 100644 index 0000000..900b729 Binary files /dev/null and b/images/superjozino/assets/treasure/Silver Coin/02.png differ diff --git a/images/superjozino/assets/treasure/Silver Coin/03.png b/images/superjozino/assets/treasure/Silver Coin/03.png new file mode 100644 index 0000000..c6df23e Binary files /dev/null and b/images/superjozino/assets/treasure/Silver Coin/03.png differ diff --git a/images/superjozino/assets/treasure/Silver Coin/04.png b/images/superjozino/assets/treasure/Silver Coin/04.png new file mode 100644 index 0000000..5120a40 Binary files /dev/null and b/images/superjozino/assets/treasure/Silver Coin/04.png differ diff --git a/images/superjozino/assets/treasure/Skull Effect/01.png b/images/superjozino/assets/treasure/Skull Effect/01.png new file mode 100644 index 0000000..c1c6709 Binary files /dev/null and b/images/superjozino/assets/treasure/Skull Effect/01.png differ diff --git a/images/superjozino/assets/treasure/Skull Effect/02.png b/images/superjozino/assets/treasure/Skull Effect/02.png new file mode 100644 index 0000000..217a647 Binary files /dev/null and b/images/superjozino/assets/treasure/Skull Effect/02.png differ diff --git a/images/superjozino/assets/treasure/Skull Effect/03.png b/images/superjozino/assets/treasure/Skull Effect/03.png new file mode 100644 index 0000000..36696a0 Binary files /dev/null and b/images/superjozino/assets/treasure/Skull Effect/03.png differ diff --git a/images/superjozino/assets/treasure/Skull Effect/04.png b/images/superjozino/assets/treasure/Skull Effect/04.png new file mode 100644 index 0000000..c3040d4 Binary files /dev/null and b/images/superjozino/assets/treasure/Skull Effect/04.png differ diff --git a/images/superjozino/assets/treasure/Skull Effect/05.png b/images/superjozino/assets/treasure/Skull Effect/05.png new file mode 100644 index 0000000..5a5d134 Binary files /dev/null and b/images/superjozino/assets/treasure/Skull Effect/05.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 1/01.png b/images/superjozino/assets/treasure/Small Maps/Small Map 1/01.png new file mode 100644 index 0000000..7620e94 Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 1/01.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 1/02.png b/images/superjozino/assets/treasure/Small Maps/Small Map 1/02.png new file mode 100644 index 0000000..a0e4f86 Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 1/02.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 1/03.png b/images/superjozino/assets/treasure/Small Maps/Small Map 1/03.png new file mode 100644 index 0000000..c377593 Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 1/03.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 1/04.png b/images/superjozino/assets/treasure/Small Maps/Small Map 1/04.png new file mode 100644 index 0000000..1baa99c Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 1/04.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 1/05.png b/images/superjozino/assets/treasure/Small Maps/Small Map 1/05.png new file mode 100644 index 0000000..7871aee Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 1/05.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 1/06.png b/images/superjozino/assets/treasure/Small Maps/Small Map 1/06.png new file mode 100644 index 0000000..6576086 Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 1/06.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 1/07.png b/images/superjozino/assets/treasure/Small Maps/Small Map 1/07.png new file mode 100644 index 0000000..162ecc1 Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 1/07.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 1/08.png b/images/superjozino/assets/treasure/Small Maps/Small Map 1/08.png new file mode 100644 index 0000000..e20e6dc Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 1/08.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 2/01.png b/images/superjozino/assets/treasure/Small Maps/Small Map 2/01.png new file mode 100644 index 0000000..22ad10c Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 2/01.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 2/02.png b/images/superjozino/assets/treasure/Small Maps/Small Map 2/02.png new file mode 100644 index 0000000..a459c72 Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 2/02.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 2/03.png b/images/superjozino/assets/treasure/Small Maps/Small Map 2/03.png new file mode 100644 index 0000000..250f0ec Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 2/03.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 2/04.png b/images/superjozino/assets/treasure/Small Maps/Small Map 2/04.png new file mode 100644 index 0000000..4b8c3d6 Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 2/04.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 2/05.png b/images/superjozino/assets/treasure/Small Maps/Small Map 2/05.png new file mode 100644 index 0000000..6fd7a11 Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 2/05.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 2/06.png b/images/superjozino/assets/treasure/Small Maps/Small Map 2/06.png new file mode 100644 index 0000000..8d7806f Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 2/06.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 2/07.png b/images/superjozino/assets/treasure/Small Maps/Small Map 2/07.png new file mode 100644 index 0000000..0717a6a Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 2/07.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 2/08.png b/images/superjozino/assets/treasure/Small Maps/Small Map 2/08.png new file mode 100644 index 0000000..203e19c Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 2/08.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 3/01.png b/images/superjozino/assets/treasure/Small Maps/Small Map 3/01.png new file mode 100644 index 0000000..f878b5a Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 3/01.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 3/02.png b/images/superjozino/assets/treasure/Small Maps/Small Map 3/02.png new file mode 100644 index 0000000..68f2771 Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 3/02.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 3/03.png b/images/superjozino/assets/treasure/Small Maps/Small Map 3/03.png new file mode 100644 index 0000000..215ea97 Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 3/03.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 3/04.png b/images/superjozino/assets/treasure/Small Maps/Small Map 3/04.png new file mode 100644 index 0000000..373ea1d Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 3/04.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 3/05.png b/images/superjozino/assets/treasure/Small Maps/Small Map 3/05.png new file mode 100644 index 0000000..f251261 Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 3/05.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 3/06.png b/images/superjozino/assets/treasure/Small Maps/Small Map 3/06.png new file mode 100644 index 0000000..c3f080e Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 3/06.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 3/07.png b/images/superjozino/assets/treasure/Small Maps/Small Map 3/07.png new file mode 100644 index 0000000..42e5ca5 Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 3/07.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 3/08.png b/images/superjozino/assets/treasure/Small Maps/Small Map 3/08.png new file mode 100644 index 0000000..8552c7d Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 3/08.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 4/01.png b/images/superjozino/assets/treasure/Small Maps/Small Map 4/01.png new file mode 100644 index 0000000..2c6cafa Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 4/01.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 4/02.png b/images/superjozino/assets/treasure/Small Maps/Small Map 4/02.png new file mode 100644 index 0000000..64d5e86 Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 4/02.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 4/03.png b/images/superjozino/assets/treasure/Small Maps/Small Map 4/03.png new file mode 100644 index 0000000..e2a2baa Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 4/03.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 4/04.png b/images/superjozino/assets/treasure/Small Maps/Small Map 4/04.png new file mode 100644 index 0000000..c7f9e09 Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 4/04.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 4/05.png b/images/superjozino/assets/treasure/Small Maps/Small Map 4/05.png new file mode 100644 index 0000000..4d39e86 Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 4/05.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 4/06.png b/images/superjozino/assets/treasure/Small Maps/Small Map 4/06.png new file mode 100644 index 0000000..0037807 Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 4/06.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 4/07.png b/images/superjozino/assets/treasure/Small Maps/Small Map 4/07.png new file mode 100644 index 0000000..4c5e657 Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 4/07.png differ diff --git a/images/superjozino/assets/treasure/Small Maps/Small Map 4/08.png b/images/superjozino/assets/treasure/Small Maps/Small Map 4/08.png new file mode 100644 index 0000000..0c897ed Binary files /dev/null and b/images/superjozino/assets/treasure/Small Maps/Small Map 4/08.png differ diff --git a/images/superjozino/diamond.webp b/images/superjozino/diamond.webp new file mode 100644 index 0000000..4f6d215 Binary files /dev/null and b/images/superjozino/diamond.webp differ diff --git a/images/superjozino/enemies.png b/images/superjozino/enemies.png new file mode 100644 index 0000000..22ea2bd Binary files /dev/null and b/images/superjozino/enemies.png differ diff --git a/images/superjozino/platform_1.webp b/images/superjozino/platform_1.webp new file mode 100644 index 0000000..7215085 Binary files /dev/null and b/images/superjozino/platform_1.webp differ diff --git a/images/superjozino/platform_2.webp b/images/superjozino/platform_2.webp new file mode 100644 index 0000000..7215085 Binary files /dev/null and b/images/superjozino/platform_2.webp differ diff --git a/images/superjozino/platform_3.webp b/images/superjozino/platform_3.webp new file mode 100644 index 0000000..7215085 Binary files /dev/null and b/images/superjozino/platform_3.webp differ diff --git a/images/superjozino/platform_4.webp b/images/superjozino/platform_4.webp new file mode 100644 index 0000000..7215085 Binary files /dev/null and b/images/superjozino/platform_4.webp differ diff --git a/images/superjozino/special_block.png b/images/superjozino/special_block.png new file mode 100644 index 0000000..222b90d Binary files /dev/null and b/images/superjozino/special_block.png differ diff --git a/images/superjozino/special_block.webp b/images/superjozino/special_block.webp new file mode 100644 index 0000000..21ca3b0 Binary files /dev/null and b/images/superjozino/special_block.webp differ diff --git a/images/superjozino/speed_effect.png b/images/superjozino/speed_effect.png new file mode 100644 index 0000000..a46ce02 Binary files /dev/null and b/images/superjozino/speed_effect.png differ diff --git a/images/superjozino/used_special_block.webp b/images/superjozino/used_special_block.webp new file mode 100644 index 0000000..1d124e5 Binary files /dev/null and b/images/superjozino/used_special_block.webp differ diff --git a/images/tlacidlo.png b/images/tlacidlo.png new file mode 100644 index 0000000..f6c417b Binary files /dev/null and b/images/tlacidlo.png differ diff --git a/images/tlacidlo2.png b/images/tlacidlo2.png new file mode 100644 index 0000000..35b1581 Binary files /dev/null and b/images/tlacidlo2.png differ diff --git a/images/traktor2.png b/images/traktor2.png new file mode 100644 index 0000000..dffbba8 Binary files /dev/null and b/images/traktor2.png differ diff --git a/images/worlds/background.jpg b/images/worlds/background.jpg new file mode 100644 index 0000000..1dea763 Binary files /dev/null and b/images/worlds/background.jpg differ diff --git a/images/worlds/background.png b/images/worlds/background.png new file mode 100644 index 0000000..113fa72 Binary files /dev/null and b/images/worlds/background.png differ diff --git a/images/worlds/beatsnoop.com-final-D0kKH4qacS.jpg b/images/worlds/beatsnoop.com-final-D0kKH4qacS.jpg new file mode 100644 index 0000000..88e4b05 Binary files /dev/null and b/images/worlds/beatsnoop.com-final-D0kKH4qacS.jpg differ diff --git a/images/worlds/world.png b/images/worlds/world.png new file mode 100644 index 0000000..4167805 Binary files /dev/null and b/images/worlds/world.png differ diff --git a/images/worlds/world_c.png b/images/worlds/world_c.png new file mode 100644 index 0000000..6aab62d Binary files /dev/null and b/images/worlds/world_c.png differ diff --git a/images/worlds/world_ch.png b/images/worlds/world_ch.png new file mode 100644 index 0000000..0bda67e Binary files /dev/null and b/images/worlds/world_ch.png differ diff --git a/images/worlds/world_d.png b/images/worlds/world_d.png new file mode 100644 index 0000000..e8a9bed Binary files /dev/null and b/images/worlds/world_d.png differ diff --git a/images/worlds/world_dh.png b/images/worlds/world_dh.png new file mode 100644 index 0000000..116a0e9 Binary files /dev/null and b/images/worlds/world_dh.png differ diff --git a/images/worlds/world_g.png b/images/worlds/world_g.png new file mode 100644 index 0000000..af60b5e Binary files /dev/null and b/images/worlds/world_g.png differ diff --git a/images/worlds/world_k.png b/images/worlds/world_k.png new file mode 100644 index 0000000..ac41ab6 Binary files /dev/null and b/images/worlds/world_k.png differ diff --git a/images/worlds/world_l.png b/images/worlds/world_l.png new file mode 100644 index 0000000..19b9455 Binary files /dev/null and b/images/worlds/world_l.png differ diff --git a/images/worlds/world_n.png b/images/worlds/world_n.png new file mode 100644 index 0000000..221c2e3 Binary files /dev/null and b/images/worlds/world_n.png differ diff --git a/images/worlds/world_nh.png b/images/worlds/world_nh.png new file mode 100644 index 0000000..d41ae4f Binary files /dev/null and b/images/worlds/world_nh.png differ diff --git a/images/worlds/world_r.png b/images/worlds/world_r.png new file mode 100644 index 0000000..ece887f Binary files /dev/null and b/images/worlds/world_r.png differ diff --git a/images/worlds/world_s.png b/images/worlds/world_s.png new file mode 100644 index 0000000..2bc51ec Binary files /dev/null and b/images/worlds/world_s.png differ diff --git a/images/worlds/world_sh.png b/images/worlds/world_sh.png new file mode 100644 index 0000000..4661f7a Binary files /dev/null and b/images/worlds/world_sh.png differ diff --git a/images/worlds/world_t.png b/images/worlds/world_t.png new file mode 100644 index 0000000..9886678 Binary files /dev/null and b/images/worlds/world_t.png differ diff --git a/images/worlds/world_th.png b/images/worlds/world_th.png new file mode 100644 index 0000000..7b40bd3 Binary files /dev/null and b/images/worlds/world_th.png differ diff --git a/images/worlds/world_z.jpg b/images/worlds/world_z.jpg new file mode 100644 index 0000000..4e5408d Binary files /dev/null and b/images/worlds/world_z.jpg differ diff --git a/images/worlds/world_zh.png b/images/worlds/world_zh.png new file mode 100644 index 0000000..460128e Binary files /dev/null and b/images/worlds/world_zh.png differ diff --git a/images/worlds/zaloha/world_c.png b/images/worlds/zaloha/world_c.png new file mode 100644 index 0000000..2e6609e Binary files /dev/null and b/images/worlds/zaloha/world_c.png differ diff --git a/images/worlds/zaloha/world_ch.png b/images/worlds/zaloha/world_ch.png new file mode 100644 index 0000000..4110e11 Binary files /dev/null and b/images/worlds/zaloha/world_ch.png differ diff --git a/images/worlds/zaloha/world_g.png b/images/worlds/zaloha/world_g.png new file mode 100644 index 0000000..75eee93 Binary files /dev/null and b/images/worlds/zaloha/world_g.png differ diff --git a/images/worlds/zaloha/world_k.png b/images/worlds/zaloha/world_k.png new file mode 100644 index 0000000..522d3f6 Binary files /dev/null and b/images/worlds/zaloha/world_k.png differ diff --git a/images/worlds/zaloha/world_n.png b/images/worlds/zaloha/world_n.png new file mode 100644 index 0000000..950acac Binary files /dev/null and b/images/worlds/zaloha/world_n.png differ diff --git a/images/worlds/zaloha/world_sh.png b/images/worlds/zaloha/world_sh.png new file mode 100644 index 0000000..24a74ab Binary files /dev/null and b/images/worlds/zaloha/world_sh.png differ diff --git a/images/worlds/zaloha/world_t.png b/images/worlds/zaloha/world_t.png new file mode 100644 index 0000000..8e9fd59 Binary files /dev/null and b/images/worlds/zaloha/world_t.png differ diff --git a/images/worlds/zaloha/world_z.jpg b/images/worlds/zaloha/world_z.jpg new file mode 100644 index 0000000..ab197ba Binary files /dev/null and b/images/worlds/zaloha/world_z.jpg differ diff --git a/images/worlds/zaloha/world_zh.png b/images/worlds/zaloha/world_zh.png new file mode 100644 index 0000000..5c1a9fc Binary files /dev/null and b/images/worlds/zaloha/world_zh.png differ diff --git a/images/zamok.png b/images/zamok.png new file mode 100644 index 0000000..5cf600e Binary files /dev/null and b/images/zamok.png differ diff --git a/images/zlato.png b/images/zlato.png new file mode 100644 index 0000000..aabb11a Binary files /dev/null and b/images/zlato.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..aa43925 --- /dev/null +++ b/index.html @@ -0,0 +1,154 @@ + + + + + + + + + Baník Jožino: Logopedická hra - Diplomová práca + + + + + + + + + + + + + + + +
+
+ +
+
Načítavam...
+
+
+ +
+ +
+ +
+
+
JOŽINO
+
BANÍK
+
+
+ + + + + +
+
+ + + +
+
+ + Jožino Baník +
+
+
+ + + + + + + + + + + + + + + + diff --git a/index.js b/index.js new file mode 100644 index 0000000..9e2ce6a --- /dev/null +++ b/index.js @@ -0,0 +1,50 @@ +const { app, BrowserWindow } = require('electron'); +const path = require('path'); + +// Handle creating/removing shortcuts on Windows when installing/uninstalling. +if (require('electron-squirrel-startup')) { + app.quit(); +} + +const createWindow = () => { + // Create the browser window. + const mainWindow = new BrowserWindow({ + width: 1600, + height: 1000, + webPreferences: { + preload: path.join(__dirname, 'preload.js'), + }, + }); + + // and load the index.html of the app. + mainWindow.loadFile(path.join(__dirname, 'index.html')); + + // Open the DevTools. + mainWindow.webContents.openDevTools(); +}; + +// This method will be called when Electron has finished +// initialization and is ready to create browser windows. +// Some APIs can only be used after this event occurs. +app.on('ready', createWindow); + +// Quit when all windows are closed, except on macOS. There, it's common +// for applications and their menu bar to stay active until the user quits +// explicitly with Cmd + Q. +app.on('window-all-closed', () => { + if (process.platform !== 'darwin') { + app.quit(); + } +}); + +app.on('activate', () => { + // On OS X it's common to re-create a window in the app when the + // dock icon is clicked and there are no other windows open. + if (BrowserWindow.getAllWindows().length === 0) { + createWindow(); + } +}); + +// In this file you can include the rest of your app's specific main process +// code. You can also put them in separate files and import them here. + diff --git a/js/basics/menu.js b/js/basics/menu.js new file mode 100644 index 0000000..b09991e --- /dev/null +++ b/js/basics/menu.js @@ -0,0 +1,227 @@ +/** + * JavaScript súbor pre menu.html - spracovanie interaktívnych prvkov + * Autor: Adam Reňak + */ + +// Čakanie na načítanie DOM obsahu +document.addEventListener('DOMContentLoaded', function() { + window.addEventListener('load', function() { + setTimeout(hideLoadingScreen, 1000); // Čaká 1 sekundu potom skryje + }); + + console.log('Menu načítané a pripravené na použitie'); + initializeMenu(); +}); + +/** + * Skrytie loading screen s animáciou + */ +function hideLoadingScreen() { + const loadingScreen = document.getElementById('loading-screen'); + if (loadingScreen) { + loadingScreen.style.opacity = '0'; + setTimeout(() => { + loadingScreen.style.display = 'none'; + }, 500); + } +} + +/** + * Hlavná inicializačná funkcia pre menu + */ +function initializeMenu() { + setupModalHandlers(); + setupMenuButtons(); + setupCharacterAnimation(); +} + +/** + * Nastavenie obsluhy modálnych okien (pravidlá, o projekte) + */ +function setupModalHandlers() { + // Rules modal + const rulesModal = document.getElementById('rules-modal'); + const showInfoButton = document.querySelector('.show-rules'); + const rulesCloseButton = rulesModal?.querySelector('.close'); + + // About modal + const aboutModal = document.getElementById('about-modal'); + const showAboutButton = document.querySelector('.show-about'); + const aboutCloseButton = aboutModal?.querySelector('.close'); + + // Rules modal handlers + if (rulesModal && showInfoButton && rulesCloseButton) { + showInfoButton.addEventListener('click', function(event) { + event.preventDefault(); + openModal(rulesModal); + }); + + rulesCloseButton.addEventListener('click', function() { + closeModal(rulesModal); + }); + } + + // About modal handlers + if (aboutModal && showAboutButton && aboutCloseButton) { + showAboutButton.addEventListener('click', function(event) { + event.preventDefault(); + openModal(aboutModal); + }); + + aboutCloseButton.addEventListener('click', function() { + closeModal(aboutModal); + }); + } + + /** + // Zatvorenie modálneho okna po kliknutí mimo obsahu + window.addEventListener('click', function(event) { + if (event.target === modal) { + console.log('Zatváram modal - klik mimo obsah'); + closeModal(modal); + } + }); + */ +} + +/** + * Otvorenie modálneho okna s animáciou + */ +function openModal(modal) { + console.log('Otváram modal'); + modal.style.display = 'block'; + modal.style.opacity = '0'; + setTimeout(() => { + modal.style.opacity = '1'; + setupModalScrolling(); // Inicializuj scrollovanie + }, 10); +} + +/** + * Funkcia na zatvorenie modálneho okna s animáciou + * @param {HTMLElement} modal - Modal element na zatvorenie + */ +function closeModal(modal) { + modal.style.opacity = '0'; + setTimeout(() => { + modal.style.display = 'none'; + }, 300); +} + + + +/** + * Nastavenie scroll funkcionalite pre modal obsah + */ +function setupModalScrolling() { + const modalContent = document.querySelector('.modal-text-content'); + const arrowUp = document.querySelector('.modal-arrow-up'); + const arrowDown = document.querySelector('.modal-arrow-down'); + + if (!modalContent || !arrowUp || !arrowDown) return; + + function updateArrows() { + const isAtTop = modalContent.scrollTop <= 5; + const isAtBottom = modalContent.scrollTop + modalContent.clientHeight >= modalContent.scrollHeight - 5; + + arrowUp.style.opacity = isAtTop ? '0.3' : '1'; + arrowDown.style.opacity = isAtBottom ? '0.3' : '1'; + } + + // Scroll hore + arrowUp.addEventListener('click', function() { + modalContent.scrollBy({ top: -100, behavior: 'smooth' }); + }); + + // Scroll dole + arrowDown.addEventListener('click', function() { + modalContent.scrollBy({ top: 100, behavior: 'smooth' }); + }); + + modalContent.addEventListener('scroll', updateArrows); + updateArrows(); +} + +/** + * Nastavenie obsluhy menu tlačidiel + */ +function setupMenuButtons() { + const menuButtons = document.querySelectorAll('.menu-button'); + + menuButtons.forEach(button => { + button.addEventListener('click', function(event) { + this.style.transform = 'translateY(0) scale(0.95)'; + setTimeout(() => { + this.style.transform = ''; + }, 150); + }); + }); +} + +/** + * Nastavenie animácie pre postavičku + */ +function setupCharacterAnimation() { + const characterImage = document.querySelector('.character-image'); + + if (!characterImage) { + console.warn('Obrázok postavičky nebol nájdený'); + return; + } + + // Náhodná animácia postavičky každých 5 sekúnd + setInterval(() => { + playCharacterAnimation(characterImage); + }, 5000); + + // Animácia pri kliknutí na postavičku + characterImage.addEventListener('click', function() { + console.log('Klik na postavičku'); + playCharacterClickAnimation(this); + playClickSound(); + }); +} + +/** + * Prehranie animácie postavičky + * @param {HTMLElement} character - Element obrázka postavičky + */ +function playCharacterAnimation(character) { + // Jemné pokývanie postavičky + character.style.transform = 'rotate(0.093deg) scale(1.02)'; + + setTimeout(() => { + character.style.transform = 'rotate(-0.093deg) scale(1.02)'; + }, 500); + + setTimeout(() => { + character.style.transform = 'rotate(0.093deg) scale(1)'; + }, 1000); +} + +/** + * Animácia pri kliknutí na postavičku + * @param {HTMLElement} character - Element obrázka postavičky + */ +function playCharacterClickAnimation(character) { + character.style.transform = 'rotate(0.093deg) scale(1.1)'; + setTimeout(() => { + character.style.transform = 'rotate(0.093deg) scale(1)'; + }, 300); +} + +/** + * Funkcia pre ladenie - výpis informácií o menu + */ +function debugMenuInfo() { + console.log('=== DEBUG INFO MENU ==='); + console.log('Počet menu tlačidiel:', document.querySelectorAll('.menu-button').length); + console.log('Modal existuje:', !!document.getElementById('rules-modal')); + console.log('Postavička existuje:', !!document.querySelector('.character-image')); + console.log('========================'); +} + +// Spustenie debug informácií v development móde +if (window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1') { + setTimeout(debugMenuInfo, 1000); +} \ No newline at end of file diff --git a/js/basics/worldsmenu.js b/js/basics/worldsmenu.js new file mode 100644 index 0000000..762bef7 --- /dev/null +++ b/js/basics/worldsmenu.js @@ -0,0 +1,1800 @@ +/** + * JavaScript súbor pre worldsmenu.html - spracovanie interaktívnych prvkov + * Integrovaný s config/worlds.js a config/levels.js + * Autor: Adam Reňak + */ + +// Globálne premenné +let allWorlds = []; // Všetky svety z config/worlds.js +let currentWorldIndex = 0; // Index aktuálneho sveta (stred z 3 zobrazených) +let visibleWorldsStartIndex = 0; // Index prvého zo 3 zobrazených svetov +let currentSelectedWorld = null; // Aktuálne vybraný svet pre zobrazenie levelov +let playerProgress = null; // Pokrok hráča +let allWorldButtons = []; // NOVÉ: Cache pre všetky predgenerované world buttony + +// Čakanie na načítanie DOM obsahu +document.addEventListener('DOMContentLoaded', function() { + console.log('World menu načítané a pripravené na použitie'); + + // Spusti preloading ako prvé + if (typeof startWorldsMenuPreloading === 'function') { + // Najprv preloading, potom inicializácia + startWorldsMenuPreloading().then(() => { + console.log('✅ Preloading dokončený, inicializujem menu...'); + initializeWorldsMenu(); + }).catch(error => { + console.error('❌ Chyba pri preloadingu, inicializujem menu aj tak...', error); + initializeWorldsMenu(); + }); + } else { + // Fallback ak preloader nie je dostupný + console.warn('⚠️ Preloader nie je dostupný, používam základné načítanie'); + window.addEventListener('load', function() { + setTimeout(hideLoadingScreen, 1000); + }); + initializeWorldsMenu(); + } +}); + +/** + * Skrytie loading screen s animáciou + */ +function hideLoadingScreen() { + const loadingScreen = document.getElementById('loading-screen'); + if (loadingScreen) { + loadingScreen.style.opacity = '0'; + setTimeout(() => { + loadingScreen.style.display = 'none'; + }, 500); + } +} + +// ===== INICIALIZÁCIA MENU SVETOV ===== +async function initializeWorldsMenu() { + console.log('Inicializujem worlds menu s config súbormi...'); + + try { + // Načítaj konfigurácie svetov + await loadWorldsConfiguration(); + + // Načítaj pokrok hráča + loadPlayerProgress(); + + // NOVÉ: Vytvor všetky world buttony naraz (predgenerované) + createAllWorldButtons(); + + // Nastaví počiatočný svet (najaktívnejší alebo prvý odomknutý) + setInitialWorld(); + + // Nastaví event listenery + setupEventListeners(); + + // Aktualizuje zobrazenie + updateDisplay(); + + console.log('Worlds menu úspešne inicializované'); + } catch (error) { + console.error('Chyba pri inicializácii worlds menu:', error); + // Fallback na základnú konfiguráciu + setupFallbackConfiguration(); + } +} + +/** + * Načítanie konfigurácie svetov + */ +async function loadWorldsConfiguration() { + console.log('Načítavam konfiguráciu svetov...'); + + // Skontroluj či sú dostupné funkcie z config súborov + if (typeof getAllWorlds === 'function') { + allWorlds = getAllWorlds(); + console.log(`Načítaných ${allWorlds.length} svetov:`, allWorlds.map(w => w.name)); + } else { + throw new Error('Funkcia getAllWorlds nie je dostupná'); + } + + // Inicializuj všetky svety ako odomknuté (podľa požiadavky) + allWorlds.forEach(world => { + world.isUnlocked = true; // Všetky svety sú odomknuté + }); +} + +/** + * Načítanie pokroku hráča + */ +function loadPlayerProgress() { + console.log('Načítavam pokrok hráča...'); + + // Pokús sa načítať z progressManager ak existuje + if (window.progressManager) { + playerProgress = window.progressManager.getProgress(); + console.log('Pokrok načítaný z progressManager'); + ensureAllWorldsUnlockedWithFirstLevel(); + } else { + // Vytvor základný pokrok + playerProgress = createDefaultProgress(); + console.log('Vytvorený základný pokrok'); + } +} + +/** + * Vytvorenie základného pokroku ak neexistuje progressManager + */ +function createDefaultProgress() { + const progress = { + worlds: {} + }; + + allWorlds.forEach(world => { + progress.worlds[world.id] = { + isUnlocked: true, // Všetky svety sú odomknuté + totalStars: 0, + completedLevels: 0, + levels: {} + }; + + // Ak existuje getWorldLevels, pridaj levely + if (typeof getWorldLevels === 'function') { + const worldLevels = getWorldLevels(world.id); + worldLevels.forEach((level, index) => { + progress.worlds[world.id].levels[level.id] = { + isUnlocked: index === 0, // Prvý level je odomknutý + stars: 0, + completed: false + }; + }); + } + }); + + return progress; +} + +/** + * Nastavenie počiatočného sveta + */ +function setInitialWorld() { + console.log('Nastavujem počiatočný svet...'); + + // Nájdi svet s najvyšším pokrokom alebo prvý odomknutý + let bestWorldIndex = 0; + let maxProgress = -1; + + allWorlds.forEach((world, index) => { + if (world.isUnlocked && playerProgress.worlds[world.id]) { + const worldProgress = playerProgress.worlds[world.id]; + const progress = worldProgress.completedLevels || 0; + + if (progress > maxProgress) { + maxProgress = progress; + bestWorldIndex = index; + } + } + }); + + currentWorldIndex = bestWorldIndex; + currentSelectedWorld = allWorlds[currentWorldIndex]; + + // Nastav visible worlds tak, aby bol vybraný svet v strede + setVisibleWorldsForCenter(currentWorldIndex); + + console.log(`Počiatočný svet: ${currentSelectedWorld.name} (index: ${currentWorldIndex})`); +} + +/** + * NOVÁ FUNKCIA: Zabezpečenie, že všetky svety majú odomknuté prvé levely + */ +function ensureAllWorldsUnlockedWithFirstLevel() { + console.log('Zabezpečujem odomknuté prvé levely pre všetky svety...'); + + let needsSave = false; + + allWorlds.forEach(world => { + // Zabezpeč, že svet je odomknutý + if (!playerProgress.worlds[world.id]) { + playerProgress.worlds[world.id] = { + isUnlocked: true, + totalStars: 0, + completedLevels: 0, + levels: {} + }; + needsSave = true; + } else if (!playerProgress.worlds[world.id].isUnlocked) { + playerProgress.worlds[world.id].isUnlocked = true; + needsSave = true; + console.log(`Odomykam svet: ${world.name}`); + } + + // Zabezpeč, že prvý level je odomknutý + if (typeof getWorldLevels === 'function') { + const worldLevels = getWorldLevels(world.id); + if (worldLevels.length > 0) { + const firstLevel = worldLevels[0]; + + if (!playerProgress.worlds[world.id].levels[firstLevel.id]) { + playerProgress.worlds[world.id].levels[firstLevel.id] = { + isUnlocked: true, + stars: 0, + completed: false + }; + needsSave = true; + console.log(`Odomykam prvý level ${firstLevel.id} v svete ${world.name}`); + } else if (!playerProgress.worlds[world.id].levels[firstLevel.id].isUnlocked) { + playerProgress.worlds[world.id].levels[firstLevel.id].isUnlocked = true; + needsSave = true; + console.log(`Opravujem odomknutie prvého levelu ${firstLevel.id} v svete ${world.name}`); + } + } + } + }); + + // Ulož zmeny ak boli nejaké + if (needsSave && window.progressManager) { + window.progressManager.saveProgress(); + console.log('Uložené opravy pokroku'); + } +} + +/** + * Nastavenie viditeľných svetov s vybraným svetom v strede + */ +function setVisibleWorldsForCenter(centerIndex) { + visibleWorldsStartIndex = Math.max(0, centerIndex - 1); + + // Zabezpečí, aby sme mali vždy 3 svety ak je to možné + if (visibleWorldsStartIndex + 2 >= allWorlds.length) { + visibleWorldsStartIndex = Math.max(0, allWorlds.length - 3); + } +} + +/** + * Event listenery pre checkboxy + */ +function setupTrainingModalListeners() { + document.addEventListener('DOMContentLoaded', function() { + const showLockedCheckbox = document.getElementById('show-locked-words'); + const showAllWorldsCheckbox = document.getElementById('show-all-worlds-words'); + + if (showLockedCheckbox) { + showLockedCheckbox.addEventListener('change', updateWordsDisplay); + } + + if (showAllWorldsCheckbox) { + showAllWorldsCheckbox.addEventListener('change', function() { + updateWordsDisplay(); + }); + } + }); +} + +/** + * Nastavenie event listenerov pre training modal keď sa vytvára + */ +function setupTrainingModalEvents() { + const showLockedCheckbox = document.getElementById('show-locked-words'); + const showAllWorldsCheckbox = document.getElementById('show-all-worlds-words'); + const closeBtn = document.getElementById('training-modal-close'); + const startBtn = document.getElementById('start-training-btn'); + + console.log('Nastavujem event listenery pre training modal'); + + if (showLockedCheckbox) { + showLockedCheckbox.addEventListener('change', updateWordsDisplay); + console.log('Show locked words checkbox listener nastavený'); + } + + if (showAllWorldsCheckbox) { + showAllWorldsCheckbox.addEventListener('change', function() { + console.log('Show all worlds checkbox clicked'); + updateWordsDisplay(); + }); + console.log('Show all worlds checkbox listener nastavený'); + } + + if (closeBtn) { + closeBtn.addEventListener('click', closeTrainingModal); + console.log('Close button listener nastavený'); + } + + if (startBtn) { + startBtn.addEventListener('click', startTrainingLevel); + console.log('Start button listener nastavený'); + } +} + +/** + * Aktualizácia setupEventListeners funkcie - pridanie pexeso button listenera + */ +function setupEventListeners() { + console.log('Nastavujem event listenery...'); + + // Navigačné šípky + const prevButton = document.getElementById('prev-world'); + const nextButton = document.getElementById('next-world'); + const banikButton = document.getElementById('banik-button'); + const pexesoButton = document.getElementById('pexeso-button'); // PRIDANÉ + + if (prevButton) { + prevButton.addEventListener('click', () => { + navigateWorlds(-1); + }); + } + + if (nextButton) { + nextButton.addEventListener('click', () => { + navigateWorlds(1); + }); + } + + if (banikButton) { + banikButton.addEventListener('click', openTrainingModal); + } + + // PRIDANÉ: Event listener pre pexeso training + if (pexesoButton) { + pexesoButton.addEventListener('click', openPexesoTrainingModal); + console.log('✅ Pexeso button event listener nastavený'); + } + + // Tlačidlá svetov - pridajú sa dynamicky v updateWorldButtons() + // Level cards - pridajú sa dynamicky v updateLevelsGrid() + + // Event listener pre level modal zatvorenie + setupLevelModalListeners(); + setupTrainingModalListeners(); + setupPexesoTrainingModalListeners(); +} + +/** + * Nastavenie listenerov pre level modal + */ +function setupLevelModalListeners() { + // Zatvorenie modalu kliknutím na overlay + document.addEventListener('click', (e) => { + if (e.target.classList.contains('level-modal-overlay')) { + closeLevelModal(); + } + }); + + // Zatvorenie modalu ESC klávesou + document.addEventListener('keydown', (e) => { + if (e.key === 'Escape') { + closeLevelModal(); + } + }); +} + +/** + * Navigácia medzi svetmi (šípky) + * OPRAVENÉ: Plynulá cyklická navigácia - vždy posun o 1 svet + */ +function navigateWorlds(direction) { + console.log(`Navigujem svety: ${direction}`); + + // Vypočítaj nový index s wrap-around (modulo) + visibleWorldsStartIndex = (visibleWorldsStartIndex + direction + allWorlds.length) % allWorlds.length; + + // Aktualizuj display + updateDisplay(); +} + +/** + * Výber konkrétneho sveta (kliknutie na tlačidlo) + */ +function selectWorld(worldIndex) { + console.log(`Vyberám svet: ${worldIndex}`); + + if (worldIndex >= 0 && worldIndex < allWorlds.length) { + currentWorldIndex = worldIndex; + currentSelectedWorld = allWorlds[worldIndex]; + updateDisplay(); + } +} + +/** + * Hlavná funkcia na aktualizáciu celého zobrazenia + */ +function updateDisplay() { + console.log('Aktualizujem zobrazenie...'); + + // Aktualizuj tlačidlá svetov (horná navigácia) + updateWorldButtons(); + + // Aktualizuj názov sveta + updateWorldTitle(); + + // Aktualizuj pozadie herného panelu + updateGamePanelBackground(); + + // Aktualizuj grid levelov + updateLevelsGrid(); + + // Aktualizuj počet hviezd + updateStarsDisplay(); +} + +/** + * NOVÁ FUNKCIA: Vytvorenie všetkých world buttonov naraz + * Volá sa raz pri inicializácii, čím sa eliminuje prebliknutie pri navigácii + */ +function createAllWorldButtons() { + console.log('🎨 Vytváram všetky world buttony naraz...'); + + // Vymaž staré buttony ak existujú + allWorldButtons = []; + + // Vytvor button pre každý svet + allWorlds.forEach((world, worldIndex) => { + const button = document.createElement('button'); + button.className = 'world-button'; + button.dataset.worldIndex = worldIndex; + + // Aplikuj pozadie priamo z prednačítanej cache + applyWorldButtonBackground(button, world); + + // Vytvor span s písmenom + const span = document.createElement('span'); + span.textContent = world.name; // Písmeno (napr. "R", "L", "S") + button.appendChild(span); + + // Event listener + button.addEventListener('click', () => { + selectWorld(worldIndex); + }); + + // Skry button defaultne (zobrazíme len potrebné 3) + button.style.display = 'none'; + + // Ulož do cache + allWorldButtons[worldIndex] = button; + }); + + console.log(`✅ Predgenerovaných ${allWorldButtons.length} world buttonov`); +} + +/** + * Aktualizácia tlačidiel svetov (3 viditeľné) + */ +/** + * Aktualizácia tlačidiel svetov (3 viditeľné) + * UPRAVENÉ: Používa predgenerované buttony namiesto vytvárania nových + */ +function updateWorldButtons() { + const container = document.querySelector('.worlds-buttons-container'); + if (!container) return; + + // Vymaž container + container.innerHTML = ''; + + // Najprv skry všetky buttony a odstráň active triedu + allWorldButtons.forEach(button => { + if (button) { + button.classList.remove('active'); + button.style.display = 'none'; + } + }); + + // Zobraz 3 viditeľné buttony s wrap-around + for (let i = 0; i < 3; i++) { + // Vypočítaj worldIndex s wrap-around (modulo) + const worldIndex = (visibleWorldsStartIndex + i) % allWorlds.length; + const button = allWorldButtons[worldIndex]; + + if (button) { + // Zobraz button + button.style.display = 'block'; + + // Pridaj active triedu ak je to aktuálny svet + if (worldIndex === currentWorldIndex) { + button.classList.add('active'); + } + + // Pridaj do containera + container.appendChild(button); + } + } +} + +/** + * NOVÁ FUNKCIA: Aplikuje pozadie world buttonu z prednačítanej cache + * Toto zabezpečí okamžité zobrazenie bez prebliknutia + */ +function applyWorldButtonBackground(button, world) { + // Mapovanie world name na súbor pozadia + const backgroundMap = { + 'R': 'world_r.png', + 'L': 'world_l.png', + + 'C': 'world_c.png', + 'Z': 'world_z.jpg', + 'S': 'world_s.png', + + 'Č': 'world_ch.png', + 'Ž': 'world_zh.png', + 'Š': 'world_sh.png', + + 'K': 'world_k.png', + 'G': 'world_g.png', + + 'D': 'world_d.png', + 'T': 'world_t.png', + 'N': 'world_n.png', + + 'Ď': 'world_dh.png', + 'Ť': 'world_th.png', + 'Ň': 'world_nh.png', + }; + + const backgroundFile = backgroundMap[world.name]; + if (!backgroundFile) { + console.warn(`⚠️ Nenašiel sa background pre svet: ${world.name}`); + return; + } + + const imagePath = `images/worlds/${backgroundFile}`; + + // Skús použiť prednačítaný obrázok z cache + if (typeof getPreloadedImage === 'function') { + const preloadedImg = getPreloadedImage(imagePath); + + if (preloadedImg) { + // Použij prednačítaný obrázok - okamžite bez čakania! + button.style.backgroundImage = `url('${preloadedImg.src}')`; + button.style.backgroundSize = '115%'; + button.style.backgroundPosition = 'center center'; + button.style.backgroundRepeat = 'no-repeat'; + console.log(`✅ Použitý prednačítaný obrázok pre ${world.name}`); + } else { + // Fallback na CSS triedu ak obrázok nie je v cache + console.log(`⚠️ Obrázok ${imagePath} nie je v cache, používam CSS`); + button.classList.add(`world-${world.name.toLowerCase()}`); + } + } else { + // Fallback ak preloader nie je dostupný + button.classList.add(`world-${world.name.toLowerCase()}`); + } +} + +/** + * Aktualizácia názvu sveta + */ +function updateWorldTitle() { + const titleElement = document.getElementById('world-title'); + if (titleElement && currentSelectedWorld) { + titleElement.textContent = `LEVELY ${currentSelectedWorld.name}`; + } +} + +/** + * Aktualizácia pozadia herného panelu + */ +function updateGamePanelBackground() { + const gamePanel = document.getElementById('game-panel'); + if (!gamePanel || !currentSelectedWorld) return; + + // Odstráni všetky world-bg triedy + gamePanel.classList.remove(...Array.from(gamePanel.classList).filter(cls => cls.includes('world-') && cls.includes('-bg'))); + + // Pridá novú background triedu + const bgClass = `world-${currentSelectedWorld.name.toLowerCase()}-bg`; + gamePanel.classList.add(bgClass); +} + +/** + * Aktualizácia gridu levelov + */ +function updateLevelsGrid() { + const gridElement = document.getElementById('levels-grid'); + if (!gridElement || !currentSelectedWorld) return; + + console.log(`Aktualizujem levely pre svet: ${currentSelectedWorld.name}`); + + // Vymaž existujúce levely + gridElement.innerHTML = ''; + + // Načítaj levely pre aktuálny svet + let worldLevels = []; + if (typeof getWorldLevels === 'function') { + worldLevels = getWorldLevels(currentSelectedWorld.id); + } + + if (worldLevels.length === 0) { + gridElement.innerHTML = `

Žiadne levely pre svet ${currentSelectedWorld.name}

`; + return; + } + + // Vygeneruj level cards + worldLevels.forEach((level, index) => { + const levelCard = createLevelCard(level, index + 1); + gridElement.appendChild(levelCard); + }); +} + +/** + * Vytvorenie level card + */ +function createLevelCard(level, levelNumber) { + const card = document.createElement('div'); + card.className = 'level-card'; + card.dataset.levelId = level.id; + + // Získaj pokrok levelu + const levelProgress = playerProgress?.worlds?.[level.worldId]?.levels?.[level.id]; + const isUnlocked = levelProgress?.isUnlocked || false; + const stars = levelProgress?.stars || 0; + + if (isUnlocked) { + // Odomknutý level + card.innerHTML = ` +
+

${levelNumber}

+
+
+ ${generateStarsHTML(stars)} +
+ `; + + // Event listener na otvorenie modalu + card.addEventListener('click', () => { + openLevelModal(level, levelNumber); + }); + } else { + // Zamknutý level + card.innerHTML = ` +
+ Zamknutý +
+
+

${levelNumber}

+
+
+ ${generateStarsHTML(0)} +
+ `; + } + + return card; +} + +/** + * Generovanie HTML pre hviezdy + */ +function generateStarsHTML(stars) { + let html = ''; + for (let i = 0; i < 3; i++) { + const starClass = i < stars ? 'active-star' : 'deactive-star'; + html += `Hviezda`; + } + return html; +} + +/** + * Aktualizácia zobrazenia počtu hviezd + */ +function updateStarsDisplay() { + const starsCountElement = document.getElementById('stars-count'); + if (!starsCountElement || !currentSelectedWorld || !playerProgress) return; + + const worldProgress = playerProgress.worlds[currentSelectedWorld.id]; + const currentStars = worldProgress?.stars || 0; + + // Spočítaj maximálny počet hviezd pre svet + let maxStars = 0; + if (typeof getWorldLevels === 'function') { + const worldLevels = getWorldLevels(currentSelectedWorld.id); + maxStars = worldLevels.length * 3; // 3 hviezdy za level + } + + starsCountElement.textContent = currentStars; + + // Aktualizuj aj total + const starsTotalElement = document.querySelector('.stars-total'); + if (starsTotalElement) { + starsTotalElement.textContent = ` / ${maxStars}`; + } +} + +/** + * Otvorenie modalu s detailami levelu + */ +function openLevelModal(level, levelNumber) { + console.log(`Otváram modal pre level: ${level.name}`); + + // Vytvor modal ak neexistuje + createLevelModalIfNotExists(); + + // Naplň modal dátami + populateLevelModal(level, levelNumber); + + // Zobraz modal + const modal = document.getElementById('level-detail-modal'); + if (modal) { + modal.style.display = 'flex'; + document.body.style.overflow = 'hidden'; // Zablokuj scrollovanie + } +} + +/** + * Vytvorenie level modalu ak neexistuje + */ +function createLevelModalIfNotExists() { + if (document.getElementById('level-detail-modal')) return; + + const modalHTML = ` + + `; + + document.body.insertAdjacentHTML('beforeend', modalHTML); + + // Pridaj event listenery + document.getElementById('modal-close-btn').addEventListener('click', closeLevelModal); + document.getElementById('modal-play-btn').addEventListener('click', playSelectedLevel); +} + +/** + * Naplnenie modalu dátami levelu + */ +function populateLevelModal(level, levelNumber) { + document.getElementById('modal-level-name').textContent = `Level ${levelNumber}`; + document.getElementById('modal-world-name').textContent = currentSelectedWorld.title || currentSelectedWorld.name; + document.getElementById('modal-game-type').textContent = getGameTypeName(level.gameType); + + // Slová + const wordsContainer = document.getElementById('modal-words'); + wordsContainer.innerHTML = ''; + level.words.forEach(word => { + const wordSpan = document.createElement('span'); + wordSpan.className = 'word-tag'; + wordSpan.textContent = word; + wordsContainer.appendChild(wordSpan); + }); + + // Pokrok + const levelProgress = playerProgress?.worlds?.[level.worldId]?.levels?.[level.id]; + const stars = levelProgress?.stars || 0; + const bestTime = levelProgress?.bestTime; + + document.getElementById('modal-stars').innerHTML = generateStarsHTML(stars); + document.getElementById('modal-best-time').textContent = `Najlepší čas: ${bestTime ? formatTime(bestTime) : '--:--'}`; + + // Ulož aktuálny level pre play button + document.getElementById('modal-play-btn').dataset.levelId = level.id; +} + +/** + * Získanie názvu typu hry + */ +function getGameTypeName(gameType) { + const names = { + 'banik': 'Baník', + 'pexeso': 'Pexeso', + 'mario': 'Super Mario' + }; + return names[gameType] || gameType; +} + +/** + * Formátovanie času + */ +function formatTime(seconds) { + const mins = Math.floor(seconds / 60); + const secs = seconds % 60; + return `${mins}:${secs.toString().padStart(2, '0')}`; +} + +/** + * Zatvorenie level modalu + */ +function closeLevelModal() { + const modal = document.getElementById('level-detail-modal'); + if (modal) { + modal.style.display = 'none'; + document.body.style.overflow = 'auto'; // Obnoví scrollovanie + } +} + +/** + * Spustenie vybraného levelu + */ +function playSelectedLevel() { + const levelId = document.getElementById('modal-play-btn').dataset.levelId; + if (!levelId) return; + + console.log(`Spúšťam level: ${levelId}`); + + closeLevelModal(); + + // Pokús sa použiť gameRouter + if (window.gameRouter && typeof window.gameRouter.startLevel === 'function') { + window.gameRouter.startLevel(currentSelectedWorld.id, levelId); + } else { + // Fallback - priama navigácia s OPRAVENÝMI parametrami + const level = getLevelConfig(levelId); + if (level) { + const gameUrls = { + 'banik': 'game.html', + 'pexeso': 'pexeso.html', + 'mario': 'mario.html' + }; + const url = gameUrls[level.gameType]; + if (url) { + // OPRAVENÉ: worldId namiesto world, levelId namiesto level + window.location.href = `${url}?worldId=${currentSelectedWorld.id}&levelId=${levelId}`; + console.log(`Navigujem na: ${url}?worldId=${currentSelectedWorld.id}&levelId=${levelId}`); + } + } + } +} + +/** + * Fallback konfigurácia ak config súbory nie sú dostupné + */ +function setupFallbackConfiguration() { + console.warn('Používam fallback konfiguráciu'); + + allWorlds = [ + { id: 'world_r', name: 'R', title: 'Svet písmena R', isUnlocked: true }, + { id: 'world_l', name: 'L', title: 'Svet písmena L', isUnlocked: true }, + { id: 'world_s', name: 'S', title: 'Svet písmena S', isUnlocked: true } + ]; + + playerProgress = createDefaultProgress(); + setInitialWorld(); + setupEventListeners(); + updateDisplay(); +} + +// ===== POMOCNÉ FUNKCIE ===== + +/** + * Funkcia pre debugging + */ +function debugWorldsMenu() { + console.log('=== WORLDS MENU DEBUG ==='); + console.log('Všetky svety:', allWorlds); + console.log('Aktuálny svet:', currentSelectedWorld); + console.log('Visible worlds start:', visibleWorldsStartIndex); + console.log('Pokrok hráča:', playerProgress); + console.log('========================'); +} + +// Export pre testovanie (ak je potrebné) +if (typeof module !== 'undefined' && module.exports) { + module.exports = { + selectWorld, + navigateWorlds, + debugWorldsMenu + }; +} + + +/** + * Otvorenie training modalu + */ +function openTrainingModal() { + console.log('Otváram trénovací modal pre svet:', currentSelectedWorld.name); + + // Vytvor modal ak neexistuje + createTrainingModalIfNotExists(); + + // Naplň modal dátami + populateTrainingModal(); + + // Nastav event listenery PO vytvorení modalu + setupTrainingModalEvents(); + + // Zobraz modal + const modal = document.getElementById('training-modal'); + if (modal) { + modal.style.display = 'flex'; + document.body.style.overflow = 'hidden'; + } +} + +/** + * Vytvorenie training modalu ak neexistuje + */ +function createTrainingModalIfNotExists() { + if (document.getElementById('training-modal')) return; + + // Modal HTML je už v HTML súbore, takže len pridáme event listenery + document.addEventListener('DOMContentLoaded', function() { + const closeBtn = document.getElementById('training-modal-close'); + const startBtn = document.getElementById('start-training-btn'); + const includeAllCheckbox = document.getElementById('include-all-words'); + + if (closeBtn) { + closeBtn.addEventListener('click', closeTrainingModal); + } + + if (startBtn) { + startBtn.addEventListener('click', startTrainingLevel); + } + + if (includeAllCheckbox) { + includeAllCheckbox.addEventListener('change', toggleAllWords); + } + }); +} + +/** + * Naplnenie training modalu dátami + */ +function populateTrainingModal() { + // Aktualizuj názov sveta + const wordsTitle = document.getElementById('words-section-title'); + if (wordsTitle) { + wordsTitle.textContent = `Naučené slová zo sveta ${currentSelectedWorld.name}:`; + } + + // Načítaj len slová z odomknutých levelov + const unlockedWords = getUnlockedWorldWords(); + populateWordsList(unlockedWords); + + // Reset checkboxov + document.getElementById('show-locked-words').checked = false; + document.getElementById('show-all-worlds-words').checked = false; + + // Nastav predvolené hodnoty pre itemy + document.getElementById('diamonds-count').value = 2; + document.getElementById('golds-count').value = 2; + document.getElementById('crystals-count').value = 1; + + // PRIDANÉ: Nastav predvolené hodnoty pre rozšírené nastavenia + const speechExercisesInput = document.getElementById('speech-exercises-count'); + const listeningExercisesInput = document.getElementById('listening-exercises-count'); + + if (speechExercisesInput) { + speechExercisesInput.value = 2; // Predvolený počet slov v rečovom cvičení + } + + if (listeningExercisesInput) { + listeningExercisesInput.value = 1; // Predvolený počet slov v posluchovom cvičení + } + + // Skry rozšírené nastavenia pri otvorení modalu + const advancedPanel = document.getElementById('advanced-settings'); + const toggleBtn = document.getElementById('toggle-advanced-settings'); + if (advancedPanel) { + advancedPanel.style.display = 'none'; + } + if (toggleBtn) { + toggleBtn.classList.remove('active'); + } + + // Inicializuj rozšírené nastavenia + initializeAdvancedSettings(); +} + +/** + * Získanie slov len z odomknutých levelov aktuálneho sveta + */ +function getUnlockedWorldWords() { + const unlockedWords = []; + + if (typeof getWorldLevels === 'function' && currentSelectedWorld) { + const worldLevels = getWorldLevels(currentSelectedWorld.id); + worldLevels.forEach(level => { + const levelProgress = playerProgress?.worlds?.[level.worldId]?.levels?.[level.id]; + const isUnlocked = levelProgress?.isUnlocked || false; + + if (isUnlocked && level.words) { + level.words.forEach(word => { + if (!unlockedWords.includes(word)) { + unlockedWords.push(word); + } + }); + } + }); + } + + return unlockedWords.sort(); +} + +/** + * Získanie všetkých slov z aktuálneho sveta (vrátane zamknutých) + */ +function getAllCurrentWorldWords() { + const allWords = []; + + if (typeof getWorldLevels === 'function' && currentSelectedWorld) { + const worldLevels = getWorldLevels(currentSelectedWorld.id); + worldLevels.forEach(level => { + if (level.words) { + level.words.forEach(word => { + if (!allWords.find(w => w.text === word)) { + const levelProgress = playerProgress?.worlds?.[level.worldId]?.levels?.[level.id]; + const isUnlocked = levelProgress?.isUnlocked || false; + + allWords.push({ + text: word, + isUnlocked: isUnlocked + }); + } + }); + } + }); + } + + return allWords.sort((a, b) => a.text.localeCompare(b.text)); +} + +/** + * Získanie všetkých slov zo všetkých svetov + */ +function getAllWorldsWords() { + const allWords = []; + + if (typeof getWorldLevels === 'function') { + allWorlds.forEach(world => { + const worldLevels = getWorldLevels(world.id); + worldLevels.forEach(level => { + if (level.words) { + level.words.forEach(word => { + if (!allWords.find(w => w.text === word)) { + const levelProgress = playerProgress?.worlds?.[level.worldId]?.levels?.[level.id]; + const isUnlocked = levelProgress?.isUnlocked || false; + + allWords.push({ + text: word, + isUnlocked: isUnlocked, + world: world.name + }); + } + }); + } + }); + }); + } + + return allWords.sort((a, b) => a.text.localeCompare(b.text)); +} + +/** + * Naplnenie zoznamu slov + */ +function populateWordsList(words) { + const wordsContainer = document.getElementById('words-list'); + if (!wordsContainer) return; + + wordsContainer.innerHTML = ''; + + if (typeof words[0] === 'string') { + // Jednoduché slová (len text) + words.forEach(word => { + const wordElement = createWordElement(word, true); + wordsContainer.appendChild(wordElement); + }); + } else { + // Objekty s dodatočnými informáciami + words.forEach(wordObj => { + const wordElement = createWordElement(wordObj.text, wordObj.isUnlocked, wordObj.world); + wordsContainer.appendChild(wordElement); + }); + } +} + +/** + * Vytvorenie elementu pre slovo + */ +function createWordElement(word, isUnlocked = true, worldName = null) { + const wordElement = document.createElement('div'); + wordElement.className = 'word-item'; + wordElement.textContent = word; + wordElement.dataset.word = word; + + // ODSTRÁNENÉ: locked styling - všetky slová sú klikateľné + if (!isUnlocked) { + wordElement.classList.add('locked'); + wordElement.title = 'Toto slovo je zo zamknutého levelu'; + // Ale stále povoľ kliknutie + } + + if (worldName && worldName !== currentSelectedWorld.name) { + wordElement.title = `Slovo zo sveta ${worldName}`; + } + + // Event listener pre výber slova - funguje pre všetky slová + wordElement.addEventListener('click', function() { + console.log('Kliknuté na slovo:', word); + if (this.classList.contains('selected')) { + this.classList.remove('selected'); + console.log('Slovo odznačené:', word); + } else { + this.classList.add('selected'); + console.log('Slovo označené:', word); + } + }); + + return wordElement; +} + +/** + * Aktualizácia zobrazenia slov na základe checkboxov + */ +function updateWordsDisplay() { + const showLocked = document.getElementById('show-locked-words').checked; + const showAllWorlds = document.getElementById('show-all-worlds-words').checked; + const wordsTitle = document.getElementById('words-section-title'); + + let words; + let titleText; + + if (showAllWorlds) { + words = getAllWorldsWords(); + titleText = showLocked ? 'Všetky slová zo všetkých svetov:' : 'Naučené slová zo všetkých svetov:'; + if (!showLocked) { + words = words.filter(w => w.isUnlocked); + } + } else { + if (showLocked) { + words = getAllCurrentWorldWords(); + titleText = `Všetky slová zo sveta ${currentSelectedWorld.name}:`; + } else { + words = getUnlockedWorldWords(); + titleText = `Naučené slová zo sveta ${currentSelectedWorld.name}:`; + } + } + + wordsTitle.textContent = titleText; + populateWordsList(words); +} + +/** + * Spustenie tréningového levelu - aktualizovaná verzia + */ +function startTrainingLevel() { + // Zbieranie vybraných slov + const selectedWordElements = document.querySelectorAll('#words-list .word-item.selected'); + const selectedWords = Array.from(selectedWordElements).map(el => el.dataset.word); + + if (selectedWords.length === 0) { + alert('Prosím vyberte aspoň jedno slovo pre tréning!'); + return; + } + + // Získanie nastavení počtu itemov + const diamondsCount = parseInt(document.getElementById('diamonds-count').value) || 2; + const goldsCount = parseInt(document.getElementById('golds-count').value) || 3; + const crystalsCount = parseInt(document.getElementById('crystals-count').value) || 1; + + // Získanie rozšírených nastavení + const speechExercisesCount = parseInt(document.getElementById('speech-exercises-count')?.value) || 3; + const listeningExercisesCount = parseInt(document.getElementById('listening-exercises-count')?.value) || 1; + + + console.log('Spúšťam tréning:', { + words: selectedWords, + diamonds: diamondsCount, + golds: goldsCount, + crystals: crystalsCount, + speechExercises: speechExercisesCount, + listeningExercises: listeningExercisesCount + }); + + // Zatvor modal + closeTrainingModal(); + + // Vytvor custom levelConfig pre tréning + const trainingLevelConfig = { + words: selectedWords, + timeLimit: null, + isTraining: true, + gameConfig: { + diamonds: diamondsCount, + golds: goldsCount, + crystals: crystalsCount, + speechExercises: speechExercisesCount, + listeningExercises: listeningExercisesCount + } + }; + + // Spusti hru s tréningovým levelom + const gameUrl = `game.html?training=true&config=${encodeURIComponent(JSON.stringify(trainingLevelConfig))}`; + window.location.href = gameUrl; +} + +/** + * Zatvorenie training modalu + */ +function closeTrainingModal() { + const modal = document.getElementById('training-modal'); + if (modal) { + modal.style.display = 'none'; + document.body.style.overflow = 'auto'; + } +} + + + +function debugTrainingModal() { + console.log('=== TRAINING MODAL DEBUG ==='); + console.log('Modal element:', document.getElementById('training-modal')); + console.log('Close button:', document.getElementById('training-modal-close')); + console.log('Start button:', document.getElementById('start-training-btn')); + console.log('Show locked checkbox:', document.getElementById('show-locked-words')); + console.log('Show all worlds checkbox:', document.getElementById('show-all-worlds-words')); + console.log('Current selected world:', currentSelectedWorld); + console.log('============================'); +} + + + +// ========================================== +// PRIDANIE PEXESO CUSTOM LEVEL PODPORY DO WORLDSMENU.JS +// ========================================== + + +// ========================================== +// PEXESO TRAINING MODAL FUNKCIE +// ========================================== + +/** + * Otvorenie pexeso training modalu + */ +function openPexesoTrainingModal() { + console.log('🎮 Otváram pexeso trénovací modal pre svet:', currentSelectedWorld.name); + + // Vytvor modal ak neexistuje + createPexesoTrainingModalIfNotExists(); + + // Naplň modal dátami + populatePexesoTrainingModal(); + + // Nastav event listenery PO vytvorení modalu + setupPexesoTrainingModalEvents(); + + // Zobraz modal + const modal = document.getElementById('pexeso-training-modal'); + if (modal) { + modal.style.display = 'flex'; + document.body.style.overflow = 'hidden'; + } +} + +/** + * Vytvorenie pexeso training modalu ak neexistuje + */ +function createPexesoTrainingModalIfNotExists() { + if (document.getElementById('pexeso-training-modal')) return; + + const modalHTML = ` + + `; + + document.body.insertAdjacentHTML('beforeend', modalHTML); + console.log('✅ Pexeso training modal vytvorený'); +} + +function updatePexesoSelectionCounter() { + const selectedCount = document.querySelectorAll('#pexeso-words-list .word-item.selected').length; + + let counterElement = document.getElementById('pexeso-selection-counter'); + + if (!counterElement) { + counterElement = document.createElement('div'); + counterElement.id = 'pexeso-selection-counter'; + counterElement.className = 'selection-counter'; + + const wordsContainer = document.getElementById('pexeso-words-scrollable-container'); + if (wordsContainer) { + wordsContainer.insertBefore(counterElement, wordsContainer.firstChild); + } + } + + + + counterElement.className = 'selection-counter'; + if (selectedCount < 3) { + counterElement.classList.add('too-few'); + } else if (selectedCount >= 20) { + counterElement.classList.add('at-max'); + } else { + counterElement.classList.add('ok'); + } +} + +/** + * Naplnenie pexeso training modalu dátami + */ +function populatePexesoTrainingModal() { + // Aktualizuj názov sveta + const wordsTitle = document.getElementById('pexeso-words-section-title'); + if (wordsTitle) { + wordsTitle.textContent = `Naučené slová zo sveta ${currentSelectedWorld.name}:`; + } + + // Načítaj len slová z odomknutých levelov + const unlockedWords = getUnlockedWorldWords(); + populatePexesoWordsList(unlockedWords); + + // Reset checkboxov + const showLockedCheckbox = document.getElementById('pexeso-show-locked-words'); + const showAllWorldsCheckbox = document.getElementById('pexeso-show-all-worlds-words'); + if (showLockedCheckbox) showLockedCheckbox.checked = false; + if (showAllWorldsCheckbox) showAllWorldsCheckbox.checked = false; + + // Nastav predvolené hodnoty pre pexeso + const timeLimitInput = document.getElementById('pexeso-time-limit'); + const playersCountSelect = document.getElementById('pexeso-players-count'); + + if (timeLimitInput) timeLimitInput.value = 0; + if (playersCountSelect) { + playersCountSelect.value = "1"; + updatePexesoPlayersNames(1); + } + updatePexesoSelectionCounter(); +} + +/** + * Naplnenie zoznamu slov pre pexeso + * @param {Array} words - Pole slov na zobrazenie + */ +function populatePexesoWordsList(words) { + const wordsList = document.getElementById('pexeso-words-list'); + if (!wordsList) return; + + wordsList.innerHTML = ''; + + if (words.length === 0) { + wordsList.innerHTML = '

Žiadne slová nie sú dostupné.

'; + return; + } + + // Generovanie word-item diviek - rovnako ako v baník modali + if (typeof words[0] === 'string') { + // Jednoduché slová (len text) + words.forEach(word => { + const wordElement = createPexesoWordElement(word, true); + wordsList.appendChild(wordElement); + }); + } else { + // Objekty s dodatočnými informáciami + words.forEach(wordObj => { + const wordElement = createPexesoWordElement(wordObj.text, wordObj.isUnlocked, wordObj.world); + wordsList.appendChild(wordElement); + }); + } +} + +/** + * Vytvorenie elementu pre slovo v pexeso modali + * Rovnaká logika ako createWordElement() z baník modalu + * @param {string} word - Text slova + * @param {boolean} isUnlocked - Či je slovo odomknuté + * @param {string} worldName - Názov sveta (voliteľné) + * @returns {HTMLElement} Element slova + */ +function createPexesoWordElement(word, isUnlocked = true, worldName = null) { + const wordElement = document.createElement('div'); + wordElement.className = 'word-item'; + wordElement.textContent = word; + wordElement.dataset.word = word; + + // Ak je slovo zo zamknutého levelu, pridaj locked triedu + if (!isUnlocked) { + wordElement.classList.add('locked'); + wordElement.title = 'Toto slovo je zo zamknutého levelu'; + } + + // Ak je slovo z iného sveta, pridaj do titulku + if (worldName && worldName !== currentSelectedWorld.name) { + wordElement.title = `Slovo zo sveta ${worldName}`; + } + + // Event listener pre výber slova - OPRAVENÝ + wordElement.addEventListener('click', function() { + console.log('Kliknuté na slovo v pexeso modali:', word); + + // Ak je slovo už označené, odznač ho + if (this.classList.contains('selected')) { + this.classList.remove('selected'); + console.log('Slovo odznačené:', word); + updatePexesoSelectionCounter(); // Aktualizuj počítadlo + return; // DÔLEŽITÉ: Ukonči funkciu, aby sa nepokračovalo ďalej + } + + // Ak slovo NIE JE označené, skontroluj či nie je dosiahnutý limit + const selectedCount = document.querySelectorAll('#pexeso-words-list .word-item.selected').length; + if (selectedCount >= 20) { + alert('⚠️ Dosiahli ste maximum 20 slov!'); + return; // Neoznač slovo, lebo je dosiahnutý limit + } + + // Označ slovo (pridaj selected triedu) + this.classList.add('selected'); + console.log('Slovo označené:', word); + updatePexesoSelectionCounter(); // Aktualizuj počítadlo + }); + + return wordElement; +} + +/** + * Aktualizácia zobrazenia slov v pexeso modali + */ +function updatePexesoWordsDisplay() { + const showLocked = document.getElementById('pexeso-show-locked-words')?.checked || false; + const showAllWorlds = document.getElementById('pexeso-show-all-worlds-words')?.checked || false; + const wordsTitle = document.getElementById('pexeso-words-section-title'); + + let words = []; + let titleText = ''; + + if (showAllWorlds) { + words = getAllWordsFromAllWorlds(); + titleText = showLocked ? 'Všetky slová zo všetkých svetov:' : 'Naučené slová zo všetkých svetov:'; + if (!showLocked) { + words = words.filter(w => w.isUnlocked); + } + } else { + if (showLocked) { + words = getAllCurrentWorldWords(); + titleText = `Všetky slová zo sveta ${currentSelectedWorld.name}:`; + } else { + words = getUnlockedWorldWords(); + titleText = `Naučené slová zo sveta ${currentSelectedWorld.name}:`; + } + } + + if (wordsTitle) wordsTitle.textContent = titleText; + populatePexesoWordsList(words); +} + +/** + * Aktualizácia polí pre mená hráčov + * @param {number} playersCount - Počet hráčov + */ +function updatePexesoPlayersNames(playersCount) { + const playersNamesContainer = document.getElementById('pexeso-players-names'); + if (!playersNamesContainer) return; + + playersNamesContainer.innerHTML = ''; + + for (let i = 1; i <= playersCount; i++) { + const playerInput = document.createElement('input'); + playerInput.type = 'text'; + playerInput.id = `pexeso-player-${i}-name`; + playerInput.placeholder = `Hráč ${i}`; + playerInput.value = `Hráč ${i}`; + playerInput.className = 'player-name-input'; + + const playerLabel = document.createElement('label'); + playerLabel.htmlFor = playerInput.id; + playerLabel.textContent = `Hráč ${i}:`; + + const playerDiv = document.createElement('div'); + playerDiv.className = 'player-input-group'; + playerDiv.appendChild(playerLabel); + playerDiv.appendChild(playerInput); + + playersNamesContainer.appendChild(playerDiv); + } +} + +/** + * Inicializácia rozšírených nastavení - pridať do setupTrainingModalEvents() + * Alebo zavolať samostatne po otvorení modalu + */ +function initializeAdvancedSettings() { + const toggleBtn = document.getElementById('toggle-advanced-settings'); + const advancedPanel = document.getElementById('advanced-settings'); + + if (toggleBtn && advancedPanel) { + // Event listener pre rozklikávanie/skrývanie + toggleBtn.addEventListener('click', function() { + const isVisible = advancedPanel.style.display !== 'none'; + + if (isVisible) { + // Skry panel + advancedPanel.style.display = 'none'; + toggleBtn.classList.remove('active'); + } else { + // Zobraz panel + advancedPanel.style.display = 'flex'; + toggleBtn.classList.add('active'); + } + }); + + console.log('Rozšírené nastavenia inicializované'); + } +} + +/** + * Nastavenie event listenerov pre pexeso training modal + */ +function setupPexesoTrainingModalEvents() { + const showLockedCheckbox = document.getElementById('pexeso-show-locked-words'); + const showAllWorldsCheckbox = document.getElementById('pexeso-show-all-worlds-words'); + const closeBtn = document.getElementById('pexeso-training-modal-close'); + const startBtn = document.getElementById('pexeso-start-training-btn'); + const playersCountSelect = document.getElementById('pexeso-players-count'); + + console.log('🎮 Nastavujem event listenery pre pexeso training modal'); + + if (showLockedCheckbox) { + showLockedCheckbox.addEventListener('change', updatePexesoWordsDisplay); + console.log('✅ Pexeso show locked words checkbox listener nastavený'); + } + + if (showAllWorldsCheckbox) { + showAllWorldsCheckbox.addEventListener('change', function() { + console.log('Pexeso show all worlds checkbox clicked'); + updatePexesoWordsDisplay(); + }); + console.log('✅ Pexeso show all worlds checkbox listener nastavený'); + } + + if (closeBtn) { + closeBtn.addEventListener('click', closePexesoTrainingModal); + console.log('✅ Pexeso close button listener nastavený'); + } + + if (startBtn) { + startBtn.addEventListener('click', startPexesoTrainingLevel); + console.log('✅ Pexeso start button listener nastavený'); + } + + if (playersCountSelect) { + playersCountSelect.addEventListener('change', function() { + const playersCount = parseInt(this.value); + updatePexesoPlayersNames(playersCount); + }); + console.log('✅ Pexeso players count select listener nastavený'); + } +} + +/** + * Spustenie pexeso tréningového levelu + */ +function startPexesoTrainingLevel() { + console.log('🚀 Spúšťam pexeso tréning...'); + + // Zbieranie vybraných slov - UPRAVENÉ: používa .word-item.selected + const selectedWordElements = document.querySelectorAll('#pexeso-words-list .word-item.selected'); + const selectedWords = Array.from(selectedWordElements).map(el => el.dataset.word); + + console.log('Vybrané slová:', selectedWords); + + // Kontrola minimálneho počtu slov + if (selectedWords.length < 3) { + alert('Prosím vyberte aspoň 3 slová pre pexeso tréning!'); + return; + } + + // Kontrola maximálneho počtu slov + if (selectedWords.length > 20) { + alert('Prosím vyberte maximálne 20 slóv pre pexeso tréning!'); + return; + } + + // Získanie nastavení + const timeLimit = parseInt(document.getElementById('pexeso-time-limit').value) || 0; + const playersCount = parseInt(document.getElementById('pexeso-players-count').value) || 1; + + // Získanie mien hráčov + const players = []; + for (let i = 1; i <= playersCount; i++) { + const nameInput = document.getElementById(`pexeso-player-${i}-name`); + const name = nameInput ? nameInput.value.trim() : `Hráč ${i}`; + players.push({ + name: name || `Hráč ${i}`, + score: 0 + }); + } + + console.log('Nastavenia pexeso tréningu:', { + words: selectedWords, + timeLimit: timeLimit, + players: players, + pairs: selectedWords.length // Počet párov = počet vybraných slov + }); + + // Zatvor modal + closePexesoTrainingModal(); + + // Vytvor URL parametre pre pexeso hru + const params = new URLSearchParams({ + custom: 'true', + training: 'true', + words: JSON.stringify(selectedWords), + players: JSON.stringify(players), + pairs: selectedWords.length, + timeLimit: timeLimit > 0 ? timeLimit : 0, + worldId: currentSelectedWorld.id + }); + + // Presmerovanie na pexeso hru + // OPRAVENÉ: pexeso.html je v root priečinku, nie v pexeso/ + const gameUrl = `pexeso.html?${params.toString()}`; + console.log('Presmerovávam na:', gameUrl); + window.location.href = gameUrl; +} + +/** + * Zatvorenie pexeso training modalu + */ +function closePexesoTrainingModal() { + const modal = document.getElementById('pexeso-training-modal'); + if (modal) { + modal.style.display = 'none'; + document.body.style.overflow = 'auto'; + } +} + +/** + * Nastavenie event listenerov pre pexeso training modal + */ +function setupPexesoTrainingModalListeners() { + // Zatvorenie modalu kliknutím na overlay + document.addEventListener('click', (e) => { + if (e.target.id === 'pexeso-training-modal') { + closePexesoTrainingModal(); + } + }); + + // Zatvorenie modalu ESC klávesou + document.addEventListener('keydown', (e) => { + if (e.key === 'Escape') { + const modal = document.getElementById('pexeso-training-modal'); + if (modal && modal.style.display !== 'none') { + closePexesoTrainingModal(); + } + } + }); +} + +// ========================================== +// POMOCNÉ FUNKCIE PRE ZÍSKANIE SLOV +// ========================================== + +/** + * Získanie všetkých slov zo všetkých svetov + * @returns {Array} Pole všetkých slov + */ +function getAllWordsFromAllWorlds() { + const allWords = []; + + if (typeof LEVELS_CONFIG === 'undefined') { + console.warn('⚠️ LEVELS_CONFIG nie je dostupný'); + return []; + } + + Object.keys(LEVELS_CONFIG).forEach(worldId => { + const worldLevels = LEVELS_CONFIG[worldId] || []; + worldLevels.forEach(level => { + if (level.words) { + level.words.forEach(word => { + if (!allWords.find(w => w.text === word)) { + const levelProgress = playerProgress?.worlds?.[level.worldId]?.levels?.[level.id]; + const isUnlocked = levelProgress?.isUnlocked || level.isUnlocked || false; + + allWords.push({ + text: word, + worldId: level.worldId, + levelId: level.id, + isUnlocked: isUnlocked + }); + } + }); + } + }); + }); + + return allWords.sort((a, b) => a.text.localeCompare(b.text)); +} + +// ========================================== +// DEBUG FUNKCIE +// ========================================== + +/** + * Debug funkcia pre pexeso training modal + */ +function debugPexesoTrainingModal() { + console.log('=== PEXESO TRAINING MODAL DEBUG ==='); + console.log('Modal element:', document.getElementById('pexeso-training-modal')); + console.log('Close button:', document.getElementById('pexeso-training-modal-close')); + console.log('Start button:', document.getElementById('pexeso-start-training-btn')); + console.log('Show locked checkbox:', document.getElementById('pexeso-show-locked-words')); + console.log('Show all worlds checkbox:', document.getElementById('pexeso-show-all-worlds-words')); + console.log('Players count select:', document.getElementById('pexeso-players-count')); + console.log('Current selected world:', currentSelectedWorld); + console.log('=================================='); +} + +// Pridanie do globálnych funkcií pre testovanie +window.debugPexesoTrainingModal = debugPexesoTrainingModal; +window.openPexesoTrainingModal = openPexesoTrainingModal; \ No newline at end of file diff --git a/js/debug/cache-debug.js b/js/debug/cache-debug.js new file mode 100644 index 0000000..4969785 --- /dev/null +++ b/js/debug/cache-debug.js @@ -0,0 +1,319 @@ +/** + * DEBUG KONZOLA PRE CACHE + * Pomocný súbor na testovanie a debugging cache systému + * + * Použi v browser console: + * - debugCacheInfo() - zobrazí info o cache + * - clearAllCache() - vymaže celú cache + * - getCacheSize() - zistí veľkosť cache + * - testPreloading() - otestuje preloading systém + */ + +// ========================================== +// DEBUG FUNKCIE PRE CACHE +// ========================================== + +/** + * Zobrazí detailné informácie o cache + */ +async function debugCacheInfo() { + console.log('╔════════════════════════════════════╗'); + console.log('║ CACHE DEBUG INFORMÁCIE ║'); + console.log('╚════════════════════════════════════╝'); + console.log(''); + + // 1. Cache verzia a názov + console.log('📋 KONFIGURÁCIA:'); + console.log(` Cache verzia: ${typeof CACHE_VERSION !== 'undefined' ? CACHE_VERSION : 'N/A'}`); + console.log(` Cache name: ${typeof CACHE_NAME !== 'undefined' ? CACHE_NAME : 'N/A'}`); + console.log(''); + + // 2. Cache veľkosť + console.log('💾 CACHE STORAGE:'); + if (typeof getCacheSize === 'function') { + const size = await getCacheSize(); + console.log(` Veľkosť: ${size.sizeMB} MB`); + console.log(` Počet súborov: ${size.itemCount}`); + + // Zoznam súborov v cache + try { + const cache = await caches.open(CACHE_NAME); + const keys = await cache.keys(); + console.log(` Súbory v cache:`); + keys.forEach((request, index) => { + console.log(` ${index + 1}. ${request.url}`); + }); + } catch (error) { + console.warn(' Chyba pri získavaní zoznamu súborov:', error); + } + } else { + console.log(' Funkcia getCacheSize nie je dostupná'); + } + console.log(''); + + // 3. In-memory cache + console.log('🧠 IN-MEMORY CACHE:'); + if (typeof preloadedImages !== 'undefined') { + console.log(` Načítané obrázky: ${Object.keys(preloadedImages).length}`); + console.log(` Zoznam načítaných:`); + Object.keys(preloadedImages).forEach((key, index) => { + console.log(` ${index + 1}. ${key}`); + }); + } else { + console.log(' preloadedImages nie je dostupný'); + } + console.log(''); + + // 4. Stav preloadingu + console.log('📊 STAV PRELOADINGU:'); + console.log(` Dokončený: ${typeof isPreloadingDone === 'function' ? isPreloadingDone() : 'N/A'}`); + console.log(` Celkovo zdrojov: ${typeof totalResources !== 'undefined' ? totalResources : 'N/A'}`); + console.log(` Načítaných: ${typeof loadedResources !== 'undefined' ? loadedResources : 'N/A'}`); + console.log(''); + + // 5. Browser storage info + if (navigator.storage && navigator.storage.estimate) { + const estimate = await navigator.storage.estimate(); + const usage = (estimate.usage / (1024 * 1024)).toFixed(2); + const quota = (estimate.quota / (1024 * 1024)).toFixed(2); + const percentage = ((estimate.usage / estimate.quota) * 100).toFixed(2); + + console.log('💽 CELKOVÉ STORAGE:'); + console.log(` Použité: ${usage} MB`); + console.log(` Dostupné: ${quota} MB`); + console.log(` Percento: ${percentage}%`); + } + + console.log(''); + console.log('════════════════════════════════════'); +} + +/** + * Test preloading systému + */ +async function testPreloading() { + console.log('🧪 TESTOVANIE PRELOADING SYSTÉMU'); + console.log('================================'); + + // Skontroluj či sú dostupné potrebné funkcie + console.log(''); + console.log('1️⃣ Kontrolujem dostupnosť funkcií...'); + const functions = [ + 'startWorldsMenuPreloading', + 'preloadImageWithCache', + 'loadFromCache', + 'loadImageFromNetwork', + 'saveToCache', + 'cleanOldCaches', + 'getCacheSize', + 'clearAllCache' + ]; + + functions.forEach(funcName => { + const isAvailable = typeof window[funcName] === 'function'; + console.log(` ${isAvailable ? '✅' : '❌'} ${funcName}`); + }); + + // Skontroluj globálne premenné + console.log(''); + console.log('2️⃣ Kontrolujem globálne premenné...'); + const variables = [ + 'CACHE_VERSION', + 'CACHE_NAME', + 'preloadedImages', + 'totalResources', + 'loadedResources', + 'isPreloadingComplete' + ]; + + variables.forEach(varName => { + const isAvailable = typeof window[varName] !== 'undefined'; + const value = window[varName]; + console.log(` ${isAvailable ? '✅' : '❌'} ${varName} = ${JSON.stringify(value)}`); + }); + + // Test cache operácií + console.log(''); + console.log('3️⃣ Testujem cache operácie...'); + + try { + // Test otvorenia cache + const cache = await caches.open(CACHE_NAME); + console.log(' ✅ Cache úspešne otvorená'); + + // Test uloženia + const testUrl = 'test-image.png'; + const testResponse = new Response('test data'); + await cache.put(testUrl, testResponse); + console.log(' ✅ Testovací súbor uložený'); + + // Test načítania + const retrieved = await cache.match(testUrl); + console.log(` ✅ Testovací súbor načítaný: ${retrieved ? 'áno' : 'nie'}`); + + // Test vymazania + await cache.delete(testUrl); + console.log(' ✅ Testovací súbor vymazaný'); + + } catch (error) { + console.error(' ❌ Chyba pri teste cache:', error); + } + + console.log(''); + console.log('✅ Test dokončený!'); + console.log('================================'); +} + +/** + * Vymazanie všetkých cache a reload stránky + */ +async function resetCacheAndReload() { + console.log('🔄 RESETUJEM CACHE A RELOADUJEM STRÁNKU...'); + + try { + // Vymaž všetky cache + const cacheNames = await caches.keys(); + + for (const cacheName of cacheNames) { + await caches.delete(cacheName); + console.log(`✅ Vymazaná cache: ${cacheName}`); + } + + console.log('✅ Všetky cache vymazané!'); + console.log('🔄 Reloadujem stránku za 2 sekundy...'); + + setTimeout(() => { + location.reload(true); // Force reload + }, 2000); + + } catch (error) { + console.error('❌ Chyba pri resetovaní cache:', error); + } +} + +/** + * Porovnanie rýchlosti s/bez cache + */ +async function compareLoadingSpeed() { + console.log('⏱️ POROVNANIE RÝCHLOSTI NAČÍTAVANIA'); + console.log('==================================='); + + // Testovací obrázok + const testImage = 'images/worlds/world_r.png'; + + // 1. Test načítania zo siete (bez cache) + console.log(''); + console.log('1️⃣ Načítanie zo siete (bez cache)...'); + + // Vymaž z cache ak tam je + const cache = await caches.open(CACHE_NAME); + await cache.delete(new URL(testImage, window.location.href).href); + + const networkStart = performance.now(); + await fetch(testImage); + const networkTime = performance.now() - networkStart; + + console.log(` ⏱️ Čas: ${networkTime.toFixed(2)} ms`); + + // 2. Test načítania z cache + console.log(''); + console.log('2️⃣ Načítanie z cache...'); + + // Ulož do cache + const response = await fetch(testImage); + await cache.put(new URL(testImage, window.location.href).href, response); + + const cacheStart = performance.now(); + await cache.match(new URL(testImage, window.location.href).href); + const cacheTime = performance.now() - cacheStart; + + console.log(` ⏱️ Čas: ${cacheTime.toFixed(2)} ms`); + + // 3. Výsledok + console.log(''); + console.log('📊 VÝSLEDOK:'); + const speedup = (networkTime / cacheTime).toFixed(2); + console.log(` Sieť: ${networkTime.toFixed(2)} ms`); + console.log(` Cache: ${cacheTime.toFixed(2)} ms`); + console.log(` Zrýchlenie: ${speedup}x rýchlejšie!`); + console.log(''); + console.log('==================================='); +} + +/** + * Zobrazenie všetkých dostupných cache + */ +async function listAllCaches() { + console.log('📚 ZOZNAM VŠETKÝCH CACHE'); + console.log('========================'); + + try { + const cacheNames = await caches.keys(); + + console.log(`Celkovo cache: ${cacheNames.length}`); + console.log(''); + + for (const cacheName of cacheNames) { + const cache = await caches.open(cacheName); + const keys = await cache.keys(); + + console.log(`📦 ${cacheName}`); + console.log(` Súbory: ${keys.length}`); + + // Vypočítaj veľkosť + let totalSize = 0; + for (const request of keys) { + const response = await cache.match(request); + if (response) { + const blob = await response.blob(); + totalSize += blob.size; + } + } + + const sizeMB = (totalSize / (1024 * 1024)).toFixed(2); + console.log(` Veľkosť: ${sizeMB} MB`); + console.log(''); + } + + console.log('========================'); + + } catch (error) { + console.error('Chyba pri získavaní cache:', error); + } +} + +// ========================================== +// EXPORT DO WINDOW +// ========================================== + +if (typeof window !== 'undefined') { + // Pridaj do window pre jednoduchý prístup z konzoly + window.debugCache = { + info: debugCacheInfo, + test: testPreloading, + reset: resetCacheAndReload, + compare: compareLoadingSpeed, + list: listAllCaches + }; + + console.log(''); + console.log('═══════════════════════════════════════════════════════════'); + console.log(' 🛠️ DEBUG CACHE KONZOLA NAČÍTANÁ 🛠️'); + console.log('═══════════════════════════════════════════════════════════'); + console.log(''); + console.log('Dostupné príkazy:'); + console.log(''); + console.log(' debugCache.info() - Zobrazí detaily o cache'); + console.log(' debugCache.test() - Otestuje preloading systém'); + console.log(' debugCache.reset() - Vymaže cache a reloadne stránku'); + console.log(' debugCache.compare() - Porovná rýchlosť cache vs sieť'); + console.log(' debugCache.list() - Zobrazí všetky cache'); + console.log(''); + console.log(' // Alebo použiť priamo:'); + console.log(' debugCacheInfo() - To isté ako debugCache.info()'); + console.log(' clearAllCache() - Vymaže aktuálnu cache'); + console.log(' getCacheSize() - Vráti veľkosť cache'); + console.log(''); + console.log('═══════════════════════════════════════════════════════════'); + console.log(''); +} \ No newline at end of file diff --git a/js/debug/preloading-tests.js b/js/debug/preloading-tests.js new file mode 100644 index 0000000..581109c --- /dev/null +++ b/js/debug/preloading-tests.js @@ -0,0 +1,442 @@ +/** + * TEST SÚBOR PRE PRELOADING SYSTÉM + * + * Tento súbor obsahuje rôzne testy pre overenie funkčnosti + * preloading systému s cache API. + * + * POUŽITIE: + * 1. Otvor worldsmenu.html v prehliadači + * 2. Otvor Developer Tools (F12) + * 3. Prejdi na Console tab + * 4. Skopíruj a spusti jednotlivé testy + */ + +// ========================================== +// TEST 1: Základná funkčnosť +// ========================================== + +console.log('═══════════════════════════════════════════════════════════'); +console.log('TEST 1: ZÁKLADNÁ FUNKČNOSŤ'); +console.log('═══════════════════════════════════════════════════════════'); + +async function test1_BasicFunctionality() { + console.log('🧪 Spúšťam Test 1...'); + console.log(''); + + // 1. Kontrola dostupnosti funkcií + console.log('1️⃣ Kontrolujem dostupnosť funkcií...'); + const requiredFunctions = [ + 'startWorldsMenuPreloading', + 'getPreloadedImage', + 'isPreloadingDone', + 'getCacheSize', + 'clearAllCache' + ]; + + let allAvailable = true; + requiredFunctions.forEach(funcName => { + const isAvailable = typeof window[funcName] === 'function'; + console.log(` ${isAvailable ? '✅' : '❌'} ${funcName}`); + if (!isAvailable) allAvailable = false; + }); + + if (!allAvailable) { + console.error('❌ Test 1 ZLYHAL - niektoré funkcie chýbajú'); + return false; + } + + // 2. Kontrola globálnych premenných + console.log(''); + console.log('2️⃣ Kontrolujem globálne premenné...'); + const requiredVars = ['CACHE_VERSION', 'CACHE_NAME', 'preloadedImages']; + + requiredVars.forEach(varName => { + const isAvailable = typeof window[varName] !== 'undefined'; + console.log(` ${isAvailable ? '✅' : '❌'} ${varName}`); + if (!isAvailable) allAvailable = false; + }); + + if (!allAvailable) { + console.error('❌ Test 1 ZLYHAL - niektoré premenné chýbajú'); + return false; + } + + console.log(''); + console.log('✅ Test 1 ÚSPEŠNÝ - všetky funkcie a premenné sú dostupné'); + return true; +} + +// Spusti test +// test1_BasicFunctionality(); + +// ========================================== +// TEST 2: Cache operácie +// ========================================== + +console.log(''); +console.log('═══════════════════════════════════════════════════════════'); +console.log('TEST 2: CACHE OPERÁCIE'); +console.log('═══════════════════════════════════════════════════════════'); + +async function test2_CacheOperations() { + console.log('🧪 Spúšťam Test 2...'); + console.log(''); + + try { + // 1. Test otvorenia cache + console.log('1️⃣ Testujem otvorenie cache...'); + const cache = await caches.open(CACHE_NAME); + console.log(' ✅ Cache úspešne otvorená'); + + // 2. Test uloženia do cache + console.log(''); + console.log('2️⃣ Testujem uloženie do cache...'); + const testUrl = 'test-preloading-image.png'; + const testData = new Response('test data for preloading', { + headers: { 'Content-Type': 'image/png' } + }); + await cache.put(testUrl, testData.clone()); + console.log(' ✅ Testovací súbor uložený'); + + // 3. Test načítania z cache + console.log(''); + console.log('3️⃣ Testujem načítanie z cache...'); + const retrieved = await cache.match(testUrl); + if (retrieved) { + const text = await retrieved.text(); + console.log(` ✅ Testovací súbor načítaný: "${text}"`); + } else { + throw new Error('Testovací súbor sa nenašiel v cache'); + } + + // 4. Test veľkosti cache + console.log(''); + console.log('4️⃣ Testujem získanie veľkosti cache...'); + const size = await getCacheSize(); + console.log(` ✅ Cache veľkosť: ${size.sizeMB} MB (${size.itemCount} súborov)`); + + // 5. Test vymazania z cache + console.log(''); + console.log('5️⃣ Testujem vymazanie z cache...'); + const deleted = await cache.delete(testUrl); + console.log(` ${deleted ? '✅' : '❌'} Testovací súbor vymazaný`); + + console.log(''); + console.log('✅ Test 2 ÚSPEŠNÝ - všetky cache operácie fungujú'); + return true; + + } catch (error) { + console.error('❌ Test 2 ZLYHAL:', error); + return false; + } +} + +// Spusti test +// test2_CacheOperations(); + +// ========================================== +// TEST 3: Preloading rýchlosť +// ========================================== + +console.log(''); +console.log('═══════════════════════════════════════════════════════════'); +console.log('TEST 3: PRELOADING RÝCHLOSŤ'); +console.log('═══════════════════════════════════════════════════════════'); + +async function test3_PreloadingSpeed() { + console.log('🧪 Spúšťam Test 3...'); + console.log(''); + + // Testovací obrázok + const testImage = 'images/star_active.png'; + + try { + // 1. Vyčisti cache + console.log('1️⃣ Čistím cache...'); + const cache = await caches.open(CACHE_NAME); + await cache.delete(new URL(testImage, window.location.href).href); + console.log(' ✅ Cache vyčistená'); + + // 2. Test načítania zo siete + console.log(''); + console.log('2️⃣ Testujem načítanie zo siete...'); + const networkStart = performance.now(); + const networkResponse = await fetch(testImage); + await networkResponse.blob(); // Počkaj na načítanie dát + const networkTime = performance.now() - networkStart; + console.log(` ⏱️ Čas: ${networkTime.toFixed(2)} ms`); + + // 3. Ulož do cache + console.log(''); + console.log('3️⃣ Ukladám do cache...'); + const saveStart = performance.now(); + const saveResponse = await fetch(testImage); + await cache.put(new URL(testImage, window.location.href).href, saveResponse); + const saveTime = performance.now() - saveStart; + console.log(` ⏱️ Čas uloženia: ${saveTime.toFixed(2)} ms`); + + // 4. Test načítania z cache + console.log(''); + console.log('4️⃣ Testujem načítanie z cache...'); + const cacheStart = performance.now(); + const cacheResponse = await cache.match(new URL(testImage, window.location.href).href); + await cacheResponse.blob(); // Počkaj na načítanie dát + const cacheTime = performance.now() - cacheStart; + console.log(` ⏱️ Čas: ${cacheTime.toFixed(2)} ms`); + + // 5. Porovnanie + console.log(''); + console.log('📊 VÝSLEDOK:'); + const speedup = (networkTime / cacheTime).toFixed(2); + console.log(` Sieť: ${networkTime.toFixed(2)} ms`); + console.log(` Cache: ${cacheTime.toFixed(2)} ms`); + console.log(` Zrýchlenie: ${speedup}x`); + + console.log(''); + console.log('✅ Test 3 ÚSPEŠNÝ - cache je rýchlejšia ako sieť'); + return true; + + } catch (error) { + console.error('❌ Test 3 ZLYHAL:', error); + return false; + } +} + +// Spusti test +// test3_PreloadingSpeed(); + +// ========================================== +// TEST 4: Preloading všetkých obrázkov +// ========================================== + +console.log(''); +console.log('═══════════════════════════════════════════════════════════'); +console.log('TEST 4: PRELOADING VŠETKÝCH OBRÁZKOV'); +console.log('═══════════════════════════════════════════════════════════'); + +async function test4_FullPreloading() { + console.log('🧪 Spúšťam Test 4...'); + console.log(''); + + try { + // 1. Vymaž všetky cache + console.log('1️⃣ Mažem všetky cache...'); + await clearAllCache(); + console.log(' ✅ Cache vymazaná'); + + // 2. Spusti full preloading + console.log(''); + console.log('2️⃣ Spúšťam full preloading...'); + const startTime = performance.now(); + + await startWorldsMenuPreloading(); + + const totalTime = performance.now() - startTime; + console.log(` ⏱️ Celkový čas: ${(totalTime / 1000).toFixed(2)} sekúnd`); + + // 3. Skontroluj výsledky + console.log(''); + console.log('3️⃣ Kontrolujem výsledky...'); + + const isDone = isPreloadingDone(); + console.log(` ${isDone ? '✅' : '❌'} Preloading dokončený`); + + const imagesCount = Object.keys(preloadedImages).length; + console.log(` ✅ Načítaných obrázkov: ${imagesCount}`); + + const cacheSize = await getCacheSize(); + console.log(` ✅ Cache veľkosť: ${cacheSize.sizeMB} MB (${cacheSize.itemCount} súborov)`); + + console.log(''); + console.log('✅ Test 4 ÚSPEŠNÝ - všetky obrázky načítané a uložené'); + return true; + + } catch (error) { + console.error('❌ Test 4 ZLYHAL:', error); + return false; + } +} + +// Spusti test +// test4_FullPreloading(); + +// ========================================== +// TEST 5: Opakované načítanie (z cache) +// ========================================== + +console.log(''); +console.log('═══════════════════════════════════════════════════════════'); +console.log('TEST 5: OPAKOVANÉ NAČÍTANIE (Z CACHE)'); +console.log('═══════════════════════════════════════════════════════════'); + +async function test5_ReloadFromCache() { + console.log('🧪 Spúšťam Test 5...'); + console.log(''); + + console.log('ℹ️ Tento test vyžaduje, aby už bola cache naplnená.'); + console.log(' Ak nie je, najprv spusti: await test4_FullPreloading()'); + console.log(''); + + try { + // 1. Skontroluj cache + console.log('1️⃣ Kontrolujem cache...'); + const cacheSize = await getCacheSize(); + + if (cacheSize.itemCount === 0) { + console.warn('⚠️ Cache je prázdna! Spúšťam preloading najprv...'); + await startWorldsMenuPreloading(); + console.log(' ✅ Preloading dokončený'); + } else { + console.log(` ✅ Cache obsahuje ${cacheSize.itemCount} súborov`); + } + + // 2. Vymaž in-memory cache + console.log(''); + console.log('2️⃣ Mažem in-memory cache...'); + Object.keys(preloadedImages).forEach(key => delete preloadedImages[key]); + console.log(` ✅ In-memory cache vymazaná`); + + // 3. Spusti reload z cache + console.log(''); + console.log('3️⃣ Spúšťam reload z cache...'); + const startTime = performance.now(); + + await startWorldsMenuPreloading(); + + const totalTime = performance.now() - startTime; + console.log(` ⏱️ Čas načítania z cache: ${(totalTime / 1000).toFixed(2)} sekúnd`); + + // 4. Porovnanie + console.log(''); + console.log('📊 VÝSLEDOK:'); + console.log(` Načítaných obrázkov: ${Object.keys(preloadedImages).length}`); + console.log(` Čas: ${(totalTime / 1000).toFixed(2)}s`); + console.log(` Rýchlosť: ${totalTime < 2000 ? '✅ RÝCHLE' : '⚠️ POMALÉ'}`); + + console.log(''); + console.log('✅ Test 5 ÚSPEŠNÝ - reload z cache funguje'); + return true; + + } catch (error) { + console.error('❌ Test 5 ZLYHAL:', error); + return false; + } +} + +// Spusti test +// test5_ReloadFromCache(); + +// ========================================== +// MASTER TEST - Spusti všetky testy +// ========================================== + +console.log(''); +console.log('═══════════════════════════════════════════════════════════'); +console.log('MASTER TEST - SPUSTI VŠETKY TESTY'); +console.log('═══════════════════════════════════════════════════════════'); + +async function runAllTests() { + console.log('🚀 SPÚŠŤAM VŠETKY TESTY'); + console.log('═══════════════════════════════════════════════════════════'); + console.log(''); + + const results = []; + + // Test 1 + console.log(''); + const result1 = await test1_BasicFunctionality(); + results.push({ test: 'Test 1: Základná funkčnosť', passed: result1 }); + + // Test 2 + console.log(''); + const result2 = await test2_CacheOperations(); + results.push({ test: 'Test 2: Cache operácie', passed: result2 }); + + // Test 3 + console.log(''); + const result3 = await test3_PreloadingSpeed(); + results.push({ test: 'Test 3: Preloading rýchlosť', passed: result3 }); + + // Test 4 + console.log(''); + const result4 = await test4_FullPreloading(); + results.push({ test: 'Test 4: Full preloading', passed: result4 }); + + // Test 5 + console.log(''); + const result5 = await test5_ReloadFromCache(); + results.push({ test: 'Test 5: Reload z cache', passed: result5 }); + + // Výsledky + console.log(''); + console.log('═══════════════════════════════════════════════════════════'); + console.log('VÝSLEDKY TESTOV'); + console.log('═══════════════════════════════════════════════════════════'); + console.log(''); + + let passedCount = 0; + results.forEach((result, index) => { + console.log(`${result.passed ? '✅' : '❌'} ${result.test}`); + if (result.passed) passedCount++; + }); + + console.log(''); + console.log(`Úspešných: ${passedCount}/${results.length}`); + + if (passedCount === results.length) { + console.log(''); + console.log('🎉 VŠETKY TESTY PREŠLI! 🎉'); + console.log('Preloading systém je plne funkčný.'); + } else { + console.log(''); + console.log('⚠️ NIEKTORÉ TESTY ZLYHALI'); + console.log('Skontroluj error hlášky vyššie.'); + } + + console.log('═══════════════════════════════════════════════════════════'); +} + +// ========================================== +// POMOCNÉ PRÍKAZY +// ========================================== + +console.log(''); +console.log('═══════════════════════════════════════════════════════════'); +console.log('DOSTUPNÉ PRÍKAZY'); +console.log('═══════════════════════════════════════════════════════════'); +console.log(''); +console.log('Individuálne testy:'); +console.log(' await test1_BasicFunctionality()'); +console.log(' await test2_CacheOperations()'); +console.log(' await test3_PreloadingSpeed()'); +console.log(' await test4_FullPreloading()'); +console.log(' await test5_ReloadFromCache()'); +console.log(''); +console.log('Všetky testy naraz:'); +console.log(' await runAllTests()'); +console.log(''); +console.log('Debug:'); +console.log(' await debugCacheInfo()'); +console.log(' await getCacheSize()'); +console.log(' await clearAllCache()'); +console.log(''); +console.log('═══════════════════════════════════════════════════════════'); + +// Export funkcií +if (typeof window !== 'undefined') { + window.testPreloading = { + test1: test1_BasicFunctionality, + test2: test2_CacheOperations, + test3: test3_PreloadingSpeed, + test4: test4_FullPreloading, + test5: test5_ReloadFromCache, + all: runAllTests + }; + + console.log(''); + console.log('✅ Test súbor načítaný!'); + console.log(''); + console.log('Rýchly štart:'); + console.log(' await testPreloading.all() // Spusti všetky testy'); + console.log(''); +} \ No newline at end of file diff --git a/js/game.js b/js/game.js new file mode 100644 index 0000000..4c02e64 --- /dev/null +++ b/js/game.js @@ -0,0 +1,4018 @@ +////////////////////////////////////////////// +// Game.js - hlavný kód pre minmihru miner // +// Autor: Adam Renak // +// Diplomová práca - 28.8.2025 // +////////////////////////////////////////////// + + + +// ========================================== +// GLOBÁLNE PREMENNÉ PRE PRELOADING +// ========================================== +let preloadedImages = {}; // Cache pre prednačítané obrázky +let totalResources = 0; // Celkový počet zdrojov +let loadedResources = 0; // Počet načítaných zdrojov +let isPreloadingComplete = false; // Flag či je preloading hotový + + +////////////////////////////////////////////// +// ============ LOADING SCREEN ============ // +// Čakanie na načítanie DOM obsahu // +// Skrytie loading screen s animáciou // +////////////////////////////////////////////// +document.addEventListener('DOMContentLoaded', function() { + console.log('🎮 DOM načítaný, spúšťam preloading...'); + + // Inicializuj Speech Recognition + initSpeechRecognition(); + + // Spusti prednačítanie zdrojov + startPreloading(); +}); + + + +/** + * Hlavná funkcia preloadingu + */ +async function startPreloading() { + try { + // 1. Získaj konfiguráciu levelu z URL + const levelConfig = getLevelConfigFromURL(); + + // 2. Zisti všetky obrázky na načítanie + const imagesToLoad = collectAllImages(levelConfig); + + totalResources = imagesToLoad.length; + console.log(`📦 Načítavam ${totalResources} obrázkov...`); + + // 3. Načítaj všetky obrázky paralelne + const promises = imagesToLoad.map(imagePath => preloadImage(imagePath)); + await Promise.all(promises); + + console.log('✅ Všetky obrázky načítané!'); + isPreloadingComplete = true; + + // 4. Skry loading screen a spusti hru + setTimeout(() => { + hideLoadingScreen(); + + // Inicializuj hru s level configom + if (levelConfig) { + initializeGameWithLevel(levelConfig); + } + }, 500); + + } catch (error) { + console.error('❌ Chyba pri preloadingu:', error); + // Aj pri chybe spusti hru + hideLoadingScreen(); + } +} + +/** + * Získanie konfigurácie levelu z URL parametrov + */ +function getLevelConfigFromURL() { + const urlParams = new URLSearchParams(window.location.search); + const worldId = urlParams.get('worldId') || urlParams.get('world'); + const levelId = urlParams.get('levelId') || urlParams.get('level'); + + // ======================================== + // PRIDANÉ: Načítanie tréningovej konfigurácie + // ======================================== + const isTraining = urlParams.get('training') === 'true'; + const trainingConfig = urlParams.get('config'); + + // Ak je tréningový level, načítaj konfiguráciu z URL + if (isTraining && trainingConfig) { + try { + const config = JSON.parse(decodeURIComponent(trainingConfig)); + console.log('📋 Načítaná tréningová konfigurácia:', config); + return config; // Vráť tréningovú konfiguráciu + } catch (error) { + console.error('❌ Chyba pri parsovaní tréningovej konfigurácie:', error); + // Pokračuj na fallback + } + } + + console.log('URL parametre:', { worldId, levelId }); + + // Ak máme levelId, načítaj konfiguráciu + if (levelId && typeof window.getLevelConfig === 'function') { + const config = window.getLevelConfig(levelId); + console.log('📋 Načítaná level konfigurácia:', config); + return config; + } + + // Fallback konfigurácia + console.warn('⚠️ Používam fallback konfiguráciu'); + return { + id: 'fallback', + worldId: worldId || 'world_r', + words: ['rak', 'ryba', 'ruka', 'ruža'], + gameConfig: { diamonds: 3, golds: 3, crystals: 1 } + }; +} + +/** + * Zber všetkých obrázkov ktoré treba načítať + */ +function collectAllImages(levelConfig) { + const images = []; + + // ========================================== + // 1. OBRÁZKY SLOV (najdôležitejšie!) + // ========================================== + if (levelConfig && levelConfig.words) { + levelConfig.words.forEach(word => { + images.push(`images/slova/${word}.png`); + }); + console.log(` ✅ Pridaných ${levelConfig.words.length} obrázkov slov`); + } + + // ========================================== + // 2. SPRITE OBRÁZKY HRÁČA + // ========================================== + images.push( + 'images/hrac.png', + 'images/hrac-otoceny-vlavo.png', + 'images/hrac-otoceny-vpravo.png', + 'images/hrac-kope-vpravo.png', + 'images/hrac-kope-vlavo.png' + ); + + // ========================================== + // 3. ITEMY (diamanty, zlato, kryštály) + // ========================================== + images.push( + 'images/diamond.png', + 'images/gold.png', + 'images/kov.png', + 'images/stone.png' + ); + + // ========================================== + // 4. UI ELEMENTY + // ========================================== + images.push( + 'images/spravne.png', + 'images/nespravne.png', + 'images/star_active.png', + 'images/star_inactive.png', + 'images/banik.ico' + ); + + // ========================================== + // 5. POZADIE SVETA (ak existuje) + // ========================================== + if (levelConfig && levelConfig.worldId) { + const worldBackgrounds = { + 'world_r': 'images/worlds/world_r.png', + 'world_l': 'images/worlds/world_l.png', + 'world_s': 'images/worlds/world_s.png', + 'world_ch': 'images/worlds/world_ch.png', + 'world_z': 'images/worlds/world_z.jpg', + 'world_c': 'images/worlds/world_c.png', + 'world_sh': 'images/worlds/world_sh.png', + 'world_zh': 'images/worlds/world_zh.png', + 'world_d': 'images/worlds/world_d.png', + 'world_t': 'images/worlds/world_t.png', + 'world_n': 'images/worlds/world_n.png', + 'world_k': 'images/worlds/world_k.png', + 'world_g': 'images/worlds/world_g.png' + }; + + const worldBg = worldBackgrounds[levelConfig.worldId]; + if (worldBg) { + images.push(worldBg); + } + } + + // Základné pozadie + images.push('images/pozadie.jpg'); + + // Menu obrázky + images.push( + 'images/menubutton.png', + 'images/cursor.png', + 'images/active_cursor4.png' + ); + + console.log(`📦 Celkovo zozbieraných ${images.length} obrázkov`); + return images; +} + +/** + * Načítanie jedného obrázka + */ +function preloadImage(imagePath) { + return new Promise((resolve) => { + // Ak už je načítaný, vráť ho + if (preloadedImages[imagePath]) { + updateProgress(); + resolve(preloadedImages[imagePath]); + return; + } + + const img = new Image(); + + // Pri úspešnom načítaní + img.onload = () => { + preloadedImages[imagePath] = img; // Ulož do cache + updateProgress(); + console.log(`✅ ${imagePath}`); + resolve(img); + }; + + // Pri chybe (nechaj hru pokračovať) + img.onerror = () => { + console.warn(`⚠️ Chyba pri načítaní: ${imagePath}`); + updateProgress(); + resolve(null); + }; + + // Spusti načítanie + img.src = imagePath; + }); +} + +/** + * Aktualizácia progress baru + */ +function updateProgress() { + loadedResources++; + + // Vypočítaj percento + const percentage = Math.round((loadedResources / totalResources) * 100); + + // Aktualizuj progress bar + const progressFill = document.getElementById('loading-progress-fill'); + if (progressFill) { + progressFill.style.width = `${percentage}%`; + } + + // Aktualizuj text percentá + const progressPercentage = document.getElementById('loading-progress-percentage'); + if (progressPercentage) { + progressPercentage.textContent = `${percentage}%`; + } + + // Aktualizuj počet načítaných + const progressDetails = document.getElementById('loading-progress-details'); + if (progressDetails) { + progressDetails.textContent = `${loadedResources}/${totalResources} zdrojov`; + } + + // Aktualizuj hlavnú správu + const loadingMessage = document.getElementById('loading-message'); + if (loadingMessage) { + if (percentage < 100) { + loadingMessage.textContent = 'Načítavam obrázky...'; + } else { + loadingMessage.textContent = 'Hotovo! Spúšťam hru...'; + } + } + + console.log(`📊 Progress: ${percentage}% (${loadedResources}/${totalResources})`); +} + +/** + * Skrytie loading screenu s animáciou + */ +function hideLoadingScreen() { + const loadingScreen = document.getElementById('loading-screen'); + if (loadingScreen) { + loadingScreen.style.opacity = '0'; + setTimeout(() => { + loadingScreen.style.display = 'none'; + }, 500); + } + console.log('👋 Loading screen skrytý, hra pripravená!'); +} + +/** + * Pomocná funkcia na získanie prednačítaného obrázka + * Môžeš ju použiť neskôr v kóde ak chceš + */ +function getPreloadedImage(imagePath) { + return preloadedImages[imagePath] || null; +} + +// Export pre ostatné časti kódu +if (typeof window !== 'undefined') { + window.preloadedImages = preloadedImages; + window.getPreloadedImage = getPreloadedImage; +} + + + + + + + + +/////////////////////////////////////////////// +// ========== ZAKLADNE PREMENNE ============ // +// Diamonds, kov, Golds, Kov, Zvukové efekty // +// velkosti blokov, pocet ziskanych itemov // +/////////////////////////////////////////////// + +////////////////////////////////// +// Získanie canvasu a kontextu // +////////////////////////////////// +const canvas = document.getElementById('gameCanvas'); +const ctx = canvas.getContext('2d'); +const blockSize = 50; // Veľkosť jednej blokovej kocky + +const playerSize = blockSize; // Veľkosť hráča +const diamondSize = blockSize; // Veľkosť diamantu +const GoldSize = blockSize; // Veľkosť diamantu +const claySize = blockSize; // Veľkosť hliny +const kovSize = blockSize; // Veľkosť diamantu +const mapWidth = 16; // Počet blokov na šírku +const mapHeight = 10; // Počet blokov na výšku + +let playerX = blockSize; // Začiatočná pozícia hráča na osi X +let playerY = blockSize; // Začiatočná pozícia hráča na osi Y + +const diamonds = []; +const kov = []; /////////////////////// +const golds = []; // Základné premenné // +const clay = []; /////////////////////// +let generatedPositions = []; // Globálny zoznam pozícií všetkých objektov +let PocetGenDiamant = 3; +let PocetGenKov = 1; +let PocetGenGolds = 4; + +let diamondsDestroyed = 0; // Počet zničených diamantov +let kovDestroyed = 0; // Počet zničených diamantov +let goldsDestroyed = 0; // Počet zničených goldov +let isDestroying = false; // Premenná určujúca, či hráč zničí blok +let playerRotation = 0; // Úvodná rotácia hráča +let diamondsCollected = 0; // Počet zozbieraných diamantov +let kovCollected = 0; // Počet zozbieraných kovov +let goldsCollected = 0; // Počet zozbieraných diamantov + +let spaceBarPressed = 0; // Počet stlačení medzerníka +let playerBlockX; // Pozicia hraca X +let playerBlockY; // Pozicia hraca Y +let targetBlockX; +let targetBlockY; +let blockX; +let blockY; + +let correctAnswers = 0; // Počet správnych odpovedi +let incorrectAnswers = 0; // Počet nesprávnych odpovedi + +///////////////////////////////////////// +// Globálne premenné pre časový systém // +///////////////////////////////////////// +let gameTimer = { + startTime: null, // Čas spustenia hry + currentTime: 0, // Aktuálny čas v sekundách + intervalId: null, // ID intervalu pre aktualizáciu + timeLimit: null, // Časový limit z levelConfig (v sekundách) + isRunning: false, // Označuje či timer beží + isPaused: false // Označuje či je timer pozastavený +}; + +////////////////////////////////////////////// +// Globálne premenné pre Speech Recognition // +////////////////////////////////////////////// +let speechRecognition = null; // Globálna inštancia - vytvorí sa len raz +let isListening = false; // Flag či práve počúvame +let currentExpectedWord = ''; // Aktuálne očakávané slovo + +let isExerciseActive = false; // Flag či práve prebieha cvičenie + + + +/////////////////////// +// Obrázky postavy // +/////////////////////// +playerX = 100; +playerY = 200; +const goldImg = new Image(); +goldImg.src = 'images/gold.png'; +const diamondImg = new Image(); +diamondImg.src = 'images/diamond.png'; +const kovImg = new Image(); +kovImg.src = 'images/kov.png'; +const clayImg = new Image(); +clayImg.src = 'images/stone.png'; +const playerImg = new Image(); +playerImg.src = 'images/hrac.png'; +const playerImgVl = new Image(); +playerImgVl.src = 'images/hrac-otoceny-vlavo.png'; +const playerImgVp = new Image(); +playerImgVp.src = 'images/hrac-otoceny-vpravo.png'; +const playerImgchrbat = new Image(); +playerImgchrbat.src = 'images/hrac.png'; +const hracKopaVpravoImg = new Image(); +hracKopaVpravoImg.src = 'images/hrac-kope-vpravo.png'; +const hracKopaVlavoImg = new Image(); +hracKopaVlavoImg.src = 'images/hrac-kope-vlavo.png'; +let playerDirection = 'front'; +let kope = false; + +//////////////////// +// zvukové efekty // +//////////////////// +const EffectssoundFolder = `zvuky/effects`; +let effectVyhra = new Howl({ src: [`zvuky/effects/vyhra.mp3`] }); +let effectZle = new Howl({ src: [`zvuky/effects/zle.mp3`] }); +let effectSpravne = new Howl({ src: [`zvuky/effects/spravne.mp3`] }); +let effectkopanie = new Howl({ src: [`zvuky/effects/kopanie.wav`] }); +let effectzlato = new Howl({ src: [`zvuky/effects/zlato.wav`] }); + + + + + + +//////////////////////////////////////////////////////////// +// ========== KONFIGURÁCIA LEVELU ========== // +// Globálna premenná pre konfiguráciu aktuálneho levelu // +// Obsahuje: words, diamonds, golds, crystals, timeLimit // +// positions // +//////////////////////////////////////////////////////////// +let currentLevelConfig = null; +let isCustomLevel = false; // Označuje či je spustený custom level + +/** + * Inicializácia hry s konfiguráciou levelu + * @param {Object} levelConfig - konfigurácia levelu z levels.js + * @param {Boolean} customLevel - true ak je to custom level + */ + +function initializeGameWithLevel(levelConfig, customLevel = false) { + console.log('Inicializujem hru s levelConfig:', levelConfig); + + currentLevelConfig = levelConfig; + isCustomLevel = customLevel; + + // Aktualizácia počtov objektov podľa levelConfig + // OPRAVA: Použuj gameConfig namiesto priameho prístupu +if (levelConfig.gameConfig && levelConfig.gameConfig.diamonds) { + PocetGenDiamant = levelConfig.gameConfig.diamonds; +} +if (levelConfig.gameConfig && levelConfig.gameConfig.golds) { + PocetGenGolds = levelConfig.gameConfig.golds; +} +if (levelConfig.gameConfig && levelConfig.gameConfig.crystals) { + PocetGenKov = levelConfig.gameConfig.crystals; +} + +console.log(`Aktualizované počty z gameConfig: Diamanty=${PocetGenDiamant}, Zlato=${PocetGenGolds}, Kryštály=${PocetGenKov}`); + + // Nastavenie pozície hráča ak je definovaná v levelConfig + if (levelConfig.positions && levelConfig.positions.player) { + playerX = levelConfig.positions.player.x * blockSize; + playerY = levelConfig.positions.player.y * blockSize; + console.log(`Pozícia hráča nastavená na: ${levelConfig.positions.player.x}, ${levelConfig.positions.player.y}`); + } else { + // Predvolená pozícia + playerX = blockSize; + playerY = blockSize; + } + + console.log(`Nastavené počty: Diamanty=${PocetGenDiamant}, Zlato=${PocetGenGolds}, Kryštály=${PocetGenKov}`); + console.log('Custom level:', isCustomLevel); + + // Inicializácia sledovania výkonu + initializePerformanceTracking(); + + const timeLimit = levelConfig && levelConfig.timeLimit ? levelConfig.timeLimit : null; + startTimer(timeLimit); + + resetGame(); +} + + + + + +////////////////////////////////////////////////// +// ========== ČASOMIERA ========== // +// spustenie časomiery, zastavenie časomiery // +// pozastavenie a obnovenie časomiery // +// aktualizacia časomiery atd // +////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////////////////// +// Spustenie časomery - volať pri štarte hry // +// @param {number|null} timeLimit - Časový limit v sekundách (null = bez limitu) // +////////////////////////////////////////////////////////////////////////////////////// +function startTimer(timeLimit = null) { + console.log('Spúšťam časomeru...', timeLimit ? `Limit: ${timeLimit}s` : 'Bez limitu'); + + // Nastav časový limit z parametra + gameTimer.timeLimit = timeLimit; + gameTimer.startTime = Date.now(); + gameTimer.currentTime = 0; + gameTimer.isRunning = true; + gameTimer.isPaused = false; + + // Aktualizuj UI ihneď + updateTimerDisplay(); + + // Spusti pravidelné aktualizácie každú sekundu + gameTimer.intervalId = setInterval(() => { + if (!gameTimer.isPaused && gameTimer.isRunning) { + // Vypočítaj aktuálny čas + gameTimer.currentTime = Math.floor((Date.now() - gameTimer.startTime) / 1000); + + // Aktualizuj zobrazenie + updateTimerDisplay(); + + // Kontrola časového limitu + if (gameTimer.timeLimit && gameTimer.currentTime >= gameTimer.timeLimit) { + console.log('Čas vypršal!'); + handleTimeUp(); + } + } + }, 1000); +} + +//////////////////////////////////////// +// Zastavenie časomery // +//////////////////////////////////////// +function stopTimer() { + console.log('Zastavujem časomeru...'); + gameTimer.isRunning = false; + + if (gameTimer.intervalId) { + clearInterval(gameTimer.intervalId); + gameTimer.intervalId = null; + } +} + +//////////////////////////////////////////////////////////////////////////////// +// Pozastavenie/obnovenie časomery // +// @param {boolean} pause - true = pozastav, false = pokračuj // +//////////////////////////////////////////////////////////////////////////////// +function pauseTimer(pause = true) { + console.log(pause ? 'Pozastavujem časomeru...' : 'Obnovujem časomeru...'); + gameTimer.isPaused = pause; + + if (!pause && gameTimer.isRunning) { + // Pri obnovení prepočítaj štartovací čas + gameTimer.startTime = Date.now() - (gameTimer.currentTime * 1000); + } +} + +////////////////////////////////////////// +// Aktualizácia zobrazenia času v HTML // +////////////////////////////////////////// +function updateTimerDisplay() { + const timeElement = document.getElementById('game-timer'); + + if (timeElement) { + let displayTime; + + if (gameTimer.timeLimit) { + // Ak je nastavený limit, zobrazuj zostávajúci čas + const remainingTime = Math.max(0, gameTimer.timeLimit - gameTimer.currentTime); + displayTime = formatTime(remainingTime); + + // Pridaj varovnú farbu keď zostáva málo času + if (remainingTime <= 30) { + timeElement.style.color = '#ff4444'; // Červená + } else if (remainingTime <= 60) { + timeElement.style.color = '#ffaa00'; // Oranžová + } else { + timeElement.style.color = ''; // Pôvodná farba + } + } else { + // Bez limitu, zobrazuj uplynulý čas + displayTime = formatTime(gameTimer.currentTime); + timeElement.style.color = ''; // Pôvodná farba + } + + timeElement.textContent = displayTime; + } else { + console.warn('Element #game-timer nebol nájdený v HTML'); + } +} + +////////////////////////////////////////////////// +// Formátovanie času do MM:SS formátu // +// @param {number} seconds - Čas v sekundách // +// @returns {string} - Formátovaný čas // +////////////////////////////////////////////////// +function formatTime(seconds) { + const minutes = Math.floor(seconds / 60); + const remainingSeconds = seconds % 60; + return `${minutes.toString().padStart(2, '0')}:${remainingSeconds.toString().padStart(2, '0')}`; +} + +//////////////////////////////////////// +// Obsluha vypršania času // +//////////////////////////////////////// +function handleTimeUp() { + console.log('Čas vypršal! Ukončujem hru...'); + stopTimer(); + + // Zastav hru + gameRunning = false; + + // Zobraz konečný dialog s informáciou o vypršaní času + setTimeout(() => { + document.getElementById("endgame").style.display = "block"; + document.getElementById("blur-background").style.display = "block"; + document.body.style.overflow = "hidden"; + + // Pridaj informáciu o vypršaní času do konečného dialógu + const endGameContent = document.querySelector('#endgame .execise-window'); + if (endGameContent && !endGameContent.querySelector('.time-up-message')) { + const timeUpMessage = document.createElement('div'); + timeUpMessage.className = 'time-up-message'; + timeUpMessage.innerHTML = '

⏰ Čas vypršal!

'; + endGameContent.insertBefore(timeUpMessage, endGameContent.querySelector('nav')); + } + }, 100); +} + +////////////////////////////////////////////////// +// Získanie aktuálneho času hry // +// @returns {number} - Aktuálny čas v sekundách // +////////////////////////////////////////////////// +function getCurrentGameTime() { + return gameTimer.currentTime; +} + +////////////////////////////////////////////////////////////////////////////////////// +// Získanie zostávajúceho času (ak je nastavený limit) // +// @returns {number|null} - Zostávajúci čas v sekundách alebo null ak nie je limit // +////////////////////////////////////////////////////////////////////////////////////// +function getRemainingTime() { + if (gameTimer.timeLimit) { + return Math.max(0, gameTimer.timeLimit - gameTimer.currentTime); + } + return null; +} + + + + + +////////////////////////////////////////////////// +// ===== SPUSTENIE HRY S URL PARAMETRAMI ===== // +// Inicializácia hry na základe URL parametrov // +// Očakáva parametry: worldId, levelId // +////////////////////////////////////////////////// +function initializeFromURL() { + const urlParams = new URLSearchParams(window.location.search); + + // OPRAVENÉ: Podporuj oba formáty parametrov + const worldId = urlParams.get('worldId') || urlParams.get('world'); + const levelId = urlParams.get('levelId') || urlParams.get('level'); + + const isTraining = urlParams.get('training') === 'true'; + const trainingConfig = urlParams.get('config'); + + console.log('URL parametre:', { worldId, levelId }); + + // Zvyšok funkcie zostáva rovnaký... + if (worldId && levelId) { + if (typeof getLevelConfig === 'function') { + const levelConfig = getLevelConfig(levelId); + if (levelConfig) { + console.log('Načítaná konfigurácia levelu:', levelConfig); + initializeGameWithLevel(levelConfig); + return; + } else { + console.warn(`Level ${levelId} nebol nájdený`); + } + } else { + console.warn('Funkcia getLevelConfig nie je dostupná - levels.js nebol načítaný'); + } + } + + if (isTraining && trainingConfig) { + try { + const config = JSON.parse(decodeURIComponent(trainingConfig)); + console.log('Spúšťam tréningový level s konfiguráciou:', config); + initializeGameWithLevel(config, true); // true = custom level + return; + } catch (error) { + console.error('Chyba pri načítaní tréningovej konfigurácie:', error); + } + } + + // OPRAVENÝ FALLBACK - správne počty + console.log('Spúšťam hru s predvolenými nastaveniami'); + const fallbackLevelConfig = { + words: ['rak', 'ryba', 'ruka', 'rosa'], + diamonds: 2, + golds: 3, + crystals: 1, + timeLimit: null, + positions: { + diamonds: [{ x: 3, y: 8 }, { x: 12, y: 7 }], // len 2 pozície + golds: [{ x: 2, y: 9 }, { x: 7, y: 8 }, { x: 14, y: 6 }], // len 3 pozície + crystals: [{ x: 9, y: 7 }], + player: { x: 1, y: 1 } + } + }; + + console.log('Fallback timeLimit:', fallbackLevelConfig.timeLimit); + + initializeGameWithLevel(fallbackLevelConfig); +} + +/////////////////////////////////////////////// +// Spustenie inicializácie po načítaní DOM // +/////////////////////////////////////////////// +document.addEventListener('DOMContentLoaded', function() { + // Čakaj kým sa načítajú všetky scripty, potom inicializuj + setTimeout(initializeFromURL, 100); + initializeNavigation(); +}); + + + + + + +////////////////////////////////////////////////// +// ====== VIRTUAL JOYSTICK FUNKCIONALITA ====== // +// MECHANIKA POHYBU PRE MOBILY // +////////////////////////////////////////////////// + +/////////////////////////////////////////////// +// Premenné pre virtual joystick // +/////////////////////////////////////////////// +let joystickActive = false; +let joystickCenter = { x: 0, y: 0 }; +let joystickKnob = null; +let joystickBase = null; +let joystickContainer = null; +let joystickRadius = 45; // Polomer pohybu knobu +let lastMoveTime = 0; +const moveDelay = 150; // Delay medzi pohybmi v ms + +/////////////////////////////////////////////// +// Inicializácia joysticku po načítaní DOM // +/////////////////////////////////////////////// +document.addEventListener('DOMContentLoaded', function() { + initVirtualJoystick(); +}); + +function initVirtualJoystick() { + joystickContainer = document.querySelector('.virtual-joystick'); + joystickKnob = document.querySelector('.joystick-knob'); + joystickBase = document.querySelector('.joystick-base'); + + if (!joystickContainer || !joystickKnob) return; + + // Získanie centra joysticku + const rect = joystickContainer.getBoundingClientRect(); + joystickCenter.x = rect.width / 2; + joystickCenter.y = rect.height / 2; + + // Event listenery pre touch + joystickKnob.addEventListener('touchstart', handleTouchStart, { passive: false }); + joystickKnob.addEventListener('touchmove', handleTouchMove, { passive: false }); + joystickKnob.addEventListener('touchend', handleTouchEnd, { passive: false }); + + // Event listenery pre mouse (testovanie na desktop) + joystickKnob.addEventListener('mousedown', handleMouseStart); + document.addEventListener('mousemove', handleMouseMove); + document.addEventListener('mouseup', handleMouseEnd); +} + +/////////////////////////////////////////////// +// Touch start // +/////////////////////////////////////////////// +function handleTouchStart(e) { + e.preventDefault(); + joystickActive = true; + joystickContainer.classList.add('active'); +} + +/////////////////////////////////////////////// +// Touch move // +/////////////////////////////////////////////// +function handleTouchMove(e) { + e.preventDefault(); + if (!joystickActive) return; + + const touch = e.touches[0]; + const rect = joystickContainer.getBoundingClientRect(); + const x = touch.clientX - rect.left - joystickCenter.x; + const y = touch.clientY - rect.top - joystickCenter.y; + + updateJoystickPosition(x, y); +} + +/////////////////////////////////////////////// +// Touch end // +/////////////////////////////////////////////// +function handleTouchEnd(e) { + e.preventDefault(); + resetJoystick(); +} + +/////////////////////////////////////////////// +// Mouse start (pre testovanie) // +/////////////////////////////////////////////// +function handleMouseStart(e) { + e.preventDefault(); + joystickActive = true; + joystickContainer.classList.add('active'); +} + +/////////////////////////////////////////////// +// Mouse move // +/////////////////////////////////////////////// +function handleMouseMove(e) { + if (!joystickActive) return; + + const rect = joystickContainer.getBoundingClientRect(); + const x = e.clientX - rect.left - joystickCenter.x; + const y = e.clientY - rect.top - joystickCenter.y; + + updateJoystickPosition(x, y); +} + +/////////////////////////////////////////////// +// Mouse end // +/////////////////////////////////////////////// +function handleMouseEnd(e) { + resetJoystick(); +} + +/////////////////////////////////////////////// +// Aktualizácia pozície knobu a pohyb hráča // +/////////////////////////////////////////////// +function updateJoystickPosition(x, y) { + // Obmedz pohyb v kruhu + const distance = Math.sqrt(x * x + y * y); + const maxDistance = joystickRadius; + + if (distance > maxDistance) { + x = (x / distance) * maxDistance; + y = (y / distance) * maxDistance; + } + + // Aktualizuj pozíciu knobu + joystickKnob.style.transform = `translate(calc(-50% + ${x}px), calc(-50% + ${y}px))`; + + // Pohyb hráča na základe pozície joysticku + const currentTime = Date.now(); + if (currentTime - lastMoveTime > moveDelay) { + handleJoystickMovement(x, y); + lastMoveTime = currentTime; + } +} + +/////////////////////////////////////////////// +// Spracovanie pohybu hráča // +/////////////////////////////////////////////// +function handleJoystickMovement(x, y) { + const threshold = 15; // Minimálna vzdialenosť pre aktiváciu pohybu + const distance = Math.sqrt(x * x + y * y); + + if (distance < threshold) return; + + // Určenie smeru na základe uhla + const angle = Math.atan2(y, x) * (180 / Math.PI); + let direction = ''; + + if (angle >= -45 && angle <= 45) { + direction = 'right'; + } else if (angle > 45 && angle <= 135) { + direction = 'down'; + } else if (angle > 135 || angle <= -135) { + direction = 'left'; + } else if (angle > -135 && angle < -45) { + direction = 'up'; + } + + // Vykonaj pohyb + movePlayer(direction); +} + +/////////////////////////////////////////////// +// Pohyb hráča (používa existujúcu logiku) // +/////////////////////////////////////////////// +function movePlayer(direction) { + const newPlayerX = playerX; + const newPlayerY = playerY; + + switch (direction) { + case 'up': + if (playerY - blockSize >= 0) { + playerY -= blockSize; + playerRotation = 0; + playerDirection = 'front'; + } + break; + case 'left': + if (playerX - blockSize >= 0) { + playerX -= blockSize; + playerRotation = 270; + playerDirection = 'vlavo'; + } + break; + case 'down': + if (playerY + blockSize < 800) { + playerY += blockSize; + playerRotation = 180; + playerDirection = 'front'; + } + break; + case 'right': + if (playerX + blockSize < 800) { + playerX += blockSize; + playerRotation = 90; + playerDirection = 'vpravo'; + } + break; + } + + // Kontrola kolízií (použije existujúcu logiku) + checkCollisions(newPlayerX, newPlayerY); +} + +///////////////////////////////////////////////////// +// Kontrola kolízií (extrahované z pôvodného kódu) // +///////////////////////////////////////////////////// +function checkCollisions(newPlayerX, newPlayerY) { + // Kontrola kolízií s clay + clay.forEach((clayBlock, clayIndex) => { + const blockX = clayBlock.x; + const blockY = clayBlock.y; + if (playerX === blockX && playerY === blockY) { + if (isDestroying) { + clay.splice(clayIndex, 1); + isDestroying = false; + } else { + playerX = newPlayerX; + playerY = newPlayerY; + } + } + }); + + // Kontrola kolízií s diamonds + diamonds.forEach((diamond, diamondIndex) => { + const blockX = diamond.x; + const blockY = diamond.y; + if (playerX === blockX && playerY === blockY && !diamond.destroyed) { + if (isDestroying) { + diamond.destroyed = true; + isDestroying = false; + } else { + playerX = newPlayerX; + playerY = newPlayerY; + } + } + }); + + // Kontrola kolízií s kov + kov.forEach((kov, kovIndex) => { + const blockX = kov.x; + const blockY = kov.y; + if (playerX === blockX && playerY === blockY && !kov.destroyed) { + if (isDestroying) { + kov.destroyed = true; + isDestroying = false; + } else { + playerX = newPlayerX; + playerY = newPlayerY; + } + } + }); + + // Kontrola kolízií s golds + golds.forEach((gold, goldIndex) => { + const blockX = gold.x; + const blockY = gold.y; + if (playerX === blockX && playerY === blockY && !gold.destroyed) { + if (isDestroying) { + gold.destroyed = true; + isDestroying = false; + } else { + playerX = newPlayerX; + playerY = newPlayerY; + } + } + }); +} + +/////////////////////////////////////////////// +// Reset joysticku na stred // +/////////////////////////////////////////////// +function resetJoystick() { + joystickActive = false; + joystickContainer.classList.remove('active'); + joystickKnob.style.transform = 'translate(-50%, -50%)'; +} + +/////////////////////////////////////////////// +// Akčné tlačidlo // +/////////////////////////////////////////////// +document.addEventListener('DOMContentLoaded', function() { + const actionButton = document.querySelector('.action-button'); + if (actionButton) { + actionButton.addEventListener('touchstart', handleActionTouch, { passive: false }); + actionButton.addEventListener('click', handleActionClick); + } +}); + +function handleActionTouch(e) { + e.preventDefault(); + destroyBlock(); + animateDigging(); +} + +function handleActionClick(e) { + e.preventDefault(); + destroyBlock(); + animateDigging(); +} + + +/////////////////////////////////////////////// +// ========== OVLADANIE PRE PC ============= // +// POHYB - KLAVESNICA (PC) // +/////////////////////////////////////////////// +window.addEventListener('keydown', (e) => { + if (isExerciseActive) { + console.log('⚠️ Pohyb zablokovaný - cvičenie prebieha'); + return; // Ignoruj všetky klávesy + } + + const newPlayerX = playerX; + const newPlayerY = playerY; + + switch (e.key) { + case 'w': + case 'ArrowUp': + if (playerY - blockSize >= 0) { // Kontrola pohybu nahor + playerY -= blockSize; + playerRotation = 0; // Rotácia smeru hore + playerDirection = 'front'; + } + break; + case 'a': + case 'ArrowLeft': + if (playerX - blockSize >= 0) { + playerX -= blockSize; + playerRotation = 270; + playerDirection = 'vlavo'; + } + break; + case 's': + case 'ArrowDown': + if (playerY + blockSize < 800) { + playerY += blockSize; + playerRotation = 180; + playerDirection = 'front'; + } + break; + case 'd': + case 'ArrowRight': + if (playerX + blockSize < 800) { + playerX += blockSize; + playerRotation = 90; + playerDirection = 'vpravo'; + } + break; + } + + ////////////////////////////////////////////// + // Kontrola kolízií // + ////////////////////////////////////////////// + clay.forEach((clayBlock, clayIndex) => { + const blockX = clayBlock.x; + const blockY = clayBlock.y; + if (playerX === blockX && playerY === blockY) { + if (isDestroying) { + clay.splice(clayIndex, 1); + isDestroying = false; + } else { + // Nastavenie hráča späť na pôvodné miesto, keď sa snaží prejsť cez blok + playerX = newPlayerX; + playerY = newPlayerY; + } + } + }); + diamonds.forEach((diamond, diamondIndex) => { + const blockX = diamond.x; + const blockY = diamond.y; + if (playerX === blockX && playerY === blockY && !diamond.destroyed) { + if (isDestroying) { + diamond.destroyed = true; + isDestroying = false; + } else { + playerX = newPlayerX; + playerY = newPlayerY; + } + } + }); + kov.forEach((kov, kovIndex) => { + const blockX = kov.x; + const blockY = kov.y; + if (playerX === blockX && playerY === blockY && !kov.destroyed) { + if (isDestroying) { + kov.destroyed = true; + isDestroying = false; + } else { + playerX = newPlayerX; + playerY = newPlayerY; + } + } +}); + golds.forEach((gold, goldIndex) => { + const blockX = gold.x; + const blockY = gold.y; + if (playerX === blockX && playerY === blockY && !gold.destroyed) { + if (isDestroying) { + gold.destroyed = true; + isDestroying = false; + } else { + playerX = newPlayerX; + playerY = newPlayerY; + } + } + }); + +}); + +document.addEventListener('keydown', (e) => { + if (e.key === ' ') { + destroyBlock(); + animateDigging(); + } +}); + +/////////////////////////////////////////////// +// Funkcia na ničenie itemov // +/////////////////////////////////////////////// +function destroyBlock() { + if (isExerciseActive) { + console.log('⚠️ Kopanie zablokované - cvičenie prebieha'); + return; // Ignoruj akciu kopania + } + + playerBlockX = Math.floor(playerX / blockSize); + playerBlockY = Math.floor(playerY / blockSize); + targetBlockX = playerBlockX; + targetBlockY = playerBlockY; + // Zistí smer hráča a určí cieľový blok podľa toho + switch (playerRotation) { + case 0: + targetBlockY--; + break; + case 90: + targetBlockX++; + break; + case 180: + targetBlockY++; + break; + case 270: + targetBlockX--; + break; + } + + clay.forEach((clayBlock, clayIndex) => { + const blockX = clayBlock.x / blockSize; + const blockY = clayBlock.y / blockSize; + // Kontrola zničenia bloku, ktorý je pred hráčom v smeru, ktorým je hráč otáčaný + if (blockX === targetBlockX && blockY === targetBlockY) { + clay.splice(clayIndex, 1); + } + }); + + diamonds.forEach((diamond, diamondIndex) => { + blockX = diamond.x / blockSize; + blockY = diamond.y / blockSize; + if (blockX === targetBlockX && blockY === targetBlockY && !diamond.destroyed) { + spaceBarPressed++; + if (spaceBarPressed === 3) { + openCvicenie(); + } + } + }); + + golds.forEach((gold, goldIndex) => { + const blockX = gold.x / blockSize; + const blockY = gold.y / blockSize; + if (blockX === targetBlockX && blockY === targetBlockY && !gold.destroyed) { + spaceBarPressed++; + if (spaceBarPressed === 2) { + gold.destroyed = true; + goldsCollected++; + effectzlato.play(); + updateGoldCount(); + updategoldsCollected(goldsCollected); + recordGoldCollected(); + checkWinConditionWithRating(); + spaceBarPressed = 0; + } + } + }); + + kov.forEach((kov, kovIndex) => { + const blockX = kov.x / blockSize; + const blockY = kov.y / blockSize; + if (blockX === targetBlockX && blockY === targetBlockY && !kov.destroyed) { + spaceBarPressed++; + if (spaceBarPressed === 4) { + showInfoDialog(); + } + } + }); +} +/////////////////////////////////////////////// +// Animácia kopania // +/////////////////////////////////////////////// +function animateDigging() { + if (isExerciseActive) { + console.log('⚠️ Pohyb zablokovaný - cvičenie prebieha'); + return; // Ignoruj všetky klávesy + } + + kope = true; + drawPlayer(); + effectkopanie.play(); + setTimeout(() => { + kope = false; + drawPlayer(); + }, 200); // Čas, po ktorom sa obrázok vráti späť (200 milisekúnd) +} + + + + + +////////////////////////////////////////////////// +// ======= GENEROVANIE SVETA A ITEMOV ======= // +// Inicializácia sveta, generovanie a kreslenie // +// itemov a hrača // +////////////////////////////////////////////////// + +////////////////////////////////////////////////// +// Generovanie diamantov // +// Podporuje presné pozície z levelConfig // +// alebo náhodné generovanie // +////////////////////////////////////////////////// +function generateDiamonds() { + // Ak máme presné pozície v levelConfig a nie je to custom level + if (currentLevelConfig && currentLevelConfig.positions && + currentLevelConfig.positions.diamonds && !isCustomLevel) { + + console.log('Generujem diamanty na presných pozíciach z levelConfig'); + currentLevelConfig.positions.diamonds.forEach(pos => { + const newPosition = { x: pos.x * blockSize, y: pos.y * blockSize }; + diamonds.push(newPosition); + generatedPositions.push(newPosition); + console.log(`Diamant na pozícii: ${pos.x}, ${pos.y}`); + }); + } else { + // Náhodné generovanie (pre custom levely alebo ak nie sú definované pozície) + console.log('Generujem diamanty náhodne'); + while (diamonds.length != PocetGenDiamant) { + const diamondX = Math.floor(Math.random() * mapWidth) * blockSize; + const diamondY = (Math.floor(Math.random() * mapHeight) + 6) * blockSize; + const newPosition = { x: diamondX, y: diamondY }; + + const positionExists = generatedPositions.some(pos => pos.x === diamondX && pos.y === diamondY); + if (!positionExists) { + diamonds.push(newPosition); + generatedPositions.push(newPosition); + } + } + } + + initializeDiamonds(PocetGenDiamant); +} + +////////////////////////////////////////////////// +// Generovanie Kovov // +// Podporuje presné pozície z levelConfig // +// alebo náhodné generovanie // +////////////////////////////////////////////////// +function generateKov() { + if (currentLevelConfig && currentLevelConfig.positions && + currentLevelConfig.positions.crystals && !isCustomLevel) { + + console.log('Generujem kryštály na presných pozíciach z levelConfig'); + currentLevelConfig.positions.crystals.forEach(pos => { + const newPosition = { x: pos.x * blockSize, y: pos.y * blockSize }; + kov.push(newPosition); + generatedPositions.push(newPosition); + console.log(`Kryštál na pozícii: ${pos.x}, ${pos.y}`); + }); + } else { + console.log('Generujem kryštály náhodne'); + while (kov.length != PocetGenKov) { + const kovX = Math.floor(Math.random() * mapWidth) * blockSize; + const kovY = (Math.floor(Math.random() * mapHeight) + 6) * blockSize; + const newPosition = { x: kovX, y: kovY }; + + const positionExists = generatedPositions.some(pos => pos.x === kovX && pos.y === kovY); + if (!positionExists) { + kov.push(newPosition); + generatedPositions.push(newPosition); + } + } + } + + initializeKov(PocetGenKov); +} + +////////////////////////////////////////////////// +// Generovanie Goldov // +// Podporuje presné pozície z levelConfig // +// alebo náhodné generovanie // +////////////////////////////////////////////////// +function generateGolds() { + if (currentLevelConfig && currentLevelConfig.positions && + currentLevelConfig.positions.golds && !isCustomLevel) { + + console.log('Generujem goldy na presných pozíciách z levelConfig'); + currentLevelConfig.positions.golds.forEach(pos => { + const newPosition = { x: pos.x * blockSize, y: pos.y * blockSize }; + golds.push(newPosition); + generatedPositions.push(newPosition); + console.log(`Gold na pozícii: ${pos.x}, ${pos.y}`); + }); + } else { + console.log('Generujem goldy náhodne'); + while (golds.length !== PocetGenGolds) { + const goldX = Math.floor(Math.random() * mapWidth) * blockSize; + const goldY = (Math.floor(Math.random() * mapHeight) + 6) * blockSize; + const newPosition = { x: goldX, y: goldY }; + + const positionExists = generatedPositions.some(pos => pos.x === goldX && pos.y === goldY) || + diamonds.some(diamond => diamond.x === goldX && diamond.y === goldY) || + kov.some(kov => kov.x === goldX && kov.y === goldY); + if (!positionExists) { + golds.push(newPosition); + generatedPositions.push(newPosition); + } + } + } + + initializeGolds(PocetGenGolds); +} + +////////////////////////////////////////////////// +// Generovanie Clay // +// Generuje hlinu všade okrem pozícií // +// kde sú iné objekty // +////////////////////////////////////////////////// +function generateClay() { + for (let y = 0; y < mapHeight; y++) { + for (let x = 0; x < mapWidth; x++) { + let isPositionEmpty = true; + diamonds.forEach(diamond => { + if (diamond.x === x * blockSize && diamond.y === (y + 6) * blockSize) { + isPositionEmpty = false; + } + }); + kov.forEach(kov => { + if (kov.x === x * blockSize && kov.y === (y + 6) * blockSize) { + isPositionEmpty = false; + } + }); + golds.forEach(gold => { + if (gold.x === x * blockSize && gold.y === (y + 6) * blockSize) { + isPositionEmpty = false; + } + }); + if (isPositionEmpty) { + clay.push({ x: x * blockSize, y: (y + 6) * blockSize }); + } + } + } +} + +////////////////////////////////////////////////// +// Funkcia na vykreslovanie postavy // +////////////////////////////////////////////////// +function drawPlayer() { + let image; + if (playerDirection == 'front' ){ + image = playerImg; + if(kope == true){ + image = hracKopaVpravoImg; + } + }else if (playerDirection == 'vpravo' ){ + image = playerImgVp; + if(kope == true){ + image = hracKopaVpravoImg; + } + } else if (playerDirection == 'vlavo' ){ + image = playerImgVl; + if(kope == true){ + image = hracKopaVlavoImg; + } + }else{ + image = playerImg; + } + ctx.drawImage(image, playerX, playerY, playerSize, playerSize); + if(kope == true){ + image = hracKopaVpravoImg; + } +} +////////////////////////////////////////////////// +// Funkcia na vykreslovanie diamantov // +////////////////////////////////////////////////// +function drawDiamonds() { + diamonds.forEach(diamond => { + if (!diamond.destroyed) { + ctx.drawImage(diamondImg, diamond.x, diamond.y, diamondSize, diamondSize); + } + }); +} +////////////////////////////////////////////////// +// Funkcia na vykreslovanie kovu // +////////////////////////////////////////////////// +function drawKov() { + kov.forEach(kov => { + if (!kov.destroyed) { + ctx.drawImage(kovImg, kov.x, kov.y, kovSize, kovSize); + } + }); +} +////////////////////////////////////////////////// +// Funkcia na vykreslovanie goldov // +////////////////////////////////////////////////// +function drawGolds() { + golds.forEach(gold => { + if (!gold.destroyed) { + ctx.drawImage(goldImg, gold.x, gold.y, GoldSize, GoldSize); + } + }); +} +////////////////////////////////////////////////// +// Funkcia na vykreslovanie hliny // +////////////////////////////////////////////////// +function drawClay() { + ctx.lineWidth = 2; + clay.forEach(clayObj => { + ctx.drawImage(clayImg, clayObj.x, clayObj.y, claySize, claySize); + }); +} + + + + + +////////////////////////////////////////////////// +// ========================================== // +// ====== SYSTÉM HVIEZD A HODNOTENIA ======= // +// ========================================== // +////////////////////////////////////////////////// + +///////////////////////////////////////////// +// Globálne premenné pre sledovanie výkonu // +///////////////////////////////////////////// +let gamePerformance = { + speechExercises: { + totalExercises: 0, // Celkový počet rečových cvičení v leveli (diamantov) + completedExercises: 0, // Dokončené rečové cvičenia + completedRounds: 0, // Počet absolvovaných kôl (slov) naprieč všetkými cvičeniami + roundResults: [], // Výsledky každého kola [{attempts: 1, points: 3, success: true}, ...] + currentExerciseRounds: 0, // Počet kôl v aktuálnom cvičení (z levelConfig) + totalPoints: 0 // Celkové body za rečové cvičenia + }, + listeningExercises: { + totalExercises: 0, // Celkový počet posluchových cvičení (kryštálov) + completedExercises: 0, // Dokončené posluchové cvičenia + completedRounds: 0, // Počet absolvovaných kôl (párov) naprieč všetkými cvičeniami + roundResults: [], // Výsledky každého kola [{attempts: 1, points: 3, success: true}, ...] + currentExerciseRounds: 0, // Počet kôl v aktuálnom cvičení (z levelConfig) + totalPoints: 0 // Celkové body za posluchové cvičenia + }, + golds: { + total: 0, // Celkový počet goldov + collected: 0 // Zozbierané goldy + }, + levelCompleted: false, // Či bol level dokončený + finalStars: 0, // Finálny počet hviezd + totalPoints: 0, // Celkové body + maxPossiblePoints: 0 // Maximálne možné body (vypočítané dynamicky) +}; + +////////////////////////////////////////////////////////// +// Inicializácia sledovania výkonu na začiatku levelu // +////////////////////////////////////////////////////////// +function initializePerformanceTracking() { + console.log('Inicializujem sledovanie výkonu...'); + + // Resetuj gamePerformance + gamePerformance = { + speechExercises: { + totalExercises: PocetGenDiamant, + completedExercises: 0, + completedRounds: 0, // Nová vlastnosť - absolvované kolá + roundResults: [], // Nová vlastnosť - výsledky jednotlivých kôl + currentExerciseRounds: 0, // Nová vlastnosť - počet kôl v aktuálnom cvičení + totalPoints: 0 + }, + listeningExercises: { + totalExercises: PocetGenKov, + completedExercises: 0, + completedRounds: 0, // Nová vlastnosť - absolvované kolá + roundResults: [], // Nová vlastnosť - výsledky jednotlivých kôl + currentExerciseRounds: 0, // Nová vlastnosť - počet kôl v aktuálnom cvičení + totalPoints: 0 + }, + golds: { + total: PocetGenGolds, + collected: 0 + }, + levelCompleted: false, + finalStars: 0, + totalPoints: 0, + maxPossiblePoints: 0 // Bude vypočítané dynamicky v calculateFinalRating() + }; + + console.log(`Výkon inicializovaný - Max body sa vypočítajú dynamicky podľa absolvovaných kôl`); + console.log(`Diamanty: ${PocetGenDiamant}, Kryštály: ${PocetGenKov}, Goldy: ${PocetGenGolds}`); +} + +////////////////////////////////////////////////////////// +/** // + * Zaznamenanie výsledku rečového cvičenia // + * NOVÝ SYSTÉM: Volá sa po KAŽDOM DOKONČENOM SLOVE // + * @param {number} attempts - Počet pokusov (1-3, alebo 0 pri neúspechu) // + * @param {boolean} success - Či bolo kolo úspešné // + */ // +////////////////////////////////////////////////////////// +function recordSpeechExerciseResult(attempts, success) { + console.log(`📝 Zaznamenávam rečové kolo: ${attempts} pokusov, úspech: ${success}`); + + // Výpočet bodov podľa počtu pokusov + let points = 0; + if (success) { + switch(attempts) { + case 1: points = 3; break; // 1 pokus = 3 body + case 2: points = 2; break; // 2 pokusy = 2 body + case 3: points = 1; break; // 3 pokusy = 1 bod + default: points = 0; break; // Inak 0 bodov + } + gamePerformance.speechExercises.completedRounds++; + } + + // Ulož výsledok kola do poľa + gamePerformance.speechExercises.roundResults.push({ + attempts: attempts, + points: points, + success: success + }); + + // Pripočítaj body + gamePerformance.speechExercises.totalPoints += points; + + const totalRounds = gamePerformance.speechExercises.roundResults.length; + console.log(`✅ Rečové kolo dokončené: +${points} bodov (celkom: ${gamePerformance.speechExercises.totalPoints} z ${totalRounds * 3} možných)`); +} + +////////////////////////////////////////////////////////////////////// +/** // + * Zaznamenanie výsledku posluchového cvičenia // + * NOVÝ SYSTÉM: Volá sa po KAŽDOM DOKONČENOM PÁRE (KOLE) // + * @param {number} attempts - Počet pokusov (1-3, alebo 0 pri neúspechu) // + * @param {boolean} success - Či bolo kolo úspešné // + */ // +////////////////////////////////////////////////////////////////////// +function recordListeningExerciseResult(attempts, success) { + console.log(`📝 Zaznamenávam posluchové kolo: ${attempts} pokusov, úspech: ${success}`); + + // Výpočet bodov podľa počtu pokusov + let points = 0; + if (success) { + switch(attempts) { + case 1: points = 3; break; // 1 pokus = 3 body + case 2: points = 2; break; // 2 pokusy = 2 body + case 3: points = 1; break; // 3 pokusy = 1 bod + default: points = 0; break; // Inak 0 bodov + } + gamePerformance.listeningExercises.completedRounds++; + } + + // Ulož výsledok kola do poľa + gamePerformance.listeningExercises.roundResults.push({ + attempts: attempts, + points: points, + success: success + }); + + // Pripočítaj body + gamePerformance.listeningExercises.totalPoints += points; + + const totalRounds = gamePerformance.listeningExercises.roundResults.length; + console.log(`✅ Posluchové kolo dokončené: +${points} bodov (celkom: ${gamePerformance.listeningExercises.totalPoints} z ${totalRounds * 3} možných)`); +} + +////////////////////////////////////// +// Zaznamenanie zozbierania goldu // +////////////////////////////////////// +function recordGoldCollected() { + gamePerformance.golds.collected++; +} + +////////////////////////////////////////////////////////////////////////////// +/** // + * Výpočet finálneho hodnotenia // + * @returns {Object} Objekt s hviezdami a detailnými štatistikami // +*/ // +////////////////////////////////////////////////////////////////////////////// +function calculateFinalRating() { + console.log('🧮 Vypočítavam finálne hodnotenie...'); + + // === DYNAMICKÝ PREPOČET MAX BODOV === + // Max body = počet absolvovaných kôl × 3 (každé kolo má max 3 body) + const speechRoundsCompleted = gamePerformance.speechExercises.roundResults.length; + const listeningRoundsCompleted = gamePerformance.listeningExercises.roundResults.length; + + // Každé absolvované kolo (či úspešné alebo nie) sa započítava do max bodov + gamePerformance.maxPossiblePoints = + (speechRoundsCompleted * 3) + // Rečové kolá: max 3 body/kolo + (listeningRoundsCompleted * 3); // Posluchové kolá: max 3 body/kolo + + console.log(`📊 Rečové kolá: ${speechRoundsCompleted} × 3 = ${speechRoundsCompleted * 3} bodov`); + console.log(`📊 Posluchové kolá: ${listeningRoundsCompleted} × 3 = ${listeningRoundsCompleted * 3} bodov`); + console.log(`📊 Max možné body: ${gamePerformance.maxPossiblePoints}`); + + // Celkové body + const totalPoints = gamePerformance.speechExercises.totalPoints + + gamePerformance.listeningExercises.totalPoints; + + gamePerformance.totalPoints = totalPoints; + + // Percentuálny výkon + const percentage = gamePerformance.maxPossiblePoints > 0 + ? (totalPoints / gamePerformance.maxPossiblePoints) * 100 + : 0; + + // Výpočet hviezd podľa percentuálneho výkonu + let stars = 0; + if (percentage >= 70) { + stars = 3; + } else if (percentage >= 40) { + stars = 2; + } else if (percentage >= 20) { + stars = 1; + } else { + stars = 0; + } + + gamePerformance.finalStars = stars; + + const result = { + stars: stars, + totalPoints: totalPoints, + maxPossiblePoints: gamePerformance.maxPossiblePoints, + percentage: Math.round(percentage), + speechPoints: gamePerformance.speechExercises.totalPoints, + listeningPoints: gamePerformance.listeningExercises.totalPoints, + speechSuccess: gamePerformance.speechExercises.completedExercises, + speechTotal: gamePerformance.speechExercises.totalExercises, + listeningSuccess: gamePerformance.listeningExercises.completedExercises, + listeningTotal: gamePerformance.listeningExercises.totalExercises, + goldsCollected: gamePerformance.golds.collected, + goldsTotal: gamePerformance.golds.total, + gameTime: getCurrentGameTime() + }; + + console.log('Finálne hodnotenie:', result); + return result; +} + +////////////////////////////////////////////////////////// +/** // + * Uloženie výsledkov do progress managera // + * @param {Object} rating - Výsledky hodnotenia // + */ // +////////////////////////////////////////////////////////// +function saveResultsToProgress(rating) { + console.log('💾 Ukladám výsledky do progress managera...', rating); + + // Získaj informácie o aktuálnom leveli + const urlParams = new URLSearchParams(window.location.search); + const worldId = urlParams.get('worldId') || urlParams.get('world'); + const levelId = urlParams.get('levelId') || urlParams.get('level'); + const isTraining = urlParams.get('training') === 'true'; + + // Pre tréningové levely neukladaj do progress managera + if (isTraining) { + console.log('🎯 Tréningový level - neukladám do progress managera'); + return { + saved: false, + reason: 'training_level', + unlocked: { levels: [], worlds: [] } + }; + } + + if (!worldId || !levelId) { + console.warn('⚠️ Chýbajú URL parametre pre uloženie pokroku'); + return { + saved: false, + reason: 'missing_params', + unlocked: { levels: [], worlds: [] } + }; + } + + if (!window.progressManager) { + console.warn('⚠️ ProgressManager nie je dostupný'); + return { + saved: false, + reason: 'no_progress_manager', + unlocked: { levels: [], worlds: [] } + }; + } + + try { + // Príprava rozšírených dát pre progress manager + const levelData = { + // Základné údaje + stars: rating.stars, + completed: true, + time: rating.gameTime, + + // Detailné štatistiky + points: rating.totalPoints, + maxPoints: rating.maxPossiblePoints, + percentage: rating.percentage, + + // Rozdelenie bodov + speechExercises: { + completed: rating.speechSuccess, + total: rating.speechTotal, + points: rating.speechPoints, + roundResults: gamePerformance.speechExercises.roundResults // NOVÁ ŠTRUKTÚRA: Výsledky každého kola + }, + listeningExercises: { + completed: rating.listeningSuccess, + total: rating.listeningTotal, + points: rating.listeningPoints, + roundResults: gamePerformance.listeningExercises.roundResults // NOVÁ ŠTRUKTÚRA: Výsledky každého kola + }, + golds: { + collected: rating.goldsCollected, + total: rating.goldsTotal + }, + + // Metadáta + timestamp: new Date().toISOString(), + gameVersion: '2.0', + levelType: 'banik' + }; + + console.log('📊 Ukladané dáta:', levelData); + + // Ulož do progress managera - VOLÁ VYLEPŠENÚ FUNKCIU + const success = window.progressManager.updateLevelProgress(worldId, levelId, levelData); + + if (success) { + console.log('✅ Výsledky úspešne uložené do progress managera'); + + // Aktualizuj celkové štatistiky hráča + const playerStats = { + wordsSpoken: rating.speechTotal, + correctPronunciations: rating.speechSuccess, + incorrectPronunciations: rating.speechTotal - rating.speechSuccess, + gamesPlayed: 1, + gameType: 'banik', + totalPlayTime: rating.gameTime + }; + + if (typeof window.progressManager.updateProgressStatistics === 'function') { + window.progressManager.updateProgressStatistics(playerStats); + } + + // Získaj informácie o odomknutom obsahu + const worldProgress = window.progressManager.getWorldProgress(worldId); + const detailedProgress = window.progressManager.getDetailedWorldProgress(worldId); + + console.log('🏆 Aktuálny pokrok sveta:', detailedProgress); + + // Vráť informácie o uložení a odomknutom obsahu + return { + saved: true, + worldProgress: worldProgress, + detailedProgress: detailedProgress, + unlocked: { + levels: [], // Vyplní sa automaticky v progress manageri + worlds: [] // Vyplní sa automaticky v progress manageri + } + }; + + } else { + console.error('❌ Chyba pri ukladaní do progress managera'); + return { + saved: false, + reason: 'save_failed', + unlocked: { levels: [], worlds: [] } + }; + } + + } catch (error) { + console.error('💥 Chyba pri ukladaní výsledkov:', error); + return { + saved: false, + reason: 'exception', + error: error.message, + unlocked: { levels: [], worlds: [] } + }; + } +} + +////////////////////////////////////////////////////////// +/// Aktualizácia zobrazenia výkonu v UI (voliteľné) // +////////////////////////////////////////////////////////// +function updateAnswerCounters() { + const correctElement = document.getElementById('correct-words'); + const incorrectElement = document.getElementById('incorrect-words'); + + if (correctElement) { + correctElement.innerHTML = `${correctAnswers} `; + } + + if (incorrectElement) { + incorrectElement.innerHTML = `${incorrectAnswers} `; + } + + console.log(`Počítadlá aktualizované: ${correctAnswers} správnych, ${incorrectAnswers} nesprávnych`); +} + +///////////////////////////////////////////////////////////////////////////////////// +/** // + * Zobrazenie detailných výsledkov v win dialógu // + * @param {Object} rating - Výsledky hodnotenia // + * @param {Object} saveResult - Výsledok uloženia do progress managera // + */ // +///////////////////////////////////////////////////////////////////////////////////// +function displayResultsInWinDialog(rating, saveResult) { + console.log('📋 Zobrazujem výsledky v existujúcom win dialógu...', rating); + + // Nájdi win dialóg + const endGameDialog = document.querySelector('#endgame'); + if (!endGameDialog) { + console.warn('⚠️ Win dialóg nebol nájdený'); + return; + } + + // OPRAVA: Aktualizuj existujúce HTML elementy namiesto pridávania nových + + // 1. Aktualizuj čas + const timeSpan = endGameDialog.querySelector('.stats div:first-child span'); + if (timeSpan) { + timeSpan.textContent = formatTime(rating.gameTime); + console.log('✅ Čas aktualizovaný:', formatTime(rating.gameTime)); + } + + // 2. Aktualizuj slová - nájdi správny div (druhý div v stats) + const wordsDiv = endGameDialog.querySelector('.stats div:nth-child(2)'); + if (wordsDiv) { + // Vypočítaj nesprávne pokusy + const speechIncorrect = rating.speechTotal - rating.speechSuccess; + + // Aktualizuj HTML obsah celého div-u + wordsDiv.innerHTML = ` + Slová: + ${rating.speechSuccess} + / + ${speechIncorrect} + `; + console.log(`✅ Slová aktualizované: ${rating.speechSuccess} správne, ${speechIncorrect} nesprávne`); + } + + // 3. Pridaj nové štatistiky pod existujúce (ak nie sú už tam) + const statsDiv = endGameDialog.querySelector('.stats'); + if (statsDiv && !statsDiv.querySelector('.additional-stats')) { + // Vytvor div pre dodatočné štatistiky + const additionalStatsDiv = document.createElement('div'); + additionalStatsDiv.className = 'additional-stats'; + additionalStatsDiv.innerHTML = ` +
+ Body: + ${rating.totalPoints}/${rating.maxPossiblePoints} +
+
+ Úspešnosť: + ${rating.percentage}% +
+ `; + + statsDiv.appendChild(additionalStatsDiv); + console.log('✅ Dodatočné štatistiky pridané'); + } + + // 4. Aktualizuj hviezdy v existujúcom modal-stars div + const starsDiv = endGameDialog.querySelector('#modal-stars'); + if (starsDiv) { + starsDiv.innerHTML = generateStarsHTML(rating.stars); + console.log(`✅ Hviezdy aktualizované: ${rating.stars}/3`); + } + + console.log('🎉 Win dialóg úspešne aktualizovaný!'); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +/** // + * Generovanie HTML pre zobrazenie hviezd (kompatibilné s existujúcim dizajnom) // + * @param {number} stars - Počet hviezd (0-3) // + * @returns {string} HTML string // + */ // +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +function generateStarsHTML(stars) { + let starsHTML = '
'; + + for (let i = 1; i <= 3; i++) { + if (i <= stars) { + // Aktívna hviezda + starsHTML += `Hviezda`; + } else { + // Neaktívna hviezda + starsHTML += `Hviezda`; + } + } + + starsHTML += '
'; + return starsHTML; +} + + + + + +////////////////////////////////////////////////////////// +// kontrola vitaznych podmienok - pridať hodnotenie // +////////////////////////////////////////////////////////// +function checkWinConditionWithRating() { + if (diamondsCollected === PocetGenDiamant && goldsCollected === PocetGenGolds && kovCollected === PocetGenKov) { + gamePerformance.levelCompleted = true; + + // Zastav timer + stopTimer(); + + // Vypočítaj hodnotenie + const rating = calculateFinalRating(); + const saveResult = saveResultsToProgress(rating); + + // Aktualizuj navigáciu + updateDialogNavigation(); + + setTimeout(() => { + effectVyhra.play(); + document.getElementById("endgame").style.display = "block"; + document.getElementById("blur-background").style.display = "block"; + document.body.style.overflow = "hidden"; + + // Zobraz výsledky v dialógu + displayResultsInWinDialog(rating, saveResult); + + }, 100); + } +} + +/////////////////////////////// +// Reset hry - vynulovanie // +/////////////////////////////// +function resetGame() { + stopTimer(); + initializePerformanceTracking(); + + let hasWon = false; // Premenná na sledovanie, či hráč už vyhral + playerX = blockSize; // Začiatočná pozícia hráča na osi X + playerY = blockSize; // Začiatočná pozícia hráča na osi Y + + diamonds.length = 0; + kov.length = 0; + clay.length = 0; + golds.length = 0; + + wordList = []; + currentWordIndex = 0; + + diamondsDestroyed = 0; // Počet zničených diamantov + kovsDestroyed = 0; // Počet zničených diamantov + goldsDestroyed = 0; + isDestroying = false; // Premenná určujúca, či hráč zničí blok + playerRotation = 0; // Úvodná rotácia hráča + diamondsCollected = 0; // Počet zozbieraných diamantov + kovCollected = 0; // Počet zozbieraných diamantov + goldsCollected = 0; + generatedPositions = []; // Vyčisti pozície objektov + + correctAnswers = 0; + incorrectAnswers = 0; + updateAnswerCounters(); + + ctx.clearRect(0, 0, canvas.width, canvas.height); + generateDiamonds(); + generateKov(); + generateGolds(); + generateClay(); + drawPlayer(); + drawClay(); + drawDiamonds(); + drawKov(); + drawGolds(); + requestAnimationFrame(gameLoop); + + const timeLimit = currentLevelConfig && currentLevelConfig.timeLimit ? currentLevelConfig.timeLimit : null; + startTimer(timeLimit); + + console.log('Hra spustená s časovým systémom'); +} + +////////////////////// +// BOČNY PANEL // +////////////////////// +function updateDiamondCount() { + const diamondCountElement = document.getElementById('diamondCount'); + if (diamondCountElement) { + diamondCountElement.textContent = diamondsCollected; + } +} +function updateKovCount() { + const kovCountElement = document.getElementById('kovCount'); + if (kovCountElement) { + kovCountElement.textContent = kovCollected; + } +} +function updateGoldCount() { + const goldCountElement = document.getElementById('goldCount'); + if (goldCountElement) { + goldCountElement.textContent = goldsCollected; + } +} + +/////////////////////////////////////////////////// +// Funkcia na inicializáciu zobrazenia itemu // +/////////////////////////////////////////////////// +function initializeDiamonds(count) { + const diamondsContainer = document.querySelector('.diamonds-container'); + // Vymažte všetky existujúce diamantové položky + diamondsContainer.innerHTML = ''; + // Vytvorte a pridajte diamantové položky na základe počtu diamantov + for (let i = 0; i < count; i++) { + const diamondItem = document.createElement('div'); + diamondItem.classList.add('diamond-item'); + const diamondImage = document.createElement('img'); + diamondImage.src = 'images/diamond.png'; + diamondImage.alt = 'Diamond'; + diamondImage.classList.add('diamond-image'); + const diamondOverlay = document.createElement('div'); + diamondOverlay.classList.add('diamond-overlay'); + diamondItem.appendChild(diamondImage); + diamondItem.appendChild(diamondOverlay); + diamondsContainer.appendChild(diamondItem); + } +} +function initializeKov(count) { + const kovContainer = document.querySelector('.kov-container'); + kovContainer.innerHTML = ''; + for (let i = 0; i < count; i++) { + const kovItem = document.createElement('div'); + kovItem.classList.add('kov-item'); + const kovImage = document.createElement('img'); + kovImage.src = 'images/kov.png'; + kovImage.alt = 'Kov'; + kovImage.classList.add('kov-image'); + const kovOverlay = document.createElement('div'); + kovOverlay.classList.add('kov-overlay'); + kovItem.appendChild(kovImage); + kovItem.appendChild(kovOverlay); + kovContainer.appendChild(kovItem); + } +} +function initializeGolds(count) { + const goldsContainer = document.querySelector('.golds-container'); + goldsContainer.innerHTML = ''; + for (let i = 0; i < count; i++) { + const goldItem = document.createElement('div'); + goldItem.classList.add('gold-item'); + const goldImage = document.createElement('img'); + goldImage.src = 'images/gold.png'; + goldImage.alt = 'Gold'; + goldImage.classList.add('gold-image'); + const goldOverlay = document.createElement('div'); + goldOverlay.classList.add('gold-overlay'); + goldItem.appendChild(goldImage); + goldItem.appendChild(goldOverlay); + goldsContainer.appendChild(goldItem); + } +} + +///////////////////////////////////////////////////////////////////////////// +// Funkcia na aktualizáciu zobrazenia itemov po získaní nového itemu // +///////////////////////////////////////////////////////////////////////////// +function updateDiamondsCollected(count) { + const diamonds = document.querySelectorAll('.diamond-item'); + // Aktualizujte triedy pre všetky diamanty po získaní nového diamantu + for (let i = 0; i < count; i++) { + diamonds[i].classList.add('collected'); + } +} +function updateKovCollected(count) { + const kov = document.querySelectorAll('.kov-item'); + for (let i = 0; i < count; i++) { + kov[i].classList.add('collected'); + } +} +function updategoldsCollected(count) { + const golds = document.querySelectorAll('.gold-item'); + for (let i = 0; i < count; i++) { + golds[i].classList.add('collected'); + } +} + + + + + + +////////////////////////////////////////////////////////////////////// +// ================================================================ // +// ===== CVIČENIE NA ROZPOZNANIE PODOBNÝCH ZVUKOV ===== // +// ================================================================ // +////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////// +// ================================================================ // +// ===== POSLUCHOVÉ MINICVIČENIE ===== // +// ================================================================ // +////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////// +// ====== POSLUCHOVÉ CVIČENIE ====== // +// Premenné pre posluchové cvičenie // +////////////////////////////////////////// +let listeningCurrentIndex = 0; // Aktuálny index cvičenia +let listeningWordPairs = []; // Pár slov pre porovnanie +let listeningAttempts = 0; // Počet pokusov v aktuálnom cvičení (DEPRECATED - už nepoužívame) +let listeningCurrentAttempts = 0; // NOVÁ PREMENNÁ: Počet pokusov pre aktuálny pár (kolo) +let listeningMaxAttempts = 3; // Maximálny počet pokusov na jedno cvičenie +let listeningCorrectAnswers = 0; // Počet správnych odpovedí (DEPRECATED) +let listeningIncorrectAnswers = 0; // Počet nesprávnych odpovedí (DEPRECATED) +let listeningTotalExercises = 2; // Celkový počet cvičení (rovnaké ako rečové) +let listeningCompletedExercises = 0; // Dokončené cvičenia + +// Zvukové objekty pre posluchové cvičenie +let listeningSound1 = null; +let listeningSound2 = null; + +////////////////////////////////////////// +// Funkcia na otvorenie posluchového // +// cvičenia - podobne ako openCvicenie // +////////////////////////////////////////// +function openListeningExercise() { + console.log('Otváranie posluchového cvičenia...'); + + // Nastav flag - posluchové cvičenie je aktívne + isExerciseActive = true; + console.log('🔒 Herné akcie zablokované - posluchové cvičenie aktívne'); + + console.log('=== DEBUG openListeningExercise ==='); + console.log('currentLevelConfig:', currentLevelConfig); + + // Nastavenie počtu cvičení z levelConfig - používame pocetcviceni ak existuje + if (currentLevelConfig && currentLevelConfig.gameConfig && currentLevelConfig.gameConfig.listeningExercises) { + listeningTotalExercises = currentLevelConfig.gameConfig.listeningExercises; + console.log(`Počet posluchových cvičení nastavený z levelConfig: ${listeningTotalExercises}`); + } else { + listeningTotalExercises = 2; // predvolená hodnota + console.log(`Používam predvolenú hodnotu posluchových cvičení: ${listeningTotalExercises}`); + } + + // Ulož počet kôl pre aktuálne cvičenie do gamePerformance + if (typeof gamePerformance !== 'undefined') { + gamePerformance.listeningExercises.currentExerciseRounds = listeningTotalExercises; + console.log(`✅ Posluchové cvičenie bude mať ${listeningTotalExercises} kôl (párov)`); + } + + // Reset hodnôt pre nové cvičenie + listeningCurrentIndex = 0; + listeningAttempts = 0; + listeningCorrectAnswers = 0; + listeningIncorrectAnswers = 0; + listeningCompletedExercises = 0; + + // Generovanie párov slov pre cvičenie + generateListeningPairs(); + + // Zobrazenie dialogového okna + const infoDialog = document.getElementById('zvuky'); + if (infoDialog) { + infoDialog.style.display = 'block'; + } + document.getElementById("blur-background").style.display = "block"; + document.body.classList.add("cvicenie-open"); + document.body.style.overflow = "hidden"; + + // Zobrazenie prvého cvičenia + displayListeningExercise(); + +} + +////////////////////////////////////////// +// Generovanie párov slov pre cvičenie // +// Používa pôvodný systém s priečinkami// +////////////////////////////////////////// +function generateListeningPairs() { + listeningWordPairs = []; + + // Generujeme páry pre každé cvičenie + for (let i = 0; i < listeningTotalExercises; i++) { + // Náhodný výber priečinka (1-15 ako v pôvodnom kóde) + const randomFolder = Math.floor(Math.random() * 15) + 1; + const soundFolder = `zvuky/${randomFolder}/`; + + // Získanie zoznamu zvukov (1.wav, 2.wav) + const allSounds = ['1.wav', '2.wav']; + + // Náhodný výber dvoch indexov (môžu byť rovnaké alebo rôzne) + const index1 = Math.floor(Math.random() * allSounds.length); + const index2 = Math.floor(Math.random() * allSounds.length); + + // Vytvorenie páru + listeningWordPairs.push({ + folder: randomFolder, + soundFolder: soundFolder, + index1: index1, + index2: index2, + sound1Path: `${soundFolder}${allSounds[index1]}`, + sound2Path: `${soundFolder}${allSounds[index2]}`, + areSame: index1 === index2 // Sú rovnaké ak majú rovnaký index + }); + } + + console.log('Generované páry zvukov pre posluchové cvičenie:', listeningWordPairs); +} + +////////////////////////////////////////// +// Zobrazenie aktuálneho cvičenia // +// Podobne ako displayWord() // +////////////////////////////////////////// +function displayListeningExercise() { + // === RESET POKUSOV PRE NOVÝ PÁR === + listeningCurrentAttempts = 0; + console.log(`🔄 Začínam nový pár (kolo ${listeningCurrentIndex + 1}/${listeningWordPairs.length})`); + + if (listeningCurrentIndex >= listeningWordPairs.length) { + // Všetky cvičenia dokončené + closeListeningExercise(true); + return; + } + + const currentPair = listeningWordPairs[listeningCurrentIndex]; + console.log(`Zobrazujem posluchové cvičenie ${listeningCurrentIndex + 1}/${listeningWordPairs.length}`); + console.log('Aktuálny pár:', currentPair); + + // Aktualizácia obsahu dialógu + const dialogContent = document.querySelector('.cvicenie-content-2'); + if (dialogContent) { + // Resetovanie pokusov pre nové cvičenie + listeningAttempts = 0; + + dialogContent.innerHTML = ` + +
+

POSLUCHOVÉ CVIČENIE

+
+ +
+
Kolo ${listeningCurrentIndex + 1} / ${listeningWordPairs.length}
+
+
+
+
+ + +
+

Počúvaj pozorne a rozhodni, či sú slová rovnaké alebo rôzne

+
+ + +
+
Pripravujem slová...
+
+ + +
+ + +
+ `; + + // Pripojenie event listenerov na tlačidlá + setTimeout(() => { + const sameBtn = document.getElementById('listening-same-btn'); + const differentBtn = document.getElementById('listening-different-btn'); + + if (sameBtn) { + sameBtn.addEventListener('click', () => handleListeningAnswer(true)); + } + if (differentBtn) { + differentBtn.addEventListener('click', () => handleListeningAnswer(false)); + } + }, 100); + } + + // Spustenie prehrávania zvukov + setTimeout(() => { + playListeningSounds(currentPair); + }, 1000); +} + +////////////////////////////////////////// +// Prehranie zvukov pre posluchové // +// cvičenie - používa pôvodné cesty // +////////////////////////////////////////// +function playListeningSounds(soundPair) { + const statusElement = document.getElementById('listening-status'); + const sameBtn = document.getElementById('listening-same-btn'); + const differentBtn = document.getElementById('listening-different-btn'); + + // BLOKUJ tlačidlá počas prehrávania + if (sameBtn) { + sameBtn.disabled = true; + sameBtn.classList.add('disabled-btn'); + } + if (differentBtn) { + differentBtn.disabled = true; + differentBtn.classList.add('disabled-btn'); + } + + // Vytvorenie Howl objektov s cestami z páru + listeningSound1 = new Howl({ + src: [soundPair.sound1Path], + onloaderror: () => { + console.warn(`Zvuk z cesty "${soundPair.sound1Path}" sa nepodarilo načítať`); + } + }); + + listeningSound2 = new Howl({ + src: [soundPair.sound2Path], + onloaderror: () => { + console.warn(`Zvuk z cesty "${soundPair.sound2Path}" sa nepodarilo načítať`); + } + }); + + // Prehratie prvého zvuku + if (statusElement) { + statusElement.textContent = "Prehráva sa prvý zvuk..."; + } + + console.log(`Prehrávam prvý zvuk: ${soundPair.sound1Path}`); + listeningSound1.play(); + + // Po skončení prvého zvuku prehrať druhý + listeningSound1.on('end', () => { + setTimeout(() => { + if (statusElement) { + statusElement.textContent = "Prehráva sa druhý zvuk..."; + } + console.log(`Prehrávam druhý zvuk: ${soundPair.sound2Path}`); + listeningSound2.play(); + + // Po skončení druhého zvuku ODBLOKOVAŤ tlačidlá + listeningSound2.on('end', () => { + setTimeout(() => { + if (statusElement) { + statusElement.textContent = "Vyber svoju odpoveď:"; + } + + // ODBLOKOVAŤ tlačidlá + if (sameBtn) { + sameBtn.disabled = false; + sameBtn.classList.remove('disabled-btn'); + } + if (differentBtn) { + differentBtn.disabled = false; + differentBtn.classList.remove('disabled-btn'); + } + + const buttonsContainer = document.getElementById('listening-buttons-container'); + if (buttonsContainer) { + buttonsContainer.style.display = 'flex'; + } + }, 500); + }); + }, 1000); // Pauza medzi zvukmi + }); +} + +////////////////////////////////////////// +// Spracovanie odpovede hráča // +// Podobne ako checkSpeechResult() // +////////////////////////////////////////// +function handleListeningAnswer(playerAnswerSame) { + // Skrytie tlačidiel + const buttonsContainer = document.getElementById('listening-buttons-container'); + if (buttonsContainer) { + buttonsContainer.style.display = 'none'; + } + + // Zastavenie zvukov + if (listeningSound1) listeningSound1.stop(); + if (listeningSound2) listeningSound2.stop(); + + const currentPair = listeningWordPairs[listeningCurrentIndex]; + const isCorrect = playerAnswerSame === currentPair.areSame; + + console.log(`Hráčova odpoveď: ${playerAnswerSame ? 'rovnaké' : 'rôzne'}`); + console.log(`Správna odpoveď: ${currentPair.areSame ? 'rovnaké' : 'rôzne'}`); + console.log(`Je správne: ${isCorrect}`); + + // Nájdi alebo vytvor vysledok element (rovnako ako pri rečovom cvičení) + let vysledokElement = document.getElementById('listening-vysledok'); + if (!vysledokElement) { + // Vytvor vysledok element ak neexistuje + const execiseWindow = document.querySelector('#zvuky .execise-window'); + vysledokElement = document.createElement('div'); + vysledokElement.id = 'listening-vysledok'; + vysledokElement.className = 'vysledok'; + execiseWindow.appendChild(vysledokElement); + } + + if (isCorrect) { + // === SPRÁVNA ODPOVEĎ === + listeningCurrentAttempts++; // Zvýš počet pokusov pre tento pár + correctAnswers++; + updateAnswerCounters(); + + vysledokElement.innerHTML = `
Správne
Výborne!
`; + vysledokElement.classList.add('show'); + + // Použiť existujúci zvukový efekt + if (typeof effectSpravne !== 'undefined') { + effectSpravne.play(); + } + + setTimeout(() => { + vysledokElement.innerHTML = ''; + vysledokElement.classList.remove('show'); + + // === ZAZNAMENANIE VÝSLEDKU TOHTO KOLA === + if (typeof recordListeningExerciseResult === 'function') { + recordListeningExerciseResult(listeningCurrentAttempts, true); + } + console.log(`✅ Posluchové kolo ${listeningCurrentIndex + 1}/${listeningWordPairs.length} dokončené s ${listeningCurrentAttempts} pokusmi`); + + // Prejsť na ďalšie cvičenie + listeningCurrentIndex++; + displayListeningExercise(); + }, 2000); + + } else { + // === NESPRÁVNA ODPOVEĎ === + listeningCurrentAttempts++; // Zvýš počet pokusov pre tento pár + incorrectAnswers++; + updateAnswerCounters(); + + console.log(`Skús to znova, pokusy pre tento pár: ${listeningCurrentAttempts}`); + + // Vypočítaj zostávajúce pokusy + const remainingAttempts = listeningMaxAttempts - listeningCurrentAttempts; + + if (remainingAttempts > 0) { + // Ešte má pokusy - zobraz správu so zostávajúcimi pokusmi + const attemptMessage = `
Zostávajúce pokusy: ${remainingAttempts}
`; + + vysledokElement.innerHTML = ` +
+ Nesprávne + ${attemptMessage} +
+ `; + vysledokElement.classList.add('show'); + + // Použiť existujúci zvukový efekt + if (typeof effectZle !== 'undefined') { + effectZle.play(); + } + + // Po 2 sekundách skryť výsledok a umožniť nový pokus + setTimeout(() => { + vysledokElement.innerHTML = ''; + vysledokElement.classList.remove('show'); + + // Znovu zobraziť tlačidlá a prehrať zvuky + if (buttonsContainer) { + buttonsContainer.style.display = 'flex'; + } + + const statusElement = document.getElementById('listening-status'); + if (statusElement) { + statusElement.textContent = "Počúvaj znova..."; + } + + playListeningSounds(currentPair); + }, 2000); + + } else { + // Vyčerpané pokusy - OKAMŽITE zatvor po vyhodnotení + const attemptMessage = `
Posledný pokus vyčerpaný
`; + + vysledokElement.innerHTML = ` +
+ Nesprávne + ${attemptMessage} +
+ `; + vysledokElement.classList.add('show'); + + // Použiť existujúci zvukový efekt + if (typeof effectZle !== 'undefined') { + effectZle.play(); + } + + // OKAMŽITE zatvor po 2 sekundách (bez čakania na zmiznutie výsledku) + setTimeout(() => { + // === ZAZNAMENANIE NEÚSPEŠNÉHO KOLA === + if (typeof recordListeningExerciseResult === 'function') { + recordListeningExerciseResult(0, false); + } + console.log(`❌ Posluchové kolo ${listeningCurrentIndex + 1}/${listeningWordPairs.length} neúspešné`); + + closeListeningExercise(false); + }, 2000); + } + } +} + +////////////////////////////////////////// +// Zatvorenie posluchového cvičenia // +// Podobne ako closeCvicenie() // +////////////////////////////////////////// +function closeListeningExercise(success = false) { + isExerciseActive = false; + console.log('🔓 Herné akcie odblokované - posluchové cvičenie ukončené'); + + // Zastavenie všetkých zvukov + if (listeningSound1) { + listeningSound1.stop(); + listeningSound1 = null; + } + if (listeningSound2) { + listeningSound2.stop(); + listeningSound2 = null; + } + + // OKAMŽITE skryj modal okno + const infoDialog = document.getElementById('zvuky'); + if (infoDialog) { + infoDialog.style.display = 'none'; + } + document.getElementById("blur-background").style.display = "none"; + document.body.classList.remove("cvicenie-open"); + document.body.style.overflow = "auto"; + + // Vyčisti vysledok element + const vysledokElement = document.getElementById('listening-vysledok'); + if (vysledokElement) { + vysledokElement.innerHTML = ''; + vysledokElement.classList.remove('show'); + } + + // Zaznamenanie výsledku + if (success) { + console.log('Posluchové cvičenie úspešne dokončené!'); + listeningCompletedExercises = listeningWordPairs.length; + + // Zaznamenávanie už prebehlo priebežne po každom páre + // Táto časť už len označí kryštál ako vykopaný + + // Označenie kryštálu ako vykopaného + if (typeof kov !== 'undefined' && Array.isArray(kov)) { + kov.forEach((kristal, kristalIndex) => { + const blockX = kristal.x / blockSize; + const blockY = kristal.y / blockSize; + if (blockX === targetBlockX && blockY === targetBlockY && !kristal.destroyed) { + kristal.destroyed = true; + kovCollected++; + if (typeof effectzlato !== 'undefined') { + effectzlato.play(); + } + if (typeof updateKovCount === 'function') { + updateKovCount(); + } + if (typeof updateKovCollected === 'function') { + updateKovCollected(kovCollected); + } + if (typeof checkWinConditionWithRating === 'function') { + checkWinConditionWithRating(); + } + spaceBarPressed = 0; + } + }); + } + } else { + console.log('Posluchové cvičenie neúspešné'); + // Zaznamenávanie neúspešného kola už prebehlo pri vyčerpaní pokusov + spaceBarPressed = 0; + } +} + +////////////////////////////////////////// +// NOVÁ FUNKCIA showInfoDialog() // +// Nahradenie starej funkcie // +////////////////////////////////////////// +function showInfoDialog() { + console.log('Otváranie posluchového cvičenia...'); + openListeningExercise(); +} + + + + + + +////////////////////////////////////////////////////////////////////// +// ================================================================ // +// ===== REČOVÉ MINICVIČENIE ===== // +// ================================================================ // +////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////// +// ====== HLASOVÉ CVIČENIE ====== // +// Premenné // +////////////////////////////////////////// +const url = 'slova.txt'; +let currentWordIndex = 0; +let wordList = []; // Pole slov na vyslovenie +let pocetcviceni = 2; +let kontrolacvicenia = 0; +let slovicka = 0; + + + + + +////////////////////////////////////////// +// Inicializácia Speech Recognition // +// Zavolá sa len raz pri načítaní stránky// +////////////////////////////////////////// +function initSpeechRecognition() { + console.log('🎤 Inicializácia speech recognition...'); + + // Kontrola či prehliadač podporuje Speech Recognition + if (!('webkitSpeechRecognition' in window || 'SpeechRecognition' in window)) { + console.error('❌ Speech recognition nie je podporované v tomto prehliadači'); + + // Zobraz chybovú hlášku pre používateľa + const isMobile = /Android|iPhone|iPad|iPod/i.test(navigator.userAgent); + if (isMobile) { + const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent); + if (isIOS) { + showErrorMessage('Používaj Safari prehliadač na iPhone/iPad pre rozpoznávanie reči.'); + } else { + showErrorMessage('Používaj Chrome prehliadač na Android pre rozpoznávanie reči.'); + } + } else { + showErrorMessage('Tvoj prehliadač nepodporuje rozpoznávanie reči. Použi Chrome, Edge alebo Safari.'); + } + + return false; + } + + // Použijem štandardný alebo prefixovaný variant + const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition; + + // Vytvorím globálnu inštanciu - LEN RAZ + speechRecognition = new SpeechRecognition(); + + // Nastavím parametre rozpoznávania + speechRecognition.lang = 'sk-SK'; // Slovenský jazyk + speechRecognition.continuous = false; // Rozpozná len jedno slovo + speechRecognition.interimResults = false; // Len finálne výsledky + speechRecognition.maxAlternatives = 1; // Len jedna alternatíva + + // Nastavím callback funkcie - LEN RAZ + setupSpeechCallbacks(); + + console.log('✅ Speech recognition úspešne inicializované'); + return true; +} + +////////////////////////////////////////// +// Nastavenie callback funkcií // +// Volá sa len raz z initSpeechRecognition// +////////////////////////////////////////// +function setupSpeechCallbacks() { + // Callback keď sa rozpoznávanie spustí + speechRecognition.onstart = () => { + console.log('🎤 Rozpoznávanie spustené'); + isListening = true; + updateMicrophoneButton(true); + }; + + // Callback keď sa rozpoznávanie ukončí + speechRecognition.onend = () => { + console.log('🎤 Rozpoznávanie ukončené'); + isListening = false; + updateMicrophoneButton(false); + }; + + // Callback keď príde výsledok + speechRecognition.onresult = (event) => { + handleSpeechResult(event); + }; + + // Callback pri chybe + speechRecognition.onerror = (event) => { + handleSpeechError(event); + }; +} + +////////////////////////////////////////// +// Bezpečné spustenie rozpoznávania // +// Zavolá sa pri kliknutí na mikrofón // +////////////////////////////////////////// +function startSpeechRecognition(expectedWord) { + console.log('🎙️ Pokus o spustenie rozpoznávania pre slovo:', expectedWord); + + // CHECK 1: Je recognition inicializované? + if (!speechRecognition) { + console.warn('⚠️ Speech recognition nie je inicializované, inicializujem...'); + const initialized = initSpeechRecognition(); + if (!initialized) { + console.error('❌ Nepodarilo sa inicializovať speech recognition'); + return; + } + } + + // CHECK 2: Už beží rozpoznávanie? + if (isListening) { + console.warn('⚠️ Rozpoznávanie už beží, ignorujem pokus o opätovné spustenie'); + return; + } + + // Uložím očakávané slovo + currentExpectedWord = expectedWord; + + // CHECK 3: Try-catch pre bezpečné spustenie + try { + console.log('▶️ Spúšťam rozpoznávanie...'); + speechRecognition.start(); + // isListening sa nastaví automaticky v onstart callback + } catch (error) { + console.error('❌ Chyba pri spustení rozpoznávania:', error); + + // Špecifické handling pre rôzne typy chýb + if (error.message && error.message.includes('already started')) { + console.warn('⚠️ Recognition už beží, pokúsim sa ho reštartovať'); + + // Pokúsim sa ho zastaviť a reštartovať + isListening = false; + speechRecognition.stop(); + + // Počkám chvíľu a skúsim znova + setTimeout(() => { + console.log('🔄 Reštartujem rozpoznávanie...'); + startSpeechRecognition(expectedWord); + }, 200); + } else { + // Iná chyba - zobraz hlášku používateľovi + showErrorMessage('Nepodarilo sa spustiť rozpoznávanie. Skús to znova.'); + isListening = false; + updateMicrophoneButton(false); + } + } +} + +////////////////////////////////////////// +// Spracovanie výsledku rozpoznávania // +// Volá sa automaticky z callback // +////////////////////////////////////////// +function handleSpeechResult(event) { + // Získam rozpoznaný text + const transcript = event.results[0][0].transcript; + + console.log('🗣️ Rozpoznaný text:', transcript); + console.log('🎯 Očakávané slovo:', currentExpectedWord); + + // Vyčistím text (malé písmená, bez interpunkcie) + const cleanedTranscript = transcript.trim().toLowerCase().replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g, ""); + const currentWord = currentExpectedWord.toLowerCase(); + + console.log('🔍 Porovnanie:', cleanedTranscript, 'vs', currentWord); + + // Kontrola či sa zhodujú + if (cleanedTranscript === currentWord) { + // ✅ SPRÁVNE VYSLOVENÉ + console.log('✅ Správne vyslovené slovo "' + currentExpectedWord + '"'); + + // Zobraz správny výsledok + document.getElementById("vysledok").innerHTML = ` +
+ Správne +
Výborne!
+
+ `; + document.getElementById("vysledok").classList.add('show'); + + // Prehraj zvuk + if (typeof effectSpravne !== 'undefined') { + effectSpravne.play(); + } + + // Aktualizuj počítadlá + correctAnswers++; + updateAnswerCounters(); + currentWordIndex++; + + // Zaznamenaj výsledok + const attempts = slovicka + 1; + if (typeof recordSpeechExerciseResult === 'function') { + recordSpeechExerciseResult(attempts, true); + } + slovicka = 0; + console.log(`✅ Kolo ${currentWordIndex}/${wordList.length} dokončené s ${attempts} pokusmi`); + + // Po 2 sekundách zobraz ďalšie slovo alebo ukonči + setTimeout(() => { + document.getElementById("vysledok").innerHTML = ''; + document.getElementById("vysledok").classList.remove('show'); + + if (currentWordIndex < wordList.length) { + displayWord(); // Zobraz ďalšie slovo + } else { + kontrolacvicenia = 1; + closeCvicenie(); // Ukonči cvičenie + } + }, 2000); + + } else { + // ❌ NESPRÁVNE VYSLOVENÉ + console.log('❌ Nesprávne vyslovené. Slovo "' + currentExpectedWord + '" nebolo správne rozpoznané'); + + slovicka++; + incorrectAnswers++; + updateAnswerCounters(); + console.log('Počet pokusov:', slovicka); + + // Vypočítaj zostávajúce pokusy + const remainingAttempts = 3 - slovicka; + + // Zobraz chybovú správu + if (remainingAttempts > 0) { + document.getElementById("vysledok").innerHTML = ` +
+ Nesprávne +
+ SKÚSTE ZNOVA
+ Zostávajú ${remainingAttempts} pokusy +
+
+ `; + } else { + document.getElementById("vysledok").innerHTML = ` +
+ Nesprávne +
+ VYČERPANÉ POKUSY
+ Pokračujeme ďalej +
+
+ `; + } + + document.getElementById("vysledok").classList.add('show'); + + // Prehraj zvuk + if (typeof effectZle !== 'undefined') { + effectZle.play(); + } + + // Kontrola maximalneho poctu pokusov + if (slovicka >= 3) { + console.log('❌ Vyčerpané pokusy pre slovo:', currentExpectedWord); + + // Zaznamenaj neúspešné kolo + if (typeof recordSpeechExerciseResult === 'function') { + recordSpeechExerciseResult(3, false); + } + + slovicka = 0; + currentWordIndex++; + + // Po 2 sekundách prejdi na ďalšie slovo alebo ukonči + setTimeout(() => { + document.getElementById("vysledok").innerHTML = ''; + document.getElementById("vysledok").classList.remove('show'); + + if (currentWordIndex < wordList.length) { + displayWord(); // Zobraz ďalšie slovo + } else { + kontrolacvicenia = 2; + closeCvicenie(); // Ukonči cvičenie + } + }, 2000); + } else { + // Ešte sú pokusy - skry hlášku po chvíli + setTimeout(() => { + document.getElementById("vysledok").innerHTML = ''; + document.getElementById("vysledok").classList.remove('show'); + }, 2000); + } + } +} + +////////////////////////////////////////// +// Spracovanie chýb rozpoznávania // +// Volá sa automaticky z callback // +////////////////////////////////////////// +function handleSpeechError(event) { + console.error('❌ Chyba rozpoznávania:', event.error); + + // Reset stavu + isListening = false; + updateMicrophoneButton(false); + + // Detailné error handling podľa typu chyby + let errorTitle = ''; + let errorMessage = ''; + let canRetry = true; + + switch(event.error) { + case 'no-speech': + errorTitle = 'Nepočul som ťa'; + errorMessage = 'Skús to znova a hovor hlasnejšie blízko mikrofónu.'; + canRetry = true; + break; + + case 'audio-capture': + errorTitle = 'Problém s mikrofónom'; + errorMessage = 'Skontroluj, či je mikrofón správne pripojený a funguje.'; + canRetry = true; + break; + + case 'not-allowed': + errorTitle = 'Prístup zamietnutý'; + errorMessage = 'Potrebujem povolenie na používanie mikrofónu. Klikni na ikonu zámku v adresovom riadku a povol mikrofón.'; + canRetry = false; + showPermissionsHelp(); // Zobraz návod + break; + + case 'network': + errorTitle = 'Problém s internetom'; + errorMessage = 'Skontroluj svoje internetové pripojenie a skús to znova.'; + canRetry = true; + break; + + case 'aborted': + errorTitle = 'Rozpoznávanie zrušené'; + errorMessage = ''; + canRetry = true; + break; + + case 'service-not-allowed': + errorTitle = 'Služba nie je dostupná'; + errorMessage = 'Rozpoznávanie reči nie je povolené pre túto stránku. Skontroluj nastavenia prehliadača.'; + canRetry = false; + break; + + default: + errorTitle = 'Neznáma chyba'; + errorMessage = 'Niečo sa pokazilo. Skús to znova.'; + canRetry = true; + } + + // Zobraz chybovú hlášku + if (errorMessage) { + showErrorMessage(errorTitle + ': ' + errorMessage); + } + + // Ak je to dočasná chyba, používateľ môže skúsiť znova kliknutím na mikrofón + // Ak je to permissions problém, musí najprv povoliť mikrofón +} + +////////////////////////////////////////// +// Aktualizácia tlačidla mikrofónu // +// Volá sa z callbacks // +////////////////////////////////////////// +function updateMicrophoneButton(listening) { + const button = document.getElementById('rozpoznanie'); + const tlacidloDiv = document.querySelector('.tlacidlo'); + + if (!button || !tlacidloDiv) { + console.warn('⚠️ Tlačidlo mikrofónu nenájdené v DOM'); + return; + } + + if (listening) { + // Stav: Počúvanie + button.disabled = true; + tlacidloDiv.classList.add('recording'); + button.innerHTML = 'POČÚVAM...'; + console.log('🎙️ UI: Počúvam...'); + } else { + // Stav: Pripravený + button.disabled = false; + tlacidloDiv.classList.remove('recording'); + button.innerHTML = 'HOVORIŤ'; + console.log('🎙️ UI: Pripravený'); + } +} + +////////////////////////////////////////// +// Zobrazenie chybovej hlášky // +// Helper funkcia pre user feedback // +////////////////////////////////////////// +function showErrorMessage(message) { + console.log('💬 Zobrazujem hlášku:', message); + + // Zobraz hlášku v existujúcom vysledok div + const vysledokDiv = document.getElementById("vysledok"); + if (vysledokDiv) { + vysledokDiv.innerHTML = ` +
+
+ ⚠️
+ ${message} +
+
+ `; + vysledokDiv.classList.add('show'); + + // Skry po 5 sekundách + setTimeout(() => { + vysledokDiv.innerHTML = ''; + vysledokDiv.classList.remove('show'); + }, 5000); + } else { + // Fallback na alert ak vysledok div neexistuje + alert(message); + } +} + +////////////////////////////////////////// +// Zobrazenie návodu na povolenie // +// mikrofónu // +////////////////////////////////////////// +function showPermissionsHelp() { + // Detekcia prehliadača + const isChrome = /chrome/i.test(navigator.userAgent); + const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); + const isEdge = /edg/i.test(navigator.userAgent); + + let helpText = ''; + + if (isChrome) { + helpText = 'V Chrome: Klikni na ikonu zámku vedľa URL a povol mikrofón.'; + } else if (isEdge) { + helpText = 'V Edge: Klikni na ikonu zámku vedľa URL a povol mikrofón.'; + } else if (isSafari) { + helpText = 'V Safari: Choď do Safari → Nastavenia pre túto webstránku → Mikrofón → Povoliť'; + } else { + helpText = 'V nastaveniach prehliadača povol mikrofón pre túto stránku.'; + } + + console.log('📖 Návod na povolenie:', helpText); + + // Zobraz rozšírenú hlášku s návodom + showErrorMessage('PRÍSTUP K MIKROFÓNU ZAMIETNUTÝ\n\n' + helpText); +} + +////////////////////////////////////////// +// Detekcia mobile zariadení // +// Helper funkcie // +////////////////////////////////////////// +function isMobileDevice() { + return /Android|iPhone|iPad|iPod/i.test(navigator.userAgent); +} + +function isIOS() { + return /iPad|iPhone|iPod/.test(navigator.userAgent); +} + +function isAndroid() { + return /Android/.test(navigator.userAgent); +} + +////////////////////////////////////////// +// Funkcia na otvorenie cvičenia // +// Používa slová z levelConfig // +////////////////////////////////////////// +function openCvicenie() { + // DEBUG informácie + console.log('=== DEBUG openCvicenie ==='); + console.log('currentLevelConfig:', currentLevelConfig); + console.log('isCustomLevel:', isCustomLevel); + console.log('URL parameters:', window.location.search); + + // Nastavit počet cvičení z levelConfig + if (currentLevelConfig && currentLevelConfig.gameConfig && currentLevelConfig.gameConfig.speechExercises) { + pocetcviceni = currentLevelConfig.gameConfig.speechExercises; + console.log(`Počet rečových cvičení nastavený z levelConfig: ${pocetcviceni}`); + } else { + pocetcviceni = 2; // default hodnota + console.log(`Používam predvolenú hodnotu rečových cvičení: ${pocetcviceni}`); + } + + // Ulož počet kôl pre aktuálne cvičenie do gamePerformance + if (typeof gamePerformance !== 'undefined') { + gamePerformance.speechExercises.currentExerciseRounds = pocetcviceni; + console.log(`✅ Rečové cvičenie bude mať ${pocetcviceni} kôl (slov)`); + } + + // Kontrola či máme dostupnú konfiguráciu levelu + if (!currentLevelConfig || !currentLevelConfig.words || currentLevelConfig.words.length === 0) { + console.error('Chyba: Nie sú dostupné slová pre cvičenie v levelConfig'); + console.error('currentLevelConfig je:', currentLevelConfig); + + // OPRAVENÝ FALLBACK - náhodný výber slov + console.log('Používam fallback slová pre testovanie...'); + const allFallbackWords = ['rak', 'ryba', 'ruka', 'rosa', 'ruža', 'robot', 'raketa', 'ryžou']; + + // Náhodný výber pocetcviceni slov z fallback zoznamu + const shuffled = allFallbackWords.sort(() => 0.5 - Math.random()); + wordList = shuffled.slice(0, pocetcviceni); + + console.log('Fallback slová (náhodne vybrané):', wordList); + console.log(`Finálny zoznam slov pre cvičenie (${pocetcviceni} slov):`, wordList); + startExercise(); + return; + } + + console.log('Začínam cvičenie s slovami z levelConfig:', currentLevelConfig.words); + + // Výber náhodných slov z levelConfig namiesto zo súboru + let vybraneSlova = []; // Zoznam vybratých slov + const dostupneSlova = currentLevelConfig.words; // Slová z levelConfig + + // Vyber pocet cviceni počet náhodných slov + while (wordList.length < pocetcviceni && vybraneSlova.length < dostupneSlova.length) { + const nahodnyIndex = Math.floor(Math.random() * dostupneSlova.length); + const slovo = dostupneSlova[nahodnyIndex].trim(); + + if (!vybraneSlova.includes(slovo)) { // kontrola či sa vybralo iné/rozdielne slovo + wordList.push(slovo); + vybraneSlova.push(slovo); + console.log(`Pridané slovo do cvičenia: ${slovo}`); + } + } + + // Ak nemáme dostatok slov, pridáme všetky dostupné + if (wordList.length === 0) { + console.warn('Neboli vybrané žiadne slová, používam všetky dostupné'); + wordList = dostupneSlova.slice(0, Math.min(pocetcviceni, dostupneSlova.length)); + } + + console.log('Finálny zoznam slov pre cvičenie:', wordList); + startExercise(); +} +////////////////////////////////////////// +// Spustenie Cvicenia // +////////////////////////////////////////// +function startExercise() { + isExerciseActive = true; + console.log('🔒 Herné akcie zablokované - cvičenie aktívne'); + + document.getElementById("cvicenie").style.display = "block"; + document.getElementById("blur-background").style.display = "block"; + document.body.classList.add("cvicenie-open"); + document.body.style.overflow = "hidden"; + displayWord(); +} + +////////////////////////////////////////// +// Funkcia na zobrazenie aktuálneho // +// slova na vyslovenie // +////////////////////////////////////////// +function displayWord() { + document.getElementById("word-display").innerText = wordList[currentWordIndex].toUpperCase(); + const imageName = wordList[currentWordIndex] + ".png"; + document.getElementById("cvicenie-image").src = "images/slova/" + imageName; + updateWordProgress(); +} +////////////////////////////////////////// +// Samotna funckia na rozpoznanie // +////////////////////////////////////////// +function rozpoznanieS() { + console.log('🎤 rozpoznanieS() zavolaná'); + + // Získaj aktuálne očakávané slovo + const expectedWord = wordList[currentWordIndex]; + console.log('📝 Aktuálne slovo:', expectedWord); + + // Zavolaj bezpečnú funkciu na spustenie rozpoznávania + startSpeechRecognition(expectedWord); +} +////////////////////////////////////////// +// Funkcia na zatvorenie cvičenia // +////////////////////////////////////////// +function closeCvicenie() { + if (kontrolacvicenia === 1) { + // Zaznamenávanie už prebieha priebežne po každom slove + // Táto časť už len označí diamant ako zozbieraný + + diamonds.forEach((diamond, diamondIndex) => { + blockX = diamond.x / blockSize; + blockY = diamond.y / blockSize; + if (blockX === targetBlockX && blockY === targetBlockY && !diamond.destroyed) { + diamond.destroyed = true; + diamondsCollected++; + effectzlato.play(); + updateDiamondCount(); + updateDiamondsCollected(diamondsCollected); + checkWinConditionWithRating(); + spaceBarPressed = 0; + } + }) + } + else if (kontrolacvicenia === 2) { + // Zaznamenávanie neúspešného kola už prebehlo pri vyčerpaní pokusov + spaceBarPressed = 0; + } + + slovicka = 0; + kontrolacvicenia = 0; + currentWordIndex = 0; + wordList = []; + document.getElementById("cvicenie").style.display = "none"; + document.getElementById("blur-background").style.display = "none"; + document.body.classList.remove("cvicenie-open"); + document.body.style.overflow = "auto"; + // Reset progress indikátora + const progressContainer = document.getElementById('word-progress'); + if (progressContainer) { + progressContainer.remove(); + } + + isExerciseActive = false; + console.log('🔓 Herné akcie odblokované - cvičenie ukončené'); + +} + +////////////////////////////////////////// +// Aktualizácia progress // +// indikátora pre slová // +////////////////////////////////////////// +function updateWordProgress() { + // Nájde alebo vytvori progress kontajner + let progressContainer = document.getElementById('word-progress'); + if (!progressContainer) { + progressContainer = createWordProgressElement(); + } + + const currentWord = currentWordIndex + 1; + const totalWords = wordList.length; + + // Aktualizuje text + const progressText = progressContainer.querySelector('.progress-text'); + progressText.textContent = `Slovo ${currentWord} / ${totalWords}`; + + // Aktualizuje progress bar + const progressBar = progressContainer.querySelector('.progress-fill'); + const percentage = (currentWord / totalWords) * 100; + progressBar.style.width = `${percentage}%`; + + console.log(`Progress aktualizovaný: ${currentWord}/${totalWords} (${percentage}%)`); +} + +////////////////////////////////////////// +// Vytvorenie progress elementu // +// ak neexistuje // +////////////////////////////////////////// +function createWordProgressElement() { + const cvicenieContent = document.querySelector('.cvicenie-content'); + + const progressHTML = ` +
+
Slovo 1 / 2
+
+
+
+
+ `; + + // Pridaj progress na začiatok cvicenie-content + cvicenieContent.insertAdjacentHTML('afterbegin', progressHTML); + + return document.getElementById('word-progress'); +} + +const rozpoznanie = document.getElementById('rozpoznanie'); +rozpoznanie.addEventListener('click', rozpoznanieS); + + + + + + + +//////////////////////////////////////////////// +// ========================================== // +// DYNAMICKÁ NAVIGÁCIA PRE KONEČNÉ DIALÓGY // +// ========================================== // +//////////////////////////////////////////////// + + +////////////////////////////////////////////////////////////// +// Aktualizácia navigačných tlačidiel v konečných dialógoch // +// Volať pri spustení hry a pri zobrazení dialógov // +////////////////////////////////////////////////////////////// +function updateDialogNavigation() { + console.log('Aktualizujem navigačné tlačidlá dialogov...'); + + // Získaj informácie o aktuálnom leveli + const urlParams = new URLSearchParams(window.location.search); + const worldId = urlParams.get('worldId') || urlParams.get('world'); + const levelId = urlParams.get('levelId') || urlParams.get('level'); + const isTraining = urlParams.get('training') === 'true'; + + console.log('Navigačné parametre:', { worldId, levelId, isTraining }); + + // Aktualizuj endgame dialog (pri výhre) + updateEndGameDialog(worldId, levelId, isTraining); + + // Aktualizuj menu dialog (tlačidlo menu) + updateMenuDialog(worldId, levelId, isTraining); +} + +////////////////////////////////////////////////// +// Aktualizácia endgame dialógu (pri výhre) // +////////////////////////////////////////////////// +function updateEndGameDialog(worldId, levelId, isTraining) { + const endGameNav = document.querySelector('#endgame nav ul'); + if (!endGameNav) { + console.warn('Endgame navigation nebol nájdený'); + return; + } + + let restartUrl = 'game.html'; // fallback + let backUrl = 'worldsmenu.html'; // fallback + + if (isTraining) { + // Pre tréningové levely + restartUrl = window.location.href; // Reštart s rovnakými parametrami + backUrl = 'worldsmenu.html'; + } else if (worldId && levelId) { + // Pre normálne levely - zachovaj URL parametre + restartUrl = `game.html?worldId=${worldId}&levelId=${levelId}`; + backUrl = `worldsmenu.html`; // Späť na worlds menu + } + + // Aktualizuj obsah + endGameNav.innerHTML = ` +
  • +
  • +
  • + `; + + console.log('Endgame dialog aktualizovaný'); +} + +////////////////////////////////////////////////// +// Aktualizácia menu dialógu // +////////////////////////////////////////////////// +function updateMenuDialog(worldId, levelId, isTraining) { + const menuNav = document.querySelector('#dialogove-okno nav ul'); + if (!menuNav) { + console.warn('Menu dialog navigation nebol nájdený'); + return; + } + + let restartUrl = 'game.html'; + let backUrl = 'worldsmenu.html'; + + if (isTraining) { + restartUrl = window.location.href; + backUrl = 'worldsmenu.html'; + } else if (worldId && levelId) { + restartUrl = `game.html?worldId=${worldId}&levelId=${levelId}`; + backUrl = `worldsmenu.html`; + } + + // Aktualizuj obsah + menuNav.innerHTML = ` +
  • +
  • +
  • + `; + + console.log('Menu dialog aktualizovaný'); +} + +////////////////////////////////////////////////// +// Reštart aktuálneho levelu // +////////////////////////////////////////////////// +function restartCurrentLevel() { + console.log('Reštartujem aktuálny level...'); + + // Zatvor všetky dialógy + closeAllDialogs(); + + // Reštartuj hru s rovnakými parametrami + const urlParams = new URLSearchParams(window.location.search); + const isTraining = urlParams.get('training') === 'true'; + + if (isTraining) { + // Pre tréningové levely - reload stránky + window.location.reload(); + } else { + // Pre normálne levely - reinicializuj s rovnakou konfiguráciou + if (currentLevelConfig) { + initializeGameWithLevel(currentLevelConfig, isCustomLevel); + } else { + window.location.reload(); + } + } +} + +////////////////////////////////////////////////// +// Prechod na ďalší level // +////////////////////////////////////////////////// +function goToNextLevel() { + console.log('Pokúsim sa prejsť na ďalší level...'); + + const urlParams = new URLSearchParams(window.location.search); + const worldId = urlParams.get('worldId') || urlParams.get('world'); + const levelId = urlParams.get('levelId') || urlParams.get('level'); + + if (!worldId || !levelId) { + console.log('Nie sú dostupné URL parametre, vraciam sa do menu'); + returnToMenu(); + return; + } + + // Použij gameRouter ak je dostupný + if (window.gameRouter && typeof window.gameRouter.continueToNextLevel === 'function') { + closeAllDialogs(); + window.gameRouter.continueToNextLevel(worldId, levelId); + } else { + // Fallback - manuálne hľadanie ďalšieho levelu + console.log('GameRouter nie je dostupný, používam fallback'); + if (typeof getLevelConfig === 'function') { + const currentLevel = getLevelConfig(levelId); + if (currentLevel) { + const nextLevelNumber = currentLevel.levelNumber + 1; + const nextLevelId = `${worldId}_${nextLevelNumber}`; + const nextLevel = getLevelConfig(nextLevelId); + + if (nextLevel) { + closeAllDialogs(); + window.location.href = `game.html?worldId=${worldId}&levelId=${nextLevelId}`; + } else { + console.log('Ďalší level neexistuje, vraciam sa do menu'); + returnToMenu(); + } + } + } else { + returnToMenu(); + } + } +} + +////////////////////////////////////////////////// +// Návrat do menu svetov // +////////////////////////////////////////////////// +function returnToMenu() { + console.log('Vraciam sa do menu svetov...'); + closeAllDialogs(); + window.location.href = 'worldsmenu.html'; +} + +////////////////////////////////////////////////// +// Zatvorenie všetkých dialógov // +////////////////////////////////////////////////// +function closeAllDialogs() { + // Zatvor endgame dialog + const endGameDialog = document.getElementById("endgame"); + if (endGameDialog) { + endGameDialog.style.display = "none"; + } + + // Zatvor menu dialog + const menuDialog = document.getElementById("dialogove-okno"); + if (menuDialog) { + menuDialog.style.display = "none"; + } + + // Zatvor cvicenie dialog + const cvicenieDialog = document.getElementById("cvicenie"); + if (cvicenieDialog) { + cvicenieDialog.style.display = "none"; + } + + // Resetuj blur background + const blurBackground = document.getElementById("blur-background"); + if (blurBackground) { + blurBackground.style.display = "none"; + } + + // Resetuj body overflow + document.body.classList.remove("dialog-open", "cvicenie-open"); + document.body.style.overflow = "auto"; +} + +//////////////////////////////////////////////// +// ========================================== // +// INICIALIZÁCIA NAVIGÁCIE // +// ========================================== // +//////////////////////////////////////////////// + +////////////////////////////////////////// +// Inicializácia navigačného systému // +////////////////////////////////////////// +function initializeNavigation() { + console.log('Inicializujem navigačný systém...'); + + // Aktualizuj dialógy hneď po načítaní + updateDialogNavigation(); + + // Nastav event listenery pre existujúce funkcie + setupNavigationEventListeners(); +} + +////////////////////////////////////////////////// +// Nastavenie event listenerov pre navigáciu // +////////////////////////////////////////////////// +function setupNavigationEventListeners() { + // Existujúce funkcie closeDialog1 a openDialog1 zostávajú rovnaké + // ale sa môžu rozšíriť o aktualizáciu navigácie + + console.log('Navigation event listenery nastavené'); +} + + + + + +///////////////////////////////////// +// ====== Dodatočné funkcie ====== // +///////////////////////////////////// + + /* Otvorenie custom level modalu */ + function openCustomLevelModal() { + document.getElementById("custom-level-modal").style.display = "block"; + document.getElementById("blur-background").style.display = "block"; + document.body.style.overflow = "hidden"; + } + + /* Zatvorenie custom level modalu */ + function closeCustomModal() { + document.getElementById("custom-level-modal").style.display = "none"; + document.getElementById("blur-background").style.display = "none"; + document.body.style.overflow = "auto"; +} + + /* Spustenie custom levelu s vlastnými slovami */ + function startCustomLevel() { + const wordsInput = document.getElementById('custom-words-input').value.trim(); + + if (!wordsInput) { + alert('Prosím zadajte aspoň jedno slovo!'); + return; + } + + // Rozdelenie slov po riadkoch a vyčistenie + const customWords = wordsInput.split('\n') + .map(word => word.trim()) + .filter(word => word.length > 0); + + if (customWords.length === 0) { + alert('Prosím zadajte platné slová!'); + return; + } + + console.log('Custom slová:', customWords); + + // Vytvorenie custom levelConfig + const customLevelConfig = { + words: customWords, + diamonds: 3, // predvolené hodnoty + golds: 4, + crystals: 1, + timeLimit: null, // bez časového limitu + // žiadne positions = náhodné generovanie + }; + + closeCustomModal(); + initializeGameWithLevel(customLevelConfig, true); // true = custom level + } + + +///////////////////////////////// +// ===== HERNÁ SLUČKA ====== // +// vykreslenie hraca // +// vykreslenie itemov // +///////////////////////////////// +function gameLoop() { + ctx.clearRect(0, 0, canvas.width, canvas.height); + drawPlayer(); + drawClay(); + drawDiamonds(); + drawKov(); + drawGolds(); + requestAnimationFrame(gameLoop); +} + + +///////////////////////////////// +// ====== Hlavná slučka ====== // +// Generovanie sveta, Gameloop // +///////////////////////////////// +generateDiamonds(); +generateKov(); +generateGolds(); +generateClay(); +gameLoop(); + + + + + + + + + + + + + + + + + + +///////////////////////////////////////////// +// ========== UŽITOČNÉ FUNKCIE ========== // +///////////////////////////////////////////// + +/** + * Rýchle dokončenie levelu s perfektným výkonom + * Použitie: Pre testovanie a debug + */ +function quickCompleteLevel() { + console.log('Rýchle dokončenie levelu...'); + + // Inicializuj sledovanie výkonu + initializePerformanceTracking(); + + // Simuluj perfektný výkon pre všetky rečové cvičenia + // Každý diamant má X kôl (slov) podľa konfigurácie + const speechRoundsPerDiamond = currentLevelConfig?.gameConfig?.speechExercises || 2; + for (let diamond = 0; diamond < PocetGenDiamant; diamond++) { + for (let round = 0; round < speechRoundsPerDiamond; round++) { + recordSpeechExerciseResult(1, true); // 1 pokus = 3 body + } + } + + // Simuluj perfektný výkon pre všetky posluchové cvičenia + // Každý kryštál má X kôl (párov) podľa konfigurácie + const listeningRoundsPerCrystal = currentLevelConfig?.gameConfig?.listeningExercises || 2; + for (let crystal = 0; crystal < PocetGenKov; crystal++) { + for (let round = 0; round < listeningRoundsPerCrystal; round++) { + recordListeningExerciseResult(1, true); // 1 pokus = 3 body + } + } + + // Zozbieraj všetky goldy + for (let i = 0; i < PocetGenGolds; i++) { + recordGoldCollected(); + } + + // Nastav počty ako zozbierané + diamondsCollected = PocetGenDiamant; + goldsCollected = PocetGenGolds; + kovCollected = PocetGenKov; + gamePerformance.levelCompleted = true; + + // Aktualizuj UI + updateDiamondsCollected(diamondsCollected); + updategoldsCollected(goldsCollected); + updateKovCollected(kovCollected); + + // Dokončenie levelu + completeLevel(); + + console.log('Level dokončený s perfektným výkonom!'); +} + +/** + * Získanie detailných štatistík výkonu + * @returns {Object} Objekt so štatistikami + */ +function getPerformanceStats() { + const stats = { + // Rečové cvičenia + speech: { + totalRounds: gamePerformance.speechExercises.roundResults.length, + completedRounds: gamePerformance.speechExercises.completedRounds, + totalPoints: gamePerformance.speechExercises.totalPoints, + maxPossiblePoints: gamePerformance.speechExercises.roundResults.length * 3, + roundDetails: gamePerformance.speechExercises.roundResults, + averageAttempts: gamePerformance.speechExercises.roundResults.length > 0 + ? (gamePerformance.speechExercises.roundResults.reduce((sum, r) => sum + r.attempts, 0) / + gamePerformance.speechExercises.roundResults.length).toFixed(2) + : 0 + }, + + // Posluchové cvičenia + listening: { + totalRounds: gamePerformance.listeningExercises.roundResults.length, + completedRounds: gamePerformance.listeningExercises.completedRounds, + totalPoints: gamePerformance.listeningExercises.totalPoints, + maxPossiblePoints: gamePerformance.listeningExercises.roundResults.length * 3, + roundDetails: gamePerformance.listeningExercises.roundResults, + averageAttempts: gamePerformance.listeningExercises.roundResults.length > 0 + ? (gamePerformance.listeningExercises.roundResults.reduce((sum, r) => sum + r.attempts, 0) / + gamePerformance.listeningExercises.roundResults.length).toFixed(2) + : 0 + }, + + // Celkové štatistiky + overall: { + totalPoints: gamePerformance.totalPoints, + maxPossiblePoints: gamePerformance.maxPossiblePoints, + percentage: gamePerformance.maxPossiblePoints > 0 + ? Math.round((gamePerformance.totalPoints / gamePerformance.maxPossiblePoints) * 100) + : 0, + stars: gamePerformance.finalStars, + levelCompleted: gamePerformance.levelCompleted + }, + + // Goldy + golds: { + collected: gamePerformance.golds.collected, + total: gamePerformance.golds.total + }, + + // Čas + time: { + seconds: gameTimer.currentTime, + formatted: formatTime(gameTimer.currentTime) + } + }; + + return stats; +} + +/** + * Vypočítanie počtu hviezd na základe percentuálneho výkonu + * @param {number} percentage - Percentuálny výkon (0-100) + * @returns {number} Počet hviezd (0-3) + */ +function getStarRating(percentage) { + if (percentage >= 70) return 3; // 70%+ = 3 hviezdy + if (percentage >= 40) return 2; // 40-69% = 2 hviezdy + if (percentage >= 20) return 1; // 20-39% = 1 hviezda + return 0; // <20% = 0 hviezd +} + +/** + * Zobrazenie súhrnu výkonu v konzole + */ +function showPerformanceSummary() { + console.log(''); + console.log('═══════════════════════════════════════'); + console.log(' SÚHRN VÝKONU'); + console.log('═══════════════════════════════════════'); + + const stats = getPerformanceStats(); + + // Rečové cvičenia + console.log(''); + console.log(' REČOVÉ CVIČENIA:'); + console.log(` Absolvované kolá: ${stats.speech.completedRounds}/${stats.speech.totalRounds}`); + console.log(` Body: ${stats.speech.totalPoints}/${stats.speech.maxPossiblePoints}`); + console.log(` Priemerný počet pokusov: ${stats.speech.averageAttempts}`); + + // Detaily kôl + if (stats.speech.roundDetails.length > 0) { + console.log(' Detaily kôl:'); + stats.speech.roundDetails.forEach((round, index) => { + const icon = round.success ? '✅' : '❌'; + console.log(` ${icon} Kolo ${index + 1}: ${round.attempts} pokusov = ${round.points} bodov`); + }); + } + + // Posluchové cvičenia + console.log(''); + console.log(' POSLUCHOVÉ CVIČENIA:'); + console.log(` Absolvované kolá: ${stats.listening.completedRounds}/${stats.listening.totalRounds}`); + console.log(` Body: ${stats.listening.totalPoints}/${stats.listening.maxPossiblePoints}`); + console.log(` Priemerný počet pokusov: ${stats.listening.averageAttempts}`); + + // Detaily kôl + if (stats.listening.roundDetails.length > 0) { + console.log(' Detaily kôl:'); + stats.listening.roundDetails.forEach((round, index) => { + const icon = round.success ? '✅' : '❌'; + console.log(` ${icon} Kolo ${index + 1}: ${round.attempts} pokusov = ${round.points} bodov`); + }); + } + + // Goldy + console.log(''); + console.log(' GOLDY:'); + console.log(` Zozbierané: ${stats.golds.collected}/${stats.golds.total}`); + + // Celkový výsledok + console.log(''); + console.log(' CELKOVÝ VÝSLEDOK:'); + console.log(` Body: ${stats.overall.totalPoints}/${stats.overall.maxPossiblePoints}`); + console.log(` Úspešnosť: ${stats.overall.percentage}%`); + console.log(` Hviezdy: ${'⭐'.repeat(stats.overall.stars)} (${stats.overall.stars}/3)`); + console.log(` Čas: ${stats.time.formatted}`); + console.log(` Level dokončený: ${stats.overall.levelCompleted ? 'Áno' : 'Nie'}`); + + console.log('═══════════════════════════════════════'); + console.log(''); + + return stats; +} + +/** + * Reset levelu - kompletné resetovanie stavu hry + */ +function resetLevel() { + console.log(' Resetujem level...'); + + // Reset zbieraných itemov + diamondsCollected = 0; + goldsCollected = 0; + kovCollected = 0; + correctAnswers = 0; + incorrectAnswers = 0; + + // Reset výkonu + initializePerformanceTracking(); + + // Reset timera + if (gameTimer.intervalId) { + clearInterval(gameTimer.intervalId); + } + gameTimer = { + startTime: null, + currentTime: 0, + intervalId: null, + timeLimit: currentLevelConfig?.timeLimit || null, + isRunning: false, + isPaused: false + }; + + // Aktualizuj UI + updateDiamondsCollected(0); + updategoldsCollected(0); + updateKovCollected(0); + updateAnswerCounters(); + + // Resetuj timer display + const timerElement = document.getElementById('game-timer'); + if (timerElement) { + timerElement.textContent = gameTimer.timeLimit ? formatTime(gameTimer.timeLimit) : '00:00'; + } + + console.log(' Level resetovaný'); +} + +/** + * Získanie aktuálneho stavu hry + * @returns {Object} Stav hry + */ +function getGameState() { + return { + items: { + diamonds: { collected: diamondsCollected, total: PocetGenDiamant }, + golds: { collected: goldsCollected, total: PocetGenGolds }, + crystals: { collected: kovCollected, total: PocetGenKov } + }, + timer: { + running: gameTimer.isRunning, + currentTime: gameTimer.currentTime, + timeLimit: gameTimer.timeLimit, + formatted: formatTime(gameTimer.currentTime) + }, + performance: getPerformanceStats(), + level: { + config: currentLevelConfig, + isCustom: isCustomLevel, + completed: gamePerformance.levelCompleted + } + }; +} + +// Pridanie funkcií do window pre ľahší prístup v konzole +window.quickCompleteLevel = quickCompleteLevel; +window.getPerformanceStats = getPerformanceStats; +window.showPerformanceSummary = showPerformanceSummary; +window.getStarRating = getStarRating; +window.resetLevel = resetLevel; +window.getGameState = getGameState; + +console.log('✅ Užitočné funkcie načítané:'); +console.log(' - quickCompleteLevel() - Rýchle dokončenie levelu'); +console.log(' - getPerformanceStats() - Získanie štatistík'); +console.log(' - showPerformanceSummary() - Zobrazenie súhrnu'); +console.log(' - getStarRating(percentage) - Výpočet hviezd'); +console.log(' - resetLevel() - Reset levelu'); +console.log(' - getGameState() - Aktuálny stav hry'); + +///////////////////////////////////////////// +// ===== DOKONČENIE LEVELU A POKROK ===== // +///////////////////////////////////////////// + +/** + * Hlavná funkcia na dokončenie levelu + * Volá všetky potrebné kroky vrátane uloženia a navigácie + */ +function completeLevel() { + console.log(' Dokončujem level...'); + + // 1. Zastav timer + stopTimer(); + + // 2. Vypočítaj hodnotenie + const rating = calculateFinalRating(); + console.log(' Hodnotenie levelu:', rating); + + // 3. Ulož výsledky do progress managera a získaj info o odomknutom obsahu + const saveResult = saveResultsToProgress(rating); + console.log(' Výsledok uloženia:', saveResult); + + // 4. Aktualizuj navigáciu pre win dialóg + updateDialogNavigation(); + + // 5. Zobraz win dialóg s výsledkami + setTimeout(() => { + // Prehrať zvuk výhry + if (typeof effectVyhra !== 'undefined') { + effectVyhra.play(); + } + + // Zobraziť dialóg + document.getElementById("endgame").style.display = "block"; + document.getElementById("blur-background").style.display = "block"; + document.body.style.overflow = "hidden"; + + // Pridať výsledky do dialógu s informáciou o pokroku + displayResultsInWinDialog(rating, saveResult); + + console.log(' Win dialóg zobrazený s výsledkami!'); + + // 6. Zobraz notifikácie o odomknutom obsahu + if (saveResult.saved) { + setTimeout(() => { + showUnlockNotificationsInGame(saveResult); + }, 1000); + } + + }, 500); +} + +/** + * Kontrola a zobrazenie odomknutého obsahu + */ +function checkUnlockedContent() { + if (!window.progressManager) { + console.log('ProgressManager nie je dostupný pre kontrolu odomknutia'); + return; + } + + setTimeout(() => { + const urlParams = new URLSearchParams(window.location.search); + const worldId = urlParams.get('worldId') || urlParams.get('world'); + const levelId = urlParams.get('levelId') || urlParams.get('level'); + + if (!worldId || !levelId) return; + + // Skontroluj či sa odomkol ďalší level + if (typeof getLevelConfig === 'function') { + const currentLevel = getLevelConfig(levelId); + if (currentLevel) { + const nextLevelNumber = currentLevel.levelNumber + 1; + const nextLevelId = `${worldId}_${nextLevelNumber}`; + const nextLevel = getLevelConfig(nextLevelId); + + if (nextLevel) { + const nextProgress = window.progressManager.getLevelProgress(worldId, nextLevelId); + if (nextProgress && nextProgress.isUnlocked) { + console.log(` Odomknutý ďalší level: ${nextLevel.name}`); + + // Môžeš pridať notifikáciu do UI + showUnlockNotification('level', nextLevel); + } + } + } + } + + // Skontroluj či sa odomkol nový svet + const worldProgress = window.progressManager.getProgress().worlds[worldId]; + if (worldProgress && worldProgress.completedLevels > 0) { + console.log(` Pokrok sveta ${worldId}: ${worldProgress.completedLevels} levelov, ${worldProgress.stars} hviezd`); + } + + }, 1000); +} \ No newline at end of file diff --git a/js/managers/gameRouter.js b/js/managers/gameRouter.js new file mode 100644 index 0000000..156b179 --- /dev/null +++ b/js/managers/gameRouter.js @@ -0,0 +1,455 @@ +/** + * GAME ROUTER + * Správa navigácie medzi hrami a presmerovávania s parametrami + */ + +class GameRouter { + constructor() { + this.init(); + } + + /** + * Inicializácia routera + */ + init() { + console.log('Inicializujem GameRouter...'); + + // Zaregistruj ako globálnu premennú + window.gameRouter = this; + + console.log('GameRouter inicializovaný'); + } + + /** + * Spustenie konkrétneho levelu + * @param {string} worldId - ID sveta + * @param {string} levelId - ID levelu + */ + startLevel(worldId, levelId) { + console.log(`Spúšťam level ${levelId} zo sveta ${worldId}`); + + try { + // Získaj konfiguráciu levelu + const levelConfig = this.getLevelConfig(levelId); + if (!levelConfig) { + throw new Error(`Level ${levelId} neexistuje`); + } + + // Ulož aktuálny level do sessionStorage pre rýchly prístup + this.setCurrentLevel(worldId, levelId); + + // Presmeruj na správnu hru podľa typu + this.redirectToGame(levelConfig.gameType, worldId, levelId); + + } catch (error) { + console.error('Chyba pri spúšťaní levelu:', error); + alert(`Chyba pri spúšťaní levelu: ${error.message}`); + } + } + + /** + * Získanie konfigurácie levelu + * @param {string} levelId - ID levelu + * @returns {Object|null} - konfigurácia levelu + */ + getLevelConfig(levelId) { + if (typeof getLevelConfig === 'function') { + return getLevelConfig(levelId); + } + + console.error('Funkcia getLevelConfig nie je dostupná'); + return null; + } + + /** + * Uloženie aktuálneho levelu + * @param {string} worldId - ID sveta + * @param {string} levelId - ID levelu + */ + setCurrentLevel(worldId, levelId) { + const currentLevel = { + worldId: worldId, + levelId: levelId, + startTime: new Date().toISOString(), + attempts: 0 + }; + + // Ulož do sessionStorage (pre aktuálnu session) + sessionStorage.setItem('currentLevel', JSON.stringify(currentLevel)); + + // Ulož aj do localStorage (pre trvalé uloženie) + localStorage.setItem('lastPlayedLevel', JSON.stringify(currentLevel)); + + console.log('Aktuálny level uložený:', currentLevel); + } + + /** + * Získanie aktuálneho levelu + * @returns {Object|null} - aktuálny level alebo null + */ + getCurrentLevel() { + try { + const currentLevelData = sessionStorage.getItem('currentLevel'); + return currentLevelData ? JSON.parse(currentLevelData) : null; + } catch (error) { + console.error('Chyba pri načítaní aktuálneho levelu:', error); + return null; + } + } + + /** + * Presmerovanie na správnu hru + * @param {string} gameType - typ hry ('banik', 'pexeso', 'mario') + * @param {string} worldId - ID sveta + * @param {string} levelId - ID levelu + */ + redirectToGame(gameType, worldId, levelId) { + console.log(`Presmerovávam na hru typu: ${gameType}`); + + const gameUrls = { + 'banik': this.buildGameUrl('game.html', worldId, levelId), + 'pexeso': this.buildGameUrl('pexeso.html', worldId, levelId), + 'mario': this.buildGameUrl('mario.html', worldId, levelId) + }; + + const url = gameUrls[gameType]; + if (url) { + console.log(`Presmerovávam na: ${url}`); + window.location.href = url; + } else { + throw new Error(`Neznámy typ hry: ${gameType}`); + } + } + + /** + * Vytvorenie URL pre hru s parametrami + * @param {string} baseUrl - základná URL hry + * @param {string} worldId - ID sveta + * @param {string} levelId - ID levelu + * @returns {string} - kompletná URL s parametrami + */ + buildGameUrl(baseUrl, worldId, levelId) { + const params = new URLSearchParams({ + world: worldId, + level: levelId, + timestamp: Date.now() // Zabráni cachingu + }); + + return `${baseUrl}?${params.toString()}`; + } + + /** + * Dokončenie levelu a presmerovanie späť + * @param {string} worldId - ID sveta + * @param {string} levelId - ID levelu + * @param {Object} results - výsledky levelu (stars, time, atď.) + */ + completeLevel(worldId, levelId, results) { + console.log(`Dokončujem level ${levelId}:`, results); + + try { + // Aktualizuj pokrok v progressManageri + if (window.progressManager) { + window.progressManager.updateLevelProgress(worldId, levelId, { + stars: results.stars || 0, + time: results.time || null, + completed: true + }); + + console.log('Pokrok levelu aktualizovaný'); + } + + // Vymaž aktuálny level + this.clearCurrentLevel(); + + // Zobraz výsledky (ak je potrebné) + if (results.showResults !== false) { + this.showLevelResults(worldId, levelId, results); + } + + } catch (error) { + console.error('Chyba pri dokončovaní levelu:', error); + } + } + + /** + * Zobrazenie výsledkov levelu + * @param {string} worldId - ID sveta + * @param {string} levelId - ID levelu + * @param {Object} results - výsledky + */ + showLevelResults(worldId, levelId, results) { + const levelConfig = this.getLevelConfig(levelId); + const worldConfig = typeof getWorldConfig === 'function' ? getWorldConfig(worldId) : null; + + // Jednoduchý alert s výsledkami (môže sa nahradiť lepším UI) + const message = ` +Level dokončený! + +${levelConfig ? levelConfig.name : 'Level'} +Svet: ${worldConfig ? worldConfig.title : worldId} + +Hviezdy: ${results.stars || 0}/3 +${results.time ? `Čas: ${this.formatTime(results.time)}` : ''} + +Chceš pokračovať ďalším levelom alebo sa vrátiť na výber levelov? + `.trim(); + + const continueNext = confirm(message + '\n\nOK = Ďalší level, Zrušiť = Výber levelov'); + + if (continueNext) { + this.goToNextLevel(worldId, levelId); + } else { + this.returnToLevelSelector(worldId); + } + } + + /** + * Prechod na ďalší level + * @param {string} worldId - ID sveta + * @param {string} currentLevelId - ID aktuálneho levelu + */ + goToNextLevel(worldId, currentLevelId) { + console.log(`Hľadám ďalší level po ${currentLevelId}`); + + try { + // Získaj ďalší level + const nextLevel = typeof getNextLevel === 'function' ? getNextLevel(currentLevelId) : null; + + if (nextLevel && nextLevel.worldId === worldId) { + // Skontroluj, či je ďalší level odomknutý + if (window.progressManager) { + const levelProgress = window.progressManager.getLevelProgress(worldId, nextLevel.id); + if (levelProgress && levelProgress.isUnlocked) { + this.startLevel(worldId, nextLevel.id); + return; + } + } + } + + // Ak nie je ďalší level, vráť sa na level selector + console.log('Nie je dostupný ďalší level, vraciam sa na level selector'); + this.returnToLevelSelector(worldId); + + } catch (error) { + console.error('Chyba pri hľadaní ďalšieho levelu:', error); + this.returnToLevelSelector(worldId); + } + } + + /** + * Návrat na level selector + * @param {string} worldId - ID sveta + */ + returnToLevelSelector(worldId) { + console.log(`Vraciam sa na level selector pre svet: ${worldId}`); + window.location.href = `level-selector.html?world=${worldId}`; + } + + /** + * Návrat na menu svetov + */ + returnToWorldsMenu() { + console.log('Vraciam sa na menu svetov'); + window.location.href = 'worlds-menu.html'; + } + + /** + * Návrat na hlavné menu + */ + returnToMainMenu() { + console.log('Vraciam sa na hlavné menu'); + window.location.href = 'index.html'; + } + + /** + * Reštart aktuálneho levelu + * @param {string} worldId - ID sveta + * @param {string} levelId - ID levelu + */ + restartLevel(worldId, levelId) { + console.log(`Reštartujem level ${levelId}`); + + // Aktualizuj počet pokusov + const currentLevel = this.getCurrentLevel(); + if (currentLevel) { + currentLevel.attempts = (currentLevel.attempts || 0) + 1; + sessionStorage.setItem('currentLevel', JSON.stringify(currentLevel)); + } + + // Spusti level znova + this.startLevel(worldId, levelId); + } + + /** + * Vymazanie aktuálneho levelu + */ + clearCurrentLevel() { + sessionStorage.removeItem('currentLevel'); + console.log('Aktuálny level vymazaný'); + } + + /** + * Formátovanie času + * @param {number} seconds - čas v sekundách + * @returns {string} - formátovaný čas + */ + formatTime(seconds) { + const minutes = Math.floor(seconds / 60); + const secs = Math.floor(seconds % 60); + return `${minutes}:${secs.toString().padStart(2, '0')}`; + } + + /** + * Získanie URL parametrov + * @returns {URLSearchParams} - URL parametre + */ + getUrlParams() { + return new URLSearchParams(window.location.search); + } + + /** + * Načítanie levelu z URL parametrov + * @returns {Object|null} - level data z URL alebo null + */ + loadLevelFromUrl() { + const params = this.getUrlParams(); + const worldId = params.get('world'); + const levelId = params.get('level'); + + if (worldId && levelId) { + console.log(`Načítavam level z URL: ${levelId} (svet: ${worldId})`); + + // Ulož ako aktuálny level + this.setCurrentLevel(worldId, levelId); + + return { + worldId: worldId, + levelId: levelId, + levelConfig: this.getLevelConfig(levelId) + }; + } + + return null; + } + + /** + * Kontrola, či je level platný a odomknutý + * @param {string} worldId - ID sveta + * @param {string} levelId - ID levelu + * @returns {boolean} - true ak je level platný a odomknutý + */ + isLevelAccessible(worldId, levelId) { + try { + const levelConfig = this.getLevelConfig(levelId); + if (!levelConfig || levelConfig.worldId !== worldId) { + return false; + } + + if (window.progressManager) { + const levelProgress = window.progressManager.getLevelProgress(worldId, levelId); + return levelProgress && levelProgress.isUnlocked; + } + + return false; + } catch (error) { + console.error('Chyba pri kontrole dostupnosti levelu:', error); + return false; + } + } + + /** + * Ošetrenie neplatného prístupu k levelu + * @param {string} worldId - ID sveta + * @param {string} levelId - ID levelu + */ + handleInvalidLevelAccess(worldId, levelId) { + console.warn(`Neplatný prístup k levelu: ${levelId} (svet: ${worldId})`); + + alert('Tento level nie je dostupný alebo nie je odomknutý!'); + + // Presmeruj na level selector + this.returnToLevelSelector(worldId); + } + + /** + * Inicializácia hry s level configom + * Táto funkcia sa volá z hier pre načítanie konfigurácie + * @returns {Object|null} - level config alebo null + */ + initializeGameWithLevel() { + console.log('Inicializujem hru s level configom...'); + + const levelData = this.loadLevelFromUrl(); + if (!levelData) { + console.warn('Žiadne level data v URL'); + return null; + } + + const { worldId, levelId, levelConfig } = levelData; + + // Skontroluj dostupnosť levelu + if (!this.isLevelAccessible(worldId, levelId)) { + this.handleInvalidLevelAccess(worldId, levelId); + return null; + } + + console.log('Level úspešne načítaný:', levelConfig); + return levelConfig; + } + + /** + * Získanie pokroku pre aktuálny level + * @returns {Object|null} - pokrok levelu alebo null + */ + getCurrentLevelProgress() { + const currentLevel = this.getCurrentLevel(); + if (!currentLevel || !window.progressManager) { + return null; + } + + return window.progressManager.getLevelProgress(currentLevel.worldId, currentLevel.levelId); + } + + /** + * Debug funkcie + */ + debug = { + showCurrentLevel: () => { + console.log('Aktuálny level:', this.getCurrentLevel()); + }, + + simulateCompletion: (stars = 3, time = 120) => { + const currentLevel = this.getCurrentLevel(); + if (currentLevel) { + this.completeLevel(currentLevel.worldId, currentLevel.levelId, { + stars: stars, + time: time + }); + } else { + console.log('Žiadny aktuálny level'); + } + }, + + forceReturnToSelector: () => { + const currentLevel = this.getCurrentLevel(); + if (currentLevel) { + this.returnToLevelSelector(currentLevel.worldId); + } else { + this.returnToWorldsMenu(); + } + } + }; +} + +// Vytvor globálnu inštanciu po načítaní +document.addEventListener('DOMContentLoaded', () => { + if (!window.gameRouter) { + new GameRouter(); + } +}); + +// Export pre Node.js (ak je potrebný) +if (typeof module !== 'undefined' && module.exports) { + module.exports = GameRouter; +} \ No newline at end of file diff --git a/js/managers/progressManager.js b/js/managers/progressManager.js new file mode 100644 index 0000000..3855563 --- /dev/null +++ b/js/managers/progressManager.js @@ -0,0 +1,739 @@ +/** + * PROGRESS MANAGER + * Správa pokroku hráča, ukladanie a načítavanie dát + */ + +class ProgressManager { + constructor() { + this.STORAGE_KEY = 'speechTherapyProgress'; + this.progress = null; + this.init(); + } + + /** + * Inicializácia progress managera + */ + init() { + console.log('Inicializujem ProgressManager...'); + this.loadProgress(); + + // Ak neexistuje pokrok, vytvor nový + if (!this.progress) { + this.createNewProgress(); + } + + console.log('ProgressManager inicializovaný'); + } + + /** + * Načítanie pokroku z localStorage + */ + loadProgress() { + try { + const savedData = localStorage.getItem(this.STORAGE_KEY); + if (savedData) { + this.progress = JSON.parse(savedData); + console.log('Pokrok načítaný z localStorage'); + return true; + } + } catch (error) { + console.error('Chyba pri načítaní pokroku:', error); + } + return false; + } + + /** + * Vytvorenie nového pokroku pre hráča + */ + createNewProgress() { + console.log('Vytváram nový pokrok pre hráča...'); + + this.progress = { + version: '1.0', + createdAt: new Date().toISOString(), + lastUpdated: new Date().toISOString(), + totalStars: 0, + totalCompletedLevels: 0, + totalPlayTime: 0, // v sekundách + worlds: {}, + settings: { + soundEnabled: true, + musicEnabled: true, + difficulty: 'normal' + }, + achievements: [], + statistics: { + totalWordsSpoken: 0, + correctPronunciations: 0, + incorrectPronunciations: 0, + gamesPlayed: 0, + favoriteGameType: null + } + }; + + // Inicializuj pokrok pre všetky svety + if (typeof getAllWorlds === 'function') { + const worlds = getAllWorlds(); + worlds.forEach(world => { + this.progress.worlds[world.id] = { + isUnlocked: world.id === 'world_r', // Prvý svet je odomknutý + stars: 0, + completedLevels: 0, + totalLevels: world.totalLevels, + bestTime: null, + lastPlayed: null, + levels: {} // Pokrok jednotlivých levelov + }; + + // Inicializuj prázdny objekt pre levely - budú sa inicializovať dynamicky + this.progress.worlds[world.id].levels = {}; + }); + } + + this.saveProgress(); + console.log('Nový pokrok vytvorený a uložený'); + } + + /** + * Uloženie pokroku do localStorage + */ + saveProgress() { + try { + this.progress.lastUpdated = new Date().toISOString(); + localStorage.setItem(this.STORAGE_KEY, JSON.stringify(this.progress)); + console.log('Pokrok uložený'); + return true; + } catch (error) { + console.error('Chyba pri ukladaní pokroku:', error); + return false; + } + } + + /** + * Získanie celkového pokroku + */ + getProgress() { + return this.progress; + } + + /** + * Získanie pokroku konkrétneho sveta + */ + getWorldProgress(worldId) { + return this.progress.worlds[worldId] || null; + } + + /** + * Získanie pokroku konkrétneho levelu (s automatickou inicializáciou) + */ + getLevelProgress(worldId, levelId) { + const worldProgress = this.getWorldProgress(worldId); + if (!worldProgress) return null; + + // Ak level neexistuje v pokroku, inicializuj ho + if (!worldProgress.levels[levelId]) { + this.initializeLevelProgress(worldId, levelId); + } + + return worldProgress.levels[levelId] || null; + } + + /** + * Inicializácia pokroku pre konkrétny level + */ + initializeLevelProgress(worldId, levelId) { + console.log(`Inicializujem pokrok pre level ${levelId} v svete ${worldId}`); + + const worldProgress = this.progress.worlds[worldId]; + if (!worldProgress) { + console.error(`Svet ${worldId} neexistuje v pokroku`); + return false; + } + + // Získaj konfiguráciu levelu + let levelConfig = null; + if (typeof getLevelConfig === 'function') { + levelConfig = getLevelConfig(levelId); + } + + if (!levelConfig) { + console.error(`Konfigurácia levelu ${levelId} sa nenašla`); + return false; + } + + // Vytvor pokrok pre level + worldProgress.levels[levelId] = { + isUnlocked: this.shouldLevelBeUnlocked(worldId, levelConfig), + stars: 0, + bestTime: null, + attempts: 0, + completed: false, + lastPlayed: null + }; + + this.saveProgress(); + return true; + } + + /** + * Kontrola, či má byť level odomknutý + */ + shouldLevelBeUnlocked(worldId, levelConfig) { + // Prvý level v prvom svete je vždy odomknutý + if (worldId === 'world_r' && levelConfig.levelNumber === 1) { + return true; + } + + // Prvý level v každom svete je odomknutý ak je svet odomknutý + if (levelConfig.levelNumber === 1) { + return this.progress.worlds[worldId].isUnlocked; + } + + // Ostatné levely sú zamknuté dokým sa nedokončí predchádzajúci + return false; + } + + /** + * Inicializácia všetkých levelov pre svet (voliteľná funkcia) + */ + initializeAllLevelsForWorld(worldId) { + console.log(`Inicializujem všetky levely pre svet ${worldId}`); + + if (typeof getWorldLevels === 'function') { + const levels = getWorldLevels(worldId); + levels.forEach(level => { + if (!this.progress.worlds[worldId].levels[level.id]) { + this.initializeLevelProgress(worldId, level.id); + } + }); + } + } + + /** + * Aktualizácia pokroku levelu + */ + updateLevelProgress(worldId, levelId, levelData) { + console.log(`Aktualizujem pokrok levelu ${levelId} v svete ${worldId}:`, levelData); + + const worldProgress = this.progress.worlds[worldId]; + if (!worldProgress) { + console.error(`Svet ${worldId} neexistuje v pokroku`); + return false; + } + + // Ak level ešte neexistuje, inicializuj ho + if (!worldProgress.levels[levelId]) { + worldProgress.levels[levelId] = { + isUnlocked: false, + stars: 0, + bestTime: null, + attempts: 0, + completed: false, + lastPlayed: null, + totalPoints: 0, + maxPoints: 0, + percentage: 0 + }; + } + + const levelProgress = worldProgress.levels[levelId]; + + // Aktualizuj dáta levelu - VYLEPŠENÉ UKLADANIE + if (levelData.stars !== undefined) { + // Ulož len ak sú hviezdy lepšie ako predtým + if (levelData.stars > levelProgress.stars) { + levelProgress.stars = levelData.stars; + console.log(`Nové hviezdy: ${levelData.stars} (predtým: ${levelProgress.stars})`); + } + } + + if (levelData.time !== undefined) { + if (!levelProgress.bestTime || levelData.time < levelProgress.bestTime) { + levelProgress.bestTime = levelData.time; + console.log(`Nový najlepší čas: ${levelData.time}s`); + } + } + + if (levelData.completed !== undefined) { + const wasCompleted = levelProgress.completed; + levelProgress.completed = levelData.completed; + + if (levelData.completed && !wasCompleted) { + console.log(`Level ${levelId} dokončený prvýkrát!`); + } + } + + // NOVÉ: Ulož dodatočné štatistiky + if (levelData.points !== undefined) { + levelProgress.totalPoints = Math.max(levelProgress.totalPoints, levelData.points); + } + + if (levelData.maxPoints !== undefined) { + levelProgress.maxPoints = levelData.maxPoints; + } + + if (levelData.percentage !== undefined) { + levelProgress.percentage = Math.max(levelProgress.percentage, levelData.percentage); + } + + // Aktualizuj základné info + levelProgress.attempts++; + levelProgress.lastPlayed = new Date().toISOString(); + + // Aktualizuj štatistiky sveta + this.updateWorldStatistics(worldId); + + // VYLEPŠENÉ: Skontroluj odomknutie ďalších levelov/svetov + this.checkUnlocks(worldId, levelId, levelData); + + // Aktualizuj celkové štatistiky + this.updateOverallStatistics(); + + this.saveProgress(); + return true; + } + + /** + * Aktualizácia štatistík sveta + */ + updateWorldStatistics(worldId) { + const worldProgress = this.progress.worlds[worldId]; + const levels = worldProgress.levels; + + // Spočítaj hviezdy a dokončené levely + let totalStars = 0; + let completedLevels = 0; + + Object.values(levels).forEach(level => { + totalStars += level.stars; + if (level.completed) { + completedLevels++; + } + }); + + worldProgress.stars = totalStars; + worldProgress.completedLevels = completedLevels; + worldProgress.lastPlayed = new Date().toISOString(); + } + + /** + * Aktualizácia celkových štatistík + */ + updateOverallStatistics() { + let totalStars = 0; + let totalCompletedLevels = 0; + + Object.values(this.progress.worlds).forEach(world => { + totalStars += world.stars; + totalCompletedLevels += world.completedLevels; + }); + + this.progress.totalStars = totalStars; + this.progress.totalCompletedLevels = totalCompletedLevels; + } + + /** + * Kontrola odomknutia nových levelov/svetov + */ + checkUnlocks(worldId, completedLevelId) { + console.log(`Kontrolujem odomknutia po dokončení ${completedLevelId}`); + + const unlocked = { + levels: [], + worlds: [] + }; + + // 1. Odomkni ďalší level v rovnakom svete (ak existuje) + const nextLevelUnlocked = this.unlockNextLevel(worldId, completedLevelId); + if (nextLevelUnlocked) { + unlocked.levels.push(nextLevelUnlocked); + } + + // 2. Skontroluj odomknutie nových svetov + const newWorlds = this.checkWorldUnlocks(); + unlocked.worlds.push(...newWorlds); + + // 3. Informuj o odomknutom obsahu + if (unlocked.levels.length > 0 || unlocked.worlds.length > 0) { + this.showUnlockNotifications(unlocked); + } + + return unlocked; + } + + /** + * Odomknutie ďalšieho levelu v svete + */ + unlockNextLevel(worldId, currentLevelId) { + try { + // Získaj konfiguráciu aktuálneho levelu + if (typeof getLevelConfig !== 'function') { + console.warn('Funkcia getLevelConfig nie je dostupná'); + return null; + } + + const currentLevel = getLevelConfig(currentLevelId); + if (!currentLevel) { + console.warn(`Konfigurácia levelu ${currentLevelId} sa nenašla`); + return null; + } + + // OPRAVENÉ: Použij správny formát ID podľa existujúcej konfigurácie + // Namiesto hardcoded formátu, nájdi všetky levely sveta a vybra ďalší + if (typeof getWorldLevels === 'function') { + const worldLevels = getWorldLevels(worldId); + + // Nájdi index aktuálneho levelu + const currentIndex = worldLevels.findIndex(level => level.id === currentLevelId); + + if (currentIndex === -1) { + console.warn(`Aktuálny level ${currentLevelId} sa nenašiel v zozname levelov`); + return null; + } + + // Skontroluj či existuje ďalší level + if (currentIndex + 1 >= worldLevels.length) { + console.log(`Ďalší level neexistuje - koniec sveta ${worldId}`); + return null; + } + + // Získaj ďalší level + const nextLevel = worldLevels[currentIndex + 1]; + console.log(`Našiel som ďalší level: ${nextLevel.id} (${nextLevel.name})`); + + // Získaj alebo vytvor pokrok ďalšieho levelu + const nextLevelProgress = this.getLevelProgress(worldId, nextLevel.id); + + if (nextLevelProgress && !nextLevelProgress.isUnlocked) { + nextLevelProgress.isUnlocked = true; + console.log(`✅ Odomknutý ďalší level: ${nextLevel.name} (${nextLevel.id})`); + + this.saveProgress(); + return nextLevel; + } else if (nextLevelProgress && nextLevelProgress.isUnlocked) { + console.log(`Level ${nextLevel.id} je už odomknutý`); + return nextLevel; + } + } + + return null; + + } catch (error) { + console.error('Chyba pri odomykaní ďalšieho levelu:', error); + return null; + } + } + + /** + * Kontrola odomknutia svetov + */ + checkWorldUnlocks() { + const unlockedWorlds = []; + + try { + if (typeof getAllWorlds !== 'function') { + console.warn('Funkcia getAllWorlds nie je dostupná'); + return unlockedWorlds; + } + + const worlds = getAllWorlds(); + + worlds.forEach(world => { + // Preskočí svety, ktoré sú už odomknuté + if (this.progress.worlds[world.id].isUnlocked) { + return; + } + + // Skontroluj podmienky odomknutia + if (world.unlockRequirement) { + const requiredWorldId = world.unlockRequirement.worldId; + const requiredStars = world.unlockRequirement.minStars || 0; + const requiredLevels = world.unlockRequirement.minCompletedLevels || 0; + + const requiredWorldProgress = this.progress.worlds[requiredWorldId]; + + if (requiredWorldProgress) { + const hasEnoughStars = requiredWorldProgress.stars >= requiredStars; + const hasEnoughLevels = requiredWorldProgress.completedLevels >= requiredLevels; + + if (hasEnoughStars && hasEnoughLevels) { + // Odomkni svet + this.progress.worlds[world.id].isUnlocked = true; + + // Odomkni prvý level nového sveta + if (typeof getWorldLevels === 'function') { + const firstLevel = getWorldLevels(world.id)[0]; + if (firstLevel) { + this.progress.worlds[world.id].levels[firstLevel.id] = { + isUnlocked: true, + stars: 0, + bestTime: null, + attempts: 0, + completed: false, + lastPlayed: null, + totalPoints: 0, + maxPoints: 0, + percentage: 0 + }; + } + } + + console.log(`✅ Odomknutý nový svet: ${world.name} (${world.id})`); + unlockedWorlds.push(world); + } else { + console.log(`Svet ${world.id} ešte nie je odomknutý: potrebné ${requiredStars} hviezd (má ${requiredWorldProgress.stars}) a ${requiredLevels} levelov (má ${requiredWorldProgress.completedLevels})`); + } + } + } + }); + + if (unlockedWorlds.length > 0) { + this.saveProgress(); + } + + } catch (error) { + console.error('Chyba pri kontrole odomknutia svetov:', error); + } + + return unlockedWorlds; + } + + /** + * Zobrazenie notifikácie o odomknutí + */ + showUnlockNotification(type, item) { + const messages = { + 'level': `🔓 Odomknutý nový level: ${item.name}!`, + 'world': `🌟 Odomknutý nový svet: ${item.name}!` + }; + + const message = messages[type] || `Odomknuté: ${item.name}`; + + console.log(message); + + // Môžeš pridať toast notifikáciu, alert alebo upraviť UI + // Napríklad jednoduchý timeout alert: + setTimeout(() => { + if (typeof createUnlockToast === 'function') { + createUnlockToast(message, type); + } else { + // Fallback - console log (môže sa nahradiť lepším UI) + console.log(`UI Notifikácia: ${message}`); + } + }, 500); + } + + /** + * Resetovanie pokroku (pre testovacie účely) + */ + resetProgress() { + console.log('Resetujem pokrok hráča...'); + localStorage.removeItem(this.STORAGE_KEY); + this.createNewProgress(); + } + + /** + * Export pokroku (pre zálohovanie) + */ + exportProgress() { + return JSON.stringify(this.progress, null, 2); + } + + /** + * Import pokroku (pre obnovenie zo zálohy) + */ + importProgress(progressData) { + try { + const imported = JSON.parse(progressData); + this.progress = imported; + this.saveProgress(); + console.log('Pokrok úspešne importovaný'); + return true; + } catch (error) { + console.error('Chyba pri importe pokroku:', error); + return false; + } + } + + /** + * Získanie štatistík pre analýzu + */ + getStatistics() { + return { + totalStars: this.progress.totalStars, + totalCompletedLevels: this.progress.totalCompletedLevels, + totalPlayTime: this.progress.totalPlayTime, + worldsUnlocked: Object.values(this.progress.worlds).filter(w => w.isUnlocked).length, + averageStarsPerLevel: this.progress.totalCompletedLevels > 0 + ? (this.progress.totalStars / this.progress.totalCompletedLevels).toFixed(2) + : 0, + ...this.progress.statistics + }; + } + + /** + * Zobrazenie notifikácií o odomknutí + */ + showUnlockNotifications(unlocked) { + console.log('🎉 === ODOMKNUTÝ NOVÝ OBSAH ==='); + + // Oznám odomknuté levely + unlocked.levels.forEach(level => { + console.log(`🔓 Nový level: ${level.name} (${level.id})`); + this.showUnlockNotification('level', level); + }); + + // Oznám odomknuté svety + unlocked.worlds.forEach(world => { + console.log(`🌟 Nový svet: ${world.name} (${world.id})`); + this.showUnlockNotification('world', world); + }); + } + + + /** + * NOVÁ FUNKCIA: Získanie detailného pokroku sveta + */ +getDetailedWorldProgress(worldId) { + const worldProgress = this.getWorldProgress(worldId); + if (!worldProgress) return null; + + const levels = worldProgress.levels; + const levelStats = { + total: 0, + completed: 0, + unlocked: 0, + locked: 0, + starsBreakdown: { 0: 0, 1: 0, 2: 0, 3: 0 } + }; + + Object.values(levels).forEach(level => { + levelStats.total++; + + if (level.isUnlocked) levelStats.unlocked++; + else levelStats.locked++; + + if (level.completed) levelStats.completed++; + + levelStats.starsBreakdown[level.stars]++; + }); + + return { + ...worldProgress, + levelStats, + completionPercentage: levelStats.total > 0 ? + Math.round((levelStats.completed / levelStats.total) * 100) : 0 + }; +} + +/** + * NOVÁ FUNKCIA: Debug funkcie pre testovacie účely + */ +debugUnlockLevel(worldId, levelId) { + console.log(`Debug: Odomykam level ${levelId} v svete ${worldId}`); + + const levelProgress = this.getLevelProgress(worldId, levelId); + if (levelProgress) { + levelProgress.isUnlocked = true; + this.saveProgress(); + console.log(`✅ Level ${levelId} bol manuálne odomknutý`); + return true; + } + + console.error(`❌ Level ${levelId} sa nenašiel`); + return false; +} + +debugCompleteLevel(worldId, levelId, stars = 3) { + console.log(`Debug: Dokončujem level ${levelId} s ${stars} hviezdami`); + + const success = this.updateLevelProgress(worldId, levelId, { + stars: stars, + completed: true, + time: 120, // 2 minúty + points: stars * 3, + maxPoints: 9, + percentage: (stars / 3) * 100 + }); + + if (success) { + console.log(`✅ Level ${levelId} bol manuálne dokončený s ${stars} hviezdami`); + } + + return success; +} + +debugUnlockWorld(worldId) { + console.log(`Debug: Odomykam svet ${worldId}`); + + if (this.progress.worlds[worldId]) { + this.progress.worlds[worldId].isUnlocked = true; + + // Odomkni prvý level + if (typeof getWorldLevels === 'function') { + const firstLevel = getWorldLevels(worldId)[0]; + if (firstLevel) { + this.debugUnlockLevel(worldId, firstLevel.id); + } + } + + this.saveProgress(); + console.log(`✅ Svet ${worldId} bol manuálne odomknutý`); + return true; + } + + console.error(`❌ Svet ${worldId} sa nenašiel`); + return false; +} + +/** + * NOVÁ FUNKCIA: Štatistiky pre debug a admin panel + */ +getProgressStatistics() { + const stats = this.getStatistics(); + + // Pridaj detailné štatistiky svetov + const worldStats = {}; + Object.keys(this.progress.worlds).forEach(worldId => { + worldStats[worldId] = this.getDetailedWorldProgress(worldId); + }); + + return { + ...stats, + worlds: worldStats, + lastUpdated: this.progress.lastUpdated, + createdAt: this.progress.createdAt + }; +} + +} + + +// Vytvor globálnu inštanciu +window.progressManager = new ProgressManager(); + +// Export pre Node.js (ak je potrebný) +if (typeof module !== 'undefined' && module.exports) { + module.exports = ProgressManager; +} + + + + + + + + + + + + + + + + + + + + + diff --git a/js/pexeso/menu-pexeso.js b/js/pexeso/menu-pexeso.js new file mode 100644 index 0000000..d762992 --- /dev/null +++ b/js/pexeso/menu-pexeso.js @@ -0,0 +1,274 @@ + let allWords = {}; + let selectedCategory = null; + let selectedWords = []; + + async function loadAllWords() { + try { + const response = await fetch('js/pexeso/words.json'); + allWords = await response.json(); + renderCategoryList(); + selectRandomLevel(); // Select "Náhodný level" by default + preloadCustomLevelImages(); // Preload images for "Vlastný level" + } catch (error) { + console.error('Chyba pri načítání slov:', error); + } + } + + function renderCategoryList() { + const wordList = document.getElementById('wordList'); + wordList.innerHTML = ''; + document.getElementById('wordCountContainer').style.display = 'none'; + + // Přidání tlačítka pro náhodný level + const randomLevelButton = document.createElement('button'); + randomLevelButton.textContent = 'Základný level'; + randomLevelButton.classList.add('category-button'); + randomLevelButton.dataset.category = 'random'; + randomLevelButton.addEventListener('click', selectCategory); + wordList.appendChild(randomLevelButton); + + // Přidání tlačítek kategorií + Object.keys(allWords).forEach(category => { + const categoryButton = document.createElement('button'); + categoryButton.textContent = `Level ${category}`; + categoryButton.classList.add('category-button'); + categoryButton.dataset.category = category; + categoryButton.addEventListener('click', selectCategory); + wordList.appendChild(categoryButton); + }); + + // Přidání tlačítka pro vlastní level + const customLevelButton = document.createElement('button'); + customLevelButton.textContent = 'Vlastný level'; + customLevelButton.addEventListener('click', showAllWords); + wordList.appendChild(customLevelButton); + } + + function selectCategory(event) { + // Odstraň zelené zvýraznění ze všech tlačítek + document.querySelectorAll('.category-button').forEach(btn => { + btn.style.backgroundColor = ''; + }); + + // Zvýrazni vybrané tlačítko zeleně + event.target.style.backgroundColor = 'lightgreen'; + + // Ulož vybranou kategorii + selectedCategory = event.target.dataset.category; + } + + function selectRandomLevel() { + const randomLevelButton = document.querySelector('button[data-category="random"]'); + if (randomLevelButton) { + randomLevelButton.click(); + } + } + + function preloadCustomLevelImages() { + const allWordsFlat = Object.values(allWords).flat(); + allWordsFlat.forEach(word => { + const img = new Image(); + img.src = word.src; + }); + } + + function showRandomWords() { + document.getElementById('wordCountContainer').style.display = 'none'; + const wordList = document.getElementById('wordList'); + wordList.innerHTML = ''; + + // Sloučení všech slov z kategorií + const allWordsFlat = Object.values(allWords).flat(); + + // Náhodný výběr 15 slov + const randomWords = getRandomWords(allWordsFlat, 15).map(word => ({ + ...word, + selected: false + })); + + randomWords.forEach((word, index) => { + const wordItem = createWordItem(word, index); + wordList.appendChild(wordItem); + }); + + const backButton = document.createElement('button'); + backButton.textContent = 'Naspäť'; + backButton.addEventListener('click', renderCategoryList); + wordList.appendChild(backButton); + } + + function showCategoryWords(category) { + document.getElementById('wordCountContainer').style.display = 'none'; + selectedCategory = category; + const wordList = document.getElementById('wordList'); + wordList.innerHTML = ''; + + const words = allWords[category].map(word => ({ ...word, selected: false })); + + words.forEach((word, index) => { + const wordItem = createWordItem(word, index); + wordList.appendChild(wordItem); + }); + + const backButton = document.createElement('button'); + backButton.textContent = 'Naspäť'; + backButton.addEventListener('click', renderCategoryList); + wordList.appendChild(backButton); + } + + // Funkce pro náhodný výběr slov + function getRandomWords(words, count) { + // Pokud je požadovaný počet větší než počet dostupných slov, vrátí všechna slova + if (count >= words.length) return words; + + // Náhodný výběr slov + const shuffled = [...words].sort(() => 0.5 - Math.random()); + return shuffled.slice(0, count); + } + + function showAllWords() { + selectedCategory = null; + const wordList = document.getElementById('wordList'); + wordList.innerHTML = ''; + + document.getElementById('wordCountContainer').style.display = 'block'; + + const allWordsFlat = Object.values(allWords).flat().map(word => ({ ...word, selected: false })); + allWordsFlat.forEach((word, index) => { + const wordItem = createWordItem(word, index); + wordList.appendChild(wordItem); + }); + + const backButton = document.createElement('button'); + backButton.textContent = 'Naspäť'; + backButton.addEventListener('click', () => { + renderCategoryList(); + document.getElementById('wordCountContainer').style.display = 'none'; + }); + backButton.style.backgroundColor = '#ff4444'; + backButton.style.color = 'white'; + backButton.style.padding = '10px 20px'; + backButton.style.border = 'none'; + backButton.style.borderRadius = '5px'; + backButton.style.cursor = 'pointer'; + wordList.appendChild(backButton); +} + + function createWordItem(word, index) { + const wordItem = document.createElement('div'); + wordItem.className = 'word-item'; + + const checkbox = document.createElement('input'); + checkbox.type = 'checkbox'; + checkbox.id = `word-${index}`; + checkbox.checked = word.selected; + checkbox.addEventListener('change', () => toggleWordSelection(word)); + + const img = document.createElement('img'); + img.src = word.src; + img.alt = word.word; + + const label = document.createElement('label'); + label.htmlFor = `word-${index}`; + label.textContent = word.word; + + wordItem.appendChild(checkbox); + wordItem.appendChild(img); + wordItem.appendChild(label); + + return wordItem; + } + + function toggleWordSelection(word) { + if (word.selected) { + // Odstraň slovo ze selectedWords + selectedWords = selectedWords.filter(w => w !== word); + word.selected = false; + } else { + // Přidej slovo do selectedWords + selectedWords.push(word); + word.selected = true; + } + updateSelectedWordsCount(); + } + + function updateSelectedWordsCount() { + document.getElementById('selectedWordsCount').textContent = selectedWords.length; + } + + function startCustomGame() { + const playerInputs = document.querySelectorAll('#playerInputs input'); + const players = Array.from(playerInputs) + .filter(input => input.value.trim() !== '') + .map(input => ({ + name: input.value, + score: 0 + })); + + if (players.length < 1) { + alert('Musíte zadať aspoň jedného hráča.'); + return; + } + + let wordsToUse; + if (selectedCategory) { + if (selectedCategory === 'random') { + // Náhodný level + const allWordsFlat = Object.values(allWords).flat(); + wordsToUse = getRandomWords(allWordsFlat, 15); + } else { + // Náhodný výběr 15 slov z kategorie + wordsToUse = getRandomWords(allWords[selectedCategory], 15); + } + } else { + // Pro vlastní level použij vybrané slova + if (selectedWords.length < 2) { + alert('Vyberte aspoň 2 slová'); + return; + } + wordsToUse = selectedWords; + } + + const customWordsParam = encodeURIComponent(JSON.stringify(wordsToUse)); + const playersParam = encodeURIComponent(JSON.stringify(players)); + + window.location.href = `pexesocustom.html?custom=true&words=${customWordsParam}&players=${playersParam}`; + } + + function openCustomLevel() { + document.getElementById('customLevelModal').style.display = 'flex'; + } + + function closeCustomLevel() { + document.getElementById('customLevelModal').style.display = 'none'; + selectedWords = []; + updateSelectedWordsCount(); + + // Zrušení výběru všech slov + Object.values(allWords).flat().forEach(word => { + word.selected = false; + }); + } + + function addPlayer() { + const playerInputs = document.getElementById('playerInputs'); + const playerCount = playerInputs.children.length; + + if (playerCount < 4) { + const input = document.createElement('input'); + input.type = 'text'; + input.placeholder = `Hráč ${playerCount + 1}`; + input.value = `Hráč ${playerCount + 1}`; + playerInputs.appendChild(input); + } + } + + function removePlayer() { + const playerInputs = document.getElementById('playerInputs'); + if (playerInputs.children.length > 1) { + playerInputs.removeChild(playerInputs.lastChild); + } + } + + // Inicializace + document.addEventListener('DOMContentLoaded', loadAllWords); \ No newline at end of file diff --git a/js/pexeso/pexeso.js b/js/pexeso/pexeso.js new file mode 100644 index 0000000..f154a5d --- /dev/null +++ b/js/pexeso/pexeso.js @@ -0,0 +1,2308 @@ +/** + * =============================================== + * PEXESO.JS - LOGOPEDICKÁ PEXESO HRA S LEVELMI + * =============================================== + * + * Hlavný súbor pre pexeso hru podporujúcu: + * - Level systém s načítavaním z levels.js + * - Singleplayer režim pre levely + * - Multiplayer režim pre custom hry (až 4 hráči) + * - Speech recognition a rečové cvičenia + * - Stars hodnotenie system + * - Progress tracking + * + * Autor: Adam Reňak + * Verzia: 2.0 + * Dátum: 2025 + */ + + +// ========================================== +// GLOBÁLNE PREMENNÉ PRE PRELOADING +// ========================================== +let preloadedImages = {}; // Cache pre prednačítané obrázky (objekt kde kľúč je cesta k obrázku) +let totalResources = 0; // Celkový počet zdrojov na načítanie +let loadedResources = 0; // Počet už načítaných zdrojov +let isPreloadingComplete = false; // Flag či je preloading úplne hotový + +/** + * ================================================ + * HLAVNÁ FUNKCIA PRE SPUSTENIE PRELOADINGU + * ================================================ + * Táto funkcia sa spúšťa pri načítaní stránky (DOMContentLoaded). + * Postupne: + * 1. Získa konfiguráciu levelu z URL + * 2. Zbiera všetky obrázky na načítanie + * 3. Načíta všetky obrázky paralelne + * 4. Aktualizuje progress bar + * 5. Skryje loading screen a spustí hru + */ + +/** + * ================================================ + * ZÍSKANIE KONFIGURÁCIE LEVELU Z URL + * ================================================ + * Funkcia číta URL parametre a načíta konfiguráciu levelu. + * + * URL parametre: + * - worldId: ID sveta (napr. 'world_r') + * - levelId: ID levelu (napr. 'level_r_1') + * - custom: či je to custom hra (true/false) + * + * @returns {Object} Konfigurácia levelu alebo fallback konfigurácia + */ +function getLevelConfigFromURL() { + const urlParams = new URLSearchParams(window.location.search); + const worldId = urlParams.get('worldId') || urlParams.get('world'); + const levelId = urlParams.get('levelId') || urlParams.get('level'); + const isCustom = urlParams.get('custom') === 'true'; + + console.log('🔍 URL parametre:', { worldId, levelId, isCustom }); + + // Ak máme levelId, pokús sa načítať konfiguráciu z levels.js + if (levelId && typeof window.getLevelConfig === 'function') { + const config = window.getLevelConfig(levelId); + if (config) { + console.log('📋 Načítaná level konfigurácia:', config); + return config; + } + } + + // Ak je to custom hra, vráť custom konfiguráciu + if (isCustom) { + console.log('🎨 Custom hra detekovaná'); + return getCustomGameConfig(urlParams); + } + + // Fallback konfigurácia (ak nič iné nefunguje) + console.warn('⚠️ Používam fallback konfiguráciu'); + return { + id: 'fallback', + worldId: worldId || 'world_r', + words: ['rak', 'ryba', 'ruka', 'ruža', 'raja', 'rožky'], + gameConfig: { + pairs: 6, // Počet párov kariet + timeLimit: null // Bez časového limitu + } + }; +} + +/** + * ================================================ + * ZBER VŠETKÝCH OBRÁZKOV PRE PEXESO + * ================================================ + * Funkcia zbiera všetky obrázky ktoré sa používajú v pexeso hre: + * 1. Obrázky slov (karty) + * 2. Rub karty (baník) + * 3. UI elementy (menu, hviezdy, ikony) + * 4. Pozadia svetov + * 5. Základné pozadie + * + * @param {Object} levelConfig - Konfigurácia levelu + * @returns {Array} Pole ciest k obrázkom + */ +function collectAllPexesoImages(levelConfig) { + const images = []; + + console.log('📦 Zberam obrázky pre pexeso...'); + + // ========================================== + // 1. OBRÁZKY SLOV (KARTY) - najdôležitejšie! + // ========================================== + if (levelConfig && levelConfig.words && Array.isArray(levelConfig.words)) { + levelConfig.words.forEach(word => { + const imagePath = `images/slova/${word}.png`; + images.push(imagePath); + }); + console.log(` ✅ Pridaných ${levelConfig.words.length} obrázkov slov (kariet)`); + } else { + console.warn(' ⚠️ Žiadne slová v levelConfig!'); + } + + // ========================================== + // 2. RUB KARTY (BANÍK LOGO) + // ========================================== + images.push('images/banik.png'); + console.log(' ✅ Pridaný rub karty (banik.png)'); + + // ========================================== + // 3. UI ELEMENTY + // ========================================== + images.push( + 'images/menubutton.png', // Menu tlačidlo + 'images/star_active.png', // Aktívna hviezda + 'images/star_inactive.png', // Neaktívna hviezda + 'images/banik.ico' // Ikona + ); + console.log(' ✅ Pridané UI elementy (menu button, hviezdy, ikona)'); + + // ========================================== + // 4. POZADIE SVETA (ak existuje) + // ========================================== + if (levelConfig && levelConfig.worldId) { + // Mapa worldId -> cesta k obrázku pozadia + const worldBackgrounds = { + 'world_r': 'images/worlds/world_r.png', + 'world_l': 'images/worlds/world_l.png', + 'world_s': 'images/worlds/world_s.png', + 'world_z': 'images/worlds/world_z.jpg', + 'world_c': 'images/worlds/world_c.png', + 'world_š': 'images/worlds/world_sh.png', + 'world_ž': 'images/worlds/world_zh.png', + 'world_č': 'images/worlds/world_ch.png', + 'world_d': 'images/worlds/world_d.png', + 'world_t': 'images/worlds/world_t.png', + 'world_n': 'images/worlds/world_n.png', + 'world_k': 'images/worlds/world_k.png', + 'world_g': 'images/worlds/world_g.png' + }; + + const worldBg = worldBackgrounds[levelConfig.worldId]; + if (worldBg) { + images.push(worldBg); + console.log(` ✅ Pridané pozadie sveta: ${levelConfig.worldId}`); + } + } + + // ========================================== + // 5. ZÁKLADNÉ POZADIE + // ========================================== + images.push('images/pozadie.jpg'); + console.log(' ✅ Pridané základné pozadie'); + + // ========================================== + // 6. CURSOR OBRÁZKY + // ========================================== + images.push( + 'images/cursor.png', + 'images/active_cursor4.png' + ); + console.log(' ✅ Pridané cursor obrázky'); + + console.log(`📦 Celkovo zozbieraných ${images.length} obrázkov`); + return images; +} + +/** + * ================================================ + * NAČÍTANIE JEDNÉHO OBRÁZKA + * ================================================ + * Funkcia načíta jeden obrázok pomocou Promise. + * Ak je obrázok už načítaný (v cache), vráti ho. + * + * @param {string} imagePath - Cesta k obrázku + * @returns {Promise} Promise ktorý sa resolves keď je obrázok načítaný + */ +function preloadImage(imagePath) { + return new Promise((resolve) => { + // Ak už je obrázok načítaný, vráť ho z cache + if (preloadedImages[imagePath]) { + updateProgress(); // Aktualizuj progress bar + resolve(preloadedImages[imagePath]); + return; + } + + // Vytvor nový Image objekt + const img = new Image(); + + // Pri úspešnom načítaní + img.onload = () => { + preloadedImages[imagePath] = img; // Ulož do cache + updateProgress(); // Aktualizuj progress bar + console.log(`✅ Načítané: ${imagePath}`); + resolve(img); + }; + + // Pri chybe načítania (obrázok neexistuje) + img.onerror = () => { + console.warn(`⚠️ Chyba pri načítaní: ${imagePath}`); + updateProgress(); // Aktualizuj progress bar aj pri chybe + resolve(null); // Pokračuj ďalej (nechaj hru pokračovať) + }; + + // Spusti načítanie obrázka + img.src = imagePath; + }); +} + +/** + * ================================================ + * AKTUALIZÁCIA PROGRESS BARU + * ================================================ + * Funkcia aktualizuje progress bar podľa počtu načítaných zdrojov. + * Zobrazuje: + * - Percentuálny ukazovateľ (0-100%) + * - Počet načítaných zdrojov (napr. "15/20 zdrojov") + * - Textovú správu ("Načítavam obrázky..." / "Hotovo!") + */ +function updateProgress() { + loadedResources++; // Zvýš počet načítaných zdrojov + + // Vypočítaj percentuálny pokrok (zaokrúhlený na celé číslo) + const percentage = Math.round((loadedResources / totalResources) * 100); + + // ========================================== + // Aktualizuj šírku progress baru (žltý pásik) + // ========================================== + const progressFill = document.getElementById('loading-progress-fill'); + if (progressFill) { + progressFill.style.width = `${percentage}%`; + } + + // ========================================== + // Aktualizuj text s percentami (napr. "75%") + // ========================================== + const progressPercentage = document.getElementById('loading-progress-percentage'); + if (progressPercentage) { + progressPercentage.textContent = `${percentage}%`; + } + + // ========================================== + // Aktualizuj text s počtom zdrojov (napr. "15/20 zdrojov") + // ========================================== + const progressDetails = document.getElementById('loading-progress-details'); + if (progressDetails) { + progressDetails.textContent = `${loadedResources}/${totalResources} zdrojov`; + } + + // ========================================== + // Aktualizuj hlavnú loading správu + // ========================================== + const loadingMessage = document.getElementById('loading-message'); + if (loadingMessage) { + if (percentage < 100) { + loadingMessage.textContent = 'Načítavam obrázky...'; + } else { + loadingMessage.textContent = 'Hotovo! Spúšťam hru...'; + } + } + + // Log do konzoly pre debugging + console.log(`📊 Progress: ${percentage}% (${loadedResources}/${totalResources})`); +} + +/** + * ================================================ + * SKRYTIE LOADING SCREENU S ANIMÁCIOU + * ================================================ + * Funkcia skryje loading screen s fade-out animáciou. + * Najprv nastaví opacity na 0 (fade out), potom skryje element. + */ +function hideLoadingScreen() { + const loadingScreen = document.getElementById('loading-screen'); + if (loadingScreen) { + // Fade out animácia (opacity -> 0) + loadingScreen.style.opacity = '0'; + + // Po 500ms úplne skry element (display: none) + setTimeout(() => { + loadingScreen.style.display = 'none'; + }, 500); + } + console.log('👋 Loading screen skrytý, hra pripravená!'); +} + +/** + * ================================================ + * POMOCNÉ FUNKCIE PRE OSTATNÉ ČASTI KÓDU + * ================================================ + */ + +/** + * Získanie prednačítaného obrázka z cache + * @param {string} imagePath - Cesta k obrázku + * @returns {Image|null} Načítaný obrázok alebo null + */ +function getPreloadedImage(imagePath) { + return preloadedImages[imagePath] || null; +} + +/** + * Custom game konfigurácia (pre multiplayer alebo custom hry) + * @param {URLSearchParams} urlParams - URL parametre + * @returns {Object} Custom konfigurácia + */ +function getCustomGameConfig(urlParams) { + // Tu môžeš pridať logiku pre custom hry + // Napríklad načítanie slov z URL parametrov + const wordsParam = urlParams.get('words'); + let words = ['rak', 'ryba', 'ruka', 'ruža']; // Default slová + + if (wordsParam) { + try { + // Skús parsovať ako JSON (pre formát: ["slovo1","slovo2"]) + words = JSON.parse(decodeURIComponent(wordsParam)); + } catch (e) { + // Ak JSON parse zlyhá, skús split pomocou čiarky (pre formát: slovo1,slovo2) + words = wordsParam.split(',').map(w => w.trim()); + } + } + + return { + id: 'custom', + worldId: 'custom', + words: words, + gameConfig: { + pairs: Math.min(words.length, parseInt(urlParams.get('pairs')) || 6), + timeLimit: parseInt(urlParams.get('timeLimit')) || null + } + }; +} + +// ========================================== +// EXPORT PRE OSTATNÉ ČASTI KÓDU +// ========================================== +// Sprístupní funkcie globálne aby sa dali použiť v iných častiach kódu +if (typeof window !== 'undefined') { + window.preloadedImages = preloadedImages; + window.getPreloadedImage = getPreloadedImage; + window.isPreloadingComplete = isPreloadingComplete; +} + +// ========================================== +// EVENT LISTENER - SPUSTENIE PRI NAČÍTANÍ STRÁNKY +// ========================================== +// DÔLEŽITÉ: Tento kód sa musí spustiť PRED ostatným kódom v pexeso.js! +// Preto ho dávame hneď na začiatok súboru. +document.addEventListener('DOMContentLoaded', async function() { + console.log('🎮 Inicializujem pexeso hru...'); + + // 🔊 Inicializácia zvukových efektov + initializeSounds(); + + try { + // 1. Spustenie preloadingu + console.log('🎮 Spúšťam preloading pre pexeso...'); + + // Získaj konfiguráciu levelu z URL parametrov + const levelConfig = getLevelConfigFromURL(); + console.log('📋 Level config:', levelConfig); + + // Zisti všetky obrázky ktoré treba načítať + const imagesToLoad = collectAllPexesoImages(levelConfig); + + totalResources = imagesToLoad.length; + console.log(`📦 Celkovo načítavam ${totalResources} obrázkov...`); + + // Načítaj všetky obrázky paralelne + const promises = imagesToLoad.map(imagePath => preloadImage(imagePath)); + await Promise.all(promises); + + console.log('✅ Všetky obrázky úspešne načítané!'); + isPreloadingComplete = true; + + // 2. Po preloadingu - skrytie loading screen a inicializácia hry + setTimeout(() => { + hideLoadingScreen(); + + // 3. Získanie parametrov z URL a inicializácia správnej hry + const params = getURLParameters(); + + if (params.custom) { + // Custom hra s vlastnými parametrami + initCustomGame(params); + } else if (params.worldId && params.levelId) { + // Level hra z worlds menu + initLevelGame(params.worldId, params.levelId); + } else { + // Fallback - ukážková hra + initDemoGame(); + } + + // 4. Nastavenie speech recognition + setupSpeechRecognition(); + + // 5. Nastavenie event listenerov + setupEventListeners(); + }, 500); + + } catch (error) { + console.error('❌ Chyba pri preloadingu:', error); + // Aj pri chybe spusti hru (aby hra fungovala aj s chybami) + hideLoadingScreen(); + + // Získanie parametrov z URL + const params = getURLParameters(); + + if (params.custom) { + initCustomGame(params); + } else if (params.worldId && params.levelId) { + initLevelGame(params.worldId, params.levelId); + } else { + initDemoGame(); + } + + setupSpeechRecognition(); + setupEventListeners(); + } +}); + +// ========================================== +// GLOBÁLNE PREMENNÉ A KONFIGURÁCIA +// ========================================== + +let currentLevel = null; // Aktuálny level config +let gameState = null; // Stav hry +let gameCards = []; // Pole všetkých kariet +let flippedCards = []; // Práve otočené karty +let matchedPairs = 0; // Počet nájdených párov +let totalPairs = 0; // Celkový počet párov +let gameTime = 0; // Herný čas v sekundách +let gameAttempts = 0; // Počet pokusov +let timerInterval = null; // Interval pre časovač +let isProcessingMatch = false; // Zamedzenie viacnásobného klikania +let speechAttempts = 0; // Pokusy na speech recognition +let maxSpeechAttempts = 3; // Maximálny počet pokusov +let correctSpeechCount = 0; // Počet správne vyslovenych slov + +// Multiplayer premenné +let players = []; // Pole hráčov (pre custom hry) +let currentPlayerIndex = 0; // Index aktuálneho hráča +let isMultiplayerMode = false; // Či je multiplayer režim + +// Speech recognition +let recognition = null; // Speech recognition objekt + +// ========================================== +// 🔊 ZVUKOVÝ SYSTÉM +// ========================================== + +// Zvukové efekty pre pexeso hru +let sounds = { + flipCard: null, // Otočenie karty - flipcard.mp3 + matchFound: null, // Nájdený pár - collectpoints.mp3 + matchWrong: null, // Nenájdený pár - incorrect.mp3 + speechCorrect: null, // Správna výslovnosť - spravne.mp3 + speechWrong: null, // Nesprávna výslovnosť - zle.mp3 + gameEnd: null, // Koniec hry/výhra - winfantasia.mp3 + mouseClick: null, // Kliknutie myšou - mouseclick.mp3 + tickTock: null // Tick-tock posledných 10s - clock-tic-tac.mp3 +}; + +/** + * Inicializácia zvukových efektov pomocou Howler.js + */ +function initializeSounds() { + console.log('🔊 Inicializujem zvukové efekty...'); + + try { + // Kontrola či je Howler.js načítaný + if (typeof Howl === 'undefined') { + console.warn('⚠️ Howler.js nie je načítaný! Zvuky nebudú fungovať.'); + return; + } + + // Otočenie karty + sounds.flipCard = new Howl({ + src: ['zvuky/effects/flipcard.mp3'], + volume: 0.5, + onloaderror: () => console.warn('⚠️ Nepodarilo sa načítať: flipcard.mp3') + }); + + // Nájdený pár + sounds.matchFound = new Howl({ + src: ['zvuky/effects/collectpoints.mp3'], + volume: 0.5, + onloaderror: () => console.warn('⚠️ Nepodarilo sa načítať: collectpoints.mp3') + }); + + // Nenájdený pár + sounds.matchWrong = new Howl({ + src: ['zvuky/effects/incorrect.mp3'], + volume: 0.5, + onloaderror: () => console.warn('⚠️ Nepodarilo sa načítať: incorrect.mp3') + }); + + // Správna výslovnosť + sounds.speechCorrect = new Howl({ + src: ['zvuky/effects/spravne.mp3'], + volume: 0.5, + onloaderror: () => console.warn('⚠️ Nepodarilo sa načítať: spravne.mp3') + }); + + // Nesprávna výslovnosť + sounds.speechWrong = new Howl({ + src: ['zvuky/effects/zle.mp3'], + volume: 0.5, + onloaderror: () => console.warn('⚠️ Nepodarilo sa načítať: zle.mp3') + }); + + // Koniec hry / výhra + sounds.gameEnd = new Howl({ + src: ['zvuky/effects/winfantasia.mp3'], + volume: 0.5, + onloaderror: () => console.warn('⚠️ Nepodarilo sa načítať: winfantasia.mp3') + }); + + // Kliknutie myšou + sounds.mouseClick = new Howl({ + src: ['zvuky/effects/mouseclick.mp3'], + volume: 0.1, + onloaderror: () => console.warn('⚠️ Nepodarilo sa načítať: mouseclick.mp3') + }); + + // Tick-tock (posledných 10 sekúnd) + sounds.tickTock = new Howl({ + src: ['zvuky/effects/timer-20.mp3'], + volume: 0.4, + loop: true, // Opakuje sa kým sa nezastaví + onloaderror: () => console.warn('⚠️ Nepodarilo sa načítať: clock-tic-tac.mp3') + }); + + console.log('✅ Zvukové efekty načítané'); + + } catch (error) { + console.error('❌ Chyba pri inicializácii zvukov:', error); + } +} + +/** + * Prehranie zvukového efektu + * @param {string} soundKey - Kľúč zvuku (napr. 'flipCard') + */ +function playSound(soundKey) { + try { + const sound = sounds[soundKey]; + + if (!sound) { + console.warn(`⚠️ Zvuk "${soundKey}" neexistuje`); + return; + } + + // Pre tick-tock používame play/stop, nie restart + if (soundKey === 'tickTock') { + if (!sound.playing()) { + sound.play(); + } + } else { + // Pre ostatné zvuky - zastavíme a znova prehrávame + if (sound.playing()) { + sound.stop(); + } + sound.play(); + } + + } catch (error) { + console.warn(`⚠️ Chyba pri prehrávaní zvuku "${soundKey}":`, error); + } +} + +/** + * Zastavenie zvukového efektu + * @param {string} soundKey - Kľúč zvuku (napr. 'tickTock') + */ +function stopSound(soundKey) { + try { + const sound = sounds[soundKey]; + + if (!sound) { + return; + } + + if (sound.playing()) { + sound.stop(); + } + + } catch (error) { + console.warn(`⚠️ Chyba pri zastavení zvuku "${soundKey}":`, error); + } +} + + +// ========================================== +// INICIALIZÁCIA HRY +// ========================================== + +/** + * Hlavná inicializačná funkcia - spúšťa sa pri načítaní stránky + */ + +/** + * Získanie parametrov z URL + * @returns {Object} Objekt s URL parametrami + */ +function getURLParameters() { + const urlParams = new URLSearchParams(window.location.search); + return { + custom: urlParams.get('custom') === 'true', + worldId: urlParams.get('worldId'), + levelId: urlParams.get('levelId'), + words: urlParams.get('words'), + players: urlParams.get('players'), + pairs: parseInt(urlParams.get('pairs')) || 10, + timeLimit: parseInt(urlParams.get('timeLimit')) || null + }; +} + +// ========================================== +// INICIALIZÁCIA RÔZNYCH TYPOV HIER +// ========================================== + +/** + * Inicializácia level hry z worlds menu + * @param {string} worldId - ID sveta + * @param {string} levelId - ID levelu + */ +function initLevelGame(worldId, levelId) { + console.log(`🌍 Načítavam level: ${worldId} - ${levelId}`); + + // Získanie level configu + if (typeof getLevelConfig === 'function') { + currentLevel = getLevelConfig(levelId); + } + + if (!currentLevel) { + console.error('❌ Level sa nepodarilo načítať!'); + showErrorMessage('Level sa nepodarilo načítať. Vraciam sa na menu.'); + setTimeout(() => { + window.location.href = 'worldsmenu.html'; + }, 3000); + return; + } + + // Nastavenie hry pre singleplayer level + isMultiplayerMode = false; + players = [{ name: 'Hráč', score: 0 }]; + + // Nastavenie počtu párov z level configu + if (currentLevel.gameConfig && currentLevel.gameConfig.pairs) { + totalPairs = currentLevel.gameConfig.pairs; + } else { + totalPairs = 8; // Defaultná hodnota + } + + // Inicializácia hry + initGame(); +} + +/** + * Inicializácia custom hry s vlastnými parametrami + * @param {Object} params - Parametre z URL + */ +function initCustomGame(params) { + console.log('🎨 Načítavam custom hru...'); + + // Parsovanie slov a hráčov z URL + let customWords = []; + let customPlayers = []; + + try { + if (params.words) { + customWords = JSON.parse(decodeURIComponent(params.words)); + } + if (params.players) { + customPlayers = JSON.parse(decodeURIComponent(params.players)); + } + } catch (error) { + console.error('❌ Chyba pri parsovaní custom parametrov:', error); + } + + // Vytvorenie fake level configu pre custom hru + currentLevel = { + id: 'custom', + name: 'Custom hra', + words: customWords.length > 0 ? customWords : ['rak', 'ryba', 'ruka', 'ráno'], // fallback + gameConfig: { + pairs: params.pairs || Math.min(customWords.length, 8) + }, + timeLimit: params.timeLimit + }; + + // Nastavenie multiplayer režimu + if (customPlayers.length > 1) { + isMultiplayerMode = true; + players = customPlayers; + } else { + isMultiplayerMode = false; + players = [{ name: customPlayers[0]?.name || 'Hráč', score: 0 }]; + } + + totalPairs = currentLevel.gameConfig.pairs; + + // Inicializácia hry + initGame(); +} + +/** + * Inicializácia demo hry (fallback) + */ +function initDemoGame() { + console.log('🎯 Spúšťam demo hru...'); + + // Vytvorenie demo level configu + currentLevel = { + id: 'demo', + name: 'Demo hra', + words: ['rak', 'ryba', 'ruka', 'rakva', 'rádio', 'krava', 'drak', 'zebra', 'tiger', 'traktor'], + gameConfig: { + pairs: 8 + }, + timeLimit: null + }; + + isMultiplayerMode = false; + players = [{ name: 'Hráč', score: 0 }]; + totalPairs = 8; + + initGame(); +} + +// ========================================== +// HLAVNÁ HERNÁ LOGIKA +// ========================================== + +/** + * Hlavná inicializačná funkcia hry + */ +function initGame() { + console.log('🚀 Inicializujem hernú logiku...'); + + // Reset stavu hry + resetGameState(); + + // Aktualizácia UI + updateTopPanel(); + updateSidePanel(); + + // Generovanie herného poľa + generateGameBoard(); + + // Spustenie časovača + startGameTimer(); + + console.log('✅ Hra je pripravená!'); +} + +/** + * Reset všetkých herných premenných + */ +function resetGameState() { + gameCards = []; + flippedCards = []; + matchedPairs = 0; + gameTime = 0; + gameAttempts = 0; + isProcessingMatch = false; + speechAttempts = 0; + correctSpeechCount = 0; + currentPlayerIndex = 0; + + // Reset skóre hráčov + players.forEach(player => player.score = 0); + + // Zastavenie existujúceho časovača + if (timerInterval) { + clearInterval(timerInterval); + timerInterval = null; + } +} + +/** + * Aktualizácia horného panelu s časom a pokusmi + */ +function updateTopPanel() { + // Aktualizácia času + const timeElement = document.getElementById('game-time'); + if (timeElement) { + const minutes = Math.floor(gameTime / 60); + const seconds = gameTime % 60; + timeElement.textContent = `${minutes}:${seconds.toString().padStart(2, '0')}`; + } + + // Aktualizácia pokusov + const attemptsElement = document.getElementById('game-attempts'); + if (attemptsElement) { + attemptsElement.textContent = gameAttempts.toString(); + } +} + +/** + * Aktualizácia bočného panelu s hráčmi + */ +function updateSidePanel() { + const sidePanels = document.querySelectorAll('.players-panel'); + + sidePanels.forEach((panel, index) => { + if (index < players.length) { + // Zobrazenie hráča + panel.style.display = 'flex'; + + const nameElement = panel.querySelector('.name h1'); + const scoreElement = panel.querySelector('.score span'); + + if (nameElement) nameElement.textContent = players[index].name; + if (scoreElement) scoreElement.textContent = players[index].score.toString(); + + // Zvýraznenie aktuálneho hráča + if (isMultiplayerMode && index === currentPlayerIndex) { + panel.style.border = '4px solid #ECCF17'; + panel.style.boxShadow = '0 0 20px 2px #ECCF17 inset'; + } else { + panel.style.border = '4px solid #AC3F0B'; + panel.style.boxShadow = 'none'; + } + } else { + // Skrytie nepotrebných panelov + panel.style.display = 'none'; + } + }); +} + +// ========================================== +// GENEROVANIE HERNÉHO POĽA +// ========================================== + +/** + * Hlavná funkcia pre generovanie herného poľa s kartami + */ +function generateGameBoard() { + console.log('🃏 Generujem herné pole...'); + + // Výber slov pre hru + const selectedWords = selectWordsForGame(); + + // Vytvorenie párov kariet + gameCards = createCardPairs(selectedWords); + + // Zamichanie kariet + shuffleArray(gameCards); + + // Vykreslenie kariet na obrazovku + renderGameBoard(); + + console.log(`✅ Vygenerované ${gameCards.length} kariet (${totalPairs} párov)`); +} + +/** + * Výber slov pre aktuálnu hru + * @returns {Array} Pole vybraných slov + */ +function selectWordsForGame() { + let availableWords = currentLevel.words || []; + + // Ak nemáme dostatok slov, pridáme duplicity + while (availableWords.length < totalPairs) { + availableWords = [...availableWords, ...currentLevel.words]; + } + + // Náhodný výber požadovaného počtu slov + const shuffled = [...availableWords]; + shuffleArray(shuffled); + + return shuffled.slice(0, totalPairs); +} + +/** + * Vytvorenie párov kariet z vybraných slov + * @param {Array} words - Pole slov + * @returns {Array} Pole objektov kariet + */ +function createCardPairs(words) { + const cards = []; + let cardId = 0; + + // Pre každé slovo vytvoríme 2 karty (pár) + words.forEach(word => { + // Prvá karta páru + cards.push({ + id: cardId++, + word: word, + imagePath: `images/slova/${word}.png`, + isFlipped: false, + isMatched: false, + pairId: word // Identifikátor páru + }); + + // Druhá karta páru + cards.push({ + id: cardId++, + word: word, + imagePath: `images/slova/${word}.png`, + isFlipped: false, + isMatched: false, + pairId: word + }); + }); + + return cards; +} + +/** + * Vykreslenie herného poľa do DOM + */ +function renderGameBoard() { + const gameCanvas = document.getElementById('gameCanvas'); + if (!gameCanvas) { + console.error('❌ gameCanvas element nenájdený!'); + return; + } + + // Vyčistenie existujúceho obsahu + gameCanvas.innerHTML = ''; + + // Pridanie CSS triedy pre správnu veľkosť kariet + gameCanvas.className = `cards-${gameCards.length}`; + + // Vytvorenie a pridanie kariet + gameCards.forEach((cardData, index) => { + const cardElement = createCardElement(cardData, index); + gameCanvas.appendChild(cardElement); + }); +} + +/** + * Vytvorenie HTML elementu pre jednu kartu + * @param {Object} cardData - Dáta karty + * @param {number} index - Index karty + * @returns {HTMLElement} HTML element karty + */ +function createCardElement(cardData, index) { + // Hlavný kontajner karty + const cardContainer = document.createElement('div'); + cardContainer.className = 'card-container'; + cardContainer.dataset.cardId = cardData.id; + cardContainer.dataset.pairId = cardData.pairId; + + // Obrázok karty - na začiatku baník, po otočení slovo + const cardImage = document.createElement('img'); + cardImage.src = 'images/banik.png'; // Zadná strana - baník + cardImage.alt = 'Pexeso karta'; + cardImage.className = 'card-image'; + cardImage.dataset.wordImage = cardData.imagePath; // Uložíme cestu k slovu + + // Text karty + const cardText = document.createElement('span'); + cardText.textContent = 'PEXESO'; + cardText.className = 'card-text'; + cardText.dataset.wordText = cardData.word; // Uložíme text slova + + // Pridanie obsahu do kontajnera + cardContainer.appendChild(cardImage); + cardContainer.appendChild(cardText); + + // Event listener pre kliknutie na kartu + cardContainer.addEventListener('click', () => handleCardClick(cardData.id)); + + return cardContainer; +} + +// ========================================== +// HERNÉ MECHANIZMY - OTÁČANIE KARIET +// ========================================== + +/** + * Spracovanie kliknutia na kartu + * @param {number} cardId - ID kliknutej karty + */ +function handleCardClick(cardId) { + console.log(`🖱️ Klik na kartu ID: ${cardId}`); + + // Kontroly pred otočením karty + if (isProcessingMatch) { + console.log('⏳ Spracovávam match, ignorujem klik'); + return; + } + + const card = gameCards.find(c => c.id === cardId); + if (!card) { + console.error('❌ Karta nebola nájdená!'); + return; + } + + if (card.isFlipped || card.isMatched) { + console.log('ℹ️ Karta už je otočená alebo nájdená'); + return; + } + + if (flippedCards.length >= 2) { + console.log('ℹ️ Už sú otočené 2 karty'); + return; + } + + // Otočenie karty + flipCard(cardId); + + // Kontrola na zhodu ak sú otočené 2 karty + if (flippedCards.length === 2) { + gameAttempts++; + updateTopPanel(); + + setTimeout(() => { + checkCardMatch(); + }, 600); // Skrátené z 1000ms na 600ms + } +} + +/** + * Otočenie konkrétnej karty + * @param {number} cardId - ID karty na otočenie + */ +function flipCard(cardId) { + const card = gameCards.find(c => c.id === cardId); + const cardElement = document.querySelector(`[data-card-id="${cardId}"]`); + + if (!card || !cardElement) return; + + // Zmena stavu karty + card.isFlipped = true; + flippedCards.push(card); + + // 🔊 Zvuk otočenia karty + playSound('flipCard'); + + // Animácia otočenia karty (bez problémového "fix") + cardElement.classList.add('flipping'); + + setTimeout(() => { + // Zmena obrázka z baníka na slovo - použijeme prednačítaný obrázok z cache + const image = cardElement.querySelector('.card-image'); + const text = cardElement.querySelector('.card-text'); + + if (image) { + const wordImagePath = image.dataset.wordImage; + // Ak existuje prednačítaný obrázok v cache, použijeme jeho src + if (preloadedImages[wordImagePath]) { + image.src = preloadedImages[wordImagePath].src; + } else { + // Fallback - ak z nejakého dôvodu nie je obrázok v cache + image.src = wordImagePath; + } + } + if (text) text.textContent = text.dataset.wordText; // Zmena na text slova + + // Pridanie CSS triedy pre otočenú kartu + cardElement.classList.add('flipped'); + cardElement.classList.remove('flipping'); + }, 150); // Polovica animácie + + console.log(`✅ Karta otočená: ${card.word}`); +} + +/** + * Kontrola zhody medzi dvoma otočenými kartami + */ +function checkCardMatch() { + if (flippedCards.length !== 2) return; + + isProcessingMatch = true; + + const [card1, card2] = flippedCards; + + console.log(`🔍 Kontrolujem zhodu: ${card1.word} vs ${card2.word}`); + + if (card1.pairId === card2.pairId) { + // Zhoda nájdená! + handleMatchFound(card1, card2); + } else { + // Zhoda nenájdená + handleMatchNotFound(card1, card2); + } +} + +/** + * Spracovanie nájdenej zhody + * @param {Object} card1 - Prvá karta páru + * @param {Object} card2 - Druhá karta páru + */ +function handleMatchFound(card1, card2) { + console.log(`🎉 Pár nájdený: ${card1.word}!`); + + // 🔊 Zvuk nájdeného páru + playSound('matchFound'); + + // Označenie kariet ako nájdených + card1.isMatched = true; + card2.isMatched = true; + matchedPairs++; + + // Vizuálne označenie nájdených kariet (bez opacity - to príde až po správnej odpovedi) + const card1Element = document.querySelector(`[data-card-id="${card1.id}"]`); + const card2Element = document.querySelector(`[data-card-id="${card2.id}"]`); + + if (card1Element) { + card1Element.classList.add('matched'); + } + if (card2Element) { + card2Element.classList.add('matched'); + } + + // BOD SA NEPRIPOČÍTAVA! Pripočíta sa až po správnej odpovedi v completeSpeechExercise() + // Aktualizácia zobrazenia side panelu (bez zmeny skóre) + updateSidePanel(); + + // Spustenie rečového cvičenia + startSpeechExercise(card1.word); +} + +/** + * Spracovanie nenájdenej zhody + * @param {Object} card1 - Prvá karta + * @param {Object} card2 - Druhá karta + */ +function handleMatchNotFound(card1, card2) { + console.log(`❌ Pár nenájdený: ${card1.word} vs ${card2.word}`); + + // 🔊 Zvuk nenájdeného páru + playSound('matchWrong'); + + // Pridanie animácie pre nesprávne páry + const card1Element = document.querySelector(`[data-card-id="${card1.id}"]`); + const card2Element = document.querySelector(`[data-card-id="${card2.id}"]`); + + if (card1Element) { + card1Element.classList.add('wrong-match'); + setTimeout(() => card1Element.classList.remove('wrong-match'), 500); + } + if (card2Element) { + card2Element.classList.add('wrong-match'); + setTimeout(() => card2Element.classList.remove('wrong-match'), 500); + } + + // Otočenie kariet späť po kratšom čase + setTimeout(() => { + flipCardBack(card1.id); + flipCardBack(card2.id); + + // Prepnutie hráča v multiplayer režime + if (isMultiplayerMode) { + switchToNextPlayer(); + } + + resetFlippedCards(); + }, 1000); // Trochu dlhšie kvôli animácii wrong-match +} + +/** + * Otočenie karty späť (zakrytie) + * @param {number} cardId - ID karty + */ +function flipCardBack(cardId) { + const card = gameCards.find(c => c.id === cardId); + const cardElement = document.querySelector(`[data-card-id="${cardId}"]`); + + if (!card || !cardElement) return; + + // Zmena stavu karty + card.isFlipped = false; + + // Animácia otočenia karty späť + cardElement.classList.add('flipping'); + + setTimeout(() => { + // Zmena obrázka späť na baníka a textu na PEXESO + const image = cardElement.querySelector('.card-image'); + const text = cardElement.querySelector('.card-text'); + + if (image) image.src = 'images/banik.png'; // Zmena späť na baníka + if (text) text.textContent = 'PEXESO'; // Zmena späť na PEXESO + + // Odstránenie CSS triedy + cardElement.classList.remove('flipped'); + cardElement.classList.remove('flipping'); + }, 150); // Polovica animácie +} + +/** + * Reset zoznamu otočených kariet + */ +function resetFlippedCards() { + flippedCards = []; + isProcessingMatch = false; +} + +/** + * Prepnutie na ďalšieho hráča (multiplayer) + */ +function switchToNextPlayer() { + if (!isMultiplayerMode) return; + + currentPlayerIndex = (currentPlayerIndex + 1) % players.length; + updateSidePanel(); + + console.log(`🔄 Hráč na rade: ${players[currentPlayerIndex].name}`); +} + +// ========================================== +// REČOVÉ CVIČENIA +// ========================================== + +/** + * Spustenie rečového cvičenia pre dané slovo + * @param {string} word - Slovo na precvičenie + */ +function startSpeechExercise(word) { + console.log(`🎤 Spúšťam rečové cvičenie pre slovo: ${word}`); + + // ⏰ Zastavenie časovača počas rečového cvičenia + stopGameTimer(); + + // Zobrazenie modalu pre cvičenie + showSpeechExerciseModal(word); + + // Reset pokusov + speechAttempts = 0; +} + +/** + * Zobrazenie modalu pre rečové cvičenie + * @param {string} word - Slovo na precvičenie + */ +function showSpeechExerciseModal(word) { + const modal = document.getElementById('cvicenie'); + const wordDisplay = document.getElementById('word-display'); + const image = document.getElementById('cvicenie-image'); + const button = document.getElementById('rozpoznanie'); + + if (!modal || !wordDisplay || !image || !button) { + console.error('❌ Modal elementy pre cvičenie nenájdené!'); + completeSpeechExercise(true); // Pokračuj bez cvičenia + return; + } + + // Nastavenie obsahu modalu + wordDisplay.textContent = word.toUpperCase(); + image.src = `images/slova/${word}.png`; + image.alt = word; + + // Zobrazenie modalu + modal.style.display = 'block'; + + // Event listener pre tlačidlo + button.onclick = () => startListening(word); +} + +/** + * Skrytie modalu pre rečové cvičenie + */ +function hideSpeechExerciseModal() { + const modal = document.getElementById('cvicenie'); + if (modal) { + modal.style.display = 'none'; + } +} + +// ========================================== +// SPEECH RECOGNITION +// ========================================== + +/** + * Nastavenie speech recognition + */ +function setupSpeechRecognition() { + if ('webkitSpeechRecognition' in window || 'SpeechRecognition' in window) { + const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition; + recognition = new SpeechRecognition(); + + recognition.continuous = false; + recognition.interimResults = false; + recognition.lang = 'sk-SK'; + + recognition.onstart = handleRecognitionStart; + recognition.onresult = handleRecognitionResult; + recognition.onend = handleRecognitionEnd; + recognition.onerror = handleRecognitionError; + + console.log('✅ Speech recognition nastavené'); + } else { + console.warn('⚠️ Speech recognition nie je podporované'); + } +} + +/** + * Začiatok počúvania + * @param {string} expectedWord - Očakávané slovo + */ +function startListening(expectedWord) { + if (!recognition) { + console.error('❌ Speech recognition nie je dostupné'); + return; + } + + console.log(`🎤 Začínam počúvať slovo: ${expectedWord}`); + + // Nastavenie očakávaného slova + recognition.expectedWord = expectedWord; + + // Spustenie rozpoznávania + try { + recognition.start(); + updateListeningButton(true); + } catch (error) { + console.error('❌ Chyba pri spustení rozpoznávania:', error); + } +} + +/** + * Spracovanie začiatku rozpoznávania + */ +function handleRecognitionStart() { + console.log('🎤 Rozpoznávanie spustené'); + updateListeningButton(true); +} + +/** + * Spracovanie výsledku rozpoznávania + * @param {SpeechRecognitionEvent} event - Event s výsledkom + */ +function handleRecognitionResult(event) { + const result = event.results[0][0].transcript.toLowerCase().trim(); + const expectedWord = recognition.expectedWord.toLowerCase(); + + console.log(`🗣️ Rozpoznané: "${result}", očakávané: "${expectedWord}"`); + + speechAttempts++; + + if (result.includes(expectedWord) || expectedWord.includes(result)) { + // Správne vyslovené + handleCorrectSpeech(); + } else { + // Nesprávne vyslovené + handleIncorrectSpeech(result, expectedWord); + } +} + +/** + * Spracovanie správnej výslovnosti + */ +function handleCorrectSpeech() { + console.log('✅ Slovo správne vyslovené!'); + + correctSpeechCount++; + + // 🔊 Zvuk správnej výslovnosti + playSound('speechCorrect'); + showSpeechFeedback(true); + + setTimeout(() => { + completeSpeechExercise(true); + }, 1500); // Skrátené z 2000ms na 1500ms +} + +/** + * Spracovanie nesprávnej výslovnosti + * @param {string} spokenWord - Vyslovené slovo + * @param {string} expectedWord - Očakávané slovo + */ +function handleIncorrectSpeech(spokenWord, expectedWord) { + console.log(`❌ Nesprávne vyslovené. Pokus ${speechAttempts}/${maxSpeechAttempts}`); + + // 🔊 Zvuk nesprávnej výslovnosti + playSound('speechWrong'); + + showSpeechFeedback(false, speechAttempts, maxSpeechAttempts); + + if (speechAttempts >= maxSpeechAttempts) { + // Vyčerpané pokusy + setTimeout(() => { + completeSpeechExercise(false); + }, 1500); // Skrátené z 2000ms na 1500ms + } else { + // Ďalší pokus + setTimeout(() => { + hideSpeechFeedback(); + }, 1500); // Skrátené z 2000ms na 1500ms + } +} + +/** + * Spracovanie konca rozpoznávania + */ +function handleRecognitionEnd() { + console.log('🎤 Rozpoznávanie ukončené'); + updateListeningButton(false); +} + +/** + * Spracovanie chyby rozpoznávania + * @param {SpeechRecognitionEvent} event - Error event + */ +function handleRecognitionError(event) { + console.error('❌ Chyba rozpoznávania:', event.error); + updateListeningButton(false); + + // Pri chybe ukončíme cvičenie + setTimeout(() => { + completeSpeechExercise(false); + }, 1000); +} + +/** + * Aktualizácia tlačidla počúvania + * @param {boolean} isListening - Či práve počúvame + */ +function updateListeningButton(isListening) { + const button = document.getElementById('rozpoznanie'); + const buttonContainer = button?.parentElement; + + if (!button || !buttonContainer) return; + + if (isListening) { + buttonContainer.classList.add('recording'); + button.querySelector('a').textContent = 'POČÚVAM...'; + } else { + buttonContainer.classList.remove('recording'); + button.querySelector('a').textContent = 'HOVORIŤ'; + } +} + +/** + * Zobrazenie feedback-u po rečovom cvičení + * @param {boolean} isCorrect - Či bolo slovo správne vyslovené + * @param {number} attempt - Aktuálny pokus (voliteľné) + * @param {number} maxAttempts - Maximálny počet pokusov (voliteľné) + */ +function showSpeechFeedback(isCorrect, attempt = null, maxAttempts = null) { + const vysledokDiv = document.getElementById('vysledok'); + if (!vysledokDiv) return; + + let content = ''; + + if (isCorrect) { + // Správna odpoveď + content = ` +
    + Správne +
    + VÝBORNE! +
    +
    + `; + } else { + // Nesprávna odpoveď + const remainingAttempts = maxAttempts - attempt; + content = ` +
    + Nesprávne +
    + SKÚSTE ZNOVA + ${remainingAttempts > 0 ? + `
    Zostávajú ${remainingAttempts} pokusy` : + `
    Žiadne pokusy nezostali` + } +
    +
    + `; + } + + vysledokDiv.innerHTML = content; + vysledokDiv.classList.add('show'); +} + +/** + * Skrytie speech feedback-u + */ +function hideSpeechFeedback() { + const vysledokDiv = document.getElementById('vysledok'); + if (vysledokDiv) { + vysledokDiv.classList.remove('show'); + vysledokDiv.innerHTML = ''; + } +} + +/** + * Dokončenie rečového cvičenia + * @param {boolean} wasSuccessful - Či bolo cvičenie úspešné + */ +function completeSpeechExercise(wasSuccessful) { + console.log(`🎯 Rečové cvičenie dokončené. Úspech: ${wasSuccessful}`); + + // Skrytie modalu + hideSpeechExerciseModal(); + hideSpeechFeedback(); + + // ⏰ Obnovenie časovača po rečovom cvičení + resumeGameTimer(); + + // Ak bolo rečové cvičenie neúspešné, otočíme karty späť + if (!wasSuccessful && flippedCards.length === 2) { + // Otočenie kariet späť po neúspešnom rečovom cvičení + setTimeout(() => { + const [card1, card2] = flippedCards; + + // Zmeníme stav kariet + card1.isMatched = false; + card2.isMatched = false; + matchedPairs--; + + // Vizuálne odstránenie matched triedy a opacity + const card1Element = document.querySelector(`[data-card-id="${card1.id}"]`); + const card2Element = document.querySelector(`[data-card-id="${card2.id}"]`); + + if (card1Element) { + card1Element.classList.remove('matched'); + card1Element.style.opacity = '1'; // Vrátenie plnej opacity + } + if (card2Element) { + card2Element.classList.remove('matched'); + card2Element.style.opacity = '1'; // Vrátenie plnej opacity + } + + // Otočenie kariet späť + flipCardBack(card1.id); + flipCardBack(card2.id); + + // Prepnutie hráča ak je multiplayer + if (isMultiplayerMode) { + switchToNextPlayer(); + } + + // BOD SA NEODČÍTAVA - nebol nikdy pridaný! + // Aktualizácia zobrazenia side panelu + updateSidePanel(); + + resetFlippedCards(); + }, 500); + } else if (wasSuccessful && flippedCards.length === 2) { + // Pri úspešnom cvičení nastavíme opacity 0.5 pre nájdené páry + const [card1, card2] = flippedCards; + + const card1Element = document.querySelector(`[data-card-id="${card1.id}"]`); + const card2Element = document.querySelector(`[data-card-id="${card2.id}"]`); + + if (card1Element) { + card1Element.style.opacity = '0.5'; // Zníženie opacity po správnej odpovedi + } + if (card2Element) { + card2Element.style.opacity = '0.5'; // Zníženie opacity po správnej odpovedi + } + + // TERAZ PRIDÁME BOD HRÁČOVI - len pri úspešnom cvičení! + if (isMultiplayerMode) { + players[currentPlayerIndex].score++; + } else { + // Pre single player mode + if (players[0]) { + players[0].score++; + } + } + + // Aktualizácia zobrazenia side panelu s novým skóre + updateSidePanel(); + + // Reset flipped cards pre úspešné cvičenie + resetFlippedCards(); + } else { + // Reset flipped cards + resetFlippedCards(); + } + + // Kontrola konca hry + if (matchedPairs >= totalPairs && wasSuccessful) { + setTimeout(() => { + endGame(); + }, 500); + } +} + +// ========================================== +// ČASOVAČ A HERNÝ ČAS +// ========================================== + +/** + * Spustenie herného časovača + */ +function startGameTimer() { + if (timerInterval) { + clearInterval(timerInterval); + } + + // Ak je nastavený časový limit, začíname odpočítavaním + if (currentLevel.timeLimit) { + gameTime = currentLevel.timeLimit; // Nastavíme čas na časový limit (odpočítavanie) + } else { + gameTime = 0; // Normálne počítanie od nuly + } + + timerInterval = setInterval(() => { + // Ak je nastavený časový limit, odpočítavame + if (currentLevel.timeLimit) { + gameTime--; // Odpočítavanie času od časového limitu k nule + + // Kontrola či čas vypršal + if (gameTime <= 0) { + gameTime = 0; // Zaistíme, že čas nebude záporný + console.log('⏰ Čas vypršal!'); + endGameTimeOut(); + } + } else { + gameTime++; // Normálne počítanie času od nuly nahor + } + + + // 🔊 Tick-tock efekt posledných 10 sekúnd (len pri countdown) + if (currentLevel.timeLimit && gameTime <= 10 && gameTime > 0) { + playSound('tickTock'); + } else { + stopSound('tickTock'); + } + updateTopPanel(); // Aktualizácia zobrazenia času + }, 1000); + + console.log('⏰ Časovač spustený'); +} + +/** + * Obnovenie herného časovača po pauze (bez resetovania času) + */ +function resumeGameTimer() { + console.log('⏰ RESUME: Začínam obnovovať časovač...'); + console.log('⏰ RESUME: currentLevel:', currentLevel); + console.log('⏰ RESUME: currentLevel.timeLimit:', currentLevel?.timeLimit); + console.log('⏰ RESUME: gameTime pred obnovením:', gameTime); + console.log('⏰ RESUME: timerInterval pred clear:', timerInterval); + + if (timerInterval) { + clearInterval(timerInterval); + console.log('⏰ RESUME: Starý interval vyčistený'); + } + + // Spustenie intervalu bez resetovania gameTime + timerInterval = setInterval(() => { + // Ak je nastavený časový limit, odpočítavame + if (currentLevel.timeLimit) { + gameTime--; // Odpočítavanie času od časového limitu k nule + + // Kontrola či čas vypršal + if (gameTime <= 0) { + gameTime = 0; // Zaistíme, že čas nebude záporný + console.log('⏰ Čas vypršal!'); + endGameTimeOut(); + } + } else { + gameTime++; // Normálne počítanie času od nuly nahor + } + + + // 🔊 Tick-tock efekt posledných 10 sekúnd (len pri countdown) + if (currentLevel.timeLimit && gameTime <= 10 && gameTime > 0) { + playSound('tickTock'); + } else { + stopSound('tickTock'); + } + updateTopPanel(); // Aktualizácia zobrazenia času + }, 1000); + + console.log('⏰ RESUME: Nový interval vytvorený, ID:', timerInterval); + console.log('⏰ Časovač obnovený (bez resetovania času)'); +} + +/** + * Zastavenie herného časovača + */ +function stopGameTimer() { + if (timerInterval) { + clearInterval(timerInterval); + timerInterval = null; + console.log('⏰ Časovač zastavený'); + } + + // 🔊 Zastavenie tick-tock zvuku + stopSound('tickTock'); +} + +// ========================================== +// KONIEC HRY +// ========================================== + +/** + * Ukončenie hry - úspešné dokončenie + */ +function endGame() { + console.log('🎉 Hra ukončená - víťazstvo!'); + + stopGameTimer(); + + // 🔊 Zvuk konca hry + playSound('gameEnd'); + + // Výpočet výsledkov + const gameResults = calculateGameResults(); + + // Uloženie progress (len pre level hry) + if (!isMultiplayerMode && currentLevel.id !== 'demo' && currentLevel.id !== 'custom') { + saveGameProgress(gameResults); + } + + // Zobrazenie end game modalu + showEndGameModal(gameResults); +} + +/** + * Ukončenie hry - vypršal čas + */ +function endGameTimeOut() { + console.log('⏰ Hra ukončená - vypršal čas!'); + + stopGameTimer(); + + // 🔊 Zvuk konca hry (timeout) + playSound('gameEnd'); + + const gameResults = calculateGameResults(); + gameResults.isTimeOut = true; + gameResults.stars = 0; // Žiadne hviezdy pri timeoutu + + showEndGameModal(gameResults); +} + +/** + * Výpočet výsledkov hry + * @returns {Object} Objekt s výsledkami hry + */ +function calculateGameResults() { + // OPRAVA: Prepočítanie času pre countdown časovač + // Ak používame countdown (timeLimit existuje), musíme prepočítať uplynulý čas + let actualTimeSpent = gameTime; + if (currentLevel.timeLimit) { + // gameTime obsahuje ostávajúci čas (napr. 20s ostáva) + // actualTimeSpent musí obsahovať uplynulý čas (napr. 40s uplynulo) + actualTimeSpent = currentLevel.timeLimit - gameTime; + } + // Ak nemá timeLimit, gameTime je už správne (počíta od 0 nahor) + + const results = { + totalTime: actualTimeSpent, // Používame prepočítaný čas namiesto gameTime + totalAttempts: gameAttempts, + matchedPairs: matchedPairs, + totalPairs: totalPairs, + correctSpeechCount: correctSpeechCount, + completionPercentage: Math.round((matchedPairs / totalPairs) * 100), + stars: 0, + isTimeOut: false, + isVictory: matchedPairs >= totalPairs + }; + + // Výpočet hviezd (podobne ako v game.js) + if (results.isVictory) { + results.stars = calculateStars(results); + } + + return results; +} + +/** + * Výpočet počtu hviezd na základe výkonu + * @param {Object} results - Výsledky hry + * @returns {number} Počet hviezd (0-3) + */ +function calculateStars(results) { + let stars = 1; // Základná hviezda za dokončenie + + // Hodnotenie LEN podľa rečových cvičení (správne vyslovených slov) + const speechRatio = results.correctSpeechCount / results.matchedPairs; + + if (speechRatio >= 0.7) stars = 2; // 70%+ správne vyslovených = 2 hviezdy + if (speechRatio >= 0.9) stars = 3; // 90%+ správne vyslovených = 3 hviezdy + + return stars; +} + +/** + * Uloženie herného pokroku + * @param {Object} results - Výsledky hry + */ +function saveGameProgress(results) { + if (typeof window.progressManager === 'undefined') { + console.warn('⚠️ Progress manager nie je dostupný'); + return; + } + + try { + window.progressManager.saveLevelProgress( + currentLevel.worldId, + currentLevel.id, + results.stars, + { + time: results.totalTime, + attempts: results.totalAttempts, + speechCorrect: results.correctSpeechCount, + completion: results.completionPercentage + } + ); + + console.log('✅ Progress uložený'); + } catch (error) { + console.error('❌ Chyba pri ukladaní progress:', error); + } +} + +/** + * Zobrazenie end game modalu s výsledkami + * @param {Object} results - Výsledky hry + */ +function showEndGameModal(results) { + const modal = document.getElementById('endgame'); + if (!modal) { + console.error('❌ End game modal nenájdený!'); + return; + } + + // Aktualizácia obsahu modalu + updateEndGameModalContent(results); + + // Zobrazenie modalu + modal.style.display = 'block'; + + // Nastavenie event listenerov pre tlačidlá + setupEndGameButtons(); +} + +/** + * Aktualizácia obsahu end game modalu + * @param {Object} results - Výsledky hry + */ +function updateEndGameModalContent(results) { + const modal = document.getElementById('endgame'); + const contentDiv = modal.querySelector('.cvicenie-content-2'); + + if (!contentDiv) { + console.error('❌ Content div nenájdený v modale!'); + return; + } + + // Vyčistenie obsahu + contentDiv.innerHTML = ''; + + // Rozlíšenie medzi timeout a victory + if (results.isTimeOut) { + // ====================================== + // MODAL PRE VYPRŠANIE ČASU + // ====================================== + + // Titulok + const title = document.createElement('h1'); + title.textContent = 'ČAS VYPRŠAL!'; + contentDiv.appendChild(title); + + // Stats sekcia - skóre hráčov + const statsDiv = document.createElement('div'); + statsDiv.className = 'stats'; + + // Nadpis skóre + const scoreHeader = document.createElement('div'); + scoreHeader.innerHTML = 'SKÓRE:'; + statsDiv.appendChild(scoreHeader); + + // Zoradenie hráčov podľa skóre + const sortedPlayers = [...players].sort((a, b) => b.score - a.score); + + // Skóre každého hráča + sortedPlayers.forEach((player) => { + const playerDiv = document.createElement('div'); + const pluralForm = player.score === 1 ? 'pár' : player.score < 5 ? 'páry' : 'párov'; + playerDiv.innerHTML = `${player.name}: ${player.score} ${pluralForm}`; + statsDiv.appendChild(playerDiv); + }); + + contentDiv.appendChild(statsDiv); + + } else { + // ====================================== + // MODAL PRE VÝHRU + // ====================================== + + // Titulok + const title = document.createElement('h1'); + title.textContent = isMultiplayerMode ? 'HRA SKONČILA!' : 'VYHRAL SI!'; + contentDiv.appendChild(title); + + // Stats sekcia + const statsDiv = document.createElement('div'); + statsDiv.className = 'stats'; + + // Čas + const timeDiv = document.createElement('div'); + const minutes = Math.floor(results.totalTime / 60); + const seconds = results.totalTime % 60; + timeDiv.innerHTML = `Čas: ${minutes}:${seconds.toString().padStart(2, '0')}`; + statsDiv.appendChild(timeDiv); + + // Pokusy + const attemptsDiv = document.createElement('div'); + attemptsDiv.innerHTML = `Pokusy: ${results.totalAttempts}`; + statsDiv.appendChild(attemptsDiv); + + // Nadpis skóre + const scoreHeader = document.createElement('div'); + scoreHeader.innerHTML = 'SKÓRE:'; + statsDiv.appendChild(scoreHeader); + + // Zoradenie hráčov podľa skóre + const sortedPlayers = [...players].sort((a, b) => b.score - a.score); + + // Skóre každého hráča + sortedPlayers.forEach((player) => { + const playerDiv = document.createElement('div'); + const pluralForm = player.score === 1 ? 'pár' : player.score < 5 ? 'páry' : 'párov'; + playerDiv.innerHTML = `${player.name}: ${player.score} ${pluralForm}`; + statsDiv.appendChild(playerDiv); + }); + + contentDiv.appendChild(statsDiv); + + // Hviezdy (len pre single player) + if (!isMultiplayerMode) { + const starsDiv = document.createElement('div'); + starsDiv.id = 'modal-stars'; + starsDiv.className = 'modal-stars'; + contentDiv.appendChild(starsDiv); + + // Aktualizácia hviezd + updateModalStars(results.stars); + } + } + + // ====================================== + // TLAČIDLÁ (spoločné pre oba typy) + // ====================================== + const gameendDiv = document.createElement('div'); + gameendDiv.className = 'gameend'; + + const nav = document.createElement('nav'); + nav.className = 'main-menu'; + + const ul = document.createElement('ul'); + + // Tlačidlo "Hrať znova" + const restartLi = document.createElement('li'); + const restartBtn = document.createElement('button'); + restartBtn.textContent = 'Hrať znova'; + restartBtn.className = 'menu-button'; + restartBtn.onclick = restartCurrentLevel; + restartLi.appendChild(restartBtn); + ul.appendChild(restartLi); + + // Tlačidlo "Späť do menu" + const menuLi = document.createElement('li'); + const menuBtn = document.createElement('button'); + menuBtn.textContent = 'Späť do menu'; + menuBtn.className = 'menu-button'; + menuBtn.onclick = returnToMenu; + menuLi.appendChild(menuBtn); + ul.appendChild(menuLi); + + nav.appendChild(ul); + gameendDiv.appendChild(nav); + contentDiv.appendChild(gameendDiv); +} + +/** + * Aktualizácia hviezd v modali + * @param {number} starsCount - Počet hviezd + */ +function updateModalStars(starsCount) { + const starsContainer = document.getElementById('modal-stars'); + if (!starsContainer) return; + + starsContainer.innerHTML = ''; + + for (let i = 1; i <= 3; i++) { + const star = document.createElement('img'); + star.src = i <= starsCount ? 'images/star_active.png' : 'images/star_inactive.png'; + star.alt = i <= starsCount ? 'Aktívna hviezda' : 'Neaktívna hviezda'; + starsContainer.appendChild(star); + } +} + +/** + * Nastavenie event listenerov pre tlačidlá v end game modali + */ +function setupEndGameButtons() { + // Tlačidlo "Hrať znova" + const restartBtn = document.querySelector('#endgame button[onclick="restartCurrentLevel()"]'); + if (restartBtn) { + restartBtn.onclick = restartCurrentLevel; + } + + // Tlačidlo "Ďalší level" + const nextBtn = document.querySelector('#endgame button[onclick="goToNextLevel()"]'); + if (nextBtn) { + nextBtn.onclick = goToNextLevel; + } + + // Tlačidlo "Späť do menu" + const menuBtn = document.querySelector('#endgame button[onclick="returnToMenu()"]'); + if (menuBtn) { + menuBtn.onclick = returnToMenu; + } +} + +// ========================================== +// NAVIGAČNÉ FUNKCIE +// ========================================== + +/** + * Reštart aktuálneho levelu + */ +function restartCurrentLevel() { + console.log('🔄 Reštartujem level...'); + + // Skrytie end game modalu + const modal = document.getElementById('endgame'); + if (modal) modal.style.display = 'none'; + + // Reštart hry + initGame(); +} + +/** + * Prechod na ďalší level + */ +function goToNextLevel() { + console.log('➡️ Prechod na ďalší level...'); + + // Pre custom hry alebo demo - reštart + if (currentLevel.id === 'custom' || currentLevel.id === 'demo') { + restartCurrentLevel(); + return; + } + + // Hľadanie ďalšieho levelu + if (typeof getNextLevel === 'function') { + const nextLevel = getNextLevel(currentLevel.id); + if (nextLevel) { + window.location.href = `pexeso.html?worldId=${nextLevel.worldId}&levelId=${nextLevel.id}`; + } else { + // Žiadny ďalší level - návrat do menu + returnToMenu(); + } + } else { + returnToMenu(); + } +} + +/** + * Návrat do hlavného menu + */ +function returnToMenu() { + console.log('🏠 Návrat do menu...'); + + if (currentLevel.id === 'custom') { + // Pre custom hry návrat na index + window.location.href = 'index.html'; + } else { + // Pre level hry návrat na worlds menu + window.location.href = 'worldsmenu.html'; + } +} + +// ========================================== +// EVENT LISTENERY A UTILITY FUNKCIE +// ========================================== + +/** + * Nastavenie globálnych event listenerov + */ +function setupEventListeners() { + console.log('🎮 Nastavujem event listenery...'); + + // Tlačidlo menu (pauza) - otvorenie + const menuButton = document.getElementById('menuButton'); + if (menuButton) { + menuButton.addEventListener('click', openPauseMenu); + console.log('✅ Menu button listener nastavený'); + } else { + console.warn('⚠️ Menu button nenájdený!'); + } + + // NOVÉ PAUSE MENU - tlačidlá + + // 1. Close button (X) + const pauseCloseBtn = document.getElementById('pauseCloseBtn'); + if (pauseCloseBtn) { + pauseCloseBtn.addEventListener('click', function() { + console.log('🖱️ Klik na close button (X)'); + closePauseMenu(); + }); + console.log('✅ Pause close button listener nastavený'); + } else { + console.warn('⚠️ Pause close button nenájdený!'); + } + + // 2. Resume button (Pokračovať) + const pauseResumeBtn = document.getElementById('pauseResumeBtn'); + if (pauseResumeBtn) { + pauseResumeBtn.addEventListener('click', function() { + console.log('🖱️ Klik na Resume button'); + closePauseMenu(); + }); + console.log('✅ Pause resume button listener nastavený'); + } else { + console.warn('⚠️ Pause resume button nenájdený!'); + } + + // 3. Restart button (Hrať znova) + const pauseRestartBtn = document.getElementById('pauseRestartBtn'); + if (pauseRestartBtn) { + pauseRestartBtn.addEventListener('click', function() { + console.log('🖱️ Klik na Restart button'); + closePauseMenu(); + restartCurrentLevel(); + }); + console.log('✅ Pause restart button listener nastavený'); + } else { + console.warn('⚠️ Pause restart button nenájdený!'); + } + + // 4. Menu button (Späť do menu) + const pauseMenuBtn = document.getElementById('pauseMenuBtn'); + if (pauseMenuBtn) { + pauseMenuBtn.addEventListener('click', function() { + console.log('🖱️ Klik na Menu button'); + returnToMenu(); + }); + console.log('✅ Pause menu button listener nastavený'); + } else { + console.warn('⚠️ Pause menu button nenájdený!'); + } + + // Klávesové skratky (voliteľné) + document.addEventListener('keydown', handleKeyPress); + + console.log('✅ Všetky event listenery nastavené'); +} + +/** + * Otvorenie pauza menu + */ +function openPauseMenu() { + console.log('⏸️ Otváram NOVÉ pauza menu...'); + + // Pozastavenie časovača + if (timerInterval) { + clearInterval(timerInterval); + console.log('⏸️ Časovač zastavený, ID:', timerInterval); + } + + // Zobrazenie nového pause modalu + const pauseModal = document.getElementById('pause-modal'); + const blurBg = document.getElementById('blur-background'); + + if (pauseModal) { + pauseModal.style.display = 'flex'; + console.log('⏸️ Pause modal zobrazený'); + } else { + console.error('❌ Pause modal nenájdený!'); + } + + if (blurBg) { + blurBg.style.display = 'block'; + } + + document.body.classList.add('dialog-open'); + document.body.style.overflow = 'hidden'; + + console.log('⏸️ Pause menu otvorené'); +} + +/** + * Zatvorenie pauza menu + */ +function closePauseMenu() { + console.log('▶️ Zatváram NOVÉ pauza menu...'); + console.log('▶️ gameTime pred obnovením:', gameTime); + console.log('▶️ currentLevel:', currentLevel); + console.log('▶️ timerInterval pred obnovením:', timerInterval); + + // Skrytie nového pause modalu + const pauseModal = document.getElementById('pause-modal'); + const blurBg = document.getElementById('blur-background'); + + if (pauseModal) { + pauseModal.style.display = 'none'; + console.log('▶️ Pause modal skrytý'); + } else { + console.error('❌ Pause modal nenájdený!'); + } + + if (blurBg) { + blurBg.style.display = 'none'; + } + + document.body.classList.remove('dialog-open'); + document.body.style.overflow = 'auto'; + + console.log('▶️ Teraz volám resumeGameTimer()...'); + + // Obnovenie časovača (bez resetovania času) + resumeGameTimer(); + + console.log('▶️ Pause menu zatvorené'); +} + +/** + * Spracovanie klávesových skratiek + * @param {KeyboardEvent} event - Event klávesy + */ +function handleKeyPress(event) { + switch (event.key) { + case 'Escape': + openPauseMenu(); + break; + case 'r': + case 'R': + if (event.ctrlKey) { + event.preventDefault(); + restartCurrentLevel(); + } + break; + } +} + +/** + * Zamichanie poľa (Fisher-Yates algoritmus) + * @param {Array} array - Pole na zamichanie + * @returns {Array} Zamichané pole + */ +function shuffleArray(array) { + for (let i = array.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [array[i], array[j]] = [array[j], array[i]]; + } + return array; +} + +/** + * Zobrazenie chybovej správy + * @param {string} message - Chybová správa + */ +function showErrorMessage(message) { + console.error(`❌ ${message}`); + + // Jednoduché zobrazenie cez alert (môže sa nahradiť vlastným modalom) + alert(message); +} + +// ========================================== +// GLOBÁLNE FUNKCIE PRE HTML ONCLICK +// ========================================== + +/** + * Globálne funkcie pre onclick v HTML + * Tieto funkcie sú dostupné z HTML súborov + */ +// Staré funkcie (pre spätnú kompatibilitu, ak sú ešte v HTML) +// window.openDialog1 = openPauseMenu; +// window.closeDialog1 = closePauseMenu; + +// Nové funkcie pre pause menu +window.openPauseMenu = openPauseMenu; +window.closePauseMenu = closePauseMenu; +window.restartCurrentLevel = restartCurrentLevel; +window.goToNextLevel = goToNextLevel; +window.returnToMenu = returnToMenu; + +// ========================================== +// 🔊 GLOBÁLNY CLICK LISTENER +// ========================================== + +// Prehrá zvuk pri každom kliknutí myšou +document.addEventListener('click', function() { + playSound('mouseClick'); +}); + +// ========================================== +// KONIEC SÚBORU +// ========================================== + +console.log('📋 pexeso.js načítaný - verzia 2.4 (so zvukmi)'); \ No newline at end of file diff --git a/js/pexeso/pexeso1.js b/js/pexeso/pexeso1.js new file mode 100644 index 0000000..8c34545 --- /dev/null +++ b/js/pexeso/pexeso1.js @@ -0,0 +1,1178 @@ +/** + * Pexeso hra s integráciou do level systému + * Obsahuje rečové cvičenia, systém hodnotenia a navigáciu + * Autor: Adam Reňak + */ + +// =============================================== +// GLOBÁLNE PREMENNÉ PRE PEXESO HRU +// =============================================== + +let currentLevelConfig = null; // Konfigurácia aktuálneho levelu +let isCustomLevel = false; // Či je to custom level + +// Herné premenné +let gameCards = []; // Pole všetkých kariet v hre +let flippedCards = []; // Aktuálne otočené karty (max 2) +let matchedPairs = 0; // Počet nájdených párov +let totalPairs = 0; // Celkový počet párov v hre +let gameAttempts = 0; // Počet pokusov +let gameStartTime = null; // Čas začatku hry +let gameTimer = null; // Timer pre hru +let currentTime = 0; // Aktuálny čas v sekundách + +// Hráči +let players = []; // Pole hráčov +let currentPlayer = 0; // Index aktuálneho hráča + +// Rečové cvičenie +let speechRecognition = null; // Web Speech API +let isListening = false; // Či práve počúvame +let currentWord = ''; // Aktuálne slovo na vyslovenie +let speechAttempts = 0; // Počet pokusov pre rečové cvičenie +let maxSpeechAttempts = 3; // Maximálny počet pokusov + +// Audio elementy +let sounds = { + cardFlip: null, + correct: null, + wrong: null, + victory: null +}; + +// =============================================== +// INICIALIZÁCIA HRY +// =============================================== + +/** + * Hlavná inicializačná funkcia + * Spúšťa sa pri načítaní stránky + */ +function initializePexesoGame() { + console.log('Inicializujem pexeso hru...'); + + // Načítaj level konfiguráciu z URL + loadLevelFromURL(); + + // Inicializuj audio + initializeAudio(); + + // Inicializuj rečové rozpoznávanie + initializeSpeechRecognition(); + + // Nastav pozadie sveta + setWorldBackground(); + + // Skry loading screen + hideLoadingScreen(); + + // Spusti hru + startGame(); +} + +/** + * Načítanie level konfigurácie z URL parametrov + */ +function loadLevelFromURL() { + const urlParams = new URLSearchParams(window.location.search); + const worldId = urlParams.get('worldId'); + const levelId = urlParams.get('levelId'); + const training = urlParams.get('training') === 'true'; + + console.log('URL parametre:', { worldId, levelId, training }); + + if (training) { + // Pre tréningové levely - zatiaľ základná konfigurácia + isCustomLevel = true; + currentLevelConfig = { + id: 'training_pexeso', + worldId: worldId || 'world_r', + name: 'Tréningové pexeso', + gameType: 'pexeso', + words: ['rak', 'ryba', 'ruka', 'ruža'], + gameConfig: { + pairs: 4, + timeLimit: null + } + }; + } else if (levelId && window.getLevelConfig) { + // Načítaj konfiguráciu z levels.js + currentLevelConfig = window.getLevelConfig(levelId); + isCustomLevel = false; + } else { + // Predvolená konfigurácia + console.warn('Žiadna level konfigurácia, používam predvolenú'); + currentLevelConfig = { + id: 'default_pexeso', + worldId: 'world_r', + name: 'Základné pexeso', + gameType: 'pexeso', + words: ['rak', 'ryba', 'ruka', 'ruža'], + gameConfig: { + pairs: 4, + timeLimit: null + } + }; + isCustomLevel = true; + } + + console.log('Načítaná level konfigurácia:', currentLevelConfig); +} + +/** + * Nastavenie pozadia sveta + */ +function setWorldBackground() { + const gameCanvas = document.getElementById('gameCanvas'); + if (!gameCanvas || !currentLevelConfig) return; + + const worldId = currentLevelConfig.worldId; + + // Mapa pozadí pre jednotlivé svety + const worldBackgrounds = { + 'world_z': '../images/worlds/world_z.jpg', + 'world_s': '../images/worlds/world_s.png', + 'world_r': '../images/worlds/world_r.png', + 'world_l': '../images/worlds/world_l.png', + 'world_c': '../images/worlds/world_c.png', + 'world_š': '../images/worlds/world_sh.png', + 'world_ž': '../images/worlds/world_zh.png', + 'world_č': '../images/worlds/world_ch.png', + 'world_d': '../images/worlds/world_d.png', + 'world_t': '../images/worlds/world_t.png', + 'world_n': '../images/worlds/world_n.png', + 'world_k': '../images/worlds/world_k.png', + 'world_g': '../images/worlds/world_g.png' + }; + + const backgroundImage = worldBackgrounds[worldId] || '../images/pozadie.jpg'; + gameCanvas.style.backgroundImage = `url('${backgroundImage}')`; + + console.log(`Nastavené pozadie pre svet ${worldId}: ${backgroundImage}`); +} + +/** + * Inicializácia audio elementov + */ +function initializeAudio() { + sounds.cardFlip = document.getElementById('cardFlipSound') || new Audio('zvuky/effects/kopanie.wav'); + sounds.correct = document.getElementById('correctSound') || new Audio('zvuky/effects/spravne.mp3'); + sounds.wrong = document.getElementById('wrongSound') || new Audio('zvuky/effects/zle.mp3'); + sounds.victory = document.getElementById('victorySound') || new Audio('zvuky/effects/vyhra.mp3'); + + // Nastav hlasitosť + Object.values(sounds).forEach(sound => { + if (sound) sound.volume = 0.7; + }); +} + +/** + * Skrytie loading screen + */ +function hideLoadingScreen() { + setTimeout(() => { + const loadingScreen = document.getElementById('loading-screen'); + if (loadingScreen) { + loadingScreen.style.opacity = '0'; + setTimeout(() => { + loadingScreen.style.display = 'none'; + }, 500); + } + }, 1500); +} + +// =============================================== +// SPUSTENIE HRY +// =============================================== + +/** + * Spustenie novej hry + */ +function startGame() { + console.log('Spúšťam novú hru pexesa...'); + + if (!currentLevelConfig) { + console.error('Žiadna level konfigurácia!'); + return; + } + + // Reset herných premenných + resetGameVariables(); + + // Inicializuj hráčov + initializePlayers(); + + // Vytvor karty + createGameCards(); + + // Vygeneruj karty na obrazovke + generateCardsHTML(); + + // Spusti časomeru + startGameTimer(); + + console.log('Hra spustená!'); +} + +/** + * Reset herných premenných + */ +function resetGameVariables() { + gameCards = []; + flippedCards = []; + matchedPairs = 0; + gameAttempts = 0; + currentTime = 0; + currentPlayer = 0; + + // Aktualizuj UI + updateAttemptsDisplay(); + updateTimeDisplay(); +} + +/** + * Inicializácia hráčov + */ +function initializePlayers() { + // Pre teraz jeden hráč, neskôr môžeme pridať multiplayer + players = [ + { name: 'Hráč', score: 0, color: 'player-1' } + ]; + + // Aktualizuj UI hráčov + updatePlayersDisplay(); +} + +/** + * Vytvorenie kariet pre hru + */ +function createGameCards() { + const words = currentLevelConfig.words; + const pairsCount = currentLevelConfig.gameConfig.pairs || Math.min(words.length, 8); + + // Vyber slová pre hru + const selectedWords = words.slice(0, pairsCount); + totalPairs = selectedWords.length; + + // Vytvor páry kariet + gameCards = []; + selectedWords.forEach((word, index) => { + // Prvá karta páru + gameCards.push({ + id: `card_${index}_1`, + word: word, + image: `images/slova/${word}.png`, + pairId: index, + isFlipped: false, + isMatched: false + }); + + // Druhá karta páru + gameCards.push({ + id: `card_${index}_2`, + word: word, + image: `images/slova/${word}.png`, + pairId: index, + isFlipped: false, + isMatched: false + }); + }); + + // Zamiešaj karty + shuffleArray(gameCards); + + console.log(`Vytvorených ${gameCards.length} kariet (${totalPairs} párov)`); +} + +/** + * Zamiešanie poľa + */ +function shuffleArray(array) { + for (let i = array.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [array[i], array[j]] = [array[j], array[i]]; + } +} + +/** + * Generovanie HTML pre karty + */ +function generateCardsHTML() { + const gameCanvas = document.getElementById('gameCanvas'); + if (!gameCanvas) return; + + // Nastav CSS triedu pre responzívnosť + const cardCount = gameCards.length; + gameCanvas.className = `cards-${cardCount}`; + + // Vymaž existujúci obsah + gameCanvas.innerHTML = ''; + + // Vygeneruj karty + gameCards.forEach((card, index) => { + const cardElement = createCardElement(card, index); + gameCanvas.appendChild(cardElement); + }); + + console.log(`Vygenerovaných ${gameCards.length} kariet v HTML`); +} + +/** + * Vytvorenie HTML elementu karty + */ +function createCardElement(card, index) { + const cardDiv = document.createElement('div'); + cardDiv.className = 'card-container'; + cardDiv.dataset.cardId = card.id; + cardDiv.dataset.cardIndex = index; + + // Obrázok (skrytý na začiatku) + const img = document.createElement('img'); + img.src = card.image; + img.alt = card.word; + img.style.display = 'none'; + + // Text + const span = document.createElement('span'); + span.textContent = 'PEXESO'; + + cardDiv.appendChild(img); + cardDiv.appendChild(span); + + // Event listener pre kliknutie + cardDiv.addEventListener('click', () => handleCardClick(index)); + + return cardDiv; +} + +// =============================================== +// LOGIKA KARIET +// =============================================== + +/** + * Spracovanie kliknutia na kartu + */ +function handleCardClick(cardIndex) { + const card = gameCards[cardIndex]; + const cardElement = document.querySelector(`[data-card-index="${cardIndex}"]`); + + // Kontroly - karta už otočená, matchovaná alebo príliš veľa otočených kariet + if (card.isFlipped || card.isMatched || flippedCards.length >= 2) { + return; + } + + console.log(`Kliknutie na kartu: ${card.word}`); + + // Otočenie karty + flipCard(cardIndex, cardElement); + + // Pridaj do otočených kariet + flippedCards.push({ index: cardIndex, card: card, element: cardElement }); + + // Ak sú otočené 2 karty, skontroluj pár + if (flippedCards.length === 2) { + gameAttempts++; + updateAttemptsDisplay(); + + setTimeout(() => { + checkForMatch(); + }, 1000); + } +} + +/** + * Otočenie karty + */ +function flipCard(cardIndex, cardElement) { + const card = gameCards[cardIndex]; + + // Nastav stav karty + card.isFlipped = true; + + // Vizuálne otočenie + cardElement.classList.add('flipped'); + + // Zobraz obrázok a aktualizuj text + const img = cardElement.querySelector('img'); + const span = cardElement.querySelector('span'); + + if (img) img.style.display = 'block'; + if (span) span.textContent = card.word; + + // Zahraj zvuk + if (sounds.cardFlip) { + sounds.cardFlip.play().catch(e => console.log('Audio chyba:', e)); + } + + console.log(`Karta otočená: ${card.word}`); +} + +/** + * Kontrola páru + */ +function checkForMatch() { + if (flippedCards.length !== 2) return; + + const [first, second] = flippedCards; + const isMatch = first.card.pairId === second.card.pairId; + + console.log(`Kontrola páru: ${first.card.word} vs ${second.card.word} = ${isMatch ? 'MATCH' : 'NO MATCH'}`); + + if (isMatch) { + handleSuccessfulMatch(first, second); + } else { + handleFailedMatch(first, second); + } + + // Vymaž otočené karty + flippedCards = []; +} + +/** + * Spracovanie úspešného páru + */ +function handleSuccessfulMatch(first, second) { + console.log('Úspešný pár!'); + + // Označenie kariet ako matchované + first.card.isMatched = true; + second.card.isMatched = true; + + first.element.classList.add('matched'); + second.element.classList.add('matched'); + + // Aktualizuj skóre + players[currentPlayer].score++; + updatePlayersDisplay(); + + matchedPairs++; + + // Zahraj úspešný zvuk + if (sounds.correct) { + sounds.correct.play().catch(e => console.log('Audio chyba:', e)); + } + + // Spusti rečové cvičenie + startSpeechExercise(first.card.word); +} + +/** + * Spracovanie neúspešného páru + */ +function handleFailedMatch(first, second) { + console.log('Neúspešný pár!'); + + // Otočenie kariet späť + setTimeout(() => { + flipCardBack(first.index, first.element); + flipCardBack(second.index, second.element); + }, 500); + + // Zahraj neúspešný zvuk + if (sounds.wrong) { + sounds.wrong.play().catch(e => console.log('Audio chyba:', e)); + } +} + +/** + * Otočenie karty späť + */ +function flipCardBack(cardIndex, cardElement) { + const card = gameCards[cardIndex]; + + // Nastav stav karty + card.isFlipped = false; + + // Vizuálne otočenie späť + cardElement.classList.remove('flipped'); + + // Skry obrázok a obnov text + const img = cardElement.querySelector('img'); + const span = cardElement.querySelector('span'); + + if (img) img.style.display = 'none'; + if (span) span.textContent = 'PEXESO'; + + console.log(`Karta otočená späť: ${card.word}`); +} + +// =============================================== +// REČOVÉ CVIČENIE +// =============================================== + +/** + * Spustenie rečového cvičenia + */ +function startSpeechExercise(word) { + console.log(`Spúšťam rečové cvičenie pre slovo: ${word}`); + + currentWord = word; + speechAttempts = 0; + + // Zobraz modal + showSpeechModal(word); +} + +/** + * Zobrazenie modalu pre rečové cvičenie + */ +function showSpeechModal(word) { + const modal = document.getElementById('cvicenie'); + const wordDisplay = document.getElementById('word-display'); + const wordImage = document.getElementById('cvicenie-image'); + + if (modal) { + // Nastav slovo a obrázok + if (wordDisplay) wordDisplay.textContent = word.toUpperCase(); + if (wordImage) { + wordImage.src = `images/slova/${word}.png`; + wordImage.alt = word; + } + + modal.style.display = 'block'; + modal.classList.add('modal-open'); + + console.log(`Modal zobrazený pre slovo: ${word}`); + } +} + +/** + * Inicializácia rečového rozpoznávania + */ +function initializeSpeechRecognition() { + if (!('webkitSpeechRecognition' in window) && !('SpeechRecognition' in window)) { + console.warn('Rečové rozpoznávanie nie je podporované v tomto prehliadači'); + return; + } + + const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition; + speechRecognition = new SpeechRecognition(); + + speechRecognition.lang = 'sk-SK'; + speechRecognition.continuous = false; + speechRecognition.interimResults = false; + speechRecognition.maxAlternatives = 3; + + speechRecognition.onstart = function() { + console.log('Rečové rozpoznávanie spustené'); + isListening = true; + updateSpeechButton(); + }; + + speechRecognition.onresult = function(event) { + console.log('Výsledok rečového rozpoznávania:', event); + + const result = event.results[0][0].transcript.toLowerCase().trim(); + const confidence = event.results[0][0].confidence; + + console.log(`Rozpoznané: "${result}" (spoľahlivosť: ${confidence})`); + + processSpeechResult(result, confidence); + }; + + speechRecognition.onerror = function(event) { + console.error('Chyba rečového rozpoznávania:', event.error); + isListening = false; + updateSpeechButton(); + showSpeechError(event.error); + }; + + speechRecognition.onend = function() { + console.log('Rečové rozpoznávanie ukončené'); + isListening = false; + updateSpeechButton(); + }; + + // Event listener pre tlačidlo mikrofónu + const micButton = document.getElementById('rozpoznanie'); + if (micButton) { + micButton.addEventListener('click', toggleSpeechRecognition); + } +} + +/** + * Zapnutie/vypnutie rečového rozpoznávania + */ +function toggleSpeechRecognition() { + if (!speechRecognition) { + console.warn('Rečové rozpoznávanie nie je dostupné'); + return; + } + + if (isListening) { + speechRecognition.stop(); + } else { + speechAttempts++; + speechRecognition.start(); + } +} + +/** + * Aktualizácia tlačidla mikrofónu + */ +function updateSpeechButton() { + const button = document.getElementById('rozpoznanie'); + const buttonContainer = button?.parentElement; + const buttonText = button?.querySelector('a'); + + if (!button || !buttonContainer || !buttonText) return; + + if (isListening) { + buttonContainer.classList.add('recording'); + buttonText.textContent = 'POČÚVAM...'; + } else { + buttonContainer.classList.remove('recording'); + buttonText.textContent = 'HOVORIŤ'; + } +} + +/** + * Spracovanie výsledku rečového rozpoznávania + */ +function processSpeechResult(recognized, confidence) { + const targetWord = currentWord.toLowerCase(); + const isCorrect = recognized.includes(targetWord) || + targetWord.includes(recognized) || + calculateSimilarity(recognized, targetWord) > 0.7; + + console.log(`Porovnanie: "${recognized}" vs "${targetWord}" = ${isCorrect ? 'SPRÁVNE' : 'NESPRÁVNE'}`); + + if (isCorrect || confidence > 0.8) { + handleSpeechSuccess(); + } else { + handleSpeechFailure(); + } +} + +/** + * Spracovanie úspešného rečového cvičenia + */ +function handleSpeechSuccess() { + console.log('Rečové cvičenie úspešné!'); + + showSpeechResult(true, 'Výborne! Správne si vyslovil slovo.'); + + setTimeout(() => { + closeSpeechModal(); + checkGameEnd(); + }, 2000); +} + +/** + * Spracovanie neúspešného rečového cvičenia + */ +function handleSpeechFailure() { + console.log('Rečové cvičenie neúspešné'); + + if (speechAttempts >= maxSpeechAttempts) { + showSpeechResult(false, 'Skús to ešte raz neskôr.'); + setTimeout(() => { + closeSpeechModal(); + checkGameEnd(); + }, 2000); + } else { + const remainingAttempts = maxSpeechAttempts - speechAttempts; + showSpeechResult(false, `Skús to znova. Zostáva ti ${remainingAttempts} pokusov.`); + } +} + +/** + * Zobrazenie výsledku rečového cvičenia + */ +function showSpeechResult(success, message) { + const resultDiv = document.getElementById('vysledok'); + if (!resultDiv) return; + + const imageSrc = success ? 'images/spravne.png' : 'images/nespravne.png'; + + resultDiv.innerHTML = ` +
    + ${success ? 'Správne' : 'Nesprávne'} +
    + ${message} +
    +
    + `; + + resultDiv.classList.add('show'); + + // Skry výsledok po chvíli + setTimeout(() => { + resultDiv.classList.remove('show'); + }, 1500); +} + +/** + * Zatvorenie modalu rečového cvičenia + */ +function closeSpeechModal() { + const modal = document.getElementById('cvicenie'); + if (modal) { + modal.style.display = 'none'; + modal.classList.remove('modal-open'); + } +} + +/** + * Zobrazenie chyby rečového rozpoznávania + */ +function showSpeechError(error) { + let message = 'Chyba rečového rozpoznávania'; + + switch (error) { + case 'not-allowed': + message = 'Prístup k mikrofónu je zakázaný'; + break; + case 'no-speech': + message = 'Nebola rozpoznaná žiadna reč'; + break; + case 'audio-capture': + message = 'Problém s mikrofónom'; + break; + case 'network': + message = 'Problém so sieťou'; + break; + } + + showSpeechResult(false, message); +} + +// =============================================== +// ČASOMIERA A UI AKTUALIZÁCIE +// =============================================== + +/** + * Spustenie časomiery + */ +function startGameTimer() { + gameStartTime = Date.now(); + + gameTimer = setInterval(() => { + currentTime = Math.floor((Date.now() - gameStartTime) / 1000); + updateTimeDisplay(); + + // Kontrola časového limitu + const timeLimit = currentLevelConfig?.timeLimit; + if (timeLimit && currentTime >= timeLimit) { + handleTimeUp(); + } + }, 1000); +} + +/** + * Zastavenie časomiery + */ +function stopGameTimer() { + if (gameTimer) { + clearInterval(gameTimer); + gameTimer = null; + } +} + +/** + * Aktualizácia zobrazenia času + */ +function updateTimeDisplay() { + const timeElement = document.getElementById('game-time'); + if (timeElement) { + const minutes = Math.floor(currentTime / 60); + const seconds = currentTime % 60; + timeElement.textContent = `${minutes}:${seconds.toString().padStart(2, '0')}`; + } +} + +/** + * Aktualizácia zobrazenia pokusov + */ +function updateAttemptsDisplay() { + const attemptsElement = document.getElementById('game-attempts'); + if (attemptsElement) { + attemptsElement.textContent = gameAttempts.toString(); + } +} + +/** + * Aktualizácia zobrazenia hráčov + */ +function updatePlayersDisplay() { + // Pre teraz len jeden hráč - neskôr rozšíriť pre multiplayer + const playerElements = document.querySelectorAll('.players-panel'); + + playerElements.forEach((element, index) => { + if (index < players.length) { + const player = players[index]; + const nameElement = element.querySelector('.name h1'); + const scoreElement = element.querySelector('.score span'); + + if (nameElement) nameElement.textContent = player.name; + if (scoreElement) scoreElement.textContent = player.score; + + element.style.display = 'flex'; + } else { + element.style.display = 'none'; + } + }); +} + +// =============================================== +// KONIEC HRY A HODNOTENIE +// =============================================== + +/** + * Kontrola konca hry + */ +function checkGameEnd() { + console.log(`Nájdené páry: ${matchedPairs}/${totalPairs}`); + + if (matchedPairs >= totalPairs) { + endGame(); + } +} + +/** + * Ukončenie hry + */ +function endGame() { + console.log('Hra ukončená!'); + + // Zastav časomieru + stopGameTimer(); + + // Zahraj víťazný zvuk + if (sounds.victory) { + sounds.victory.play().catch(e => console.log('Audio chyba:', e)); + } + + // Vypočítaj hodnotenie + const stars = calculateStars(); + + // Ulož pokrok ak nie je custom level + if (!isCustomLevel && currentLevelConfig) { + saveGameProgress(stars, currentTime); + } + + // Zobraz konečný modal + showEndGameModal(stars); +} + +/** + * Výpočet hviezd na základe výkonu + */ +function calculateStars() { + const timeLimit = currentLevelConfig?.timeLimit; + const targetAttempts = totalPairs * 1.5; // Ideálny počet pokusov + + let stars = 1; // Minimálne 1 hviezda za dokončenie + + // Hodnotenie na základe pokusov + if (gameAttempts <= targetAttempts) { + stars = 3; // Perfektný výkon + } else if (gameAttempts <= targetAttempts * 1.3) { + stars = 2; // Dobrý výkon + } + + // Ak je časový limit, zohľadni čas + if (timeLimit) { + const timePercentage = currentTime / timeLimit; + if (timePercentage > 0.9) { + stars = Math.max(1, stars - 1); // Zníženie za pomalý čas + } + } + + console.log(`Hodnotenie: ${stars} hviezd (pokusy: ${gameAttempts}/${targetAttempts}, čas: ${currentTime}s)`); + return Math.max(1, Math.min(3, stars)); +} + +/** + * Uloženie pokroku hry + */ +function saveGameProgress(stars, time) { + if (!window.progressManager || !currentLevelConfig) return; + + try { + window.progressManager.saveLevelProgress( + currentLevelConfig.worldId, + currentLevelConfig.id, + { + stars: stars, + time: time, + attempts: gameAttempts, + completed: true, + timestamp: Date.now() + } + ); + console.log('Pokrok uložený'); + } catch (error) { + console.error('Chyba pri ukladaní pokroku:', error); + } +} + +/** + * Zobrazenie konečného modalu + */ +function showEndGameModal(stars) { + const modal = document.getElementById('endgame'); + if (!modal) return; + + // Aktualizuj štatistiky + updateEndGameStats(stars); + + // Zobraz modal + modal.style.display = 'block'; + + console.log('Konečný modal zobrazený'); +} + +/** + * Aktualizácia štatistík v konečnom modali + */ +function updateEndGameStats(stars) { + // Čas + const timeElements = document.querySelectorAll('#endgame .stats span'); + if (timeElements.length > 0) { + const minutes = Math.floor(currentTime / 60); + const seconds = currentTime % 60; + timeElements[0].textContent = `${minutes}:${seconds.toString().padStart(2, '0')}`; + } + + // Správne/nesprávne pokusy + if (timeElements.length > 1) { + timeElements[1].textContent = matchedPairs; + } + if (timeElements.length > 3) { + timeElements[3].textContent = gameAttempts - matchedPairs; + } + + // Hviezdy + updateStarsDisplay(stars); +} + +/** + * Aktualizácia zobrazenia hviezd + */ +function updateStarsDisplay(stars) { + const starsContainer = document.getElementById('modal-stars'); + if (!starsContainer) return; + + starsContainer.innerHTML = ''; + + for (let i = 1; i <= 3; i++) { + const star = document.createElement('img'); + star.src = i <= stars ? 'images/star.png' : 'images/star_empty.png'; + star.alt = i <= stars ? 'Hviezda' : 'Prázdna hviezda'; + starsContainer.appendChild(star); + } + + console.log(`Zobrazených ${stars} hviezd`); +} + +/** + * Spracovanie vypršania času + */ +function handleTimeUp() { + console.log('Čas vypršal!'); + + stopGameTimer(); + + // Zobraz správu o vypršaní času + alert('Čas vypršal! Hra je ukončená.'); + + // Ukončenie hry s minimálnym hodnotením + const stars = 1; + + if (!isCustomLevel && currentLevelConfig) { + saveGameProgress(stars, currentTime); + } + + showEndGameModal(stars); +} + +// =============================================== +// NAVIGAČNÉ FUNKCIE +// =============================================== + +/** + * Reštart aktuálneho levelu + */ +function restartCurrentLevel() { + console.log('Reštartujem aktuálny level...'); + + // Zatvor modály + closeAllModals(); + + // Reštartuj hru + startGame(); +} + +/** + * Prechod na ďalší level + */ +function goToNextLevel() { + console.log('Pokúšam sa prejsť na ďalší level...'); + + // Pokús sa použiť gameRouter + if (window.gameRouter && typeof window.gameRouter.continueToNextLevel === 'function') { + window.gameRouter.continueToNextLevel(); + } else { + // Fallback - návrat do menu + console.log('GameRouter nie je dostupný, vraciam sa do menu'); + returnToMenu(); + } +} + +/** + * Návrat do menu svetov + */ +function returnToMenu() { + console.log('Návrat do menu svetov...'); + + // Pokús sa použiť gameRouter + if (window.gameRouter && typeof window.gameRouter.returnToLevelSelector === 'function') { + const worldId = currentLevelConfig?.worldId; + if (worldId) { + window.gameRouter.returnToLevelSelector(worldId); + } else { + window.location.href = 'worldsmenu.html'; + } + } else { + // Fallback - priama navigácia + window.location.href = 'worldsmenu.html'; + } +} + +/** + * Zatvorenie všetkých modálov + */ +function closeAllModals() { + const modals = ['cvicenie', 'zvuky', 'endgame', 'dialogove-okno']; + + modals.forEach(modalId => { + const modal = document.getElementById(modalId); + if (modal) { + modal.style.display = 'none'; + modal.classList.remove('modal-open'); + } + }); + + // Skry blur background + const blurBg = document.getElementById('blur-background'); + if (blurBg) { + blurBg.style.display = 'none'; + } + + console.log('Všetky modály zatvorené'); +} + +// =============================================== +// POMOCNÉ FUNKCIE +// =============================================== + +/** + * Kontrola dostupnosti Web Speech API + */ +function isSpeechRecognitionSupported() { + return 'webkitSpeechRecognition' in window || 'SpeechRecognition' in window; +} + +/** + * Získanie náhodného elementu z poľa + */ +function getRandomElement(array) { + return array[Math.floor(Math.random() * array.length)]; +} + +/** + * Formátovanie času do MM:SS formátu + */ +function formatTime(seconds) { + const minutes = Math.floor(seconds / 60); + const secs = seconds % 60; + return `${minutes}:${secs.toString().padStart(2, '0')}`; +} + +/** + * Debug funkcie pre testovanie + */ +window.pexesoDebug = { + // Simulácia dokončenia hry + finishGame: () => { + matchedPairs = totalPairs; + endGame(); + }, + + // Zobrazenie všetkých kariet + revealAllCards: () => { + gameCards.forEach((card, index) => { + if (!card.isMatched) { + const cardElement = document.querySelector(`[data-card-index="${index}"]`); + flipCard(index, cardElement); + } + }); + }, + + // Reset hry + resetGame: () => { + stopGameTimer(); + startGame(); + }, + + // Získanie informácií o hre + getGameInfo: () => { + return { + levelConfig: currentLevelConfig, + gameCards: gameCards, + matchedPairs: matchedPairs, + totalPairs: totalPairs, + gameAttempts: gameAttempts, + currentTime: currentTime, + players: players + }; + } +}; + +// =============================================== +// EVENT LISTENERY A INICIALIZÁCIA +// =============================================== + +/** + * Event listener pre načítanie stránky + */ +document.addEventListener('DOMContentLoaded', function() { + console.log('DOM načítaný, inicializujem pexeso...'); + + // Malé oneskorenie pre načítanie všetkých skriptov + setTimeout(() => { + initializePexesoGame(); + }, 100); +}); + +/** + * Event listener pre zatvorenie stránky + */ +window.addEventListener('beforeunload', function() { + stopGameTimer(); +}); + +/** + * Globálne funkcie pre HTML + */ +window.restartCurrentLevel = restartCurrentLevel; +window.goToNextLevel = goToNextLevel; +window.returnToMenu = returnToMenu; + +console.log('Pexeso.js načítaný a pripravený'); + +// =============================================== +// EXPORT PRE POUŽITIE V INÝCH SÚBOROCH +// =============================================== + +// Export hlavných funkcií ak je potrebný +if (typeof module !== 'undefined' && module.exports) { + module.exports = { + initializePexesoGame, + startGame, + restartCurrentLevel, + goToNextLevel, + returnToMenu + }; +} \ No newline at end of file diff --git a/js/pexeso/pexesocustom.js b/js/pexeso/pexesocustom.js new file mode 100644 index 0000000..25100fa --- /dev/null +++ b/js/pexeso/pexesocustom.js @@ -0,0 +1,510 @@ +class MemoryGame { + constructor(options = {}) { + this.words = options.words || []; + this.pairsCount = options.pairsCount || 15; + this.images = []; + this.cards = []; + this.flippedCards = []; + this.score = 0; + this.attempts = 0; + this.isProcessing = false; + this.startTime = Date.now(); + this.timerInterval = null; + this.recognition = null; + this.sounds = { + cardFlip: document.getElementById('cardFlipSound'), + correctMatch: document.getElementById('correctMatchSound'), + incorrectMatch: document.getElementById('incorrectMatchSound'), + gameWin: document.getElementById('gameWinSound') + }; + this.remainingAttempts = 3; + + // Přidáno pro multiplayer + this.players = options.players || [{ name: 'Hráč 1', score: 0 }]; + this.currentPlayerIndex = 0; + this.isMultiplayer = this.players.length > 1; + + // Přidáme vytvoření kontejneru hráčů před inicializací hry + this.createPlayersContainer(); + + this.setupSpeechRecognition(); + this.initGame(); + } + + async initGame() { + if (this.words.length === 0) { + await this.loadWords(); + } + this.selectWords(); + this.createGameBoard(); + this.startTimer(); + this.setupMicButton(); + } + + async loadWords() { + try { + const urlParams = new URLSearchParams(window.location.search); + const letter = urlParams.get('letter'); + const response = await fetch('js/pexeso/words.json'); + const data = await response.json(); + this.words = data[letter] || []; + } catch (error) { + console.error('Chyba pri načitaní slov:', error); + } + } + + selectWords() { + const shuffled = this.shuffleArray([...this.words]); + this.images = shuffled.slice(0, this.pairsCount); + this.images = [...this.images, ...this.images]; + this.images = this.shuffleArray(this.images); + } + + createGameBoard() { + const gameContainer = document.getElementById('gameContainer'); + gameContainer.innerHTML = ''; + + this.images.forEach((card, index) => { + const cardElement = this.createCard(card, index); + gameContainer.appendChild(cardElement); + }); + } + + createPlayersContainer() { + // Najdeme nebo vytvoříme kontejner před herním kontejnerem + let playersContainer = document.querySelector('.players-container'); + if (!playersContainer) { + playersContainer = document.createElement('div'); + playersContainer.className = 'players-container'; + + // Vložíme kontejner před herní kontejner + const gameContainer = document.getElementById('gameContainer'); + gameContainer.parentNode.insertBefore(playersContainer, gameContainer); + } + + // Vymažeme případný existující obsah + playersContainer.innerHTML = ''; + + // Definujeme barvy pro hráče + const playerColors = [ + '#FF6B6B', // červená + '#4ECDC4', // tyrkysová + '#45B7D1', // modrá + '#FDCB6E' // žlutá + ]; + + // Vytvoříme prvky pro každého hráče + this.players.forEach((player, index) => { + const playerElement = document.createElement('div'); + playerElement.className = 'player-indicator'; + playerElement.dataset.playerIndex = index; + + // Přiřadíme barvu hráči + const playerColor = playerColors[index % playerColors.length]; + + playerElement.innerHTML = ` +
    + Hráč: ${player.name} +
    +
    + Skóre: ${player.score} +
    + `; + + // Zvýrazníme prvního hráče + if (index === 0) { + playerElement.classList.add('active-player'); + } + + playersContainer.appendChild(playerElement); + }); + } + + createCard(card, index) { + const cardElement = document.createElement('div'); + cardElement.className = 'card'; + cardElement.dataset.word = card.word; + + const img = document.createElement('img'); + img.src = card.src; + img.alt = card.word; + + const wordLabel = document.createElement('div'); + wordLabel.textContent = card.word; + wordLabel.className = 'card-word'; + + cardElement.appendChild(img); + cardElement.appendChild(wordLabel); + + cardElement.addEventListener('click', () => this.flipCard(cardElement)); + + return cardElement; + } + + flipCard(cardElement) { + if (this.isProcessing || + cardElement.classList.contains('flipped') || + this.flippedCards.length >= 2) return; + + this.sounds.cardFlip.play(); + cardElement.classList.add('flipped'); + this.flippedCards.push(cardElement); + + if (this.flippedCards.length === 2) { + this.checkMatch(); + } + } + + checkMatch() { + this.attempts++; + document.getElementById('attempts').textContent = this.attempts; + + const [card1, card2] = this.flippedCards; + + if (card1.dataset.word === card2.dataset.word) { + this.handleCorrectMatch(); + // V multiplayer módu zůstává současný hráč na tahu + if (!this.isMultiplayer) { + this.switchToNextPlayer(); + } + } else { + this.handleIncorrectMatch(); + // V multiplayer módu se mění hráč + if (this.isMultiplayer) { + this.switchToNextPlayer(); + } + } + } + + + switchToNextPlayer() { + this.currentPlayerIndex = (this.currentPlayerIndex + 1) % this.players.length; + this.updatePlayerIndicator(); + } + + updatePlayerIndicator() { + const playersContainer = document.querySelector('.players-container'); + if (!playersContainer) return; + + const playerElements = playersContainer.querySelectorAll('.player-indicator'); + + playerElements.forEach((el, index) => { + if (index === this.currentPlayerIndex) { + el.classList.add('active-player'); + } else { + el.classList.remove('active-player'); + } + + // Aktualizace skóre pro všechny hráče + const scoresElement = el.querySelector('.player-scores'); + if (scoresElement) { + const player = this.players[index]; + scoresElement.innerHTML = `Skóre: ${player.score}`; + } + }); + } + + handleCorrectMatch() { + this.sounds.correctMatch.play(); + this.showSpeechContainer(); + } + + handleIncorrectMatch() { + this.sounds.incorrectMatch.play(); + setTimeout(() => { + this.flippedCards.forEach(card => card.classList.remove('flipped')); + this.resetFlippedCards(); + }, 1000); + } + + showSpeechContainer() { + const speechContainer = document.getElementById('speechContainer'); + const gameWrapper = document.querySelector('.game-wrapper'); + const matchText = document.getElementById('matchText'); + const wordImage = document.getElementById('wordImage'); + const card = this.flippedCards[0]; + const word = card.dataset.word; + + // Nastavenie obrázka + const img = card.querySelector('img'); + wordImage.src = img.src; + wordImage.alt = word; + + matchText.textContent = `${word}`; + speechContainer.style.display = 'flex'; + + } + + setupSpeechRecognition() { + if ('webkitSpeechRecognition' in window) { + this.recognition = new webkitSpeechRecognition(); + this.recognition.continuous = false; + this.recognition.interimResults = false; + this.recognition.lang = 'sk-SK'; + + this.recognition.onstart = () => { + document.getElementById('recordingStatus').style.display = 'block'; + }; + + this.recognition.onresult = (event) => { + const spokenWord = event.results[0][0].transcript.toLowerCase(); + this.checkSpokenWord(spokenWord); + }; + + this.recognition.onend = () => { + document.getElementById('recordingStatus').style.display = 'none'; + }; + } + } + + setupMicButton() { + const micButton = document.getElementById('micButton'); + micButton.addEventListener('click', () => { + if (this.recognition) { + // Reset recognition pred každým novým pokusom + this.recognition.abort(); + this.recognition.start(); + micButton.classList.add('active'); + micButton.textContent = 'Počúvam 👂'; + } else { + alert('Rozpoznanie reči nie je podporované.'); + } + }); + + if (this.recognition) { + this.recognition.onend = () => { + document.getElementById('recordingStatus').style.display = 'none'; + micButton.classList.remove('active'); + micButton.textContent = 'Začni hovoriť 🎤'; + }; + } + } + + checkSpokenWord(spokenWord) { + const word = this.flippedCards[0].dataset.word; + const speechContainer = document.getElementById('speechContainer'); + const gameWrapper = document.querySelector('.game-wrapper'); + + // Pridáme rozmazanie pri zobrazení speech containera + gameWrapper.classList.add('blurred'); + + if (spokenWord.includes(word)) { + // Správna odpoveď + this.showFeedback('spravne', () => { + this.flippedCards.forEach(card => card.style.visibility = 'hidden'); + + if (this.isMultiplayer) { + this.players[this.currentPlayerIndex].score++; + this.updatePlayerIndicator(); + } else { + this.score++; + } + + speechContainer.style.display = 'none'; + gameWrapper.classList.remove('blurred'); + this.remainingAttempts = 3; + this.resetFlippedCards(); + + // Kontrola stavu hry + this.checkGameState(); + }); + } else { + // Nesprávna odpoveď + this.remainingAttempts--; + + if (this.remainingAttempts > 0) { + this.showFeedback('nespravne', () => { + // Vrátime pôvodný obsah speech containera + this.showSpeechContainer(); + }); + } else { + this.showFeedback('nespravne', () => { + this.flippedCards.forEach(card => { + card.classList.remove('flipped'); + }); + speechContainer.style.display = 'none'; + gameWrapper.classList.remove('blurred'); + + if (this.isMultiplayer) { + this.switchToNextPlayer(); + } + + this.remainingAttempts = 3; + this.resetFlippedCards(); + this.isProcessing = false; + }); + } + } + + // Aktualizácia zobrazenia zostávajúcich pokusov + const attemptsElement = document.querySelector('.attempts-left'); + if (attemptsElement) { + attemptsElement.textContent = `Počet zostávajúcich pokusov: ${this.remainingAttempts}`; + } + } + + showFeedback(type, callback) { + const speechContainer = document.getElementById('speechContainer'); + + // Rozmazeme pôvodný obsah speech containera + Array.from(speechContainer.children).forEach(child => { + child.style.filter = 'blur(5px)'; + }); + + // Vytvoríme nový feedback element + const feedbackImage = document.createElement('img'); + feedbackImage.className = 'feedback-image'; + feedbackImage.src = `images/${type}.png`; + feedbackImage.style.display = 'block'; + + // Pridáme feedback image + speechContainer.appendChild(feedbackImage); + + // Prehráme zvuk pri správnej odpovedi + if (type === 'spravne') { + const sound = new Audio('zvuky/spravne.mp3'); + sound.play(); + } + + if (type === 'nespravne') { + const sound = new Audio('zvuky/nespravne.mp3'); + sound.play(); + } + + // Po 1 sekunde odstránime feedback a zrušíme rozmazanie + setTimeout(() => { + feedbackImage.remove(); + Array.from(speechContainer.children).forEach(child => { + child.style.filter = 'none'; + }); + if (callback) callback(); + }, 1000); + } + + // Nová metóda pre kontrolu stavu hry + checkGameState() { + console.log('Checking game state...'); // debug + const totalPairs = this.images.length / 2; // delíme 2, pretože každé slovo je v poli dvakrát + + if (this.isMultiplayer) { + const totalScore = this.players.reduce((sum, player) => sum + player.score, 0); + console.log('Multiplayer - Total score:', totalScore, 'Total pairs:', totalPairs); + + if (totalScore >= totalPairs) { + console.log('Ending multiplayer game'); + this.endGame(); + } + } else { + console.log('Single player - Score:', this.score, 'Total pairs:', totalPairs); + + if (this.score >= totalPairs) { + console.log('Ending single player game'); + this.endGame(); + } + } + } + + resetFlippedCards() { + this.flippedCards = []; + this.isProcessing = false; + } + + startTimer() { + const timerElement = document.getElementById('timer'); + this.timerInterval = setInterval(() => { + const currentTime = Math.floor((Date.now() - this.startTime) / 1000); + const minutes = Math.floor(currentTime / 60); + const seconds = currentTime % 60; + timerElement.textContent = + `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`; + }, 1000); + } + + endGame() { + console.log('End game called'); // debug + clearInterval(this.timerInterval); + this.sounds.gameWin.play(); + + const endTime = Date.now(); + const totalSeconds = Math.floor((endTime - this.startTime) / 1000); + const minutes = Math.floor(totalSeconds / 60); + const seconds = totalSeconds % 60; + + const gameEndModal = document.getElementById('gameEndModal'); + console.log('Modal element:', gameEndModal); // debug + + if (!gameEndModal) { + console.error('Game end modal not found!'); + return; + } + + try { + document.getElementById('totalTime').textContent = + `${minutes}:${seconds.toString().padStart(2, '0')}`; + document.getElementById('finalAttempts').textContent = this.attempts; + + if (this.isMultiplayer) { + const winner = this.players.reduce((prev, current) => + (prev.score > current.score) ? prev : current + ); + document.getElementById('winnerText').textContent = `Víťaz: ${winner.name}`; + document.getElementById('finalScore').textContent = winner.score; + } else { + document.getElementById('winnerText').textContent = "Gratulujem!"; + document.getElementById('finalScore').textContent = this.score; + } + + gameEndModal.style.display = 'flex'; + console.log('Modal should be visible now'); // debug + + // Odstránime existujúce event listenery (ak existujú) + const restartBtn = document.getElementById('restartGameBtn'); + const menuBtn = document.getElementById('backToMenuBtn'); + + restartBtn.replaceWith(restartBtn.cloneNode(true)); + menuBtn.replaceWith(menuBtn.cloneNode(true)); + + // Pridáme nové event listenery + document.getElementById('restartGameBtn').addEventListener('click', () => { + console.log('Restart clicked'); // debug + window.location.reload(); + }); + + document.getElementById('backToMenuBtn').addEventListener('click', () => { + console.log('Back to menu clicked'); // debug + window.location.href = 'index.html'; + }); + + } catch (error) { + console.error('Error updating modal content:', error); + } + } + + shuffleArray(array) { + for (let i = array.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [array[i], array[j]] = [array[j], array[i]]; + } + return array; + } +} + +document.addEventListener('DOMContentLoaded', () => { + const urlParams = new URLSearchParams(window.location.search); + const isCustom = urlParams.get('custom'); + const playersParam = urlParams.get('players'); + + if (isCustom) { + const customWords = JSON.parse(decodeURIComponent(urlParams.get('words'))); + const players = playersParam + ? JSON.parse(decodeURIComponent(playersParam)) + : [{ name: 'Hráč 1', score: 0 }]; + + new MemoryGame({ + words: customWords, + players: players + }); + } else { + new MemoryGame(); + } +}); \ No newline at end of file diff --git a/js/pexeso/words.json b/js/pexeso/words.json new file mode 100644 index 0000000..0530ad6 --- /dev/null +++ b/js/pexeso/words.json @@ -0,0 +1,37 @@ +{ + "Š": [ + { "src": "images/slova/šálka.png", "word": "šálka" }, + { "src": "images/slova/šampón.png", "word": "šampón" }, + { "src": "images/slova/šach.png", "word": "šach" }, + { "src": "images/slova/šaty.png", "word": "šaty" }, + { "src": "images/slova/šašo.png", "word": "šašo" }, + { "src": "images/slova/šiška.png", "word": "šiška" }, + { "src": "images/slova/šiltovka.png", "word": "šiltovka" }, + { "src": "images/slova/šípka.png", "word": "šípka" }, + { "src": "images/slova/šíp.png", "word": "šíp" }, + { "src": "images/slova/štipec.png", "word": "štipec" }, + { "src": "images/slova/švihadlo.png", "word": "švihadlo" }, + { "src": "images/slova/kôš.webp", "word": "kôš" }, + { "src": "images/slova/košík.webp", "word": "košík" }, + { "src": "images/slova/líška.webp", "word": "líška" }, + { "src": "images/slova/škola.png", "word": "škola" }, + { "src": "images/slova/gaštan.png", "word": "gaštan" }, + { "src": "images/slova/mušľa.webp", "word": "mušľa" }, + { "src": "images/slova/uši.png", "word": "uši" }, + { "src": "images/slova/šimpanz.png", "word": "šimpanz" }, + { "src": "images/slova/košeľa.webp", "word": "košeľa" }, + { "src": "images/slova/šatka.png", "word": "šatka" }, + { "src": "images/slova/fľaša.webp", "word": "fľaša" }, + { "src": "images/slova/soška.png", "word": "soška" }, + { "src": "images/slova/osuška.png", "word": "osuška" }, + { "src": "images/slova/zošit.webp", "word": "zošit" }, + { "src": "images/slova/sršeň.png", "word": "sršeň" }, + { "src": "images/slova/šesť.png", "word": "šesť" }, + { "src": "images/slova/šťastie.webp", "word": "šťastie" } + + ], + "Z": [ + { "src": "images/slova/zámok.png", "word": "zámok" }, + { "src": "images/slova/zebra.png", "word": "zebra" } + ] +} \ No newline at end of file diff --git a/js/superjozino/game.js b/js/superjozino/game.js new file mode 100644 index 0000000..c08a4f6 --- /dev/null +++ b/js/superjozino/game.js @@ -0,0 +1,3655 @@ +////////////////////////////////////////////// +// ============ LOADING SCREEN ============ // +// Čakanie na načítanie DOM obsahu // +// Skrytie loading screen s animáciou // +////////////////////////////////////////////// +document.addEventListener('DOMContentLoaded', function() { + window.addEventListener('load', function() { + setTimeout(hideLoadingScreen, 1000); // Čaká 1 sekundu potom skryje + }); + + console.log('Hra načítaná.'); +}); + +function hideLoadingScreen() { + const loadingScreen = document.getElementById('loading-screen'); + if (loadingScreen) { + loadingScreen.style.opacity = '0'; + setTimeout(() => { + loadingScreen.style.display = 'none'; + }, 500); + } +} + +/** + * ANIMATION MANAGER + * Správa animácií postavy - načítavanie a prehrávanie frame-ov + */ +class AnimationManager { + constructor() { + // Cesta k sprite-om + this.basePath = 'images/superjozino/assets/player/keyframes/yellow_hat/'; + + // Definícia animácií a počtu frame-ov + this.animations = { + idle: { frames: 20, speed: 15 }, // 000-019, pomalšie + walk: { frames: 8, speed: 10 }, // 000-007 + run: { frames: 8, speed: 6 }, // 000-007, rýchlejšie + jump: { frames: 10, speed: 8 }, // 000-009 + falling: { frames: 10, speed: 8 } // 000-009 + }; + + // Načítané obrázky + this.images = {}; + + // Aktuálny stav animácie + this.currentAnimation = 'idle'; + this.currentFrame = 0; + this.frameCounter = 0; + this.direction = 'right'; // 'left', 'right', 'front' + + // Načítanie všetkých sprite-ov + this.loadAllSprites(); + + } + + /** + * Načítanie všetkých sprite frame-ov + */ + loadAllSprites() { + console.log('🎨 Načítavam sprite-y postavy...'); + + for (let animName in this.animations) { + this.images[animName] = []; + const frameCount = this.animations[animName].frames; + + for (let i = 0; i < frameCount; i++) { + const img = new Image(); + // Formát názvu: __yellow_hat_idle_000.png + const frameNumber = i.toString().padStart(3, '0'); + img.src = `${this.basePath}__yellow_hat_${animName}_${frameNumber}.png`; + + this.images[animName].push(img); + + // Log pre prvý frame každej animácie (pre debugging) + if (i === 0) { + img.onload = () => { + console.log(`✅ Načítaná animácia: ${animName} (${frameCount} frame-ov)`); + }; + img.onerror = () => { + console.error(`❌ Chyba pri načítaní: ${img.src}`); + }; + } + } + } + } + + /** + * Nastavenie animácie + * @param {string} animationName - Názov animácie (idle, walk, run, jump, falling) + */ + setAnimation(animationName) { + if (this.currentAnimation !== animationName) { + this.currentAnimation = animationName; + this.currentFrame = 0; + this.frameCounter = 0; + } + } + + /** + * Nastavenie smeru + * @param {string} direction - 'left', 'right', 'front' + */ + setDirection(direction) { + this.direction = direction; + } + + /** + * Update animácie (volať v game loop-e) + * @param {number} deltaTime - Čas od posledného frame-u (normalizovaný na 60 FPS) + */ + update(deltaTime = 1) { + const anim = this.animations[this.currentAnimation]; + if (!anim) return; + + // Počítadlo frame-ov s deltaTime + this.frameCounter += deltaTime; + + // Keď uplynie dosť frame-ov, prejdi na ďalší sprite + if (this.frameCounter >= anim.speed) { + this.frameCounter = 0; + this.currentFrame++; + + // Loop animácie + if (this.currentFrame >= anim.frames) { + this.currentFrame = 0; + } + } + } + + /** + * Vykreslenie aktuálneho frame-u + * @param {CanvasRenderingContext2D} ctx - Canvas kontext + * @param {number} x - X pozícia + * @param {number} y - Y pozícia + * @param {number} width - Šírka + * @param {number} height - Výška + */ + draw(ctx, x, y, width, height) { + const frameImage = this.images[this.currentAnimation]?.[this.currentFrame]; + + if (!frameImage || !frameImage.complete) { + ctx.fillStyle = 'red'; + ctx.fillRect(x, y, width, height); + return; + } + + ctx.save(); + + // ⭐ PRIDAJ TOTO - vypne anti-aliasing + ctx.imageSmoothingEnabled = false; + + // Ak ide doľava, zrkadlovo otočíme sprite + if (this.direction === 'left') { + ctx.translate(x + width, y); + ctx.scale(-1, 1); + ctx.drawImage(frameImage, 0, 0, width, height); + } else { + ctx.drawImage(frameImage, x, y, width, height); + } + + ctx.restore(); + } +} + +// ============================================ +// ENEMY SYSTEM - Systém nepriateľov +// ============================================ + +/** + * ENEMY ANIMATION MANAGER + * Správa animácií pre všetkých nepriateľov v hre + */ +class EnemyAnimationManager { + constructor() { + // Základná cesta k sprite-om nepriateľov + this.basePath = 'images/superjozino/assets/mobs/'; + + // Načítané sprite sheety pre každý typ nepriateľa + this.spriteSheets = {}; + + // Konfigurácia pre každý typ nepriateľa + this.enemyConfig = { + AngryPig: { + path: 'AngryPig/', + animations: { + idle: { + frames: 9, + frameWidth: 36, + frameHeight: 30, + speed: 5, // Pomalšia idle animácia + loop: true + }, + walk: { + frames: 16, + frameWidth: 36, + frameHeight: 30, + speed: 4, // Stredná rýchlosť animácie + loop: true + }, + run: { + frames: 12, + frameWidth: 36, + frameHeight: 30, + speed: 3, // Rýchlejšia animácia + loop: true + }, + hit: { + frames: 5, + frameWidth: 36, + frameHeight: 30, + speed: 2, // Rýchla hit animácia + loop: false // Prehráva sa len raz + } + } + }, + Bat: { + path: 'Bat/', + animations: { + idle: { + frames: 12, + frameWidth: 46, + frameHeight: 30, + speed: 5, // Pomalá idle animácia (spí) + loop: true + }, + flying: { + frames: 7, + frameWidth: 46, + frameHeight: 30, + speed: 4, // Stredná rýchlosť mávnutia krídel + loop: true + }, + ceiling_in: { // Zasypanie (návrat na strop) + frames: 7, + frameWidth: 46, + frameHeight: 30, + speed: 5, + loop: false // Prehráva sa len raz + }, + ceiling_out: { // Prebúdzanie (opustenie stropu) + frames: 7, + frameWidth: 46, + frameHeight: 30, + speed: 5, + loop: false // Prehráva sa len raz + }, + hit: { + frames: 5, + frameWidth: 46, + frameHeight: 30, + speed: 2, + loop: false + } + } + }, + Ghost: { + path: 'Ghost/', + animations: { + idle: { + frames: 10, + frameWidth: 44, + frameHeight: 30, + speed: 4, // Stredná rýchlosť animácie (vlnenie ducha) + loop: true + }, + appear: { + frames: 4, + frameWidth: 44, + frameHeight: 30, + speed: 4, // Rýchlosť zjavenia + loop: false // Prehráva sa len raz + }, + disappear: { + frames: 4, + frameWidth: 44, + frameHeight: 30, + speed: 4, // Rýchlosť zmiznutia + loop: false // Prehráva sa len raz + }, + hit: { + frames: 5, // Použijeme idle animáciu aj pre hit (ghost sa nedá zabiť) + frameWidth: 44, + frameHeight: 30, + speed: 2, + loop: false + } + } + }, + Chameleon: { + path: 'Chameleon/', + animations: { + idle: { + frames: 13, + frameWidth: 84, + frameHeight: 38, + speed: 5, // Pomalá idle animácia + loop: true + }, + run: { + frames: 8, + frameWidth: 84, + frameHeight: 38, + speed: 4, // Bežná rýchlosť + loop: true + }, + attack: { + frames: 10, + frameWidth: 84, + frameHeight: 38, + speed: 3, // Rýchla attack animácia + loop: false // Prehráva sa len raz + }, + hit: { + frames: 5, + frameWidth: 84, + frameHeight: 38, + speed: 2, + loop: false + } + } + } + }; + + // Načítanie sprite sheetov + this.loadAllSprites(); + } + + /** + * Načítanie všetkých sprite sheetov pre nepriateľov + */ + loadAllSprites() { + console.log('👹 Načítavam sprite-y nepriateľov...'); + + // Pre každý typ nepriateľa + for (let enemyType in this.enemyConfig) { + const config = this.enemyConfig[enemyType]; + const enemyPath = this.basePath + config.path; + + // Inicializuj objekt pre tento typ nepriateľa + this.spriteSheets[enemyType] = {}; + + // Načítaj každú animáciu + for (let animName in config.animations) { + const img = new Image(); + img.src = `${enemyPath}${animName}.png`; + + // Ulož sprite sheet + this.spriteSheets[enemyType][animName] = img; + + // Log pre debugging + img.onload = () => { + const anim = config.animations[animName]; + console.log(`✅ ${enemyType} - ${animName}: ${anim.frames} frame-ov (${anim.frameWidth}x${anim.frameHeight}px)`); + }; + + img.onerror = () => { + console.error(`❌ Chyba pri načítaní: ${img.src}`); + }; + } + } + } + + /** + * Vykreslenie konkrétneho nepriateľa + * @param {CanvasRenderingContext2D} ctx - Canvas kontext + * @param {Enemy} enemy - Objekt nepriateľa + */ + draw(ctx, enemy) { + // Kontrola či je nepriateľ viditeľný + if (!enemy.visible) return; + + // Získaj konfiguráciu pre tento typ nepriateľa + const config = this.enemyConfig[enemy.type]; + if (!config) { + console.error(`❌ Neznámy typ nepriateľa: ${enemy.type}`); + return; + } + + // Získaj aktuálnu animáciu + const animConfig = config.animations[enemy.currentAnimation]; + if (!animConfig) { + console.error(`❌ Neznáma animácia: ${enemy.currentAnimation} pre ${enemy.type}`); + return; + } + + // Získaj sprite sheet pre túto animáciu + const spriteSheet = this.spriteSheets[enemy.type][enemy.currentAnimation]; + if (!spriteSheet || !spriteSheet.complete) { + // Placeholder ak sprite ešte nie je načítaný + ctx.fillStyle = 'red'; + ctx.fillRect(enemy.x, enemy.y, enemy.width, enemy.height); + return; + } + + // Vypočítaj pozíciu frame-u v sprite sheete + const frameX = enemy.animationFrame * animConfig.frameWidth; + const frameY = 0; // Všetky frame-y sú v jednom riadku + + // Vypni anti-aliasing pre pixel-perfect rendering + ctx.imageSmoothingEnabled = false; + + // Zrkadlenie sprite-u podľa smeru pohybu + ctx.save(); + + if (enemy.direction === 1) { // ⬅️ ZMENENÉ: Bolo -1, teraz 1 + // Otočenie doprava (flip horizontal) + ctx.translate(enemy.x + enemy.width, enemy.y); + ctx.scale(-1, 1); + ctx.drawImage( + spriteSheet, + frameX, frameY, // Pozícia v sprite sheete + animConfig.frameWidth, animConfig.frameHeight, // Veľkosť frame-u + 0, 0, // Pozícia na canvase (upravené kvôli flip) + enemy.width, enemy.height // Veľkosť vykreslenia + ); + } else { + // Normálne vykreslenie doľava (bez flip) + ctx.drawImage( + spriteSheet, + frameX, frameY, // Pozícia v sprite sheete + animConfig.frameWidth, animConfig.frameHeight, // Veľkosť frame-u + enemy.x, enemy.y, // Pozícia na canvase + enemy.width, enemy.height // Veľkosť vykreslenia + ); + } + + ctx.restore(); + } + + /** + * Aktualizácia animácie nepriateľa + * @param {Enemy} enemy - Objekt nepriateľa + * @param {number} deltaTime - Čas od posledného frame-u + */ + updateAnimation(enemy, deltaTime = 1) { + const config = this.enemyConfig[enemy.type]; + if (!config) return; + + const animConfig = config.animations[enemy.currentAnimation]; + if (!animConfig) return; + + // Počítadlo frame-ov pre rýchlosť animácie - s deltaTime + enemy.animationCounter += deltaTime; + + if (enemy.animationCounter >= animConfig.speed) { + enemy.animationCounter = 0; + enemy.animationFrame++; + + // Kontrola konca animácie + if (enemy.animationFrame >= animConfig.frames) { + if (animConfig.loop) { + // Loop animácia - vráť sa na začiatok + enemy.animationFrame = 0; + } else { + // Non-loop animácia (napr. hit) - zostane na poslednom frame + enemy.animationFrame = animConfig.frames - 1; + enemy.animationFinished = true; + } + } + } + } +} + +/** + * ENEMY - Základná trieda pre nepriateľa + */ +class Enemy { + constructor(x, y, type, config = {}) { + // Pozícia + this.x = x; + this.y = y; + + // Typ nepriateľa (AngryPig, Bat, Ghost, atď.) + this.type = type; + + // Veľkosť collision boxu + this.width = config.width || 40; + this.height = config.height || 30; + + // Pohyb + this.startX = config.startX || x; + this.endX = config.endX || x + 200; + this.speed = config.speed || 2; + this.direction = 1; // 1 = doprava, -1 = doľava + + // Vlastnosti + this.hp = config.hp || 1; + this.maxHp = config.hp || 1; + this.damage = config.damage || 1; // Koľko životov zoberie hráčovi + this.killable = config.killable !== undefined ? config.killable : true; + this.stunnable = config.stunnable !== undefined ? config.stunnable : false; + + // Stav + this.visible = true; + this.alive = true; + this.dying = false; + this.stunned = false; + this.stunnedTimer = 0; + + // Animácia + this.currentAnimation = 'walk'; + this.animationFrame = 0; + this.animationCounter = 0; + this.animationFinished = false; + + // Správanie (pre rôzne typy nepriateľov) + this.behaviorType = config.behaviorType || 'patrol'; // patrol, flying, stationary + } + + /** + * Nastavenie animácie + * @param {string} animationName - Názov animácie + */ + setAnimation(animationName) { + if (this.currentAnimation !== animationName) { + this.currentAnimation = animationName; + this.animationFrame = 0; + this.animationCounter = 0; + this.animationFinished = false; + } + } + + /** + * Aktualizácia nepriateľa + * @param {number} deltaTime - Čas od posledného frame-u + */ + update(deltaTime) { + // Ak umiera, nezastavuj update + if (!this.alive && !this.dying) return; + + // Ak umiera, nerobíme pohyb + if (this.dying) { + return; + } + + // Ak je omráčený, počítaj čas + if (this.stunned) { + // Odpočítaj čas omráčenia (deltaTime už je normalizované) + this.stunnedTimer -= deltaTime; + if (this.stunnedTimer <= 0) { + this.stunned = false; + this.setAnimation('walk'); + } + return; + } + + // Pohyb podľa typu správania + if (this.behaviorType === 'patrol') { + this.patrolBehavior(deltaTime); + } else if (this.behaviorType === 'flying') { + this.patrolBehavior(deltaTime); + } else if (this.behaviorType === 'sleeping') { + // SleepingBat má vlastnú update() + } else if (this.behaviorType === 'ghost') { + this.patrolBehavior(deltaTime); + } else if (this.behaviorType === 'chameleon') { + // Chameleon má vlastnú update() metódu + // (nepotrebujeme tu nič robiť) + } + } + + /** + * Správanie: Patrola medzi dvoma bodmi + * @param {number} deltaTime - Čas od posledného frame-u + */ + patrolBehavior(deltaTime) { + // Pohyb - rýchlosť × smer × deltaTime + this.x += this.speed * this.direction * deltaTime; // ✅ S deltaTime + + // Zmena smeru pri dosiahnutí hraníc + if (this.x <= this.startX) { + this.direction = 1; + this.x = this.startX; + } else if (this.x >= this.endX) { + this.direction = -1; + this.x = this.endX; + } + + // Animácia podľa rýchlosti + if (Math.abs(this.speed) > 1.3) { + this.setAnimation('run'); + } else { + this.setAnimation('walk'); + } + } + + /** + * Zasah od hráča (skok zhora) + */ + hit() { + if (!this.alive) return; + + this.hp--; + + if (this.hp <= 0) { + if (this.killable) { + // ⬅️ OPRAVA: Namiesto alive=false použijeme dying stav + this.dying = true; // ⬅️ NOVÝ STAV + this.alive = false; // Stále označíme ako neživý (pre kolízie) + this.setAnimation('hit'); + + // Skryje sa po dokončení animácie + // Hit má 5 frame-ov, speed 4 = 5*4 = 20 update cyklov pri 60 FPS = ~333ms + setTimeout(() => { + this.visible = false; + this.dying = false; // ⬅️ Reset stavu + }, 400); // ⬅️ Trochu dlhší timeout aby určite stihla dobehnúť + + } else if (this.stunnable) { + // Omráčiteľný nepriateľ - dočasne sa zastaví + this.stunned = true; + this.stunnedTimer = 120; + this.setAnimation('hit'); + this.hp = this.maxHp; + } + } + } + + /** + * Kontrola kolízie s iným objektom (napr. hráčom) + * @param {Object} other - Objekt na kontrolu kolízie + * @returns {boolean} - True ak došlo ku kolízii + */ + collidesWith(other) { + return this.alive && + this.x < other.x + other.width && + this.x + this.width > other.x && + this.y < other.y + other.height && + this.y + this.height > other.y; + } +} + +/** + * ANGRY PIG - Špecifická trieda pre AngryPig nepriateľa + */ +class AngryPig extends Enemy { + constructor(x, y, config = {}) { + // Predvolené hodnoty pre AngryPig + const pigConfig = { + width: 40, // Stredná veľkosť + height: 30, + speed: config.speed || 4, // Stredná rýchlosť + hp: 1, // Zabije sa jedným skokom + damage: 1, // Zoberie 1 život hráčovi + killable: true, // Dá sa zabiť + stunnable: false, // Nedá sa omráčiť + behaviorType: 'patrol', + ...config // Prepíš default hodnoty ak sú v config + }; + + // Zavolaj konštruktor rodiča + super(x, y, 'AngryPig', pigConfig); + } +} + + + +/** + * GREEN PIG - Zelené prasa (iba walk, pomalé) + * Jednoduché prasa ktoré len pomaly chodí + */ +class GreenPig extends Enemy { + constructor(x, y, config = {}) { + const pigConfig = { + width: 40, + height: 30, + speed: 2, // ⬅️ Vždy 1 (walk animácia) + hp: 1, + damage: 1, + killable: true, + stunnable: false, + behaviorType: 'patrol', + ...config + }; + + super(x, y, 'AngryPig', pigConfig); + this.pigType = 'green'; // Označenie typu + } + + /** + * Prepísané správanie - vždy iba walk + * @param {number} deltaTime - Čas od posledného frame-u + */ + patrolBehavior(deltaTime) { + // Pohyb - s deltaTime + this.x += this.speed * this.direction * deltaTime; + + // Zmena smeru + if (this.x <= this.startX) { + this.direction = 1; + this.x = this.startX; + } else if (this.x >= this.endX) { + this.direction = -1; + this.x = this.endX; + } + + // Vždy iba walk animácia + this.setAnimation('walk'); + } +} + +/** + * RED PIG - Červené prasa (iba run, rýchle) + * Agresívne prasa ktoré stále beží + */ +class RedPig extends Enemy { + constructor(x, y, config = {}) { + const pigConfig = { + width: 40, + height: 30, + speed: config.speed || 1.7, // ⬅️ Default rýchlejšie (1.5-2) + hp: 1, + damage: 1, + killable: true, + stunnable: false, + behaviorType: 'patrol', + ...config + }; + + super(x, y, 'AngryPig', pigConfig); + this.pigType = 'red'; + } + + /** + * Prepísané správanie - vždy iba run + * @param {number} deltaTime - Čas od posledného frame-u + */ + patrolBehavior(deltaTime) { + // Pohyb - s deltaTime + this.x += this.speed * this.direction * deltaTime; + + // Zmena smeru + if (this.x <= this.startX) { + this.direction = 1; + this.x = this.startX; + } else if (this.x >= this.endX) { + this.direction = -1; + this.x = this.endX; + } + + // Vždy iba run animácia + this.setAnimation('run'); + } +} + +/** + * COMBO PIG - Kombinované prasa (walk -> idle -> run -> idle) + * Inteligentné prasa s meniacim sa správaním + */ +class ComboPig extends Enemy { + constructor(x, y, config = {}) { + const pigConfig = { + width: 40, + height: 30, + speed: 1, // Začína pomaly + hp: 1, + damage: 1, + killable: true, + stunnable: false, + behaviorType: 'patrol', + ...config + }; + + super(x, y, 'AngryPig', pigConfig); + this.pigType = 'combo'; + + // ⬅️ State machine pre kombináciu správania + this.state = 'walking'; // walking, waiting_to_run, running, waiting_to_walk + this.stateTimer = 0; + this.waitTime = 120; // ~2 sekundy čakania pri 60 FPS + + // Rýchlosti pre rôzne stavy + this.walkSpeed = 1; + this.runSpeed = 4; + } + + /** + * Prepísané update - vlastný state machine + * @param {number} deltaTime - Čas od posledného frame-u + */ + update(deltaTime) { + // Ak umiera, nezastavuj update + if (!this.alive && !this.dying) return; + + // Ak umiera, nerobíme pohyb + if (this.dying) { + return; + } + + if (this.stunned) { + this.stunnedTimer -= deltaTime; + if (this.stunnedTimer <= 0) { + this.stunned = false; + this.state = 'walking'; + this.speed = this.walkSpeed; + } + return; + } + + // Pohyb - s deltaTime + this.x += this.speed * this.direction * deltaTime; + + // Zmena smeru na krajoch + let reachedEnd = false; + if (this.x <= this.startX) { + this.direction = 1; + this.x = this.startX; + reachedEnd = true; + } else if (this.x >= this.endX) { + this.direction = -1; + this.x = this.endX; + reachedEnd = true; + } + + // STATE MACHINE + switch(this.state) { + case 'walking': + this.speed = this.walkSpeed; + this.setAnimation('walk'); + + // Ak dosiahol koniec, prejdi do čakania + if (reachedEnd) { + this.state = 'waiting_to_run'; + this.stateTimer = this.waitTime; + this.speed = 0; // Zastav sa + } + break; + + case 'waiting_to_run': + this.speed = 0; // Stojí + this.setAnimation('idle'); + this.stateTimer -= deltaTime; // Odpočítaj s deltaTime + + // Po dočkaní sa rozbehni + if (this.stateTimer <= 0) { + this.state = 'running'; + this.speed = this.runSpeed; + } + break; + + case 'running': + this.speed = this.runSpeed; + this.setAnimation('run'); + + // Ak dosiahol koniec, prejdi do čakania + if (reachedEnd) { + this.state = 'waiting_to_walk'; + this.stateTimer = this.waitTime; + this.speed = 0; // Zastav sa + } + break; + + case 'waiting_to_walk': + this.speed = 0; // Stojí + this.setAnimation('idle'); + this.stateTimer -= deltaTime; // Odpočítaj s deltaTime + + // Po dočkaní sa pomaly pohni + if (this.stateTimer <= 0) { + this.state = 'walking'; + this.speed = this.walkSpeed; + } + break; + } + } +} + + +/** + * ============================================ + * BAT SYSTEM - Lietajúci nepriatelia + * ============================================ + */ + +/** + * SIMPLE BAT - Jednoduchý netopier + * Lieta horizontálne medzi dvoma bodmi (konštantná výška) + */ +class SimpleBat extends Enemy { + constructor(x, y, config = {}) { + const batConfig = { + width: 46, + height: 30, + speed: 1, // Pomalý pohyb + hp: 1, + damage: 1, + killable: true, + stunnable: false, + behaviorType: 'flying', // ⬅️ Nový typ správania + ...config + }; + + super(x, y, 'Bat', batConfig); + this.batType = 'simple'; + } + + /** + * Prepísané správanie - horizontálny let + */ + patrolBehavior() { + // Pohyb + this.x += this.speed * this.direction; + + // Zmena smeru + if (this.x <= this.startX) { + this.direction = 1; + this.x = this.startX; + } else if (this.x >= this.endX) { + this.direction = -1; + this.x = this.endX; + } + + // ⬅️ Vždy flying animácia + this.setAnimation('flying'); + } +} + +/** + * WAVE BAT - Vlnovitý netopier + * Lieta horizontálne + vlní sa hore-dole (sine wave) + */ +class WaveBat extends Enemy { + constructor(x, y, config = {}) { + const batConfig = { + width: 46, + height: 30, + speed: 2, + hp: 1, + damage: 1, + killable: true, + stunnable: false, + behaviorType: 'flying', + ...config + }; + + super(x, y, 'Bat', batConfig); + this.batType = 'wave'; + + // ⬅️ Pre vlnovitý pohyb + this.baseY = y; // Základná Y pozícia (stred vlny) + this.waveAmplitude = 30; // Amplitúda vlny (ako vysoko/nízko) + this.waveFrequency = 0.05; // Frekvencia vlny (ako rýchlo sa vlní) + this.waveOffset = 0; // Aktuálny offset pre výpočet + } + + /** + * Prepísané správanie - horizontálny pohyb + vlnenie + * @param {number} deltaTime - Čas od posledného frame-u + */ + patrolBehavior(deltaTime) { + // Horizontálny pohyb - s deltaTime + this.x += this.speed * this.direction * deltaTime; + + // Zmena smeru + if (this.x <= this.startX) { + this.direction = 1; + this.x = this.startX; + } else if (this.x >= this.endX) { + this.direction = -1; + this.x = this.endX; + } + + // Vertikálne vlnenie (sine wave) - s deltaTime + this.waveOffset += this.waveFrequency * deltaTime; + this.y = this.baseY + Math.sin(this.waveOffset) * this.waveAmplitude; + + // Vždy flying animácia + this.setAnimation('flying'); + } +} + +/** + * SLEEPING BAT - Spiaci netopier + * Visí na platforme → prebúdza sa → letí → vracia sa → zaspí + */ +class SleepingBat extends Enemy { + constructor(x, y, config = {}) { + const batConfig = { + width: 46, + height: 30, + speed: 3, // Rýchlejší keď lieta + hp: 1, + damage: 1, + killable: true, + stunnable: false, + behaviorType: 'sleeping', // ⬅️ Vlastný typ + ...config + }; + + super(x, y, 'Bat', batConfig); + this.batType = 'sleeping'; + + // ⬅️ State machine + this.state = 'sleeping'; // sleeping, waking, flying, returning, falling_asleep + this.stateTimer = 0; + + // Pozície + this.sleepX = x; // Pozícia kde spí (zavesený) + this.sleepY = y; // Y pozícia strechy + this.patrolStartX = config.patrolStartX || x - 50; // Začiatok patroly + this.patrolEndX = config.patrolEndX || x + 50; // Koniec patroly + + // Časovanie + this.sleepDuration = config.sleepDuration || 320; // ~3 sekundy spí + this.flyDuration = config.flyDuration || 320; // ~4 sekundy letí + + // Pre vlnenie počas letu (ako WaveBat) + this.waveAmplitude = 20; + this.waveFrequency = 0.05; + this.waveOffset = 0; + this.baseY = y + 50; // Lietať nižšie pod stropom + } + + /** + * Prepísané update - state machine + * @param {number} deltaTime - Čas od posledného frame-u + */ + update(deltaTime) { + // Kontrola dying stavu + if (!this.alive && !this.dying) return; + if (this.dying) return; + + if (this.stunned) { + this.stunnedTimer -= deltaTime; + if (this.stunnedTimer <= 0) { + this.stunned = false; + this.state = 'sleeping'; + this.x = this.sleepX; + this.y = this.sleepY; + } + return; + } + + // STATE MACHINE + switch(this.state) { + case 'sleeping': + // Spí zavesený na platforme + this.speed = 0; + this.x = this.sleepX; + this.y = this.sleepY; + this.setAnimation('idle'); + + this.stateTimer += deltaTime; // Odpočítaj s deltaTime + if (this.stateTimer >= this.sleepDuration) { + // Prebúdza sa + this.state = 'waking'; + this.stateTimer = 0; + } + break; + + case 'waking': + // Prebúdzanie - ceiling_out animácia + this.speed = 0; + this.setAnimation('ceiling_out'); + + // Počkaj na dokončenie animácie + this.stateTimer += deltaTime; // S deltaTime + if (this.stateTimer >= 50) { + // Začni lietať + this.state = 'flying'; + this.stateTimer = 0; + this.direction = 1; // Začni letieť doprava + this.startX = this.patrolStartX; + this.endX = this.patrolEndX; + this.x = this.sleepX; + this.waveOffset = 0; + } + break; + + case 'flying': + // Lietanie - wave pattern + this.speed = 1.5; + this.setAnimation('flying'); + + // Horizontálny pohyb - s deltaTime + this.x += this.speed * this.direction * deltaTime; + + // Zmena smeru na krajoch + if (this.x <= this.startX) { + this.direction = 1; + this.x = this.startX; + } else if (this.x >= this.endX) { + this.direction = -1; + this.x = this.endX; + } + + // Vertikálne vlnenie - s deltaTime + this.waveOffset += this.waveFrequency * deltaTime; + this.y = this.baseY + Math.sin(this.waveOffset) * this.waveAmplitude; + + // Časovač letu - s deltaTime + this.stateTimer += deltaTime; + if (this.stateTimer >= this.flyDuration) { + // Vráť sa späť + this.state = 'returning'; + this.stateTimer = 0; + } + break; + + case 'returning': + // Návrat na spací miesto + this.speed = 2; // Rýchlejší návrat + this.setAnimation('flying'); + + // Pohyb smerom k sleep pozícii + const dx = this.sleepX - this.x; + const dy = this.sleepY - this.y; + const distance = Math.sqrt(dx * dx + dy * dy); + + if (distance > 5) { + // Pohybuj sa k cieľu - s deltaTime + this.x += (dx / distance) * this.speed * deltaTime; + this.y += (dy / distance) * this.speed * deltaTime; + + // Nastav smer podľa pohybu + this.direction = dx > 0 ? 1 : -1; + } else { + // Dosiahol spací bod + this.x = this.sleepX; + this.y = this.sleepY; + this.state = 'falling_asleep'; + this.stateTimer = 0; + } + break; + + case 'falling_asleep': + // Zasypanie - ceiling_in animácia + this.speed = 0; + this.x = this.sleepX; + this.y = this.sleepY; + this.setAnimation('ceiling_in'); + + // Počkaj na dokončenie animácie - s deltaTime + this.stateTimer += deltaTime; + if (this.stateTimer >= 50) { + // Zaspi + this.state = 'sleeping'; + this.stateTimer = 0; + } + break; + } + } +} + +/** + * ============================================ + * GHOST SYSTEM - Duchovia (nezabiteľní) + * ============================================ + */ + +/** + * PATROL GHOST - Klasický duch + * Lietá medzi bodmi, prechádza stenami, nezabiteľný + */ +class PatrolGhost extends Enemy { + constructor(x, y, config = {}) { + const ghostConfig = { + width: 44, + height: 30, + speed: config.speed || 2, + hp: 999, // ⬅️ Veľa HP (nezabiteľný) + damage: 1, + killable: false, // ⬅️ Nedá sa zabiť! + stunnable: false, + behaviorType: 'ghost', // ⬅️ Nový typ + ...config + }; + + super(x, y, 'Ghost', ghostConfig); + this.ghostType = 'patrol'; + + // ⬅️ Duch ignoruje gravitáciu a steny + this.ignoresWalls = true; + } + + /** + * Prepísané správanie - patrol bez kolízií + */ + patrolBehavior() { + // Pohyb (prechádza stenami!) + this.x += this.speed * this.direction; + + // Zmena smeru + if (this.x <= this.startX) { + this.direction = 1; + this.x = this.startX; + } else if (this.x >= this.endX) { + this.direction = -1; + this.x = this.endX; + } + + // ⬅️ Vždy idle animácia (vlnenie ducha) + this.setAnimation('idle'); + } +} + +/** + * PHASING GHOST - Mizne a objavuje sa + * State machine: visible → disappearing → invisible → appearing → visible + */ +class PhasingGhost extends Enemy { + constructor(x, y, config = {}) { + const ghostConfig = { + width: 44, + height: 30, + speed: config.speed || 2, + hp: 999, + damage: 1, + killable: false, + stunnable: false, + behaviorType: 'ghost', + ...config + }; + + super(x, y, 'Ghost', ghostConfig); + this.ghostType = 'phasing'; + this.ignoresWalls = true; + + // ⬅️ State machine pre phasing + this.state = 'visible'; // visible, disappearing, invisible, appearing + this.stateTimer = 0; + + // Časovanie (v frame-och pri 60 FPS) + this.visibleDuration = config.visibleDuration || 180; // ~3 sekundy viditeľný + this.invisibleDuration = config.invisibleDuration || 120; // ~2 sekundy neviditeľný + + // Phasing vlastnosti + this.canHurt = true; // Počas invisible nemôže ublížiť + } + + /** + * Prepísané update - state machine s phasing + * @param {number} deltaTime - Čas od posledného frame-u + */ + update(deltaTime) { + // Duch nikdy neumiera, ale kontrolujeme dying stav pre istotu + if (this.dying) return; + + // STATE MACHINE + switch(this.state) { + case 'visible': + // Normálny pohyb, viditeľný, môže ublížiť + this.visible = true; + this.canHurt = true; + this.setAnimation('idle'); + + // Pohyb - s deltaTime + this.x += this.speed * this.direction * deltaTime; + if (this.x <= this.startX) { + this.direction = 1; + this.x = this.startX; + } else if (this.x >= this.endX) { + this.direction = -1; + this.x = this.endX; + } + + // Časovač - s deltaTime + this.stateTimer += deltaTime; + if (this.stateTimer >= this.visibleDuration) { + this.state = 'disappearing'; + this.stateTimer = 0; + } + break; + + case 'disappearing': + // Animácia zmiznutia + this.canHurt = false; // Už nemôže ublížiť + this.setAnimation('disappear'); + + // Stále sa pohybuje - s deltaTime + this.x += this.speed * this.direction * deltaTime; + if (this.x <= this.startX) { + this.direction = 1; + this.x = this.startX; + } else if (this.x >= this.endX) { + this.direction = -1; + this.x = this.endX; + } + + // Počkaj na dokončenie animácie - s deltaTime + this.stateTimer += deltaTime; + if (this.stateTimer >= 40) { + this.state = 'invisible'; + this.stateTimer = 0; + this.visible = false; // Skry ducha + } + break; + + case 'invisible': + // Neviditeľný, pohybuje sa, nemôže ublížiť + this.visible = false; + this.canHurt = false; + + // Stále sa pohybuje (aj keď neviditeľný) - s deltaTime + this.x += this.speed * this.direction * deltaTime; + if (this.x <= this.startX) { + this.direction = 1; + this.x = this.startX; + } else if (this.x >= this.endX) { + this.direction = -1; + this.x = this.endX; + } + + // Časovač - s deltaTime + this.stateTimer += deltaTime; + if (this.stateTimer >= this.invisibleDuration) { + this.state = 'appearing'; + this.stateTimer = 0; + } + break; + + case 'appearing': + // Animácia zjavenia + this.visible = true; + this.canHurt = false; // Ešte nemôže ublížiť + this.setAnimation('appear'); + + // Stále sa pohybuje - s deltaTime + this.x += this.speed * this.direction * deltaTime; + if (this.x <= this.startX) { + this.direction = 1; + this.x = this.startX; + } else if (this.x >= this.endX) { + this.direction = -1; + this.x = this.endX; + } + + // Počkaj na dokončenie animácie - s deltaTime + this.stateTimer += deltaTime; + if (this.stateTimer >= 40) { + this.state = 'visible'; + this.stateTimer = 0; + this.canHurt = true; // Teraz môže ublížiť + } + break; + } + } +} + + +/** + * ============================================ + * CHAMELEON - Chameleón s útokom jazykom + * ============================================ + */ + +/** + * CHAMELEON - Útočí jazykom na hráča + * Patruluje → detekuje hráča → zastaví → útok jazykom → cooldown + */ +class Chameleon extends Enemy { + constructor(x, y, config = {}) { + const chameleonConfig = { + width: 84, + height: 38, + speed: config.speed || 0.7, + hp: 1, + damage: 1, + killable: true, + stunnable: false, + behaviorType: 'chameleon', + ...config + }; + + super(x, y, 'Chameleon', chameleonConfig); + + // ⬅️ NOVÝ STATE: patrol, turning, preparing, attacking, cooldown + this.state = 'patrol'; + this.stateTimer = 0; + + // Útok jazykom + this.detectionRange = config.detectionRange || 150; + this.tongueRange = config.tongueRange || 100; + this.attackDuration = 50; + this.cooldownDuration = 90; + this.turningDuration = 40; // ⬅️ NOVÉ: ~0.7 sekundy idle na otočke + + // ⬅️ NOVÉ: Vertikálna tolerancia pre detekciu (hráč musí byť približne na rovnakej výške) + this.verticalTolerance = config.verticalTolerance || 50; // 50px hore/dole + + this.tongueHitbox = null; + this.tongueActive = false; + this.player = null; + } + + /** + * Aktualizácia Chameleona + * @param {number} deltaTime - Čas od posledného frame-u + */ + update(deltaTime) { + if (!this.alive && !this.dying) return; + if (this.dying) return; + + if (this.stunned) { + this.stunnedTimer -= deltaTime; + if (this.stunnedTimer <= 0) { + this.stunned = false; + this.state = 'patrol'; + } + return; + } + + switch(this.state) { + case 'patrol': + this.tongueActive = false; + this.tongueHitbox = null; + + // Pohyb - s deltaTime + this.x += this.speed * this.direction * deltaTime; + + // Pri dosiahnutí konca trasy prejdi do turning state + if (this.x <= this.startX) { + this.x = this.startX; + this.state = 'turning'; + this.stateTimer = 0; + this.speed = 0; + this.direction = 1; // Priprav sa otočiť doprava + } else if (this.x >= this.endX) { + this.x = this.endX; + this.state = 'turning'; + this.stateTimer = 0; + this.speed = 0; + this.direction = -1; // Priprav sa otočiť doľava + } + + // Animácia + if (Math.abs(this.speed) > 0.1) { + this.setAnimation('run'); + } else { + this.setAnimation('idle'); + } + + // Lepšia detekcia hráča + if (this.player && this.isPlayerInAttackRange()) { + this.state = 'preparing'; + this.stateTimer = 0; + this.speed = 0; + + // Otoč sa smerom k hráčovi + if (this.player.x < this.x) { + this.direction = -1; + } else { + this.direction = 1; + } + } + break; + + case 'turning': + // Idle animácia na otočke + this.speed = 0; + this.setAnimation('idle'); + + this.stateTimer += deltaTime; // S deltaTime + if (this.stateTimer >= this.turningDuration) { + // Otočka dokončená, pokračuj v patrole + this.state = 'patrol'; + this.stateTimer = 0; + this.speed = 0.7; // Obnov rýchlosť + } + + // Aj počas otáčania môže útočiť ak je hráč blízko + if (this.player && this.isPlayerInAttackRange()) { + this.state = 'preparing'; + this.stateTimer = 0; + + // Otoč sa k hráčovi + if (this.player.x < this.x) { + this.direction = -1; + } else { + this.direction = 1; + } + } + break; + + case 'preparing': + this.speed = 0; + this.setAnimation('idle'); + + this.stateTimer += deltaTime; // S deltaTime + if (this.stateTimer >= 20) { + this.state = 'attacking'; + this.stateTimer = 0; + } + break; + + case 'attacking': + this.speed = 0; + this.setAnimation('attack'); + + const attackProgress = this.stateTimer / this.attackDuration; + if (attackProgress >= 0.3 && attackProgress <= 0.8) { + this.tongueActive = true; + this.updateTongueHitbox(); + } else { + this.tongueActive = false; + this.tongueHitbox = null; + } + + this.stateTimer += deltaTime; // S deltaTime + if (this.stateTimer >= this.attackDuration) { + this.state = 'cooldown'; + this.stateTimer = 0; + this.tongueActive = false; + this.tongueHitbox = null; + } + break; + + case 'cooldown': + this.speed = 0; + this.setAnimation('idle'); + this.tongueActive = false; + this.tongueHitbox = null; + + this.stateTimer += deltaTime; // S deltaTime + if (this.stateTimer >= this.cooldownDuration) { + this.state = 'patrol'; + this.stateTimer = 0; + this.speed = 0.7; + } + break; + } + } + + /** + * ⬅️ OPRAVENÉ: Lepšia detekcia - kontrola horizontálnej A vertikálnej pozície + */ + isPlayerInAttackRange() { + if (!this.player) return false; + + // Horizontálna vzdialenosť + const horizontalDistance = Math.abs(this.player.x - this.x); + + // Vertikálna vzdialenosť (rozdiel Y súradníc) + const playerCenterY = this.player.y + this.player.height / 2; + const enemyCenterY = this.y + this.height / 2; + const verticalDistance = Math.abs(playerCenterY - enemyCenterY); + + // Kontrola smeru (hráč musí byť PRED Chameleonom) + const isInFront = (this.direction === 1 && this.player.x > this.x) || + (this.direction === -1 && this.player.x < this.x); + + // ⬅️ NOVÉ: Hráč musí byť: + // 1. V horizontálnom dosahu (detection range) + // 2. V vertikálnom dosahu (verticalTolerance) - približne na rovnakej výške + // 3. Pred Chameleonom (nie za ním) + return horizontalDistance <= this.detectionRange && + verticalDistance <= this.verticalTolerance && + isInFront; + } + + updateTongueHitbox() { + const tongueWidth = this.tongueRange; + const tongueHeight = 20; + + let tongueX; + if (this.direction === 1) { + tongueX = this.x + this.width; + } else { + tongueX = this.x - tongueWidth; + } + + const tongueY = this.y + (this.height / 2) - (tongueHeight / 2); + + this.tongueHitbox = { + x: tongueX, + y: tongueY, + width: tongueWidth, + height: tongueHeight + }; + } +} + + + + + + + + + + + +//============================================================ +// + + +/** + * COIN ANIMATION MANAGER + * Správa animácií odmien - mince, diamanty + */ +class CoinAnimationManager { + constructor() { + // Cesta k obrázkom odmien + this.basePath = 'images/superjozino/assets/treasure/'; + + // Definícia typov odmien + this.coinTypes = { + // 💛 Normálne mince + gold: { + folder: 'Gold Coin', + frames: 4, + speed: 8 + }, + + // 🥈 Strieborné mince - posluchové cvičenia (TODO: overiť cestu) + silver: { + folder: 'Silver Coin', + frames: 4, + speed: 8 + }, + + // 💙 Modrý diamant - rečové cvičenia + blueDiamond: { + folder: 'Blue Diamond', + frames: 4, + speed: 6 + }, + + // 💚 Zelený diamant - bonusový predmet (power-up) + greenDiamond: { + folder: 'Green Diamond', + frames: 4, + speed: 10 + }, + + // ❤️ Červený diamant - bonusový predmet (extra život) + redDiamond: { + folder: 'Red Diamond', + frames: 4, + speed: 10 + } + }; + + // Načítané obrázky + this.images = {}; + + // Globálny frame counter (všetky mince sa animujú synchronizovane) + this.globalFrame = 0; + this.frameCounter = 0; + + // Načítanie všetkých sprite-ov + this.loadAllSprites(); + } + + /** + * Načítanie všetkých sprite frame-ov + */ + loadAllSprites() { + console.log('💰 Načítavam sprite-y odmien...'); + + for (let typeName in this.coinTypes) { + const coinType = this.coinTypes[typeName]; + this.images[typeName] = []; + + for (let i = 1; i <= coinType.frames; i++) { + const img = new Image(); + // Formát: 01.png, 02.png, 03.png, 04.png + const frameNumber = i.toString().padStart(2, '0'); + img.src = `${this.basePath}${coinType.folder}/${frameNumber}.png`; + + this.images[typeName].push(img); + + // Log pre prvý frame každého typu (pre debugging) + if (i === 1) { + img.onload = () => { + console.log(`✅ Načítaná odmena: ${typeName} (${coinType.frames} frame-ov)`); + }; + img.onerror = () => { + console.error(`❌ Chyba pri načítaní: ${img.src}`); + }; + } + } + } + } + + /** + * Update animácie (volať v game loop-e) + * @param {number} deltaTime - Čas od posledného frame-u + */ + update(deltaTime = 1) { + // Počítadlo frame-ov s deltaTime + this.frameCounter += deltaTime; + + // Všetky mince používajú rovnakú rýchlosť animácie + if (this.frameCounter >= 10) { // speed z coinTypes + this.frameCounter = 0; + this.globalFrame++; + + // Loop animácie (4 frame-y: 0,1,2,3,0,1,2,3...) + if (this.globalFrame >= 4) { + this.globalFrame = 0; + } + } + } + + /** + * Vykreslenie odmeny + * @param {CanvasRenderingContext2D} ctx - Canvas kontext + * @param {string} type - Typ odmeny ('gold', 'blueDiamond', 'greenDiamond', 'redDiamond') + * @param {number} x - X pozícia + * @param {number} y - Y pozícia + * @param {number} size - Veľkosť (šírka/výška) + */ + draw(ctx, type, x, y, size) { + const frameImage = this.images[type]?.[this.globalFrame]; + + if (!frameImage || !frameImage.complete) { + // Placeholder ak sprite ešte nie je načítaný + ctx.fillStyle = type === 'gold' ? '#FFD700' : '#00FFFF'; + ctx.beginPath(); + ctx.arc(x + size/2, y + size/2, size/2, 0, Math.PI * 2); + ctx.fill(); + return; + } + + // Vypni anti-aliasing pre pixel-perfect rendering + ctx.imageSmoothingEnabled = false; + + // Zachovanie aspect ratio (pôvodných proporcií obrázka) + const imgWidth = frameImage.naturalWidth || frameImage.width; + const imgHeight = frameImage.naturalHeight || frameImage.height; + const aspectRatio = imgWidth / imgHeight; + + let drawWidth = size; + let drawHeight = size; + + // Ak obrázok nie je štvorec, zachováme proporcie + if (aspectRatio > 1) { + // Širší ako vyšší + drawHeight = size / aspectRatio; + } else if (aspectRatio < 1) { + // Vyšší ako širší + drawWidth = size * aspectRatio; + } + + // Vycentruj obrázok + const offsetX = (size - drawWidth) / 2; + const offsetY = (size - drawHeight) / 2; + + // Vykresli animovaný sprite so zachovanými proporciami + ctx.drawImage(frameImage, x + offsetX, y + offsetY, drawWidth, drawHeight); + } +} + +/** + * CHECKPOINT ANIMATION MANAGER + * Správa animácií checkpointov - neaktívny, aktivácia, idle + */ +class CheckpointAnimationManager { + constructor() { + // Cesta k obrázkom checkpointov + this.basePath = 'images/superjozino/assets/checkpoint/'; + + // Sprite sheety (veľké obrázky s frame-mi) + this.spriteSheets = { + noflag: null, // Jednoduchý obrázok (stĺpik bez vlajky) + flag: null, // 1664x64px (26 frame-ov po 64px) + idleflag: null // 640x64px (10 frame-ov po 64px) + }; + + // Definícia animácií + this.animations = { + inactive: { + spriteSheet: 'noflag', + frames: 1, + speed: 0 // Žiadna animácia + }, + activating: { + spriteSheet: 'flag', + frames: 26, + frameWidth: 64, + speed: 2, // Rýchla animácia aktivácie + loop: false // Prehráva sa len raz + }, + idle: { + spriteSheet: 'idleflag', + frames: 10, + frameWidth: 64, + speed:4, // Pomalšia idle animácia + loop: true + } + }; + + // Načítanie sprite sheetov + this.loadSprites(); + } + + /** + * Načítanie všetkých sprite sheetov + */ + loadSprites() { + console.log('🚩 Načítavam sprite-y checkpointov...'); + + // Načítaj noflag + this.spriteSheets.noflag = new Image(); + this.spriteSheets.noflag.src = `${this.basePath}noflag.png`; + this.spriteSheets.noflag.onload = () => { + console.log('✅ Načítaný checkpoint: noflag'); + }; + + // Načítaj flag (aktivácia) + this.spriteSheets.flag = new Image(); + this.spriteSheets.flag.src = `${this.basePath}flag.png`; + this.spriteSheets.flag.onload = () => { + console.log('✅ Načítaný checkpoint: flag (26 frame-ov)'); + }; + + // Načítaj idleflag + this.spriteSheets.idleflag = new Image(); + this.spriteSheets.idleflag.src = `${this.basePath}idleflag.png`; + this.spriteSheets.idleflag.onload = () => { + console.log('✅ Načítaný checkpoint: idleflag (10 frame-ov)'); + }; + } + + /** + * Update animácie checkpointu + * @param {Object} checkpoint - Checkpoint objekt + * @param {number} deltaTime - Čas od posledného frame-u + */ + updateCheckpoint(checkpoint, deltaTime = 1) { + // Inicializuj animačné vlastnosti ak neexistujú + if (!checkpoint.animState) { + // Prvý checkpoint (isStart) a finish začínajú ako idle + if (checkpoint.isStart || checkpoint.isFinish) { + checkpoint.animState = 'idle'; + } else { + checkpoint.animState = 'inactive'; + } + checkpoint.animFrame = 0; + checkpoint.animCounter = 0; + } + + const anim = this.animations[checkpoint.animState]; + if (!anim || anim.frames <= 1) return; + + // Počítadlo s deltaTime + checkpoint.animCounter += deltaTime; + + // Posun na ďalší frame + if (checkpoint.animCounter >= anim.speed) { + checkpoint.animCounter = 0; + checkpoint.animFrame++; + + // Koniec animácie + if (checkpoint.animFrame >= anim.frames) { + if (anim.loop) { + // Loop animácia (idle) + checkpoint.animFrame = 0; + } else { + // Animácia sa prehráva len raz (activating) + checkpoint.animFrame = anim.frames - 1; // Zostaň na poslednom frame + checkpoint.animState = 'idle'; // Prejdi do idle stavu + checkpoint.animFrame = 0; + } + } + } + } + + /** + * Aktivácia checkpointu (spustenie animácie) + * @param {Object} checkpoint - Checkpoint objekt + */ + activateCheckpoint(checkpoint) { + if (checkpoint.animState !== 'inactive') return; + + console.log('🚩 Aktivujem checkpoint!'); + checkpoint.animState = 'activating'; + checkpoint.animFrame = 0; + checkpoint.animCounter = 0; + } + + /** + * Vykreslenie checkpointu + * @param {CanvasRenderingContext2D} ctx - Canvas kontext + * @param {Object} checkpoint - Checkpoint objekt + */ + draw(ctx, checkpoint) { + // Inicializuj animačný stav ak neexistuje + if (!checkpoint.animState) { + // Prvý checkpoint (isStart) začína ako idle, ostatné ako inactive + if (checkpoint.isStart || checkpoint.isFinish) { + checkpoint.animState = 'idle'; + } else { + checkpoint.animState = checkpoint.active ? 'idle' : 'inactive'; + } + checkpoint.animFrame = 0; + checkpoint.animCounter = 0; + } + + const anim = this.animations[checkpoint.animState]; + const spriteSheet = this.spriteSheets[anim.spriteSheet]; + + if (!spriteSheet || !spriteSheet.complete) { + // Placeholder - starý spôsob vykreslenia + this.drawOldStyle(ctx, checkpoint); + return; + } + + // Vypni anti-aliasing + ctx.imageSmoothingEnabled = false; + + // Výpočet pozície frame-u v sprite sheete + let sourceX = 0; + if (anim.frames > 1) { + sourceX = checkpoint.animFrame * anim.frameWidth; + } + + // Vypočítaj veľkosť vykreslenia + const drawWidth = checkpoint.width || 64; + const drawHeight = checkpoint.height || 64; + + // Pre finish flag môžeme upraviť pozíciu aby bol vyššie + let drawY = checkpoint.y; + if (checkpoint.isFinish) { + // Posun Y hore aby vlajka bola vyššie (ale collision box zostane rovnaký) + drawY = checkpoint.y - (drawHeight - 64) / 2; + } + + // Vykresli checkpoint + ctx.drawImage( + spriteSheet, + sourceX, 0, // Pozícia v sprite sheete + anim.frameWidth || 64, 64, // Veľkosť frame-u v sprite sheete + checkpoint.x, + drawY, + drawWidth, // Veľkosť na canvase + drawHeight + ); + } + + /** + * Starý štýl vykreslenia (fallback) + */ + drawOldStyle(ctx, checkpoint) { + // Kreslenie stožiaru vlajky + ctx.fillStyle = '#8B4513'; + ctx.fillRect( + checkpoint.x, + checkpoint.y, + checkpoint.width, + checkpoint.height + ); + + // Kreslenie vlajky + ctx.beginPath(); + ctx.fillStyle = checkpoint.isStart ? '#00FF00' : (checkpoint.active ? '#FF0000' : '#800000'); + + if (checkpoint.active) { + // Vztýčená vlajka + ctx.moveTo(checkpoint.x, checkpoint.y); + ctx.lineTo(checkpoint.x + 30, checkpoint.y + 15); + ctx.lineTo(checkpoint.x, checkpoint.y + 30); + } else { + // Spustená vlajka + ctx.moveTo(checkpoint.x, checkpoint.y + checkpoint.height - 30); + ctx.lineTo(checkpoint.x + 30, checkpoint.y + checkpoint.height - 15); + ctx.lineTo(checkpoint.x, checkpoint.y + checkpoint.height); + } + ctx.fill(); + } +} + + +class Game { + constructor() { + this.canvas = document.getElementById('gameCanvas'); + this.ctx = this.canvas.getContext('2d'); + this.width = 800; + this.height = 800; + + // Herné vlastnosti + this.gravity = 0.45; + this.friction = 0.75; + this.maxFallSpeed = 15; + this.currentLevel = 1; + this.gameState = 'playing'; // 'playing', 'paused', 'completed' + this.lives = 3; + this.isInvulnerable = false; + this.invulnerableTime = 2000; // 2 sekundy nezraniteľnosti po zásahu + this.lastCheckpoint = null; + + // Mince a diamanty + this.collectedCoins = 0; + this.totalCoins = 0; + this.collectedDiamonds = 0; + this.requiredDiamonds = this.currentLevelData?.diamonds?.length || 4; + + // debug mód + this.debug = false; + this.debugInfo = document.getElementById('debugInfo'); + this.setupDebugControls(); + this.lastTime = 0; + this.fps = 0; + + // Inicializácia hráča + // Inicializácia hráča + this.player = { + x: 100, + y: 100, + + // COLLISION BOX - skutočná veľkosť pre kolízie (menšia!) + width: 32, // Šírka collision boxu (užší) + height: 64, // Výška collision boxu (vyšší, ale menší ako sprite) + + // SPRITE - veľkosť obrázka (väčší pre vizuál) + spriteWidth: 96, // Šírka sprite-u + spriteHeight: 96, // Výška sprite-u + + // OFFSET - posun sprite-u relatívne k collision boxu + spriteOffsetX: -32, // Posun doľava aby bol sprite centrovaný (96-32)/2 = 32 + spriteOffsetY: -22, // Posun hore aby nohy boli na spodku collision boxu + + velocityX: 0, + velocityY: 0, + speed: 6, + jumpForce: -14, + isJumping: false + }; + this.animationManager = new AnimationManager(); + this.coinAnimationManager = new CoinAnimationManager(); + this.checkpointAnimationManager = new CheckpointAnimationManager(); + this.enemyAnimationManager = new EnemyAnimationManager(); + + // Kamera + this.camera = { + x: 0, + y: 0 + }; + + + // ========================================== + // NAČÍTANIE SPRITE SHEETOV + // ========================================== + + // Terrain sprite sheet (obsahuje zem, platformy, bloky) + this.terrainSprite = new Image(); + this.terrainSprite.src = 'images/superjozino/assets/terrain.png'; + this.terrainSprite.loaded = false; + + // Event listener pre načítanie sprite sheetu + this.terrainSprite.onload = () => { + this.terrainSprite.loaded = true; + console.log('✅ Terrain sprite sheet načítaný'); + }; + + this.terrainSprite.onerror = () => { + console.error('❌ Chyba pri načítaní terrain sprite sheetu!'); + console.error('Skontroluj cestu: images/superjozino/assets/terrain.png'); + }; + + // Definícia tile-ov v sprite sheete (súradnice a rozmery) + this.tiles = { + ground: { + x: 98, // Pozícia X v sprite sheete + y: 2, // Pozícia Y v sprite sheete + width: 45, // Šírka tile-u + height: 45 // Výška tile-u + }, + // Platformy (4 typy) + platform1: { + x: 193, // Začiatok x + y: 2, // Začiatok y + width: 46, // Šírka (239 - 193) + height: 13 // Výška (15 - 2) + }, + platform2: { + x: 193, // Začiatok x + y: 16, // Začiatok y + width: 14, // Šírka (207 - 193) + height: 14 // Výška (30 - 16) + }, + platform3: { + x: 209, // Začiatok x + y: 16, // Začiatok y + width: 30, // Šírka (239 - 209) + height: 30 // Výška (46 - 16) + }, + platform4: { + x: 242, // Začiatok x + y: 2, // Začiatok y + width: 14, // Šírka (256 - 242) + height: 44 // Výška (46 - 2) + } + }; + + // Speech UI + this.createSpeechUI(); + + // Načítanie levelu + this.loadLevel(this.currentLevel); + + // animacia smrti + this.deathAnimation = { + active: false, + timer: 0, + duration: 1000, // 1 sekunda na animáciu smrti + type: null // 'gap' alebo 'enemy' + }; + + // Ovládanie + this.keys = {}; + this.setupControls(); + + // Exponuj game objekt pre joystick + window.game = this; + + // Spustenie hernej slučky + this.gameLoop(); + } + + setupDebugControls() { + const toggleBtn = document.getElementById('toggleDebug'); + toggleBtn.addEventListener('click', () => { + this.debug = !this.debug; + toggleBtn.textContent = `Debug Mode: ${this.debug ? 'ON' : 'OFF'}`; + }); + + // Pridáme aj klávesovú skratku 'D' + window.addEventListener('keydown', (e) => { + if (e.code === 'KeyD') { + this.debug = !this.debug; + toggleBtn.textContent = `Debug Mode: ${this.debug ? 'ON' : 'OFF'}`; + } + }); + } + + createSpeechUI() { + // Vytvorenie modálneho okna pre rečové cvičenia + this.speechModal = document.createElement('div'); + this.speechModal.className = 'speech-modal'; + this.speechModal.style.cssText = ` + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.8); + display: none; + justify-content: center; + align-items: center; + z-index: 1000; + `; + + document.body.appendChild(this.speechModal); + } + + showSpeechResult(success) { + const modal = document.querySelector('.speech-content'); + const resultMessage = modal.querySelector('.result-message'); + const recordButton = document.getElementById('startRecording'); + + if (success) { + resultMessage.textContent = 'Správne!'; + resultMessage.style.color = '#4CAF50'; + modal.classList.add('correct-answer'); + setTimeout(() => { + modal.classList.remove('correct-answer'); + this.hideSpeechExercise(); + this.gameState = 'playing'; + }, 1500); + } else { + exercise.attempts++; + resultMessage.textContent = 'Nesprávne, skús znova.'; + resultMessage.style.color = '#f44336'; + modal.classList.add('wrong-answer'); + + // Aktualizácia počtu pokusov + modal.querySelector('.attempts-info').textContent = `Počet pokusov: ${exercise.attempts}/5`; + + setTimeout(() => { + modal.classList.remove('wrong-answer'); + }, 500); + + // Kontrola maximálneho počtu pokusov + if (exercise.attempts >= 5) { + resultMessage.textContent = 'Dosiahol si maximálny počet pokusov.'; + recordButton.disabled = true; + recordButton.style.opacity = '0.5'; + + // Pridanie tlačidla na zatvorenie + const closeButton = document.createElement('button'); + closeButton.className = 'button'; + closeButton.style.marginTop = '10px'; + closeButton.textContent = 'Zavrieť'; + closeButton.onclick = () => { + this.hideSpeechExercise(); + this.gameState = 'playing'; + }; + modal.appendChild(closeButton); + } + } + } + + showSpeechExercise(exercise) { + this.speechModal.innerHTML = ` +
    +

    ${exercise.word}

    + ${exercise.word} +
    Počet pokusov: ${exercise.attempts}/5
    + +
    +
    + `; + this.speechModal.style.display = 'flex'; + + // Pridanie event listenera pre tlačidlo nahrávania + document.getElementById('startRecording').addEventListener('click', () => { + this.startSpeechRecognition(exercise); + }); + } + + hideSpeechExercise() { + this.speechModal.style.display = 'none'; + } + + + showGameOver() { + const modalContent = ` +
    +

    Game Over

    +

    Zozbierané mince: ${this.collectedCoins}/${this.totalCoins}

    +

    Zozbierané diamanty: ${this.collectedDiamonds}/${this.requiredDiamonds}

    +
    + + +
    +
    + `; + + this.speechModal.innerHTML = modalContent; + this.speechModal.style.display = 'flex'; + this.speechModal.className = 'modal game-over-modal'; + + document.getElementById('restartLevel').addEventListener('click', () => { + this.restartLevel(); + }); + } + + async startSpeechRecognition(exercise) { + if ('webkitSpeechRecognition' in window) { + const recognition = new webkitSpeechRecognition(); + recognition.lang = 'sk-SK'; + recognition.interimResults = false; + + const recordButton = document.getElementById('startRecording'); + recordButton.disabled = true; + recordButton.textContent = 'Počúvam...'; + + recognition.onresult = (event) => { + const result = event.results[0][0].transcript.toLowerCase(); + + if (result.includes(exercise.word.toLowerCase())) { + exercise.completed = true; + this.collectedDiamonds++; + this.showSpeechResult(true, exercise); + } else { + this.showSpeechResult(false, exercise); + } + + recordButton.disabled = false; + recordButton.textContent = 'Začať nahrávanie'; + }; + + recognition.onerror = (event) => { + console.error('Speech recognition error:', event.error); + recordButton.disabled = false; + recordButton.textContent = 'Začať nahrávanie'; + + const resultMessage = document.querySelector('.result-message'); + resultMessage.textContent = 'Nastala chyba pri rozpoznávaní. Skús znova.'; + resultMessage.style.color = '#f44336'; + }; + + recognition.onend = () => { + recordButton.disabled = false; + recordButton.textContent = 'Začať nahrávanie'; + }; + + recognition.start(); + } + } + + handleCheckpoints() { + for (let checkpoint of this.currentLevelData.checkpoints) { + if (!checkpoint.active && this.checkCollision(this.player, checkpoint)) { + this.activateCheckpoint(checkpoint); + } + } + } + + handleWallCollisions() { + for (let wall of this.currentLevelData.walls) { + const nextPositionX = { + x: this.player.x + this.player.velocityX, + y: this.player.y, + width: this.player.width, + height: this.player.height + }; + + const nextPositionY = { + x: this.player.x, + y: this.player.y + this.player.velocityY, + width: this.player.width, + height: this.player.height + }; + + // Horizontálna kolízia + if (this.checkCollision(nextPositionX, wall)) { + if (this.player.velocityX > 0) { + this.player.x = wall.x - this.player.width; + } else if (this.player.velocityX < 0) { + this.player.x = wall.x + wall.width; + } + this.player.velocityX = 0; + } + + // Vertikálna kolízia + if (this.checkCollision(nextPositionY, wall)) { + if (this.player.velocityY > 0) { // Padá dole + this.player.y = wall.y - this.player.height; + this.player.velocityY = 0; + this.player.isJumping = false; + } else if (this.player.velocityY < 0) { // Skáče hore + this.player.y = wall.y + wall.height; + this.player.velocityY = 0; + } + } + } + } + + activateCheckpoint(checkpoint) { + // Deaktivujeme predchádzajúci checkpoint + if (this.lastCheckpoint && this.lastCheckpoint !== checkpoint) { + this.lastCheckpoint.active = false; + // Resetuj animáciu predchádzajúceho checkpointu + this.lastCheckpoint.animState = 'inactive'; + this.lastCheckpoint.animFrame = 0; + } + + // Aktivujeme nový checkpoint + checkpoint.active = true; + this.lastCheckpoint = checkpoint; + + // Spustíme animáciu aktivácie + this.checkpointAnimationManager.activateCheckpoint(checkpoint); + + console.log('🚩 Checkpoint aktivovaný!'); + // TODO: Pridať zvukový efekt + } + + respawnAtCheckpoint() { + if (this.lastCheckpoint) { + this.player.x = this.lastCheckpoint.x; + this.player.y = this.lastCheckpoint.y - this.player.height; + } else { + // Ak nie je žiadny checkpoint, začneme od začiatku levelu + this.player.x = 100; + this.player.y = 100; + } + this.player.velocityX = 0; + this.player.velocityY = 0; + this.player.isJumping = false; + this.isInvulnerable = true; + + // Krátka doba nezraniteľnosti po respawne + setTimeout(() => { + this.isInvulnerable = false; + }, this.invulnerableTime); + } + + + drawDebugInfo() { + if (!this.debug) return; + + this.ctx.save(); + this.ctx.translate(-this.camera.x, 0); + + this.drawDebugGrid(); + this.drawCollisionBoxes(); + this.drawObjectInfo(); + this.ctx.restore(); + this.drawFixedDebugInfo(); + + this.ctx.strokeStyle = 'cyan'; + for (let diamond of this.currentLevelData.diamonds) { + if (!diamond.collected) { + this.ctx.strokeRect( + diamond.x, + diamond.y, + diamond.width, + diamond.height + ); + } + } + + } + + drawDebugGrid() { + this.ctx.strokeStyle = 'rgba(255, 255, 255, 0.1)'; + this.ctx.lineWidth = 1; + + // Vertikálne čiary + for (let x = 0; x < this.currentLevelData.width; x += 100) { + this.ctx.beginPath(); + this.ctx.moveTo(x, 0); + this.ctx.lineTo(x, this.height); + this.ctx.stroke(); + } + + // Horizontálne čiary + for (let y = 0; y < this.height; y += 100) { + this.ctx.beginPath(); + this.ctx.moveTo(0, y); + this.ctx.lineTo(this.currentLevelData.width, y); + this.ctx.stroke(); + } + } + + drawCollisionBoxes() { + // Hráč + this.ctx.strokeStyle = 'red'; + this.ctx.strokeRect( + this.player.x, + this.player.y, + this.player.width, + this.player.height + ); + + // Platformy + this.ctx.strokeStyle = 'yellow'; + for (let platform of this.currentLevelData.platforms) { + this.ctx.strokeRect( + platform.x, + platform.y, + platform.width, + platform.height + ); + } + + //Nepriatelia + this.ctx.strokeStyle = 'purple'; + for (let enemy of this.currentLevelData.enemies) { + this.ctx.strokeRect( + enemy.x, + enemy.y, + enemy.width, + enemy.height + ); + + // Trasa nepriateľa + this.ctx.setLineDash([5, 5]); + this.ctx.beginPath(); + this.ctx.moveTo(enemy.startX, enemy.y + enemy.height/2); + this.ctx.lineTo(enemy.endX, enemy.y + enemy.height/2); + this.ctx.stroke(); + this.ctx.setLineDash([]); + + // ⬅️ PRIDANÉ: Debug tongue hitbox (Chameleon) + if (enemy.behaviorType === 'chameleon' && enemy.tongueActive && enemy.tongueHitbox) { + this.ctx.strokeStyle = 'red'; + this.ctx.lineWidth = 2; + this.ctx.strokeRect( + enemy.tongueHitbox.x, + enemy.tongueHitbox.y, + enemy.tongueHitbox.width, + enemy.tongueHitbox.height + ); + this.ctx.lineWidth = 1; + } + + // ⬅️ PRIDANÉ: Debug detection range (Chameleon) + if (enemy.behaviorType === 'chameleon' && this.debug) { + this.ctx.strokeStyle = 'orange'; + this.ctx.setLineDash([2, 2]); + this.ctx.beginPath(); + + // Detekčná zóna - polkruh pred chameleonom + if (enemy.direction === 1) { + // Doprava + this.ctx.arc( + enemy.x + enemy.width, + enemy.y + enemy.height/2, + enemy.detectionRange, + -Math.PI/2, + Math.PI/2 + ); + } else { + // Doľava + this.ctx.arc( + enemy.x, + enemy.y + enemy.height/2, + enemy.detectionRange, + Math.PI/2, + Math.PI*1.5 + ); + } + + this.ctx.stroke(); + this.ctx.setLineDash([]); + } + } + + // Mince + this.ctx.strokeStyle = 'gold'; + for (let coin of this.currentLevelData.coins) { + if (!coin.collected) { + this.ctx.strokeRect( + coin.x, + coin.y, + coin.width, + coin.height + ); + } + } + } + + drawObjectInfo() { + this.ctx.font = '12px monospace'; + this.ctx.fillStyle = 'white'; + + // Informácie o hráčovi + this.ctx.fillText( + `x: ${Math.round(this.player.x)} y: ${Math.round(this.player.y)}`, + this.player.x, + this.player.y - 20 + ); + this.ctx.fillText( + `vx: ${this.player.velocityX.toFixed(2)} vy: ${this.player.velocityY.toFixed(2)}`, + this.player.x, + this.player.y - 35 + ); + } + + drawFixedDebugInfo() { + // Aktualizácia debug panelu + if (this.debugInfo) { + this.debugInfo.innerHTML = ` +
    FPS: ${Math.round(this.fps || 0)}
    +
    Camera X: ${Math.round(this.camera.x)}
    +
    Player State: ${this.player.isJumping ? 'Jumping' : 'Grounded'}
    +
    Game State: ${this.gameState}
    +
    Lives: ${this.lives}
    +
    Coins: ${this.collectedCoins}/${this.totalCoins}
    +
    Diamonds: ${this.collectedDiamonds}/${this.requiredDiamonds}
    + `; + } + } + + loadLevel(levelNumber) { + if (!LEVELS[levelNumber]) { + console.error('Level neexistuje!'); + return; + } + + this.currentLevelData = LEVELS[levelNumber].data; + this.player.x = 100; + this.player.y = 100; + this.player.velocityX = 0; + this.player.velocityY = 0; + + // Počítanie celkového počtu mincí a diamantov + this.totalCoins = this.currentLevelData.coins.length; + this.collectedCoins = 0; + this.collectedDiamonds = 0; + this.requiredDiamonds = this.currentLevelData.diamonds.length; + } + + + checkCollision(rect1, rect2) { + return rect1.x < rect2.x + rect2.width && + rect1.x + rect1.width > rect2.x && + rect1.y < rect2.y + rect2.height && + rect1.y + rect1.height > rect2.y; + } + + handleSpecialBlockCollision() { + for (let block of this.currentLevelData.specialBlocks) { + if (!block.hit && this.checkCollision(this.player, block)) { + // Zberie sa pri akomkoľvek kontakte (nie len pri skoku zdola) + block.hit = true; + this.collectSpecialItem(block.itemType); + + // Zvukový efekt alebo animácia (TODO) + console.log(`✨ Získaný bonus: ${block.itemType}`); + } + } + } + + collectSpecialItem(type) { + switch(type) { + case 'powerup': + // 💚 Zelený diamant - Power-up + // TODO: Implementovať power-up efekt (napr. dočasná nezraniteľnosť, rýchlejší beh...) + console.log('💚 Power-up aktivovaný!'); + // Dočasne pridáme body + if (!this.score) this.score = 0; + this.score += 1000; + break; + + case 'extraLife': + // ❤️ Červený diamant - Extra život + this.lives++; + console.log(`❤️ Extra život! Teraz máš ${this.lives} životov.`); + break; + } + + // Ulož do collected items + if (!this.currentLevelData.collectedSpecialItems) { + this.currentLevelData.collectedSpecialItems = []; + } + this.currentLevelData.collectedSpecialItems.push(type); + } + + /** + * Kontrola kolízií s nepriateľmi + */ + handleEnemyCollisions() { + if (this.isInvulnerable) return; + + for (let enemy of this.currentLevelData.enemies) { + if (!enemy.alive || !enemy.visible) continue; + + // ⬅️ NOVÉ: Kontrola tongue attack (Chameleon) + if (enemy.behaviorType === 'chameleon' && enemy.tongueActive && enemy.tongueHitbox) { + // Kontrola kolízie jazyka s hráčom + if (this.checkCollision(this.player, enemy.tongueHitbox)) { + console.log('👅 Chameleon ťa trafil jazykom!'); + this.hitByEnemy(); + // Deaktivuj jazyk aby neudieral opakovane + enemy.tongueActive = false; + enemy.tongueHitbox = null; + continue; // Preskočiť normálnu kolíziu + } + } + + // PhasingGhost kontrola + if (enemy.ghostType === 'phasing' && !enemy.canHurt) { + continue; + } + + if (this.checkCollision(this.player, enemy)) { + + // Ghost je nezabiteľný + if (enemy.behaviorType === 'ghost') { + this.hitByEnemy(); + continue; + } + + // ⬅️ NOVÉ: Chameleon - dá sa zabiť len skokom zhora (ako Pig) + if (enemy.behaviorType === 'chameleon') { + const playerBottom = this.player.y + this.player.height; + const enemyTop = enemy.y; + const jumpTolerance = 10; + + const isJumpingOnEnemy = this.player.velocityY > 0 && + playerBottom <= enemyTop + jumpTolerance; + + if (isJumpingOnEnemy) { + enemy.hit(); + this.player.velocityY = -5; + console.log(`💀 Zabil si ${enemy.type}!`); + } else { + // Dotyk zboku/zdola = damage + this.hitByEnemy(); + } + continue; + } + + // Lietajúci nepriateľ (Bat) - zhora aj zdola + if (enemy.behaviorType === 'flying' || enemy.behaviorType === 'sleeping') { + const playerBottom = this.player.y + this.player.height; + const playerTop = this.player.y; + const enemyTop = enemy.y; + const enemyBottom = enemy.y + enemy.height; + const jumpTolerance = 10; + + const isJumpingOnTop = this.player.velocityY > 0 && + playerBottom <= enemyTop + jumpTolerance; + + const isJumpingFromBelow = this.player.velocityY < 0 && + playerTop >= enemyBottom - jumpTolerance; + + if (isJumpingOnTop || isJumpingFromBelow) { + if (enemy.killable || enemy.stunnable) { + enemy.hit(); + + if (isJumpingOnTop) { + this.player.velocityY = -5; + } else { + this.player.velocityY = 5; + } + + console.log(`💀 Zabil si ${enemy.type}!`); + } else { + this.hitByEnemy(); + } + } else { + this.hitByEnemy(); + } + + } else { + // Pozemný nepriateľ (Pig) - len zhora + const playerBottom = this.player.y + this.player.height; + const enemyTop = enemy.y; + const jumpTolerance = 10; + + const isJumpingOnEnemy = this.player.velocityY > 0 && + playerBottom <= enemyTop + jumpTolerance; + + if (isJumpingOnEnemy) { + if (enemy.killable || enemy.stunnable) { + enemy.hit(); + this.player.velocityY = -5; + console.log(`💀 Zabil si ${enemy.type}!`); + } else { + this.hitByEnemy(); + } + } else { + this.hitByEnemy(); + } + } + } + } + } + + handleCoinCollection() { + // Zbieranie normálnych mincí (gold, silver) + for (let coin of this.currentLevelData.coins) { + if (!coin.collected && this.checkCollision(this.player, coin)) { + coin.collected = true; + + if (coin.type === 'gold') { + // Normálna zlatá minca + this.collectedCoins++; + // TODO: Pridať zvuk zbierania mince + + } else if (coin.type === 'silver') { + // Strieborná minca - posluchové cvičenie + if (!coin.listeningExercise.completed) { + this.gameState = 'listening'; + // TODO: Spustiť posluchové cvičenie + console.log('🎧 Posluchové cvičenie!'); + coin.listeningExercise.completed = true; + this.collectedCoins++; + } + } + } + } + + // Zbieranie diamantov (blue, green, red) + for (let diamond of this.currentLevelData.diamonds) { + if (!diamond.collected && this.checkCollision(this.player, diamond)) { + diamond.collected = true; + + if (diamond.type === 'blueDiamond') { + // Modrý diamant - rečové cvičenie + if (!diamond.speechExercise.completed) { + this.gameState = 'speech'; + this.showSpeechExercise(diamond.speechExercise); + this.collectedDiamonds++; + } + + } else if (diamond.type === 'greenDiamond') { + // Zelený diamant - power-up + this.collectSpecialItem('powerup'); + console.log('💚 Power-up získaný!'); + // TODO: Implementovať power-up efekt + + } else if (diamond.type === 'redDiamond') { + // Červený diamant - extra život + this.collectSpecialItem('extraLife'); + console.log('❤️ Extra život získaný!'); + } + } + } + } + + async handleDiamondCollection(coin) { + if (!coin.collected) { + this.gameState = 'speech'; + this.showSpeechExercise(coin.speechExercise); + } + } + + showLevelComplete() { + const coinPercentage = (this.collectedCoins / this.totalCoins) * 100; + const stars = coinPercentage >= 90 ? 3 : coinPercentage >= 60 ? 2 : 1; + + const modalContent = ` +
    +

    Level ${this.currentLevel} dokončený!

    +
    + ${Array(stars).fill('⭐').join('')} +
    +

    Zozbierané mince: ${this.collectedCoins}/${this.totalCoins} (${coinPercentage.toFixed(1)}%)

    +

    Zozbierané diamanty: ${this.collectedDiamonds}/${this.requiredDiamonds}

    +

    Rečové cvičenia:

    + ${this.currentLevelData.diamonds + .map(diamond => ` +

    ${diamond.speechExercise.word}: ${diamond.speechExercise.attempts} pokusov

    + `).join('')} +
    + + +
    +
    + `; + + this.speechModal.innerHTML = modalContent; + this.speechModal.style.display = 'flex'; + this.speechModal.className = 'modal level-complete-modal'; + } + + handlePlatformCollisions() { + const player = { + x: this.player.x, + y: this.player.y + this.player.velocityY, + width: this.player.width, + height: this.player.height + }; + + for (let block of this.currentLevelData.specialBlocks) { + if (!block.hit && + this.player.velocityY < 0 && + this.checkCollision({ + x: this.player.x, + y: this.player.y, + width: this.player.width, + height: this.player.height + }, block)) { + block.hit = true; + this.collectSpecialItem(block.itemType); + } + } + + for (let platform of this.currentLevelData.platforms) { + if (this.checkCollision(player, platform)) { + if (this.player.velocityY > 0) { // Padá dole + this.player.y = platform.y - this.player.height; + this.player.velocityY = 0; + this.player.isJumping = false; + } else if (this.player.velocityY < 0) { // Skáče hore + this.player.y = platform.y + platform.height; + this.player.velocityY = 0; + } + return true; + } + } + return false; + } + + checkLevelCompletion() { + if (this.checkCollision(this.player, this.currentLevelData.endPoint)) { + this.gameState = 'completed'; + this.completeLevel(); + } + } + + completeLevel() { + const level = LEVELS[this.currentLevel]; + const completion = (this.currentLevelData.collected / this.currentLevelData.totalCoins) * 100; + + // Výpočet hviezd + let stars = 0; + if (completion >= 90) stars = 3; + else if (completion >= 60) stars = 2; + else if (completion >= 30) stars = 1; + + // Uloženie progresu + level.stars = Math.max(level.stars, stars); + level.completion = Math.max(level.completion, completion); + + // Odomknutie ďalšieho levelu + if (LEVELS[this.currentLevel + 1] && stars === 3) { + LEVELS[this.currentLevel + 1].unlocked = true; + } + + // Tu môžeme pridať zobrazenie výsledkovej obrazovky + console.log(`Level ${this.currentLevel} dokončený! Hviezdy: ${stars}, Completion: ${completion}%`); + } + + setupControls() { + // Klávesnica + window.addEventListener('keydown', (e) => { + this.keys[e.code] = true; + }); + + window.addEventListener('keyup', (e) => { + this.keys[e.code] = false; + }); + + } + + updateCamera() { + // Sledovanie hráča kamerou + const targetX = this.player.x - this.width / 3; // kamera sleduje hráča v prvej tretine obrazovky + + // Plynulý pohyb kamery + this.camera.x += (targetX - this.camera.x) * 0.1; + + // Obmedzenia kamery + if (this.camera.x < 0) this.camera.x = 0; + if (this.camera.x > this.currentLevelData.width - this.width) { + this.camera.x = this.currentLevelData.width - this.width; + } + + // KRITICKÉ: Zaokrúhli kameru na celé pixely (eliminuje biele čiary) + this.camera.x = Math.round(this.camera.x); + this.camera.y = Math.round(this.camera.y); + } + + hitByEnemy() { + this.lives--; + this.isInvulnerable = true; + setTimeout(() => { + this.isInvulnerable = false; + }, this.invulnerableTime); + + if (this.lives <= 0) { + this.gameOver(); + } else { + this.respawnAtCheckpoint(); + } + } + + /** + * Aktualizácia všetkých nepriateľov v leveli + * @param {number} deltaTime - Čas od posledného frame-u (normalizovaný na 60 FPS) + */ + updateEnemies(deltaTime) { + for (let enemy of this.currentLevelData.enemies) { + // Nastav player referenciu pre Chameleon (potrebuje pre detekciu) + if (enemy.behaviorType === 'chameleon') { + enemy.player = this.player; + } + + // Aktualizuj správanie nepriateľa - pošli deltaTime + enemy.update(deltaTime); + + // Aktualizuj animáciu nepriateľa - pošli deltaTime + this.enemyAnimationManager.updateAnimation(enemy, deltaTime); + } + } + + startDeathAnimation(type) { + this.deathAnimation.active = true; + this.deathAnimation.timer = 0; + this.deathAnimation.type = type; + this.lives--; + } + + checkGapCollision() { + for (let gap of this.currentLevelData.gaps) { + if (this.checkCollision(this.player, gap)) { + if (!this.deathAnimation.active) { + this.startDeathAnimation('gap'); + } + return true; + } + } + return false; + } + + updateDeathAnimation(deltaTime) { + if (!this.deathAnimation.active) return; + + this.deathAnimation.timer += deltaTime; + + if (this.deathAnimation.type === 'gap') { + // Padanie do diery + this.player.velocityY += this.gravity; + this.player.y += this.player.velocityY; + } + + // Keď hráč spadne dostatočne hlboko alebo uplynie čas animácie + if (this.player.y > this.height + 100 || this.deathAnimation.timer >= this.deathAnimation.duration) { + this.deathAnimation.active = false; + if (this.lives <= 0) { + this.gameOver(); + } else { + this.respawnAtCheckpoint(); + } + } + } + + gameOver() { + this.gameState = 'gameOver'; + + // Vytvorenie game over obrazovky + const modalContent = ` +
    +

    Game Over

    +

    Zozbierané mince: ${this.collectedCoins}/${this.totalCoins}

    +

    Zozbierané diamanty: ${this.collectedDiamonds}/${this.requiredDiamonds}

    + + +
    + `; + + this.speechModal.innerHTML = modalContent; + this.speechModal.style.display = 'flex'; + + // Pridanie event listenera pre reštart levelu + document.getElementById('restartLevel').addEventListener('click', () => { + this.restartLevel(); + }); + } + + restartLevel() { + // Reset všetkých potrebných vlastností + this.lives = 3; + this.collectedCoins = 0; + this.collectedDiamonds = 0; + this.lastCheckpoint = null; + this.isInvulnerable = false; + this.deathAnimation.active = false; + + // Znovu načítanie levelu + this.loadLevel(this.currentLevel); + + // Skrytie modálneho okna + this.speechModal.style.display = 'none'; + + // Obnovenie hry + this.gameState = 'playing'; + } + + /** + * Aktualizácia hernej logiky + * @param {number} timestamp - Aktuálny čas v milisekundách + */ + update(timestamp) { + if (this.gameState !== 'playing') return; + + // 🧪 TESTOVACÍ KÓD - spomalí hru na ~20 FPS + const now = performance.now(); + while (performance.now() - now < 20) { + // Umelé spomalenie - čaká 30ms + } + + // ✅ NOVÝ SYSTÉM: Výpočet delta time + // Ak toto je prvý frame, nastav lastTimestamp + if (!this.lastTimestamp) { + this.lastTimestamp = timestamp; + return; // Preskočíme prvý frame + } + + // Vypočítaj čas od posledného frame-u v milisekundách + const deltaTimeMs = timestamp - this.lastTimestamp; + this.lastTimestamp = timestamp; + + // Vypočítaj deltaTime ako multiplikátor oproti 60 FPS + // Pri 60 FPS (16.67ms) = 1.0 (normálna rýchlosť) + // Pri 30 FPS (33.33ms) = 2.0 (dvojnásobná rýchlosť, aby sa vyrovnala) + const targetFrameTime = 1000 / 60; // 16.67ms (60 FPS) + const deltaTime = deltaTimeMs / targetFrameTime; + + // Obmedzíme deltaTime aby pri veľkých lagoch nepreskočila hra príliš veľa + const clampedDeltaTime = Math.min(deltaTime, 3); // Max 3x rýchlosť (20 FPS minimum) + + if (this.deathAnimation.active) { + this.updateDeathAnimation(deltaTime); + return; + } + + // Pohyb hráča + if (this.keys['ArrowLeft']) { + this.player.velocityX = -this.player.speed; // ✅ BEZ deltaTime + } + if (this.keys['ArrowRight']) { + this.player.velocityX = this.player.speed; // ✅ BEZ deltaTime + } + if (this.keys['Space'] && !this.player.isJumping) { + this.player.velocityY = this.player.jumpForce; // ✅ BEZ deltaTime (okamžitý impulz) + this.player.isJumping = true; + } + + // Aplikácia fyziky + this.player.velocityY += this.gravity * clampedDeltaTime; + + // Obmedzenie maximálnej rýchlosť padania (terminal velocity) + if (this.player.velocityY > this.maxFallSpeed) { + this.player.velocityY = this.maxFallSpeed; // ✅ BEZ deltaTime + } + + this.player.velocityX *= this.friction; + + // Aktualizácia pozície a kolízie + this.handleWallCollisions(); + this.handlePlatformCollisions(); + + // Aktualizácia pozície + this.player.x += this.player.velocityX * clampedDeltaTime; // ✅ S deltaTime + this.player.y += this.player.velocityY * clampedDeltaTime; + + // Kontrola dokončenia levelu + this.checkLevelCompletion(); + + // Aktualizácia nepriateľov + this.updateEnemies(clampedDeltaTime); + + // Ostatné kontroly + this.handleSpecialBlockCollision(); + this.handleEnemyCollisions(); + this.handleCheckpoints(); + this.checkGapCollision(); + this.handleCoinCollection(); + + // Kontrola dokončenia levelu + const coinPercentage = (this.collectedCoins / this.totalCoins) * 100; + const hasAllDiamonds = this.collectedDiamonds >= this.requiredDiamonds; + + if (coinPercentage >= 80 && hasAllDiamonds && + this.checkCollision(this.player, this.currentLevelData.endPoint)) { + this.showLevelComplete(); + } + + // Hranice levelu (nie obrazovky) + if (this.player.x < 0) this.player.x = 0; + if (this.player.x + this.player.width > this.currentLevelData.width) { + this.player.x = this.currentLevelData.width - this.player.width; + } + + + + // === ANIMÁCIE POSTAVY === + // Určenie smeru + if (this.player.velocityX > 0.1) { + this.animationManager.setDirection('right'); + } else if (this.player.velocityX < -0.1) { + this.animationManager.setDirection('left'); + } + + // Určenie animácie podľa stavu + if (this.player.isJumping && this.player.velocityY < 0) { + // Skáče hore + this.animationManager.setAnimation('jump'); + } else if (this.player.velocityY > 1) { + // Padá dole + this.animationManager.setAnimation('falling'); + } else if (Math.abs(this.player.velocityX) > 2) { + // Beží + this.animationManager.setAnimation('run'); + } else if (Math.abs(this.player.velocityX) > 0.1) { + // Chodí + this.animationManager.setAnimation('walk'); + } else { + // Stojí + this.animationManager.setAnimation('idle'); + } + + // Update animácie + this.animationManager.update(clampedDeltaTime); + // Update animácií odmien (mince, diamanty) + this.coinAnimationManager.update(clampedDeltaTime); + + // Update animácií checkpointov - pošli deltaTime + for (let checkpoint of this.currentLevelData.checkpoints) { + this.checkpointAnimationManager.updateCheckpoint(checkpoint, clampedDeltaTime); + } + + // Update animácie finish flag - pošli deltaTime + if (this.currentLevelData.endPoint) { + this.checkpointAnimationManager.updateCheckpoint(this.currentLevelData.endPoint, clampedDeltaTime); + } + + + // Aktualizácia pozície kamery + this.updateCamera(); + } + + + + /** + * Vykreslenie jedného tile-u zo sprite sheetu + * @param {string} tileName - Názov tile-u (napr. 'ground') + * @param {number} x - X pozícia kde vykresliť + * @param {number} y - Y pozícia kde vykresliť + * @param {number} width - Šírka výsledného tile-u + * @param {number} height - Výška výsledného tile-u + */ + drawTile(tileName, x, y, width, height) { + // Skontroluj, či je sprite sheet načítaný + if (!this.terrainSprite.loaded) { + // Ak ešte nie je načítaný, vykresli placeholder (farebný obdĺžnik) + this.ctx.fillStyle = '#8B4513'; // Hnedá farba + this.ctx.fillRect(x, y, width, height); + return; + } + + // Získaj definíciu tile-u + const tile = this.tiles[tileName]; + if (!tile) { + console.error(`Tile "${tileName}" neexistuje v definícii!`); + return; + } + + // Vykresli tile zo sprite sheetu + // drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight) + // sx, sy = pozícia v sprite sheete + // sWidth, sHeight = veľkosť v sprite sheete + // dx, dy = pozícia na canvase + // dWidth, dHeight = veľkosť na canvase + this.ctx.drawImage( + this.terrainSprite, // Sprite sheet + tile.x, // X v sprite sheete + tile.y, // Y v sprite sheete + tile.width, // Šírka v sprite sheete + tile.height, // Výška v sprite sheete + x, // X na canvase + y, // Y na canvase + width, // Šírka na canvase + height // Výška na canvase + ); + } + + /** + * Vykreslenie veľkej plochy tile-om (opakovaním) + * Používa sa pre zem, dlhé platformy atď. + * @param {string} tileName - Názov tile-u + * @param {number} x - Začiatočná X pozícia + * @param {number} y - Začiatočná Y pozícia + * @param {number} width - Celková šírka plochy + * @param {number} height - Celková výška plochy + */ + drawTiledArea(tileName, x, y, width, height) { + const tile = this.tiles[tileName]; + if (!tile) { + console.error(`Tile "${tileName}" neexistuje!`); + return; + } + + // Vypočítaj, koľko tile-ov potrebujeme v X a Y smere + const tilesX = Math.ceil(width / tile.width); + const tilesY = Math.ceil(height / tile.height); + + // Vykresli tile-y v mriežke s malým prekrytím (eliminuje čierne čiary) + for (let row = 0; row < tilesY; row++) { + for (let col = 0; col < tilesX; col++) { + // Zaokrúhli pozície na celé pixely (zabráni sub-pixel renderingu) + const tileX = Math.floor(x + (col * tile.width)); + const tileY = Math.floor(y + (row * tile.height)); + + // Vypočítaj skutočnú veľkosť tile-u (posledné tile-y môžu byť orezané) + let tileWidth = tile.width; + let tileHeight = tile.height; + + // Pre posledný tile v rade - orez šírku + if (col === tilesX - 1 && (x + width) < (tileX + tile.width)) { + tileWidth = Math.ceil(x + width - tileX); + } + + // Pre posledný tile v stĺpci - orez výšku + if (row === tilesY - 1 && (y + height) < (tileY + tile.height)) { + tileHeight = Math.ceil(y + height - tileY); + } + + // Pridaj 1px prekrytie okrem posledných tile-ov (eliminuje čierne čiary) + const drawWidth = (col < tilesX - 1) ? tileWidth + 1 : tileWidth; + const drawHeight = (row < tilesY - 1) ? tileHeight + 1 : tileHeight; + + // Vykresli tile + this.drawTile(tileName, tileX, tileY, drawWidth, drawHeight); + } + } + } + + /** + * Vykreslenie zeme - horizontálne opakuje tile, vertikálne natiahne + * @param {string} tileName - Názov tile-u + * @param {number} x - X pozícia + * @param {number} y - Y pozícia + * @param {number} width - Celková šírka + * @param {number} height - Celková výška (tile sa natiahne na túto výšku) + */ +drawGroundTerrain(tileName, x, y, width, height) { + // Skontroluj, či je sprite načítaný + if (!this.terrainSprite.loaded) { + this.ctx.fillStyle = '#8B4513'; + this.ctx.fillRect(x, y, width, height); + return; + } + + const tile = this.tiles[tileName]; + if (!tile) { + console.error(`Tile "${tileName}" neexistuje!`); + return; + } + + // Vypočítaj koľko tile-ov potrebujeme v ŠÍRKE (horizontálne opakujeme) + const tilesX = Math.ceil(width / tile.width); + + // V ŠÍRKE opakujeme tile-y, v VÝŠKE jeden tile natiahneme + for (let col = 0; col < tilesX; col++) { + const tileX = Math.floor(x + (col * tile.width)); + + // Šírka tile-u (posledný môže byť orezaný) + let tileWidth = tile.width; + if (col === tilesX - 1 && (x + width) < (tileX + tile.width)) { + tileWidth = Math.ceil(x + width - tileX); + } + + // Pridaj 1px prekrytie okrem posledného tile-u (eliminuje vertikálne čiary) + const drawWidth = (col < tilesX - 1) ? tileWidth + 1 : tileWidth; + + // Vykresli tile - šírka sa opakuje, výška sa natiahne + this.ctx.drawImage( + this.terrainSprite, // Sprite sheet + tile.x, // X v sprite sheete + tile.y, // Y v sprite sheete + tile.width, // Šírka v sprite sheete (celá šírka tile-u) + tile.height, // Výška v sprite sheete (celá výška tile-u) + tileX, // X na canvase + y, // Y na canvase + drawWidth, // Šírka na canvase (opakuje sa) + height // Výška na canvase (NATIAHNE SA na celú výšku!) + ); + } +} + +/** + * Vykreslenie platformy - horizontálne opakuje tile, vertikálne natiahne + * @param {string} tileName - Názov platformy (platform1, platform2, platform3, platform4) + * @param {number} x - X pozícia + * @param {number} y - Y pozícia + * @param {number} width - Celková šírka + * @param {number} height - Celková výška + */ +drawPlatform(tileName, x, y, width, height) { + // Skontroluj, či je sprite načítaný + if (!this.terrainSprite.loaded) { + this.ctx.fillStyle = '#CD853F'; + this.ctx.fillRect(x, y, width, height); + return; + } + + const tile = this.tiles[tileName]; + if (!tile) { + console.error(`Tile "${tileName}" neexistuje!`); + return; + } + + // Vypočítaj koľko tile-ov potrebujeme v ŠÍRKE + const tilesX = Math.ceil(width / tile.width); + + // V ŠÍRKE opakujeme tile-y, v VÝŠKE natiahnutie + for (let col = 0; col < tilesX; col++) { + const tileX = Math.floor(x + (col * tile.width)); + + // Šírka tile-u (posledný môže byť orezaný) + let tileWidth = tile.width; + if (col === tilesX - 1 && (x + width) < (tileX + tile.width)) { + tileWidth = Math.ceil(x + width - tileX); + } + + // Pridaj 1px prekrytie okrem posledného tile-u + const drawWidth = (col < tilesX - 1) ? tileWidth + 1 : tileWidth; + + // Vykresli tile + this.ctx.drawImage( + this.terrainSprite, // Sprite sheet + tile.x, // X v sprite sheete + tile.y, // Y v sprite sheete + tile.width, // Šírka v sprite sheete + tile.height, // Výška v sprite sheete + tileX, // X na canvase + y, // Y na canvase + drawWidth, // Šírka na canvase + height // Výška na canvase (natiahne sa) + ); + } +} + + + + + + + draw() { + // Vyčistenie canvas + this.ctx.clearRect(0, 0, this.width, this.height); + + // Uloženie kontextu pred transformáciou + this.ctx.save(); + + // Posun všetkého podľa pozície kamery + this.ctx.translate(-this.camera.x, 0); + + // Vykreslenie pozadia (voliteľné) + this.ctx.fillStyle = '#87CEEB'; // svetlomodrá obloha + this.ctx.fillRect(this.camera.x, 0, this.width, this.height); + + // Vykreslenie platforiem a zeme +this.ctx.imageSmoothingEnabled = false; + +for (let platform of this.currentLevelData.platforms) { + if (platform.type === 'ground') { + // Automaticky predĺž zem až po spodný okraj canvasu + const groundHeight = this.height - platform.y; // Výška od platformy po spodok + + // Zem - horizontálne opakuje tile, vertikálne natiahne + this.drawGroundTerrain('ground', platform.x, platform.y, platform.width, groundHeight); + + // Pridaj čierny okraj okolo celej platformy zeme + this.ctx.strokeStyle = '#000000'; // Čierna farba + this.ctx.lineWidth = 1; // Hrúbka okraja (2px) + this.ctx.strokeRect(platform.x, platform.y, platform.width, groundHeight); + } else { + // Platformy - vykresli pomocou sprite sheetu + // Automatický výber typu platformy podľa veľkosti + let platformType = 'platform3'; // Default (30x30px) + + if (platform.height <= 15) { + platformType = 'platform1'; // Tenká (13px výška) + } else if (platform.width <= 20) { + platformType = 'platform2'; // Malá štvorcová (14x14px) + } else if (platform.height >= 35) { + platformType = 'platform4'; // Vysoká (44px výška) + } + + // Vykresli platformu + this.drawPlatform(platformType, platform.x, platform.y, platform.width, platform.height); + + // Pridaj čierny okraj aj okolo platforiem + this.ctx.strokeStyle = '#000000'; // Čierna farba + this.ctx.lineWidth = 1; + this.ctx.strokeRect(platform.x, platform.y, platform.width, platform.height); + } +} + + // Vykreslenie checkpointov + for (let checkpoint of this.currentLevelData.checkpoints) { + this.checkpointAnimationManager.draw(this.ctx, checkpoint); + } + + // Vykreslenie špeciálnych blokov + for (let block of this.currentLevelData.specialBlocks) { + if (!block.hit) { + // Určenie typu diamantu podľa itemType + let diamondType = 'greenDiamond'; // Default + if (block.itemType === 'extraLife') { + diamondType = 'redDiamond'; + } else if (block.itemType === 'powerup') { + diamondType = 'greenDiamond'; + } + + // Vykresli animovaný diamant + this.coinAnimationManager.draw( + this.ctx, + diamondType, + block.x, + block.y, + block.width + ); + } + } + + // Vykreslenie nepriateľov (animované sprite-y) + for (let enemy of this.currentLevelData.enemies) { + if (enemy.visible) { // ⬅️ Vykreslí všetkých viditeľných, vrátane dying + this.enemyAnimationManager.draw(this.ctx, enemy); + } + } + + // Vykreslenie stien + this.ctx.fillStyle = '#666'; + for (let wall of this.currentLevelData.walls) { + this.ctx.fillRect(wall.x, wall.y, wall.width, wall.height); + } + + + // Vykreslenie všetkých mincí (gold, silver) + for (let coin of this.currentLevelData.coins) { + if (!coin.collected) { + this.coinAnimationManager.draw( + this.ctx, + coin.getAnimationType(), // 'gold' alebo 'silver' + coin.x, + coin.y, + coin.width + ); + } + } + + // Vykreslenie všetkých diamantov (blue, green, red) + for (let diamond of this.currentLevelData.diamonds) { + if (!diamond.collected) { + this.coinAnimationManager.draw( + this.ctx, + diamond.getAnimationType(), // 'blueDiamond', 'greenDiamond', 'redDiamond' + diamond.x, + diamond.y, + diamond.width + ); + } + } + + // Vykreslenie hráča (animovaná postava) + if (this.isInvulnerable) { + // Efekt blikania pri nezraniteľnosti + this.ctx.globalAlpha = Math.sin(Date.now() / 100) > 0 ? 1 : 0.3; + } + + // Vykresli sprite s offsetom relatívne k collision boxu + this.animationManager.draw( + this.ctx, + this.player.x + this.player.spriteOffsetX, // Použije offset z player objektu + this.player.y + this.player.spriteOffsetY, + this.player.spriteWidth, // Použije sprite rozmery + this.player.spriteHeight + ); + + // Reset alpha + this.ctx.globalAlpha = 1; + + // Reset alpha + this.ctx.globalAlpha = 1; + + // Vykreslenie cieľa (finish flag) + const endPoint = this.currentLevelData.endPoint; + + // Priprav endPoint ako finish flag checkpoint + if (!endPoint.isFinish) { + endPoint.isFinish = true; + endPoint.animState = 'idle'; // Vždy viditeľný + endPoint.animFrame = 0; + endPoint.animCounter = 0; + } + + // Vykresli finish flag pomocou checkpoint animation managera + this.checkpointAnimationManager.draw(this.ctx, endPoint); + + + // Debug informácie + if (this.debug) { + this.drawDebugInfo(); + } + + // Obnovenie kontextu + this.ctx.restore(); + + // Vykreslenie UI elementov (ak nejaké máme) + this.drawUI(); + } + + + drawUI() { + // Životy a skóre + this.ctx.fillStyle = 'white'; + this.ctx.font = '20px Arial'; + this.ctx.fillText(`Mince: ${this.collectedCoins}/${this.totalCoins}`, 10, 30); + this.ctx.fillText(`Diamanty: ${this.collectedDiamonds}/${this.requiredDiamonds}`, 10, 60); + this.ctx.fillText(`Životy: ${this.lives}`, 10, 90); + + + if (this.debug) { + // Debug panel v pravom hornom rohu + this.ctx.fillStyle = 'rgba(0, 0, 0, 0.5)'; + this.ctx.fillRect(this.width - 200, 0, 200, 100); + + this.ctx.fillStyle = 'white'; + this.ctx.font = '12px Arial'; + this.ctx.fillText(`FPS: ${Math.round(this.fps || 0)}`, this.width - 190, 20); + this.ctx.fillText(`Level Width: ${this.currentLevelData.width}`, this.width - 190, 40); + this.ctx.fillText(`Game State: ${this.gameState}`, this.width - 190, 60); + this.ctx.fillText(`Level: ${this.currentLevel}`, this.width - 190, 80); + } + } + + /** + * Hlavný herný loop - volá update a draw každý frame + * @param {number} timestamp - Čas od spustenia stránky v milisekundách + */ + gameLoop(timestamp) { + // Výpočet FPS (len pre debug) + if (this.lastTime) { + this.fps = 1000 / (timestamp - this.lastTime); + } + this.lastTime = timestamp; + + // ✅ OPRAVENÉ: Posielame timestamp do update() + this.update(timestamp); + this.draw(); + + // Požiadaj prehliadač o ďalší frame + requestAnimationFrame((ts) => this.gameLoop(ts)); + } +} + +/** + * COIN CLASS - Reprezentuje odmeny v hre + * Typy: gold, silver, blueDiamond, greenDiamond, redDiamond + */ +class Coin { + constructor(x, y, type = 'gold') { + this.x = x; + this.y = y; + this.width = 40; // Väčšie pre lepšiu viditeľnosť + this.height = 40; + this.type = type; // 'gold', 'silver', 'blueDiamond', 'greenDiamond', 'redDiamond' + this.collected = false; + + // Rečové cvičenie (len pre Blue Diamond) + this.speechExercise = type === 'blueDiamond' ? { + word: this.getRandomWord(), + imageUrl: this.getRandomImage(), + attempts: 0, + completed: false + } : null; + + // Posluchové cvičenie (len pre Silver Coin) + this.listeningExercise = type === 'silver' ? { + completed: false, + attempts: 0 + } : null; + + // Bonusové predmety (Green/Red Diamond) + this.bonusType = null; + if (type === 'greenDiamond') { + this.bonusType = 'powerup'; + } else if (type === 'redDiamond') { + this.bonusType = 'extraLife'; + } + } + + /** + * Získanie náhodného slova pre rečové cvičenie + */ + getRandomWord() { + const words = ['pes', 'mačka', 'auto', 'dom', 'strom', 'slnko', 'voda', 'ruka']; + return words[Math.floor(Math.random() * words.length)]; + } + + /** + * Získanie náhodného obrázka pre rečové cvičenie + */ + getRandomImage() { + return `images/${this.getRandomWord()}.png`; + } + + /** + * Získanie animačného typu pre CoinAnimationManager + */ + getAnimationType() { + return this.type; // 'gold', 'silver', 'blueDiamond', 'greenDiamond', 'redDiamond' + } +} + +// Spustenie hry +window.onload = () => { + new Game(); +}; diff --git a/js/superjozino/joystick.js b/js/superjozino/joystick.js new file mode 100644 index 0000000..34cefc7 --- /dev/null +++ b/js/superjozino/joystick.js @@ -0,0 +1,356 @@ +////////////////////////////////////////////////// +// ====== VIRTUAL JOYSTICK FUNKCIONALITA ====== // +// MECHANIKA POHYBU PRE MOBILY/TABLETY // +// (SUPERJOZINO - HORIZONTAL) // +////////////////////////////////////////////////// + +/////////////////////////////////////////////// +// Premenné pre virtual joystick // +/////////////////////////////////////////////// +let joystickActive = false; // Či je joystick aktívny +let joystickCenter = { x: 0, y: 0 }; // Stred joysticku +let joystickKnob = null; // Element knobu +let joystickBase = null; // Element základne +let joystickContainer = null; // Kontajner joysticku +let joystickRadius = 45; // Polomer pohybu knobu (v pixeloch) +let currentDirection = null; // Aktuálny smer ('left' alebo 'right') +let moveInterval = null; // Interval pre opakovaný pohyb + +/////////////////////////////////////////////// +// Inicializácia joysticku po načítaní DOM // +/////////////////////////////////////////////// +document.addEventListener('DOMContentLoaded', function() { + // Počkaj chvíľu, kým sa načíta celá stránka + setTimeout(initVirtualJoystick, 100); +}); + +/** + * Inicializácia virtual joysticku + * Nastaví event listenery pre touch a mouse eventy + */ +function initVirtualJoystick() { + // Získaj elementy z DOM + joystickContainer = document.getElementById('virtualJoystick'); + joystickKnob = document.getElementById('joystickKnob'); + joystickBase = document.querySelector('.joystick-base'); + + // Kontrola, či existujú elementy + if (!joystickContainer || !joystickKnob) { + console.warn('Joystick elementy nenájdené - pravdepodobne desktop verzia'); + return; + } + + // Vypočítaj stred joysticku + const rect = joystickContainer.getBoundingClientRect(); + joystickCenter.x = rect.width / 2; + joystickCenter.y = rect.height / 2; + + // Event listenery pre TOUCH eventy (mobily/tablety) + joystickKnob.addEventListener('touchstart', handleTouchStart, { passive: false }); + joystickKnob.addEventListener('touchmove', handleTouchMove, { passive: false }); + joystickKnob.addEventListener('touchend', handleTouchEnd, { passive: false }); + + // Event listenery pre MOUSE eventy (testovanie na desktope) + joystickKnob.addEventListener('mousedown', handleMouseStart); + document.addEventListener('mousemove', handleMouseMove); + document.addEventListener('mouseup', handleMouseEnd); + + console.log('Virtual Joystick inicializovaný'); +} + +/////////////////////////////////////////////// +// Touch Start Handler // +/////////////////////////////////////////////// +/** + * Spracovanie začiatku dotyku na joysticku + * @param {TouchEvent} e - Touch event + */ +function handleTouchStart(e) { + e.preventDefault(); // Zabráň scrollovaniu stránky + joystickActive = true; + joystickContainer.classList.add('active'); // Pridaj vizuálny efekt +} + +/////////////////////////////////////////////// +// Touch Move Handler // +/////////////////////////////////////////////// +/** + * Spracovanie pohybu prsta po joysticku + * @param {TouchEvent} e - Touch event + */ +function handleTouchMove(e) { + e.preventDefault(); // Zabráň scrollovaniu + if (!joystickActive) return; + + // Získaj pozíciu dotyku + const touch = e.touches[0]; + const rect = joystickContainer.getBoundingClientRect(); + + // Vypočítaj relatívnu pozíciu od stredu joysticku + const x = touch.clientX - rect.left - joystickCenter.x; + const y = touch.clientY - rect.top - joystickCenter.y; + + // Aktualizuj pozíciu knobu a pohyb hráča + updateJoystickPosition(x, y); +} + +/////////////////////////////////////////////// +// Touch End Handler // +/////////////////////////////////////////////// +/** + * Spracovanie ukončenia dotyku + * @param {TouchEvent} e - Touch event + */ +function handleTouchEnd(e) { + e.preventDefault(); + resetJoystick(); // Vráť joystick do pôvodnej polohy +} + +/////////////////////////////////////////////// +// Mouse Start Handler (testovanie) // +/////////////////////////////////////////////// +/** + * Spracovanie stlačenia myši na joysticku + * @param {MouseEvent} e - Mouse event + */ +function handleMouseStart(e) { + e.preventDefault(); + joystickActive = true; + joystickContainer.classList.add('active'); +} + +/////////////////////////////////////////////// +// Mouse Move Handler (testovanie) // +/////////////////////////////////////////////// +/** + * Spracovanie pohybu myši + * @param {MouseEvent} e - Mouse event + */ +function handleMouseMove(e) { + if (!joystickActive) return; + + // Získaj pozíciu myši + const rect = joystickContainer.getBoundingClientRect(); + + // Vypočítaj relatívnu pozíciu od stredu + const x = e.clientX - rect.left - joystickCenter.x; + const y = e.clientY - rect.top - joystickCenter.y; + + // Aktualizuj pozíciu + updateJoystickPosition(x, y); +} + +/////////////////////////////////////////////// +// Mouse End Handler (testovanie) // +/////////////////////////////////////////////// +/** + * Spracovanie uvolnenia myši + * @param {MouseEvent} e - Mouse event + */ +function handleMouseEnd(e) { + resetJoystick(); +} + +/////////////////////////////////////////////// +// Aktualizácia pozície knobu a pohyb hráča // +/////////////////////////////////////////////// +/** + * Aktualizuje pozíciu joystick knobu a určí smer pohybu + * Pohyb je obmedzený len na horizontálnu os (vľavo/vpravo) + * @param {number} x - Horizontálna vzdialenosť od stredu + * @param {number} y - Vertikálna vzdialenosť od stredu (ignorovaná) + */ +function updateJoystickPosition(x, y) { + // HORIZONTAL ONLY - ignorujeme Y os + // Obmedz pohyb len na horizontálnu os + const distance = Math.abs(x); // Vzdialenosť len na X osi + const maxDistance = joystickRadius; + + let limitedX = x; + + // Ak je vzdialenosť väčšia ako max, obmedz ju + if (distance > maxDistance) { + limitedX = (x / distance) * maxDistance; + } + + // Y os fixneme na 0 (len horizontálny pohyb) + const limitedY = 0; + + // Aktualizuj vizuálnu pozíciu knobu (len horizontálne) + joystickKnob.style.transform = `translate(calc(-50% + ${limitedX}px), -50%)`; + + // Určenie smeru pohybu na základe pozície X + handleJoystickMovement(limitedX); +} + +/////////////////////////////////////////////// +// Spracovanie pohybu hráča // +/////////////////////////////////////////////// +/** + * Určí smer pohybu hráča na základe pozície joysticku + * @param {number} x - Horizontálna pozícia joysticku + */ +function handleJoystickMovement(x) { + const threshold = 15; // Minimálna vzdialenosť pre aktiváciu pohybu + const distance = Math.abs(x); + + let newDirection = null; + + // Ak je joystick dostatočne ďaleko od stredu + if (distance >= threshold) { + if (x < 0) { + newDirection = 'left'; // Vľavo + } else { + newDirection = 'right'; // Vpravo + } + } + + // Ak sa zmenil smer, aktualizuj game state + if (newDirection !== currentDirection) { + currentDirection = newDirection; + updateGameControls(newDirection); + } +} + +/////////////////////////////////////////////// +// Aktualizácia herných kontrol // +/////////////////////////////////////////////// +/** + * Aktualizuje stav klávesov v hre podľa smeru joysticku + * @param {string|null} direction - Smer pohybu ('left', 'right', alebo null) + */ +function updateGameControls(direction) { + // Prístup k game objektu (SuperJozinoGame) + if (!window.game || !window.game.keys) { + console.warn('Game object alebo keys nenájdené'); + return; + } + + // Resetuj všetky smerové klávesy + window.game.keys['ArrowLeft'] = false; + window.game.keys['ArrowRight'] = false; + + // Nastav správny smer + if (direction === 'left') { + window.game.keys['ArrowLeft'] = true; + } else if (direction === 'right') { + window.game.keys['ArrowRight'] = true; + } +} + +/////////////////////////////////////////////// +// Reset joysticku na stred // +/////////////////////////////////////////////// +/** + * Vráti joystick do pôvodnej pozície a zastaví pohyb + */ +function resetJoystick() { + joystickActive = false; + joystickContainer.classList.remove('active'); + + // Vráť knob do stredu + joystickKnob.style.transform = 'translate(-50%, -50%)'; + + // Zastaví pohyb + currentDirection = null; + updateGameControls(null); +} + +/////////////////////////////////////////////// +// Akčné tlačidlo (JUMP) // +/////////////////////////////////////////////// +/** + * Inicializácia event listenerov pre akčné tlačidlo (skok) + */ +document.addEventListener('DOMContentLoaded', function() { + // Počkaj chvíľu, kým sa načíta celá stránka + setTimeout(initActionButton, 100); +}); + +/** + * Inicializuje akčné tlačidlo pre skok + */ +function initActionButton() { + const actionButton = document.getElementById('jumpButton'); + + if (!actionButton) { + console.warn('Jump button nenájdený - pravdepodobne desktop verzia'); + return; + } + + // Touch eventy + actionButton.addEventListener('touchstart', handleJumpTouch, { passive: false }); + actionButton.addEventListener('touchend', handleJumpRelease, { passive: false }); + + // Mouse eventy (testovanie) + actionButton.addEventListener('mousedown', handleJumpClick); + actionButton.addEventListener('mouseup', handleJumpRelease); + + console.log('Jump button inicializovaný'); +} + +/** + * Spracovanie stlačenia jump tlačidla (touch) + * @param {TouchEvent} e - Touch event + */ +function handleJumpTouch(e) { + e.preventDefault(); // Zabráň dvojitému vyvolaniu + handleJump(); +} + +/** + * Spracovanie stlačenia jump tlačidla (click) + * @param {MouseEvent} e - Mouse event + */ +function handleJumpClick(e) { + e.preventDefault(); + handleJump(); +} + +/** + * Vykoná skok postavy + */ +function handleJump() { + // Prístup k game objektu + if (!window.game || !window.game.keys) { + console.warn('Game object nenájdený'); + return; + } + + // Simuluj stlačenie medzerníka (Space) + window.game.keys['Space'] = true; +} + +/** + * Spracovanie uvolnenia jump tlačidla + * @param {Event} e - Event + */ +function handleJumpRelease(e) { + e.preventDefault(); + + // Prístup k game objektu + if (!window.game || !window.game.keys) { + return; + } + + // Uvoľni medzerník + window.game.keys['Space'] = false; +} + +/////////////////////////////////////////////// +// DEBUG FUNKCIE // +/////////////////////////////////////////////// +/** + * Debug funkcia pre testovanie joysticku + * Vypíše aktuálny stav do konzoly + */ +function debugJoystick() { + console.log('=== JOYSTICK DEBUG ==='); + console.log('Active:', joystickActive); + console.log('Direction:', currentDirection); + console.log('Game keys:', window.game ? window.game.keys : 'Game nenájdené'); + console.log('====================='); +} + +// Pridaj debug funkciu do globálneho scope pre testovanie +window.debugJoystick = debugJoystick; \ No newline at end of file diff --git a/js/superjozino/levels.js b/js/superjozino/levels.js new file mode 100644 index 0000000..17bc877 --- /dev/null +++ b/js/superjozino/levels.js @@ -0,0 +1,580 @@ +class Level { + constructor(width, platforms, specialBlocks = [], enemies = [], gaps = [], walls = [], coins = [], checkpoints = [], diamonds = [], endPoint) { + this.width = width; + this.platforms = platforms; + this.specialBlocks = specialBlocks; + this.enemies = enemies; + this.gaps = gaps; + this.walls = walls; + this.coins = coins; + this.checkpoints = checkpoints; + this.diamonds = diamonds; + this.endPoint = endPoint; + this.collected = 0; + this.totalCoins = coins.length; + this.collectedSpecialItems = []; + } +} + +const LEVELS = { + 1: { + name: "Baníkova výprava", + unlocked: true, + stars: 0, + completion: 0, + data: new Level( + 6000, // šírka levelu + [ + // Základná zem s medzerami + { x: 0, y: 750, width: 800, height: 50, type: 'ground' }, + { x: 1000, y: 750, width: 600, height: 50, type: 'ground' }, + { x: 1800, y: 750, width: 500, height: 50, type: 'ground' }, + { x: 2500, y: 750, width: 700, height: 50, type: 'ground' }, + { x: 3400, y: 750, width: 600, height: 50, type: 'ground' }, + { x: 4200, y: 750, width: 800, height: 50, type: 'ground' }, + { x: 5200, y: 750, width: 800, height: 50, type: 'ground' }, + + // Platformy + // Sekcia 1 + { x: 200, y: 600, width: 150, height: 20, type: 'platform' }, + { x: 400, y: 500, width: 150, height: 20, type: 'platform' }, + { x: 600, y: 400, width: 150, height: 20, type: 'platform' }, + + // Sekcia 2 + { x: 1100, y: 550, width: 200, height: 20, type: 'platform' }, + { x: 1400, y: 450, width: 150, height: 20, type: 'platform' }, + + // Sekcia 3 + { x: 1900, y: 600, width: 150, height: 20, type: 'platform' }, + { x: 2100, y: 500, width: 150, height: 20, type: 'platform' }, + { x: 2300, y: 400, width: 150, height: 20, type: 'platform' }, + + // Sekcia 4 + { x: 2600, y: 550, width: 200, height: 20, type: 'platform' }, + { x: 2900, y: 450, width: 200, height: 20, type: 'platform' }, + { x: 3200, y: 350, width: 200, height: 20, type: 'platform' }, + + // Sekcia 5 + { x: 3500, y: 600, width: 150, height: 20, type: 'platform' }, + { x: 3800, y: 500, width: 150, height: 20, type: 'platform' }, + + // Sekcia 6 + { x: 4300, y: 550, width: 200, height: 20, type: 'platform' }, + { x: 4600, y: 450, width: 200, height: 20, type: 'platform' }, + { x: 4900, y: 350, width: 200, height: 20, type: 'platform' }, + + // Záverečná sekcia + { x: 5300, y: 600, width: 150, height: 20, type: 'platform' }, + { x: 5500, y: 500, width: 150, height: 20, type: 'platform' }, + { x: 5700, y: 400, width: 150, height: 20, type: 'platform' } + ], + + // Špeciálne bloky + [ + { x: 300, y: 400, width: 50, height: 50, type: 'special', hit: false, itemType: 'powerup' }, + { x: 1200, y: 300, width: 50, height: 50, type: 'special', hit: false, itemType: 'extraLife' }, + { x: 2700, y: 350, width: 50, height: 50, type: 'special', hit: false, itemType: 'powerup' }, + { x: 4400, y: 300, width: 50, height: 50, type: 'special', hit: false, itemType: 'extraLife' } + ], + + // Nepriatelia + [ + // ========== SEKCIA 1 ========== + // 🟢 Zelené prasa (iba walk, speed 1) + new GreenPig(400, 720, { + startX: 400, + endX: 650 + }), + + // 🦇 SleepingBat - zavesený na platforme (y=600 je platforma) + new SleepingBat(2000, 620, { + patrolStartX: 1700, // Kde začne lietať + patrolEndX: 2100, // Kde skončí lietať + sleepDuration: 320, // ~5 sekundy spí + flyDuration: 1000, // ~3 sekundy letí + }), + + // ========== SEKCIA 2 ========== + // 🔴 Červené prasa (iba run, rýchle) + new RedPig(1200, 720, { + startX: 1100, + endX: 1400, + }), + + // ========== SEKCIA 3 ========== + // 🔵 Combo prasa (walk -> idle -> run -> idle) + new ComboPig(1900, 720, { + startX: 1900, + endX: 2150 + }), + + // ========== SEKCIA 4 ========== + // 🟢 Zelené na zemi + new GreenPig(2700, 720, { + startX: 2800, + endX: 3000 + }), + + // 🔴 Červené na platforme + new RedPig(3200, 320, { + startX: 3200, + endX: 3350, + }), + + // ========== SEKCIA 5 ========== + // 🔵 Combo prasa (má čas sa zastaviť a rozbehnutť) + new ComboPig(3600, 720, { + startX: 3600, + endX: 3900 + }), + + // ========== SEKCIA 6 =====s===== + // 🔴 Červené prasa (rýchle) + new RedPig(4400, 720, { + startX: 4400, + endX: 4800, + speed: 2 // Najrýchlejšie + }), + // 🟢 Zelené prasa (malé, na platforme) + new ComboPig(4900, 320, { + startX: 4900, + endX: 5000, + }) + ], + + // Medzery (gaps) + [ + { x: 800, y: 750, width: 200, height: 50 }, + { x: 1600, y: 750, width: 200, height: 50 }, + { x: 2300, y: 750, width: 200, height: 50 }, + { x: 3200, y: 750, width: 200, height: 50 }, + { x: 4000, y: 750, width: 200, height: 50 }, + { x: 5000, y: 750, width: 200, height: 50 } + ], + + // Steny + [ + { x: 700, y: 650, width: 30, height: 100 }, + { x: 1500, y: 600, width: 30, height: 150 }, + { x: 2200, y: 550, width: 30, height: 200 }, + { x: 3300, y: 500, width: 30, height: 250 }, + { x: 4100, y: 600, width: 30, height: 150 }, + { x: 5100, y: 650, width: 30, height: 100 } + ], + + // Normálne mince + [ + // Sekcia 1 + new Coin(250, 550), + new Coin(300, 550), + new Coin(450, 450), + new Coin(500, 450), + new Coin(650, 350), + new Coin(700, 350), + + // Sekcia 2 + new Coin(1150, 500), + new Coin(1200, 500), + new Coin(1250, 500), + new Coin(1450, 400), + new Coin(1500, 400), + + // Sekcia 3 + new Coin(1950, 550), + new Coin(2000, 550), + new Coin(2150, 450), + new Coin(2200, 450), + new Coin(2350, 350), + new Coin(2400, 350), + + // Sekcia 4 + new Coin(2650, 500), + new Coin(2700, 500), + new Coin(2950, 400), + new Coin(3000, 400), + new Coin(3250, 300), + new Coin(3300, 300), + + // Sekcia 5 + new Coin(3550, 550), + new Coin(3600, 550), + new Coin(3850, 450), + new Coin(3900, 450), + + // Sekcia 6 + new Coin(4350, 500), + new Coin(4400, 500), + new Coin(4650, 400), + new Coin(4700, 400), + new Coin(4950, 300), + new Coin(5000, 300), + + // Záverečná sekcia + new Coin(5350, 550), + new Coin(5400, 550), + new Coin(5550, 450), + new Coin(5600, 450), + new Coin(5750, 350), + new Coin(5800, 350) + ], + + // Checkpointy + [ + { + x: 100, + y: 686, + width: 64, + height: 64, + active: true, + flagHeight: 30, + isStart: true + }, + { + x: 1300, + y: 686, + width: 64, + height: 64, + active: false, + flagHeight: 30 + }, + { + x: 3000, + y: 686, + width: 64, + height: 64, + active: false, + flagHeight: 30 + }, + { + x: 4500, + y: 686, + width: 64, + height: 64, + active: false, + flagHeight: 30 + } + ], + + // Diamond mince (špeciálne mince s rečovými cvičeniami) + [ + new Coin(800, 300, 'blueDiamond'), + new Coin(2500, 400, 'silver'), + new Coin(4000, 350, 'blueDiamond'), + new Coin(5500, 300, 'blueDiamond') + ], + + // Koncový bod + { + x: 5800, + y: 558, // ⬅️ Upravené aby stál na zemi (750 - 128 = 622) + width: 192, // ⬅️ Rovnaká šírka ako checkpoint + height: 320, // ⬅️ DVOJNÁSOBNÁ VÝŠKA (2x vyšší ako checkpoint) + isFinish: true + } + ) + }, + 2: { + name: "Baníkova výprava", + unlocked: true, + stars: 0, + completion: 0, + data: new Level( + 6000, // šírka levelu + [ + // Základná zem s medzerami + { x: 0, y: 750, width: 800, height: 50, type: 'ground' }, + { x: 1000, y: 750, width: 600, height: 50, type: 'ground' }, + { x: 1800, y: 750, width: 500, height: 50, type: 'ground' }, + { x: 2500, y: 750, width: 700, height: 50, type: 'ground' }, + { x: 3400, y: 750, width: 600, height: 50, type: 'ground' }, + { x: 4200, y: 750, width: 800, height: 50, type: 'ground' }, + { x: 5200, y: 750, width: 800, height: 50, type: 'ground' }, + + // Platformy + // Sekcia 1 + { x: 200, y: 600, width: 150, height: 20, type: 'platform' }, + { x: 400, y: 500, width: 150, height: 20, type: 'platform' }, + { x: 600, y: 400, width: 150, height: 20, type: 'platform' }, + + // Sekcia 2 + { x: 1100, y: 550, width: 200, height: 20, type: 'platform' }, + { x: 1400, y: 450, width: 150, height: 20, type: 'platform' }, + + // Sekcia 3 + { x: 1900, y: 600, width: 150, height: 20, type: 'platform' }, + { x: 2100, y: 500, width: 150, height: 20, type: 'platform' }, + { x: 2300, y: 400, width: 150, height: 20, type: 'platform' }, + + // Sekcia 4 + { x: 2600, y: 550, width: 200, height: 20, type: 'platform' }, + { x: 2900, y: 450, width: 200, height: 20, type: 'platform' }, + { x: 3200, y: 350, width: 200, height: 20, type: 'platform' }, + + // Sekcia 5 + { x: 3500, y: 600, width: 150, height: 20, type: 'platform' }, + { x: 3800, y: 500, width: 150, height: 20, type: 'platform' }, + + // Sekcia 6 + { x: 4300, y: 550, width: 200, height: 20, type: 'platform' }, + { x: 4600, y: 450, width: 200, height: 20, type: 'platform' }, + { x: 4900, y: 350, width: 200, height: 20, type: 'platform' }, + + // Záverečná sekcia + { x: 5300, y: 600, width: 150, height: 20, type: 'platform' }, + { x: 5500, y: 500, width: 150, height: 20, type: 'platform' }, + { x: 5700, y: 400, width: 150, height: 20, type: 'platform' } + ], + + // Špeciálne bloky + [ + { x: 300, y: 400, width: 50, height: 50, type: 'special', hit: false, itemType: 'powerup' }, + { x: 1200, y: 300, width: 50, height: 50, type: 'special', hit: false, itemType: 'extraLife' }, + { x: 2700, y: 350, width: 50, height: 50, type: 'special', hit: false, itemType: 'powerup' }, + { x: 4400, y: 300, width: 50, height: 50, type: 'special', hit: false, itemType: 'extraLife' } + ], + + // Nepriatelia + [ + // ========== SEKCIA 1 ========== + // 🟢 Zelené prasa (iba walk, speed 1) + new GreenPig(400, 720, { + startX: 400, + endX: 650 + }), + + new Chameleon(400, 460, { + startX: 400, + endX: 500, + speed: 0.7, + detectionRange: 100, // Detekuje hráča na 150px + tongueRange: 80 // Jazyk siaha na 100px + }), + + // 🦇 SimpleBat - horizontálny let (konštantná výška) + new SimpleBat(800, 400, { + startX: 800, + endX: 1000, + speed: 1 + }), + + // 🦇 WaveBat - vlnovitý let + new WaveBat(1900, 150, { + startX: 400, + endX: 700, + speed: 1.2 + }), + + // 🦇 SleepingBat - zavesený na platforme (y=600 je platforma) + new SleepingBat(2000, 620, { + patrolStartX: 1700, // Kde začne lietať + patrolEndX: 2100, // Kde skončí lietať + sleepDuration: 320, // ~5 sekundy spí + flyDuration: 1000, // ~3 sekundy letí + speed: 1 + }), + + // ========== SEKCIA 2 ========== + // 🔴 Červené prasa (iba run, rýchle) + new RedPig(1200, 720, { + startX: 1100, + endX: 1400, + speed: 1.8 // Môžeš nastaviť inú rýchlosť (default 1.7) + }), + + // 👻 PatrolGhost - klasický duch (prechádza stenami) + new PatrolGhost(1200, 500, { + startX: 1100, + endX: 1400, + speed: 1.5 // Trochu rýchlejší + }), + + // ========== SEKCIA 3 ========== + // 🔵 Combo prasa (walk -> idle -> run -> idle) + new ComboPig(1900, 720, { + startX: 1900, + endX: 2150 + }), + + // 👻 PatrolGhost cez stenu (ukážka prechádzania) + new PatrolGhost(2000, 600, { + startX: 1900, + endX: 2300, // Prejde cez stenu medzi 2000-2100 + speed: 1 + }), + + // ========== SEKCIA 4 ========== + // 🟢 Zelené na zemi + new GreenPig(2700, 720, { + startX: 2800, + endX: 3000 + }), + + // 👻 PhasingGhost - mizne a objavuje sa + new PhasingGhost(2800, 450, { + startX: 2700, + endX: 3000, + speed: 1.2, + visibleDuration: 180, // ~3 sekundy viditeľný + invisibleDuration: 120 // ~2 sekundy neviditeľný + }), + + // 🔴 Červené na platforme + new RedPig(3200, 320, { + startX: 3200, + endX: 3350, + speed: 1.5 + }), + + // ========== SEKCIA 5 ========== + // 🔵 Combo prasa (má čas sa zastaviť a rozbehnutť) + new ComboPig(3600, 720, { + startX: 3600, + endX: 3900 + }), + + // ========== SEKCIA 6 ========== + // 🔴 Červené prasa (rýchle) + new RedPig(4400, 720, { + startX: 4400, + endX: 4800, + speed: 2 // Najrýchlejšie + }), + // 🟢 Zelené prasa (malé, na platforme) + new ComboPig(4900, 320, { + startX: 4900, + endX: 5000, + }) + ], + + // Medzery (gaps) + [ + { x: 800, y: 750, width: 200, height: 50 }, + { x: 1600, y: 750, width: 200, height: 50 }, + { x: 2300, y: 750, width: 200, height: 50 }, + { x: 3200, y: 750, width: 200, height: 50 }, + { x: 4000, y: 750, width: 200, height: 50 }, + { x: 5000, y: 750, width: 200, height: 50 } + ], + + // Steny + [ + { x: 700, y: 650, width: 30, height: 100 }, + { x: 1500, y: 600, width: 30, height: 150 }, + { x: 2200, y: 550, width: 30, height: 200 }, + { x: 3300, y: 500, width: 30, height: 250 }, + { x: 4100, y: 600, width: 30, height: 150 }, + { x: 5100, y: 650, width: 30, height: 100 } + ], + + // Normálne mince + [ + // Sekcia 1 + new Coin(250, 550), + new Coin(300, 550), + new Coin(450, 450), + new Coin(500, 450), + new Coin(650, 350), + new Coin(700, 350), + + // Sekcia 2 + new Coin(1150, 500), + new Coin(1200, 500), + new Coin(1250, 500), + new Coin(1450, 400), + new Coin(1500, 400), + + // Sekcia 3 + new Coin(1950, 550), + new Coin(2000, 550), + new Coin(2150, 450), + new Coin(2200, 450), + new Coin(2350, 350), + new Coin(2400, 350), + + // Sekcia 4 + new Coin(2650, 500), + new Coin(2700, 500), + new Coin(2950, 400), + new Coin(3000, 400), + new Coin(3250, 300), + new Coin(3300, 300), + + // Sekcia 5 + new Coin(3550, 550), + new Coin(3600, 550), + new Coin(3850, 450), + new Coin(3900, 450), + + // Sekcia 6 + new Coin(4350, 500), + new Coin(4400, 500), + new Coin(4650, 400), + new Coin(4700, 400), + new Coin(4950, 300), + new Coin(5000, 300), + + // Záverečná sekcia + new Coin(5350, 550), + new Coin(5400, 550), + new Coin(5550, 450), + new Coin(5600, 450), + new Coin(5750, 350), + new Coin(5800, 350) + ], + + // Checkpointy + [ + { + x: 100, + y: 686, + width: 64, + height: 64, + active: true, + flagHeight: 30, + isStart: true + }, + { + x: 1300, + y: 686, + width: 64, + height: 64, + active: false, + flagHeight: 30 + }, + { + x: 3000, + y: 686, + width: 64, + height: 64, + active: false, + flagHeight: 30 + }, + { + x: 4500, + y: 686, + width: 64, + height: 64, + active: false, + flagHeight: 30 + } + ], + + // Diamond mince (špeciálne mince s rečovými cvičeniami) + [ + new Coin(800, 300, 'blueDiamond'), + new Coin(2500, 400, 'silver'), + new Coin(4000, 350, 'blueDiamond'), + new Coin(5500, 300, 'blueDiamond') + ], + + // Koncový bod + { + x: 5800, + y: 558, // ⬅️ Upravené aby stál na zemi (750 - 128 = 622) + width: 192, // ⬅️ Rovnaká šírka ako checkpoint + height: 320, // ⬅️ DVOJNÁSOBNÁ VÝŠKA (2x vyšší ako checkpoint) + isFinish: true + } + ) + } +}; \ No newline at end of file diff --git a/js/worldsmenu-preloader.js b/js/worldsmenu-preloader.js new file mode 100644 index 0000000..f6602d5 --- /dev/null +++ b/js/worldsmenu-preloader.js @@ -0,0 +1,450 @@ +/** + * WorldsMenu Preloader s Cache API + * Zabezpečuje rýchle načítanie obrázkov a ich uloženie do cache + * Autor: Adam Reňak + */ + +// ========================================== +// GLOBÁLNE PREMENNÉ PRE PRELOADING +// ========================================== + +// Verzia cache - zvýš túto hodnotu pri zmenách obrázkov +const CACHE_VERSION = 'worldsmenu-v1.4'; +const CACHE_NAME = `banik-jozino-${CACHE_VERSION}`; + +// Cache pre prednačítané obrázky (in-memory cache) +let preloadedImages = {}; + +// Progress tracking +let totalResources = 0; +let loadedResources = 0; +let isPreloadingComplete = false; + +// ========================================== +// HLAVNÁ FUNKCIA PRELOADINGU +// ========================================== + +/** + * Spustenie preloadingu všetkých potrebných zdrojov + */ +async function startWorldsMenuPreloading() { + try { + console.log('🚀 Spúšťam preloading pre worlds menu...'); + + // 1. Získaj všetky obrázky na načítanie + const imagesToLoad = collectAllWorldsMenuImages(); + totalResources = imagesToLoad.length; + + console.log(`📦 Celkovo ${totalResources} obrázkov na načítanie`); + updateLoadingMessage('Kontrolujem cache...'); + + // 2. Skontroluj a vyčisti staré cache + await cleanOldCaches(); + + // 3. Načítaj všetky obrázky (paralelne) + updateLoadingMessage('Načítavam obrázky...'); + const promises = imagesToLoad.map(imagePath => preloadImageWithCache(imagePath)); + await Promise.all(promises); + + console.log('✅ Všetky obrázky načítané a uložené do cache!'); + isPreloadingComplete = true; + + // 4. Skry loading screen + setTimeout(() => { + hideLoadingScreen(); + }, 500); + + } catch (error) { + console.error('❌ Chyba pri preloadingu:', error); + // Aj pri chybe pokračuj - nech sa stránka zobrazí + setTimeout(() => { + hideLoadingScreen(); + }, 1000); + } +} + +// ========================================== +// ZBER OBRÁZKOV NA NAČÍTANIE +// ========================================== + +/** + * Zbiera všetky obrázky potrebné pre worlds menu + */ +function collectAllWorldsMenuImages() { + const images = []; + + // ========================================== + // 1. OBRÁZKY SVETOV + // ========================================== + console.log('📂 Zbierame obrázky svetov...'); + + // Získaj konfiguráciu svetov (ak existuje) + if (typeof WORLDS_CONFIG !== 'undefined') { + WORLDS_CONFIG.forEach(world => { + // Použij icon z konfigurácie - má už správnu cestu a príponu + if (world.icon) { + images.push(world.icon); + } + }); + console.log(` ✅ Pridaných ${WORLDS_CONFIG.length} world obrázkov`); + } + + // ========================================== + // 2. UI ELEMENTY + // ========================================== + console.log('📂 Zbierame UI elementy...'); + const uiImages = [ + // Hviezdy + 'images/star_active.png', + 'images/star_inactive.png', + + // Level ikony + 'images/banik-icon.png', + 'images/pexeso-icon.png', + + // Cursory + 'images/cursor.png', + 'images/active_cursor4.png', + + // Pozadia + 'images/pozadie.jpg', + 'images/worlds/background.jpg', + + // Menu buttony + 'images/menubutton.png' + ]; + + images.push(...uiImages); + console.log(` ✅ Pridaných ${uiImages.length} UI obrázkov`); + + // ========================================== + // 3. LEVEL IKONY (ak existuje konfigurácia) + // ========================================== + if (typeof LEVELS_CONFIG !== 'undefined') { + console.log('📂 Zbierame level ikony...'); + let levelIconsCount = 0; + + // Pre každý svet + Object.keys(LEVELS_CONFIG).forEach(worldId => { + const worldLevels = LEVELS_CONFIG[worldId] || []; + + // Pre každý level + worldLevels.forEach(level => { + // Pridaj ikonu levelu ak existuje + if (level.icon) { + images.push(level.icon); + levelIconsCount++; + } + }); + }); + + console.log(` ✅ Pridaných ${levelIconsCount} level ikon`); + } + + // ========================================== + // 4. ODSTRÁNENIE DUPLIKÁTOV + // ========================================== + const uniqueImages = [...new Set(images)]; + console.log(`📦 Celkovo ${uniqueImages.length} unikátnych obrázkov (z ${images.length})`); + + return uniqueImages; +} + +// ========================================== +// NAČÍTANIE OBRÁZKA S CACHE +// ========================================== + +/** + * Načíta obrázok s podporou Cache API + * Najprv kontroluje cache, potom sieť + */ +async function preloadImageWithCache(imagePath) { + try { + // 1. Skús načítať z cache + const cachedImage = await loadFromCache(imagePath); + if (cachedImage) { + console.log(`💾 Z cache: ${imagePath}`); + preloadedImages[imagePath] = cachedImage; + updateProgress(); + return cachedImage; + } + + // 2. Ak nie je v cache, načítaj zo siete + console.log(`🌐 Zo siete: ${imagePath}`); + const image = await loadImageFromNetwork(imagePath); + + // 3. Ulož do cache + if (image) { + await saveToCache(imagePath, image); + preloadedImages[imagePath] = image; + } + + updateProgress(); + return image; + + } catch (error) { + console.warn(`⚠️ Chyba pri načítaní ${imagePath}:`, error); + updateProgress(); + return null; + } +} + +/** + * Načítanie obrázka z cache + */ +async function loadFromCache(imagePath) { + try { + // Otvor cache + const cache = await caches.open(CACHE_NAME); + + // Vytvor plnú URL + const fullUrl = new URL(imagePath, window.location.href).href; + + // Pokús sa načítať z cache + const response = await cache.match(fullUrl); + + if (response) { + // Vytvor Image objekt z cache response + const blob = await response.blob(); + const imageUrl = URL.createObjectURL(blob); + + return new Promise((resolve) => { + const img = new Image(); + img.onload = () => resolve(img); + img.onerror = () => resolve(null); + img.src = imageUrl; + }); + } + + return null; + + } catch (error) { + console.warn(`Cache read error for ${imagePath}:`, error); + return null; + } +} + +/** + * Načítanie obrázka zo siete + */ +function loadImageFromNetwork(imagePath) { + return new Promise((resolve) => { + const img = new Image(); + + img.onload = () => { + console.log(`✅ Načítaný: ${imagePath}`); + resolve(img); + }; + + img.onerror = () => { + console.warn(`⚠️ Chyba načítania: ${imagePath}`); + resolve(null); + }; + + img.src = imagePath; + }); +} + +/** + * Uloženie obrázka do cache + */ +async function saveToCache(imagePath, image) { + try { + // Otvor cache + const cache = await caches.open(CACHE_NAME); + + // Vytvor plnú URL + const fullUrl = new URL(imagePath, window.location.href).href; + + // Načítaj obrázok ako blob + const response = await fetch(imagePath); + + if (response.ok) { + // Ulož do cache + await cache.put(fullUrl, response); + console.log(`💾 Uložené do cache: ${imagePath}`); + } + + } catch (error) { + console.warn(`Cache save error for ${imagePath}:`, error); + } +} + +// ========================================== +// SPRÁVA CACHE +// ========================================== + +/** + * Vyčistenie starých verzií cache + */ +async function cleanOldCaches() { + try { + console.log('🧹 Čistím staré cache...'); + + // Získaj všetky cache names + const cacheNames = await caches.keys(); + + // Vymaž všetky okrem aktuálnej verzie + const deletionPromises = cacheNames + .filter(cacheName => cacheName.startsWith('banik-jozino-') && cacheName !== CACHE_NAME) + .map(cacheName => { + console.log(`🗑️ Mažem starú cache: ${cacheName}`); + return caches.delete(cacheName); + }); + + await Promise.all(deletionPromises); + + console.log('✅ Staré cache vyčistené'); + + } catch (error) { + console.warn('Chyba pri čistení cache:', error); + } +} + +/** + * Kontrola veľkosti cache + */ +async function getCacheSize() { + try { + const cache = await caches.open(CACHE_NAME); + const keys = await cache.keys(); + + let totalSize = 0; + + for (const request of keys) { + const response = await cache.match(request); + if (response) { + const blob = await response.blob(); + totalSize += blob.size; + } + } + + // Konvertuj na MB + const sizeMB = (totalSize / (1024 * 1024)).toFixed(2); + console.log(`📊 Cache veľkosť: ${sizeMB} MB (${keys.length} súborov)`); + + return { totalSize, itemCount: keys.length, sizeMB }; + + } catch (error) { + console.warn('Chyba pri získavaní veľkosti cache:', error); + return { totalSize: 0, itemCount: 0, sizeMB: 0 }; + } +} + +/** + * Vymazanie celej cache (pre debugging) + */ +async function clearAllCache() { + try { + const deleted = await caches.delete(CACHE_NAME); + console.log(deleted ? '✅ Cache vymazaná' : '❌ Cache sa nepodarilo vymazať'); + return deleted; + } catch (error) { + console.error('Chyba pri mazaní cache:', error); + return false; + } +} + +// ========================================== +// PROGRESS TRACKING +// ========================================== + +/** + * Aktualizácia progress baru + */ +function updateProgress() { + loadedResources++; + + // Vypočítaj percento + const percentage = Math.round((loadedResources / totalResources) * 100); + + // Aktualizuj progress message + updateLoadingMessage(`Načítavam... ${percentage}%`); + + // Detailný log každých 10% + if (loadedResources % Math.ceil(totalResources / 10) === 0 || loadedResources === totalResources) { + console.log(`📊 Progress: ${percentage}% (${loadedResources}/${totalResources})`); + } +} + +/** + * Aktualizácia loading message + */ +function updateLoadingMessage(message) { + const loadingMessage = document.getElementById('loading-message'); + if (loadingMessage) { + loadingMessage.textContent = message; + } +} + +/** + * Skrytie loading screenu s animáciou + */ +function hideLoadingScreen() { + const loadingScreen = document.getElementById('loading-screen'); + if (loadingScreen) { + console.log('👋 Skrývam loading screen...'); + loadingScreen.style.opacity = '0'; + setTimeout(() => { + loadingScreen.style.display = 'none'; + console.log('✅ Loading screen skrytý, stránka pripravená!'); + }, 500); + } +} + +// ========================================== +// POMOCNÉ FUNKCIE +// ========================================== + +/** + * Získanie prednačítaného obrázka + */ +function getPreloadedImage(imagePath) { + return preloadedImages[imagePath] || null; +} + +/** + * Kontrola či je preloading dokončený + */ +function isPreloadingDone() { + return isPreloadingComplete; +} + +// ========================================== +// DEBUG FUNKCIE +// ========================================== + +/** + * Debug informácie o cache + */ +async function debugCacheInfo() { + console.log('=== CACHE DEBUG INFO ==='); + console.log('Cache verzia:', CACHE_VERSION); + console.log('Cache name:', CACHE_NAME); + + const size = await getCacheSize(); + console.log('Cache veľkosť:', size.sizeMB, 'MB'); + console.log('Počet súborov:', size.itemCount); + + console.log('Načítané obrázky v pamäti:', Object.keys(preloadedImages).length); + console.log('Preloading dokončený:', isPreloadingComplete); + console.log('========================'); +} + +// ========================================== +// EXPORT PRE POUŽITIE V INÝCH SÚBOROCH +// ========================================== + +if (typeof window !== 'undefined') { + window.startWorldsMenuPreloading = startWorldsMenuPreloading; + window.getPreloadedImage = getPreloadedImage; + window.isPreloadingDone = isPreloadingDone; + window.preloadedImages = preloadedImages; + + // Debug funkcie + window.debugCacheInfo = debugCacheInfo; + window.clearAllCache = clearAllCache; + window.getCacheSize = getCacheSize; +} + +console.log('✅ WorldsMenu Preloader načítaný a pripravený'); \ No newline at end of file diff --git a/levels.js b/levels.js new file mode 100644 index 0000000..ccf0e4c --- /dev/null +++ b/levels.js @@ -0,0 +1,7 @@ +const WORDS = { + 'S': ['sova', 'syr', 'slnko'], + 'R': ['rybka', 'ruža', 'radio'], + 'Š': ['šálka', 'šampón', 'šach', 'šaty', 'šašo', 'šiška', 'šiltovka', 'šípka', 'šíp', 'štipec', 'švihadlo', 'pištoľ', 'fľaša', 'mašľa', 'myš', 'kôš', 'mikuláš'], + // Další kategorie + 'ALL': ['sova', 'syr', 'slnko', 'rybka', 'ruža', 'radio', 'šálka', 'šampón', 'šach', 'šaty', 'šašo', 'šiška', 'šiltovka', 'šípka', 'šíp', 'štipec', 'švihadlo', 'pištoľ', 'fľaša', 'mašľa', 'myš', 'kôš', 'mikuláš'] +}; diff --git a/pexeso.html b/pexeso.html new file mode 100644 index 0000000..1ec5158 --- /dev/null +++ b/pexeso.html @@ -0,0 +1,217 @@ + + + + + + + + + Baník Jožino: Logopedická hra - Diplomová práca + + + + + + + + + + + + + + + + + + +
    +
    + + + + +
    + + +
    + +
    +
    +
    + + +
    + 0% + 0/0 zdrojov +
    +
    + + +
    Načítavam...
    +
    +
    + + + + +
    + + +
    +
    + 0:00 +
    + +
    + PEXESO +
    + +
    + 0 +
    +
    + + +
    + + +
    +
    +
    PEXESO
    +
    PEXESO
    +
    PEXESO
    +
    PEXESO
    +
    PEXESO
    +
    PEXESO
    +
    PEXESO
    +
    PEXESO
    +
    PEXESO
    +
    PEXESO
    +
    PEXESO
    +
    PEXESO
    +
    PEXESO
    +
    PEXESO
    +
    PEXESO
    +
    PEXESO
    + +
    +
    + + +
    + +
    +
    +

    Adam

    +
    7
    +
    +
    +
    +
    +

    Evka

    +
    3
    +
    +
    +
    +
    +

    Zuzka

    +
    2
    +
    +
    +
    +
    +

    Jakub

    +
    5
    +
    +
    +
    + +
    + +
    + + + + + +
    +
    +
    +

    ROZPOZNAJ SLOVÁ

    +

    Sú slová rovnaké?

    +
    +
    +
    +
    + +
    +
    +
    +

    Prešiel si level!

    +
    +
    + Čas: + 02:43 +
    +
    + Slová: + 4 + / + 4 +
    +
    + +
    + +
    +
    +
    +
    + + + + +
    + + + + + \ No newline at end of file diff --git a/pexesocustom.html b/pexesocustom.html new file mode 100644 index 0000000..9ef3524 --- /dev/null +++ b/pexesocustom.html @@ -0,0 +1,69 @@ + + + + + + + + + Baníkovo dobrodružstvo: Pexeso + + + + + + +
    + +
    + +
    Čas: 00:00
    +
    Počet ťahov: 0
    + +
    + OKNO + +
    +
    + +
    + +
    + +
    šálka
    +
    +
    + +
    +
    Počet zostávajúcich pokusov: 3
    +
    + + + + + + + + + + + +
    + + \ No newline at end of file diff --git a/preload.js b/preload.js new file mode 100644 index 0000000..5e9d369 --- /dev/null +++ b/preload.js @@ -0,0 +1,2 @@ +// See the Electron documentation for details on how to use preload scripts: +// https://www.electronjs.org/docs/latest/tutorial/process-model#preload-scripts diff --git a/slova.txt b/slova.txt new file mode 100644 index 0000000..86e1f0e --- /dev/null +++ b/slova.txt @@ -0,0 +1,51 @@ +traktor +drak +baran +včela +dom +dúha +hroch +kačka +pero +syr +tričko +trúbka +tráva +práčka +prak +prsteň +princezná +bránka +zebra +krava +krokodíl +krtko +cukrík +tiger +sob +sova +slnko +sliepka +koleso +kosť +hus +kaktus +ananás +šálka +šampón +šašo +šiška +šíp +švihadlo +šmolko +pištoľ +fľaša +mašľa +košík +myš +kôš +mikuláš +vankúš +nôž +jež +kríž \ No newline at end of file diff --git a/superjozino.html b/superjozino.html new file mode 100644 index 0000000..a38ad30 --- /dev/null +++ b/superjozino.html @@ -0,0 +1,90 @@ + + + + + + SuperJozino + + + + +
    + +
    + +
    +
    + + + +
    + +
    + + +
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + \ No newline at end of file diff --git a/text.css b/text.css new file mode 100644 index 0000000..d6f5d33 --- /dev/null +++ b/text.css @@ -0,0 +1,86 @@ +body { + font-family: Arial, sans-serif; + text-align: center; + margin: 0; + padding: 0; +} + +#levelSelection, #gameArea { + max-width: 800px; + margin: 0 auto; + padding: 20px; +} + +.card { + display: inline-block; + width: 150px; + height: 200px; + margin: 10px; + perspective: 1000px; + position: relative; +} + +.card-inner { + width: 100%; + height: 100%; + transition: transform 0.6s; + transform-style: preserve-3d; + cursor: pointer; +} + +.card-front, .card-back { + position: absolute; + width: 100%; + height: 100%; + backface-visibility: hidden; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + border: 2px solid #333; + border-radius: 10px; +} + +.card-front { + background-color: #f0f0f0; + z-index: 2; +} + +.card-back { + transform: rotateY(180deg); + background-color: white; +} + +.card-back img { + max-width: 100px; + max-height: 150px; +} + +.paired-cards { + transform: scale(1.2); + z-index: 10; +} + +.modal { + display: none; + position: fixed; + z-index: 1000; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: rgba(0,0,0,0.5); +} + +.modal-content { + background-color: white; + margin: 10% auto; + padding: 20px; + width: 70%; + max-width: 500px; + border-radius: 10px; +} + +#result img { + max-width: 200px; +} \ No newline at end of file diff --git a/text.js b/text.js new file mode 100644 index 0000000..f8852e3 --- /dev/null +++ b/text.js @@ -0,0 +1,238 @@ +let currentLevel = null; +let selectedWords = []; +let cards = []; +let matchedPairs = 0; +let attempts = 0; +let openedCards = []; +let maxAttempts = 3; +let recognition; + +function loadLevel(level) { + document.getElementById('levelSelection').style.display = 'none'; + currentLevel = level; + selectedWords = WORDS[level]; + initGame(selectedWords); +} + +function openCustomLevelModal() { + const modal = document.getElementById('customLevelModal'); + const wordSelection = document.getElementById('wordSelection'); + + // Dynamické generování výběru slov + wordSelection.innerHTML = Object.values(WORDS).flat().map(word => + `` + ).join(''); + + modal.style.display = 'block'; +} + +function createCustomLevel() { + const pairCount = document.getElementById('pairCount').value; + const selectedCheckboxes = Array.from(document.querySelectorAll('#wordSelection input:checked')); + + selectedWords = selectedCheckboxes.map(cb => cb.value); + + if (selectedWords.length < pairCount) { + alert('Vyberte dostatečný počet slov'); + return; + } + + // Náhodný výběr slov + selectedWords = selectedWords.sort(() => 0.5 - Math.random()).slice(0, pairCount); + + document.getElementById('levelSelection').style.display = 'none'; + document.getElementById('customLevelModal').style.display = 'none'; + initGame(selectedWords); +} + +function initGame(words) { + const gameArea = document.getElementById('gameArea'); + const cardsContainer = document.getElementById('cards'); + gameArea.style.display = 'block'; + cardsContainer.innerHTML = ''; + matchedPairs = 0; + attempts = 0; + openedCards = []; + + // Zdvojení slov pro pexeso + const gameWords = [...words, ...words].sort(() => 0.5 - Math.random()); + + gameWords.forEach((word, index) => { + const card = document.createElement('div'); + card.classList.add('card'); + card.innerHTML = ` +
    +
    ?
    +
    + ${word} +

    ${word}

    +
    +
    + `; + card.dataset.word = word; + card.querySelector('.card-front').addEventListener('click', () => flipCard(card)); + cardsContainer.appendChild(card); + }); + + setupSpeechRecognition(); +} + +function flipCard(card) { + // Zabránění otočení již spárovaných nebo již otevřených karet + if (card.classList.contains('matched') || card.classList.contains('opened')) return; + + // Přehrání zvuku otočení karty + playSound('flip'); + + // Otočení karty + card.querySelector('.card-inner').style.transform = 'rotateY(180deg)'; + card.classList.add('opened'); + + // Logika párování karet + openedCards.push(card); + + if (openedCards.length === 2) { + setTimeout(() => checkMatch(), 1000); + } +} + +function checkMatch() { + const [card1, card2] = openedCards; + + if (card1.dataset.word === card2.dataset.word) { + // Spárované karty + card1.classList.add('matched'); + card2.classList.add('matched'); + + // Zvětšení spárovaných karet + card1.classList.add('paired-cards'); + card2.classList.add('paired-cards'); + + // Zobrazení výzvy k vyslovení slova + showWordPrompt(card1.dataset.word); + + matchedPairs++; + + // Kontrola konce hry + if (matchedPairs === selectedWords.length) { + setTimeout(gameWon, 1000); + } + } else { + // Otočení karet zpět + card1.querySelector('.card-inner').style.transform = 'rotateY(0deg)'; + card2.querySelector('.card-inner').style.transform = 'rotateY(0deg)'; + card1.classList.remove('opened'); + card2.classList.remove('opened'); + } + + openedCards = []; +} + +function showWordPrompt(word) { + const resultArea = document.getElementById('result'); + resultArea.innerHTML = ` +

    Povedzte slovo: ${word}

    + + `; + + document.getElementById('startRecording').addEventListener('click', startSpeechRecognition); +} + +function setupSpeechRecognition() { + if ('webkitSpeechRecognition' in window) { + recognition = new webkitSpeechRecognition(); + recognition.continuous = false; + recognition.lang = 'sk-SK'; + + recognition.onresult = (event) => { + const speechResult = event.results[0][0].transcript.toLowerCase().trim(); + checkSpeechResult(speechResult); + }; + + recognition.onerror = (event) => { + console.error('Chyba rozpoznávania reči:', event.error); + }; + } else { + alert('Vaša prehliadačka nepodporuje rozpoznávanie reči'); + } +} + +function startSpeechRecognition() { + if (recognition) { + recognition.start(); + document.getElementById('startRecording').style.backgroundColor = 'red'; + } +} + +function checkSpeechResult(spokenWord) { + const currentWord = document.querySelector('.paired-cards').dataset.word; + const resultArea = document.getElementById('result'); + + if (spokenWord === currentWord) { + // Správně vysloveno + resultArea.innerHTML = ` + Správne +

    Výborne!

    + `; + playSound('correct'); + + // Odebrání spárovaných karet + document.querySelectorAll('.paired-cards').forEach(card => card.remove()); + } else { + attempts++; + + if (attempts >= maxAttempts) { + gameOver(); + } else { + // Nesprávně vysloveno + resultArea.innerHTML = ` + Nesprávne +

    Skúste znova (Pokus ${attempts}/${maxAttempts})

    + + `; + playSound('incorrect'); + + document.getElementById('startRecording').addEventListener('click', startSpeechRecognition); + } + } +} + +function gameWon() { + playSound('win'); + alert('Gratulujeme! Vyhrali ste hru!'); + resetGame(); +} + +function gameOver() { + playSound('lose'); + alert('Presiahli ste maximálny počet pokusov. Hra skončila.'); + resetGame(); +} + +function resetGame() { + document.getElementById('gameArea').style.display = 'none'; + document.getElementById('levelSelection').style.display = 'block'; + document.getElementById('result').innerHTML = ''; +} + +function playSound(type) { + // Implementace zvukových efektů + const sounds = { + 'flip': new Audio('./zvuky/effects/kopanie.mp3'), + 'correct': new Audio('./zvuky/effects/spravne.mp3'), + 'incorrect': new Audio('./zvuky/effects/zle.mp3'), + 'win': new Audio('./zvuky/effects/vyhra.mp3'), + 'lose': new Audio('./zvuky/effects/zle.mp3') + }; + + if (sounds[type]) { + sounds[type].play(); + } +} + +// Zavření modálního okna +document.querySelector('.close').onclick = function() { + document.getElementById('customLevelModal').style.display = 'none'; +} \ No newline at end of file diff --git a/words.json b/words.json new file mode 100644 index 0000000..0dfba36 --- /dev/null +++ b/words.json @@ -0,0 +1,26 @@ +{ + "R": [ + { + "text": "Ruka", + "image": "ruka", + "difficulty": 1 + }, + { + "text": "Ryba", + "image": "ryba", + "difficulty": 1 + } + ], + "S": [ + { + "text": "Slnko", + "image": "slnko", + "difficulty": 1 + }, + { + "text": "Strom", + "image": "strom", + "difficulty": 1 + } + ] +} \ No newline at end of file diff --git a/worldsmenu.html b/worldsmenu.html new file mode 100644 index 0000000..3cd190f --- /dev/null +++ b/worldsmenu.html @@ -0,0 +1,242 @@ + + + + + + + + + + Baník Jožino: Logopedická hra - Diplomová práca + + + + + + + + + + + + + +
    +
    + +
    +
    Načítavam...
    +
    +
    + + +
    <=
    + + +
    + + +
    + + + + +
    + +
    + + + +
    + + +
    + + +
    + +
    +

    NAČÍTAVAM...

    +
    + + +
    + +
    + +
    +

    Načítavam levely...

    +
    +
    +
    +
    + + +
    + + +
    +
    +
    +
    + Hviezda +
    +
    + Hviezda +
    +
    + Hviezda +
    +
    +
    + 0 + / 0 +
    +
    +
    + + +
    + +
    + + +
    + +
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zvuky/1/1.wav b/zvuky/1/1.wav new file mode 100644 index 0000000..715fcbc Binary files /dev/null and b/zvuky/1/1.wav differ diff --git a/zvuky/1/2.wav b/zvuky/1/2.wav new file mode 100644 index 0000000..1eac609 Binary files /dev/null and b/zvuky/1/2.wav differ diff --git a/zvuky/10/1.wav b/zvuky/10/1.wav new file mode 100644 index 0000000..2c3028c Binary files /dev/null and b/zvuky/10/1.wav differ diff --git a/zvuky/10/2.wav b/zvuky/10/2.wav new file mode 100644 index 0000000..8c8fb33 Binary files /dev/null and b/zvuky/10/2.wav differ diff --git a/zvuky/10/desktop.ini b/zvuky/10/desktop.ini new file mode 100644 index 0000000..4f533c3 --- /dev/null +++ b/zvuky/10/desktop.ini @@ -0,0 +1,3 @@ +[LocalizedFileNames] +luna.wav=@luna,0 +lupa.wav=@lupa,0 diff --git a/zvuky/11/1.wav b/zvuky/11/1.wav new file mode 100644 index 0000000..8fb675b Binary files /dev/null and b/zvuky/11/1.wav differ diff --git a/zvuky/11/2.wav b/zvuky/11/2.wav new file mode 100644 index 0000000..a1b8600 Binary files /dev/null and b/zvuky/11/2.wav differ diff --git a/zvuky/11/desktop.ini b/zvuky/11/desktop.ini new file mode 100644 index 0000000..85a6223 --- /dev/null +++ b/zvuky/11/desktop.ini @@ -0,0 +1,3 @@ +[LocalizedFileNames] +l_1uka.wav=@l_1uka,0 +m_1uka.wav=@m_1uka,0 diff --git a/zvuky/12/1.wav b/zvuky/12/1.wav new file mode 100644 index 0000000..efd5eb7 Binary files /dev/null and b/zvuky/12/1.wav differ diff --git a/zvuky/12/2.wav b/zvuky/12/2.wav new file mode 100644 index 0000000..68927a6 Binary files /dev/null and b/zvuky/12/2.wav differ diff --git a/zvuky/12/desktop.ini b/zvuky/12/desktop.ini new file mode 100644 index 0000000..3b1e175 --- /dev/null +++ b/zvuky/12/desktop.ini @@ -0,0 +1,2 @@ +[LocalizedFileNames] +sitko.wav=@sitko,0 diff --git a/zvuky/13/1.wav b/zvuky/13/1.wav new file mode 100644 index 0000000..a03fa0c Binary files /dev/null and b/zvuky/13/1.wav differ diff --git a/zvuky/13/2.wav b/zvuky/13/2.wav new file mode 100644 index 0000000..0b4569e Binary files /dev/null and b/zvuky/13/2.wav differ diff --git a/zvuky/14/1.wav b/zvuky/14/1.wav new file mode 100644 index 0000000..f0d3f9d Binary files /dev/null and b/zvuky/14/1.wav differ diff --git a/zvuky/14/2.wav b/zvuky/14/2.wav new file mode 100644 index 0000000..5cf0ac9 Binary files /dev/null and b/zvuky/14/2.wav differ diff --git a/zvuky/15/1.wav b/zvuky/15/1.wav new file mode 100644 index 0000000..04c8677 Binary files /dev/null and b/zvuky/15/1.wav differ diff --git a/zvuky/15/2.wav b/zvuky/15/2.wav new file mode 100644 index 0000000..c1af662 Binary files /dev/null and b/zvuky/15/2.wav differ diff --git a/zvuky/2/1.wav b/zvuky/2/1.wav new file mode 100644 index 0000000..130e43a Binary files /dev/null and b/zvuky/2/1.wav differ diff --git a/zvuky/2/2.wav b/zvuky/2/2.wav new file mode 100644 index 0000000..c9d6357 Binary files /dev/null and b/zvuky/2/2.wav differ diff --git a/zvuky/3/1.wav b/zvuky/3/1.wav new file mode 100644 index 0000000..1bee800 Binary files /dev/null and b/zvuky/3/1.wav differ diff --git a/zvuky/3/2.wav b/zvuky/3/2.wav new file mode 100644 index 0000000..ec6830d Binary files /dev/null and b/zvuky/3/2.wav differ diff --git a/zvuky/4/1.wav b/zvuky/4/1.wav new file mode 100644 index 0000000..3692408 Binary files /dev/null and b/zvuky/4/1.wav differ diff --git a/zvuky/4/2.wav b/zvuky/4/2.wav new file mode 100644 index 0000000..7589d88 Binary files /dev/null and b/zvuky/4/2.wav differ diff --git a/zvuky/5/1.wav b/zvuky/5/1.wav new file mode 100644 index 0000000..390a209 Binary files /dev/null and b/zvuky/5/1.wav differ diff --git a/zvuky/5/2.wav b/zvuky/5/2.wav new file mode 100644 index 0000000..f10c918 Binary files /dev/null and b/zvuky/5/2.wav differ diff --git a/zvuky/6/1.wav b/zvuky/6/1.wav new file mode 100644 index 0000000..33d4ad4 Binary files /dev/null and b/zvuky/6/1.wav differ diff --git a/zvuky/6/2.wav b/zvuky/6/2.wav new file mode 100644 index 0000000..dda1632 Binary files /dev/null and b/zvuky/6/2.wav differ diff --git a/zvuky/7/1.wav b/zvuky/7/1.wav new file mode 100644 index 0000000..435079a Binary files /dev/null and b/zvuky/7/1.wav differ diff --git a/zvuky/7/2.wav b/zvuky/7/2.wav new file mode 100644 index 0000000..a9c3d38 Binary files /dev/null and b/zvuky/7/2.wav differ diff --git a/zvuky/8/1.wav b/zvuky/8/1.wav new file mode 100644 index 0000000..30e9aaa Binary files /dev/null and b/zvuky/8/1.wav differ diff --git a/zvuky/8/2.wav b/zvuky/8/2.wav new file mode 100644 index 0000000..99c1ff9 Binary files /dev/null and b/zvuky/8/2.wav differ diff --git a/zvuky/8/desktop.ini b/zvuky/8/desktop.ini new file mode 100644 index 0000000..4477b62 --- /dev/null +++ b/zvuky/8/desktop.ini @@ -0,0 +1,3 @@ +[LocalizedFileNames] +sad-2.wav=@sad-2,0 +sud.wav=@sud,0 diff --git a/zvuky/9/1.wav b/zvuky/9/1.wav new file mode 100644 index 0000000..f51fd73 Binary files /dev/null and b/zvuky/9/1.wav differ diff --git a/zvuky/9/2.wav b/zvuky/9/2.wav new file mode 100644 index 0000000..a7daf11 Binary files /dev/null and b/zvuky/9/2.wav differ diff --git a/zvuky/9/desktop.ini b/zvuky/9/desktop.ini new file mode 100644 index 0000000..2ba44a1 --- /dev/null +++ b/zvuky/9/desktop.ini @@ -0,0 +1,3 @@ +[LocalizedFileNames] +vata-2.wav=@vata-2,0 +chata.wav=@chata,0 diff --git a/zvuky/banán.wav b/zvuky/banán.wav new file mode 100644 index 0000000..2852da3 Binary files /dev/null and b/zvuky/banán.wav differ diff --git a/zvuky/baran.wav b/zvuky/baran.wav new file mode 100644 index 0000000..43567c4 Binary files /dev/null and b/zvuky/baran.wav differ diff --git a/zvuky/basa.wav b/zvuky/basa.wav new file mode 100644 index 0000000..509acd2 Binary files /dev/null and b/zvuky/basa.wav differ diff --git a/zvuky/baňa.wav b/zvuky/baňa.wav new file mode 100644 index 0000000..df6c108 Binary files /dev/null and b/zvuky/baňa.wav differ diff --git a/zvuky/beží.wav b/zvuky/beží.wav new file mode 100644 index 0000000..3a22558 Binary files /dev/null and b/zvuky/beží.wav differ diff --git a/zvuky/bitka.wav b/zvuky/bitka.wav new file mode 100644 index 0000000..410625f Binary files /dev/null and b/zvuky/bitka.wav differ diff --git a/zvuky/boli.wav b/zvuky/boli.wav new file mode 100644 index 0000000..53e5aaa Binary files /dev/null and b/zvuky/boli.wav differ diff --git a/zvuky/bosá.wav b/zvuky/bosá.wav new file mode 100644 index 0000000..dd9f1d4 Binary files /dev/null and b/zvuky/bosá.wav differ diff --git a/zvuky/brána.wav b/zvuky/brána.wav new file mode 100644 index 0000000..342e1fa Binary files /dev/null and b/zvuky/brána.wav differ diff --git a/zvuky/bábka.wav b/zvuky/bábka.wav new file mode 100644 index 0000000..1634bd3 Binary files /dev/null and b/zvuky/bábka.wav differ diff --git a/zvuky/cesta.wav b/zvuky/cesta.wav new file mode 100644 index 0000000..a27fba9 Binary files /dev/null and b/zvuky/cesta.wav differ diff --git a/zvuky/chata.wav b/zvuky/chata.wav new file mode 100644 index 0000000..f51fd73 Binary files /dev/null and b/zvuky/chata.wav differ diff --git a/zvuky/chorý.wav b/zvuky/chorý.wav new file mode 100644 index 0000000..c3e62d2 Binary files /dev/null and b/zvuky/chorý.wav differ diff --git a/zvuky/cop.wav b/zvuky/cop.wav new file mode 100644 index 0000000..e3f8cb7 Binary files /dev/null and b/zvuky/cop.wav differ diff --git a/zvuky/dláto.wav b/zvuky/dláto.wav new file mode 100644 index 0000000..e505aa1 Binary files /dev/null and b/zvuky/dláto.wav differ diff --git a/zvuky/dom.wav b/zvuky/dom.wav new file mode 100644 index 0000000..a94143d Binary files /dev/null and b/zvuky/dom.wav differ diff --git a/zvuky/drak.wav b/zvuky/drak.wav new file mode 100644 index 0000000..7fe4684 Binary files /dev/null and b/zvuky/drak.wav differ diff --git a/zvuky/dravec.wav b/zvuky/dravec.wav new file mode 100644 index 0000000..70ee8b6 Binary files /dev/null and b/zvuky/dravec.wav differ diff --git a/zvuky/dym.wav b/zvuky/dym.wav new file mode 100644 index 0000000..92c6d26 Binary files /dev/null and b/zvuky/dym.wav differ diff --git a/zvuky/dáva.wav b/zvuky/dáva.wav new file mode 100644 index 0000000..642cbf5 Binary files /dev/null and b/zvuky/dáva.wav differ diff --git a/zvuky/dáš.wav b/zvuky/dáš.wav new file mode 100644 index 0000000..05b3c49 Binary files /dev/null and b/zvuky/dáš.wav differ diff --git a/zvuky/džúsy.wav b/zvuky/džúsy.wav new file mode 100644 index 0000000..c2a931e Binary files /dev/null and b/zvuky/džúsy.wav differ diff --git a/zvuky/effects/click.mp3 b/zvuky/effects/click.mp3 new file mode 100644 index 0000000..b2d32c8 Binary files /dev/null and b/zvuky/effects/click.mp3 differ diff --git a/zvuky/effects/clock-tic-tac.mp3 b/zvuky/effects/clock-tic-tac.mp3 new file mode 100644 index 0000000..7e42fb0 Binary files /dev/null and b/zvuky/effects/clock-tic-tac.mp3 differ diff --git a/zvuky/effects/collectpoints.mp3 b/zvuky/effects/collectpoints.mp3 new file mode 100644 index 0000000..6bfa6ad Binary files /dev/null and b/zvuky/effects/collectpoints.mp3 differ diff --git a/zvuky/effects/error.mp3 b/zvuky/effects/error.mp3 new file mode 100644 index 0000000..ea9c92d Binary files /dev/null and b/zvuky/effects/error.mp3 differ diff --git a/zvuky/effects/flipcard.mp3 b/zvuky/effects/flipcard.mp3 new file mode 100644 index 0000000..a670876 Binary files /dev/null and b/zvuky/effects/flipcard.mp3 differ diff --git a/zvuky/effects/incorrect.mp3 b/zvuky/effects/incorrect.mp3 new file mode 100644 index 0000000..69a998c Binary files /dev/null and b/zvuky/effects/incorrect.mp3 differ diff --git a/zvuky/effects/jump.mp3 b/zvuky/effects/jump.mp3 new file mode 100644 index 0000000..4be24c5 Binary files /dev/null and b/zvuky/effects/jump.mp3 differ diff --git a/zvuky/effects/kopanie.wav b/zvuky/effects/kopanie.wav new file mode 100644 index 0000000..27e54ce Binary files /dev/null and b/zvuky/effects/kopanie.wav differ diff --git a/zvuky/effects/mouseclick.mp3 b/zvuky/effects/mouseclick.mp3 new file mode 100644 index 0000000..2706b1d Binary files /dev/null and b/zvuky/effects/mouseclick.mp3 differ diff --git a/zvuky/effects/spravne.mp3 b/zvuky/effects/spravne.mp3 new file mode 100644 index 0000000..de51d68 Binary files /dev/null and b/zvuky/effects/spravne.mp3 differ diff --git a/zvuky/effects/tictoc.mp3 b/zvuky/effects/tictoc.mp3 new file mode 100644 index 0000000..3ef39b0 Binary files /dev/null and b/zvuky/effects/tictoc.mp3 differ diff --git a/zvuky/effects/timer-20.mp3 b/zvuky/effects/timer-20.mp3 new file mode 100644 index 0000000..20a24fe Binary files /dev/null and b/zvuky/effects/timer-20.mp3 differ diff --git a/zvuky/effects/vyhra.mp3 b/zvuky/effects/vyhra.mp3 new file mode 100644 index 0000000..68dad2d Binary files /dev/null and b/zvuky/effects/vyhra.mp3 differ diff --git a/zvuky/effects/winfantasia.mp3 b/zvuky/effects/winfantasia.mp3 new file mode 100644 index 0000000..552f473 Binary files /dev/null and b/zvuky/effects/winfantasia.mp3 differ diff --git a/zvuky/effects/zlato.wav b/zvuky/effects/zlato.wav new file mode 100644 index 0000000..5ac3117 Binary files /dev/null and b/zvuky/effects/zlato.wav differ diff --git a/zvuky/effects/zle.mp3 b/zvuky/effects/zle.mp3 new file mode 100644 index 0000000..f5a8309 Binary files /dev/null and b/zvuky/effects/zle.mp3 differ diff --git a/zvuky/fúka.wav b/zvuky/fúka.wav new file mode 100644 index 0000000..6a72be9 Binary files /dev/null and b/zvuky/fúka.wav differ diff --git a/zvuky/fúrik.wav b/zvuky/fúrik.wav new file mode 100644 index 0000000..49d006f Binary files /dev/null and b/zvuky/fúrik.wav differ diff --git a/zvuky/fúzy.wav b/zvuky/fúzy.wav new file mode 100644 index 0000000..457d052 Binary files /dev/null and b/zvuky/fúzy.wav differ diff --git a/zvuky/horí.wav b/zvuky/horí.wav new file mode 100644 index 0000000..221e970 Binary files /dev/null and b/zvuky/horí.wav differ diff --git a/zvuky/hračka.wav b/zvuky/hračka.wav new file mode 100644 index 0000000..9b96fc8 Binary files /dev/null and b/zvuky/hračka.wav differ diff --git a/zvuky/hroch.wav b/zvuky/hroch.wav new file mode 100644 index 0000000..7c529a6 Binary files /dev/null and b/zvuky/hroch.wav differ diff --git a/zvuky/hrom.wav b/zvuky/hrom.wav new file mode 100644 index 0000000..996328d Binary files /dev/null and b/zvuky/hrom.wav differ diff --git a/zvuky/hrot.wav b/zvuky/hrot.wav new file mode 100644 index 0000000..c3937bb Binary files /dev/null and b/zvuky/hrot.wav differ diff --git a/zvuky/huby.wav b/zvuky/huby.wav new file mode 100644 index 0000000..7fbb889 Binary files /dev/null and b/zvuky/huby.wav differ diff --git a/zvuky/jama.wav b/zvuky/jama.wav new file mode 100644 index 0000000..31ddde4 Binary files /dev/null and b/zvuky/jama.wav differ diff --git a/zvuky/kačka.wav b/zvuky/kačka.wav new file mode 100644 index 0000000..0541553 Binary files /dev/null and b/zvuky/kačka.wav differ diff --git a/zvuky/klinček.wav b/zvuky/klinček.wav new file mode 100644 index 0000000..f5b1db7 Binary files /dev/null and b/zvuky/klinček.wav differ diff --git a/zvuky/koleno.wav b/zvuky/koleno.wav new file mode 100644 index 0000000..e652172 Binary files /dev/null and b/zvuky/koleno.wav differ diff --git a/zvuky/koleso.wav b/zvuky/koleso.wav new file mode 100644 index 0000000..ad8f0a1 Binary files /dev/null and b/zvuky/koleso.wav differ diff --git a/zvuky/koláč.wav b/zvuky/koláč.wav new file mode 100644 index 0000000..64930fb Binary files /dev/null and b/zvuky/koláč.wav differ diff --git a/zvuky/komár.wav b/zvuky/komár.wav new file mode 100644 index 0000000..178c1e1 Binary files /dev/null and b/zvuky/komár.wav differ diff --git a/zvuky/konár.wav b/zvuky/konár.wav new file mode 100644 index 0000000..507a769 Binary files /dev/null and b/zvuky/konár.wav differ diff --git a/zvuky/kope.wav b/zvuky/kope.wav new file mode 100644 index 0000000..b969020 Binary files /dev/null and b/zvuky/kope.wav differ diff --git a/zvuky/kováč.wav b/zvuky/kováč.wav new file mode 100644 index 0000000..7721cfc Binary files /dev/null and b/zvuky/kováč.wav differ diff --git a/zvuky/kočík.wav b/zvuky/kočík.wav new file mode 100644 index 0000000..7b22255 Binary files /dev/null and b/zvuky/kočík.wav differ diff --git a/zvuky/košík.wav b/zvuky/košík.wav new file mode 100644 index 0000000..f3d28a6 Binary files /dev/null and b/zvuky/košík.wav differ diff --git a/zvuky/koža.wav b/zvuky/koža.wav new file mode 100644 index 0000000..37a3b92 Binary files /dev/null and b/zvuky/koža.wav differ diff --git a/zvuky/krava.wav b/zvuky/krava.wav new file mode 100644 index 0000000..496a956 Binary files /dev/null and b/zvuky/krava.wav differ diff --git a/zvuky/krieda.wav b/zvuky/krieda.wav new file mode 100644 index 0000000..27291cb Binary files /dev/null and b/zvuky/krieda.wav differ diff --git a/zvuky/káva.wav b/zvuky/káva.wav new file mode 100644 index 0000000..f7ae386 Binary files /dev/null and b/zvuky/káva.wav differ diff --git a/zvuky/kôň.wav b/zvuky/kôň.wav new file mode 100644 index 0000000..afa0623 Binary files /dev/null and b/zvuky/kôň.wav differ diff --git a/zvuky/kôš.wav b/zvuky/kôš.wav new file mode 100644 index 0000000..a49d1df Binary files /dev/null and b/zvuky/kôš.wav differ diff --git a/zvuky/kúpe.wav b/zvuky/kúpe.wav new file mode 100644 index 0000000..11041f3 Binary files /dev/null and b/zvuky/kúpe.wav differ diff --git a/zvuky/líška.wav b/zvuky/líška.wav new file mode 100644 index 0000000..a7ae30e Binary files /dev/null and b/zvuky/líška.wav differ diff --git a/zvuky/polica.wav b/zvuky/polica.wav new file mode 100644 index 0000000..02f6339 Binary files /dev/null and b/zvuky/polica.wav differ diff --git a/zvuky/prach.wav b/zvuky/prach.wav new file mode 100644 index 0000000..3c77ecf Binary files /dev/null and b/zvuky/prach.wav differ diff --git a/zvuky/prak.wav b/zvuky/prak.wav new file mode 100644 index 0000000..724caea Binary files /dev/null and b/zvuky/prak.wav differ diff --git a/zvuky/pračka.wav b/zvuky/pračka.wav new file mode 100644 index 0000000..a4ffcc9 Binary files /dev/null and b/zvuky/pračka.wav differ diff --git a/zvuky/prať.wav b/zvuky/prať.wav new file mode 100644 index 0000000..7ec7e74 Binary files /dev/null and b/zvuky/prať.wav differ diff --git a/zvuky/puška.wav b/zvuky/puška.wav new file mode 100644 index 0000000..0c504d6 Binary files /dev/null and b/zvuky/puška.wav differ diff --git a/zvuky/rak.wav b/zvuky/rak.wav new file mode 100644 index 0000000..e122339 Binary files /dev/null and b/zvuky/rak.wav differ diff --git a/zvuky/reˇže.wav b/zvuky/reˇže.wav new file mode 100644 index 0000000..9cd2491 Binary files /dev/null and b/zvuky/reˇže.wav differ diff --git a/zvuky/rohy.wav b/zvuky/rohy.wav new file mode 100644 index 0000000..2988b1b Binary files /dev/null and b/zvuky/rohy.wav differ diff --git a/zvuky/ruka.wav b/zvuky/ruka.wav new file mode 100644 index 0000000..05376ec Binary files /dev/null and b/zvuky/ruka.wav differ diff --git a/zvuky/ruky.wav b/zvuky/ruky.wav new file mode 100644 index 0000000..7497e30 Binary files /dev/null and b/zvuky/ruky.wav differ diff --git a/zvuky/ruža.wav b/zvuky/ruža.wav new file mode 100644 index 0000000..890dfce Binary files /dev/null and b/zvuky/ruža.wav differ diff --git a/zvuky/ruže.wav b/zvuky/ruže.wav new file mode 100644 index 0000000..a356e76 Binary files /dev/null and b/zvuky/ruže.wav differ diff --git a/zvuky/ryža.wav b/zvuky/ryža.wav new file mode 100644 index 0000000..a1acddc Binary files /dev/null and b/zvuky/ryža.wav differ diff --git a/zvuky/sito.wav b/zvuky/sito.wav new file mode 100644 index 0000000..becdabb Binary files /dev/null and b/zvuky/sito.wav differ diff --git a/zvuky/sud.wav b/zvuky/sud.wav new file mode 100644 index 0000000..99c1ff9 Binary files /dev/null and b/zvuky/sud.wav differ diff --git a/zvuky/taška.wav b/zvuky/taška.wav new file mode 100644 index 0000000..ad25aa7 Binary files /dev/null and b/zvuky/taška.wav differ diff --git a/zvuky/telo.wav b/zvuky/telo.wav new file mode 100644 index 0000000..63f33cf Binary files /dev/null and b/zvuky/telo.wav differ diff --git a/zvuky/trieda.wav b/zvuky/trieda.wav new file mode 100644 index 0000000..106ddd8 Binary files /dev/null and b/zvuky/trieda.wav differ diff --git a/zvuky/tráva.wav b/zvuky/tráva.wav new file mode 100644 index 0000000..955bc8f Binary files /dev/null and b/zvuky/tráva.wav differ diff --git a/zvuky/tužka.wav b/zvuky/tužka.wav new file mode 100644 index 0000000..ad16c77 Binary files /dev/null and b/zvuky/tužka.wav differ diff --git a/zvuky/ucho.wav b/zvuky/ucho.wav new file mode 100644 index 0000000..a88d168 Binary files /dev/null and b/zvuky/ucho.wav differ diff --git a/zvuky/ujo.wav b/zvuky/ujo.wav new file mode 100644 index 0000000..c16b6a1 Binary files /dev/null and b/zvuky/ujo.wav differ diff --git a/zvuky/valec.wav b/zvuky/valec.wav new file mode 100644 index 0000000..c965c66 Binary files /dev/null and b/zvuky/valec.wav differ diff --git a/zvuky/vaňa.wav b/zvuky/vaňa.wav new file mode 100644 index 0000000..be3849f Binary files /dev/null and b/zvuky/vaňa.wav differ diff --git a/zvuky/vedie.wav b/zvuky/vedie.wav new file mode 100644 index 0000000..4e57b66 Binary files /dev/null and b/zvuky/vedie.wav differ diff --git a/zvuky/vesta.wav b/zvuky/vesta.wav new file mode 100644 index 0000000..2802bc9 Binary files /dev/null and b/zvuky/vesta.wav differ diff --git a/zvuky/vezie.wav b/zvuky/vezie.wav new file mode 100644 index 0000000..a079e2a Binary files /dev/null and b/zvuky/vezie.wav differ diff --git a/zvuky/vila.wav b/zvuky/vila.wav new file mode 100644 index 0000000..ad6d7b6 Binary files /dev/null and b/zvuky/vila.wav differ diff --git a/zvuky/vrana.wav b/zvuky/vrana.wav new file mode 100644 index 0000000..99d86d2 Binary files /dev/null and b/zvuky/vrana.wav differ diff --git a/zvuky/víla.wav b/zvuky/víla.wav new file mode 100644 index 0000000..bbc78ca Binary files /dev/null and b/zvuky/víla.wav differ diff --git a/zvuky/zem.wav b/zvuky/zem.wav new file mode 100644 index 0000000..97a2701 Binary files /dev/null and b/zvuky/zem.wav differ diff --git a/zvuky/zlato.wav b/zvuky/zlato.wav new file mode 100644 index 0000000..691be20 Binary files /dev/null and b/zvuky/zlato.wav differ diff --git a/zvuky/zuby.wav b/zvuky/zuby.wav new file mode 100644 index 0000000..10eb157 Binary files /dev/null and b/zvuky/zuby.wav differ diff --git a/zvuky/šiška.wav b/zvuky/šiška.wav new file mode 100644 index 0000000..a607c59 Binary files /dev/null and b/zvuky/šiška.wav differ diff --git a/zvuky/žena.wav b/zvuky/žena.wav new file mode 100644 index 0000000..7ecc006 Binary files /dev/null and b/zvuky/žena.wav differ diff --git a/zvuky/žito.wav b/zvuky/žito.wav new file mode 100644 index 0000000..caf428d Binary files /dev/null and b/zvuky/žito.wav differ