diff --git a/src/CiselnaVyprava/Components/BattleArena.razor b/src/CiselnaVyprava/Components/BattleArena.razor index 3be999a..daf281d 100644 --- a/src/CiselnaVyprava/Components/BattleArena.razor +++ b/src/CiselnaVyprava/Components/BattleArena.razor @@ -107,6 +107,58 @@ } + + @if (ShowExplanationModal && ExplanationProblem != null) + { +
+
+
+ 🦉 + 📖 MÚDRA ROZPRÁVKOVÁ RADA +

Pozor na chybičku!

+
+ +
+ +
+
+ Príklad: + @ExplanationProblem.QuestionText +
+ +
+
+ Tvoja odpoveď: + @(string.IsNullOrWhiteSpace(ExplanationUserAnswer) ? "Čas vypršal ⏱️" : ExplanationUserAnswer) ❌ +
+
+ Správny výsledok: + @ExplanationProblem.CorrectAnswer ✅ +
+
+
+ + +
+
+ 💡 + Ako na to (Postup výpočtu): +
+

+ @ExplanationProblem.Explanation +

+
+
+ +
+ +
+
+
+ } + @if (State.IsBattleOver) { @@ -213,6 +265,11 @@ private System.Threading.Timer? _timer; private double RemainingTimeSeconds { get; set; } = 6.0; + private bool ShowExplanationModal { get; set; } = false; + private bool IsExplanationFromDefense { get; set; } = false; + private string ExplanationUserAnswer { get; set; } = string.Empty; + private MathProblem? ExplanationProblem { get; set; } + private Level? NextLevel => DataLoader.GetNextLevel(PlayerGrade, CurrentLevel.Id); private string? _loadedLevelId; @@ -241,6 +298,8 @@ private void StartBattle() { + ShowExplanationModal = false; + ExplanationProblem = null; BattleEngine.StartBattle(Hero, CurrentLevel, Config); CurrentInput = string.Empty; StartTimer(); @@ -249,58 +308,162 @@ private void StartTimer() { _timer?.Dispose(); + State.ProblemStartTime = DateTime.UtcNow; RemainingTimeSeconds = State.IsDefensePhase ? Config.Battle.DefenseTestDurationSeconds : Config.Battle.StandardTimeSeconds; _timer = new System.Threading.Timer(async _ => { + if (ShowExplanationModal || State.IsBattleOver) return; + var elapsed = (DateTime.UtcNow - State.ProblemStartTime).TotalSeconds; double limit = State.IsDefensePhase ? Config.Battle.DefenseTestDurationSeconds : Config.Battle.StandardTimeSeconds; RemainingTimeSeconds = Math.Max(0, limit - elapsed); + if (RemainingTimeSeconds <= 0) + { + _timer?.Dispose(); + await InvokeAsync(async () => + { + if (State.IsDefensePhase) + { + var prob = State.CurrentProblem; + var result = await BattleEngine.SubmitDefenseAnswerAsync(""); + ExplanationProblem = prob; + ExplanationUserAnswer = "Čas vypršal ⏱️"; + IsExplanationFromDefense = true; + ShowExplanationModal = true; + StateHasChanged(); + } + else + { + var prob = State.CurrentProblem; + var result = await BattleEngine.SubmitAnswerAsync(""); + ExplanationProblem = prob; + ExplanationUserAnswer = "Čas vypršal ⏱️"; + IsExplanationFromDefense = false; + ShowExplanationModal = true; + StateHasChanged(); + } + }); + return; + } + await InvokeAsync(StateHasChanged); }, null, 100, 100); } private async Task HandleInputSubmit(string input) { - if (State.IsBattleOver) return; + if (State.IsBattleOver || ShowExplanationModal) return; if (State.IsDefensePhase) { - await BattleEngine.SubmitDefenseAnswerAsync(input); + var problemBeforeSubmit = State.CurrentProblem; + var result = await BattleEngine.SubmitDefenseAnswerAsync(input); + CurrentInput = string.Empty; + + if (result is CombatResultType.DefenseFailed or CombatResultType.Defeat) + { + _timer?.Dispose(); + ExplanationProblem = problemBeforeSubmit; + ExplanationUserAnswer = input; + IsExplanationFromDefense = true; + ShowExplanationModal = true; + StateHasChanged(); + return; + } } else { - await BattleEngine.SubmitAnswerAsync(input); + var problemBeforeSubmit = State.CurrentProblem; + var result = await BattleEngine.SubmitAnswerAsync(input); + CurrentInput = string.Empty; + + if (result == CombatResultType.PlayerMissed) + { + _timer?.Dispose(); + ExplanationProblem = problemBeforeSubmit; + ExplanationUserAnswer = input; + IsExplanationFromDefense = false; + ShowExplanationModal = true; + StateHasChanged(); + return; + } } - CurrentInput = string.Empty; await ProcessPostTurn(); } private async Task HandleChoiceSelected(string choice) { - if (State.IsBattleOver) return; + if (State.IsBattleOver || ShowExplanationModal) return; if (State.IsDefensePhase) { - await BattleEngine.SubmitDefenseAnswerAsync(choice); + var problemBeforeSubmit = State.CurrentProblem; + var result = await BattleEngine.SubmitDefenseAnswerAsync(choice); + + if (result is CombatResultType.DefenseFailed or CombatResultType.Defeat) + { + _timer?.Dispose(); + ExplanationProblem = problemBeforeSubmit; + ExplanationUserAnswer = choice; + IsExplanationFromDefense = true; + ShowExplanationModal = true; + StateHasChanged(); + return; + } } else { - await BattleEngine.SubmitAnswerAsync(choice); + var problemBeforeSubmit = State.CurrentProblem; + var result = await BattleEngine.SubmitAnswerAsync(choice); + + if (result == CombatResultType.PlayerMissed) + { + _timer?.Dispose(); + ExplanationProblem = problemBeforeSubmit; + ExplanationUserAnswer = choice; + IsExplanationFromDefense = false; + ShowExplanationModal = true; + StateHasChanged(); + return; + } } await ProcessPostTurn(); } + private async Task DismissExplanation() + { + ShowExplanationModal = false; + + if (IsExplanationFromDefense) + { + if (State.IsBattleOver) + { + StateHasChanged(); + return; + } + + BattleEngine.NextProblem(); + StartTimer(); + StateHasChanged(); + } + else + { + // Start fresh timer for the defense phase problem + StartTimer(); + StateHasChanged(); + } + } + private async Task ProcessPostTurn() { StateHasChanged(); if (!State.IsBattleOver) { - // Short delay to display attack/hurt animation before next question - await Task.Delay(1000); + await Task.Delay(900); if (!State.IsDefensePhase) { BattleEngine.NextProblem(); @@ -370,8 +533,10 @@ private string GetTimerColorClass() { - if (RemainingTimeSeconds > 3.0) return "timer-green"; - if (RemainingTimeSeconds > 1.5) return "timer-yellow"; + double limit = State.IsDefensePhase ? Config.Battle.DefenseTestDurationSeconds : Config.Battle.StandardTimeSeconds; + double ratio = limit > 0 ? (RemainingTimeSeconds / limit) : 0; + if (ratio > 0.45) return "timer-green"; + if (ratio > 0.20) return "timer-yellow"; return "timer-red"; } @@ -400,6 +565,15 @@ private async Task HandleKeyDown(KeyboardEventArgs e) { + if (ShowExplanationModal) + { + if (e.Key is "Enter" or " " or "Escape") + { + await DismissExplanation(); + } + return; + } + if (State.IsBattleOver) { if (e.Key == "Enter") diff --git a/src/CiselnaVyprava/Models/GameConfig.cs b/src/CiselnaVyprava/Models/GameConfig.cs index 454e9e3..747ba61 100644 --- a/src/CiselnaVyprava/Models/GameConfig.cs +++ b/src/CiselnaVyprava/Models/GameConfig.cs @@ -8,11 +8,11 @@ public class GameConfig public class BattleConfig { - public double CriticalTimeSeconds { get; set; } = 3.0; - public double StandardTimeSeconds { get; set; } = 6.0; + public double CriticalTimeSeconds { get; set; } = 4.0; + public double StandardTimeSeconds { get; set; } = 10.0; public double CriticalDamageMultiplier { get; set; } = 1.5; public double WeakDamageMultiplier { get; set; } = 0.5; - public double DefenseTestDurationSeconds { get; set; } = 5.0; + public double DefenseTestDurationSeconds { get; set; } = 16.0; public int DefaultPlayerHp { get; set; } = 5; public int ComboStreakBonusDmg { get; set; } = 1; } diff --git a/src/CiselnaVyprava/Models/GameModels.cs b/src/CiselnaVyprava/Models/GameModels.cs index e97ad7b..74fa266 100644 --- a/src/CiselnaVyprava/Models/GameModels.cs +++ b/src/CiselnaVyprava/Models/GameModels.cs @@ -43,6 +43,7 @@ public class MathProblem public string Operation { get; set; } = "+"; public string DisplayB { get; set; } = string.Empty; public string CorrectAnswer { get; set; } = string.Empty; + public string Explanation { get; set; } = string.Empty; public List Choices { get; set; } = new(); public string InputType { get; set; } = "DirectInput"; public bool IsDefenseTest { get; set; } = false; diff --git a/src/CiselnaVyprava/Pages/Home.razor b/src/CiselnaVyprava/Pages/Home.razor index fce2616..a0eb0f7 100644 --- a/src/CiselnaVyprava/Pages/Home.razor +++ b/src/CiselnaVyprava/Pages/Home.razor @@ -51,24 +51,60 @@ } - @if (IsTransitioning) + @if (IsTransitioning && PendingLevel != null) { var hero = DataLoader.GetHero(Profile.SelectedHeroId) ?? DataLoader.Heroes.FirstOrDefault(); var heroAvatar = hero != null ? $"{hero.AssetFolder}_idle_p1.png" : "assets/images/heroes/knight_idle_p1.png"; + var enemyAvatar = $"{PendingLevel.Enemy.AssetFolder}_idle_p1.png"; + var heroDisplayName = !string.IsNullOrWhiteSpace(Profile.Name) ? Profile.Name : (hero?.Name ?? "Hrdina");
-
- Hrdina na ceste +
+ @(PendingLevel.IsBoss ? "👑 BOSS LEVEL" : "⚔️ NOVÁ VÝZVA") +

@PendingLevel.Name

-

🗺️ Vstupuješ do novej oblasti...

-

📍 @TransitionTargetText

-
- ✨ - ⭐ - ✨ + +
+
+
+ @heroDisplayName +
+ @heroDisplayName + Udatný Počtár +
+ +
+ VS + ⚔️ +
+ +
+
+ @PendingLevel.Enemy.Name +
+ @PendingLevel.Enemy.Name + ❤️ @PendingLevel.Enemy.MaxHp HP +
+
+ +
+

+ 🧠 Úloha: @(PendingLevel.IsBoss ? "Záverečná skúška vedomostí!" : "Vyrieš matematické príklady a poraz protivníka!") +

+
+ +
+ +
@@ -89,9 +125,9 @@ private ScreenType CurrentScreen { get; set; } = ScreenType.Loading; private PlayerProfile Profile { get; set; } = new(); private Level? SelectedLevel { get; set; } + private Level? PendingLevel { get; set; } private bool IsTransitioning { get; set; } = false; - private string TransitionTargetText { get; set; } = string.Empty; protected override async Task OnInitializedAsync() { @@ -121,17 +157,30 @@ await Storage.SaveProfileAsync(Profile); } - private async Task HandleLevelSelected(Level level) + private void HandleLevelSelected(Level level) { - TransitionTargetText = $"{level.Name} (Protivník: {level.Enemy.Name})"; + PendingLevel = level; IsTransitioning = true; StateHasChanged(); + } - await Task.Delay(850); + private void ConfirmAndStartPendingLevel() + { + if (PendingLevel != null) + { + SelectedLevel = PendingLevel; + PendingLevel = null; + CurrentScreen = ScreenType.Battle; + IsTransitioning = false; + StateHasChanged(); + } + } - SelectedLevel = level; - CurrentScreen = ScreenType.Battle; + private void CancelPendingLevel() + { + PendingLevel = null; IsTransitioning = false; + CurrentScreen = ScreenType.WorldMap; StateHasChanged(); } @@ -150,7 +199,7 @@ await Storage.SaveProfileAsync(Profile); } - await HandleLevelSelected(nextLevel); + HandleLevelSelected(nextLevel); } private void UnlockNextLevel(Level completedLevel) diff --git a/src/CiselnaVyprava/Services/MathProblemGenerator.cs b/src/CiselnaVyprava/Services/MathProblemGenerator.cs index d896d7c..b01dece 100644 --- a/src/CiselnaVyprava/Services/MathProblemGenerator.cs +++ b/src/CiselnaVyprava/Services/MathProblemGenerator.cs @@ -107,6 +107,7 @@ public class MathProblemGenerator : IMathProblemGenerator DisplayB = b.ToString(), CorrectAnswer = sum.ToString(), QuestionText = $"{a} + {b} = ?", + Explanation = GetAdditionExplanation(a, b, sum), InputType = config.InputType }; @@ -118,6 +119,36 @@ public class MathProblemGenerator : IMathProblemGenerator return problem; } + private string GetAdditionExplanation(int a, int b, int sum) + { + if (sum <= 10) + { + return $"Sčítanie: k číslu {a} pridáme {b} a dostaneme {sum}."; + } + if (a < 10 && b < 10 && sum > 10) + { + int toTen = 10 - a; + int rem = b - toTen; + return $"Tip: Rozlož si druhé číslo {b} na {toTen} a {rem}. Najprv doplň do desiatky ({a} + {toTen} = 10) a potom pripočítaj zvyšok (10 + {rem} = {sum})!"; + } + if (a >= 10 && b < 10) + { + int unitsA = a % 10; + if (unitsA + b < 10) + { + return $"Sčítaj jednotky: {unitsA} + {b} = {unitsA + b}. Desiatky ({a / 10 * 10}) opíšeme: výsledok je {sum}."; + } + else + { + int toNextTen = 10 - unitsA; + int rem = b - toNextTen; + int nextTen = ((a / 10) + 1) * 10; + return $"Doplň do celej desiatky: {a} + {toNextTen} = {nextTen}, a potom pripočítaj zvyšných {rem}: {nextTen} + {rem} = {sum}!"; + } + } + return $"Sčítanie: {a} + {b} = {sum}."; + } + private MathProblem GenerateSubtraction(MathConfig config, int hpPhase) { // Phase 4: Possibility of 3-term mixed chain @@ -135,6 +166,7 @@ public class MathProblemGenerator : IMathProblemGenerator DisplayB = "", CorrectAnswer = res3.ToString(), QuestionText = $"{a3} - {b3} + {c3} = ?", + Explanation = $"Počítaj postupne zľava doprava: najprv {a3} - {b3} = {a3 - b3}, a potom {a3 - b3} + {c3} = {res3}.", InputType = config.InputType }; if (config.InputType == "MultipleChoice") @@ -184,6 +216,7 @@ public class MathProblemGenerator : IMathProblemGenerator DisplayB = b.ToString(), CorrectAnswer = diff.ToString(), QuestionText = $"{a} - {b} = ?", + Explanation = GetSubtractionExplanation(a, b, diff), InputType = config.InputType }; @@ -195,6 +228,42 @@ public class MathProblemGenerator : IMathProblemGenerator return problem; } + private string GetSubtractionExplanation(int a, int b, int diff) + { + if (a <= 10) + { + return $"Odčítanie: od čísla {a} uberieme {b} a zostane nám {diff}."; + } + if (a > 10 && a <= 20 && b < 10) + { + int toTen = a - 10; + if (b <= toTen) + { + return $"Odčítaj jednotky: {toTen} - {b} = {toTen - b}. K desiatke pridáme {toTen - b} a máme {diff}."; + } + else + { + int rem = b - toTen; + return $"Tip: Rozlož si {b} na {toTen} a {rem}. Najprv odčítaj po desiatku ({a} - {toTen} = 10) a potom uber zvyšok (10 - {rem} = {diff})!"; + } + } + if (a > 20 && b < 10) + { + int unitsA = a % 10; + if (unitsA >= b) + { + return $"Odčítaj jednotky: {unitsA} - {b} = {unitsA - b}. Desiatky ({a / 10 * 10}) zostávajú: výsledok je {diff}."; + } + else + { + int rem = b - unitsA; + int prevTen = (a / 10) * 10; + return $"Odčítaj najprv {unitsA} do desiatky ({a} - {unitsA} = {prevTen}) a potom odčítaj zvyšných {rem} ({prevTen} - {rem} = {diff})!"; + } + } + return $"Odčítanie: {a} - {b} = {diff}."; + } + private MathProblem GenerateMultiplication(MathConfig config, int hpPhase) { var factors = config.Factors != null && config.Factors.Count > 0 @@ -232,6 +301,7 @@ public class MathProblemGenerator : IMathProblemGenerator DisplayB = factorB.ToString(), CorrectAnswer = product.ToString(), QuestionText = $"{factorA} × {factorB} = ?", + Explanation = $"Násobenie: {factorA} × {factorB} znamená {factorB}-krát sčítať číslo {factorA}. Výsledok je {product}.", InputType = config.InputType }; @@ -280,6 +350,7 @@ public class MathProblemGenerator : IMathProblemGenerator DisplayB = divisor.ToString(), CorrectAnswer = result.ToString(), QuestionText = $"{dividend} ÷ {divisor} = ?", + Explanation = $"Delenie: pýtame sa, koľkokrát sa {divisor} zmestí do {dividend}. Keďže {divisor} × {result} = {dividend}, výsledok je {result}!", InputType = config.InputType }; @@ -321,6 +392,7 @@ public class MathProblemGenerator : IMathProblemGenerator } string comp = leftVal < rightVal ? "<" : (leftVal > rightVal ? ">" : "="); + string compWord = leftVal < rightVal ? "menšie ako" : (leftVal > rightVal ? "väčšie ako" : "rovné"); return new MathProblem { @@ -329,6 +401,7 @@ public class MathProblemGenerator : IMathProblemGenerator DisplayB = rightStr, CorrectAnswer = comp, QuestionText = $"{leftStr} ? {rightStr}", + Explanation = $"Vypočítajme obe strany: ( {leftStr} = {leftVal} ) a ( {rightStr} = {rightVal} ). Keďže {leftVal} je {compWord} {rightVal}, správny znak je {comp}.", InputType = "MultipleChoice", Choices = new List { "<", "=", ">" } }; @@ -343,6 +416,7 @@ public class MathProblemGenerator : IMathProblemGenerator } string answer = x < y ? "<" : (x > y ? ">" : "="); + string word = x < y ? "menšie ako" : (x > y ? "väčšie ako" : "rovné"); return new MathProblem { @@ -351,6 +425,7 @@ public class MathProblemGenerator : IMathProblemGenerator DisplayB = y.ToString(), CorrectAnswer = answer, QuestionText = $"{x} ? {y}", + Explanation = $"Porovnanie: Číslo {x} je {word} číslu {y}, preto platí {x} {answer} {y}.", InputType = "MultipleChoice", Choices = new List { "<", "=", ">" } }; @@ -392,11 +467,10 @@ public class MathProblemGenerator : IMathProblemGenerator private MathProblem GenerateChallengingComparisonDefense(MathConfig config) { - // Compare expressions: (a + b) ? (c - d) int valLeft, valRight; string exprLeft, exprRight; - if (config.MaxA > 100) // Grade 3 large numbers + if (config.MaxA > 100) { int a = _rand.Next(10, 50) * 10; int b = _rand.Next(5, 30) * 10; @@ -408,7 +482,7 @@ public class MathProblemGenerator : IMathProblemGenerator valRight = c - d; exprRight = $"{c} - {d}"; } - else if (config.MaxSum > 20 || config.MaxA > 20) // Grade 2 + else if (config.MaxSum > 20 || config.MaxA > 20) { int a = _rand.Next(10, 45); int b = _rand.Next(5, 30); @@ -420,7 +494,7 @@ public class MathProblemGenerator : IMathProblemGenerator valRight = c - d; exprRight = $"{c} - {d}"; } - else // Grade 1 + else { int a = _rand.Next(2, 9); int b = _rand.Next(2, 9); @@ -433,7 +507,6 @@ public class MathProblemGenerator : IMathProblemGenerator exprRight = $"{c} - {d}"; } - // Sometimes create equal expressions if (_rand.Next(3) == 0) { valRight = valLeft; @@ -442,6 +515,7 @@ public class MathProblemGenerator : IMathProblemGenerator } string answer = valLeft < valRight ? "<" : (valLeft > valRight ? ">" : "="); + string compWord = valLeft < valRight ? "menšie ako" : (valLeft > valRight ? "väčšie ako" : "rovné"); return new MathProblem { @@ -450,6 +524,7 @@ public class MathProblemGenerator : IMathProblemGenerator DisplayB = exprRight, CorrectAnswer = answer, QuestionText = $"Porovnaj výrazy:\n( {exprLeft} ) ? ( {exprRight} )", + Explanation = $"Ľavá strana: {exprLeft} = {valLeft}. Pravá strana: {exprRight} = {valRight}. Keďže {valLeft} je {compWord} {valRight}, správny znak je {answer}.", InputType = "MultipleChoice", Choices = new List { "<", "=", ">" }, IsDefenseTest = true @@ -461,8 +536,9 @@ public class MathProblemGenerator : IMathProblemGenerator bool isAdd = _rand.Next(2) == 0; int missing, known, result; string equation; + string explanation; - if (config.MaxSum > 100 || config.MaxA > 100) // Grade 3 + if (config.MaxSum > 100 || config.MaxA > 100) { known = _rand.Next(10, 50) * 10; missing = _rand.Next(10, 40) * 10; @@ -470,15 +546,17 @@ public class MathProblemGenerator : IMathProblemGenerator { result = known + missing; equation = _rand.Next(2) == 0 ? $"{known} + ❓ = {result}" : $"❓ + {known} = {result}"; + explanation = $"Neznáme číslo nájdeme odčítaním: {result} - {known} = {missing}."; } else { result = known; int total = known + missing; equation = $"{total} - ❓ = {result}"; + explanation = $"Neznáme číslo zistíme odčítaním výsledku od celku: {total} - {result} = {missing}."; } } - else if (config.MaxSum > 20 || config.MaxA > 20) // Grade 2 + else if (config.MaxSum > 20 || config.MaxA > 20) { known = _rand.Next(12, 50); missing = _rand.Next(8, 35); @@ -486,15 +564,17 @@ public class MathProblemGenerator : IMathProblemGenerator { result = known + missing; equation = _rand.Next(2) == 0 ? $"{known} + ❓ = {result}" : $"❓ + {known} = {result}"; + explanation = $"Neznáme číslo nájdeme odčítaním: {result} - {known} = {missing}."; } else { result = known; int total = known + missing; equation = $"{total} - ❓ = {result}"; + explanation = $"Neznáme číslo zistíme odčítaním výsledku od celku: {total} - {result} = {missing}."; } } - else // Grade 1 + else { known = _rand.Next(3, 10); missing = _rand.Next(3, 10); @@ -502,12 +582,14 @@ public class MathProblemGenerator : IMathProblemGenerator { result = known + missing; equation = _rand.Next(2) == 0 ? $"{known} + ❓ = {result}" : $"❓ + {known} = {result}"; + explanation = $"Neznáme číslo nájdeme odčítaním: {result} - {known} = {missing}."; } else { result = known; int total = known + missing; equation = $"{total} - ❓ = {result}"; + explanation = $"Neznáme číslo zistíme odčítaním: {total} - {result} = {missing}."; } } @@ -518,6 +600,7 @@ public class MathProblemGenerator : IMathProblemGenerator DisplayB = "", CorrectAnswer = missing.ToString(), QuestionText = $"Doplň chýbajúce číslo ❓:\n{equation}", + Explanation = explanation, InputType = "MultipleChoice", Choices = GenerateNumericChoices(missing, 1, 1000), IsDefenseTest = true @@ -529,7 +612,7 @@ public class MathProblemGenerator : IMathProblemGenerator int a, b, c, result; string expr; - if (config.MaxSum > 100 || config.MaxA > 100) // Grade 3 + if (config.MaxSum > 100 || config.MaxA > 100) { a = _rand.Next(15, 45) * 10; b = _rand.Next(10, 30) * 10; @@ -537,7 +620,7 @@ public class MathProblemGenerator : IMathProblemGenerator result = a + b - c; expr = $"{a} + {b} - {c}"; } - else if (config.MaxSum > 20 || config.MaxA > 20) // Grade 2 + else if (config.MaxSum > 20 || config.MaxA > 20) { a = _rand.Next(15, 50); b = _rand.Next(10, 30); @@ -545,7 +628,7 @@ public class MathProblemGenerator : IMathProblemGenerator result = a + b - c; expr = $"{a} + {b} - {c}"; } - else // Grade 1 + else { a = _rand.Next(4, 9); b = _rand.Next(3, 8); @@ -561,6 +644,7 @@ public class MathProblemGenerator : IMathProblemGenerator DisplayB = "", CorrectAnswer = result.ToString(), QuestionText = $"Vypočítaj trojčlenný reťazec:\n{expr} = ?", + Explanation = $"Počítaj po krokoch zľava doprava: najprv {a} + {b} = {a + b}, a potom {a + b} - {c} = {result}.", InputType = "MultipleChoice", Choices = GenerateNumericChoices(result, 0, 1000), IsDefenseTest = true @@ -585,6 +669,9 @@ public class MathProblemGenerator : IMathProblemGenerator string equation = isDiv ? $"{product} ÷ ❓ = {factorA}" : (_rand.Next(2) == 0 ? $"{factorA} × ❓ = {product}" : $"❓ × {factorA} = {product}"); + string explanation = isDiv + ? $"Neznámeho deliteľa nájdeme delením: {product} ÷ {factorA} = {missing}." + : $"Neznámeho činiteľa nájdeme delením: {product} ÷ {factorA} = {missing}."; return new MathProblem { @@ -593,6 +680,7 @@ public class MathProblemGenerator : IMathProblemGenerator DisplayB = "", CorrectAnswer = missing.ToString(), QuestionText = $"Nájdi neznáme číslo ❓:\n{equation}", + Explanation = explanation, InputType = "MultipleChoice", Choices = GenerateNumericChoices(missing, 1, 10), IsDefenseTest = true @@ -617,6 +705,7 @@ public class MathProblemGenerator : IMathProblemGenerator DisplayB = "", CorrectAnswer = result.ToString(), QuestionText = $"Kombinovaný výpočet (najprv násob!):\n{expr} = ?", + Explanation = $"Násobenie má vždy prednosť! Najprv: {f1} × {f2} = {prod}, a potom: {prod} {(isSub ? "-" : "+")} {add} = {result}.", InputType = "MultipleChoice", Choices = GenerateNumericChoices(result, 1, 100), IsDefenseTest = true @@ -627,6 +716,7 @@ public class MathProblemGenerator : IMathProblemGenerator { bool isCorrect = _rand.Next(2) == 0; string equation; + string explanation; if (isMult) { @@ -636,6 +726,9 @@ public class MathProblemGenerator : IMathProblemGenerator int displayed = isCorrect ? prod : (prod + (_rand.Next(2) == 0 ? _rand.Next(1, 4) : -_rand.Next(1, 4))); if (displayed <= 0) displayed = prod + 2; equation = $"{a} × {b} = {displayed}"; + explanation = isCorrect + ? $"Rovnica {equation} je správna, pretože {a} × {b} sa skutočne rovná {prod}." + : $"Rovnica {equation} je nesprávna! Správny výsledok {a} × {b} je {prod} (nie {displayed})."; } else { @@ -646,6 +739,9 @@ public class MathProblemGenerator : IMathProblemGenerator int displayed = isCorrect ? sum : (sum + offset); if (displayed <= 0) displayed = sum + 2; equation = $"{a} + {b} = {displayed}"; + explanation = isCorrect + ? $"Rovnica {equation} je správna, pretože {a} + {b} sa skutočne rovná {sum}." + : $"Rovnica {equation} je nesprávna! Správny výsledok {a} + {b} je {sum} (nie {displayed})."; } return new MathProblem @@ -655,6 +751,7 @@ public class MathProblemGenerator : IMathProblemGenerator DisplayB = "", CorrectAnswer = isCorrect ? "ÁNO" : "NIE", QuestionText = $"Je táto rovnica správna?\n{equation}", + Explanation = explanation, InputType = "MultipleChoice", Choices = new List { "ÁNO", "NIE" }, IsDefenseTest = true diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_attack_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_attack_p1.png new file mode 100644 index 0000000..910fa66 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_attack_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_attack_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_attack_p2.png new file mode 100644 index 0000000..f96ebdd Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_attack_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_attack_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_attack_p3.png new file mode 100644 index 0000000..db826ec Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_attack_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_attack_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_attack_p4.png new file mode 100644 index 0000000..83f67af Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_attack_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_defend_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_defend_p1.png new file mode 100644 index 0000000..3729b14 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_defend_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_defend_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_defend_p2.png new file mode 100644 index 0000000..5ada518 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_defend_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_defend_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_defend_p3.png new file mode 100644 index 0000000..b4be0ce Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_defend_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_defend_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_defend_p4.png new file mode 100644 index 0000000..7ee6ff9 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_defend_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_hurt_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_hurt_p1.png new file mode 100644 index 0000000..a745d86 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_hurt_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_hurt_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_hurt_p2.png new file mode 100644 index 0000000..7c9443a Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_hurt_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_hurt_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_hurt_p3.png new file mode 100644 index 0000000..dfe1023 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_hurt_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_hurt_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_hurt_p4.png new file mode 100644 index 0000000..a239944 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_hurt_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_idle_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_idle_p1.png new file mode 100644 index 0000000..81fa62a Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_idle_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_idle_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_idle_p2.png new file mode 100644 index 0000000..fe8d072 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_idle_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_idle_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_idle_p3.png new file mode 100644 index 0000000..7205551 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_idle_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_idle_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_idle_p4.png new file mode 100644 index 0000000..ccce3c7 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/bat_idle_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_attack_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_attack_p1.png new file mode 100644 index 0000000..9d76184 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_attack_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_attack_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_attack_p2.png new file mode 100644 index 0000000..28734f6 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_attack_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_attack_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_attack_p3.png new file mode 100644 index 0000000..78d24b7 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_attack_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_attack_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_attack_p4.png new file mode 100644 index 0000000..a437f39 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_attack_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_defend_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_defend_p1.png new file mode 100644 index 0000000..025b3ec Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_defend_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_defend_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_defend_p2.png new file mode 100644 index 0000000..b352126 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_defend_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_defend_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_defend_p3.png new file mode 100644 index 0000000..ece2577 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_defend_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_defend_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_defend_p4.png new file mode 100644 index 0000000..09d0639 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_defend_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_hurt_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_hurt_p1.png new file mode 100644 index 0000000..8dc4eb4 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_hurt_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_hurt_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_hurt_p2.png new file mode 100644 index 0000000..323e1ea Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_hurt_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_hurt_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_hurt_p3.png new file mode 100644 index 0000000..5140d62 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_hurt_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_hurt_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_hurt_p4.png new file mode 100644 index 0000000..b882fef Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_hurt_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_idle_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_idle_p1.png new file mode 100644 index 0000000..f29ba2d Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_idle_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_idle_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_idle_p2.png new file mode 100644 index 0000000..3674c2d Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_idle_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_idle_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_idle_p3.png new file mode 100644 index 0000000..ff108bd Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_idle_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_idle_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_idle_p4.png new file mode 100644 index 0000000..5200e91 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/frogman_idle_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_attack_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_attack_p1.png new file mode 100644 index 0000000..68c73b3 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_attack_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_attack_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_attack_p2.png new file mode 100644 index 0000000..dde2ab5 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_attack_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_attack_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_attack_p3.png new file mode 100644 index 0000000..e6fa9c5 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_attack_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_attack_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_attack_p4.png new file mode 100644 index 0000000..cf352b4 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_attack_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_defend_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_defend_p1.png new file mode 100644 index 0000000..7a53592 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_defend_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_defend_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_defend_p2.png new file mode 100644 index 0000000..bc2ea98 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_defend_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_defend_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_defend_p3.png new file mode 100644 index 0000000..d9462e1 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_defend_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_defend_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_defend_p4.png new file mode 100644 index 0000000..1ee1fba Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_defend_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_hurt_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_hurt_p1.png new file mode 100644 index 0000000..8bac93e Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_hurt_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_hurt_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_hurt_p2.png new file mode 100644 index 0000000..28deee2 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_hurt_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_hurt_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_hurt_p3.png new file mode 100644 index 0000000..bd3b0af Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_hurt_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_hurt_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_hurt_p4.png new file mode 100644 index 0000000..39e034a Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_hurt_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_idle_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_idle_p1.png new file mode 100644 index 0000000..17b6279 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_idle_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_idle_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_idle_p2.png new file mode 100644 index 0000000..372e316 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_idle_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_idle_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_idle_p3.png new file mode 100644 index 0000000..7308835 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_idle_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_idle_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_idle_p4.png new file mode 100644 index 0000000..3a43637 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/kraken_idle_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_attack_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_attack_p1.png new file mode 100644 index 0000000..061e31c Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_attack_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_attack_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_attack_p2.png new file mode 100644 index 0000000..56c4dbe Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_attack_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_attack_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_attack_p3.png new file mode 100644 index 0000000..7aae9df Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_attack_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_attack_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_attack_p4.png new file mode 100644 index 0000000..6d2811e Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_attack_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_defend_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_defend_p1.png new file mode 100644 index 0000000..5763550 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_defend_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_defend_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_defend_p2.png new file mode 100644 index 0000000..764e08a Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_defend_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_defend_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_defend_p3.png new file mode 100644 index 0000000..f58ab19 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_defend_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_defend_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_defend_p4.png new file mode 100644 index 0000000..b0c84e3 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_defend_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_hurt_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_hurt_p1.png new file mode 100644 index 0000000..d005189 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_hurt_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_hurt_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_hurt_p2.png new file mode 100644 index 0000000..4f94fb2 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_hurt_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_hurt_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_hurt_p3.png new file mode 100644 index 0000000..44c15f7 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_hurt_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_hurt_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_hurt_p4.png new file mode 100644 index 0000000..82c6de2 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_hurt_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_idle_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_idle_p1.png new file mode 100644 index 0000000..4053e27 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_idle_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_idle_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_idle_p2.png new file mode 100644 index 0000000..5bf4b7f Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_idle_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_idle_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_idle_p3.png new file mode 100644 index 0000000..f175ad1 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_idle_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_idle_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_idle_p4.png new file mode 100644 index 0000000..eb517fe Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/mushroom_idle_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_attack_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_attack_p1.png new file mode 100644 index 0000000..85247e5 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_attack_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_attack_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_attack_p2.png new file mode 100644 index 0000000..12bc947 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_attack_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_attack_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_attack_p3.png new file mode 100644 index 0000000..817e6b7 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_attack_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_attack_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_attack_p4.png new file mode 100644 index 0000000..1958350 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_attack_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_defend_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_defend_p1.png new file mode 100644 index 0000000..771484c Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_defend_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_defend_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_defend_p2.png new file mode 100644 index 0000000..9f60d59 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_defend_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_defend_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_defend_p3.png new file mode 100644 index 0000000..ebd508d Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_defend_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_defend_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_defend_p4.png new file mode 100644 index 0000000..ce57cad Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_defend_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_hurt_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_hurt_p1.png new file mode 100644 index 0000000..1d0a1bd Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_hurt_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_hurt_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_hurt_p2.png new file mode 100644 index 0000000..24a7837 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_hurt_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_hurt_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_hurt_p3.png new file mode 100644 index 0000000..86f2043 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_hurt_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_hurt_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_hurt_p4.png new file mode 100644 index 0000000..c21ba61 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_hurt_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_idle_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_idle_p1.png new file mode 100644 index 0000000..5a22e48 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_idle_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_idle_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_idle_p2.png new file mode 100644 index 0000000..53d41ab Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_idle_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_idle_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_idle_p3.png new file mode 100644 index 0000000..9181dc5 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_idle_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_idle_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_idle_p4.png new file mode 100644 index 0000000..a05bc82 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/treant_idle_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_attack_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_attack_p1.png new file mode 100644 index 0000000..5b61ccd Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_attack_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_attack_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_attack_p2.png new file mode 100644 index 0000000..070fab5 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_attack_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_attack_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_attack_p3.png new file mode 100644 index 0000000..342f358 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_attack_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_attack_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_attack_p4.png new file mode 100644 index 0000000..32588fe Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_attack_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_defend_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_defend_p1.png new file mode 100644 index 0000000..c017c5b Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_defend_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_defend_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_defend_p2.png new file mode 100644 index 0000000..dab14e4 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_defend_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_defend_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_defend_p3.png new file mode 100644 index 0000000..1f08bfd Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_defend_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_defend_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_defend_p4.png new file mode 100644 index 0000000..886afc4 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_defend_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_hurt_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_hurt_p1.png new file mode 100644 index 0000000..4d5293c Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_hurt_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_hurt_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_hurt_p2.png new file mode 100644 index 0000000..758cea5 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_hurt_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_hurt_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_hurt_p3.png new file mode 100644 index 0000000..6b4fbf4 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_hurt_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_hurt_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_hurt_p4.png new file mode 100644 index 0000000..1918698 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_hurt_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_idle_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_idle_p1.png new file mode 100644 index 0000000..48b6370 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_idle_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_idle_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_idle_p2.png new file mode 100644 index 0000000..82d41bd Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_idle_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_idle_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_idle_p3.png new file mode 100644 index 0000000..d5acf4c Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_idle_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_idle_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_idle_p4.png new file mode 100644 index 0000000..7ccc4bd Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/troll_idle_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_attack_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_attack_p1.png new file mode 100644 index 0000000..ce5ae54 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_attack_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_attack_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_attack_p2.png new file mode 100644 index 0000000..063ff2d Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_attack_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_attack_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_attack_p3.png new file mode 100644 index 0000000..cf68a57 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_attack_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_attack_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_attack_p4.png new file mode 100644 index 0000000..c97bc9e Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_attack_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_defend_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_defend_p1.png new file mode 100644 index 0000000..51366b2 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_defend_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_defend_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_defend_p2.png new file mode 100644 index 0000000..44afde9 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_defend_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_defend_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_defend_p3.png new file mode 100644 index 0000000..c3d623b Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_defend_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_defend_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_defend_p4.png new file mode 100644 index 0000000..0ddfeed Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_defend_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_hurt_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_hurt_p1.png new file mode 100644 index 0000000..0bb0c3f Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_hurt_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_hurt_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_hurt_p2.png new file mode 100644 index 0000000..c29255e Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_hurt_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_hurt_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_hurt_p3.png new file mode 100644 index 0000000..f87f03b Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_hurt_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_hurt_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_hurt_p4.png new file mode 100644 index 0000000..e1409cf Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_hurt_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_idle_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_idle_p1.png new file mode 100644 index 0000000..e5f4ae6 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_idle_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_idle_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_idle_p2.png new file mode 100644 index 0000000..963e51c Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_idle_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_idle_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_idle_p3.png new file mode 100644 index 0000000..1e7faab Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_idle_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_idle_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_idle_p4.png new file mode 100644 index 0000000..59884cc Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/turtle_idle_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_attack_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_attack_p1.png new file mode 100644 index 0000000..2b1d994 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_attack_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_attack_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_attack_p2.png new file mode 100644 index 0000000..179a20d Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_attack_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_attack_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_attack_p3.png new file mode 100644 index 0000000..2e24687 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_attack_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_attack_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_attack_p4.png new file mode 100644 index 0000000..2fcf487 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_attack_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_defend_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_defend_p1.png new file mode 100644 index 0000000..d1ee39c Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_defend_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_defend_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_defend_p2.png new file mode 100644 index 0000000..cb074ef Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_defend_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_defend_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_defend_p3.png new file mode 100644 index 0000000..70fc2fd Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_defend_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_defend_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_defend_p4.png new file mode 100644 index 0000000..951d176 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_defend_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_hurt_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_hurt_p1.png new file mode 100644 index 0000000..95e1071 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_hurt_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_hurt_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_hurt_p2.png new file mode 100644 index 0000000..b28ad31 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_hurt_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_hurt_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_hurt_p3.png new file mode 100644 index 0000000..6add81b Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_hurt_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_hurt_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_hurt_p4.png new file mode 100644 index 0000000..0b2a5f1 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_hurt_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_idle_p1.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_idle_p1.png new file mode 100644 index 0000000..9be8ea9 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_idle_p1.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_idle_p2.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_idle_p2.png new file mode 100644 index 0000000..c063576 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_idle_p2.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_idle_p3.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_idle_p3.png new file mode 100644 index 0000000..c7cc693 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_idle_p3.png differ diff --git a/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_idle_p4.png b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_idle_p4.png new file mode 100644 index 0000000..dfae071 Binary files /dev/null and b/src/CiselnaVyprava/wwwroot/assets/images/enemies/wolf_idle_p4.png differ diff --git a/src/CiselnaVyprava/wwwroot/css/app.css b/src/CiselnaVyprava/wwwroot/css/app.css index 78e5517..75e22dd 100644 --- a/src/CiselnaVyprava/wwwroot/css/app.css +++ b/src/CiselnaVyprava/wwwroot/css/app.css @@ -1,5 +1,5 @@ :root { - --font-main: "Fredoka", "Nunito", cursive, sans-serif; + --font-main: "Comfortaa", "Nunito", cursive, sans-serif; --color-parchment: #fcf6e8; --color-parchment-border: #8b5a2b; --color-gold: #f39c12; @@ -1512,18 +1512,42 @@ html, body { flex: 0 0 auto; } -.equation-box { margin-bottom: clamp(4px, 0.8vh, 8px); } +.equation-box { + margin-bottom: clamp(4px, 0.8vh, 8px); + min-height: clamp(48px, 7.5vh, 62px); + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.equation-title { + font-size: clamp(0.72rem, 1.4vh, 0.85rem); + font-weight: 700; + margin-bottom: 2px; +} + .equation-text { - font-size: clamp(1.4rem, 3.6vh, 2.2rem); + font-size: clamp(1.4rem, 3.4vh, 2.1rem); color: #2c3e50; - margin: 2px 0; + margin: 0; letter-spacing: 1.5px; white-space: pre-line; - line-height: 1.25; + line-height: 1.2; +} + +/* INPUT ACTION ZONE - STABLE HEIGHT FOR BOTH KEYPAD AND CHOICES */ +.input-action-zone { + min-height: clamp(185px, 28vh, 220px); + display: flex; + justify-content: center; + align-items: center; + width: 100%; } /* KEYPAD */ .keypad-container { + width: 100%; max-width: 260px; margin: 0 auto; } @@ -1564,29 +1588,45 @@ html, body { .key-btn.action-key.backspace { background: #fadbd8; border-color: #e74c3c; box-shadow: 0 3px 0 #cb4335; } .key-btn.action-key.submit { background: #d4efdf; border-color: #27ae60; box-shadow: 0 3px 0 #1e8449; } -/* CHOICES */ +/* CHOICE SELECTOR (DEFENSE & MULTIPLE CHOICE) */ +.choice-selector-container { + width: 100%; + max-width: 440px; + margin: 0 auto; + display: flex; + justify-content: center; + align-items: center; + height: 100%; + min-height: clamp(185px, 28vh, 220px); +} + .choices-grid { display: grid; - grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); - gap: 10px; - max-width: 440px; + grid-template-columns: repeat(2, 1fr); + gap: clamp(10px, 1.6vh, 14px); + width: 100%; margin: 0 auto; } .choice-btn { background: white; border: 3px solid var(--color-gold); - border-radius: 12px; - padding: clamp(8px, 1.8vh, 14px) 0; - font-size: clamp(1.2rem, 2.8vh, 1.6rem); + border-radius: 14px; + padding: clamp(12px, 2.4vh, 20px) clamp(8px, 1.5vw, 16px); + font-size: clamp(1.25rem, 2.8vh, 1.65rem); font-weight: 700; font-family: var(--font-main); cursor: pointer; - box-shadow: 0 4px 0 var(--color-gold-dark); + box-shadow: 0 5px 0 var(--color-gold-dark); + display: flex; + align-items: center; + justify-content: center; + min-height: clamp(52px, 8.5vh, 68px); + transition: transform 0.1s ease, background-color 0.15s ease; } .choice-btn:hover { background: #fef9e7; } -.choice-btn:active { transform: translateY(2px); box-shadow: 0 2px 0 var(--color-gold-dark); } +.choice-btn:active { transform: translateY(3px); box-shadow: 0 2px 0 var(--color-gold-dark); } /* VICTORY / DEFEAT CARDS */ /* ======================================================== @@ -1837,7 +1877,7 @@ html, body { } /* ======================================================== - FAIRYTALE LEVEL TRANSITION SCREEN (CLOUDS & MARCHING) + FAIRYTALE LEVEL TRANSITION SCREEN (INTERACTIVE FACE-OFF) ======================================================== */ .transition-screen-overlay { position: fixed; @@ -1845,68 +1885,207 @@ html, body { left: 0; width: 100vw; height: 100vh; - background: rgba(26, 37, 47, 0.85); + background: rgba(26, 37, 47, 0.88); backdrop-filter: blur(8px); display: flex; justify-content: center; align-items: center; z-index: 10000; + padding: clamp(8px, 1.5vh, 16px); } .transition-parchment-box { background: var(--color-parchment); border: 4px solid var(--color-gold); border-radius: 20px; - padding: clamp(20px, 4vh, 32px) clamp(24px, 4vw, 44px); + padding: clamp(12px, 2.5vh, 22px) clamp(16px, 3vw, 28px); text-align: center; - box-shadow: 0 12px 36px rgba(0,0,0,0.5); - max-width: 440px; - width: 90%; + box-shadow: 0 14px 40px rgba(0,0,0,0.6); + max-width: 560px; + width: 95%; + max-height: 94vh; display: flex; flex-direction: column; align-items: center; + gap: clamp(8px, 1.5vh, 14px); + overflow-y: auto; } -.transition-hero-marching { - width: clamp(80px, 16vh, 120px); - height: clamp(80px, 16vh, 120px); +.transition-header { display: flex; - justify-content: center; + flex-direction: column; align-items: center; - margin-bottom: 6px; - position: relative; + gap: 4px; } -.marching-hero-img { - max-height: 100%; - max-width: 100%; - object-fit: contain; - filter: drop-shadow(0 6px 12px rgba(0,0,0,0.3)); +.transition-badge { + background: var(--color-gold); + color: white; + font-size: clamp(0.7rem, 1.3vh, 0.8rem); + font-weight: 800; + padding: 2px 10px; + border-radius: 12px; + text-transform: uppercase; + letter-spacing: 0.5px; + box-shadow: 0 2px 4px rgba(0,0,0,0.15); } .transition-title { - font-size: clamp(1.2rem, 2.6vh, 1.5rem); + font-size: clamp(1.2rem, 2.6vh, 1.6rem); color: #8b5a2b; - margin: 4px 0 2px 0; + margin: 0; font-weight: 800; + line-height: 1.2; } -.transition-target { - font-size: clamp(0.9rem, 1.8vh, 1.05rem); - color: #2c3e50; - font-weight: 700; - margin: 2px 0 10px 0; -} - -.transition-sparkles { +.transition-faceoff-stage { display: flex; - gap: 12px; - font-size: 1.4rem; + align-items: center; + justify-content: center; + gap: clamp(8px, 2vw, 16px); + width: 100%; } -.sparkle { animation: bounce 0.6s infinite alternate; } -.sparkle:nth-child(2) { animation-delay: 0.2s; } -.sparkle:nth-child(3) { animation-delay: 0.4s; } +.faceoff-card { + flex: 1 1 0; + background: white; + border: 3px solid var(--color-parchment-border); + border-radius: 14px; + padding: clamp(8px, 1.5vh, 12px); + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + gap: 4px; + box-shadow: 0 4px 10px rgba(0,0,0,0.06); +} + +.faceoff-card.hero-side { + border-color: #27ae60; +} + +.faceoff-card.enemy-side { + border-color: #e74c3c; +} + +.faceoff-avatar-pedestal { + width: 100%; + height: clamp(80px, 15vh, 115px); + display: flex; + justify-content: center; + align-items: center; + background: radial-gradient(circle, rgba(243, 156, 18, 0.15) 0%, rgba(255, 255, 255, 0) 70%); +} + +.faceoff-avatar-img { + max-height: 100%; + max-width: 100%; + object-fit: contain; + filter: drop-shadow(0 6px 10px rgba(0,0,0,0.25)); +} + +.faceoff-name { + font-weight: 800; + font-size: clamp(0.85rem, 1.8vh, 1.05rem); + color: #2c3e50; + line-height: 1.1; +} + +.faceoff-role { + font-size: clamp(0.68rem, 1.3vh, 0.78rem); + color: #27ae60; + font-weight: 700; +} + +.faceoff-hp-badge { + background: #fadbd8; + color: #c0392b; + font-size: clamp(0.7rem, 1.3vh, 0.8rem); + font-weight: 800; + padding: 2px 8px; + border-radius: 6px; + border: 1px solid #f5b7b1; +} + +.faceoff-vs-pill { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + background: #34495e; + color: #f1c40f; + border: 3px solid var(--color-gold); + border-radius: 50%; + width: clamp(40px, 7vh, 52px); + height: clamp(40px, 7vh, 52px); + box-shadow: 0 4px 10px rgba(0,0,0,0.3); + flex: 0 0 auto; + animation: vsPulse 1.5s infinite ease-in-out alternate; +} + +.vs-text { + font-weight: 900; + font-size: clamp(0.75rem, 1.5vh, 0.9rem); + line-height: 1; +} + +.vs-swords { + font-size: clamp(0.65rem, 1.2vh, 0.8rem); + line-height: 1; +} + +@keyframes vsPulse { + 0% { transform: scale(0.95); } + 100% { transform: scale(1.08); box-shadow: 0 0 14px rgba(243, 156, 18, 0.6); } +} + +.transition-details-card { + background: #fdfefe; + border: 1.5px dashed var(--color-gold); + border-radius: 10px; + padding: clamp(6px, 1.2vh, 10px) 14px; + width: 100%; +} + +.transition-math-info { + margin: 0; + font-size: clamp(0.78rem, 1.5vh, 0.9rem); + color: #34495e; + line-height: 1.3; +} + +.transition-action-buttons { + display: flex; + flex-direction: column; + gap: 8px; + width: 100%; + margin-top: 2px; +} + +.btn-transition-start { + width: 100%; + background: linear-gradient(180deg, #2ecc71 0%, #27ae60 100%); + color: white; + font-size: clamp(0.95rem, 2.2vh, 1.2rem); + font-weight: 800; + padding: clamp(8px, 1.8vh, 14px); + border: none; + border-radius: 12px; + cursor: pointer; + box-shadow: 0 4px 0 #1e8449, 0 6px 14px rgba(39, 174, 96, 0.4); + transition: all 0.15s ease; +} + +.btn-transition-start:hover { + transform: translateY(-2px); + box-shadow: 0 6px 0 #1e8449, 0 8px 18px rgba(39, 174, 96, 0.5); + background: linear-gradient(180deg, #32d67a 0%, #2ecc71 100%); +} + +.btn-transition-start:active { + transform: translateY(2px); + box-shadow: 0 2px 0 #1e8449; +} /* ANIMATION KEYFRAMES */ @keyframes victoryModalPop { @@ -2046,3 +2225,217 @@ html, body { #blazor-error-ui .reload { color: #1e8449; margin-left: 1rem; text-decoration: underline; } #blazor-error-ui .dismiss { cursor: pointer; position: absolute; right: 0.75rem; top: 0.5rem; } + +/* ======================================================== + EDUCATIONAL PAUSE & EXPLANATION MODAL (ON INCORRECT ANSWER) + ======================================================== */ +.explanation-modal-overlay { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + background: rgba(15, 23, 42, 0.78); + backdrop-filter: blur(8px); + display: flex; + justify-content: center; + align-items: center; + z-index: 10000; + padding: clamp(10px, 2.5vh, 24px); +} + +.explanation-parchment-box { + background: linear-gradient(180deg, #fffdf8 0%, #f7edd7 100%); + border: 4px solid var(--color-parchment-border); + border-radius: 22px; + box-shadow: 0 16px 40px rgba(0, 0, 0, 0.55), 0 0 0 6px rgba(212, 163, 89, 0.35); + padding: clamp(14px, 2.2vh, 22px) clamp(16px, 2.5vw, 28px); + width: 100%; + max-width: 580px; + max-height: 94vh; + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + position: relative; + overflow-y: auto; + scrollbar-width: thin; +} + +.explanation-header { + display: flex; + flex-direction: column; + align-items: center; + gap: 4px; + margin-bottom: clamp(8px, 1.4vh, 14px); +} + +.explanation-owl-icon { + font-size: clamp(2rem, 4.2vh, 2.8rem); + filter: drop-shadow(0 3px 6px rgba(0,0,0,0.25)); + animation: bounce 1.8s infinite ease-in-out alternate; +} + +.explanation-badge { + background: #795548; + color: #fef5e7; + font-size: clamp(0.7rem, 1.4vh, 0.82rem); + font-weight: 800; + letter-spacing: 1px; + text-transform: uppercase; + padding: 3px 12px; + border-radius: 12px; + border: 1px solid #5d4037; +} + +.explanation-title { + font-size: clamp(1.25rem, 2.8vh, 1.65rem); + color: #8b3a2b; + margin: 2px 0 0 0; + font-weight: 800; + text-shadow: 1px 1px 0 rgba(255,255,255,0.8); +} + +.explanation-body { + width: 100%; + display: flex; + flex-direction: column; + gap: clamp(8px, 1.5vh, 14px); + margin-bottom: clamp(10px, 1.8vh, 16px); +} + +.explanation-equation-card { + background: #ffffff; + border: 2px solid #e2d4be; + border-radius: 14px; + padding: clamp(8px, 1.4vh, 12px) clamp(10px, 1.8vw, 16px); + box-shadow: 0 4px 10px rgba(0,0,0,0.06); + display: flex; + flex-direction: column; + gap: 8px; +} + +.equation-question-row { + display: flex; + align-items: center; + justify-content: center; + gap: 8px; +} + +.equation-question-row .equation-label { + font-weight: 700; + color: #6d4c41; + font-size: clamp(0.9rem, 1.8vh, 1.05rem); +} + +.explanation-equation-card .equation-text { + font-size: clamp(1.15rem, 2.5vh, 1.45rem); + font-weight: 800; + color: #2c3e50; + margin: 0; +} + +.equation-answers-row { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 10px; +} + +.answer-box { + border-radius: 10px; + padding: clamp(6px, 1.2vh, 10px); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 2px; +} + +.answer-box.user-answer { + background: #fde8e8; + border: 2px solid #f87171; + color: #991b1b; +} + +.answer-box.correct-answer { + background: #e6f9ed; + border: 2px solid #34d399; + color: #065f46; +} + +.answer-box .ans-label { + font-size: clamp(0.7rem, 1.3vh, 0.8rem); + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.5px; + opacity: 0.9; +} + +.answer-box .ans-val { + font-size: clamp(1rem, 2.2vh, 1.3rem); + font-weight: 800; +} + +.explanation-step-card { + background: #fffdf5; + border: 2px dashed #d4a359; + border-radius: 14px; + padding: clamp(8px, 1.6vh, 14px) clamp(10px, 2vw, 16px); + text-align: left; + display: flex; + flex-direction: column; + gap: 4px; +} + +.step-card-header { + display: flex; + align-items: center; + gap: 6px; + color: #795548; + font-size: clamp(0.85rem, 1.7vh, 0.95rem); +} + +.step-explanation-text { + margin: 0; + color: #2d3748; + font-size: clamp(0.88rem, 1.8vh, 1.05rem); + line-height: 1.45; + font-weight: 600; + background: rgba(254, 243, 199, 0.45); + padding: clamp(6px, 1.2vh, 10px) clamp(8px, 1.5vw, 12px); + border-radius: 8px; + border-left: 4px solid #f59e0b; +} + +.explanation-actions { + width: 100%; + display: flex; + justify-content: center; +} + +.btn-explanation-continue { + background: linear-gradient(135deg, #10b981 0%, #059669 100%); + color: #ffffff; + border: 3px solid #047857; + border-radius: 16px; + font-size: clamp(0.95rem, 2.2vh, 1.2rem); + font-weight: 800; + padding: clamp(10px, 1.8vh, 14px) clamp(18px, 3vw, 28px); + cursor: pointer; + box-shadow: 0 6px 0 #065f46, 0 8px 16px rgba(16, 185, 129, 0.35); + transition: all 0.15s ease; + width: 100%; + max-width: 420px; +} + +.btn-explanation-continue:hover { + transform: translateY(-2px); + box-shadow: 0 8px 0 #065f46, 0 12px 20px rgba(16, 185, 129, 0.45); + background: linear-gradient(135deg, #34d399 0%, #10b981 100%); +} + +.btn-explanation-continue:active { + transform: translateY(3px); + box-shadow: 0 2px 0 #065f46; +} + diff --git a/src/CiselnaVyprava/wwwroot/data/game-config.json b/src/CiselnaVyprava/wwwroot/data/game-config.json index 0a79a25..37a8440 100644 --- a/src/CiselnaVyprava/wwwroot/data/game-config.json +++ b/src/CiselnaVyprava/wwwroot/data/game-config.json @@ -1,10 +1,10 @@ { "battle": { - "criticalTimeSeconds": 3.0, - "standardTimeSeconds": 6.0, + "criticalTimeSeconds": 4.0, + "standardTimeSeconds": 10.0, "criticalDamageMultiplier": 1.5, "weakDamageMultiplier": 0.5, - "defenseTestDurationSeconds": 5.0, + "defenseTestDurationSeconds": 16.0, "defaultPlayerHp": 5, "comboStreakBonusDmg": 1 }, diff --git a/src/CiselnaVyprava/wwwroot/data/worlds-grade1.json b/src/CiselnaVyprava/wwwroot/data/worlds-grade1.json index 65f948b..5bfec50 100644 --- a/src/CiselnaVyprava/wwwroot/data/worlds-grade1.json +++ b/src/CiselnaVyprava/wwwroot/data/worlds-grade1.json @@ -10,26 +10,26 @@ "id": "1-1-1", "levelNumber": 1, "name": "Lúčny Škriatok", - "enemy": { "id": "meadow_goblin", "name": "Lúčny Škriatok", "maxHp": 25, "attackPower": 1, "assetFolder": "assets/images/enemies/goblin" }, + "enemy": { "id": "meadow_goblin", "name": "Lúčny Škriatok", "maxHp": 32, "attackPower": 1, "assetFolder": "assets/images/enemies/goblin" }, "mathConfig": { "operations": ["+"], "minA": 1, "maxA": 5, "minB": 1, "maxB": 5, "maxSum": 10, "allowCarryOver": false, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 3 + "requiredCorrectAnswers": 4 }, { "id": "1-1-2", "levelNumber": 2, - "name": "Zvedavý Slizík", - "enemy": { "id": "curious_slime", "name": "Zvedavý Slizík", "maxHp": 32, "attackPower": 1, "assetFolder": "assets/images/enemies/slime" }, + "name": "Kvetinový Slizík", + "enemy": { "id": "flower_slime", "name": "Kvetinový Slizík", "maxHp": 42, "attackPower": 1, "assetFolder": "assets/images/enemies/slime" }, "mathConfig": { "operations": ["+", "-"], "minA": 2, "maxA": 10, "minB": 1, "maxB": 5, "maxSum": 10, "allowCarryOver": false, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 4 + "requiredCorrectAnswers": 5 }, { "id": "1-1-3", "levelNumber": 3, "name": "Lesný Medveď (Boss)", "isBoss": true, - "enemy": { "id": "gentle_bear_boss", "name": "Lesný Medveď", "maxHp": 50, "attackPower": 1, "assetFolder": "assets/images/enemies/bear" }, + "enemy": { "id": "gentle_bear_boss", "name": "Lesný Medveď", "maxHp": 65, "attackPower": 1, "assetFolder": "assets/images/enemies/bear" }, "mathConfig": { "operations": ["+", "-"], "minA": 3, "maxA": 10, "minB": 1, "maxB": 5, "maxSum": 10, "allowCarryOver": false, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 5 + "requiredCorrectAnswers": 6 } ] }, @@ -43,18 +43,18 @@ { "id": "1-2-1", "levelNumber": 1, - "name": "Lesný Škriatok", - "enemy": { "id": "forest_gnome", "name": "Lesný Škriatok", "maxHp": 38, "attackPower": 1, "assetFolder": "assets/images/enemies/goblin" }, + "name": "Hubový Mužík", + "enemy": { "id": "mushroom_sprite_g1", "name": "Hubový Mužík", "maxHp": 50, "attackPower": 1, "assetFolder": "assets/images/enemies/mushroom" }, "mathConfig": { "operations": ["+", "-"], "minA": 10, "maxA": 19, "minB": 1, "maxB": 5, "maxSum": 20, "allowCarryOver": false, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 4 + "requiredCorrectAnswers": 5 }, { "id": "1-2-2", "levelNumber": 2, - "name": "Kráľovský Sliz", - "enemy": { "id": "royal_slime_g1", "name": "Kráľovský Sliz", "maxHp": 45, "attackPower": 1, "assetFolder": "assets/images/enemies/slime" }, + "name": "Šibalský Vĺčik", + "enemy": { "id": "forest_wolf_g1", "name": "Šibalský Vĺčik", "maxHp": 60, "attackPower": 1, "assetFolder": "assets/images/enemies/wolf" }, "mathConfig": { "operations": ["+", "-"], "minA": 11, "maxA": 19, "minB": 1, "maxB": 8, "maxSum": 20, "allowCarryOver": false, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 5 + "requiredCorrectAnswers": 6 } ] }, @@ -68,19 +68,19 @@ { "id": "1-3-1", "levelNumber": 1, - "name": "Vodný Škriatok", - "enemy": { "id": "water_goblin_g1", "name": "Vodný Škriatok", "maxHp": 38, "attackPower": 1, "assetFolder": "assets/images/enemies/goblin" }, + "name": "Vodný Žabiak", + "enemy": { "id": "water_frog_g1", "name": "Vodný Žabiak", "maxHp": 50, "attackPower": 1, "assetFolder": "assets/images/enemies/frogman" }, "mathConfig": { "operations": ["<", ">", "="], "minA": 1, "maxA": 20, "minB": 1, "maxB": 20, "inputType": "MultipleChoice" }, - "requiredCorrectAnswers": 4 + "requiredCorrectAnswers": 5 }, { "id": "1-3-2", "levelNumber": 2, - "name": "Jazerný Golem (Boss)", + "name": "Pancierová Korytnačka (Boss)", "isBoss": true, - "enemy": { "id": "lake_golem_boss_g1", "name": "Jazerný Golem", "maxHp": 65, "attackPower": 1, "assetFolder": "assets/images/enemies/golem" }, + "enemy": { "id": "lake_turtle_boss_g1", "name": "Pancierová Korytnačka", "maxHp": 85, "attackPower": 1, "assetFolder": "assets/images/enemies/turtle" }, "mathConfig": { "operations": ["<", ">", "="], "minA": 5, "maxA": 20, "minB": 5, "maxB": 20, "inputType": "MultipleChoice" }, - "requiredCorrectAnswers": 6 + "requiredCorrectAnswers": 8 } ] }, @@ -94,10 +94,10 @@ { "id": "1-4-1", "levelNumber": 1, - "name": "Kamenný Golem", - "enemy": { "id": "stone_watcher_g1", "name": "Kamenný Golem", "maxHp": 45, "attackPower": 1, "assetFolder": "assets/images/enemies/golem" }, + "name": "Jaskynný Netopierik", + "enemy": { "id": "crystal_bat_g1", "name": "Jaskynný Netopierik", "maxHp": 60, "attackPower": 1, "assetFolder": "assets/images/enemies/bat" }, "mathConfig": { "operations": ["+", "-"], "minA": 10, "maxA": 50, "minB": 10, "maxB": 40, "maxSum": 100, "allowCarryOver": false, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 5 + "requiredCorrectAnswers": 6 } ] }, @@ -113,9 +113,9 @@ "levelNumber": 1, "name": "Kráľovský Drak (Veľký Boss)", "isBoss": true, - "enemy": { "id": "king_dragon_boss", "name": "Kráľovský Drak", "maxHp": 75, "attackPower": 1, "assetFolder": "assets/images/enemies/dragon" }, + "enemy": { "id": "king_dragon_boss", "name": "Kráľovský Drak", "maxHp": 100, "attackPower": 1, "assetFolder": "assets/images/enemies/dragon" }, "mathConfig": { "operations": ["+", "-"], "minA": 5, "maxA": 20, "minB": 1, "maxB": 10, "maxSum": 20, "allowCarryOver": false, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 7 + "requiredCorrectAnswers": 9 } ] } diff --git a/src/CiselnaVyprava/wwwroot/data/worlds-grade2.json b/src/CiselnaVyprava/wwwroot/data/worlds-grade2.json index 4b13599..5b7f175 100644 --- a/src/CiselnaVyprava/wwwroot/data/worlds-grade2.json +++ b/src/CiselnaVyprava/wwwroot/data/worlds-grade2.json @@ -13,7 +13,7 @@ "enemy": { "id": "goblin_apprentice", "name": "Škriatok Počtárik", - "maxHp": 38, + "maxHp": 50, "attackPower": 1, "assetFolder": "assets/images/enemies/goblin" }, @@ -27,16 +27,16 @@ "allowCarryOver": true, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 4 + "requiredCorrectAnswers": 5 }, { "id": "2-1-2", "levelNumber": 2, - "name": "Lesný Slizík", + "name": "Kvetinový Slizík", "enemy": { - "id": "forest_slime", - "name": "Lesný Slizík", - "maxHp": 50, + "id": "flower_slime_g2", + "name": "Kvetinový Slizík", + "maxHp": 65, "attackPower": 1, "assetFolder": "assets/images/enemies/slime" }, @@ -50,19 +50,19 @@ "allowCarryOver": true, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 5 + "requiredCorrectAnswers": 6 }, { "id": "2-1-3", "levelNumber": 3, - "name": "Golem Čísel (Boss)", + "name": "Lesný Medveď (Boss)", "isBoss": true, "enemy": { - "id": "stone_golem_boss", - "name": "Golem Čísel", - "maxHp": 75, + "id": "meadow_bear_boss", + "name": "Lesný Medveď", + "maxHp": 100, "attackPower": 1, - "assetFolder": "assets/images/enemies/golem" + "assetFolder": "assets/images/enemies/bear" }, "mathConfig": { "operations": ["+", "-"], @@ -74,7 +74,7 @@ "allowCarryOver": true, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 6 + "requiredCorrectAnswers": 8 } ] }, @@ -88,13 +88,13 @@ { "id": "2-2-1", "levelNumber": 1, - "name": "Lesný Goblin", + "name": "Hubový Mužík", "enemy": { - "id": "forest_goblin_comp", - "name": "Lesný Goblin", - "maxHp": 45, + "id": "mushroom_comp_g2", + "name": "Hubový Mužík", + "maxHp": 60, "attackPower": 1, - "assetFolder": "assets/images/enemies/goblin" + "assetFolder": "assets/images/enemies/mushroom" }, "mathConfig": { "operations": ["<", ">", "="], @@ -104,18 +104,18 @@ "maxB": 50, "inputType": "MultipleChoice" }, - "requiredCorrectAnswers": 5 + "requiredCorrectAnswers": 6 }, { "id": "2-2-2", "levelNumber": 2, - "name": "Slizký Strážca", + "name": "Šibalský Vĺčik", "enemy": { - "id": "slime_comp_watcher", - "name": "Slizký Strážca", - "maxHp": 50, + "id": "forest_wolf_comp_g2", + "name": "Šibalský Vĺčik", + "maxHp": 65, "attackPower": 1, - "assetFolder": "assets/images/enemies/slime" + "assetFolder": "assets/images/enemies/wolf" }, "mathConfig": { "operations": ["<", ">", "="], @@ -125,19 +125,19 @@ "maxB": 100, "inputType": "MultipleChoice" }, - "requiredCorrectAnswers": 5 + "requiredCorrectAnswers": 6 }, { "id": "2-2-3", "levelNumber": 3, - "name": "Lesný Medveď (Boss)", + "name": "Stromový Ent (Boss)", "isBoss": true, "enemy": { - "id": "forest_bear_comp_boss", - "name": "Lesný Medveď", - "maxHp": 70, + "id": "ancient_treant_boss_g2", + "name": "Stromový Ent", + "maxHp": 90, "attackPower": 1, - "assetFolder": "assets/images/enemies/bear" + "assetFolder": "assets/images/enemies/treant" }, "mathConfig": { "operations": ["<", ">", "="], @@ -147,7 +147,7 @@ "maxB": 100, "inputType": "MultipleChoice" }, - "requiredCorrectAnswers": 6 + "requiredCorrectAnswers": 8 } ] }, @@ -161,13 +161,13 @@ { "id": "2-3-1", "levelNumber": 1, - "name": "Riečny Goblin", + "name": "Vodný Žabiak", "enemy": { - "id": "river_goblin_easy", - "name": "Riečny Goblin", - "maxHp": 45, + "id": "river_frog_g2", + "name": "Vodný Žabiak", + "maxHp": 60, "attackPower": 1, - "assetFolder": "assets/images/enemies/goblin" + "assetFolder": "assets/images/enemies/frogman" }, "mathConfig": { "operations": ["+", "-"], @@ -179,18 +179,18 @@ "allowCarryOver": false, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 5 + "requiredCorrectAnswers": 6 }, { "id": "2-3-2", "levelNumber": 2, - "name": "Kvapkový Sliz", + "name": "Pancierová Korytnačka", "enemy": { - "id": "droplet_slime", - "name": "Kvapkový Sliz", - "maxHp": 55, + "id": "river_turtle_g2", + "name": "Pancierová Korytnačka", + "maxHp": 70, "attackPower": 1, - "assetFolder": "assets/images/enemies/slime" + "assetFolder": "assets/images/enemies/turtle" }, "mathConfig": { "operations": ["+", "-"], @@ -202,19 +202,19 @@ "allowCarryOver": false, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 5 + "requiredCorrectAnswers": 7 }, { "id": "2-3-3", "levelNumber": 3, - "name": "Balvanový Netvor (Boss)", + "name": "Jazerný Kraken (Boss)", "isBoss": true, "enemy": { - "id": "river_golem_boss", - "name": "Balvanový Netvor", - "maxHp": 80, + "id": "lake_kraken_boss_g2", + "name": "Jazerný Kraken", + "maxHp": 105, "attackPower": 1, - "assetFolder": "assets/images/enemies/golem" + "assetFolder": "assets/images/enemies/kraken" }, "mathConfig": { "operations": ["+", "-"], @@ -226,7 +226,7 @@ "allowCarryOver": false, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 7 + "requiredCorrectAnswers": 9 } ] }, @@ -240,13 +240,13 @@ { "id": "2-4-1", "levelNumber": 1, - "name": "Horský Goblin", + "name": "Jaskynný Netopierik", "enemy": { - "id": "mountain_goblin", - "name": "Horský Goblin", - "maxHp": 50, + "id": "cave_bat_g2", + "name": "Jaskynný Netopierik", + "maxHp": 65, "attackPower": 1, - "assetFolder": "assets/images/enemies/goblin" + "assetFolder": "assets/images/enemies/bat" }, "mathConfig": { "operations": ["+", "-"], @@ -258,18 +258,18 @@ "allowCarryOver": true, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 5 + "requiredCorrectAnswers": 6 }, { "id": "2-4-2", "levelNumber": 2, - "name": "Magický Horský Sliz", + "name": "Horský Snežný Trol", "enemy": { - "id": "mountain_magic_slime", - "name": "Magický Horský Sliz", - "maxHp": 65, + "id": "mountain_troll_g2", + "name": "Horský Snežný Trol", + "maxHp": 85, "attackPower": 1, - "assetFolder": "assets/images/enemies/slime" + "assetFolder": "assets/images/enemies/troll" }, "mathConfig": { "operations": ["+", "-"], @@ -281,19 +281,19 @@ "allowCarryOver": true, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 6 + "requiredCorrectAnswers": 8 }, { "id": "2-4-3", "levelNumber": 3, - "name": "Horský Medveď (Boss)", + "name": "Kamenný Golem (Boss)", "isBoss": true, "enemy": { - "id": "mountain_bear_boss", - "name": "Horský Medveď", - "maxHp": 90, + "id": "mountain_golem_boss_g2", + "name": "Kamenný Golem", + "maxHp": 120, "attackPower": 1, - "assetFolder": "assets/images/enemies/bear" + "assetFolder": "assets/images/enemies/golem" }, "mathConfig": { "operations": ["+", "-"], @@ -305,7 +305,7 @@ "allowCarryOver": true, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 7 + "requiredCorrectAnswers": 10 } ] }, @@ -323,7 +323,7 @@ "enemy": { "id": "castle_guard_goblin", "name": "Hradný Strážca", - "maxHp": 50, + "maxHp": 65, "attackPower": 1, "assetFolder": "assets/images/enemies/goblin" }, @@ -334,16 +334,16 @@ "maxMultiplier": 10, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 5 + "requiredCorrectAnswers": 6 }, { "id": "2-5-2", "levelNumber": 2, - "name": "Kráľovský Sliz", + "name": "Kráľovský Zlatý Sliz", "enemy": { "id": "royal_castle_slime", - "name": "Kráľovský Sliz", - "maxHp": 65, + "name": "Kráľovský Zlatý Sliz", + "maxHp": 85, "attackPower": 1, "assetFolder": "assets/images/enemies/slime" }, @@ -354,7 +354,7 @@ "maxMultiplier": 10, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 6 + "requiredCorrectAnswers": 8 }, { "id": "2-5-3", @@ -364,7 +364,7 @@ "enemy": { "id": "castle_dragon_boss", "name": "Hradný Drak", - "maxHp": 95, + "maxHp": 125, "attackPower": 1, "assetFolder": "assets/images/enemies/dragon" }, @@ -375,7 +375,7 @@ "maxMultiplier": 10, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 8 + "requiredCorrectAnswers": 11 } ] } diff --git a/src/CiselnaVyprava/wwwroot/data/worlds-grade3.json b/src/CiselnaVyprava/wwwroot/data/worlds-grade3.json index d89f50d..de25b57 100644 --- a/src/CiselnaVyprava/wwwroot/data/worlds-grade3.json +++ b/src/CiselnaVyprava/wwwroot/data/worlds-grade3.json @@ -9,13 +9,13 @@ { "id": "3-1-1", "levelNumber": 1, - "name": "Riečny Škriatok", + "name": "Vodný Žabiak", "enemy": { - "id": "river_sprite_goblin", - "name": "Riečny Škriatok", - "maxHp": 45, + "id": "river_sprite_frogman", + "name": "Vodný Žabiak", + "maxHp": 60, "attackPower": 1, - "assetFolder": "assets/images/enemies/goblin" + "assetFolder": "assets/images/enemies/frogman" }, "mathConfig": { "operations": ["*"], @@ -24,18 +24,18 @@ "maxMultiplier": 10, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 5 + "requiredCorrectAnswers": 6 }, { "id": "3-1-2", "levelNumber": 2, - "name": "Vodný Slizík", + "name": "Pancierová Korytnačka", "enemy": { - "id": "water_slime_div", - "name": "Vodný Slizík", - "maxHp": 55, + "id": "water_turtle_div", + "name": "Pancierová Korytnačka", + "maxHp": 70, "attackPower": 1, - "assetFolder": "assets/images/enemies/slime" + "assetFolder": "assets/images/enemies/turtle" }, "mathConfig": { "operations": ["/"], @@ -44,19 +44,19 @@ "maxMultiplier": 10, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 5 + "requiredCorrectAnswers": 7 }, { "id": "3-1-3", "levelNumber": 3, - "name": "Jazerný Drak (Boss)", + "name": "Jazerný Kraken (Boss)", "isBoss": true, "enemy": { - "id": "lake_dragon_boss", - "name": "Jazerný Drak", - "maxHp": 80, + "id": "lake_kraken_boss_g3", + "name": "Jazerný Kraken", + "maxHp": 105, "attackPower": 1, - "assetFolder": "assets/images/enemies/dragon" + "assetFolder": "assets/images/enemies/kraken" }, "mathConfig": { "operations": ["*", "/"], @@ -65,7 +65,7 @@ "maxMultiplier": 10, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 7 + "requiredCorrectAnswers": 9 } ] }, @@ -79,13 +79,13 @@ { "id": "3-2-1", "levelNumber": 1, - "name": "Lesný Piadimužík", + "name": "Hubový Mužík", "enemy": { - "id": "forest_dwarf_goblin", - "name": "Lesný Piadimužík", - "maxHp": 50, + "id": "forest_mushroom_g3", + "name": "Hubový Mužík", + "maxHp": 65, "attackPower": 1, - "assetFolder": "assets/images/enemies/goblin" + "assetFolder": "assets/images/enemies/mushroom" }, "mathConfig": { "operations": ["*"], @@ -94,18 +94,18 @@ "maxMultiplier": 10, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 5 + "requiredCorrectAnswers": 6 }, { "id": "3-2-2", "levelNumber": 2, - "name": "Živicový Sliz", + "name": "Šibalský Vĺčik", "enemy": { - "id": "resin_slime_div", - "name": "Živicový Sliz", - "maxHp": 65, + "id": "forest_wolf_div_g3", + "name": "Šibalský Vĺčik", + "maxHp": 85, "attackPower": 1, - "assetFolder": "assets/images/enemies/slime" + "assetFolder": "assets/images/enemies/wolf" }, "mathConfig": { "operations": ["/"], @@ -114,19 +114,19 @@ "maxMultiplier": 10, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 6 + "requiredCorrectAnswers": 8 }, { "id": "3-2-3", "levelNumber": 3, - "name": "Starý Lesný Medveď (Boss)", + "name": "Stromový Ent (Boss)", "isBoss": true, "enemy": { - "id": "ancient_forest_bear_boss", - "name": "Starý Lesný Medveď", - "maxHp": 90, + "id": "ancient_treant_boss_g3", + "name": "Stromový Ent", + "maxHp": 120, "attackPower": 1, - "assetFolder": "assets/images/enemies/bear" + "assetFolder": "assets/images/enemies/treant" }, "mathConfig": { "operations": ["*", "/"], @@ -135,7 +135,7 @@ "maxMultiplier": 10, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 8 + "requiredCorrectAnswers": 10 } ] }, @@ -149,13 +149,13 @@ { "id": "3-3-1", "levelNumber": 1, - "name": "Jaskynný Goblin", + "name": "Jaskynný Netopierik", "enemy": { - "id": "cave_goblin_1000", - "name": "Jaskynný Goblin", - "maxHp": 55, + "id": "cave_bat_1000", + "name": "Jaskynný Netopierik", + "maxHp": 70, "attackPower": 1, - "assetFolder": "assets/images/enemies/goblin" + "assetFolder": "assets/images/enemies/bat" }, "mathConfig": { "operations": ["+", "-"], @@ -167,18 +167,18 @@ "allowCarryOver": false, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 5 + "requiredCorrectAnswers": 7 }, { "id": "3-3-2", "levelNumber": 2, - "name": "Trblietavý Sliz", + "name": "Horský Snežný Trol", "enemy": { - "id": "glitter_slime_1000", - "name": "Trblietavý Sliz", - "maxHp": 70, + "id": "mountain_troll_1000", + "name": "Horský Snežný Trol", + "maxHp": 90, "attackPower": 1, - "assetFolder": "assets/images/enemies/slime" + "assetFolder": "assets/images/enemies/troll" }, "mathConfig": { "operations": ["+", "-"], @@ -190,7 +190,7 @@ "allowCarryOver": true, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 6 + "requiredCorrectAnswers": 8 }, { "id": "3-3-3", @@ -200,7 +200,7 @@ "enemy": { "id": "crystal_golem_boss", "name": "Kryštálový Golem", - "maxHp": 95, + "maxHp": 125, "attackPower": 1, "assetFolder": "assets/images/enemies/golem" }, @@ -214,7 +214,7 @@ "allowCarryOver": true, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 8 + "requiredCorrectAnswers": 10 } ] }, @@ -228,11 +228,11 @@ { "id": "3-4-1", "levelNumber": 1, - "name": "Veterný Škriatok", + "name": "Lúčny Škriatok", "enemy": { "id": "wind_sprite_goblin", - "name": "Veterný Škriatok", - "maxHp": 50, + "name": "Lúčny Škriatok", + "maxHp": 65, "attackPower": 1, "assetFolder": "assets/images/enemies/goblin" }, @@ -244,16 +244,16 @@ "maxB": 999, "inputType": "MultipleChoice" }, - "requiredCorrectAnswers": 5 + "requiredCorrectAnswers": 6 }, { "id": "3-4-2", "levelNumber": 2, - "name": "Búrkový Sliz", + "name": "Kvetinový Slizík", "enemy": { "id": "storm_slime_comp", - "name": "Búrkový Sliz", - "maxHp": 65, + "name": "Kvetinový Slizík", + "maxHp": 85, "attackPower": 1, "assetFolder": "assets/images/enemies/slime" }, @@ -265,17 +265,17 @@ "maxB": 1000, "inputType": "MultipleChoice" }, - "requiredCorrectAnswers": 6 + "requiredCorrectAnswers": 8 }, { "id": "3-4-3", "levelNumber": 3, - "name": "Hromový Medveď (Boss)", + "name": "Lesný Medveď (Boss)", "isBoss": true, "enemy": { "id": "thunder_bear_boss", - "name": "Hromový Medveď", - "maxHp": 95, + "name": "Lesný Medveď", + "maxHp": 125, "attackPower": 1, "assetFolder": "assets/images/enemies/bear" }, @@ -287,7 +287,7 @@ "maxB": 1000, "inputType": "MultipleChoice" }, - "requiredCorrectAnswers": 8 + "requiredCorrectAnswers": 10 } ] }, @@ -301,11 +301,11 @@ { "id": "3-5-1", "levelNumber": 1, - "name": "Elitný Goblin", + "name": "Hradný Strážca", "enemy": { "id": "elite_guard_goblin", - "name": "Elitný Goblin", - "maxHp": 65, + "name": "Hradný Strážca", + "maxHp": 85, "attackPower": 1, "assetFolder": "assets/images/enemies/goblin" }, @@ -316,7 +316,7 @@ "maxMultiplier": 10, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 6 + "requiredCorrectAnswers": 8 }, { "id": "3-5-2", @@ -325,7 +325,7 @@ "enemy": { "id": "plasma_slime_boss", "name": "Magický Plazmový Sliz", - "maxHp": 80, + "maxHp": 105, "attackPower": 1, "assetFolder": "assets/images/enemies/slime" }, @@ -341,7 +341,7 @@ "maxMultiplier": 10, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 7 + "requiredCorrectAnswers": 9 }, { "id": "3-5-3", @@ -351,7 +351,7 @@ "enemy": { "id": "golden_dragon_final_boss", "name": "Zlatý Drak Kráľovstva", - "maxHp": 110, + "maxHp": 145, "attackPower": 1, "assetFolder": "assets/images/enemies/dragon" }, @@ -367,7 +367,7 @@ "maxMultiplier": 10, "inputType": "DirectInput" }, - "requiredCorrectAnswers": 10 + "requiredCorrectAnswers": 12 } ] } diff --git a/src/CiselnaVyprava/wwwroot/index.html b/src/CiselnaVyprava/wwwroot/index.html index 6894b43..e68a94e 100644 --- a/src/CiselnaVyprava/wwwroot/index.html +++ b/src/CiselnaVyprava/wwwroot/index.html @@ -8,7 +8,7 @@ - +