(display: "InventoryHUD")1(display: "InventoryHUD")Stojíš nehnutě a vločky sněhu ti metou do obličeje. Postava zahalená v černé kápy míří směrem k malému jevišti, kde přednáší vypravěč. Nechápeš proč nejde vykrádat stany. Každopádně je to podezřelé chování.
[[[Bránit tábor|12]]
[[Pozorovat co se bude dít|14]]]
<!-- (link: "✮ načíst ")[(load-game: "slot1")]) -->(display: "InventoryHUD")„Hej, co tam děláš!“ tasil jsi meč, přičemž jsi rozrazil ostrou čepelí pár padajících vloček sněhu. Zahalená postava se na tebe podívala a nebylo jí vidět do obličeje. Pak se na tebe rozeběhla a přitom také tasila meč. Usoudil jsi, že jde nejspíš o nějakého lapku.
[[[Pokud jsi vyhrál|7]]]
<!-- (link: "✮ načíst ")[(load-game: "slot1")]) -->(display: "InventoryHUD")(display: "InventoryHUD")Lapka se vkradl na pódium a pak jsi viděl jak bodá vypravěče. Dav zachvátila panika a obchodníci i vesničané se dali na útěk.
„Jménem černých lasiček, přebíráme nadvládu nad krajem a budete nám za vše platit!“ hlesl vítězně lapka na dav.
''Nedokázal jsi obchodní tábor ochránit. Jako strážce jsi selhal a prohrál. Snad se to tví spolubojovníci nedozví, protože by tě zbičovali za neschopnost nebo zradu.''
[(text-colour:(hsl:0,0,0.5333,0.55))[Restartovat hru]]<restart|(click: ?restart)[(reload:)]Tělo jsi tam nechal ležet, abys zbytečně nerušil obchodní událost poplachem. Ještě by ti to strhli z žoldu. Začal jsi přemýšlet, kdo byl ten lupič a co tam chtěl.
Slova vypravěče z vpovzdálí byla hlasitá a dav napjatě poslouchal: „Když měl Gosel dost kupců, vplížil se do komnat krále a pečeť ukradl. Naschvál tam udělal hodně nepořádku a nakonec vyvolal poplach a umístil pár indicií, aby se o tom dozvěděl celý hrad i široké okolí.“
Zahledl jsi další postavu lupiče, jak míří na malé pódium k vypravěči. – Ale proč? Nějak to nechápeš.
[[[?????? Pokud víš, co znamená vytetovaná černá lasička|8]]
[[Nezbývá ti než vběhnout na pódium a zastavit ho|6]]]
<!-- (link: "✮ načíst ")[(load-game: "slot1")]) -->(display: "InventoryHUD")<script>
(function() {
const passageName = "4"; // Název této pasáže
const storageKey = "scrollPos_" + passageName;
const savedPosition = sessionStorage.getItem(storageKey);
if (savedPosition !== null) {
window.scrollTo(0, parseInt(savedPosition));
} else {
window.scrollTo(0, 0);
setTimeout(function() {
const targetPosition = 300;
const startPosition = window.pageYOffset;
const distance = targetPosition - startPosition;
const duration = 1500;
let startTime = null;
function animation(currentTime) {
if (startTime === null) startTime = currentTime;
const timeElapsed = currentTime - startTime;
const progress = Math.min(timeElapsed / duration, 1);
const ease = progress < 0.5
? 2 * progress * progress
: 1 - Math.pow(-2 * progress + 2, 2) / 2;
window.scrollTo(0, startPosition + distance * ease);
if (timeElapsed < duration) {
requestAnimationFrame(animation);
}
}
requestAnimationFrame(animation);
}, 100);
}
let scrollTimeout;
window.addEventListener('scroll', function() {
clearTimeout(scrollTimeout);
scrollTimeout = setTimeout(function() {
sessionStorage.setItem(storageKey, window.pageYOffset);
}, 100);
});
})();
</script>
{{(set: $finalAtk to $atk)
(set: $finalDef to 0)
(set: $finalStaminaBonus to 0)
(if: $equippedWeapon is "dagger")[(set: $finalAtk to $finalAtk + 1)]
(else-if: $equippedWeapon is "daggerQuality")[(set: $finalAtk to $finalAtk + 1)(set: $finalStaminaBonus to 1)]
(else-if: $equippedWeapon is "sword")[(set: $finalAtk to $finalAtk + 2)(set: $finalStaminaBonus to 1)]
(else-if: $equippedWeapon is "swordMaster")[(set: $finalAtk to $finalAtk + 2)(set: $finalStaminaBonus to 2)]
(else-if: $equippedWeapon is "axe")[(set: $finalAtk to $finalAtk + 3)]
(else-if: $equippedWeapon is "axeWar")[(set: $finalAtk to $finalAtk + 3)(set: $finalStaminaBonus to 1)]
(else-if: $equippedWeapon is "greatsword")[(set: $finalAtk to $finalAtk + 3)(set: $finalStaminaBonus to 2)]
(else-if: $equippedWeapon is "greatswordLegendary")[(set: $finalAtk to $finalAtk + 3)(set: $finalStaminaBonus to 3)]
(if: $equippedArmor is "leather")[(set: $finalDef to $finalDef + 1)]
(else-if: $equippedArmor is "chain")[(set: $finalDef to $finalDef + 2)]
(else-if: $equippedArmor is "plate")[(set: $finalDef to $finalDef + 3)]
(if: $equippedShield is "wooden")[(set: $finalDef to $finalDef + 1)]
(else-if: $equippedShield is "iron")[(set: $finalDef to $finalDef + 2)]
(else-if: $equippedShield is "tower")[(set: $finalDef to $finalDef + 3)]
(if: $trait1)[(set: $finalAtk to $finalAtk - 1)]
(set: $totalStamina to $stamina + $finalStaminaBonus)
(if: visits is 1)[
(set: $lapkaHP to 3)
(set: $lapkaATK to 0)
(set: $combatLog to (a:))
(set: $diceRolling to false)
(set: $hracHod to 0)
(set: $hp to 3)
(set: $lapkaHod to 0)
(set: $animating to false)
]
(if: $lapkaHP is 1 and $lapkaATK is 0)[
(set: $lapkaATK to 1)
(set: $combatLog to it + (a: "<span class='combat-draw'>**Lapka vytáhl svou otrávenou dýku! +1 útok!**</span>"))
]
**Hej, co tam děláš!** křikl jsi na přikrčenou postavu a tasil meč, odrážeje padající vločky. Zahalená postava se rozeběhla proti tobě, také tasila dýku. Musíš bojovat!
<!-- Canvas pro VS particles -->
<canvas id="vsParticlesCanvas" style="position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: 5; pointer-events: none;"></canvas>
<div class="battle-hud-container">
<div class="battle-hud-hearts">
<div class="bhud-hearts-player">
<div class="bhud-hearts-box">
<span class="bhud-hearts-label">$vybranaPostava</span>
<div class="bhud-hearts-row">
(for: each _i, ...(range: 1, $maxHp))[
(if: _i <= $hp)[
<img src="https://files.catbox.moe/v4hx73.png" class="heart-icon heart-full" alt="❤️">
](else:)[
<img src="https://files.catbox.moe/v4hx73.png" class="heart-icon heart-empty" alt="♡">
]
]
</div>
</div>
</div>
<div class="bhud-vs-separator" id="vsElement">
<span class="vs-text">VS</span>
</div>
<div class="bhud-hearts-enemy">
<div class="bhud-hearts-box">
<span class="bhud-hearts-label">Lapka</span>
<div class="bhud-hearts-row">
(for: each _i, ...(range: 1, 10))[
(if: _i <= $lapkaHP)[
<img src="https://files.catbox.moe/v4hx73.png" class="heart-icon heart-enemy-full" alt="❤️">
](else:)[
<img src="https://files.catbox.moe/v4hx73.png" class="heart-icon heart-enemy-empty" alt="♡">
]
]
</div>
</div>
</div>
</div>
</div>
<div class="combat-box" style="background:rgba(42,24,16,0.2);">
(if: $hp > 0 and $lapkaHP > 0)[
<div class="dice-section">
|attackButton>[
(link: "(text-colour:#600)[🗡 Hoď kostkou a zaútoč!]")[
(set: $attackBonus to 0)
(set: $hracHod to (random:1,6))
(set: $lapkaHod to (random:1,6))
(set: $hracCelkem to $hracHod + $finalAtk + $attackBonus)
(set: $lapkaCelkem to $lapkaHod + $lapkaATK)
(set: $animating to true)
(replace: ?attackButton)[]
(replace: ?specialButtons)[]
(replace: ?dicePlayer)[<div class="dice-rolling"><img src="https://files.catbox.moe/a843tu.png" class="dice-image dice-fall"></div>]
(replace: ?diceEnemy)[<div class="dice-rolling"><img src="https://files.catbox.moe/a843tu.png" class="dice-image dice-fall"></div>]
(live: 0.4s)[
(stop:)
(set: $diceRolling to true)
(set: $animating to false)
(if: $hracCelkem > $lapkaCelkem)[
(set: $lapkaHP to it - 1)
(set: $rozdil to $hracCelkem - $lapkaCelkem)
(if: $lapkaHP is 1)[
(set: $hlasky to (a: "Lapka zavrávoral! Ještě jedna!", "Téměř jsi ji dostal!", "Zloděj klopýtá!", "Skoro omráčená!"))
](else-if: $rozdil is 1)[
(set: $hlasky to (a: "Lehce jsi ji trefil do ramene!", "Škrábl jsi její plášť!", "Tvá zbraň se otřela o její bok!", "Dobrý pokus!"))
](else-if: $rozdil is 2)[
(set: $hlasky to (a: "Zasáhl jsi ji plnou silou!", "Pěkný úder do boku!", "Tvá zbraň našla mezeru!", "Lapka ucítila bolest!"))
](else:)[
(set: $hlasky to (a: "Brutální rána! Lapka padá!", "Perfektní zásah! Omráčena!", "Mistrovský úder!", "Zloděj se hroutí!"))
]
(set: $hlaska to $hlasky's (random:1, $hlasky's length))
(set: $vysledek to "<span class='combat-victory'>**" + $hlaska + "** **-1 HP**</span>")
<script>
setTimeout(function() {
var enemyBox = document.querySelector('.bhud-hearts-enemy .bhud-hearts-box');
if (enemyBox) {
for (var i = 0; i < 15; i++) {
var particle = document.createElement('div');
particle.className = 'particle enemy-particle';
particle.style.left = (Math.random() * 100) + '%';
particle.style.animationDelay = (Math.random() * 0.2) + 's';
enemyBox.appendChild(particle);
setTimeout(function(p) { p.remove(); }, 1000, particle);
}
}
}, 300);
</script>
](else-if: $lapkaCelkem > $hracCelkem)[
(set: $hp to it - 1)
(set: $rozdil to $lapkaCelkem - $hracCelkem)
(if: $rozdil is 1)[
(set: $hlasky to (a: "Lapka tě lehce řízla dýkou!", "Cítíš lehký bodnutí!", "Málem jsi uhnul!", "Dýka našla cíl!"))
](else-if: $rozdil is 2)[
(set: $hlasky to (a: "Lapka tě s ušklíbnutím bodla do boku!", "Au! Ten bodec zajel hluboko!", "Její dýka neminula!", "Bolestivá rána!"))
](else:)[
(set: $hlasky to (a: "Mocný útok! Klesáš!", "Téměř jsi upadl!", "Dýka tě srazila!", "Jed se rozlévá!"))
]
(set: $hlaska to $hlasky's (random:1, $hlasky's length))
(set: $vysledek to "<span class='combat-defeat'>**" + $hlaska + "** **-1 HP**</span>")
<script>
setTimeout(function() {
var card = document.querySelector('.scene-card');
if (card) {
card.classList.add('card-hit');
setTimeout(function() {
card.classList.remove('card-hit');
}, 400);
}
var playerBox = document.querySelector('.bhud-hearts-player .bhud-hearts-box');
if (playerBox) {
for (var i = 0; i < 15; i++) {
var particle = document.createElement('div');
particle.className = 'particle player-particle';
particle.style.left = (Math.random() * 100) + '%';
particle.style.animationDelay = (Math.random() * 0.2) + 's';
playerBox.appendChild(particle);
setTimeout(function(p) { p.remove(); }, 1000, particle);
}
}
}, 300);
</script>
](else:)[
(set: $hlasky to (a: "Vaše zbraně se střetly!", "Oba jste blokovali!", "Remíza v tomto kole!", "Síly jsou vyrovnané!", "Ani jeden nezískal výhodu!"))
(set: $hlaska to $hlasky's (random:1, $hlasky's length))
(set: $vysledek to "<span class='combat-draw'>**" + $hlaska + "** Nikdo nebyl zasažen!</span>")
]
(set: $combatLog to it + (a: $vysledek))
(goto: "4")
]
]
]
|specialButtons>[
<div class="special-attacks">
(if: $stamina >= 3)[
(link: "(text-colour:#4d9f4d)[Silný úder (-3 kondice, +2 ATK)]")[
(set: $stamina to it - 3)
(set: $attackBonus to 2)
(set: $hracHod to (random:1,6))
(set: $lapkaHod to (random:1,6))
(set: $hracCelkem to $hracHod + $finalAtk + $attackBonus)
(set: $lapkaCelkem to $lapkaHod + $lapkaATK)
(set: $animating to true)
(replace: ?attackButton)[]
(replace: ?specialButtons)[]
(replace: ?dicePlayer)[<div class="dice-rolling"><img src="https://files.catbox.moe/a843tu.png" class="dice-image dice-fall"></div>]
(replace: ?diceEnemy)[<div class="dice-rolling"><img src="https://files.catbox.moe/a843tu.png" class="dice-image dice-fall"></div>]
(set: $combatLog to it + (a: "<span class='combat-draw'>**⚡ Použil jsi Silný úder! +2 ATK**</span>"))
(live: 0.4s)[
(stop:)
(set: $diceRolling to true)
(set: $animating to false)
(if: $hracCelkem > $lapkaCelkem)[
(set: $lapkaHP to it - 1)
(set: $rozdil to $hracCelkem - $lapkaCelkem)
(if: $lapkaHP is 1)[
(set: $hlasky to (a: "Lapka zavrávoral! Ještě jedna!", "Téměř jsi ji dostal!", "Zloděj klopýtá!", "Skoro omráčená!"))
](else-if: $rozdil is 1)[
(set: $hlasky to (a: "Lehce jsi ji trefil do ramene!", "Škrábl jsi její plášť!", "Tvá zbraň se otřela o její bok!", "Dobrý pokus!"))
](else-if: $rozdil is 2)[
(set: $hlasky to (a: "Zasáhl jsi ji plnou silou!", "Pěkný úder do boku!", "Tvá zbraň našla mezeru!", "Lapka ucítila bolest!"))
](else:)[
(set: $hlasky to (a: "Brutální rána! Lapka padá!", "Perfektní zásah! Omráčena!", "Mistrovský úder!", "Zloděj se hroutí!"))
]
(set: $hlaska to $hlasky's (random:1, $hlasky's length))
(set: $vysledek to "<span class='combat-victory'>**" + $hlaska + "** **-1 HP**</span>")
](else-if: $lapkaCelkem > $hracCelkem)[
(set: $hp to it - 1)
(set: $rozdil to $lapkaCelkem - $hracCelkem)
(if: $rozdil is 1)[
(set: $hlasky to (a: "Lapka tě lehce řízla dýkou!", "Cítíš lehký bodnutí!", "Málem jsi uhnul!", "Dýka našla cíl!"))
](else-if: $rozdil is 2)[
(set: $hlasky to (a: "Lapka tě s ušklíbnutím bodla do boku!", "Au! Ten bodec zajel hluboko!", "Její dýka neminula!", "Bolestivá rána!"))
](else:)[
(set: $hlasky to (a: "Mocný útok! Klesáš!", "Téměř jsi upadl!", "Dýka tě srazila!", "Jed se rozlévá!"))
]
(set: $hlaska to $hlasky's (random:1, $hlasky's length))
(set: $vysledek to "<span class='combat-defeat'>**" + $hlaska + "** **-1 HP**</span>")
](else:)[
(set: $hlasky to (a: "Vaše zbraně se střetly!", "Oba jste blokovali!", "Remíza v tomto kole!", "Síly jsou vyrovnané!", "Ani jeden nezískal výhodu!"))
(set: $hlaska to $hlasky's (random:1, $hlasky's length))
(set: $vysledek to "<span class='combat-draw'>**" + $hlaska + "** Nikdo nebyl zasažen!</span>")
]
(set: $combatLog to it + (a: $vysledek))
(goto: "4")
]
]
](else:)[
<span style="color: #666; text-decoration: line-through;">Silný úder (nedostatek kondice)</span>
]
(if: $stamina >= $umeni and $umeni > 0)[
(link: "(text-colour:#6db300)[🎯 Umění boje (-" + (text: $umeni) + " kondice, +" + (text: $umeni) + " ATK)]")[
(set: $stamina to it - $umeni)
(set: $attackBonus to $umeni)
(set: $hracHod to (random:1,6))
(set: $lapkaHod to (random:1,6))
(set: $hracCelkem to $hracHod + $finalAtk + $attackBonus)
(set: $lapkaCelkem to $lapkaHod + $lapkaATK)
(set: $animating to true)
(replace: ?attackButton)[]
(replace: ?specialButtons)[]
(replace: ?dicePlayer)[<div class="dice-rolling"><img src="https://files.catbox.moe/a843tu.png" class="dice-image dice-fall"></div>]
(replace: ?diceEnemy)[<div class="dice-rolling"><img src="https://files.catbox.moe/a843tu.png" class="dice-image dice-fall"></div>]
(set: $combatLog to it + (a: "<span class='combat-draw'>**⚡ Použil jsi Umění boje! +" + (text: $umeni) + " ATK**</span>"))
(live: 0.4s)[
(stop:)
(set: $diceRolling to true)
(set: $animating to false)
(if: $hracCelkem > $lapkaCelkem)[
(set: $lapkaHP to it - 1)
(set: $rozdil to $hracCelkem - $lapkaCelkem)
(if: $lapkaHP is 1)[
(set: $hlasky to (a: "Lapka zavrávoral! Ještě jedna!", "Téměř jsi ji dostal!", "Zloděj klopýtá!", "Skoro omráčená!"))
](else-if: $rozdil is 1)[
(set: $hlasky to (a: "Lehce jsi ji trefil do ramene!", "Škrábl jsi její plášť!", "Tvá zbraň se otřela o její bok!", "Dobrý pokus!"))
](else-if: $rozdil is 2)[
(set: $hlasky to (a: "Zasáhl jsi ji plnou silou!", "Pěkný úder do boku!", "Tvá zbraň našla mezeru!", "Lapka ucítila bolest!"))
](else:)[
(set: $hlasky to (a: "Brutální rána! Lapka padá!", "Perfektní zásah! Omráčena!", "Mistrovský úder!", "Zloděj se hroutí!"))
]
(set: $hlaska to $hlasky's (random:1, $hlasky's length))
(set: $vysledek to "<span class='combat-victory'>**" + $hlaska + "** **-1 HP**</span>")
](else-if: $lapkaCelkem > $hracCelkem)[
(set: $hp to it - 1)
(set: $rozdil to $lapkaCelkem - $hracCelkem)
(if: $rozdil is 1)[
(set: $hlasky to (a: "Lapka tě lehce řízla dýkou!", "Cítíš lehký bodnutí!", "Málem jsi uhnul!", "Dýka našla cíl!"))
](else-if: $rozdil is 2)[
(set: $hlasky to (a: "Lapka tě s ušklíbnutím bodla do boku!", "Au! Ten bodec zajel hluboko!", "Její dýka neminula!", "Bolestivá rána!"))
](else:)[
(set: $hlasky to (a: "Mocný útok! Klesáš!", "Téměř jsi upadl!", "Dýka tě srazila!", "Jed se rozlévá!"))
]
(set: $hlaska to $hlasky's (random:1, $hlasky's length))
(set: $vysledek to "<span class='combat-defeat'>**" + $hlaska + "** **-1 HP**</span>")
](else:)[
(set: $hlasky to (a: "Vaše zbraně se střetly!", "Oba jste blokovali!", "Remíza v tomto kole!", "Síly jsou vyrovnané!", "Ani jeden nezískal výhodu!"))
(set: $hlaska to $hlasky's (random:1, $hlasky's length))
(set: $vysledek to "<span class='combat-draw'>**" + $hlaska + "** Nikdo nebyl zasažen!</span>")
]
(set: $combatLog to it + (a: $vysledek))
(goto: "4")
]
]
](else-if: $umeni > 0)[
<span style="color: #666; text-decoration: line-through;">🎯 Umění boje (nedostatek kondice)</span>
]
</div>
]
</div>
](else-if: $lapkaHP <= 0)[
<div class="victory-box">
„ZATRACENĚ! TO SE MI JEŠTĚ NESTALO!"<br><br>
*Lapka se zhroutila na kolena a pak se nervózně rozesmála. „Máš talent na porážení zlodějů! Snad tě už nikdy nepotkám v temné uličce!"*<br><br>
[[Podívat se na lapkovo tělo detailněji|mec]]
</div>
](else:)[
(set: $finalAtk to $finalAtk - 1)
(set: $trait1 to true)
<div class="defeat-box">
**„Hehe, myslel sis, že jsi dobrý?"**<br><br>
*Lapka ti podala ruku a pomohla vstát s ironickým úsměvem. „To byla jen malá lekce ze života. Příště dávej víc pozor!"*<br><br>
[[Pokračovat...|smrt]]<br>
</div>
]
(if: $combatLog's length > 0)[
<div class="combat-log">
(for: each _log, ...$combatLog)[_log<br>]
</div>
]
</div>
<div class="scene-card">
<div class="dice-container">
<div class="dice-player-box">
|dicePlayer>[
(if: $hp <= 0)[
<div style="color:red; font-weight:bold; font-size:1.2em; text-align:center;">PORAŽEN!</div>
<div style="margin-top:10px; font-size:0.9em; color:#fffb03;">
(if: $trait1)[<div>**Pomožděná ruka -1 ATK**</div>]
(if: $trait2)[<div>**Zlomená noha -5 rychlosti**</div>]
</div>
](else-if: $diceRolling)[
(if: $hracHod is 1)[
<img src="https://files.catbox.moe/a843tu.png" class="dice-image">
](else-if: $hracHod is 2)[
<img src="https://files.catbox.moe/laokqg.png" class="dice-image">
](else-if: $hracHod is 3)[
<img src="https://files.catbox.moe/9ubppy.png" class="dice-image">
](else-if: $hracHod is 4)[
<img src="https://files.catbox.moe/zp7fb4.png" class="dice-image">
](else-if: $hracHod is 5)[
<img src="https://files.catbox.moe/vqfqru.png" class="dice-image">
](else-if: $hracHod is 6)[
<img src="https://files.catbox.moe/hi7w7n.png" class="dice-image">
]
**<div class="dice-number-white-small">$hracHod+$finalAtk(if: $attackBonus > 0)[+$attackBonus⚡] = $hracCelkem</div>**
]
]
</div>
<div class="dice-enemy-box">
|diceEnemy>[
(if: $lapkaHP <= 0)[
<div style="color:red; font-weight:bold; font-size:1.2em; text-align:center;">PORAŽEN!</div>
](else-if: $diceRolling)[
(if: $lapkaHod is 1)[
<img src="https://files.catbox.moe/a843tu.png" class="dice-image">
](else-if: $lapkaHod is 2)[
<img src="https://files.catbox.moe/laokqg.png" class="dice-image">
](else-if: $lapkaHod is 3)[
<img src="https://files.catbox.moe/9ubppy.png" class="dice-image">
](else-if: $lapkaHod is 4)[
<img src="https://files.catbox.moe/zp7fb4.png" class="dice-image">
](else-if: $lapkaHod is 5)[
<img src="https://files.catbox.moe/vqfqru.png" class="dice-image">
](else-if: $lapkaHod is 6)[
<img src="https://files.catbox.moe/hi7w7n.png" class="dice-image">
]
**<div class="dice-number-white-small">$lapkaHod+$lapkaATK = $lapkaCelkem</div>**
]
]
</div>
</div>
</div>
<script>
(function() {
const canvas = document.getElementById('vsParticlesCanvas');
if (!canvas) return;
const ctx = canvas.getContext('2d');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
window.addEventListener('resize', () => {
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
});
const vsElement = document.getElementById('vsElement');
function getVSPosition() {
if (!vsElement) return { x: window.innerWidth / 2, y: 200 };
const rect = vsElement.getBoundingClientRect();
return {
x: rect.left + rect.width / 2,
y: rect.top + rect.height / 2
};
}
class VSParticle {
constructor() {
const pos = getVSPosition();
this.x = pos.x + (Math.random() - 0.5) * 60;
this.y = pos.y + (Math.random() - 0.5) * 40;
this.size = Math.random() * 2 + 1;
this.speedX = (Math.random() - 0.5) * 1this.speedY = -Math.random() * 2 - 1;
this.life = 1;
this.decay = Math.random() * 0.01 + 0.005;
const colorChoice = Math.random();
if (colorChoice < 0.4) {
this.startColor = { r: 255, g: 0, b: 0 };
} else if (colorChoice < 0.7) {
this.startColor = { r: 200, g: 50, b: 0 };
} else {
this.startColor = { r: 255, g: 200, b: 0 };
}
this.endColor = { r: 100, g: 100, b: 100 };
}
update() {
this.x += this.speedX;
this.y += this.speedY;
this.life -= this.decay;
if (this.life <= 0) {
const pos = getVSPosition();
this.x = pos.x + (Math.random() - 0.5) * 60;
this.y = pos.y + (Math.random() - 0.5) * 40;
this.life = 1;
this.speedX = (Math.random() - 0.5) * 1;
this.speedY = -Math.random() * 2 - 1;
}
}
draw() {
const r = Math.floor(this.startColor.r + (this.endColor.r - this.startColor.r) * (1 - this.life));
const g = Math.floor(this.startColor.g + (this.endColor.g - this.startColor.g) * (1 - this.life));
const b = Math.floor(this.startColor.b + (this.endColor.b - this.startColor.b) * (1 - this.life));
ctx.save();
ctx.globalAlpha = this.life * 0.8;
ctx.fillStyle = `rgb(${r}, ${g}, ${b})`;
ctx.shadowBlur = 10;
ctx.shadowColor = `rgb(${r}, ${g}, ${b})`;
ctx.beginPath();
ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);
ctx.fill();
ctx.restore();
}
}
const particles = [];
for (let i = 0; i < 15; i++) {
particles.push(new VSParticle());
}
function animate() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
particles.forEach(particle => {
particle.update();
particle.draw();
});
requestAnimationFrame(animate);
}
animate();
})();
</script>
<style>
.battle-hud-container {
background: rgba(42, 24, 16, 0.2);
border: 2px solid rgba(143, 111, 36, 0.2);
border-radius: 2px;
padding: 20px;
margin: 20px 0;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
}
.battle-hud-hearts {
display: flex;
align-items: center;
justify-content: space-between;
gap: 20px;
}
.bhud-hearts-player,
.bhud-hearts-enemy {
flex: 1;
display: flex;
justify-content: center;
}
.bhud-hearts-box {
background: rgba(0, 0, 0, 0.1);
border: 2px solid rgba(139, 69, 19, 0.2);
border-radius: 2px;
padding: 15px;
width: 100%;
text-align: center;
}
.bhud-hearts-label {
display: block;
font-size: 1.2em;
font-weight: bold;
margin-bottom: 10px;
color: #ffd700;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);
}
.bhud-hearts-row {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 5px;
margin-top: 10px;
}
.bhud-vs-separator {
display: flex;
align-items: center;
justify-content: center;
min-width: 80px;
position: relative;
z-index: 4;
}
.vs-text {
font-size: 1.5em;
font-weight: bold;
color: #631818;
text-shadow:
2px 2px 0 #000,
-2px -2px 0 #000,
-2px 2px 0 #000,
2px -2px 0 #000,
0 0 10px rgba(102, 37, 37, 0.1);
animation: pulse 2s ease-in-out infinite;
}
@keyframes pulse {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.1); }
}
.heart-icon {
width: 45px;
height: 45px;
transition: transform 0.2s;
}
.heart-icon:hover {
transform: scale(1.2);
}
.heart-full {
filter: drop-shadow(0 0 5px rgba(255, 0, 0, 0.2));
}
.heart-enemy-full {
filter: drop-shadow(0 0 5px rgba(255, 100, 0, 0.2));
}
.heart-empty,
.heart-enemy-empty {
opacity: 0.3;
filter: grayscale(100%);
}
.special-attacks {
display: flex;
flex-direction: column;
gap: 10px;
margin-top: 15px;
}
.special-attacks a {
display: block;
padding: 12px 20px;
text-align: center;
border-radius: 2px;
font-weight: bold;
transition: all 0.3s ease;
}
.dice-image {
width: 100px;
height: 100px;
margin: 10px auto;
display: block;
}
.dice-rolling {
animation: shake 0.08s infinite;
}
.dice-fall {
animation: fall 0.6s ease-out, spin 0.6s linear, shake 0.08s infinite;
transform-origin: center;
}
@keyframes fall {
0% {
transform: translateY(-200px);
opacity: 0;
}
100% {
transform: translateY(0);
opacity: 1;
}
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(720deg); }
}
@keyframes shake {
0%, 100% { transform: translateX(0) translateY(0); }
25% { transform: translateX(-3px) translateY(3px); }
50% { transform: translateX(3px) translateY(-3px); }
75% { transform: translateX(-3px) translateY(-3px); }
}
.card-hit {
animation: cardShake 0.4s ease-in-out;
}
@keyframes cardShake {
0%, 100% { transform: translateX(0); }
10%, 30%, 50%, 70%, 90% { transform: translateX(-5px); }
20%, 40%, 60%, 80% { transform: translateX(5px); }
}
.particle {
position: absolute;
width: 8px;
height: 8px;
border-radius: 50%;
pointer-events: none;
animation: particleRise 0.8s ease-out forwards;
z-index: 100;
}
.player-particle {
background: radial-gradient(circle, #ff4444, #cc0000);
box-shadow: 0 0 10px #ff4444;
}
.enemy-particle {
background: radial-gradient(circle, #ff6600, #cc3300);
box-shadow: 0 0 10px #ff6600;
}
@keyframes particleRise {
0% {
bottom: 50%;
opacity: 1;
transform: translateY(0) scale(1);
}
100% {
bottom: 100%;
opacity: 0;
transform: translateY(-50px) scale(0.3);
}
}
.bhud-hearts-box {
position: relative;
overflow: hidden;
}
@media (max-width: 768px) {
.battle-hud-hearts {
flex-direction: column;
}
.bhud-vs-separator {
display: none;
}
tw-passage > p:first-of-type {
display: none;
}
}
</style>}}
(display: "BattleScene")(display: "BattleInventoryHUD"){[Stojíš nad mrtvým tělem v černé kápi. Padají na něj vločky sněhu a ty ho letmo zkoumáš. Všiml sis, že na ruce má tetování černé lasičky.
V pozadí od vypravěče zní: „Mistr Gosel vymyslel plán, jak zničit celé nepřátelské království bez boje. Domluvil se s boháčem, jestli nechce koupit královskou pečeť. Když kývl, tak šel za dalším boháčem a nabídl mu to samé..."
(set: $skillCheckRolled to false)
(set: $skillCheckResult to "")
(set: $roll to 0)
(set: $celkemHod to 0)
(set: $zakladniObtiznost to 5)
(set: $minSuccessRoll to (max: 2, $zakladniObtiznost - $umeni))
<div class="skill-check-layout">
<div class="scene-card" style="min-height: 200px;">
<div style="margin-bottom: 15px; padding: 15px; background: rgba(0,0,0,0.2); border: 2px solid rgba(139, 105, 20, 0.2); border-radius: 2px; font-size: 0.9em;">
(text-colour:#e6dd7a)[ Umění $umeni]
</div>
<div class="dice-player-box">
|diceDisplay>[
(if: not $skillCheckRolled)[
]
]
</div>
</div>
<div class="result-panel">
|storyText>[]
</div>
</div>
<!-- ABSOLUTNĚ POZICOVANÉ TLAČÍTKO -->
(if: not $skillCheckRolled)[
<div class="floating-button-wrapper">
|attackButton>[
(link: "(text-colour:#080a08)[Prohledat tělo důkladně]")[
(set: _freshRoll to (random: 1, 6))
(set: $roll to _freshRoll)
(set: $celkemHod to $roll + $umeni)
(set: $skillCheckRolled to true)
(replace: ?attackButton)[]
(replace: ?diceDisplay)[
<div class="dice-fall-animation-wrapper">
<div class="dice-rolling">
<img src="https://files.catbox.moe/a843tu.png" class="dice-image dice-fall">
</div>
</div>
]
(live: 0.6s)[
(stop:)
(replace: ?diceDisplay)[
<div style="margin-top: -50px;">
(if: $roll is 1)[
<img src="https://files.catbox.moe/a843tu.png" class="dice-image">
](else-if: $roll is 2)[
<img src="https://files.catbox.moe/laokqg.png" class="dice-image">
](else-if: $roll is 3)[
<img src="https://files.catbox.moe/9ubppy.png" class="dice-image">
](else-if: $roll is 4)[
<img src="https://files.catbox.moe/zp7fb4.png" class="dice-image">
](else-if: $roll is 5)[
<img src="https://files.catbox.moe/vqfqru.png" class="dice-image">
](else-if: $roll is 6)[
<img src="https://files.catbox.moe/hi7w7n.png" class="dice-image">
]
**<div class="dice-number-white-small">$roll(if: $umeni > 0)[+$umeni] = $celkemHod</div>**
</div>
]
(if: $celkemHod < $minSuccessRoll)[
(set: $skillCheckResult to "NEÚSPĚCH")
(replace: ?resultBox)[]
(replace: ?storyText)[
<div class="result-box">
<span style="color: #63050a;">**NEÚSPĚCH:**</span> (align:"<==")+(box:"=XXXXXXXXXXXXXXXXXX=")[Při spěšném prohledání nenalézáš nic zajímavého. Tělo je studené a sníh už zakrývá stopy. Možná kdybys byl důkladnější... [[Pokračovat ve strážné pochůzce|3]]]
</div>
]
](else:)[
(set: $skillCheckResult to "ÚSPĚCH")
(replace: ?resultBox)[]
(replace: ?storyText)[
<div class="result-box">
<span style="color: #425c43;">**ÚSPĚCH:**</span>(align:"<==")+(box:"=XXXXXXXXXXXXXXXXXX=")[Při pečlivém prohlížení těla objevuješ skrytou kapsu v podšívce káně. Uvnitř nalézáš zvláštní pergamen s pečetí a malý sáček se stříbrnými mincemi. Tetování lasičky ti nyní dává větší smysl - je to značka tajné organizace!
(align:"<==")+(box:"XXXXXXXXX=")[[[<span style="color: #425c43;">**ÚSPĚCH **</span>: Pokračovat ve vyšetřování|1]][[Pokračovat ve strážné pochůzce|3]]]]
</div>
]
]
]
]
]
</div>
]
|resultBox>[]
(display: "InventoryHUD")
<style>
/* ABSOLUTNĚ POZICOVANÉ TLAČÍTKO - NASTAVITELNÉ */
.floating-button-wrapper {
position: absolute;
top: -200px; /* Vertikální pozice - změňte dle potřeby */
right: -850px; /* Horizontální pozice - změňte dle potřeby */
z-index: 1000; /* Nad všemi vrstvami */
}
/* NOVÁ TŘÍDA PRO POSUN ANIMACE NAHORU */
.dice-fall-animation-wrapper {
margin-top: -100px;
}
.skill-check-layout {
display: flex;
gap: 20px;
align-items: flex-start;
margin: 20px 0;
flex-wrap: nowrap;
}
.scene-card {
position: relative;
background: linear-gradient(135deg, rgba(20, 10, 5, 0.9), rgba(42, 24, 16, 0.9));
border: 3px solid rgba(139, 69, 19, 0.8);
border-radius: 2px;
padding: 20px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.5);
flex: 0 0 45%;
}
.result-panel {
flex: 1;
min-height: 200px;
}
.dice-image {
width: 80px;
height: 80px;
margin: -50px auto;
display: block;
}
.dice-player-box {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 10px;
text-align: center;
}
.dice-rolling {
animation: shake 0.08s infinite;
}
.dice-fall {
animation: fall 0.6s ease-out, spin 0.6s linear, shake 0.08s infinite;
transform-origin: center;
}
.dice-number-white-small {
color: #ffffff;
font-size: 1.3em;
text-align: center;
margin-top: -30px;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);
}
.result-box {
background: rgba(42, 24, 16, 0.2);
border: 2px solid rgba(139, 69, 19, 0.8);
border-radius: 2px;
padding: 20px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.5);
margin-top: -50px;
/* Animace rozbalení zleva shora */
animation: expandFromButton 0.6s ease-out;
transform-origin: top left;
}
@keyframes expandFromButton {
0% {
transform: scale(0.1) translateX(-400px) translateY(-250px);
opacity: 0;
}
50% {
opacity: 0.5;
}
100% {
transform: scale(1) translateX(0) translateY(0);
opacity: 1;
}
}
@keyframes fall {
0% {
transform: translateY(-200px);
opacity: 0;
}
100% {
transform: translateY(0);
opacity: 1;
}
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(720deg); }
}
@keyframes shake {
0%, 100% { transform: translateX(0) translateY(0); }
25% { transform: translateX(-3px) translateY(3px); }
50% { transform: translateX(3px) translateY(-3px); }
75% { transform: translateX(-3px) translateY(-3px); }
}
@media (max-width: 768px) {
.skill-check-layout {
flex-direction: column;
}
.scene-card {
flex: 1 1 100%;
}
.floating-button-wrapper {
position: relative;
top: auto;
right: auto;
margin: 20px 0;
text-align: center;
}
}
</style>]}Vypravěč zrovna dokončoval svůj příběh: „Gosel pak každému z bohatýrů prodal draze jednu falešnou pečeť. Tu pravou ovšem vrátil. Díky tomu, že se všichni dozvěděli, že se pečeť ztratila, každý z bohatýrů si myslel, že má tu pravou. Král to netušil, protože on věděl, že má přece tu pravou. A tak každý z bohatýrů vydával tajně rozkazy a rozporuplné příkazy ve svůj prospěch, až se království nakonec rozpadlo a Gosel se stal velmi bohatý.“
Když se zrovna ukláněl a dav začal tleskat, přiskočil k němu lapka.
Hoď si na své Umění. Pokud máš 5 a více, přejdi na 9. Pokud máš méně, přejdi na 13.
[[[???|9]]
[[???|13]]]
<!-- (link: "✮ načíst ")[(load-game: "slot1")]) -->(display: "InventoryHUD"){<h2 style="text-align: center; color: #b0a04c; font-family: 'Cinzel Decorative', serif; margin-bottom: 20px; text-shadow: 0 0 10px rgba(255,215,0,0.3);">Nákup brnění</h2>
<p style="text-align: center; color: #b0a04c; font-size: 18px; margin-bottom: 10px;">🌙 Zlato: <b>$gold</b></p>
<p style="text-align: center; color: #888; font-style: italic; margin-bottom: 30px; font-family: 'Cinzel', serif;">Vyber si ochranné brnění</p>
<h3 style="color: #9d8b4d; margin: 30px 0 15px 0; font-family: 'Cinzel', serif;">Dostupné brnění</h3>
<div class="inventory-grid">
<!-- KOŽENÉ BRNĚNÍ -->
<div class="inventory-card armor (print: ($hasLeatherArmor ? 'owned-item' : ''))" style="border-color: rgba(176,160,76,0.3);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/6bdqid.png"></div>
<div class="inventory-card-name" style="color: #b0a04c;">Kožené brnění</div>
<div class="sell-price-stat" style="color: #b0a04c;">$leatherArmorPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="color: #9d8b4d;">+1 DEF</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $hasLeatherArmor)[
<p style="color: #6cdb1d !important;">✓ Vlastníš</p>
](else:)[
(if: $gold >= $leatherArmorPrice)[
<span class="sell-button">(link: "🛒 Koupit")[
(set: $gold to $gold - $leatherArmorPrice)
(set: $hasLeatherArmor to true)
(goto: "ShopArmor")
]</span>
](else:)[
<p style="color: #cc5555 !important;">Nemáš dost zlata</p>
]
]
</div>
</div>
<!-- KROUŽKOVÁ ZBROJ -->
<div class="inventory-card armor (print: ($hasChainmail ? 'owned-item' : ''))" style="border-color: rgba(176,160,76,0.3);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/bownbh.png"></div>
<div class="inventory-card-name" style="color: #b0a04c;">Kroužková zbroj</div>
<div class="sell-price-stat" style="color: #b0a04c;">$chainmailPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="color: #9d8b4d;">+2 DEF</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $hasChainmail)[
<p style="color: #6cdb1d !important;">✓ Vlastníš</p>
](else:)[
(if: $gold >= $chainmailPrice)[
<span class="sell-button">(link: "🛒 Koupit")[
(set: $gold to $gold - $chainmailPrice)
(set: $hasChainmail to true)
(goto: "ShopArmor")
]</span>
](else:)[
<p style="color: #cc5555 !important;">Nemáš dost zlata</p>
]
]
</div>
</div>
<!-- PLÁTOVÁ ZBROJ -->
<div class="inventory-card armor (print: ($hasPlateArmor ? 'owned-item' : ''))" style="border-color: rgba(176,160,76,0.3);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/4c49c7.png"></div>
<div class="inventory-card-name" style="color: #b0a04c;">Plátová zbroj</div>
<div class="sell-price-stat" style="color: #b0a04c;">$plateArmorPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="color: #9d8b4d;">+3 DEF</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $hasPlateArmor)[
<p style="color: #6cdb1d !important;">✓ Vlastníš</p>
](else:)[
(if: $gold >= $plateArmorPrice)[
<span class="sell-button">(link: "🛒 Koupit")[
(set: $gold to $gold - $plateArmorPrice)
(set: $hasPlateArmor to true)
(goto: "ShopArmor")
]</span>
](else:)[
<p style="color: #cc5555 !important;">Nemáš dost zlata</p>
]
]
</div>
</div>
</div>
<div style="text-align: center; margin-top: 40px;">
(link-goto: "Zpět do obchodu", "ShopMerchant")<br><br>
(link: "Opustit obchod")[(go-to: $returnPassage)]
</div>
<script>
$(document).ready(function() {
$('.sell-button tw-link').each(function() {
$(this).addClass('sell-link');
});
});
</script>}{<h2 style="text-align: center; color: #b0a04c; font-family: 'Cinzel Decorative', serif; margin-bottom: 20px; text-shadow: 0 0 10px rgba(255,215,0,0.3);">Nákup spotřebních předmětů</h2>
<p style="text-align: center; color: #b0a04c; font-size: 18px; margin-bottom: 10px;">🌙 Zlato: <b>$gold</b></p>
<p style="text-align: center; color: #888; font-style: italic; margin-bottom: 30px; font-family: 'Cinzel', serif;">Vyber si užitečné předměty</p>
<h3 style="color: #9d8b4d; margin: 30px 0 15px 0; font-family: 'Cinzel', serif;">Dostupné předměty</h3>
<div class="inventory-grid">
<!-- LEKTVAR -->
<div class="inventory-card consumable" style="border-color: rgba(176,160,76,0.3);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/y1rymu.png"></div>
<div class="inventory-card-name" style="color: #b0a04c;">Lektvar léčení</div>
<div class="sell-price-stat" style="color: #b0a04c;">$potionPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(40,150,40,0.3); border-color: rgba(100,200,100,0.3); color: #7bc47b;">+10 HP</span>
</div>
<div class="inventory-card-description" style="color: #9d8b4d; font-size: 12px;">Vlastníš: $hasPotion ks</div>
<div class="inventory-card-action">
(if: $gold >= $potionPrice)[
<span class="sell-button">(link: "🛒 Koupit")[
(set: $gold to $gold - $potionPrice)
(set: $hasPotion to $hasPotion + 1)
(goto: "ShopConsumables")
]</span>
](else:)[
<p style="color: #cc5555 !important;">Nemáš dost zlata</p>
]
</div>
</div>
<!-- OBVAZ -->
<div class="inventory-card consumable" style="border-color: rgba(176,160,76,0.3);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/i1mcha.png"></div>
<div class="inventory-card-name" style="color: #b0a04c;">Obvaz</div>
<div class="sell-price-stat" style="color: #b0a04c;">$obvazPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(40,150,40,0.3); border-color: rgba(100,200,100,0.3); color: #7bc47b;">+1 HP</span>
</div>
<div class="inventory-card-description" style="color: #9d8b4d; font-size: 12px;">Vlastníš: $hasObvaz ks</div>
<div class="inventory-card-action">
(if: $gold >= $obvazPrice)[
<span class="sell-button">(link: "🛒 Koupit")[
(set: $gold to $gold - $obvazPrice)
(set: $hasObvaz to $hasObvaz + 1)
(goto: "ShopConsumables")
]</span>
](else:)[
<p style="color: #cc5555 !important;">Nemáš dost zlata</p>
]
</div>
</div>
<!-- KLÍČ -->
<div class="inventory-card consumable (print: ($hasKey ? 'owned-item' : ''))" style="border-color: rgba(176,160,76,0.3);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/1rhk43.png"></div>
<div class="inventory-card-name" style="color: #b0a04c;">Klíč</div>
<div class="sell-price-stat" style="color: #b0a04c;">$keyPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="color: #9d8b4d;">Odemyká dveře</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $hasKey)[
<p style="color: #6cdb1d !important;">✓ Vlastníš</p>
](else:)[
(if: $gold >= $keyPrice)[
<span class="sell-button">(link: "🛒 Koupit")[
(set: $gold to $gold - $keyPrice)
(set: $hasKey to true)
(goto: "ShopConsumables")
]</span>
](else:)[
<p style="color: #cc5555 !important;">Nemáš dost zlata</p>
]
]
</div>
</div>
<!-- MAPA -->
<div class="inventory-card consumable (print: ($hasMap ? 'owned-item' : ''))" style="border-color: rgba(176,160,76,0.3);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/dg5k0s.png"></div>
<div class="inventory-card-name" style="color: #b0a04c;">Mapa</div>
<div class="sell-price-stat" style="color: #b0a04c;">$mapPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="color: #9d8b4d;">Ukazuje cestu</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $hasMap)[
<p style="color: #6cdb1d !important;">✓ Vlastníš</p>
](else:)[
(if: $gold >= $mapPrice)[
<span class="sell-button">(link: "🛒 Koupit")[
(set: $gold to $gold - $mapPrice)
(set: $hasMap to true)
(goto: "ShopConsumables")
]</span>
](else:)[
<p style="color: #cc5555 !important;">Nemáš dost zlata</p>
]
]
</div>
</div>
</div>
<div style="text-align: center; margin-top: 40px;">
(link-goto: "Zpět do obchodu", "ShopMerchant")<br><br>
(link: "Opustit obchod")[(go-to: $returnPassage)]
</div>
<script>
$(document).ready(function() {
$('.sell-button tw-link').each(function() {
$(this).addClass('sell-link');
});
});
</script>}{<h2 style="text-align: center; color: #b0a04c; font-family: 'Cinzel Decorative', serif; margin-bottom: 20px; text-shadow: 0 0 10px rgba(255,215,0,0.3);">Nákup štítů</h2>
<p style="text-align: center; color: #b0a04c; font-size: 18px; margin-bottom: 10px;">🌙 Zlato: <b>$gold</b></p>
<p style="text-align: center; color: #888; font-style: italic; margin-bottom: 30px; font-family: 'Cinzel', serif;">Vyber si štít pro obranu</p>
<h3 style="color: #9d8b4d; margin: 30px 0 15px 0; font-family: 'Cinzel', serif;">Dostupné štíty</h3>
<div class="inventory-grid">
<!-- DŘEVĚNÝ ŠTÍT -->
<div class="inventory-card shield (print: ($hasWoodenShield ? 'owned-item' : ''))" style="border-color: rgba(176,160,76,0.3);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/9cgxs9.png"></div>
<div class="inventory-card-name" style="color: #b0a04c;">Dřevěný štít</div>
<div class="sell-price-stat" style="color: #b0a04c;">$woodenShieldPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="color: #9d8b4d;">+1 DEF</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $hasWoodenShield)[
<p style="color: #6cdb1d !important;">✓ Vlastníš</p>
](else:)[
(if: $gold >= $woodenShieldPrice)[
<span class="sell-button">(link: "🛒 Koupit")[
(set: $gold to $gold - $woodenShieldPrice)
(set: $hasWoodenShield to true)
(goto: "ShopShields")
]</span>
](else:)[
<p style="color: #cc5555 !important;">Nemáš dost zlata</p>
]
]
</div>
</div>
<!-- ŽELEZNÝ ŠTÍT -->
<div class="inventory-card shield (print: ($hasIronShield ? 'owned-item' : ''))" style="border-color: rgba(176,160,76,0.3);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/fg8ccm.png"></div>
<div class="inventory-card-name" style="color: #b0a04c;">Železný štít</div>
<div class="sell-price-stat" style="color: #b0a04c;">$ironShieldPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="color: #9d8b4d;">+2 DEF</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $hasIronShield)[
<p style="color: #6cdb1d !important;">✓ Vlastníš</p>
](else:)[
(if: $gold >= $ironShieldPrice)[
<span class="sell-button">(link: "🛒 Koupit")[
(set: $gold to $gold - $ironShieldPrice)
(set: $hasIronShield to true)
(goto: "ShopShields")
]</span>
](else:)[
<p style="color: #cc5555 !important;">Nemáš dost zlata</p>
]
]
</div>
</div>
<!-- VĚŽOVÝ ŠTÍT -->
<div class="inventory-card shield (print: ($hasTowerShield ? 'owned-item' : ''))" style="border-color: rgba(176,160,76,0.3);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/y8q8tv.png"></div>
<div class="inventory-card-name" style="color: #b0a04c;">Věžový štít</div>
<div class="sell-price-stat" style="color: #b0a04c;">$towerShieldPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="color: #9d8b4d;">+3 DEF</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $hasTowerShield)[
<p style="color: #6cdb1d !important;">✓ Vlastníš</p>
](else:)[
(if: $gold >= $towerShieldPrice)[
<span class="sell-button">(link: "🛒 Koupit")[
(set: $gold to $gold - $towerShieldPrice)
(set: $hasTowerShield to true)
(goto: "ShopShields")
]</span>
](else:)[
<p style="color: #cc5555 !important;">Nemáš dost zlata</p>
]
]
</div>
</div>
</div>
<div style="text-align: center; margin-top: 40px;">
(link-goto: "Zpět do obchodu", "ShopMerchant")<br><br>
(link: "Opustit obchod")[(go-to: $returnPassage)]
</div>
<script>
$(document).ready(function() {
$('.sell-button tw-link').each(function() {
$(this).addClass('sell-link');
});
});
</script>}<script>
setTimeout(function() {
window.scrollTo({
top: 250, // změňte číslo podle potřeby
behavior: 'smooth'
});
}, 100);
</script>
{<h2 style="text-align: center; color: #b0a04c; font-family: 'Cinzel Decorative', serif; margin-bottom: 20px; text-shadow: 0 0 10px rgba(255,215,0,0.3);"></h2>
<p style="text-align: center; color: #b0a04c; font-size: 18px; margin-bottom: 10px;">🌙 Zlato: <b>$gold</b></p>
<p style="text-align: center; color: #888; font-style: italic; margin-bottom: 30px; font-family: 'Cinzel', serif;"></p>
<div class="inventory-grid">
<!-- DÝKA -->
<div class="inventory-card weapon (print: ($hasDagger ? 'owned-item' : ''))" style="border-color: rgba(176,160,76,0.3);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/sk5n4x.png"></div>
<div class="inventory-card-name" style="color: #b0a04c;">Dýka</div>
<div class="sell-price-stat" style="color: #b0a04c;">$daggerPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="color: #9d8b4d;">+1 útok</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $hasDagger)[
<p style="color: #6cdb1d !important;">✓ Vlastníš</p>
](else:)[
(if: $gold >= $daggerPrice)[
<span class="sell-button">(link: "🛒 Koupit")[
(set: $gold to $gold - $daggerPrice)
(set: $hasDagger to true)
(goto: "ShopWeapons")
]</span>
](else:)[
<p style="color: #cc5555 !important;">Nemáš dost zlata</p>
]
]
</div>
</div>
<!-- KVALITNÍ DÝKA -->
<div class="inventory-card weapon (print: ($hasDaggerQuality ? 'owned-item' : ''))" style="border-color: rgba(135,206,235,0.4);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/2olwuv.png"></div>
<div class="inventory-card-name" style="color: #87ceeb;">Kvalitní dýka</div>
<div class="sell-price-stat" style="color: #b0a04c;">$daggerQualityPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="color: #9d8b4d;">+1 útok</span>
<span class="inventory-card-stat" style="color: #9d8b4d;">+1 kondice</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $hasDaggerQuality)[
<p style="color: #6cdb1d !important;">✓ Vlastníš</p>
](else:)[
(if: $gold >= $daggerQualityPrice)[
<span class="sell-button">(link: "🛒 Koupit")[
(set: $gold to $gold - $daggerQualityPrice)
(set: $hasDaggerQuality to true)
(goto: "ShopWeapons")
]</span>
](else:)[
<p style="color: #cc5555 !important;">Nemáš dost zlata</p>
]
]
</div>
</div>
<!-- MEČ -->
<div class="inventory-card weapon (print: ($hasSwordInv ? 'owned-item' : ''))" style="border-color: rgba(176,160,76,0.3);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/l90kma.png"></div>
<div class="inventory-card-name" style="color: #b0a04c;">Meč</div>
<div class="sell-price-stat" style="color: #b0a04c;">$swordPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="color: #9d8b4d;">+2 útok</span>
<span class="inventory-card-stat" style="color: #9d8b4d;">+1 kondice</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $hasSwordInv)[
<p style="color: #6cdb1d !important;">✓ Vlastníš</p>
](else:)[
(if: $gold >= $swordPrice)[
<span class="sell-button">(link: "🛒 Koupit")[
(set: $gold to $gold - $swordPrice)
(set: $hasSwordInv to true)
(goto: "ShopWeapons")
]</span>
](else:)[
<p style="color: #cc5555 !important;">Nemáš dost zlata</p>
]
]
</div>
</div>
<!-- MISTROVSKÝ MEČ -->
<div class="inventory-card weapon (print: ($hasSwordMaster ? 'owned-item' : ''))" style="border-color: rgba(147,112,219,0.4);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/h2pl87.png"></div>
<div class="inventory-card-name" style="color: #9370db;">Mistrovský meč</div>
<div class="sell-price-stat" style="color: #b0a04c;">$swordMasterPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="color: #9d8b4d;">+2 útok</span>
<span class="inventory-card-stat" style="color: #9d8b4d;">+2 kondice</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $hasSwordMaster)[
<p style="color: #6cdb1d !important;">✓ Vlastníš</p>
](else:)[
(if: $gold >= $swordMasterPrice)[
<span class="sell-button">(link: "🛒 Koupit")[
(set: $gold to $gold - $swordMasterPrice)
(set: $hasSwordMaster to true)
(goto: "ShopWeapons")
]</span>
](else:)[
<p style="color: #cc5555 !important;">Nemáš dost zlata</p>
]
]
</div>
</div>
<!-- SEKERA -->
<div class="inventory-card weapon (print: ($hasAxe ? 'owned-item' : ''))" style="border-color: rgba(176,160,76,0.3);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/8ryt3d.png"></div>
<div class="inventory-card-name" style="color: #b0a04c;">Sekera</div>
<div class="sell-price-stat" style="color: #b0a04c;">$axePrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="color: #9d8b4d;">+3 útok</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $hasAxe)[
<p style="color: #6cdb1d !important;">✓ Vlastníš</p>
](else:)[
(if: $gold >= $axePrice)[
<span class="sell-button">(link: "🛒 Koupit")[
(set: $gold to $gold - $axePrice)
(set: $hasAxe to true)
(goto: "ShopWeapons")
]</span>
](else:)[
<p style="color: #cc5555 !important;">Nemáš dost zlata</p>
]
]
</div>
</div>
<!-- VÁLEČNÁ SEKERA -->
<div class="inventory-card weapon (print: ($hasAxeWar ? 'owned-item' : ''))" style="border-color: rgba(255,99,71,0.4);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/hm88l5.png"></div>
<div class="inventory-card-name" style="color: #ff6347;">Válečná sekera</div>
<div class="sell-price-stat" style="color: #b0a04c;">$axeWarPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="color: #9d8b4d;">+3 útok</span>
<span class="inventory-card-stat" style="color: #9d8b4d;">+1 kondice</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $hasAxeWar)[
<p style="color: #6cdb1d !important;">✓ Vlastníš</p>
](else:)[
(if: $gold >= $axeWarPrice)[
<span class="sell-button">(link: "🛒 Koupit")[
(set: $gold to $gold - $axeWarPrice)
(set: $hasAxeWar to true)
(goto: "ShopWeapons")
]</span>
](else:)[
<p style="color: #cc5555 !important;">Nemáš dost zlata</p>
]
]
</div>
</div>
<!-- OBOURUČNÍ MEČ -->
<div class="inventory-card weapon (print: ($hasGreatsword ? 'owned-item' : ''))" style="border-color: rgba(255,100,100,0.4);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/s2v3y5.png"></div>
<div class="inventory-card-name" style="color: #ff6b6b;">Obouruční meč</div>
<div class="sell-price-stat" style="color: #b0a04c;">$greatswordPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="color: #9d8b4d;">+3 útok</span>
<span class="inventory-card-stat" style="color: #9d8b4d;">+2 kondice</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $hasGreatsword)[
<p style="color: #6cdb1d !important;">✓ Vlastníš</p>
](else:)[
(if: $gold >= $greatswordPrice)[
<span class="sell-button">(link: "🛒 Koupit")[
(set: $gold to $gold - $greatswordPrice)
(set: $hasGreatsword to true)
(goto: "ShopWeapons")
]</span>
](else:)[
<p style="color: #cc5555 !important;">Nemáš dost zlata</p>
]
]
</div>
</div>
<!-- ZVLNĚNÝ MEČ (LEGENDARY) -->
<div class="inventory-card weapon (print: ($hasGreatswordLegendary ? 'owned-item' : ''))" style="border-color: rgba(255,215,0,0.5); box-shadow: 0 8px 20px rgba(0,0,0,0.4), 0 0 20px rgba(255,215,0,0.2);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/vf3p07.png" style="filter: drop-shadow(0 0 10px rgba(255,215,0,0.4));"></div>
<div class="inventory-card-name" style="color: #b0a04c; text-shadow: 0 0 8px rgba(255,215,0,0.5);">Zvlněný meč</div>
<div class="sell-price-stat" style="color: #b0a04c;">$greatswordLegendaryPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="color: #9d8b4d;">+3 útok</span>
<span class="inventory-card-stat" style="color: #9d8b4d;">+3 kondice</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $hasGreatswordLegendary)[
<p style="color: #6cdb1d !important;">✓ Vlastníš</p>
](else:)[
(if: $gold >= $greatswordLegendaryPrice)[
<span class="sell-button">(link: "🛒 Koupit")[
(set: $gold to $gold - $greatswordLegendaryPrice)
(set: $hasGreatswordLegendary to true)
(goto: "ShopWeapons")
]</span>
](else:)[
<p style="color: #cc5555 !important;">Nemáš dost zlata</p>
]
]
</div>
</div>
</div>
<div style="text-align: center; margin-top: 40px;">
(link-goto: "Zpět do obchodu", "ShopMerchant")<br><br>
(link: "Opustit obchod")[(go-to: $returnPassage)]
</div>
<div id="stred-pasaze"></div>
<script>
$(document).ready(function() {
$('.sell-button tw-link').each(function() {
$(this).addClass('sell-link');
});
});
</script>}{
<!-- ⭐ DEBUG DIV S PORTRAIT URL -->
<div style="display:none;" id="debug-portrait-url">(print: $portraitURL)</div>
<script>
(function() {
var attempts = 0;
var maxAttempts = 20;
function tryLoadPortrait() {
attempts++;
var debugDiv = document.getElementById('debug-portrait-url');
var heroURL = '';
if (debugDiv && debugDiv.textContent.trim() !== '') {
heroURL = debugDiv.textContent.trim();
console.log('✅ Načteno z debug div:', heroURL);
} else if (typeof State !== 'undefined' && State.variables && State.variables.portraitURL) {
heroURL = State.variables.portraitURL;
console.log('✅ Načteno z State.variables:', heroURL);
}
if (!heroURL || heroURL === '' || heroURL.length < 10) {
if (attempts < maxAttempts) {
console.log('⏳ Čekám na portraitURL... pokus', attempts);
setTimeout(tryLoadPortrait, 100);
return;
} else {
console.error('❌ portraitURL nenalezena po', maxAttempts, 'pokusech!');
heroURL = 'https://files.catbox.moe/hs2gd7.jpg';
}
}
console.log('🎨 POUŽIJU URL:', heroURL);
var heroBg = document.querySelector('.hero-portrait-background');
if (heroBg) {
heroBg.style.backgroundImage = "url('" + heroURL + "')";
console.log('✅ Portrét aplikován!');
} else {
console.error('❌ .hero-portrait-background nenalezen!');
if (attempts < maxAttempts) {
setTimeout(tryLoadPortrait, 100);
}
}
}
setTimeout(tryLoadPortrait, 200);
})();
</script>
<!-- obrazek balicku, balicek, balíček-->
<img src="https://files.catbox.moe/owx671.png"
style="
position: fixed;
right: 150px;
bottom: 0px;
width: 280px;
border-radius: 0px;
z-index: 5;
pointer-events: none;
">
<!-- NEVIDITELNÁ HOVER OBLAST PRO HP -->
<div class="bhud-hover-area-hp">
<div class="bhud-tooltip hp-bubble">
<h5> (print: $hp)</h5> <h6> (print: $maxHp)</h6>
</div>
<div class="bhud-tooltip stamina-bubble">
<h5> (print: $stamina) </h5><h6>(print: $maxStamina)</h6>
</div>
</div>
<!-- NEVIDITELNÁ HOVER OBLAST PRO STAMINA -->
<div class="bhud-hover-area-stamina">
<div class="bhud-tooltip hp-bubble">
<h5> (print: $hp) </h5><h6> (print: $maxHp)</h6>
</div>
<div class="bhud-tooltip stamina-bubble">
<h5> (print: $stamina)</h5><h6> (print: $maxStamina)</h6>
</div>
</div>
<div class="battle-cards-overlay">
<!-- HRÁČOVA KARTA -->
<div class="battle-card-wrapper battle-card-hero" id="heroCardBox" style="position: fixed; bottom: 20px; left: 20px;">
<div class="portrait-plus-icon"></div> <!-- ← BEZ TEXTU, JEN PRÁZDNÝ DIV -->
<div class="battle-character-card hero-card">
<div class="hero-portrait-background"></div>
<div class="skull-overlay" id="heroSkullOverlay"></div>
<!-- ☠️ NOVÝ: POISON OVERLAY PRO HRÁČE -->
<div class="poison-overlay" id="heroPoisonOverlay"></div>
<div class="card-content-wrapper">
<div class="card-character-name" style="color: #d1b66b;"></div>
<div class="card-character-stats">
<div class="stat-row">
<span class="stat-label">Životy:</span>
<span class="stat-value">(print: $hp)</span>
</div>
<div class="stat-row">
<span class="stat-label">Umění boje:</span>
<span class="stat-value">(print: $umeni)</span>
</div>
<div class="stat-row">
<span class="stat-label">Kondice:</span>
<span class="stat-value">(print: $stamina)/(print: $maxStamina)</span>
</div>
</div>
</div>
</div>
</div>
<!-- NEPŘÁTELSKÁ KARTA -->
<div class="battle-card-wrapper battle-card-enemy" id="enemyCardBox" style="position: fixed; bottom: 20px; right: 20px;">
<div class="portrait-plus-icon"></div> <!-- ← BEZ TEXTU, JEN PRÁZDNÝ DIV -->
<div class="battle-character-card enemy-card">
<div class="enemy-portrait-background"></div>
<div class="skull-overlay" id="enemySkullOverlay"></div>
<!-- ☠️ NOVÝ: POISON OVERLAY PRO NEPŘÍTELE -->
<div class="poison-overlay" id="enemyPoisonOverlay"></div>
<div class="card-content-wrapper">
<div class="card-character-name" style="color: #d1b66b;"></div>
<div class="card-character-stats">
<div class="stat-row">
<span class="stat-label">Životy:</span>
<span class="stat-value">(print: $enemyHP)</span>
</div>
<div class="stat-row">
<span class="stat-label">Umění boje:</span>
<span class="stat-value">(print: $umeni)</span>
</div>
<div class="stat-row">
<span class="stat-label">Kondice:</span>
<span class="stat-value">nízká</span>
</div>
</div>
</div>
</div>
</div>
<div id="centerImageWrapper" style="position: fixed; top: 44%; left: 50%; transform: translate(-75%, -80%); z-index: 1; pointer-events: none; width: 1250px; height: 350px; opacity: 0.5;">
<img src="https://files.catbox.moe/6d7yl1.png" alt=" stul, crack, stůl, obrazek, Centrální bojový obrázek" style="width: 150%; height: 150%; object-fit: contain;">
</div>
</div>
}
<!-- ZBYTEK KÓDU POKRAČUJE... (animace zásahů atd.) -->
{(live: 0.1s)[
(if: $lastPlayerHitCounter is 0)[(set: $lastPlayerHitCounter to 0)]
(if: $lastEnemyHitCounter is 0)[(set: $lastEnemyHitCounter to 0)]
(if: $playerHitCounter > $lastPlayerHitCounter)[
(set: $lastPlayerHitCounter to $playerHitCounter)
<script>
(function() {
var heroCard = document.getElementById('heroCardBox');
if (heroCard) {
var heroCardElement = heroCard.querySelector('.battle-character-card');
if (heroCardElement) {
heroCardElement.classList.add('card-shake');
setTimeout(function() {
heroCardElement.classList.remove('card-shake');
}, 1200);
}
for (var i = 0; i < 1; i++) {
(function(index) {
setTimeout(function() {
var ghost = document.createElement('div');
ghost.className = 'ghost-spirit ghost-spirit-' + (index + 1);
ghost.style.left = (1 + Math.random() * 10) + '%';
ghost.style.top = (1 + Math.random() * 20) + '%';
var randomAngle = Math.random() * Math.PI * 2;
var randomDistance = 60 + Math.random() * 50;
var randomDx = Math.cos(randomAngle) * randomDistance;
var randomDy = Math.sin(randomAngle) * randomDistance - 40;
ghost.style.setProperty('--ghost-dx', randomDx + 'px');
ghost.style.setProperty('--ghost-dy', randomDy + 'px');
ghost.style.animation = 'ghostFloatRandom 3.5s ease-out forwards, ghostFlicker 0.3s infinite';
ghost.style.animationDelay = (Math.random() * 0.2) + 's';
heroCard.appendChild(ghost);
setTimeout(function() { ghost.remove(); }, 3600);
}, index * 400);
})(i);
}
for (var i = 0; i < 30; i++) {
var particle = document.createElement('div');
particle.className = 'battle-particle hero-particle';
particle.style.left = (Math.random() * 100) + '%';
particle.style.top = (Math.random() * 40) + '%';
particle.style.animationDelay = (Math.random() * 0.3) + 's';
heroCardElement.appendChild(particle);
(function(p) {
setTimeout(function() { p.remove(); }, 3000);
})(particle);
}
for (var i = 0; i < 16; i++) {
var spark = document.createElement('div');
spark.className = 'battle-spark';
var side = Math.floor(Math.random() * 4);
var pos = Math.random() * 100;
if (side === 0) {
spark.style.left = pos + '%';
spark.style.top = '0';
spark.style.setProperty('--dx', (Math.random() - 0.5) * 200);
spark.style.setProperty('--dy', -Math.random() * 150 - 50);
} else if (side === 1) {
spark.style.right = '0';
spark.style.top = pos + '%';
spark.style.setProperty('--dx', Math.random() * 150 + 50);
spark.style.setProperty('--dy', (Math.random() - 0.5) * 200);
} else if (side === 2) {
spark.style.left = pos + '%';
spark.style.bottom = '0';
spark.style.setProperty('--dx', (Math.random() - 0.5) * 200);
spark.style.setProperty('--dy', Math.random() * 150 + 50);
} else {
spark.style.left = '0';
spark.style.top = pos + '%';
spark.style.setProperty('--dx', -Math.random() * 150 - 50);
spark.style.setProperty('--dy', (Math.random() - 0.5) * 200);
}
spark.style.animationDelay = (Math.random() * 0.2) + 's';
heroCard.appendChild(spark);
(function(s) {
setTimeout(function() { s.remove(); }, 1500);
})(spark);
}
}
})();
</script>
]
(if: $enemyHitCounter > $lastEnemyHitCounter)[
(set: $lastEnemyHitCounter to $enemyHitCounter)
<script>
(function() {
var enemyCard = document.getElementById('enemyCardBox');
if (enemyCard) {
var enemyCardElement = enemyCard.querySelector('.battle-character-card');
if (enemyCardElement) {
enemyCardElement.classList.add('card-shake');
setTimeout(function() {
enemyCardElement.classList.remove('card-shake');
}, 1200);
}
for (var i = 0; i < 1; i++) {
(function(index) {
setTimeout(function() {
var ghost = document.createElement('div');
ghost.className = 'ghost-spirit ghost-spirit-' + ((index % 2) + 1);
ghost.style.left = (1 + Math.random() * 10) + '%';
ghost.style.top = (1 + Math.random() * 20) + '%';
var randomAngle = Math.random() * Math.PI * 2;
var randomDistance = 60 + Math.random() * 50;
var randomDx = Math.cos(randomAngle) * randomDistance;
var randomDy = Math.sin(randomAngle) * randomDistance - 40;
ghost.style.setProperty('--ghost-dx', randomDx + 'px');
ghost.style.setProperty('--ghost-dy', randomDy + 'px');
ghost.style.animation = 'ghostFloatRandom 3.5s ease-out forwards, ghostFlicker 0.3s infinite';
ghost.style.animationDelay = (Math.random() * 0.2) + 's';
enemyCard.appendChild(ghost);
setTimeout(function() { ghost.remove(); }, 3600);
}, index * 400);
})(i);
}
for (var i = 0; i < 30; i++) {
var particle = document.createElement('div');
particle.className = 'battle-particle enemy-particle';
particle.style.left = (Math.random() * 100) + '%';
particle.style.top = (Math.random() * 40) + '%';
particle.style.animationDelay = (Math.random() * 0.3) + 's';
enemyCardElement.appendChild(particle);
(function(p) {
setTimeout(function() { p.remove(); }, 3000);
})(particle);
}
for (var i = 0; i < 16; i++) {
var spark = document.createElement('div');
spark.className = 'battle-spark';
var side = Math.floor(Math.random() * 4);
var pos = Math.random() * 100;
if (side === 0) {
spark.style.left = pos + '%';
spark.style.top = '0';
spark.style.setProperty('--dx', (Math.random() - 0.5) * 150);
spark.style.setProperty('--dy', -Math.random() * 150 - 50);
} else if (side === 1) {
spark.style.right = '0';
spark.style.top = pos + '%';
spark.style.setProperty('--dx', Math.random() * 150 + 50);
spark.style.setProperty('--dy', (Math.random() - 0.5) * 150);
} else if (side === 2) {
spark.style.left = pos + '%';
spark.style.bottom = '0';
spark.style.setProperty('--dx', (Math.random() - 0.5) * 150);
spark.style.setProperty('--dy', Math.random() * 150 + 50);
} else {
spark.style.left = '0';
spark.style.top = pos + '%';
spark.style.setProperty('--dx', -Math.random() * 150 - 50);
spark.style.setProperty('--dy', (Math.random() - 0.5) * 150);
}
spark.style.animationDelay = (Math.random() * 0.2) + 's';
enemyCard.appendChild(spark);
(function(s) {
setTimeout(function() { s.remove(); }, 1500);
})(spark);
}
}
})();
</script>
]
]}
<!-- ═══════════════════════════════════════════════════════════ -->
<!-- CSS STYLY -->
<!-- ═══════════════════════════════════════════════════════════ -->
<style>
/* ☠️ POISON OVERLAY - ZELENÝ PRŮHLEDNÝ OBDÉLNÍK */
.poison-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: linear-gradient(135deg,
rgba(0, 255, 0, 0.2) 0%,
rgba(50, 205, 50, 0.3) 50%,
rgba(0, 128, 0, 0.4) 100%);
border-radius: 3px;
z-index: 0.6;
opacity: 0;
transition: opacity 0.5s ease;
pointer-events: none;
box-shadow: inset 0 0 30px rgba(0, 255, 0, 0.3);
overflow: hidden;
}
/* Pulsující animace pro poison */
.poison-overlay.active {
opacity: 1;
animation: poisonPulse 2s ease-in-out infinite;
}
@keyframes poisonPulse {
0%, 100% {
opacity: 0.5;
box-shadow: inset 0 0 30px rgba(0, 255, 0, 0.3);
}
50% {
opacity: 0.7;
box-shadow: inset 0 0 50px rgba(0, 255, 0, 0.5);
}
}
/* 🫧 ZELENÉ BUBLINY V POISON OVERLAY */
.poison-overlay::before {
content: "";
position: absolute;
top: 60%;
left: 20%;
width: 10px;
height: 10px;
background: rgba(0, 255, 0, 0.5);
border-radius: 50%;
box-shadow: 0 0 10px rgba(0, 255, 0, 0.6);
z-index: 2;
animation: bubble-rise-1 3s infinite ease-in-out;
}
.poison-overlay::after {
content: "";
position: absolute;
top: 70%;
right: 25%;
width: 14px;
height: 14px;
background: rgba(50, 255, 50, 0.6);
border-radius: 50%;
box-shadow: 0 0 12px rgba(50, 255, 50, 0.7);
animation: bubble-rise-2 3.5s infinite ease-in-out 0.8s;
}
@keyframes bubble-rise-1 {
0% {
transform: translateY(0) scale(1);
opacity: 0;
}
10% {
opacity: 0.8;
}
90% {
opacity: 0.8;
}
100% {
transform: translateY(-280px) scale(0.3);
opacity: 0;
}
}
@keyframes bubble-rise-2 {
0% {
transform: translateY(0) scale(1);
opacity: 0;
}
10% {
opacity: 0.7;
}
90% {
opacity: 0.7;
}
100% {
transform: translateY(-300px) scale(0.4);
opacity: 0;
}
}
@keyframes bubble-rise-3 {
0% {
transform: translateY(0) scale(1);
opacity: 0;
}
10% {
opacity: 0.6;
}
90% {
opacity: 0.6;
}
100% {
transform: translateY(-260px) scale(0.5);
opacity: 0;
}
}
@keyframes bubble-rise-4 {
0% {
transform: translateY(0) scale(1);
opacity: 0;
}
10% {
opacity: 0.8;
}
90% {
opacity: 0.8;
}
100% {
transform: translateY(-290px) scale(0.2);
opacity: 0;
}
}
@keyframes bubble-rise-5 {
0% {
transform: translateY(0) scale(1);
opacity: 0;
}
10% {
opacity: 0.7;
}
90% {
opacity: 0.7;
}
100% {
transform: translateY(-270px) scale(0.35);
opacity: 0;
}
}
/* ⭐ NOVÝ STYL: Pozadí portrétu jako absolute div */
.hero-portrait-background,
.enemy-portrait-background {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 110%;
background-size: cover;
background-position: center;
border-radius: 3px;
z-index: 0;
}
/* Obsah karty musí být nad pozadím */
.card-content-wrapper {
position: relative;
z-index: 1;
}
/* Battle cards overlay */
.battle-cards-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 110%;
pointer-events: none;
z-index: 1;
}
.battle-card-wrapper {
position: fixed;
top: 55%;
transform: translateY(-65%);
max-width: 250px;
width: 28vw;
}
#heroCardBox {
left: 10px;
}
#enemyCardBox {
right: 100px;
}
.battle-character-card {
position: relative;
background: linear-gradient(135deg, rgba(40, 30, 20, 0.7), rgba(60, 45, 30, 0.7));
border: 3px solid #8b6914;
border-radius: 3px;
padding: 15px;
box-shadow:
0 8px 20px rgba(0, 0, 0, 0.6),
inset 0 0 20px rgba(139, 105, 20, 0.2);
transition: all 0.3s ease;
z-index: 2;
min-height: 300px;
display: flex;
flex-direction: column;
justify-content: flex-end;
overflow: hidden;
}
.battle-character-card::before,
.battle-character-card::after {
content: '';
position: absolute;
width: 20px;
height: 20px;
border: 2px solid #ffd700;
z-index: 2;
}
.battle-character-card::before {
top: 8px;
left: 8px;
border-right: none;
border-bottom: none;
}
.battle-character-card::after {
bottom: 8px;
right: 8px;
border-left: none;
border-top: none;
}
.hero-card {
border-color: #8b6914;
}
.hero-card::before,
.hero-card::after {
border-color: #edcb64;
}
.enemy-card {
border-color: #5c411c;
}
.enemy-card::before,
.enemy-card::after {
border-color: #ff6b6b;
}
.card-character-name {
font-size: 24px;
font-weight: bold;
text-align: center;
margin-bottom: 10px;
font-family: 'Cinzel Decorative', serif;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);
}
.card-character-stats {
background: rgba(0, 0, 0, 0.2);
padding: 10px;
border-radius: 3px;
border: 1px solid rgba(139, 105, 20, 0.2);
}
.stat-row {
display: flex;
justify-content: space-between;
padding: 5px 0;
font-family: 'Cinzel', serif;
}
.stat-label {
color: #c9a961;
font-weight: 600;
}
.stat-value {
color: #ffd700;
font-weight: bold;
}
/* 🔥 RUDÉ JISKRY */
.battle-spark {
position: absolute;
width: 6px;
height: 15px;
background: radial-gradient(circle,
rgba(139, 0, 0, 1) 0%,
rgba(100, 0, 0, 1) 40%,
rgba(80, 0, 0, 0.9) 70%,
rgba(60, 0, 0, 0.6) 100%);
border-radius: 50%;
pointer-events: none;
animation: sparkFly 5s ease-out forwards;
box-shadow:
0 0 10px rgba(139, 0, 0, 0.8),
0 0 20px rgba(100, 0, 0, 0.6),
0 0 30px rgba(80, 0, 0, 0.4);
z-index: 101;
}
/* 🩸 ODLEHČENÉ KRVAVÉ KAPKY */
.battle-particle {
position: absolute;
width: 5px;
height: 9px;
border-radius: 50% 50% 50% 0;
pointer-events: none;
animation: bloodDrip 2.2s ease-out forwards;
z-index: 100;
}
.battle-particle::before {
content: '';
position: absolute;
top: -15px;
left: 50%;
transform: translateX(-35%);
width: 2px;
height: 0;
background: linear-gradient(to bottom,
transparent 0%,
rgba(139, 0, 0, 0.6) 15%,
rgba(100, 0, 0, 0.8) 100%);
animation: bloodTrail 2.2s ease-out forwards;
}
@keyframes bloodDrip {
0% {
transform: translateY(-40px) scale(1);
opacity: 1;
}
100% {
transform: translateY(50px) scale(0.8);
opacity: 0;
}
}
@keyframes bloodTrail {
0% { height: 0; opacity: 0; }
30% { height: 20px; opacity: 0.7; }
100% { height: 40px; opacity: 0; }
}
.sword-slash {
position: absolute;
width: 120%;
height: 120%;
top: -10%;
left: 50%;
background-image: url('https://files.catbox.moe/d1wgar.png');
background-size: contain;
background-repeat: no-repeat;
background-position: center;
pointer-events: none;
z-index: 150;
mix-blend-mode: screen;
opacity: 0.2;
filter: brightness(0.8);
}
.slash-1 {
animation: slashDiagonal 2.6s ease-out forwards;
}
.slash-2 {
animation: slashHorizontal 2.6s ease-out forwards;
}
@keyframes slashDiagonal {
0% {
opacity: 0;
transform: translateX(-100%) translateY(-50%) rotate(-45deg) scale(0.5);
}
30% {
opacity: 1;
}
100% {
opacity: 0;
transform: translateX(100%) translateY(50%) rotate(-45deg) scale(1.5);
}
}
@keyframes slashHorizontal {
0% {
opacity: 0;
transform: translateX(-100%) translateY(-25%) scaleX(1);
}
30% {
opacity: 1;
}
100% {
opacity: 0;
transform: translateX(250%) translateY(-25%) scaleX(1);
}
}
.card-shake {
animation: card-shake 0.5s ease-in-out;
}
@keyframes card-shake {
0%, 100% { transform: translateX(0); }
10%, 30%, 50%, 70%, 90% { transform: translateX(-5px); }
20%, 40%, 60%, 80% { transform: translateX(5px); }
}
/* 💀 ANIMACE SMRTI - NEPŘÍTEL */
.enemy-dissolve {
background: none !important;
border: none !important;
box-shadow: none !important;
pointer-events: none !important;
z-index: 9999 !important;
overflow: visible !important;
}
.enemy-dissolve .enemy-portrait-background,
.enemy-dissolve .card-content-wrapper {
display: none !important;
}
.enemy-dissolve::before,
.enemy-dissolve::after {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-image: url('https://files.catbox.moe/tterwt.jpg') !important;
background-size: cover;
background-position: center;
border: 2px solid #ff4444;
opacity: 1;
box-shadow: 0 0 20px #ff0000;
z-index: 10;
}
.enemy-dissolve::before {
clip-path: polygon(0% 0%, 55% 0%, 45% 100%, 0% 100%);
animation: enemyCardExplodeLeft 2.5s ease-out forwards !important;
}
.enemy-dissolve::after {
clip-path: polygon(55% 0%, 100% 0%, 100% 100%, 45% 100%);
animation: enemyCardExplodeRight 2.5s ease-out forwards !important;
}
@keyframes enemyCardExplodeLeft {
0% {
opacity: 1;
transform: scale(1) rotate(0deg);
clip-path: polygon(0% 0%, 55% 0%, 45% 100%, 0% 100%);
filter: brightness(1);
}
100% {
opacity: 0;
transform: translate(-250px, -150px) rotate(-40deg) scale(0.3);
filter: blur(10px) brightness(2);
}
}
@keyframes enemyCardExplodeRight {
0% {
opacity: 1;
transform: scale(1) rotate(0deg);
clip-path: polygon(55% 0%, 100% 0%, 100% 100%, 45% 100%);
filter: brightness(1);
}
100% {
opacity: 0;
transform: translate(250px, -100px) rotate(40deg) scale(0.3);
filter: blur(10px) brightness(2);
}
}
/* 💀 ANIMACE SMRTI - HRÁČ */
.hero-dissolve {
background: none !important;
border: none !important;
box-shadow: none !important;
pointer-events: none !important;
z-index: 9999 !important;
overflow: visible !important;
}
.hero-dissolve .hero-portrait-background,
.hero-dissolve .card-content-wrapper {
display: none !important;
}
.hero-dissolve::before,
.hero-dissolve::after {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-image: url('https://files.catbox.moe/tterwt.jpg') !important;
background-size: cover;
background-position: center;
border: 2px solid #8b6914;
opacity: 1;
box-shadow: 0 0 20px #8b6914;
z-index: 10;
}
.hero-dissolve::before {
clip-path: polygon(0% 0%, 55% 0%, 45% 100%, 0% 100%);
animation: heroCardExplodeLeft 2.5s ease-out forwards !important;
}
.hero-dissolve::after {
clip-path: polygon(55% 0%, 100% 0%, 100% 100%, 45% 100%);
animation: heroCardExplodeRight 2.5s ease-out forwards !important;
}
@keyframes heroCardExplodeLeft {
0% {
opacity: 1;
transform: scale(1) rotate(0deg);
clip-path: polygon(0% 0%, 55% 0%, 45% 100%, 0% 100%);
filter: brightness(1);
}
100% {
opacity: 0;
transform: translate(-250px, -150px) rotate(-40deg) scale(0.3);
filter: blur(10px) brightness(2);
}
}
@keyframes heroCardExplodeRight {
0% {
opacity: 1;
transform: scale(1) rotate(0deg);
clip-path: polygon(55% 0%, 100% 0%, 100% 100%, 45% 100%);
filter: brightness(1);
}
100% {
opacity: 0;
transform: translate(250px, -100px) rotate(40deg) scale(0.3);
filter: blur(10px) brightness(2);
}
}
/* 💀 LEBKA OVERLAY - ROLETKA */
.skull-overlay {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 0%;
background-image: url('https://files.catbox.moe/6nl3mj.jpg');
background-size: cover;
background-position: bottom;
z-index: 0.5; /* ⭐ VRÁCENO NA PŮVODNÍ HODNOTU */
transition: height 0.5s ease;
overflow: visible;
border-radius: 3px;
/* ⭐ KOMPLETNÍ IGNOROVÁNÍ MYŠI */
pointer-events: none;
}
/* 🌟 ČISTÝ GLOW EFEKT (NEKLIKATELNÝ) */
.skull-overlay::before {
content: "";
position: absolute;
top: -2px;
left: 0;
width: 100%;
height: 120px; /* Hluboký gradient pro jemnost */
/* Gradient pouze v červené barvě (z 1.0 do 0.0 průhlednosti) */
background: linear-gradient(to bottom,
rgba(255, 0, 0, 1.0) 0%,
rgba(255, 0, 0, 0.4) 10%,
rgba(255, 0, 0, 0.1) 50%,
rgba(255, 0, 0, 0) 100%
);
/* Záře nad hranu bez černé tmy */
filter: drop-shadow(0px -2px 5px rgba(255, 0, 0, 0.7));
/* ⭐ POJISTKA PRO KLIKÁNÍ */
pointer-events: none;
z-index: 1;
animation: simpleGlow 1.5s ease-in-out infinite alternate;
}
@keyframes simpleGlow {
from {
opacity: 0.4;
filter: drop-shadow(0px -2px 3px rgba(255, 0, 0, 0.1));
}
to {
opacity: 0.8;
filter: drop-shadow(0px -2px 8px rgba(255, 0, 0, 0.3));
}
}
/* 👻 DUCHOVÉ - STYLY */
.ghost-spirit {
position: absolute;
top: -50px;
left: -50px;
width: 280px;
height: 280px;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
pointer-events: none;
z-index: 150;
opacity: 0.5;
filter: brightness(1.2);
}
.ghost-spirit-1 {
background-image: url('https://files.catbox.moe/v2fefp.png');
}
.ghost-spirit-2 {
background-image: url('https://files.catbox.moe/4xiqm6.png');
}
@keyframes ghostFloatRandom {
0% {
opacity: 0;
transform: translate(0, 0) scale(0.1);
}
15% {
opacity: 1;
transform: translate(calc(var(--ghost-dx) * 0.15), calc(var(--ghost-dy) * 0.15)) scale(1);
}
100% {
opacity: 0;
transform: translate(var(--ghost-dx), var(--ghost-dy)) scale(1.2);
}
}
/* ═══════════════════════════════════════════════════════════ */
/* NEVIDITELNÉ HOVER OBLASTI PRO HP A STAMINU */
/* ═══════════════════════════════════════════════════════════ */
/* NEVIDITELNÁ FIXNÍ HOVER OBLAST - HP */
.bhud-hover-area-hp {
position: fixed;
bottom: 15px;
left: 500px;
width: 80px;
height: 260px;
z-index: 9999;
cursor: pointer;
/* DOČASNĚ - abys viděl kde je */
border: 0px dashed red;
background: rgba(255, 0, 0, 0.0);
}
/* NEVIDITELNÁ FIXNÍ HOVER OBLAST - STAMINA */
.bhud-hover-area-stamina {
position: fixed;
bottom: 15px;
left: 1360px;
width: 80px;
height: 260px;
z-index: 9999;
cursor: pointer;
/* DOČASNĚ - abys viděl kde je */
border: 0px dashed blue;
background: rgba(0, 0, 255, 0.0);
}
/* Tooltip bubliny - NOVÝ STYL */
.bhud-tooltip {
position: absolute;
opacity: 0;
visibility: hidden;
/* Vzhled bubliny */
background: linear-gradient(135deg, rgba(247, 227, 183, 1) 0%, rgba(207, 189, 151, 1) 100%);
color: #000000;
font-weight: 500;
padding: 10px 16px;
border-radius: 1px;
white-space: nowrap;
font-size: 0.9em;
/* Stíny a ohraničení */
border: 1px solid rgba(201, 146, 6, 0.8);
box-shadow: 0 4px 12px rgba(0,0,0,0.1), 0 1px 8px rgba(197, 160, 40, 0.2);
/* Animace */
transition: all 0.3s ease;
z-index: 1000;
pointer-events: none;
transform: scale(1.2);
}
/* HP bublina - VŽDY u červené oblasti (vlevo od červené) */
.bhud-hover-area-hp .hp-bubble {
top: 20px;
right: 90px;
transform: scale(1.2);
z-index: 9999;
}
/* Stamina bublina v červené oblasti - zobrazí se U MODRÉ (musíme ji posunout) */
.bhud-hover-area-hp .stamina-bubble {
top: 20px;
left: 950px; /* Posun doprava k modré oblasti */
transform: scale(1.2);
z-index: 9999;
}
/* HP bublina v modré oblasti - zobrazí se U ČERVENÉ (musíme ji posunout) */
.bhud-hover-area-stamina .hp-bubble {
top: 20px;
right: 950px; /* Posun doleva k červené oblasti */
transform: scale(1.2);
z-index: 9999;
}
/* Stamina bublina - VŽDY u modré oblasti (vpravo od modré) */
.bhud-hover-area-stamina .stamina-bubble {
top: 20px;
left: 90px;
transform: scale(1.2);
z-index: 9999;
}
/* Šipky pro HP bublinu - VŽDY doprava (u červené oblasti) */
.hp-bubble::after {
content: "";
position: absolute;
top: 50%;
left: 100%;
transform: translateY(-50%);
border: 8px solid transparent;
border-left-color: rgba(247, 227, 183, 1);
}
/* Šipky pro Stamina bublinu - VŽDY doleva (u modré oblasti) */
.stamina-bubble::after {
content: "";
position: absolute;
top: 50%;
right: 100%;
transform: translateY(-50%);
border: 8px solid transparent;
border-right-color: rgba(247, 227, 183, 1);
}
/* Zobrazení při hoveru NA HP OBLAST (červená) - ukáže OBĚ bubliny */
.bhud-hover-area-hp:hover .bhud-tooltip {
opacity: 1;
visibility: visible;
transform: scale(1);
z-index: 9999;
}
/* Zobrazení při hoveru NA STAMINA OBLAST (modrá) - ukáže OBĚ bubliny */
.bhud-hover-area-stamina:hover .bhud-tooltip {
opacity: 1;
visibility: visible;
transform: scale(1);
z-index: 9999;
}
/* PLUS IKONA NAD PORTRÉTY */
.battle-card-wrapper {
position: relative;
cursor: pointer;
}
.battle-card-wrapper .portrait-plus-icon {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
font-size: 80px !important;
color: rgba(212, 175, 55, 0.8) !important;
pointer-events: none !important;
opacity: 0;
transition: opacity 0.3s ease;
z-index: 10;
text-shadow: 0 0 20px rgba(0, 0, 0, 0.9);
}
.battle-card-wrapper:hover .portrait-plus-icon {
opacity: 1;
}
.battle-card-wrapper:hover .hero-portrait-background,
.battle-card-wrapper:hover .enemy-portrait-background {
filter: brightness(0.7);
}
/* ═══════════════════════════════════════════════════════════ */
/* FIX: POVOLIT INTERAKCE S PORTRÉTY */
/* ═══════════════════════════════════════════════════════════ */
/* IKONA LUPY NAD PORTRÉTY */
.battle-card-wrapper {
position: relative;
cursor: pointer;
}
/* Povol kliky na kartu */
.battle-character-card {
pointer-events: auto !important;
cursor: pointer; /* Ukaž že je to klikatelné */
}
.battle-card-wrapper .portrait-plus-icon {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 100px; /* Velikost ikony */
height: 100px;
background-image: url('https://files.catbox.moe/pxrhgd.png');
background-size: contain;
background-repeat: no-repeat;
background-position: center;
pointer-events: none !important;
opacity: 0;
transition: opacity 0.3s ease;
z-index: 10;
filter: drop-shadow(0 0 10px rgba(0, 0, 0, 0.9));
}
/* Wrapper s textem NESMÍ blokovat kliky na pozadí */
.card-content-wrapper {
pointer-events: none !important; /* Text je neklikatelný */
}
/* Ale text uvnitř ANO může být klikatelný (pokud by byl link) */
.card-content-wrapper * {
pointer-events: auto;
}
</style>
<!-- ☠️ NOVÝ SCRIPT PRO POISON OVERLAY -->
<script>
(function() {
// 🫧 Funkce pro vytvoření zelených bublin
function createPoisonBubbles(overlayElement) {
// Počet dalších bublin (kromě ::before a ::after)
const bubbleCount = 5;
const bubbles = [];
for (let i = 0; i < bubbleCount; i++) {
const bubble = document.createElement('div');
bubble.className = 'poison-bubble poison-bubble-' + (i + 1);
// Náhodná pozice a velikost
const size = 8 + Math.random() * 10; // 8-18px
const leftPos = 10 + Math.random() * 80; // 10-90%
const topPos = 50 + Math.random() * 40; // 50-90%
const animDelay = Math.random() * 3; // 0-3s
const animDuration = 2.5 + Math.random() * 2; // 2.5-4.5s
bubble.style.cssText = `
position: absolute;
top: ${topPos}%;
left: ${leftPos}%;
width: ${size}px;
height: ${size}px;
background: rgba(${Math.floor(Math.random() * 100)}, 255, ${Math.floor(Math.random() * 100)}, ${0.4 + Math.random() * 0.3});
border-radius: 50%;
box-shadow: 0 0 ${size}px rgba(0, 255, 0, ${0.5 + Math.random() * 0.3});
z-index: 2;
pointer-events: none;
animation: bubble-rise-${(i % 5) + 1} ${animDuration}s infinite ease-in-out ${animDelay}s;
`;
overlayElement.appendChild(bubble);
bubbles.push(bubble);
}
return bubbles;
}
// 🧹 Funkce pro odstranění bublin
function removePoisonBubbles(overlayElement) {
const existingBubbles = overlayElement.querySelectorAll('.poison-bubble');
existingBubbles.forEach(bubble => bubble.remove());
}
function updatePoisonOverlay() {
// HRÁČ - POISON OVERLAY
var enemyPoisonStacks = (typeof $enemyPoisonStacks !== 'undefined') ? $enemyPoisonStacks : 0;
var enemyPoisonDuration = (typeof $enemyPoisonDuration !== 'undefined') ? $enemyPoisonDuration : 0;
var heroPoisonOverlay = document.getElementById('heroPoisonOverlay');
if (heroPoisonOverlay) {
if (enemyPoisonStacks > 0 && enemyPoisonDuration > 0) {
if (!heroPoisonOverlay.classList.contains('active')) {
heroPoisonOverlay.classList.add('active');
// Vytvoř bubliny při aktivaci
createPoisonBubbles(heroPoisonOverlay);
}
} else {
if (heroPoisonOverlay.classList.contains('active')) {
heroPoisonOverlay.classList.remove('active');
// Odstraň bubliny při deaktivaci
removePoisonBubbles(heroPoisonOverlay);
}
}
}
// NEPŘÍTEL - POISON OVERLAY
var playerPoisonStacks = (typeof $playerPoisonStacks !== 'undefined') ? $playerPoisonStacks : 0;
var playerPoisonDuration = (typeof $playerPoisonDuration !== 'undefined') ? $playerPoisonDuration : 0;
var enemyPoisonOverlay = document.getElementById('enemyPoisonOverlay');
if (enemyPoisonOverlay) {
if (playerPoisonStacks > 0 && playerPoisonDuration > 0) {
if (!enemyPoisonOverlay.classList.contains('active')) {
enemyPoisonOverlay.classList.add('active');
// Vytvoř bubliny při aktivaci
createPoisonBubbles(enemyPoisonOverlay);
}
} else {
if (enemyPoisonOverlay.classList.contains('active')) {
enemyPoisonOverlay.classList.remove('active');
// Odstraň bubliny při deaktivaci
removePoisonBubbles(enemyPoisonOverlay);
}
}
}
}
// Update při načtení
setTimeout(updatePoisonOverlay, 100);
// Update každých 200ms
setInterval(updatePoisonOverlay, 200);
})();
(function() {
function updateSkullCurtain() {
// HRÁČ - LEBKA ROLETKA
var playerHp = (typeof $hp !== 'undefined') ? $hp : 20;
var playerMaxHp = (typeof $maxHp !== 'undefined') ? $maxHp : 20;
var playerHealthPercent = playerHp / playerMaxHp;
var heroSkull = document.getElementById('heroSkullOverlay');
if (heroSkull) {
var damagePercent = Math.max(0, 1 - playerHealthPercent);
heroSkull.style.height = (damagePercent * 100) + '%';
}
// NEPŘÍTEL - LEBKA ROLETKA
var enemyHp = (typeof $enemyHP !== 'undefined') ? $enemyHP : 15;
var enemyMaxHp = (typeof $enemyMaxHP !== 'undefined') ? $enemyMaxHP : 15;
var enemyHealthPercent = enemyHp / enemyMaxHp;
var enemySkull = document.getElementById('enemySkullOverlay');
if (enemySkull) {
var enemyDamagePercent = Math.max(0, 1 - enemyHealthPercent);
enemySkull.style.height = (enemyDamagePercent * 100) + '%';
}
}
setTimeout(updateSkullCurtain, 100);
setInterval(updateSkullCurtain, 200);
})();
</script>{
(set: $finalAtk to $atk)
(set: $finalDef to 0)
(set: $finalStaminaBonus to 0)
(set: $finalMaxStaminaBonus to 0)
(if: $equippedWeapon is "dagger")[(set: $finalAtk to $finalAtk + 1)]
(else-if: $equippedWeapon is "daggerQuality")[(set: $finalAtk to $finalAtk + 1)(set: $finalStaminaBonus to 1)(set: $finalMaxStaminaBonus to 1)]
(else-if: $equippedWeapon is "sword")[(set: $finalAtk to $finalAtk + 2)(set: $finalStaminaBonus to 1)(set: $finalMaxStaminaBonus to 1)]
(else-if: $equippedWeapon is "swordMaster")[(set: $finalAtk to $finalAtk + 2)(set: $finalStaminaBonus to 2)(set: $finalMaxStaminaBonus to 2)]
(else-if: $equippedWeapon is "axe")[(set: $finalAtk to $finalAtk + 3)]
(else-if: $equippedWeapon is "axeWar")[(set: $finalAtk to $finalAtk + 3)(set: $finalStaminaBonus to 1)(set: $finalMaxStaminaBonus to 1)]
(else-if: $equippedWeapon is "greatsword")[(set: $finalAtk to $finalAtk + 3)(set: $finalStaminaBonus to 2)(set: $finalMaxStaminaBonus to 2)]
(else-if: $equippedWeapon is "greatswordLegendary")[(set: $finalAtk to $finalAtk + 3)(set: $finalStaminaBonus to 3)(set: $finalMaxStaminaBonus to 3)]
(if: $equippedArmor is "leather")[(set: $finalDef to $finalDef + 1)]
(else-if: $equippedArmor is "chain")[(set: $finalDef to $finalDef + 2)]
(else-if: $equippedArmor is "plate")[(set: $finalDef to $finalDef + 3)]
(if: $equippedShield is "wooden")[(set: $finalDef to $finalDef + 1)]
(else-if: $equippedShield is "iron")[(set: $finalDef to $finalDef + 2)]
(else-if: $equippedShield is "tower")[(set: $finalDef to $finalDef + 3)]
(if: $trait1)[(set: $finalAtk to $finalAtk - 1)]
(set: $totalStamina to $stamina + $finalStaminaBonus)
(set: $totalMaxStamina to $maxStamina + $finalMaxStaminaBonus)
}
<div class="battle-hud-hearts">
<div class="bhud-hearts-player">
<span class="bhud-hearts-label">⚔️ Tvoje životy ($hp/$maxHp):</span>
<div class="bhud-hearts-row">
(for: each _i, ...(range: 1, $maxHp))[
(if: _i <= $hp)[
<img src="https://files.catbox.moe/y1rymu.png" class="heart-icon heart-full" alt="❤️">
](else:)[
<img src="https://files.catbox.moe/y1rymu.png" class="heart-icon heart-empty" alt="♡">
]
]
</div>
</div>
<div class="bhud-vs-separator">VS</div>
<div class="bhud-hearts-enemy">
<span class="bhud-hearts-label">☠️ Učitel životy:</span>
<div class="bhud-hearts-row">
(for: each _i, ...(range: 1, 10))[
(if: _i <= $kamaradHP)[
<img src="https://files.catbox.moe/y1rymu.png" class="heart-icon heart-enemy-full" alt="❤️">
](else:)[
<img src="https://files.catbox.moe/y1rymu.png" class="heart-icon heart-enemy-empty" alt="♡">
]
]
</div>
</div>
</div>
<div class="bhud-stats-info">
(if: $kamaradATK is 0)[
💡 **Tip:** Klikni a sleduj, jak probíhá souboj! Učitel zatím šetří síly...
](else:)[
⚠️ Učitel má bonusový útok **+$kamaradATK**!
]
<br>⚔️ Tvůj útok: **$finalAtk**
(if: $finalDef > 0)[
<br>🛡️ Tvoje obrana: **$finalDef**
]
<br>⚡ Kondice: **$totalStamina** / **$totalMaxStamina**
(if: $finalStaminaBonus > 0)[
(if: $finalStaminaBonus is 1)[(+1 z vybavení)](else:)[(+$finalStaminaBonus z vybavení)]
]
</div>{(live: 6s)[
(goto: "CardBattleInit")
]}
(print: "<script>
changeMusic('https://files.catbox.moe/ac7hh8.ogg', 0.5);
</script>")
<div style="display:none;" id="debug-portrait-url-vs">(print: $portraitURL)</div>
<style>
/* --- ČERVENÁ VIGNETACE (jemná, od začátku) --- */
#fire-vignette {
position: fixed;
top: 0; left: 0; width: 100%; height: 100%;
pointer-events: none;
z-index: 9997;
background: radial-gradient(circle, transparent 20%, rgba(150, 0, 0, 0.08) 70%, rgba(50, 0, 0, 0.35) 100%);
animation: vignette-pulse 4s infinite ease-in-out;
}
/* --- TMAVĚ ČERVENÁ VIGNETACE OKRAJŮ (nad vším, po celou dobu) --- */
#edge-vignette {
position: fixed;
top: 0; left: 0; width: 100%; height: 100%;
pointer-events: none;
z-index: 10010;
background: radial-gradient(circle, transparent 30%, rgba(100, 0, 0, 0.5) 70%, rgba(30, 0, 0, 0.6) 100%);
animation: edge-vignette-pulse 5s infinite ease-in-out;
}
@keyframes vignette-pulse {
0%, 100% { opacity: 0.6; }
50% { opacity: 0.9; }
}
@keyframes edge-vignette-pulse {
0%, 100% { opacity: 0.8; }
50% { opacity: 1; }
}
/* --- STYLY PRO OHEŇ (v intro kontejneru) --- */
#vs-flame-canvas {
position: absolute;
top: 0; left: 0;
width: 100%; height: 100%;
filter: blur(2px);
z-index: 2;
pointer-events: none;
opacity: 0.5;
}
/* --- STYLY PRO VS OBRAZOVKU --- */
.intro-zoom-image {
position: fixed;
top: 0; left: 0; width: 100%; height: 100%;
z-index: 9998;
pointer-events: none;
overflow: hidden;
animation: zoomAndFade 4.5s ease-out forwards;
}
.intro-background {
position: absolute;
top: 0; left: 0;
width: 100%; height: 100%;
background-image: url('https://files.catbox.moe/w6jqq0.jpg');
background-size: cover;
background-position: center;
z-index: 1;
}
@keyframes zoomAndFade {
0% { transform: scale(1); opacity: 1; }
18% { transform: scale(1); opacity: 1; }<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" width="20" height="20"><path fill='rgb(174, 174, 174)' d="M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"/></svg>
80% { transform: scale(1.8); opacity: 1; }
100% { transform: scale(1.8); opacity: 0; }
}
.vs-animation-container {
position: fixed;
top: 0; left: 0; width: 100%; height: 100%;
background: radial-gradient(circle at center, rgba(30,0,0,1), rgba(0,0,0,1));
z-index: 10000;
display: flex;
align-items: center;
justify-content: center;
opacity: 0;
animation: fadeIn 5s ease 0.9s forwards; /* 5s trvání, 0s delay = začne hned */
overflow: hidden;
}
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
/* PORTRÉTY - NAJÍŽDÍ PO OBJEVENÍ VS KONTEJNERU */
.vs-portrait {
position: absolute;
width: 300px; height: 400px;
background-size: cover; background-position: center;
border: 4px solid #d1b66b;
box-shadow: 0 0 30px rgba(209, 182, 107, 0.5);
opacity: 0;
z-index: 10;
animation-duration: 2.2s;
animation-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); /* Plynulé zpomalení */
animation-fill-mode: forwards;
animation-delay: 0.9s; /* Přijedou po VS kontejneru (2.1s + 0.4s) */
}
.vs-portrait-player {
animation-name: slideFromRight;
}
.vs-portrait-teacher {
background-image: url('https://files.catbox.moe/ouajvi.jpg');
animation-name: slideFromLeft;
}
/* HERO KARTA - PŘIJEDE ZLEVA */
@keyframes slideFromRight {
0% {
right: -450px;
opacity: 0;
}
100% {
right: calc(50% + 80px);
opacity: 1;
}
}
/* ENEMY KARTA - PŘIJEDE ZPRAVA */
@keyframes slideFromLeft {
0% {
left: -450px;
opacity: 0;
}
100% {
left: calc(50% + 80px);
opacity: 1;
}
}
/* VS SEPARATOR */
.vs-separator {
position: absolute;
font-size: 80px; font-weight: bold; color: #d1b66b;
text-shadow: 0 0 20px rgba(209, 182, 107, 0.8);
z-index: 15;
opacity: 0;
animation: fadeInVS 0.5s ease-in 4s forwards; /* Po příjezdu karet */
font-family: 'Cinzel Decorative', serif;
letter-spacing: 8px;
}
@keyframes fadeInVS { 0% { opacity: 0; transform: scale(0.5); } 100% { opacity: 1; transform: scale(1); } }
/* JMÉNA POD PORTRÉTY */
.vs-character-name {
position: absolute; bottom: -60px; width: 100%;
text-align: center; color: #d1b66b;
font-size: 24px; font-weight: bold;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);
font-family: 'Cinzel Decorative', serif;
opacity: 0;
animation: fadeInName 0.5s ease-in 4.2s forwards; /* Těsně po VS */
}
@keyframes fadeInName { 0% { opacity: 0; bottom: -50px; } 100% { opacity: 1; bottom: -60px; } }
</style>
<!-- VIGNETACE - úplně první, aby byla pod vším -->
<div id="fire-vignette"></div>
<!-- OKRAJOVÁ VIGNETACE - nad vším, po celou dobu -->
<div id="edge-vignette"></div>
<div class="intro-zoom-image" id="introZoom">
<div class="intro-background"></div>
<canvas id="vs-flame-canvas"></canvas>
</div>
<div class="vs-animation-container" id="vsContainer">
<div class="vs-portrait vs-portrait-player" id="vsPlayerPortrait">
<div class="vs-character-name" id="vsPlayerName">(print: $vybranaPostava)</div>
</div>
<div class="vs-separator">VS</div>
<div class="vs-portrait vs-portrait-teacher">
<div class="vs-character-name">Učitel Harlow</div>
</div>
</div>
<script>
(function() {
// === ČÁST 1: ANIMACE PLAMENŮ NA OČÍCH ===
if (window._vsFireRunning) return;
window._vsFireRunning = true;
const canvas = document.getElementById('vs-flame-canvas');
let ctx = null;
if (canvas) {
ctx = canvas.getContext('2d', { alpha: true });
}
let W = 0, H = 0;
let leftX = 0, rightX = 0, bottomY = 0;
function resizeFire() {
if(!canvas) return;
W = canvas.width = window.innerWidth;
H = canvas.height = window.innerHeight;
// POZICE PLAMENŮ NA OČÍCH KOSTRY
leftX = W * 0.49; // Levé oko
rightX = W * 0.52; // Pravé oko
bottomY = H * 0.33; // Výška očí
buildGradients();
}
window.addEventListener('resize', resizeFire, { passive: true });
const SEGS = 25;
const powWidth = new Float32Array(SEGS + 1);
const powAlpha = new Float32Array(SEGS + 1);
const powAmp = new Float32Array(SEGS + 1);
for (let i = 0; i <= SEGS; i++) {
const t = i / SEGS;
powWidth[i] = Math.pow(1 - t, 0.8);
powAlpha[i] = Math.pow(1 - t, 2.2);
powAmp[i] = Math.pow(t, 0.5);
}
const LAYERS = [
{ maxW: 80, baseAlpha: 0.20, r: 180, g: 0, b: 0 },
{ maxW: 40, baseAlpha: 0.40, r: 255, g: 60, b: 0 },
{ maxW: 10, baseAlpha: 0.70, r: 255, g: 200, b: 50 }
];
let glowGrd = null;
function buildGradients() {
if(!ctx) return;
const R = 70;
glowGrd = ctx.createRadialGradient(0, 0, 0, 0, 0, R);
glowGrd.addColorStop(0, 'rgba(255,220,100,0.9)');
glowGrd.addColorStop(0.4, 'rgba(255,100,0,0.3)');
glowGrd.addColorStop(1, 'rgba(180,0,0,0)');
}
const W1F = 0.020, W1S = 2.8;
const W2F = 0.038, W2S = 4.4;
const W3F = 0.060, W3S = 6.2;
const ptsX = new Float32Array(SEGS + 1);
const ptsY = new Float32Array(SEGS + 1);
function drawVerticalFlame(ox, oy, t, scale, timeOffset) {
if(!ctx) return;
const flameHeight = H * 0.15;
const segH = flameHeight / SEGS;
for (let i = 0; i <= SEGS; i++) {
const dist = i * segH;
const phase = dist;
const amp = powAmp[i];
const tAdj = t + timeOffset;
ptsY[i] = oy - dist;
ptsX[i] = ox
+ Math.sin(phase * W1F + tAdj * W1S) * (32 * amp * scale)
+ Math.sin(phase * W2F + tAdj * W2S + 1.2) * (16 * amp * scale)
+ Math.sin(phase * W3F + tAdj * W3S + 2.5) * (8 * amp * scale);
}
ctx.lineCap = 'round';
ctx.lineJoin = 'round';
for (let li = 0; li < LAYERS.length; li++) {
const layer = LAYERS[li];
for (let i = 0; i < SEGS; i++) {
const lw = layer.maxW * powWidth[i] * scale;
if (lw < 0.3) continue;
const alpha = layer.baseAlpha * powAlpha[i];
if (alpha < 0.005) continue;
ctx.lineWidth = lw;
ctx.strokeStyle = `rgba(${layer.r},${layer.g},${layer.b},${alpha.toFixed(2)})`;
ctx.beginPath();
ctx.moveTo(ptsX[i], ptsY[i]);
ctx.lineTo(ptsX[i+1], ptsY[i+1]);
ctx.stroke();
}
}
ctx.save();
ctx.translate(ox, oy);
ctx.globalAlpha = 0.7 + 0.3 * Math.sin(t * 19 + timeOffset * 3);
ctx.fillStyle = glowGrd;
ctx.beginPath();
ctx.arc(0, 0, 50 * scale, 0, Math.PI * 2);
ctx.fill();
ctx.restore();
}
let t = 0;
let lastTime = 0;
const FPS = 30;
const STEP = 1000 / FPS;
function animateFire(now) {
if (!document.getElementById('vs-flame-canvas')) {
window._vsFireRunning = false;
return;
}
requestAnimationFrame(animateFire);
if (now - lastTime < STEP) return;
lastTime = now;
if(!ctx) return;
ctx.clearRect(0, 0, W, H);
t += 0.033;
drawVerticalFlame(leftX, bottomY, t, 1.0, 0);
drawVerticalFlame(rightX, bottomY, t, 1.1, 2);
}
resizeFire();
requestAnimationFrame(animateFire);
// === ČÁST 2: VS LOGIKA (PORTRÉTY) ===
var attempts = 0;
var maxAttempts = 30;
function loadVSPortraits() {
attempts++;
var debugDiv = document.getElementById('debug-portrait-url-vs');
var playerURL = '';
if (debugDiv && debugDiv.textContent.trim() !== '') {
playerURL = debugDiv.textContent.trim();
} else if (typeof State !== 'undefined' && State.variables && State.variables.portraitURL) {
playerURL = State.variables.portraitURL;
}
if (!playerURL || playerURL === '' || playerURL.length < 10) {
if (attempts < maxAttempts) {
setTimeout(loadVSPortraits, 100);
return;
}
}
var playerPortrait = document.getElementById('vsPlayerPortrait');
if (playerPortrait) {
playerPortrait.style.backgroundImage = "url('" + playerURL + "')";
} else if (attempts < maxAttempts) {
setTimeout(loadVSPortraits, 100);
}
var nameDiv = document.getElementById('vsPlayerName');
if (nameDiv && typeof State !== 'undefined' && State.variables && State.variables.vybranaPostava) {
nameDiv.textContent = State.variables.vybranaPostava;
}
}
// Odstranění intro zoom
setTimeout(function() {
var introZoom = document.getElementById('introZoom');
if (introZoom) introZoom.remove();
}, 4500);
setTimeout(loadVSPortraits, 200);
})();
</script>{{{(if: $combatLog's length > 0)[
<div class="combat-log" id="combatLog">
(set: _currentIndex to 1)
(for: each _log, ...$combatLog)[
(set: _isOld to _currentIndex < $combatLog's length)
<div class="log-entry (if: _isOld)[old-log]" data-index="_currentIndex">_log</div>
(set: _currentIndex to _currentIndex + 1)
]
<script>
/* Automatické odrolování logu na konec */
setTimeout(function() {
var logContainer = document.getElementById('combatLog');
if (logContainer) {
logContainer.scrollTop = logContainer.scrollHeight;
}
}, 50);
/* 🎨 GRADUÁLNÍ ŠEDNUTÍ ZPRÁV - RYCHLEJŠÍ VERZE */
setTimeout(function() {
var allEntries = document.querySelectorAll('.log-entry');
var totalEntries = allEntries.length;
if (totalEntries > 1) {
for (var i = 0; i < totalEntries - 1; i++) {
var entry = allEntries[i];
var ageFromNewest = totalEntries - 1 - i; // 1 = předposlední, 2 = předpředposlední, atd.
// ⚡ ZMĚNA: Rychlejší gradient
// Po 5 zprávách už dosahujeme 80% šedosti
var maxAgeForFullGray = 8; // Místo totalEntries - 1
var effectiveAge = Math.min(ageFromNewest, maxAgeForFullGray);
// Lineární interpolace od 0% do 80% (ale rychleji)
var grayPercent = (effectiveAge / maxAgeForFullGray) * 30;
// ⚡ ZMĚNA: Rychlejší pokles opacity
// Po 5 zprávách už opacity na minimu (0.3)
var opacity = 1.0 - (effectiveAge / maxAgeForFullGray) * 0.7;
// Aplikovat na celý entry
entry.style.opacity = opacity;
entry.style.filter = 'grayscale(' + grayPercent + '%) brightness(' + (1 - grayPercent/200) + ')';
entry.style.transition = 'all 0.5s ease';
// Přebarvit span elementy s graduální šedou
var spans = entry.querySelectorAll('span');
spans.forEach(function(span) {
// Získat původní barvu
var computedStyle = window.getComputedStyle(span);
var originalColor = computedStyle.color;
// Převést na RGB a smíchat se šedou
var rgb = originalColor.match(/\d+/g);
if (rgb && rgb.length >= 3) {
var r = parseInt(rgb[0]);
var g = parseInt(rgb[1]);
var b = parseInt(rgb[2]);
// Cílová šedá barva
var gray = 102; // #666
// Mix: originalColor * (1 - grayPercent/100) + gray * (grayPercent/100)
var mixRatio = grayPercent / 100;
var newR = Math.round(r * (1 - mixRatio) + gray * mixRatio);
var newG = Math.round(g * (1 - mixRatio) + gray * mixRatio);
var newB = Math.round(b * (1 - mixRatio) + gray * mixRatio);
span.style.color = 'rgb(' + newR + ', ' + newG + ', ' + newB + ')';
// Zeslabení text-shadow
var shadowOpacity = 1 - mixRatio;
span.style.textShadow = '0 0 ' + (8 * shadowOpacity) + 'px rgba(' + newR + ', ' + newG + ', ' + newB + ', ' + (0.4 * shadowOpacity) + ')';
}
});
}
}
}, 100);
</script>
</div>
]}
<style>
/* ⚔️ BATTLE LOG - FIXNÍ POZICOVÁNÍ PRO 1920x1080 ⚔️ */
#combatLog {
position: fixed;
left: 50%;
bottom: 290px;
transform: translateX(-50%);
width: 650px;
height: 95px;
max-height: 110px;
z-index: 9;
overflow-y: auto;
overflow-x: hidden;
background: rgba(0, 0, 0, 0.4);
padding: -5px;
text-align: center;
border: 1px solid #8b6914;
box-shadow: 0 0 20px rgba(0,0,0,0.7);
scrollbar-width: thin;
scrollbar-color: #8b6914 rgba(0, 0, 0, 0.2);
}
/* 🎨 STYLOVÁNÍ SCROLLBARU */
#combatLog::-webkit-scrollbar {
width: 8px;
}
#combatLog::-webkit-scrollbar-track {
background: rgba(0, 0, 0, 0.2);
}
#combatLog::-webkit-scrollbar-thumb {
background: #8b6914;
border-radius: 4px;
}
#combatLog::-webkit-scrollbar-thumb:hover {
background: #edcb64;
}
/* 🌟 ZÁKLADNÍ STYL TEXTU */
.log-entry {
margin-bottom: 2px !important;
line-height: 1.1 !important;
font-size: 15px !important;
font-family: 'Cinzel', serif !important;
animation: fadeIn 0.3s ease-in !important;
transition: opacity 0.5s ease, filter 0.5s ease !important;
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(5px); }
to { opacity: 1; transform: translateY(0); }
}
/* ═══════════════════════════════════════════════════════════════ */
/* ✅ POZITIVNÍ EFEKTY (ZELENÉ ODSTÍNY) */
/* ═══════════════════════════════════════════════════════════════ */
/* ═══════════════════════════════════════════════════════════════ */
/* ⚔️ PRVNÍ ZAHRÁNÍ ZBRANÍ */
/* ═══════════════════════════════════════════════════════════════ */
/* Hráč - první zahrání zbraně (útočí hned) */
.combat-weapon-first {
color: #00ff00 !important;
font-weight: bold !important;
font-size: 16px !important;
text-shadow: 0 0 15px rgba(0, 255, 0, 0.8) !important;
animation: weapon-flash 0.5s ease-in-out !important;
}
/* Nepřítel - první zahrání zbraně (tasí, ale ještě neutočí) */
.combat-weapon-enemy-first {
color: #ff8c00 !important;
font-weight: bold !important;
font-size: 15px !important;
font-style: italic !important;
text-shadow: 0 0 10px rgba(255, 140, 0, 0.6) !important;
}
/* Animace záblesku při prvním zahrání */
@keyframes weapon-flash {
0%, 100% {
text-shadow: 0 0 10px rgba(0, 255, 0, 0.6);
}
50% {
text-shadow: 0 0 25px rgba(0, 255, 0, 1);
transform: scale(1.05);
}
}
/* Výhra v souboji */
.combat-victory {
color: #4ade80 !important;
font-weight: bold !important;
font-size: 16px !important;
text-shadow: 0 0 8px rgba(74, 222, 128, 0.6) !important;
}
/* Léčení */
.combat-healing {
color: #6cdb1d !important;
font-weight: bold !important;
font-size: 15px !important;
text-shadow: 0 0 10px rgba(108, 219, 29, 0.6) !important;
}
/* Získání zbraně (hráč) */
.combat-weapon {
color: #32cd32 !important;
font-weight: bold !important;
font-size: 15px !important;
text-shadow: 0 0 10px rgba(50, 205, 50, 0.6) !important;
}
/* Obnovení staminy */
.combat-stamina {
color: #94e070 !important;
font-weight: bold !important;
font-size: 15px !important;
text-shadow: 0 0 10px rgba(148, 224, 112, 0.6) !important;
}
/* Úspěšný Protiútok */
.combat-counter {
color: #00ff00 !important;
font-weight: bold !important;
font-size: 15px !important;
text-shadow: 0 0 10px rgba(0, 255, 0, 0.6) !important;
}
/* ═══════════════════════════════════════════════════════════════ */
/* ❌ NEGATIVNÍ EFEKTY (ČERVENÉ ODSTÍNY) */
/* ═══════════════════════════════════════════════════════════════ */
/* Prohra v souboji */
.combat-defeat {
color: #ef4444 !important;
font-weight: bold !important;
font-size: 16px !important;
text-shadow: 0 0 8px rgba(239, 68, 68, 0.6) !important;
}
@keyframes miss-shake {
0%, 100% { transform: translateX(0); }
25% { transform: translateX(-5px) rotate(-2deg); }
50% { transform: translateX(5px) rotate(2deg); }
75% { transform: translateX(-5px) rotate(-1deg); }
}
/* Minul jsi */
.combat-miss {
color: #ff4444 !important;
font-weight: bold !important;
font-size: 15px !important;
font-style: italic !important;
text-shadow: 0 0 10px rgba(255, 68, 68, 0.6) !important;
}
/* Neúspěšný Protiútok */
.combat-counter-fail {
color: #ff4444 !important;
font-weight: bold !important;
font-size: 15px !important;
font-style: italic !important;
text-shadow: 0 0 10px rgba(255, 68, 68, 0.6) !important;
}
/* Získání negativního traitu */
.trait-gained {
color: #ff4444 !important;
font-weight: bold !important;
font-size: 15px !important;
text-shadow: 0 0 10px rgba(255, 68, 68, 0.6) !important;
}
/* Zbraň nepřítele */
.combat-weapon-enemy {
color: #ff6b35 !important;
font-weight: bold !important;
font-size: 15px !important;
text-shadow: 0 0 10px rgba(255, 107, 53, 0.6) !important;
}
/* Last Stand - Zoufalý režim */
.combat-desperate {
color: #dc143c !important;
font-weight: bold !important;
font-size: 15px !important;
text-shadow: 0 0 10px rgba(220, 20, 60, 0.6) !important;
}
/* ═══════════════════════════════════════════════════════════════ */
/* ⚡ SPECIÁLNÍ AKCE (MODRÉ/FIALOVÉ/ZLATÉ ODSTÍNY) */
/* ═══════════════════════════════════════════════════════════════ */
/* Úspěšný Taktický úder */
.combat-tactical {
color: #ffd700 !important;
font-weight: bold !important;
font-size: 15px !important;
font-style: italic !important;
text-shadow: 0 0 10px rgba(255, 215, 0, 0.7) !important;
}
/* Neúspěšný Taktický úder */
.combat-tactical-fail {
color: #888 !important;
font-size: 15px !important;
font-style: italic !important;
}
/* Precision úder */
.combat-precision {
color: #d8b4fe !important;
font-weight: bold !important;
font-size: 15px !important;
font-style: italic !important;
text-shadow: 0 0 10px rgba(168, 85, 247, 0.6) !important;
}
/* Úhyb */
.combat-dodge {
color: #00d4ff !important;
font-weight: bold !important;
font-size: 15px !important;
font-style: italic !important;
text-shadow: 0 0 15px rgba(0, 212, 255, 0.7) !important;
}
/* Meditation - Aktivace */
.combat-meditation {
color: #c77dff !important;
font-weight: bold !important;
font-size: 15px !important;
font-style: italic !important;
text-shadow: 0 0 8px rgba(180, 50, 255, 0.6) !important;
}
/* Meditation - Použití combo */
.combat-meditation-combo {
color: #e0aaff !important;
font-weight: bold !important;
font-size: 15px !important;
font-style: italic !important;
text-shadow: 0 0 10px rgba(224, 170, 255, 0.7) !important;
border-left: 3px solid #9d4edd !important;
padding-left: 8px !important;
}
/* Meditation - Konec efektu */
.combat-meditation-end {
color: #9d4edd !important;
font-size: 14px !important;
font-style: italic !important;
opacity: 0.8 !important;
}
/* Blokování útoku */
.combat-block {
color: #6496c8 !important;
font-weight: bold !important;
font-size: 15px !important;
text-shadow: 0 0 10px rgba(100, 150, 200, 0.6) !important;
}
/* Armor efekt */
.combat-armor {
color: #6496c8 !important;
font-weight: bold !important;
font-size: 15px !important;
text-shadow: 0 0 8px rgba(100, 150, 200, 0.6) !important;
}
/* ═══════════════════════════════════════════════════════════════ */
/* 🔘 NEUTRÁLNÍ/INFO HLÁŠKY (ŠEDÉ/ŽLUTÉ ODSTÍNY) */
/* ═══════════════════════════════════════════════════════════════ */
/* Remíza */
.combat-draw {
color: #fbbf24 !important;
font-weight: bold !important;
font-size: 16px !important;
}
/* Spotřeba položky */
.combat-consume {
color: #d97706 !important;
font-weight: bold !important;
font-size: 15px !important;
text-shadow: 0 0 10px rgba(217, 119, 6, 0.6) !important;
}
/* Normální stav */
.combat-normal {
color: #888 !important;
font-size: 15px !important;
font-style: italic !important;
}
/* ═══════════════════════════════════════════════════════════════ */
/* 🔥 POKROČILÉ MECHANIKY A SKILLY */
/* ═══════════════════════════════════════════════════════════════ */
/* --- ☠️ POPRAVY A OFFENSIVE SKILLS (EXECUTE, BERSERKER) --- */
/* Execute - úspěch */
.combat-execute {
color: #ff0000 !important;
font-weight: bold !important;
font-size: 16px !important;
text-shadow: 0 0 15px rgba(255, 0, 0, 0.9) !important;
}
/* Execute - fail */
.combat-execute-fail {
color: #888 !important;
font-size: 15px !important;
font-style: italic !important;
}
/* Berserker - aktivace */
.combat-berserker {
color: #dc143c;
font-weight: bold;
text-shadow: 0 0 15px rgba(220, 20, 60, 0.9);
font-size: 1.15em;
}
/* Berserker - aplikace */
.combat-berserker-applied {
color: #ff4500;
font-weight: bold;
text-shadow: 0 0 20px rgba(255, 69, 0, 1);
font-size: 1.2em;
}
/* --- 🛡️ OBRANNÉ SKILLY A SYNERGIE (FORTIFY, SYNERGY) --- */
/* Fortify - základ */
.combat-fortify {
color: #ffa500;
font-weight: bold;
text-shadow: 0 0 10px rgba(255, 165, 0, 0.8);
font-size: 1.1em;
}
/* Fortify - aplikace */
.combat-fortify-applied {
color: #ffd700;
font-weight: bold;
text-shadow: 0 0 15px rgba(255, 215, 0, 1);
font-size: 1.2em;
animation: fortify-text-pulse 0.5s ease-out;
}
/* Synergy - útok */
.combat-weapon-synergy {
color: #ffa500;
font-weight: bold;
text-shadow: 0 0 12px rgba(255, 165, 0, 0.8);
font-size: 1.1em;
}
/* Synergy - obrana */
.combat-weapon-synergy-defense {
color: #6496c8;
font-weight: bold;
text-shadow: 0 0 12px rgba(100, 150, 200, 0.9);
font-size: 1.1em;
}
/* --- ⚡ RYCHLOSTNÍ SKILLY (SWIFT) --- */
/* Aktivní Swift (enemy >= 15 HP) */
.combat-swift-active {
color: #00bfff !important;
font-weight: bold !important;
font-size: 16px !important;
text-shadow: 0 0 15px rgba(0, 191, 255, 0.9) !important;
}
/* Normální Swift (enemy < 15 HP) */
.combat-swift-normal {
color: #87ceeb !important;
font-size: 14px !important;
}
/* --- ☠️ STATUS EFEKTY (POISON) --- */
/* Poison - hráč dává DMG */
.combat-poison {
color: #00ff00;
font-weight: bold;
text-shadow: 0 0 10px rgba(0, 255, 0, 0.8);
font-size: 1.1em;
}
/* Poison - enemy dává DMG/efekt */
.combat-poison-enemy {
color: #9370db;
font-weight: bold;
text-shadow: 0 0 10px rgba(147, 112, 219, 0.8);
font-size: 1.1em;
}
</style>}{<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Optimalizované pozadí</title>
<style>
body {
margin: 0;
padding: 0;
background: #1a1a1a;
color: #fff;
font-family: Arial, sans-serif;
overflow-x: hidden;
}
/* Základní layout - načte se hned */
#main-content {
position: relative;
z-index: 10;
padding: 20px;
min-height: 100vh;
}
.content-wrapper {
max-width: 1200px;
margin: 0 auto;
background: rgba(0, 0, 0, 0.7);
padding: 40px;
border-radius: 10px;
}
/* Canvas - přidá se jako první efekt */
#fireCanvas {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 0;
pointer-events: none;
opacity: 0;
transition: opacity 0.5s;
}
#fireCanvas.loaded {
opacity: 1;
}
/* Bojovníci - načtou se s lazy loading */
#battle-container {
position: fixed;
opacity: 0;
top: 50%;
transform: translateY(-50%);
left: 0;
right: 0;
width: 100%;
height: 80vh;
max-height: 500px;
z-index: 1;
pointer-events: none;
display: flex;
justify-content: space-between;
align-items: center;
transition: opacity 1s;
}
#battle-container.loaded {
opacity: 0.4;
}
.warrior-left, .warrior-right {
position: relative;
height: 100%;
}
.warrior-left {
margin-left: -300px;
animation: warrior-entrance-left 1.5s ease-out;
}
.warrior-right {
margin-right: -300px;
animation: warrior-entrance-right 1.5s ease-out;
}
.aura-left, .aura-right {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 200px;
height: 200px;
border-radius: 50%;
z-index: -1;
}
.aura-left {
background: radial-gradient(circle, rgba(173, 22, 5, 0.4) 0%, transparent 70%);
animation: aura-pulse-left 2s ease-in-out infinite;
}
.aura-right {
background: radial-gradient(circle, rgba(0, 100, 255, 0.4) 0%, transparent 70%);
animation: aura-pulse-right 2s ease-in-out infinite 0.3s;
}
.warrior-left img {
height: 100%;
width: auto;
opacity: 0.9;
filter: drop-shadow(0 0 30px rgba(255, 50, 50, 0.6));
animation: warrior-pulse-left 3s ease-in-out infinite;
}
.warrior-right img {
height: 100%;
width: auto;
opacity: 0.9;
transform: scaleX(-1);
filter: drop-shadow(0 0 30px rgba(50, 50, 255, 0.6));
animation: warrior-pulse-right 3s ease-in-out infinite 0.5s;
}
/* Vignetace */
#battle-vignette {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
pointer-events: none;
z-index: 2;
background: radial-gradient(ellipse at center, transparent 0%, transparent 20%, rgba(99, 21, 11, 0.2) 70%, rgba(0, 0, 0, 0.3) 100%);
animation: vignette-pulse 4s ease-in-out infinite;
opacity: 0;
transition: opacity 0.2s;
}
#battle-vignette.loaded {
opacity: 1;
}
/* Šikmý sníh - načte se jako poslední */
#dust-container {
position: fixed;
top: 0;
left: -1500px;
width: calc(100% + 1500px);
height: 100%;
pointer-events: none;
z-index: 3;
overflow: hidden;
opacity: 0;
transition: opacity 1s;
}
#dust-container.loaded {
opacity: 1;
}
#dust-layer {
position: absolute;
width: 100%;
height: 100%;
opacity: 0.5;
}
.dust-particle {
position: absolute;
top: -10vh;
color: rgba(180, 180, 180, 0.7);
font-size: 0.1em;
width: 2px;
height: 35px;
background-color: currentColor;
transform-origin: bottom center;
transform: rotate(-45deg);
animation-name: dustfall;
animation-timing-function: linear;
animation-iteration-count: infinite;
text-shadow: 0 0 2px rgba(180, 180, 180, 0.3);
pointer-events: none;
}
.dust-particle-medium {
height: 20px;
color: rgba(160, 160, 160, 0.6);
}
.dust-particle-large {
height: 25px;
color: rgba(140, 140, 140, 0.5);
}
/* Loading indicator */
.loading-indicator {
position: fixed;
bottom: 20px;
right: 20px;
background: rgba(0, 0, 0, 0.8);
padding: 10px 20px;
border-radius: 5px;
font-size: 12px;
z-index: 1000;
opacity: 0;
transition: opacity 0.3s;
}
.loading-indicator.show {
opacity: 1;
}
/* Animace */
@keyframes warrior-entrance-left {
from { transform: translateX(-100px); opacity: 0; }
to { transform: translateX(0); opacity: 0.9; }
}
@keyframes warrior-entrance-right {
from { transform: translateX(100px); opacity: 0; }
to { transform: translateX(0); opacity: 0.9; }
}
@keyframes warrior-pulse-left {
0%, 100% { filter: drop-shadow(0 0 30px rgba(255, 50, 50, 0.6)); transform: scale(1); }
50% { filter: drop-shadow(0 0 50px rgba(255, 50, 50, 0.9)); transform: scale(1.02); }
}
@keyframes warrior-pulse-right {
0%, 100% { filter: drop-shadow(0 0 30px rgba(50, 50, 255, 0.6)); transform: scaleX(-1) scale(1); }
50% { filter: drop-shadow(0 0 50px rgba(50, 50, 255, 0.9)); transform: scaleX(-1) scale(1.02); }
}
@keyframes aura-pulse-left {
0%, 100% { transform: translate(-50%, -50%) scale(1); opacity: 0.4; }
50% { transform: translate(-50%, -50%) scale(1.3); opacity: 0.7; }
}
@keyframes aura-pulse-right {
0%, 100% { transform: translate(-50%, -50%) scale(1); opacity: 0.4; }
50% { transform: translate(-50%, -50%) scale(1.3); opacity: 0.7; }
}
@keyframes vignette-pulse {
0%, 100% { opacity: 0.8; }
50% { opacity: 1; }
}
@keyframes dustfall {
0% { transform: translateY(-10vh) translateX(0) rotate(-45deg); opacity: 0; }
10% { opacity: 1; }
90% { opacity: 1; }
100% { transform: translateY(110vh) translateX(100vw) rotate(-75deg); opacity: 0; }
}
</style>
</head>
<body>
<!-- Loading indicator -->
<div class="loading-indicator" id="loadingIndicator">Načítání efektů...</div>
<!-- Canvas pro částice - přidá se jako první -->
<canvas id="fireCanvas"></canvas>
<!-- Bojovníci - s lazy loading -->
<div id="battle-container">
<div class="warrior-left">
<div class="aura-left"></div>
<img loading="lazy" data-src="https://files.catbox.moe/kuu8gf.png" alt="Levý bojovník">
</div>
<div class="warrior-right">
<div class="aura-right"></div>
<img loading="lazy" data-src="https://files.catbox.moe/kuu8gf.png" alt="Pravý bojovník">
</div>
</div>
<!-- Vignetace -->
<div id="battle-vignette"></div>
<!-- Kontejner pro sníh - přidá se později -->
<div id="dust-container">
<div id="dust-layer"></div>
</div>
<script>
(function() {
const loadingIndicator = document.getElementById('loadingIndicator');
let loadStage = 0;
function showLoading(text) {
loadingIndicator.textContent = text;
loadingIndicator.classList.add('show');
}
function hideLoading() {
loadingIndicator.classList.remove('show');
}
// Detekce rychlosti připojení
function getConnectionSpeed() {
if (navigator.connection) {
const effectiveType = navigator.connection.effectiveType;
if (effectiveType === 'slow-2g' || effectiveType === '2g') return 'slow';
if (effectiveType === '3g') return 'medium';
return 'fast';
}
return 'medium'; // výchozí
}
const speed = getConnectionSpeed();
// Počet částic podle rychlosti připojení - sníženo pouze pro pomalé připojení
const particleCount = speed === 'slow' ? 15 : speed === 'medium' ? 60 : 100;
const dustCount = speed === 'slow' ? 10 : speed === 'medium' ? 40 : 60;
// KROK 1: Canvas s částicemi (priorita 1)
setTimeout(() => {
showLoading('Načítání částic...');
initFireCanvas();
loadStage++;
}, 100);
// KROK 2: Načtení obrázků bojovníků (priorita 2)
setTimeout(() => {
showLoading('Načítání bojovníků...');
loadWarriorImages();
loadStage++;
}, 500);
// KROK 3: Vignetace (priorita 3)
setTimeout(() => {
document.getElementById('battle-vignette').classList.add('loaded');
loadStage++;
}, 1500);
// KROK 4: Sníh (priorita 4 - nejméně důležité)
setTimeout(() => {
showLoading('Přidávání sněhu...');
initDustParticles();
setTimeout(() => {
hideLoading();
}, 500);
}, 2000);
function initFireCanvas() {
const canvas = document.getElementById('fireCanvas');
const ctx = canvas.getContext('2d');
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
window.addEventListener('resize', () => {
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
});
const mouse = { x: null, y: null, radius: 150 };
window.addEventListener('mousemove', (e) => {
mouse.x = e.x;
mouse.y = e.y;
});
const fireColors = ['#fdcf58', '#f27d0c', '#800909', '#f07f13', '#757676', '#ff6b35', '#d62828'];
class Particle {
constructor() {
this.x = Math.random() * canvas.width;
this.y = Math.random() * canvas.height;
this.size = Math.random() * 3 + 1;
this.baseSize = this.size;
this.speedX = Math.random() * 0.5 - 0.25;
this.speedY = Math.random() * -1.5 - 0.5;
this.color = fireColors[Math.floor(Math.random() * fireColors.length)];
this.opacity = Math.random() * 0.5 + 0.3;
this.fadeSpeed = Math.random() * 0.01 + 0.005;
this.growing = Math.random() > 0.5;
}
update() {
this.x += this.speedX;
this.y += this.speedY;
if (mouse.x && mouse.y) {
const dx = this.x - mouse.x;
const dy = this.y - mouse.y;
const distance = Math.sqrt(dx * dx + dy * dy);
if (distance < mouse.radius) {
const force = (mouse.radius - distance) / mouse.radius;
const angle = Math.atan2(dy, dx);
this.x += Math.cos(angle) * force * 3;
this.y += Math.sin(angle) * force * 3;
}
}
if (this.growing) {
this.opacity += this.fadeSpeed;
if (this.opacity >= 0.8) this.growing = false;
} else {
this.opacity -= this.fadeSpeed;
if (this.opacity <= 0) this.growing = true;
}
this.size = this.baseSize + Math.sin(Date.now() * 0.003 + this.x) * 0.5;
if (this.y < -10) {
this.y = canvas.height + 10;
this.x = Math.random() * canvas.width;
}
if (this.x < -10) this.x = canvas.width + 10;
if (this.x > canvas.width + 10) this.x = -10;
}
draw() {
ctx.save();
ctx.globalAlpha = this.opacity;
ctx.fillStyle = this.color;
ctx.shadowBlur = 15;
ctx.shadowColor = this.color;
ctx.beginPath();
ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);
ctx.fill();
ctx.restore();
}
}
const particles = [];
// Postupné přidávání částic
let addedParticles = 0;
const addInterval = setInterval(() => {
if (addedParticles < particleCount) {
particles.push(new Particle());
addedParticles++;
} else {
clearInterval(addInterval);
canvas.classList.add('loaded');
}
}, 20);
function animate() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
particles.forEach(particle => {
particle.update();
particle.draw();
});
requestAnimationFrame(animate);
}
animate();
}
function loadWarriorImages() {
const container = document.getElementById('battle-container');
const images = container.querySelectorAll('img');
let loadedCount = 0;
images.forEach(img => {
const src = img.getAttribute('data-src');
const tempImg = new Image();
tempImg.onload = () => {
img.src = src;
loadedCount++;
if (loadedCount === images.length) {
container.classList.add('loaded');
}
};
tempImg.onerror = () => {
loadedCount++;
if (loadedCount === images.length) {
container.classList.add('loaded');
}
};
tempImg.src = src;
});
}
function initDustParticles() {
const dustLayer = document.getElementById('dust-layer');
const container = document.getElementById('dust-container');
// Postupné přidávání sněhových částic
let addedDust = 0;
const dustInterval = setInterval(() => {
if (addedDust < dustCount) {
const particle = document.createElement('div');
particle.className = 'dust-particle';
// Různé velikosti
if (addedDust % 3 === 0) particle.classList.add('dust-particle-medium');
if (addedDust % 5 === 0) particle.classList.add('dust-particle-large');
particle.style.left = Math.random() * 100 + '%';
particle.style.animationDelay = Math.random() * 3 + 's';
particle.style.animationDuration = (Math.random() * 3 + 5) + 's';
dustLayer.appendChild(particle);
addedDust++;
} else {
clearInterval(dustInterval);
container.classList.add('loaded');
}
}, 50);
}
})();
</script>
</body>
</html>}<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- 🔥 BERSERKER RAGE HANDLER - VYNULOVÁNÍ OBRANY PŘÍŠTÍ KOLO -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- 🔧 INICIALIZACE PROMĚNNÝCH -->
(if: $berserkerRageActive is 0)[
(set: $berserkerRageActive to false)
]
<!-- ⭐ DETEKCE A AKTIVACE BERSERKER RAGE KARTY -->
(if: $chosenPlayerCard contains "type" and $chosenPlayerCard's type is "berserker")[
(if: $chosenPlayerCard's name is "Zuřivost")[
<!-- ✅ AKTIVUJ BERSERKER RAGE -->
(set: $berserkerRageActive to true)
<!-- LOG -->
(set: $berserkerMsg to "<span class='combat-berserker'>ZUŘIVOST AKTIVNÍ! Příští kolo: ŽÁDNÁ OBRANA!</span>")
(set: $combatLog to it + (a: $berserkerMsg))
(set: $skipNormalResolve to false)
]
<!-- ⭐ APLIKACE EFEKTU V PŘÍŠTÍM KOLE -->
](else-if: $berserkerRageActive is true)[
<!-- VYNULUJ OBRANU HRÁČE -->
(set: $originalDefense to $playerCard's defense)
(set: $playerCard to $playerCard + (dm: "defense", 0))
<!-- LOG -->
(set: $berserkerAppliedMsg to "<span class='combat-berserker-applied'>ZUŘIVOST! Obrana snížena z " + (text: $originalDefense) + " na 0!</span>")
(set: $combatLog to it + (a: $berserkerAppliedMsg))
<!-- VIZUÁLNÍ EFEKT -->
(print: "<script>
(function() {
setTimeout(function() {
var flash = document.createElement('div');
flash.className = 'berserker-flash';
document.body.appendChild(flash);
setTimeout(function() { flash.remove(); }, 800);
// Třesení obrany
var playerBox = document.getElementById('playerHeartBox');
if (playerBox) {
playerBox.classList.add('berserker-shake');
setTimeout(function() {
playerBox.classList.remove('berserker-shake');
}, 600);
}
}, 100);
})();
</script>")
<!-- RESET -->
(set: $berserkerRageActive to false)
]
<style>
/* ═══════════════════════════════════════════════════ */
/* 🔥 BERSERKER RAGE STYLING */
/* ═══════════════════════════════════════════════════ */
/* 🃏 BERSERKER CARD */
.berserker-card {
background: linear-gradient(135deg, rgba(139, 0, 0, 0.4), rgba(220, 20, 60, 0.5)) !important;
border-color: rgba(220, 20, 60, 0.9) !important;
box-shadow: 0 0 25px rgba(220, 20, 60, 0.7), inset 0 0 15px rgba(139, 0, 0, 0.4);
animation: berserker-pulse 1.5s ease-in-out infinite;
}
.berserker-card::before,
.berserker-card::after {
border-color: #dc143c !important;
box-shadow: inset 0 0 12px rgba(220, 20, 60, 0.7) !important;
}
@keyframes berserker-pulse {
0%, 100% {
box-shadow: 0 0 20px rgba(220, 20, 60, 0.6), inset 0 0 10px rgba(139, 0, 0, 0.3);
}
50% {
box-shadow: 0 0 40px rgba(220, 20, 60, 1), inset 0 0 20px rgba(139, 0, 0, 0.6);
}
}
/* 🔥 SCREEN FLASH */
.berserker-flash {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: radial-gradient(circle at center,
rgba(220, 20, 60, 0.4) 0%,
rgba(139, 0, 0, 0.2) 40%,
transparent 70%);
pointer-events: none;
z-index: 9998;
animation: berserker-flash-anim 0.8s ease-out forwards;
}
@keyframes berserker-flash-anim {
0% {
opacity: 0;
}
30% {
opacity: 1;
}
100% {
opacity: 0;
}
}
/* 💥 TŘESENÍ HEALTH BOXU */
@keyframes berserker-shake {
0%, 100% { transform: translateX(0) rotate(0deg); }
10% { transform: translateX(-8px) rotate(-3deg); }
20% { transform: translateX(8px) rotate(3deg); }
30% { transform: translateX(-8px) rotate(-3deg); }
40% { transform: translateX(8px) rotate(3deg); }
50% { transform: translateX(-6px) rotate(-2deg); }
60% { transform: translateX(6px) rotate(2deg); }
70% { transform: translateX(-4px) rotate(-1deg); }
80% { transform: translateX(4px) rotate(1deg); }
90% { transform: translateX(-2px) rotate(-0.5deg); }
}
.berserker-shake {
animation: berserker-shake 0.6s cubic-bezier(0.36, 0.07, 0.19, 0.97);
}
</style>(set: $hracHP to 7)(set: $body to 1)<h4>Nyní zřejmě nikdo kromě tvého učitele a pár kupců neví, že se jmenuješ: <span style="font-size:1.3em; font-weight:bold;">|jmeno>[]</span></h4><div id="bio-box" style="background: linear-gradient(135deg, rgba(166,124,26,0.1) 0%, rgba(139,105,20,0.1) 100%); border: 2px solid rgba(139,105,20,0.4); border-radius: 8px; padding: 15px; margin: 15px 0; min-height: 40px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); display: none;">|bio>[]</div><style>.stat-cards-container tw-link {border: none !important; padding: 0 !important; margin: 0 !important; background: linear-gradient(135deg, rgba(166,124,26,0.1) 0%, rgba(139,105,20,0.1) 100%); !important; box-shadow: 0 4px 6px rgba(0,0,0,0.1); !important; display: block !important;} .stat-cards-container tw-link:hover {transform: none !important; background: none !important;} .stat-card {cursor: pointer; transition: transform 0.3s ease, box-shadow 0.3s ease;} .stat-card:hover {transform: translateY(-5px) !important; box-shadow: 0 12px 25px rgba(0,0,0,0.1), inset 0 2px 4px rgba(139,105,20,0.1) !important;} #staty tw-link {display: inline-block !important; margin-right: 10px !important;}</style><div class="stat-cards-container">(link-repeat: '<div class="stat-card stat-card-hp"><div class="stat-card-content"><div class="stat-card-name">RON</div></div></div>')[(set: $vybranaPostava to "RON")(set: $heroBio to "Mladý kluk z daleké vesnice Pastevnice, který se zachránil útěkem před pleniteli. Od té doby se nikde neusadil a přijímá různé práce, aby přežil. Inventář: léčivý lektvar")(replace: ?jmeno)[Ron](replace: ?bio)[$heroBio](replace: ?pokracovat)[(if: $body is 0 and $vybranaPostava is not "")[(go-to: "Zacatek")]](set: $showBio to true)] (link-repeat: '<div class="stat-card stat-card-atk"><div class="stat-card-content"><div class="stat-card-name">DALEK</div></div></div>')[(set: $vybranaPostava to "DALEK")(set: $heroBio to "Původně městský strážce, na kterého se nadřízení pokoušeli svalit vinu. Raději se vytratil hledat štěstí jinde. Inventář: kvalitní meč")(replace: ?jmeno)[Dalek](replace: ?bio)[$heroBio](replace: ?pokracovat)[(if: $body is 0 and $vybranaPostava is not "")[(go-to: "Zacatek")]](set: $showBio to true)]<script>setTimeout(function(){var links=document.querySelectorAll('.stat-cards-container tw-link');links.forEach(function(link){link.addEventListener('click',function(){document.getElementById('bio-box').style.display='block';});});},100);</script><div id="staty"><ul><li>''Životy (HP):'' <strong>|hp>[$hracHP]</strong> (if: $body > 0)[(link-repeat: "<span class='add-stat'>+1 HP</span>")[(set: $hracHP to $hracHP + 1)(set: $body to $body - 1)(replace: ?hp)[$hracHP](replace: ?body)[$body](replace: ?pokracovat)[(if: $body is 0 and $vybranaPostava is not "")[(go-to: "Zacatek")]]]]</li><li>''Útok (ATK):'' <strong>|atk>[$hracATK]</strong> (if: $body > 0)[(link-repeat: "<span class='add-stat'>+1 ATK</span>")[(set: $hracATK to $hracATK + 1)(set: $body to $body - 1)(replace: ?atk)[$hracATK](replace: ?body)[$body](replace: ?pokracovat)[(if: $body is 0 and $vybranaPostava is not "")[(go-to: "Zacatek")]]]]</li><li>''Umění:'' <strong>|umeni>[$umeni]</strong> (if: $body > 0)[(link-repeat: "<span class='add-stat'>+1 Umění</span>")[(set: $umeni to $umeni + 1)(set: $body to $body - 1)(replace: ?umeni)[$umeni](replace: ?body)[$body](replace: ?pokracovat)[(if: $body is 0 and $vybranaPostava is not "")[(go-to: "Zacatek")]]]]</li><li>''(text-colour:#664d00)[Zbývající body:]''<strong>|body>[$body]</strong></li></ul>|pokracovat>[]</div>{
<div class="scene-card"><div class="dice-container"><div class="dice-player-box"></div><div class="dice-enemy-box"></div></div></div><div style="background: rgba(255,215,0,0.1); padding: 5px; border-radius: 2px; margin: 5px 0; text-align: center;"></div>
(set: $gold to $gold - 1)
(set: $hp to $maxHp)
(set: $stamina to $maxStamina)
(set: $totalStamina to $totalMaxStamina)
(set: $trait1 to false)
(set: $trait2 to false)
(set: $defPenalty to 0)
(set: $finalDef to $baseDef + $defPenalty)
''Po zaplacení jedné hřivny za noc v kempu se cítíš kompletně zotavený. Zranění jsou pryč, postihy zmizely a Kondice je na maximu!''
Utracena jedna hřivna🌙
</div>
<br>
[[Vstát z postele|Trh]]
(display: "InventoryHUD")
}{{<!-- CardBattle passage - UPDATED with Poison System -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- Nastavení portretu enemy -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<style>
.enemy-portrait-background {
background-image: url('https://files.catbox.moe/qnb3if.jpg');
}
</style>
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- ⚙️ INICIALIZACE BITVY -->
<!-- ═══════════════════════════════════════════════════════════════ -->
(if: visits is 1 AND $battleInitialized is not true)[
(set: $battleInitialized to true)
(set: $combatLog to (a:))
(set: $weaponMissChance to 0)
(set: $cardMissChance to 0)
(set: $turnCounter to 1)
<!-- ⭐ POISON INIT -->
(set: $playerPoisonStacks to 0)
(set: $playerPoisonDuration to 0)
(set: $enemyPoisonStacks to 0)
(set: $enemyPoisonDuration to 0)
(set: $lastPoisonTickTurn to 0)
(display: "PerformanceDetect")
(display: "LowPerfMode")
<!-- ⭐ WEAPON FIRST PLAY TRACKING -->
(set: $weaponsActivatedThisBattle to (dm:))
(set: $enemyWeaponsActivatedThisBattle to (dm:))
(set: $isPlayerWeaponFirstPlay to false)
(set: $isEnemyWeaponFirstPlay to false)
<!-- ⭐ NOVÉ: TRACKING PŘIDANÝCH KARET -->
(set: $cardsAddedThisBattle to (a:))
<!-- ⭐ MEDITATION SYSTEM INIT -->
(set: $meditationActive to false)
(set: $nextCardFree to false)
(set: $meditationBonusAttack to 0)
(set: $meditationBonusDefense to 0)
(set: $skipNormalResolve to false)
<!-- ⭐ RESET ZBRANĚ HRÁČE NA ZAČÁTKU SOUBOJE -->
(set: $weaponImageURL to "")
(set: $weaponDamage to 0)
(set: $weaponName to "")
(set: $weaponMinAttack to 0)
(set: $weaponMaxAttack to 0)
(set: $weaponLevel to 0)
(set: $currentWeaponName to "")
<!-- ⭐ NOVÉ: RESET ZBRANĚ NEPŘÍTELE -->
(set: $enemyWeaponImageURL to "")
(set: $enemyWeaponDamage to 0)
(set: $enemyWeaponName to "")
(set: $enemyWeaponMinAttack to 0)
(set: $enemyWeaponMaxAttack to 0)
(set: $enemyWeaponLevel to 0)
(set: $currentEnemyWeaponName to "")
<!-- ⭐ PERSISTENTNÍ UKLÁDÁNÍ LEVELŮ ZBRANÍ -->
(if: $weaponLevels is 0)[
(set: $weaponLevels to (dm:))
]
<!-- ⭐ NOVÉ: Levely zbraní nepřítele -->
(if: $enemyWeaponLevels is 0)[
(set: $enemyWeaponLevels to (dm:))
]
<!-- 🧪 TEST MODE: Změna HP nepřítele -->
(if: $testModeEnabled is true)[
(set: $enemyHP to 300)
(set: $enemyMaxHP to 300)
]
<!-- Pokud hraje první nepřítel, vyber mu kartu -->
(if: $isEnemyFirstThisTurn is true)[
(set: $playableEnemyCards to (a:))
(for: each _card, ...$enemyHand)[
(if: _card's cost <= 3)[
(set: $playableEnemyCards to $playableEnemyCards + (a: _card))
]
]
(if: $playableEnemyCards's length > 0)[
(set: $chosenEnemyCard to (either: ...$playableEnemyCards))
](else:)[
(set: $chosenEnemyCard to (either: ...$enemyHand))
]
(set: $battlePhase to "enemy_waiting")
](else:)[
(set: $battlePhase to "selecting")
]
<!-- Spusť hlavní hudbu -->
(print: "<script>
changeMusic('https://ajksner.github.io/Prototyp-gamebook/Sound/Echoes%20of%20Valhalla%20postava.mp3', 0.5);
</script>")
<!-- Zachování štítových HP z equipování -->
(set: $tempHP to $shieldHead + $shieldChest + $shieldLimbs)
<!-- Inicializace čítačů zásahů pro animace -->
(if: $playerHitCounter is 0)[(set: $playerHitCounter to 0)]
(if: $enemyHitCounter is 0)[(set: $enemyHitCounter to 0)]
<!-- Max stamina bez traitů -->
(set: $effectiveMaxStamina to $maxStamina)
(if: $stamina > $effectiveMaxStamina)[(set: $stamina to $effectiveMaxStamina)]
<!-- ⭐ NOVÉ: Ulož originální balíček pro shuffle -->
(if: $originalDeck is 0)[
(set: $originalDeck to (a: ...$allAvailableCards))
]
]
(if: $battlePhase is "resolving")[
(set: $playerCard to $chosenPlayerCard)
<!-- ⭐ RESET MISS FLAGS NA ZAČÁTKU KAŽDÉHO KOLA -->
(set: $playerCardMissed to false)
(set: $playerMissed to false)
(set: $cardMissChance to 0)
<!-- ⚠️ NEJDŘÍV NASTAV ENEMY KARTU -->
(if: $chosenEnemyCard is 0)[
(set: $playableEnemyCards to (a:))
(for: each _card, ...$enemyHand)[
(if: _card's cost <= 3)[
(set: $playableEnemyCards to $playableEnemyCards + (a: _card))
]
]
(if: $playableEnemyCards's length > 0)[
(set: $enemyCard to (either: ...$playableEnemyCards))
](else:)[
(set: $enemyCard to (either: ...$enemyHand))
]
](else:)[
(set: $enemyCard to $chosenEnemyCard)
]
<!-- ⚔️ WEAPON FIRST PLAY HANDLER -->
(display: "WeaponFirstPlayHandler")
<!-- ⭐ MEDITATION HANDLER - DETEKCE MEDITATION KARTY -->
(display: "MeditationHandler")
<!-- ⚔️ NOVÉ: COUNTER HANDLER - DETEKCE A ÚPRAVA COUNTER KARTY -->
(display: "CounterHandler")
<!-- ⚡ TACTICAL HANDLER - MUSÍ BÝT PŘED ODEČTENÍM STAMINY! -->
(display: "TacticalHandler")
<!-- ⚔️ DOUBLE SLASH HANDLER - NOVÝ -->
(display: "DoubleSlashHandler")
<!-- 🛡️ PARRY HANDLER - PŘESUŇ SEM! -->
(display: "ParryHandler")
<!-- ⭐ DODGE HANDLER - NEGACE KARET -->
(display: "DodgeHandler")
<!-- ⭐ POKUD JE MEDITATION, PŘESKOČ ZBYTEK RESOLVE -->
(if: $skipNormalResolve is not true)[
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- ⭐ KROK 1: POKUD JE ZAHRANÁ KARTA HRÁČE ZBRAŇ, AKTIVUJ JI -->
<!-- ═══════════════════════════════════════════════════════════════ -->
(if: $playerCard contains "type" and $playerCard's type is "weapon")[
(if: $playerCard contains "image")[
(set: $weaponImageURL to $playerCard's image)
]
(set: $weaponName to $playerCard's name)
<!-- KONTROLA: Má karta systém levelů? -->
(if: $playerCard contains "levels")[
<!-- ZBRAŇ S LEVELY -->
(if: $weaponLevels contains $weaponName)[
(set: $weaponLevel to $weaponLevels's ($weaponName))
](else:)[
(set: $weaponLevel to 1)
]
(if: $weaponName is $currentWeaponName)[
(set: $weaponLevel to $weaponLevel + 1)
]
(set: $currentWeaponName to $weaponName)
(if: $weaponLevel > ($playerCard's levels's length))[
(set: $weaponLevel to $playerCard's levels's length)
]
(set: $weaponLevels to $weaponLevels + (dm: $weaponName, $weaponLevel))
(if: $weaponLevel >= ($playerCard's levels's length))[
(if: $weaponMissChance > 0)[
(set: $maxLevelMsg to "<span class='combat-weapon'>" + $weaponName + " - MISTR LUČIŠTNÍK! (Šance miss: " + (text: $weaponMissChance) + "%)</span>")
](else:)[
(set: $maxLevelMsg to "<span class='combat-weapon'> " + $weaponName + " dosáhla MAXIMÁLNÍ ÚROVNĚ " + (text: $weaponLevel) + "!</span>")
]
(set: $combatLog to it + (a: $maxLevelMsg))
]
(set: _currentLevel to $playerCard's levels's ($weaponLevel))
(set: $weaponMinAttack to _currentLevel's minAttack)
(set: $weaponMaxAttack to _currentLevel's maxAttack)
<!-- ⭐ RESET MISS CHANCE NA 0 (důležité pro melee zbraně!) -->
(set: $weaponMissChance to 0)
<!-- ⭐ ULOŽENÍ MISS CHANCE Z AKTUÁLNÍHO LEVELU (jen pokud existuje) -->
(if: _currentLevel contains "missChance")[
(set: $weaponMissChance to _currentLevel's missChance)
]
<!-- ⭐ KONTROLA addsCard -->
(if: _currentLevel contains "addsCard")[
(set: _cardToAdd to _currentLevel's addsCard)
(set: _uniqueKey to $weaponName + "_" + _cardToAdd)
(if: $cardsAddedThisBattle does not contain _uniqueKey)[
(if: _cardToAdd is "skullcrusher")[
(set: $allAvailableCards to $allAvailableCards + (a: (dm:
"name", "Drcení hlav",
"minAttack", 9,
"maxAttack", 19,
"defense", 0,
"cost", 3,
"type", "precision",
"image", "https://files.catbox.moe/qgb5hk.jpg"
)))
(set: $cardsAddedThisBattle to $cardsAddedThisBattle + (a: _uniqueKey))
(set: $addCardMsg to "<span class='combat-weapon'>NOVÁ KARTA: Drcení hlav! (9-19 dmg)</span>")
(set: $combatLog to it + (a: $addCardMsg))
]
]
]
(if: $weaponMissChance > 0)[
(set: $weaponInitMsg to "<span class='combat-weapon'> " + $weaponName + " | Úroveň: " + (text: $weaponLevel) + " | Damage: " + (text: $weaponMinAttack) + "-" + (text: $weaponMaxAttack) + " | Šance minutí: " + (text: $weaponMissChance) + "%</span>")
](else:)[
(set: $weaponInitMsg to "<span class='combat-weapon'>" + $weaponName + " | Jistota se zbraní: " + (text: $weaponLevel) + " | Rozsah: " + (text: $weaponMinAttack) + "-" + (text: $weaponMaxAttack) + "</span>")
]
(set: $combatLog to it + (a: $weaponInitMsg))
](else-if: $playerCard contains "minAttack" and $playerCard contains "maxAttack")[
<!-- ZBRAŇ BEZ LEVELŮ (starý systém) -->
(set: $weaponMinAttack to $playerCard's minAttack)
(set: $weaponMaxAttack to $playerCard's maxAttack)
(set: $weaponLevel to 0)
(set: $weaponInitMsg to "<span class='combat-weapon'>Vytahuješ: " + $weaponName + ", rozsah: " + (text: $weaponMinAttack) + "-" + (text: $weaponMaxAttack) + "</span>")
(set: $combatLog to it + (a: $weaponInitMsg))
](else:)[
<!-- Fallback -->
(set: $weaponMinAttack to 0)
(set: $weaponMaxAttack to 0)
(set: $weaponLevel to 0)
]
]
<!-- ⭐ KONTROLA: Je enemy karta typu weapon? -->
(if: $enemyCard contains "type" and $enemyCard's type is "weapon")[
(if: $enemyCard contains "image")[
(set: $enemyWeaponImageURL to $enemyCard's image)
]
(set: $enemyWeaponName to $enemyCard's name)
<!-- Má enemy weapon levely? -->
(if: $enemyCard contains "levels")[
<!-- ENEMY WEAPON S LEVELY -->
(if: $enemyWeaponLevels contains $enemyWeaponName)[
(set: $enemyWeaponLevel to $enemyWeaponLevels's ($enemyWeaponName))
](else:)[
(set: $enemyWeaponLevel to 1)
]
(if: $enemyWeaponName is $currentEnemyWeaponName)[
(set: $enemyWeaponLevel to $enemyWeaponLevel + 1)
]
(set: $currentEnemyWeaponName to $enemyWeaponName)
(if: $enemyWeaponLevel > ($enemyCard's levels's length))[
(set: $enemyWeaponLevel to $enemyCard's levels's length)
]
(set: $enemyWeaponLevels to $enemyWeaponLevels + (dm: $enemyWeaponName, $enemyWeaponLevel))
(if: $enemyWeaponLevel >= ($enemyCard's levels's length))[
(set: $maxLevelMsg to "<span class='combat-weapon-enemy'> " + $enemyWeaponName + " dosáhla MAXIMÁLNÍ ÚROVNĚ " + (text: $enemyWeaponLevel) + "!</span>")
(set: $combatLog to it + (a: $maxLevelMsg))
]
(set: _currentEnemyLevel to $enemyCard's levels's ($enemyWeaponLevel))
(set: $enemyWeaponMinAttack to _currentEnemyLevel's minAttack)
(set: $enemyWeaponMaxAttack to _currentEnemyLevel's maxAttack)
<!-- ⭐ RESET ENEMY MISS CHANCE -->
(set: $enemyWeaponMissChance to 0)
(if: _currentEnemyLevel contains "missChance")[
(set: $enemyWeaponMissChance to _currentEnemyLevel's missChance)
]
(set: $weaponInitMsg to "<span class='combat-weapon-enemy'> Nepřítel vytáhl: " + $enemyWeaponName + " | Jistota: " + (text: $enemyWeaponLevel) + " | Rozsah: " + (text: $enemyWeaponMinAttack) + "-" + (text: $enemyWeaponMaxAttack) + "</span>")
(set: $combatLog to it + (a: $weaponInitMsg))
](else-if: $enemyCard contains "minAttack" and $enemyCard contains "maxAttack")[
<!-- ENEMY WEAPON BEZ LEVELŮ -->
(set: $enemyWeaponMinAttack to $enemyCard's minAttack)
(set: $enemyWeaponMaxAttack to $enemyCard's maxAttack)
(set: $enemyWeaponLevel to 0)
(set: $weaponInitMsg to "<span class='combat-weapon-enemy'> Nepřítel vytáhl: " + $enemyWeaponName + ", rozsah: " + (text: $enemyWeaponMinAttack) + "-" + (text: $enemyWeaponMaxAttack) + "</span>")
(set: $combatLog to it + (a: $weaponInitMsg))
](else:)[
(set: $enemyWeaponMinAttack to 0)
(set: $enemyWeaponMaxAttack to 0)
(set: $enemyWeaponLevel to 0)
]
]
<!-- ⭐ RE-ROLL ENEMY WEAPON pokud je aktivní, ALE enemy nezahrál weapon tento tah -->
(if: $enemyWeaponName is not "" and $enemyWeaponName is not 0)[
(if: not ($enemyCard contains "type" and $enemyCard's type is "weapon"))[
(if: $enemyWeaponMaxAttack > 0)[
(set: $enemyWeaponDamage to (random: $enemyWeaponMinAttack, $enemyWeaponMaxAttack))
]
]
]
(if: $stamina > $effectiveMaxStamina)[(set: $stamina to $effectiveMaxStamina)]
<!-- Detekce armor karty -->
(if: $playerCard contains "type" and $playerCard's type is "armor")[
(set: $armorPlayedThisTurn to true)
](else:)[
(set: $armorPlayedThisTurn to false)
]
<!-- ⭐ NOVÉ: Odeber kartu z celkového balíčku -->
(set: $tempAvailable to (a:))
(for: each _card, ...$allAvailableCards)[
(if: _card's name is not $playerCard's name)[
(set: $tempAvailable to $tempAvailable + (a: _card))
](else:)[
(set: _card to 0)
]
]
(set: $allAvailableCards to $tempAvailable)
<!-- Zamíchání karet v ruce -->
(set: $playerHand to (a:))
(set: $tempPool to (shuffled: ...$allAvailableCards))
(set: $maxHandSize to 4)
(for: each _card, ...$tempPool)[
(if: $playerHand's length < $maxHandSize and _card is not 0)[
(set: $isInHand to false)
(for: each _existing, ...$playerHand)[
(if: _existing's name is _card's name)[
(set: $isInHand to true)
]
]
(if: $isInHand is false)[
(set: $playerHand to $playerHand + (a: _card))
]
]
]
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- VÝPOČET ÚTOKU HRÁČE - VČETNĚ MISS CHANCE PRO BASIC KARTY -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- KROK 1: Zjisti base attack karty -->
(if: $playerCard contains "type" and $playerCard's type is "weapon")[
<!-- Weapon karta - použij damage z levelů -->
(if: $playerCard contains "levels")[
(if: $weaponLevel > 0 and $weaponLevel <= ($playerCard's levels's length))[
(set: _currentLevel to $playerCard's levels's ($weaponLevel))
(set: $playerAttack to (random: _currentLevel's minAttack, _currentLevel's maxAttack))
](else:)[
(set: _level1 to $playerCard's levels's 1)
(set: $playerAttack to (random: _level1's minAttack, _level1's maxAttack))
]
](else-if: $playerCard contains "minAttack" and $playerCard contains "maxAttack")[
(set: $playerAttack to (random: $playerCard's minAttack, $playerCard's maxAttack))
](else:)[
(set: $playerAttack to 0)
]
](else-if: $playerCard contains "minAttack" and $playerCard contains "maxAttack")[
(set: $playerAttack to (random: $playerCard's minAttack, $playerCard's maxAttack))
](else-if: $playerCard contains "attack")[
(set: $playerAttack to $playerCard's attack)
](else:)[
(set: $playerAttack to 0)
]
<!-- KROK 2: Kontrola MISS CHANCE u BASIC karet -->
(set: $playerCardMissed to false)
(set: $cardMissChance to 0)
(if: not ($playerCard contains "type" and $playerCard's type is "weapon"))[
(if: $playerCard contains "missChance")[
(if: $playerCard's missChance > 0)[
(set: $cardMissChance to $playerCard's missChance)
(set: _missRoll to (random: 1, 100))
(if: _missRoll <= $playerCard's missChance)[
(set: $playerCardMissed to true)
(set: $playerAttack to 0)
(set: $missMsg to "<span class='combat-miss'>Minul jsi! (Šance: " + (text: $playerCard's missChance) + "%)</span>")
(set: $combatLog to it + (a: $missMsg))
]
]
]
]
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- ⚡ ODEBRÁNÍ/PŘIDÁNÍ STAMINY - PŘESUNUTO SEM! -->
<!-- ═══════════════════════════════════════════════════════════════ -->
(if: $playerCard contains "type" and ($playerCard's type is "meditation" or $playerCard's type is "meditationstrong"))[
<!-- ⭐ MEDITATION - cost zpracuje MeditationHandler -->
](else-if: $playerCard's cost >= 0)[
<!-- ⭐ POZITIVNÍ COST - VŽDY ZAPLATÍŠ (i při miss) -->
(set: $stamina to $stamina - $playerCard's cost)
](else:)[
<!-- ⭐ NEGATIVNÍ COST (STAMINA GAIN) - POUZE POKUD NETREFILA -->
(if: $playerCardMissed is false)[
(set: $stamina to $stamina + (abs: $playerCard's cost))
](else:)[
<!-- Miss - žádná stamina se nepřidá, ale vypíše se hláška -->
(set: $missStaminaMsg to "<span class='combat-miss'>✖ Minul jsi - žádná stamina se neobnovila!</span>")
(set: $combatLog to it + (a: $missStaminaMsg))
]
]
<!-- ⚖️ LIMIT STAMINY -->
(if: $stamina > $effectiveMaxStamina)[(set: $stamina to $effectiveMaxStamina)]
<!-- ⚔️ VARIABLE ATTACK HANDLER - MUSÍ BÝT HNED TADY -->
(display: "VariableAttackHandler")
<!-- ⚔️ LAST STAND HANDLER -->
(display: "LastStandHandler")
<!-- ⚔️ EXECUTE HANDLER -->
(display: "ExecuteHandler")
<!-- 🎯 PRECISION HANDLER -->
(display: "PrecisionHandler")
<!-- ⚡ FORTIFY HANDLER - PŘIDEJ TADY! -->
(display: "FortifyHandler")
<!-- 🔥 BERSERKER RAGE HANDLER - NOVÉ! -->
(display: "BerserkerRageHandler")
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- ⭐ PŘIDEJ WEAPON BONUS HRÁČE -->
<!-- ═══════════════════════════════════════════════════════════════ -->
(if: $weaponName is not "" and $weaponName is not 0)[
(if: $weaponMinAttack > 0 and $weaponMaxAttack > 0)[
<!-- ⭐ ROLL WEAPON DAMAGE -->
(set: $weaponDamage to (random: $weaponMinAttack, $weaponMaxAttack))
<!-- ⭐ MISS CHECK PRO WEAPON (LUK) - POUZE PRO WEAPON KARTY! -->
(set: $playerMissed to false)
(if: $weaponMissChance > 0)[
(set: _missRoll to (random: 1, 100))
(if: _missRoll <= $weaponMissChance)[
(set: $playerMissed to true)
(set: $missMsg to "<span class='combat-miss'>Jednou jsi minul! (Šance: " + (text: $weaponMissChance) + "%)</span>")
(set: $combatLog to it + (a: $missMsg))
]
]
<!-- ⚔️ VÝPOČET WEAPON DAMAGE -->
(if: $isPlayerWeaponFirstPlay is true)[
<!-- První zahrání - zbraň ještě neutočí -->
(set: $firstWeaponMsg to "<span class='combat-weapon-first'>Vytahuješ zbraň - od příštího kola útočí!</span>")
(set: $combatLog to it + (a: $firstWeaponMsg))
](else:)[
<!-- ✅ NORMÁLNÍ ZAHRÁNÍ -->
(if: $playerMissed is false and $playerCardMissed is false)[
<!-- Ani weapon ani karta neminuly - přičti bonus -->
(set: $playerAttack to $playerAttack + $weaponDamage)
](else-if: $playerMissed is true and $playerCardMissed is false)[
<!-- Weapon minul, ale karta trefila - pouze base attack -->
<!-- $playerAttack už obsahuje base damage -->
](else-if: $playerCardMissed is true)[
<!-- Karta minula - $playerAttack je už 0, nepřičítej nic -->
]
]
]
]
<!-- Bonus z traitu -->
(if: $umeni is 1)[
(set: $playerAttack to $playerAttack + 1)
]
(if: $playerAttack < 0)[(set: $playerAttack to 0)]
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- VÝPOČET ÚTOKU NEPŘÍTELE - WEAPON KARTY ÚTOČÍ SVÝM BASE DAMAGE -->
<!-- ═══════════════════════════════════════════════════════════════ -->
(if: $enemyCard contains "type" and $enemyCard's type is "weapon")[
<!-- ⚔️ ENEMY WEAPON KARTA - ÚTOČÍ SVÝM BASE DAMAGE -->
(if: $enemyCard contains "levels")[
<!-- Enemy weapon s levely - vezmi damage z aktuálního levelu -->
(if: $enemyWeaponLevel > 0 and $enemyWeaponLevel <= ($enemyCard's levels's length))[
(set: _currentEnemyLevel to $enemyCard's levels's ($enemyWeaponLevel))
(set: $enemyAttack to (random: _currentEnemyLevel's minAttack, _currentEnemyLevel's maxAttack))
](else:)[
<!-- Fallback na level 1 -->
(set: _enemyLevel1 to $enemyCard's levels's 1)
(set: $enemyAttack to (random: _enemyLevel1's minAttack, _enemyLevel1's maxAttack))
]
](else-if: $enemyCard contains "minAttack" and $enemyCard contains "maxAttack")[
<!-- Enemy weapon bez levelů (starý systém) -->
(set: $enemyAttack to (random: $enemyCard's minAttack, $enemyCard's maxAttack))
](else:)[
(set: $enemyAttack to 0)
]
](else-if: $enemyCard contains "minAttack" and $enemyCard contains "maxAttack")[
<!-- Normální karta (ne weapon) s variabilním útokem -->
(set: $enemyAttack to (random: $enemyCard's minAttack, $enemyCard's maxAttack))
](else-if: $enemyCard contains "attack")[
(set: $enemyAttack to $enemyCard's attack)
](else:)[
(set: $enemyAttack to 0)
]
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- ⭐ PŘIDEJ WEAPON BONUS NEPŘÍTELE -->
<!-- ═══════════════════════════════════════════════════════════════ -->
(if: $enemyWeaponName is not "" and $enemyWeaponName is not 0)[
(if: $enemyWeaponMinAttack > 0 and $enemyWeaponMaxAttack > 0)[
<!-- ⭐ ROLL ENEMY WEAPON DAMAGE -->
(set: $enemyWeaponDamage to (random: $enemyWeaponMinAttack, $enemyWeaponMaxAttack))
<!-- ⚔️ VÝPOČET ENEMY WEAPON DAMAGE -->
(if: $isEnemyWeaponFirstPlay is true)[
<!-- ❌ PRVNÍ ZAHRÁNÍ TÉTO ZBRANĚ - BEZ BONUSU -->
(set: $firstEnemyWeaponMsg to "<span class='combat-weapon-enemy-first'>Nepřítel tasí zbraň</span>")
(set: $combatLog to it + (a: $firstEnemyWeaponMsg))
](else:)[
<!-- ✅ NORMÁLNÍ ZAHRÁNÍ - PLNÝ DAMAGE -->
(set: $enemyAttack to $enemyAttack + $enemyWeaponDamage)
]
]
]
(if: $enemyAttack < 0)[(set: $enemyAttack to 0)]
<!-- ⭐ NOVÉ: MISS CHANCE PRO ENEMY KARTY -->
(set: $enemyCardMissed to false)
(if: not ($enemyCard contains "type" and $enemyCard's type is "weapon"))[
(if: $enemyCard contains "missChance")[
(if: $enemyCard's missChance > 0)[
(set: _enemyMissRoll to (random: 1, 100))
(if: _enemyMissRoll <= $enemyCard's missChance)[
(set: $enemyCardMissed to true)
(set: $enemyAttack to 0)
(set: $missMsg to "<span class='combat-miss'>Nepřítel minul! (Šance: " + (text: $enemyCard's missChance) + "%)</span>")
(set: $combatLog to it + (a: $missMsg))
]
]
]
]
<!-- Výpočet damage -->
(set: $damageToEnemy to $playerAttack - $enemyCard's defense)
(if: $damageToEnemy < 0)[(set: $damageToEnemy to 0)]
(set: $damageToPlayer to $enemyAttack - $playerCard's defense)
(if: $damageToPlayer < 0)[(set: $damageToPlayer to 0)]
(set: $enemyHP to $enemyHP - $damageToEnemy)
(if: $playerCard contains "healing")[
(if: $playerCard's name is "Kořalka")[
(set: $healAmount to (random: 5, 10))
](else:)[
(set: $healAmount to $playerCard's healing)
]
(set: $hp to $hp + $healAmount)
(if: $hp > $maxHp)[(set: $hp to $maxHp)]
(if: $playerCard contains "consumable" and $playerCard's consumable is true)[
(if: $playerCard's name is "Kořalka")[
(set: $koralkaCount to $koralkaCount - 1)
(if: $koralkaCount <= 0)[
(set: $koralkaCount to 0)
(set: $healMessage to "<span class='combat-consume'>**Tá píše!** +" + (text: $healAmount) + " Zdraví (Spotřebováno - Zbývá: 0)</span>")
](else:)[
(set: $healMessage to "<span class='combat-consume'>**Tá píše!** +" + (text: $healAmount) + " Zdraví (Zbývá: " + (text: $koralkaCount) + ")</span>")
]
](else:)[
(set: $healMessage to "<span class='combat-healing'>**Vyléčeno!** +" + (text: $healAmount) + " HP</span>")
]
](else:)[
(set: $healMessage to "<span class='combat-healing'>**Vyléčeno!** +" + (text: $healAmount) + " HP</span>")
]
(set: $combatLog to it + (a: $healMessage))
]
<!-- Zvýšení čítače zásahů nepřítele -->
(if: $damageToEnemy > 0)[
(set: $enemyHitCounter to $enemyHitCounter + 1)
]
<!-- Aplikace brnění -->
(if: $armorPlayedThisTurn is true)[
(set: $armorToAdd to $playerCard's armorValue)
(if: $armorToAdd > 3)[(set: $armorToAdd to 3)]
(set: $tempHP to $tempHP + $armorToAdd)
(if: $tempHP > 6)[(set: $tempHP to 6)]
(set: $lastArmorDistribution to "+" + (text: $armorToAdd) + " dočasných HP")
]
(set: $originalDamage to $damageToPlayer)
<!-- Aplikace damage přes štít -->
(if: $damageToPlayer > 0)[
(if: $tempHP > 0)[
(if: $damageToPlayer >= $tempHP)[
(set: $damageToPlayer to $damageToPlayer - $tempHP)
(set: $tempHP to 0)
](else:)[
(set: $tempHP to $tempHP - $damageToPlayer)
(set: $damageToPlayer to 0)
]
]
(if: $damageToPlayer > 0)[
(set: $hp to $hp - $damageToPlayer)
(set: $playerHitCounter to $playerHitCounter + 1)
]
]
<!-- PŘEHRÁNÍ POKŘIKŮ -->
(if: $originalDamage > 0 and $damageToEnemy > 0)[
(print: "<script>if(window.combatSounds){combatSounds.playBattleCry('player', 0.6, 0); combatSounds.playBattleCry('enemy', 0.6, 300);}</script>")
](else-if: $originalDamage > 0)[
(print: "<script>if(window.combatSounds){combatSounds.playBattleCry('player', 0.6, 0);}</script>")
](else-if: $damageToEnemy > 0)[
(print: "<script>if(window.combatSounds){combatSounds.playBattleCry('enemy', 0.6, 0);}</script>")
]
<!-- ⚡ ANIMACE ZBRANĚ HRÁČE PŘI ÚTOKU -->
(if: $weaponDamage > 0)[
<!-- ⭐ KONTROLA: Má zbraň missChance? -->
(if: $weaponMissChance > 0)[
<!-- LUKOSTŘELECKÁ ANIMACE -->
(if: $playerMissed is true)[
<!-- ❌ MINUL - Rozbitý šíp -->
(print: "<script>
(function() {
setTimeout(function() {
var weapon = document.querySelector('.weapon-on-table.player-weapon');
if (weapon) {
var arrow = document.createElement('div');
arrow.className = 'arrow-projectile arrow-miss';
arrow.style.backgroundImage = 'url(https://files.catbox.moe/dk0taq.png)';
weapon.appendChild(arrow);
setTimeout(function() {
arrow.remove();
}, 2800);
}
}, 800);
})();
</script>")
](else:)[
<!-- ✅ TREFIL - Normální šíp -->
(if: $damageToEnemy > 0)[
(print: "<script>
(function() {
setTimeout(function() {
var weapon = document.querySelector('.weapon-on-table.player-weapon');
if (weapon) {
var arrow = document.createElement('div');
arrow.className = 'arrow-projectile arrow-hit';
arrow.style.backgroundImage = 'url(https://files.catbox.moe/j3v7uy.png)';
weapon.appendChild(arrow);
setTimeout(function() {
arrow.remove();
}, 2500);
}
}, 800);
})();
</script>")
(live: 1.4s)[
(stop:)
(set: $enemyHitCounter to $enemyHitCounter + 1)
]
]
]
](else:)[
<!-- 🗡️ MELEE ZBRAŇ - SLASH ANIMACE -->
(if: $damageToEnemy > 0)[
(print: "<script>
(function() {
setTimeout(function() {
var weapon = document.querySelector('.weapon-on-table.player-weapon');
if (weapon) {
weapon.classList.add('weapon-attacking');
setTimeout(function() {
weapon.classList.remove('weapon-attacking');
}, 1600);
}
}, 800);
})();
</script>")
(live: 1.4s)[
(stop:)
(set: $enemyHitCounter to $enemyHitCounter + 1)
]
]
]
]
<!-- ⚡ NOVÉ: ANIMACE ZBRANĚ NEPŘÍTELE PŘI ÚTOKU -->
(if: $enemyWeaponDamage > 0 and $originalDamage > 0)[
(print: "<script>
(function() {
setTimeout(function() {
var enemyWeapon = document.querySelector('.weapon-on-table.enemy-weapon');
if (enemyWeapon) {
// ⭐ VYTVOŘ SLASH ELEMENT
var slash = document.createElement('div');
slash.className = 'weapon-slash';
enemyWeapon.appendChild(slash);
// ⚡ SPUSŤ ANIMACI
enemyWeapon.classList.add('weapon-attacking');
// 🧹 ODSTRAŇ PO ANIMACI
setTimeout(function() {
enemyWeapon.classList.remove('weapon-attacking');
slash.remove();
}, 1600);
}
}, 800);
})();
</script>")
(live: 1.4s)[
(stop:)
(set: $playerHitCounter to $playerHitCounter + 1)
]
]
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- COMBAT LOG - SPRÁVNÉ POŘADÍ ZPRÁV -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- POISON TICK - SPUSTIT PŘED HLAVNÍ HLÁŠKOU -->
<!-- ═══════════════════════════════════════════════════════════════ -->
(unless: $lastPoisonTickTurn is a number)[(set: $lastPoisonTickTurn to 0)]
(unless: $playerPoisonStacks is a number)[(set: $playerPoisonStacks to 0)]
(unless: $playerPoisonDuration is a number)[(set: $playerPoisonDuration to 0)]
(unless: $enemyPoisonStacks is a number)[(set: $enemyPoisonStacks to 0)]
(unless: $enemyPoisonDuration is a number)[(set: $enemyPoisonDuration to 0)]
<!-- Inicializace poison damage counters -->
(set: $poisonDamageToEnemy to 0)
(set: $poisonDamageToPlayer to 0)
<!-- POISON TICK - pouze pokud je to nové kolo -->
(if: $lastPoisonTickTurn < $turnCounter)[
(set: $lastPoisonTickTurn to $turnCounter)
<!-- PLAYER POISON TICK (otrava nepřítele) -->
(if: $playerPoisonStacks > 0 and $playerPoisonDuration > 0)[
(set: $enemyHP to $enemyHP - $playerPoisonStacks)
(set: $poisonDamageToEnemy to $playerPoisonStacks)
(set: $poisonMsg to "<span class='combat-poison'> Nepřítel utrpěl " + (text: $playerPoisonStacks) + " HP z otravy! (Zbývá " + (text: ($playerPoisonDuration - 1)) + " kol)</span>")
(set: $combatLog to it + (a: $poisonMsg))
(set: $playerPoisonDuration to $playerPoisonDuration - 1)
(if: $playerPoisonDuration <= 0)[
(set: $expireMsg to "<span class='combat-poison'>Otrava nepřítele vypršela</span>")
(set: $combatLog to it + (a: $expireMsg))
(set: $playerPoisonStacks to 0)
]
]
<!-- ENEMY POISON TICK (otrava hráče) -->
(if: $enemyPoisonStacks > 0 and $enemyPoisonDuration > 0)[
(set: $hp to $hp - $enemyPoisonStacks)
(set: $poisonDamageToPlayer to $enemyPoisonStacks)
(set: $poisonMsg to "<span class='combat-poison-enemy'> Utrpěl jsi " + (text: $enemyPoisonStacks) + " HP z otravy! (Zbývá " + (text: ($enemyPoisonDuration - 1)) + " kol)</span>")
(set: $combatLog to it + (a: $poisonMsg))
(set: $enemyPoisonDuration to $enemyPoisonDuration - 1)
(if: $enemyPoisonDuration <= 0)[
(set: $expireMsg to "<span class='combat-poison-enemy'>Tvá otrava vypršela</span>")
(set: $combatLog to it + (a: $expireMsg))
(set: $enemyPoisonStacks to 0)
]
]
]
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- 🛡️ ARMOR HLÁŠKA -->
<!-- ═══════════════════════════════════════════════════════════════ -->
(if: $armorPlayedThisTurn is true)[
(set: $vysledek to "<span class='combat-armor'>**Brnění nasazeno!** +" + (text: $playerCard's armorValue) + " dočasných HP (max 6)</span>")
(set: $combatLog to it + (a: $vysledek))
]
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- ⚔️ HLAVNÍ VÝSLEDKOVÁ HLÁŠKA (včetně poison damage) -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- TOTAL DAMAGE (včetně poison z minulých kol) -->
(set: $totalDamageToEnemy to $damageToEnemy + $poisonDamageToEnemy)
(set: $totalDamageToPlayer to $originalDamage + $poisonDamageToPlayer)
(if: $totalDamageToEnemy > $totalDamageToPlayer)[
(set: $rozdil to $totalDamageToEnemy - $totalDamageToPlayer)
(if: $rozdil >= 5)[
(set: $hlasky to (a: "Dominuješ v boji!", "Tvůj úder byl silnější!", "Máš navrch!", "Nepřítel je v defenzivě!"))
](else-if: $rozdil >= 3)[
(set: $hlasky to (a: "Získáváš převahu!", "Tvůj útok je efektivnější!", "Lepší taktika!", "Vedoucí pozice!"))
](else:)[
(set: $hlasky to (a: "Mírně lepší!", "Lehká výhoda!", "Trochu lepší!", "Malá převaha!"))
]
(set: $hlaska to $hlasky's (random:1, $hlasky's length))
<!-- KONSTRUKCE HLÁŠKY S POISON -->
(set: $vysledek to "<span class='combat-victory'>**" + $hlaska + "** Vy: **-" + (text: $totalDamageToPlayer) + " HP**")
(if: $poisonDamageToPlayer > 0)[
(set: $vysledek to $vysledek + " <span class='combat-poison-enemy'>(-" + (text: $poisonDamageToPlayer) + " otravou)</span>")
]
(set: $vysledek to $vysledek + " | Nepřítel: **-" + (text: $totalDamageToEnemy) + " HP**")
(if: $poisonDamageToEnemy > 0)[
(set: $vysledek to $vysledek + " <span class='combat-poison'>(-" + (text: $poisonDamageToEnemy) + " otravou)</span>")
]
(set: $vysledek to $vysledek + "</span>")
(set: $whoGotHit to "enemy")
](else-if: $totalDamageToPlayer > $totalDamageToEnemy)[
(set: $rozdil to $totalDamageToPlayer - $totalDamageToEnemy)
(if: $rozdil >= 5)[
(set: $hlasky to (a: "Nepřítel dominuje!", "Jeho úder je mocnější!", "Jsi v ohrožení!", "Ztrácíš převahu!"))
](else-if: $rozdil >= 3)[
(set: $hlasky to (a: "Nepřítel má navrch!", "Jeho taktika je lepší!", "V nevýhodě!", "Obtížná situace!"))
](else:)[
(set: $hlasky to (a: "Lehce horší!", "Malá nevýhoda!", "Téměř vyrovnané!", "Drobná ztráta!"))
]
(set: $hlaska to $hlasky's (random:1, $hlasky's length))
<!-- KONSTRUKCE HLÁŠKY S POISON -->
(set: $vysledek to "<span class='combat-defeat'>**" + $hlaska + "** Vy: **-" + (text: $totalDamageToPlayer) + " HP**")
(if: $poisonDamageToPlayer > 0)[
(set: $vysledek to $vysledek + " <span class='combat-poison-enemy'>(-" + (text: $poisonDamageToPlayer) + " otravou)</span>")
]
(set: $vysledek to $vysledek + " | Nepřítel: **-" + (text: $totalDamageToEnemy) + " HP**")
(if: $poisonDamageToEnemy > 0)[
(set: $vysledek to $vysledek + " <span class='combat-poison'>(-" + (text: $poisonDamageToEnemy) + " otravou)</span>")
]
(set: $vysledek to $vysledek + "</span>")
(set: $whoGotHit to "player")
](else:)[
(if: $totalDamageToEnemy is 0 and $totalDamageToPlayer is 0)[
(set: $hlasky to (a: "Perfektní obrana obou!", "Nikdo nepronikl!", "Zbraně se jen střetly!", "Obě obrany držely!"))
(set: $whoGotHit to "none")
](else:)[
(set: $hlasky to (a: "Stejné poškození!", "Vyrovnaná výměna!", "Oba zasaženi stejně!", "Rovnocenný souboj!"))
(set: $whoGotHit to "both")
]
(set: $hlaska to $hlasky's (random:1, $hlasky's length))
<!-- KONSTRUKCE HLÁŠKY S POISON -->
(set: $vysledek to "<span class='combat-draw'>**" + $hlaska + "** Vy: **-" + (text: $totalDamageToPlayer) + " HP**")
(if: $poisonDamageToPlayer > 0)[
(set: $vysledek to $vysledek + " <span class='combat-poison-enemy'>(-" + (text: $poisonDamageToPlayer) + " otravou)</span>")
]
(set: $vysledek to $vysledek + " | Nepřítel: **-" + (text: $totalDamageToEnemy) + " HP**")
(if: $poisonDamageToEnemy > 0)[
(set: $vysledek to $vysledek + " <span class='combat-poison'>(-" + (text: $poisonDamageToEnemy) + " otravou)</span>")
]
(set: $vysledek to $vysledek + "</span>")
]
(set: $combatLog to it + (a: $vysledek))
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- POISON APPLICATION (nově aplikovaný poison) -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- HRÁČ ZAHRÁL POISON KARTU -->
(if: $playerCard contains "type" and $playerCard's type is "poison")[
(set: _poisonDamage to 2)
(set: _poisonTurns to 2)
(if: $playerCard contains "poisonDamage")[
(set: _poisonDamage to $playerCard's poisonDamage)
]
(if: $playerCard contains "poisonDuration")[
(set: _poisonTurns to $playerCard's poisonDuration)
]
(set: $playerPoisonStacks to _poisonDamage)
(set: $playerPoisonDuration to _poisonTurns)
(set: $applyMsg to "<span class='combat-poison'> Nepřítel byl otráven! Za (" + (text: _poisonDamage) + " po dobu " + (text: _poisonTurns) + " kol)</span>")
(set: $combatLog to it + (a: $applyMsg))
]
<!-- NEPŘÍTEL ZAHRÁL POISON KARTU -->
(if: $enemyCard contains "type" and $enemyCard's type is "poison")[
(set: _poisonDamage to 2)
(set: _poisonTurns to 2)
(if: $enemyCard contains "poisonDamage")[
(set: _poisonDamage to $enemyCard's poisonDamage)
]
(if: $enemyCard contains "poisonDuration")[
(set: _poisonTurns to $enemyCard's poisonDuration)
]
(set: $enemyPoisonStacks to _poisonDamage)
(set: $enemyPoisonDuration to _poisonTurns)
(set: $applyMsg to "<span class='combat-poison-enemy'> Byl jsi otráven! Za (" + (text: _poisonDamage) + " po dobu " + (text: _poisonTurns) + " kol)</span>")
(set: $combatLog to it + (a: $applyMsg))
]
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- 🔄 TURN COUNTER INCREMENT -->
<!-- ═══════════════════════════════════════════════════════════════ -->
(set: $turnCounter to $turnCounter + 1)
<!-- Reset enemy card pro příští kolo -->
(set: $chosenEnemyCard to 0)
]
]
}
<div class="battle-container">
(display: "TurnOrderHandler")
(display: "BattleLog")
<div class="battle-hud-container">
<!-- HRÁČ - ZDRAVÍ A KONDICE -->
<div class="bhud-hearts-player" style="position: fixed; left: 20px; top: 80px;">
<div class="bhud-potions-wrapper">
<div class="bhud-hearts-box" id="playerHeartBox">
<div class="bhud-health-fill-container">
<div class="bhud-shield-fill" id="playerShieldFill" style="height: 0%;"></div>
<div class="bhud-health-fill" id="playerHealthFill" style="height: 100%;"></div>
</div>
<div class="bhud-potion-bottle"></div>
<div class="bhud-hp-text" id="playerHpText">20/20</div>
</div>
</div>
<div class="bhud-stamina-box" id="playerStaminaBox">
<div class="bhud-stamina-fill-container">
<div class="bhud-stamina-fill" id="playerStaminaFill" style="height: 100%;"></div>
</div>
<div class="bhud-hp-text" id="playerStaminaText">5/5</div>
</div>
<!-- NEPŘÍTEL - ZDRAVÍ -->
<div class="bhud-hearts-enemy" style="position: fixed; right: 20px; top: 80px;">
<div class="bhud-hearts-box" id="enemyHeartBox">
<div class="bhud-health-fill-container">
<div class="bhud-health-fill" id="enemyHealthFill" style="height: 100%;"></div>
</div>
<div class="bhud-potion-bottle"></div>
<div class="bhud-hp-text" id="enemyHpText">15/15</div>
</div>
</div>
</div>
<!-- ⭐ MEDITATION MODE - VÝBĚR DRUHÉ KARTY (jen když je aktivní) -->
(if: $battlePhase is "meditation_selecting")[
(display: "MeditationCardSelection")
]
<!-- NORMÁLNÍ VÝBĚR KARET -->
(if: $battlePhase is "selecting" or $battlePhase is "enemy_waiting")[
<div class="player-section">
<div class="hand">
(for: each _card, ...$playerHand)[
<!-- ⚔️ KONTROLA: Je to counter karta a hráč hraje první? -->
(set: _isCounterCard to (_card contains "type" and _card's type is "counter"))
(set: _counterInactive to (_isCounterCard and $isEnemyFirstThisTurn is false))
<!--Comment Text-->
(if: ((_card's cost <= $stamina or _card's cost < 0) and not _counterInactive))[
<div class="card-wrapper">
<div class="card playable (if: _card contains 'type')[(print: _card's type)](if: _isCounterCard)[ counter-card counter-active]">
<div class="card-image-container">
(if: (_card contains "image") and (_card's image is not ""))[
(print: "<img src='" + _card's image + "' alt='" + _card's name + "'>")
]
</div>
<div class="card-name">(print: _card's name)</div>
(if: _card contains "type" and _card's type is "armor")[
<div class="card-armor-value"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> +(print: _card's armorValue) HP</div>
<div class="card-stats">
<span class="defense"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> (print: _card's defense)</span>
</div>
](else:)[
<div class="card-stats">
<span class="attack"><img src="https://files.catbox.moe/sk5n4x.png" class="stat-icon" alt=""> (print: _card's attack)(if: $umeni is 1)[<span class="bonus-stat">+1</span>]</span>
<span class="defense"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> (print: _card's defense)</span>
</div>
]
<div class="card-cost-wrapper">
(if: $nextCardFree is true)[
<div class="card-cost meditation-free">ZDARMA</div>
](else-if: _card's cost < 0)[
<div class="card-cost stamina-gain">+(print: (abs: _card's cost))</div>
](else:)[
<div class="card-cost">(print: _card's cost)</div>
]
</div>
<!--animace karty, vyložení na stůl - KLON VERZE-->
<div class="card-click-area">
(link: " ")[
(set: $chosenPlayerCard to _card)
(set: $cardAnimationTriggered to true)
(print: "<script>
(function() {
if (window.cardAnimationRunning) return;
window.cardAnimationRunning = true;
setTimeout(function() {
if (window.combatSounds) {
combatSounds.playCardSound('" + _card's name + "');
}
var cards = document.querySelectorAll('.hand .card.playable');
var originalCard = null;
for (var i = 0; i < cards.length; i++) {
var cardName = cards[i].querySelector('.card-name');
if (cardName && cardName.textContent.trim() === '" + _card's name + "') {
originalCard = cards[i];
break;
}
}
if (!originalCard) {
window.cardAnimationRunning = false;
return;
}
var wrapper = originalCard.closest('.card-wrapper');
if (wrapper) {
wrapper.style.opacity = '0';
wrapper.style.pointerEvents = 'none';
}
var clone = originalCard.cloneNode(true);
var rect = originalCard.getBoundingClientRect();
clone.style.position = 'fixed';
clone.style.left = rect.left + 'px';
clone.style.top = rect.top + 'px';
clone.style.width = rect.width + 'px';
clone.style.height = rect.height + 'px';
clone.style.margin = '0';
clone.style.zIndex = '9999';
clone.style.transform = 'scale(0.85)';
document.body.appendChild(clone);
var targetX = window.innerWidth / 2 - rect.width / 2;
var targetY = (window.innerHeight / 2) + 1 - (rect.height / 2);
var deltaX = targetX - rect.left;
var deltaY = targetY - rect.top;
clone.style.setProperty('--target-x', deltaX + 'px');
clone.style.setProperty('--target-y', deltaY + 'px');
var trail = document.createElement('div');
trail.className = 'card-magic-trail';
trail.style.left = rect.left + 'px';
trail.style.top = rect.top + 'px';
trail.style.width = rect.width + 'px';
trail.style.height = rect.height + 'px';
document.body.appendChild(trail);
setTimeout(function() { trail.remove(); }, 1000);
var flash = document.createElement('div');
flash.className = 'card-screen-flash';
document.body.appendChild(flash);
setTimeout(function() { flash.remove(); }, 300);
var runes = ['ᚠ', 'ᚢ', 'ᚦ', 'ᚨ', 'ᚱ', 'ᚲ'];
for (var j = 0; j < 6; j++) {
var rune = document.createElement('div');
rune.className = 'card-rune';
rune.style.setProperty('--angle', (j * 60) + 'deg');
rune.textContent = runes[j];
clone.appendChild(rune);
}
setTimeout(function() {
clone.classList.add('card-fly-to-table');
}, 10);
for (var j = 0; j < 12; j++) {
var particle = document.createElement('div');
particle.className = 'card-magic-particle';
particle.style.left = (Math.random() * 100) + '%';
particle.style.top = (Math.random() * 100) + '%';
particle.style.setProperty('--random-x', (Math.random() - 0.5));
particle.style.setProperty('--random-y', Math.random());
particle.style.animationDelay = (Math.random() * 0.15) + 's';
clone.appendChild(particle);
}
setTimeout(function() {
clone.remove();
window.cardAnimationRunning = false;
}, 900);
}, 50);
})();
</script>")
(live: 0.3s)[
(stop:)
(set: $battlePhase to "resolving")
(go-to: "CardBattle")
]
]
</div>
</div>
</div>
]
]
<!-- NOVÁ SEKCE: Nepoužitelné karty vpravo -->
<div class="unplayable-cards-zone">
(for: each _card, ...$playerHand)[
<!-- ⚔️ KONTROLA: Je to counter karta a hráč hraje první? -->
(set: _isCounterCard to (_card contains "type" and _card's type is "counter"))
(set: _counterInactive to (_isCounterCard and $isEnemyFirstThisTurn is false))
(if: ((_card's cost > $stamina and _card's cost >= 0) or _counterInactive))[
<div class="card-wrapper-disabled">
<div class="card unplayable (if: _card contains 'type')[(print: _card's type)](if: _isCounterCard)[ counter-card counter-inactive]">
<div class="card-image-container">
(if: (_card contains "image") and (_card's image is not ""))[
(print: "<img src='" + _card's image + "' alt='" + _card's name + "'>")
]
</div>
<div class="card-name">(print: _card's name)</div>
(if: _card contains "type" and _card's type is "armor")[
<div class="card-armor-value"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> +(print: _card's armorValue) HP</div>
<div class="card-stats">
<span class="defense"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> (print: _card's defense)</span>
</div>
](else:)[
<div class="card-stats">
<span class="attack"><img src="https://files.catbox.moe/sk5n4x.png" class="stat-icon" alt=""> (print: _card's attack)</span>
<span class="defense"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> (print: _card's defense)</span>
</div>
]
<div class="card-cost-wrapper">
<div class="card-cost">(print: _card's cost)</div>
</div>
<!-- ZOBRAZ DŮVOD, PROČ JE KARTA NEPOUŽITELNÁ -->
(if: _counterInactive)[
<div class="card-disabled-text">Pouze když nepřítel útočí první</div>
](else:)[
<div class="card-disabled-text">Málo staminy</div>
]
</div>
</div>
]
]
</div>
</div>
</div>
<!-- NEPŘÁTELSKÁ KARTA NA STOLE pokud hraje nepřítel první -->
(if: $battlePhase is "enemy_waiting" and $chosenEnemyCard is not 0)[
<div class="enemy-card-waiting">
<div class="waiting-message">⏳ Nepřítel zahrál kartu - je na vás!</div>
<div class="battle-card-slot enemy-slot">
<div class="card enemy-card card-shake">
<div class="card-image-container">
(if: ($chosenEnemyCard contains "image") and ($chosenEnemyCard's image is not ""))[
(print: "<img src='" + $chosenEnemyCard's image + "' alt='" + $chosenEnemyCard's name + "'>")
]
</div>
<div class="card-name">(print: $chosenEnemyCard's name)</div>
<div class="card-stats">
<span class="attack"><img src="https://files.catbox.moe/sk5n4x.png" class="stat-icon" alt=""> (print: $chosenEnemyCard's attack)</span>
<span class="defense"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> (print: $chosenEnemyCard's defense)</span>
</div>
</div>
</div>
</div>
]
]
(if: $battlePhase is "resolving")[
<div class="player-section">
<div class="hand">
(for: each _card, ...$playerHand)[
<!-- ⚔️ KONTROLA: Je to counter karta a hráč hraje první? -->
(set: _isCounterCard to (_card contains "type" and _card's type is "counter"))
(set: _counterInactive to (_isCounterCard and $isEnemyFirstThisTurn is false))
(if: ((_card's cost <= $stamina or _card's cost < 0) and not _counterInactive))[
<div class="card-wrapper">
<div class="card playable (if: _card contains 'type')[(print: _card's type)](if: _isCounterCard)[ counter-card counter-active] (if: _card is $chosenPlayerCard)[selected-card]">
<div class="card-image-container">
(if: (_card contains "image") and (_card's image is not ""))[
(print: "<img src='" + _card's image + "' alt='" + _card's name + "'>")
]
</div>
<div class="card-name">(print: _card's name)</div>
(if: _card contains "type" and _card's type is "armor")[
<div class="card-armor-value"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> +(print: _card's armorValue) HP</div>
<div class="card-stats">
<span class="defense"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> (print: _card's defense)</span>
</div>
](else:)[
<div class="card-stats">
<span class="attack"><img src="https://files.catbox.moe/sk5n4x.png" class="stat-icon" alt=""> (print: _card's attack)(if: $umeni is 1)[<span class="bonus-stat">+1</span>]</span>
<span class="defense"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> (print: _card's defense)</span>
</div>
]
<div class="card-cost-wrapper">
(if: $nextCardFree is true)[
<div class="card-cost meditation-free">ZDARMA</div>
](else-if: _card's cost < 0)[
<div class="card-cost stamina-gain">+(print: (abs: _card's cost))</div>
](else:)[
<div class="card-cost">(print: _card's cost)</div>
]
</div>
<!--animace karty, vyložení na stůl - KLON VERZE-->
<div class="card-click-area">
(link: " ")[
(set: $chosenPlayerCard to _card)
(set: $cardAnimationTriggered to true)
(print: "<script>
(function() {
if (window.cardAnimationRunning) return; // Zabránit duplicitám
window.cardAnimationRunning = true;
setTimeout(function() {
if (window.combatSounds) {
combatSounds.playCardSound('" + _card's name + "');
}
// Najdi kartu podle názvu
var cards = document.querySelectorAll('.hand .card.playable');
var originalCard = null;
for (var i = 0; i < cards.length; i++) {
var cardName = cards[i].querySelector('.card-name');
if (cardName && cardName.textContent.trim() === '" + _card's name + "') {
originalCard = cards[i];
break;
}
}
if (!originalCard) {
window.cardAnimationRunning = false;
return;
}
// OKAMŽITĚ SKRYJ ORIGINÁL
var wrapper = originalCard.closest('.card-wrapper');
if (wrapper) {
wrapper.style.opacity = '0';
wrapper.style.pointerEvents = 'none';
}
// VYTVOŘ KLON KARTY
var clone = originalCard.cloneNode(true);
var rect = originalCard.getBoundingClientRect();
// Nastav klon na fixed position
clone.style.position = 'fixed';
clone.style.left = rect.left + 'px';
clone.style.top = rect.top + 'px';
clone.style.width = rect.width + 'px';
clone.style.height = rect.height + 'px';
clone.style.margin = '0';
clone.style.zIndex = '9999';
clone.style.transform = 'scale(0.85)'; // Stejná jako v ruce
// Přidej klon do body
document.body.appendChild(clone);
// CÍL - střed obrazovky, horní třetina
var targetX = window.innerWidth / 2 - rect.width / 2;
// Střed obrazovky je / 2. Přičtením např. 100px se dostaneš pod něj.
var targetY = (window.innerHeight / 2) + 1 - (rect.height / 2); 2;
var deltaX = targetX - rect.left;
var deltaY = targetY - rect.top;
clone.style.setProperty('--target-x', deltaX + 'px');
clone.style.setProperty('--target-y', deltaY + 'px');
// TRAIL
var trail = document.createElement('div');
trail.className = 'card-magic-trail';
trail.style.left = rect.left + 'px';
trail.style.top = rect.top + 'px';
trail.style.width = rect.width + 'px';
trail.style.height = rect.height + 'px';
document.body.appendChild(trail);
setTimeout(function() { trail.remove(); }, 1000);
// ⚡ FLASH
var flash = document.createElement('div');
flash.className = 'card-screen-flash';
document.body.appendChild(flash);
setTimeout(function() { flash.remove(); }, 300);
// 🌟 RUNY
var runes = ['ᚠ', 'ᚢ', 'ᚦ', 'ᚨ', 'ᚱ', 'ᚲ'];
for (var j = 0; j < 6; j++) {
var rune = document.createElement('div');
rune.className = 'card-rune';
rune.style.setProperty('--angle', (j * 60) + 'deg');
rune.textContent = runes[j];
clone.appendChild(rune);
}
// SPUSŤ ANIMACI na klonu
setTimeout(function() {
clone.classList.add('card-fly-to-table');
}, 10);
// 💫 ČÁSTICE
for (var j = 0; j < 12; j++) {
var particle = document.createElement('div');
particle.className = 'card-magic-particle';
particle.style.left = (Math.random() * 100) + '%';
particle.style.top = (Math.random() * 100) + '%';
particle.style.setProperty('--random-x', (Math.random() - 0.5));
particle.style.setProperty('--random-y', Math.random());
particle.style.animationDelay = (Math.random() * 0.15) + 's';
clone.appendChild(particle);
}
// ODSTRAŇ KLON po animaci
setTimeout(function() {
clone.remove();
window.cardAnimationRunning = false;
}, 900);
}, 50);
})();
</script>")
(live: 0.3s)[
(stop:)
(set: $battlePhase to "resolving")
(go-to: "CardBattle")
]
]
</div>
</div>
</div>
]
]
<!-- NOVÁ SEKCE: Nepoužitelné karty vpravo -->
<div class="unplayable-cards-zone">
(for: each _card, ...$playerHand)[
<!-- ⚔️ KONTROLA: Je to counter karta a hráč hraje první? -->
(set: _isCounterCard to (_card contains "type" and _card's type is "counter"))
(set: _counterInactive to (_isCounterCard and $isEnemyFirstThisTurn is false))
(if: ((_card's cost > $stamina and _card's cost >= 0) or _counterInactive))[
<div class="card-wrapper-disabled">
<div class="card unplayable (if: _card contains 'type')[(print: _card's type)](if: _isCounterCard)[ counter-card counter-inactive]">
<div class="card-image-container">
(if: (_card contains "image") and (_card's image is not ""))[
(print: "<img src='" + _card's image + "' alt='" + _card's name + "'>")
]
</div>
<div class="card-name">(print: _card's name)</div>
(if: _card contains "type" and _card's type is "armor")[
<div class="card-armor-value"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> +(print: _card's armorValue) HP</div>
<div class="card-stats">
<span class="defense"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> (print: _card's defense)</span>
</div>
](else:)[
<div class="card-stats">
<span class="attack"><img src="https://files.catbox.moe/sk5n4x.png" class="stat-icon" alt=""> (print: _card's attack)</span>
<span class="defense"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> (print: _card's defense)</span>
</div>
]
<div class="card-cost-wrapper">
<div class="card-cost">(print: _card's cost)</div>
</div>
<!-- ZOBRAZ DŮVOD, PROČ JE KARTA NEPOUŽITELNÁ -->
(if: _counterInactive)[
<div class="card-disabled-text">Pouze když nepřítel útočí první</div>
](else:)[
<div class="card-disabled-text">Málo staminy</div>
]
</div>
</div>
]
]
</div>
</div>
</div>
<div class="resolve-area">
(if: $playerCard is not 0 and $enemyCard is not 0)[
<div class="cards-in-battle">
<div class="battle-card-slot">
<div class="card playable card-shake (if: $playerCard contains 'type')[(print: $playerCard's type)]">
<div class="card-image-container">
(if: ($playerCard contains "image") and ($playerCard's image is not ""))[
(print: "<img src='" + $playerCard's image + "' alt='" + $playerCard's name + "'>")
]
</div>
<div class="card-name">(print: $playerCard's name)</div>
(if: $playerCard contains "type" and $playerCard's type is "armor")[
<div class="card-armor-value"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> +(print: $playerCard's armorValue) HP</div>
<div class="card-stats">
<span class="defense"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> (print: $playerCard's defense)</span>
</div>
](else:)[
<div class="card-stats">
<span class="attack"><img src="https://files.catbox.moe/sk5n4x.png" class="stat-icon" alt=""> (print: $playerCard's attack)(if: $umeni is 1)[<span class="bonus-stat">+1</span>]</span>
<span class="defense"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> (print: $playerCard's defense)</span>
</div>
]
</div>
</div>
<div class="battle-card-slot">
<div class="card enemy-card card-shake">
<div class="card-image-container">
(if: ($enemyCard contains "image") and ($enemyCard's image is not ""))[
(print: "<img src='" + $enemyCard's image + "' alt='" + $enemyCard's name + "'>")
]
</div>
<div class="card-name">(print: $enemyCard's name)</div>
<div class="card-stats">
<span class="attack"><img src="https://files.catbox.moe/sk5n4x.png" class="stat-icon" alt=""> (print: $enemyCard's attack)</span>
<span class="defense"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> (print: $enemyCard's defense)</span>
</div>
</div>
</div>
</div>
]
{(live: 0.1s)[
(if: $enemyHP <= 0)[
(stop:)
(set: $tempHP to 0)
(set: $weaponImageURL to "") <!-- ⭐ RESET ZBRANĚ -->
<script>
(function() {
setTimeout(function() {
var enemyCardBox = document.getElementById('enemyCardBox');
var battleContainer = document.querySelector('.battle-container');
console.log('Enemy died! Element found:', enemyCardBox);
// ⏱️ ZPOŽDĚNÍ 0.6s před dissolve animací
setTimeout(function() {
// Spuštění animace rozplynutí
if (enemyCardBox) {
var enemyCard = enemyCardBox.querySelector('.battle-character-card');
if (enemyCard) {
enemyCard.classList.add('enemy-dissolve');
console.log('✅ Enemy dissolve animation started');
} else {
console.error('❌ .battle-character-card not found inside enemyCardBox');
}
} else {
console.error('❌ enemyCardBox element not found');
}
// Ztmavení scény
if (battleContainer) {
battleContainer.classList.add('game-ending');
}
// Zvuk smrti
if(window.combatSounds){
combatSounds.playDeathSound('enemy', 0.7, 0);
}
}, 600); // KONEC 0.6s zpoždění
}, 100);
})();
</script>
(after: 3.5s)[(goto: "Victory")]
]
(else-if: $hp <= 0)[
(stop:)
(set: $weaponImageURL to "") <!-- ⭐ RESET ZBRANĚ -->
<script>
(function() {
setTimeout(function() {
var heroCardBox = document.getElementById('heroCardBox');
var battleContainer = document.querySelector('.battle-container');
console.log(' Player died! Element found:', heroCardBox);
// ⏱️ ZPOŽDĚNÍ 0.6s před dissolve animací
setTimeout(function() {
// Spuštění animace rozplynutí
if (heroCardBox) {
var heroCard = heroCardBox.querySelector('.battle-character-card');
if (heroCard) {
heroCard.classList.add('hero-dissolve');
console.log('✅ Hero dissolve animation started');
} else {
console.error('❌ .battle-character-card not found inside heroCardBox');
}
} else {
console.error('❌ heroCardBox element not found');
}
// Ztmavení scény
if (battleContainer) {
battleContainer.classList.add('game-ending');
}
// Zvuk smrti
if(window.combatSounds){
combatSounds.playDeathSound('player', 0.7, 0);
}
}, 600); // KONEC 0.6s zpoždění
}, 100);
})();
</script>
(after: 3.5s)[(goto: "Defeat")]
]
]}
(else-if: $hp <= 0)[
(set: $tempHP to 0)
(set: $weaponImageURL to "") <!-- ⭐ RESET ZBRANĚ -->
(print: "<script>
var battleContainer = document.querySelector('.battle-container');
if (battleContainer) {
battleContainer.classList.add('game-ending');
}
if(window.combatSounds){
combatSounds.playDeathSound('player', 0.7, 0);
}
</script>")
(live: 3)[
(stop:)
(goto: "Defeat")
]
]
]
<!-- ⭐ VLOŽIT NA KONEC CardBattle (před closing </div> battle-container) -->
<!-- IKONY ZBRANÍ - VŽDY PŘÍTOMNÉ, ALE SKRYTÉ -->
<div class="weapon-icons-permanent">
<!-- HRÁČOVA IKONA -->
<div class="player-weapon-icon tooltip-container" style="display: none;">
<img src="https://files.catbox.moe/4tfd8n.png" class="dmg-icon-bg" id="playerWeaponIcon">
<span class="dmg-text-overlay" id="playerWeaponDmg">0</span>
<span class="tooltip-bubble" id="playerWeaponTooltip"><em>Automatický útok, každého kola, pomocí zbraně</em></span>
</div>
<!-- NEPŘÍTELOVA IKONA -->
<div class="enemy-weapon-icon tooltip-container" style="display: none;">
<img src="https://files.catbox.moe/4tfd8n.png" class="dmg-icon-bg" id="enemyWeaponIcon">
<span class="dmg-text-overlay" id="enemyWeaponDmg">0</span>
<span class="tooltip-bubble" id="enemyWeaponTooltip"><em>Útok nepřítele</em></span>
</div>
</div>
</div>
(display: "EnemyWeaponDisplay")
(display: "WeaponDisplay")
(display: "EnemyCardPreview")
(display: "napoveda")
(display: "zpet")
(display: "PotionButton")
(display: "zamichat")
(display: "EscapeButton")
(display: "BattleCards")
(display: "SnowDegreeAnimation")
(display: "DragAndDrop")
<style>
/* 🃏 ZÁKLADNÍ KARTA A STYLY VÝBĚRU */
.card {
position: relative;
transition: transform 0.3s ease;
}
.selected-card {
box-shadow: 0 0 20px rgba(212, 175, 55, 0.8) !important;
border-color: #d4af37 !important;
transform: scale(1.02);
}
/* Karty v ruce - normální velikost */
.hand .card {
transform: scale(0.85);
}
.hand .card-wrapper {
margin: 0 -25px; /* První číslo je horní/dolní, druhé (10px) je levý/pravý rozestup */2
}
/* Karty na stole - větší */
.resolve-area .card,
.cards-in-battle .card {
transform: scale(1) !important;
}
/* Zachování shake animace na větších kartách */
.resolve-area .card.card-shake,
.cards-in-battle .card.card-shake {
animation: card-shake 0.5s ease-in-out !important;
}
@keyframes card-shake {
0%, 100% { transform: scale(1.3) translateX(0); }
25% { transform: scale(1.3) translateX(-8px) rotate(-2deg); }
50% { transform: scale(1.3) translateX(8px) rotate(2deg); }
75% { transform: scale(1.3) translateX(-8px) rotate(-2deg); }
}
/* 🛡️ KARTY BRNĚNÍ A STATISTIKY */
.armor-card {
background: linear-gradient(135deg, rgba(30, 60, 90, 0.8), rgba(20, 40, 70, 0.9)) !important;
border-color: rgba(100, 150, 200, 0.8) !important;
}
.armor-card::before,
.armor-card::after {
border-color: #6496c8 !important;
box-shadow: inset 0 0 8px rgba(100, 150, 200, 0.6) !important;
}
.card-armor-value {
font-size: 18px;
color: #6496c8;
font-family: 'Cinzel', serif;
text-align: center;
padding: 10px 0;
text-shadow: 0 0 10px rgba(100, 150, 200, 0.8);
font-weight: bold;
}
.combat-armor {
color: #6496c8;
font-weight: bold;
text-shadow: 0 0 10px rgba(100, 150, 200, 0.5);
}
.bonus-stat {
color: #ffd700;
font-size: 0.9em;
margin-left: 2px;
text-shadow: 0 0 5px rgba(255, 215, 0, 0.8);
}
/* 🖱️ KLIKACÍ OBLAST KARTY (Neviditelný link přes kartu) */
.card-click-area {
text-align: center;
padding: 10px 19px;
position: relative;
z-index: 10;
background: transparent;
}
.card-click-area tw-link,
.card-click-area a {
display: flex !important;
width: 280px !important;
height: 280px !important;
margin: -0px -0px -10px -20px !important;
opacity: 0.0 !important;
background: rgba(139,105,20,0.0) !important;
color: #ffd700 !important;
font-size: 16px !important;
border-radius: 3px !important;
text-decoration: none !important;
font-weight: bold !important;
transition: all 0.2s !important;
border: 2px solid rgba(255,215,0,0.0) !important;
font-family: 'Cinzel', serif !important;
outline: none !important;
text-align: center !important;
cursor: pointer !important;
align-items: center !important;
justify-content: center !important;
}
.card-click-area tw-link:hover,
.card-click-area a:hover {
opacity: 1 !important;
background: rgba(166,124,26,0.0) !important;
transform: scale(1.02) !important;
box-shadow: 0 0 15px rgba(255,215,0,0.0) !important;
}
/* 👁️ INDIKÁTOR HRATELNOSTI */
.card.playable::after {
content: '⋙ Zahrát ⋘';
position: absolute;
bottom: 220px;
left: 50%;
transform: translateX(-50%);
background: rgba(0, 0, 0, 0.7);
color: #d4af37;
padding: 5px 10px;
border-radius: 1px;
font-size: 12px;
font-weight: bold;
opacity: 0;
transition: opacity 0.3s ease;
pointer-events: none;
white-space: nowrap;
z-index: 5;
}
.card-wrapper:hover .card.playable::after {
opacity: 0.0;
}
/* ✨ PLYNULÁ ANIMACE ROZTRŽENÍ KARTY ✨ */
@keyframes card-disintegrate {
0% {
transform: scale(1) rotate(0deg) translateY(0);
opacity: 1;
filter: brightness(1) blur(0px);
}
20% {
/* Záblesk a mírné zvětšení */
transform: scale(1.1) rotate(2deg) translateY(-5px);
filter: brightness(2) drop-shadow(0 0 20px #ffd700);
}
50% {
/* Začátek rozpadu a rozmazání */
transform: scale(1.15) rotate(-3deg) translateY(-10px);
opacity: 0.8;
filter: brightness(2.5) blur(2px);
}
100% {
/* Odplutí nahoru a úplné zmizení */
transform: scale(0.5) rotate(10deg) translateY(-50px);
opacity: 0;
filter: brightness(4) blur(12px) hue-rotate(20deg);
}
}
.card-disintegrate {
animation: card-disintegrate 0.8s cubic-bezier(0.4, 0, 0.2, 1) forwards !important;
pointer-events: none !important;
z-index: 999 !important;
}
/* 🎇 ČÁSTICE PŘI ROZTRŽENÍ */
@keyframes particle-explode {
0% {
transform: translate(0, 0) scale(1);
opacity: 1;
filter: brightness(2);
}
100% {
transform: translate(
calc(var(--random-x) * 180px),
calc(var(--random-y) * 200px - 100px)
) rotate(360deg) scale(0);
opacity: 0;
filter: blur(2px);
}
}
.card-particle {
position: absolute;
width: 8px;
height: 8px;
background: radial-gradient(circle, #ffd700, #d4af37);
border-radius: 50%;
animation: particle-explode 0.9s cubic-bezier(0.1, 0.5, 0.3, 1) forwards;
pointer-events: none;
z-index: 1000;
box-shadow: 0 0 10px rgba(255, 215, 0, 0.4);
}
/* --- OPRAVENÁ SEKCE PRO NEHRATELNÉ KARTY, šedé karty, karty napravo, karty v pravo--- */
/* --- 🃏 NEHRATELNÉ KARTY: KOMPLETNÍ VĚJÍŘ S FIXNÍM HOVEREM --- */
.unplayable-cards-zone {
position: fixed;
top: 60px;
right: 320px;
height: 400px;
z-index: 500;
display: flex;
flex-direction: row;
justify-content: flex-end;
pointer-events: none;
overflow: visible !important;
}
.unplayable-cards-zone > * {
display: flex !important;
pointer-events: none;
overflow: visible !important;
}
.card-wrapper-disabled {
position: relative;
display: block !important;
width: 50px;
height: 280px;
opacity: 0.85;
pointer-events: auto;
transition: all 0.4s cubic-bezier(0.2, 0.8, 0.2, 1);
overflow: visible !important;
transform-origin: left bottom; /* Rotace od spodního rohu */
}
/* 🎯 HITBOX: Zvětšená plocha pro snadnější najetí myší */
.card-wrapper-disabled::before {
content: '';
position: absolute;
top: 0;
left: -10px;
width: 140px;
height: 110%;
background: transparent;
z-index: 5;
}
/* --- POSTUPNÁ ROTACE (VĚJÍŘ) --- */
.unplayable-cards-zone > *:nth-child(1) .card-wrapper-disabled { transform: rotate(4deg) translateY(0); }
.unplayable-cards-zone > *:nth-child(2) .card-wrapper-disabled { transform: rotate(9deg) translateY(8px); }
.unplayable-cards-zone > *:nth-child(3) .card-wrapper-disabled { transform: rotate(14deg) translateY(18px); }
.unplayable-cards-zone > *:nth-child(4) .card-wrapper-disabled { transform: rotate(19deg) translateY(32px); }
.unplayable-cards-zone > *:nth-child(5) .card-wrapper-disabled { transform: rotate(24deg) translateY(50px); }
.unplayable-cards-zone > *:nth-child(6) .card-wrapper-disabled { transform: rotate(29deg) translateY(72px); }
/* --- HOVER: ZACHOVÁNÍ NÁKLONU --- */
/* Každá karta se vysune ve svém úhlu, aby se vějíř nepocuchal */
.unplayable-cards-zone > *:nth-child(1) .card-wrapper-disabled:hover { transform: rotate(4deg) translateY(-40px) scale(1.05) !important; }
.unplayable-cards-zone > *:nth-child(2) .card-wrapper-disabled:hover { transform: rotate(9deg) translateY(-32px) scale(1.05) !important; }
.unplayable-cards-zone > *:nth-child(3) .card-wrapper-disabled:hover { transform: rotate(14deg) translateY(-22px) scale(1.05) !important; }
.unplayable-cards-zone > *:nth-child(4) .card-wrapper-disabled:hover { transform: rotate(19deg) translateY(-8px) scale(1.05) !important; }
.unplayable-cards-zone > *:nth-child(5) .card-wrapper-disabled:hover { transform: rotate(24deg) translateY(10px) scale(1.05) !important; }
.unplayable-cards-zone > *:nth-child(6) .card-wrapper-disabled:hover { transform: rotate(29deg) translateY(32px) scale(1.05) !important; }
.card-wrapper-disabled:hover {
z-index: 1000 !important;
opacity: 1 !important;
}
.card-wrapper-disabled .card {
width: 200px;
position: absolute;
left: 0;
top: 0;
transform: scale(0.85);
transform-origin: top left;
filter: grayscale(40%) brightness(0.6);
pointer-events: none;
box-shadow: -5px 5px 15px rgba(0,0,0,0.5);
border: 1px solid rgba(255,255,255,0.1);
}
.card-wrapper-disabled:hover .card {
filter: grayscale(0%) brightness(1.1);
box-shadow: 0 10px 30px rgba(0,0,0,0.8);
border-color: #ffd700;
}
/* --- 💬 TOOLTIP: ČERNÝ TEXT NA KRÉMOVÉM POZADÍ --- */
.card-wrapper-disabled::after {
content: 'Málo kondice, nebo neaktivní';
position: absolute;
top: -25px;
left: 80px;
transform: translateX(-50%) translateY(10px);
background: #e3dd9f; /* Tvé nové pozadí */
color: #000; /* Černý text */
padding: 6px 15px;
border-radius: 1px;
font-family: 'Cinzel', serif;
font-size: 13px;
font-weight: bold;
white-space: nowrap;
opacity: 0;
pointer-events: none;
transition: all 0.2s ease;
border: 1px solid #000; /* Černý rámeček pro kontrast k pozadí */
box-shadow: 0 5px 15px rgba(0,0,0,0.4);
z-index: 2000;
}
.card-wrapper-disabled:hover::after {
opacity: 1;
transform: translateX(-50%) translateY(-10px);
}
/* Vypnutí klikacích ploch */
.card-wrapper-disabled .card-click-area {
display: none !important;
}
/* --- KONEC OPRAVENÉ SEKCE --- */
/* ẨN ELEMENTY BOJE */
.vs-battle, .bhud-vs-separator {
display: none;
}
/* 🚫 BLOKOVÁNÍ KARET PŘI KONCI HRY */
.battle-container.game-ending .card-click-area {
pointer-events: none !important;
opacity: 0.3;
cursor: not-allowed !important;
}
.battle-container.game-ending .card {
filter: grayscale(70%) brightness(0.7);
animation: card-fade-out 2s ease-out forwards;
}
@keyframes card-fade-out {
to {
opacity: 0.3;
transform: scale(0.95);
}
}
.combat-healing {
color: #ff69b4;
font-weight: bold;
text-shadow: 0 0 10px rgba(255, 105, 180, 0.5);
}
.healing-card {
background: linear-gradient(135deg, rgba(255, 105, 180, 0.2), rgba(255, 20, 147, 0.3)) !important;
border-color: rgba(255, 105, 180, 0.8) !important;
}
/* EPICKÁ ANIMACE KARTY - MÍRNĚJŠÍ VERZE */
@keyframes card-fly-to-table {
0% {
transform: translate(0, 0) scale(0.85) rotate(0deg);
opacity: 1;
filter: brightness(1) drop-shadow(0 0 5px #ffd700); /* Bylo brightness(1) ✅ */
}
15% {
transform: translate(calc(var(--target-x, 0) * 0.1), calc(var(--target-y, -200px) * 0.1)) scale(1.1) rotate(5deg);
opacity: 0.5;
filter: brightness(1.3) drop-shadow(0 0 15px #ffd700) saturate(0.2); /* Bylo brightness(3) - SNÍŽENO */
}
45% {
transform: translate(var(--target-x, 0), var(--target-y, -200px)) scale(1.25) rotate(-3deg);
opacity: 1;
filter: brightness(1.1) drop-shadow(0 0 20px #ffd700); /* Bylo brightness(0.5) - SNÍŽENO */
}
75% {
transform: translate(var(--target-x, 0), var(--target-y, -200px)) scale(1.35) rotate(0deg);
opacity: 1;
filter: brightness(1.4) drop-shadow(0 0 25px #ff6b35) hue-rotate(5deg); /* Bylo brightness(1.5) - SNÍŽENO */
}
100% {
transform: translate(var(--target-x, 0), var(--target-y, -200px)) scale(1.2) rotate(5deg);
opacity: 0;
filter: brightness(1) blur(8px) hue-rotate(15deg); /* Bylo brightness(4) - SNÍŽENO */
}
}
.card-fly-to-table {
animation: card-fly-to-table 0.7s cubic-bezier(0.34, 1.56, 0.64, 1) forwards !important;
pointer-events: none !important;
z-index: 9999 !important;
}
/* 🌟 MAGICKÝ TRAIL ZA KARTOU (jako v Diablo) */
.card-magic-trail {
position: fixed;
pointer-events: none;
z-index: 9998;
background: linear-gradient(135deg,
rgba(255, 215, 0, 0.4) 0%,
rgba(255, 109, 53, 0.3) 50%,
rgba(139, 0, 139, 0.2) 100%);
border-radius: 8px;
animation: trail-fade 0.8s ease-out forwards;
box-shadow:
0 0 30px rgba(255, 215, 0, 0.6),
0 0 60px rgba(255, 109, 53, 0.4),
inset 0 0 20px rgba(255, 255, 255, 0.3);
}
@keyframes trail-fade {
0% {
opacity: 0.8;
transform: scale(1) rotate(0deg);
}
100% {
opacity: 0;
transform: scale(1.5) rotate(15deg);
filter: blur(20px);
}
}
/* ⚡ SCREEN FLASH - MÍRNĚJŠÍ */
.card-screen-flash {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: radial-gradient(circle at center,
rgba(255, 215, 0, 0.1) 0%, /* Bylo 0.3 - SNÍŽENO */
rgba(255, 109, 53, 0.05) 30%, /* Bylo 0.15 - SNÍŽENO */
transparent 70%);
pointer-events: none;
z-index: 9997;
animation: screen-flash 0.3s ease-out forwards;
}
@keyframes screen-flash {
0% {
opacity: 0;
}
50% {
opacity: 1;
}
100% {
opacity: 0;
}
}
/* ᚱ RUNOVÉ SYMBOLY kolem karty (Disciples styl) */
.card-rune {
position: absolute;
top: 50%;
left: 50%;
font-size: 24px;
color: #ffd700;
text-shadow:
0 0 10px #ffd700,
0 0 20px #ff6b35,
0 0 30px #8b008b;
pointer-events: none;
animation: rune-orbit 0.7s ease-out forwards;
opacity: 0;
}
@keyframes rune-orbit {
0% {
transform: translate(-50%, -50%) rotate(var(--angle)) translateX(0) rotate(calc(-1 * var(--angle)));
opacity: 0;
filter: blur(5px);
}
30% {
opacity: 1;
filter: blur(0px);
}
100% {
transform: translate(-50%, -50%) rotate(var(--angle)) translateX(120px) rotate(calc(-1 * var(--angle)));
opacity: 0;
filter: blur(8px);
}
}
/* 💫 MAGICKÉ ČÁSTICE (lepší než obyčejné) */
@keyframes magic-particle-explode {
0% {
transform: translate(0, 0) scale(1);
opacity: 1;
filter: brightness(2) blur(0px);
}
50% {
opacity: 1;
filter: brightness(3) blur(1px);
}
100% {
transform: translate(
calc(var(--random-x) * 250px),
calc(var(--random-y) * -180px)
) rotate(720deg) scale(0);
opacity: 0;
filter: brightness(5) blur(4px);
}
}
/* 💫 MAGICKÉ ČÁSTICE - MÍRNĚJŠÍ */
.card-magic-particle {
position: absolute;
width: 4px; /* Bylo 6px - ZMENŠENO */
height: 4px; /* Bylo 6px - ZMENŠENO */
background: radial-gradient(circle,
#ffed4e 0%,
#ffd700 40%,
#ff6b35 70%,
rgba(139, 0, 139, 0.5) 100%); /* Přidána průhlednost */
border-radius: 50%;
animation: magic-particle-explode 0.7s cubic-bezier(0.1, 0.5, 0.3, 1) forwards;
pointer-events: none;
z-index: 10000;
box-shadow:
0 0 4px rgba(255, 215, 0, 0.6), /* Bylo 8px - SNÍŽENO */
0 0 8px rgba(255, 109, 53, 0.4); /* Bylo 16px - SNÍŽENO */
}
/* HOVER EFEKT - karta svítí (jako v Hearthstone) */
.card-wrapper:hover .card.playable {
filter: brightness(1.2) drop-shadow(0 0 15px rgba(255, 215, 0, 0.6));
transform: scale(0.9) translateY(-5px) !important;
transition: all 0.2s ease-out;
}
.card-wrapper:hover .card.playable::before {
content: '';
position: absolute;
top: -3px;
left: -3px;
right: -3px;
bottom: -3px;
background: linear-gradient(45deg,
transparent 30%,
rgba(255, 215, 0, 0.3) 50%,
transparent 70%);
border-radius: 8px;
animation: card-shine 1.5s ease-in-out infinite;
pointer-events: none;
z-index: -1;
}
@keyframes card-shine {
0%, 100% {
opacity: 0;
}
50% {
opacity: 1;
}
}
/* Zabránit blikání během animace */
.card-wrapper[style*="opacity: 0"] {
visibility: hidden !important;
}
/* Klon má stejné vlastnosti */
.card-fly-to-table {
position: fixed !important;
animation: card-fly-to-table 0.7s cubic-bezier(0.34, 1.56, 0.64, 1) forwards !important;
pointer-events: none !important;
z-index: 9999 !important;
}
/* ------------------------------------------------------------------- */
/* IV. ROZDÁNÍ KARET A START */
/* ------------------------------------------------------------------- */
/* Iniciace střídání tahů - pokud neexistuje, začíná hráč */
<!-- NOVÁ verze (PŘIDEJ): -->
(set: $turnCounter to 1)
(set: $isEnemyFirstThisTurn to false)
(set: $currentTurnStarter to "player")
/* Rozdání karet na ruku */
(set: $playerHand to $playerDeck's (range: 1, (min: $handSize, $playerDeck's length)))
(set: $enemyDeck to (a:
/* 🗡️ ZBRAŇ NA STOLE */
.weapon-on-table {
position: fixed;
left: 50%;
top: 15%;
transform: translateX(-50%);
z-index: 600;
pointer-events: none;
text-align: center;
}
.weapon-damage-indicator {
position: absolute;
bottom: -30px;
left: 50%;
transform: translateX(-50%);
background: rgba(139, 0, 0, 0.9);
color: #ffd700;
padding: 8px 16px;
border-radius: 20px;
font-family: 'Cinzel', serif;
font-size: 18px;
font-weight: bold;
border: 2px solid #8b0000;
box-shadow:
0 0 20px rgba(255, 215, 0, 0.6),
inset 0 0 10px rgba(255, 0, 0, 0.3);
text-shadow: 0 0 10px rgba(255, 215, 0, 0.8);
animation: weapon-pulse 2s ease-in-out infinite;
}
@keyframes weapon-pulse {
0%, 100% {
box-shadow:
0 0 10px rgba(255, 215, 0, 0.6),
inset 0 0 10px rgba(255, 0, 0, 0.3);
}
50% {
box-shadow:
0 0 30px rgba(255, 215, 0, 0.9),
inset 0 0 15px rgba(255, 0, 0, 0.5);
}
}
</style>
<!-- mizení, mizející karty s posunem nahoru a zmenšením -->
<!-- mizení, mizející karty s posunem nahoru a zmenšením -->
<!-- 🎴 ANIMACE KARET - POSUN NAHORU A ZMENŠENÍ -->
<script>
(function() {
setTimeout(function() {
var cards = document.querySelectorAll('.cards-in-battle .card');
console.log('🎴 Nalezeno karet:', cards.length);
cards.forEach(function(card, index) {
// Počáteční stav
card.style.setProperty('transition', 'all 0.5s ease-in-out', 'important');
card.style.setProperty('opacity', '1', 'important');
card.style.setProperty('transform', 'scale(1) translateY(10px)', 'important');
console.log('✅ Karta ' + index + ' inicializována');
// Po 1 sekundě začne animace
setTimeout(function() {
card.style.setProperty('transition', 'all 2s ease-in-out', 'important');
card.style.setProperty('opacity', '0.7', 'important');
card.style.setProperty('transform', 'scale(0.7) translateY(-990px)', 'important');
console.log('🔼 Karta ' + index + ' se posouvá nahoru');
}, 2500);
});
}, 200);
})();
</script>
<!-- ⏯️ HOVER - ZASTAVENÍ A NÁVRAT -->
<script>
(function() {
setTimeout(function() {
var battleArea = document.querySelector('.cards-in-battle');
if (!battleArea) {
console.error('❌ .cards-in-battle nenalezena!');
return;
}
var cards = battleArea.querySelectorAll('.card');
var fadeTimeout;
console.log('Hover system připraven pro ' + cards.length + ' karet');
// Funkce pro spuštění mizení
function startFading() {
console.log('⬆️ Spouštím posun nahoru');
cards.forEach(function(card) {
card.style.setProperty('transition', 'all 2s ease-in-out', 'important');
card.style.setProperty('opacity', '0.8', 'important');
});
}
// Funkce pro návrat karet
function showCards() {
console.log('⬇️ Vracím karty zpět');
cards.forEach(function(card) {
card.style.setProperty('transition', 'all 0.4s ease-out', 'important');
card.style.setProperty('opacity', '0.8', 'important');
});
}
// Počáteční automatický fade po 2s
fadeTimeout = setTimeout(startFading, 2000);
// Hover události
battleArea.addEventListener('mouseenter', function() {
console.log('🖱️ Hover - zastavuji animaci');
clearTimeout(fadeTimeout);
showCards();
});
battleArea.addEventListener('mouseleave', function() {
console.log('🖱️ Opustil hover - čekám 0.5s');
fadeTimeout = setTimeout(startFading, 500);
});
}, 200);
})();
</script>
<style>
/* 🎴 ZÁKLADNÍ POZICE KARET - NÍŽE NA OBRAZOVCE */
.cards-in-battle .card {
position: relative !important;
transition: all 2s ease-in-out !important;
transform-origin: center center !important;
transform: translateY(0px) !important; /* ← Počáteční pozice - upravte dle potřeby */
}
.cards-in-battle .card {
position: relative !important;
transition: all 2s ease-in-out !important;
transform-origin: center center !important;
}
.cards-in-battle .card.card-normal {
opacity: 1 !important;
transform: scale(1) translateY(0px) !important;
}
/* 🖱️ HOVER BACKUP - pokud JS selže */
.cards-in-battle:hover .card {
opacity: 1 !important;
transform: scale(1) translateY(0px) !important;
transition: all 0.4s ease-out !important;
}
/* 🗡️ ZBRAŇ NA STOLE - POZICOVATELNÁ */
.weapon-on-table {
position: fixed; /* nebo absolute */
left: 25%; /* ← Horizontální pozice */
top: 35%; /* ← Vertikální pozice */
transform: translate(-50%, -50%); /* Centrování podle středu karty */
display: flex;
flex-direction: column;
align-items: center;
z-index: 600;
pointer-events: auto;
}
.weapon-card-wrapper .card {
width: 150px;
height: auto;
transition: all 0.3s ease;
}
/* Kontejner pro vrstvení */
.weapon-icon-stack {
position: relative;
display: flex;
align-items: center;
justify-content: center;
width: 60px;
height: 60px;
margin-top: -89px;
}
/* Ikona jako spodní vrstva */
.dmg-icon-bg {
position: absolute;
width: 150px;
height: auto;
z-index: 1;
}
/* Text jako horní vrstva přímo na ikoně */
.dmg-text-overlay {
position: absolute;
z-index: 2;
font-size: 36px;
font-weight: bold;
font-family: monospace;
color: inherit;
text-align: center;
}
/* ⚡ ANIMACE WEAPON PŘI ÚTOKU - POUZE ZÁŘE NA IMG */
@keyframes weapon-glow {
0% {
filter: brightness(1) drop-shadow(0 0 5px rgba(255, 215, 0, 0.3));
}
20% {
filter: brightness(2.5) drop-shadow(0 0 40px rgba(255, 215, 0, 1)) drop-shadow(0 0 60px rgba(255, 0, 0, 0.8));
}
40% {
filter: brightness(3) drop-shadow(0 0 50px rgba(255, 215, 0, 1)) drop-shadow(0 0 70px rgba(255, 255, 255, 0.9));
}
60% {
filter: brightness(2.5) drop-shadow(0 0 40px rgba(255, 215, 0, 1)) drop-shadow(0 0 60px rgba(255, 0, 0, 0.8));
}
80% {
filter: brightness(1.5) drop-shadow(0 0 20px rgba(255, 215, 0, 0.6));
}
100% {
filter: brightness(1) drop-shadow(0 0 5px rgba(255, 215, 0, 0.3));
}
}
.weapon-on-table.weapon-attacking .card {
animation: weapon-glow 1.2s ease-in-out;
}
/* 🔥 SLASH EFEKT - základní styl */
.weapon-slash {
position: fixed; /* ← místo absolute */
top: 35%; /* ← stejná výška jako enemy weapon (.weapon-on-table má top: 35%) */
left: 75%; /* ← přibližná X pozice enemy weapon na obrazovce */
width: 200px;
height: 200px;
background-size: contain;
background-repeat: no-repeat;
transform: translate(-50%, -50%) scale(0);
opacity: 0;
pointer-events: none;
z-index: 10000;
}
/* ⚔️ HRÁČŮV SLASH - vlastní obrázek */
.weapon-on-table.player-weapon .weapon-slash {
background-image: url('https://files.catbox.moe/wwlr3a.png');
}
/* ⚔️ ENEMY SLASH - vlastní obrázek */
.weapon-on-table.enemy-weapon .weapon-slash {
background-image: url('https://files.catbox.moe/tfum3p.png'); /* ← VLOŽ SVŮJ LINK ZDE */
}
/* ⚔️ HRÁČŮV SLASH - letí doprava */
.weapon-on-table.player-weapon.weapon-attacking .weapon-slash {
animation: slash-fly-right 1.2s ease-out forwards;
}
/* ⚔️ ENEMY SLASH - letí doleva */
.weapon-on-table.enemy-weapon.weapon-attacking .weapon-slash {
animation: slash-fly-left 1.2s ease-out forwards;
}
/* ANIMACE DOPRAVA (pro hráče) */
@keyframes slash-fly-right {
0% {
transform: translate(-150%, -150%) scale(0) rotate(-10deg);
opacity: 0;
}
10% {
opacity: 1;
transform: translate(-50%, -50%) scale(0.5) rotate(0deg);
}
30% {
opacity: 1;
transform: translate(20px, -50%) scale(1.2) rotate(5deg);
}
60% {
opacity: 0.8;
transform: translate(400px, -50%) scale(1.5) rotate(10deg); /* ⬅️ ZMĚNĚNO ze 100px */
}
100% {
opacity: 0;
transform: translate(700px, -50%) scale(2) rotate(15deg); /* ⬅️ ZMĚNĚNO z 200px (+500px) */
}
}
/* ANIMACE DOLEVA (pro nepřítele) - START 300PX VÍC VLEVO */
@keyframes slash-fly-left {
0% {
transform: translate(150% - 1600px) scale(0) rotate(10deg);
opacity: 0;
}
15% {
opacity: 1;
transform: translate(150% - 1600px) scale(1.1) rotate(0deg);
}
100% {
opacity: 0;
transform: translate(calc(-150% - 1600px), -50%) scale(1.8) rotate(-15deg);
}
}
.combat-miss {
color: #ff4444;
font-weight: bold;
text-shadow: 0 0 10px rgba(255, 68, 68, 0.8);
font-size: 1.1em;
}
/* ANIMACE ŠÍPU */
.arrow-projectile {
position: absolute;
top: 50%;
left: 50%;
width: 120px; /* ⬅️ ZVĚTŠENO z 80px */
height: 30px; /* ⬅️ ZVĚTŠENO z 20px */
background-size: contain;
background-repeat: no-repeat;
background-position: center;
transform: translate(-50%, -50%) scale(0) rotate(0deg);
opacity: 0;
pointer-events: none;
z-index: 9999;
}
/* ✅ TREFENÝ ŠÍP - letí k nepříteli s trail efektem */
.arrow-hit {
animation: arrow-fly-hit 2.5s cubic-bezier(0.25, 0.1, 0.25, 1) forwards;
filter: drop-shadow(0 0 8px rgba(255, 215, 0, 0.6));
}
@keyframes arrow-fly-hit {
0% {
transform: translate(-50%, -50%) scale(0.8) rotate(0deg);
opacity: 0;
}
10% {
opacity: 1;
transform: translate(-50%, -50%) scale(1.2) rotate(0deg);
}
100% {
opacity: 0;
transform: translate(1700px, -50%) scale(1.4) rotate(5deg); /* ⬅️ LETÍ DÁL (700px místo 400px) */
}
}
/* 🌟 TRAIL PRO TREFENÝ ŠÍP */
.arrow-hit::after {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 150%;
height: 150%;
background: radial-gradient(ellipse at center,
rgba(255, 215, 0, 0.4) 0%,
rgba(255, 165, 0, 0.2) 40%,
transparent 70%);
transform: translate(-50%, -50%);
filter: blur(8px);
pointer-events: none;
animation: trail-fade-arrow 1.5s ease-out forwards;
}
@keyframes trail-fade-arrow {
0% {
opacity: 0;
}
20% {
opacity: 1;
}
100% {
opacity: 0;
transform: translate(-50%, -50%) scaleX(2);
}
}
/* ❌ MINUTÝ ŠÍP - rotuje se a letí šikmo bez trailu */
.arrow-miss {
animation: arrow-fly-miss 2.8s cubic-bezier(0.25, 0.1, 0.25, 1) forwards;
}
@keyframes arrow-fly-miss {
0% {
transform: translate(-50%, -50%) scale(0.8) rotate(0deg);
opacity: 0;
}
10% {
opacity: 1;
transform: translate(-50%, -50%) scale(1.2) rotate(0deg);
}
30% {
opacity: 1;
transform: translate(150px, -80px) scale(1.3) rotate(-45deg); /* ⬅️ ZAČÍNÁ SE ROTOVAT */
}
60% {
opacity: 0.8;
transform: translate(200px, -200px) scale(1.2) rotate(-120deg); /* ⬅️ POKRAČUJE V ROTACI */
}
100% {
opacity: 0;
transform: translate(650px, -350px) scale(0.9) rotate(-200deg); /* ⬅️ LETÍ DÁL A ROTUJE SE VÍCKRÁT */
}
}
/* 🧘 MEDITATION MODE STYLING */
.meditation-mode-active {
position: relative;
}
.meditation-banner {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: #fff;
padding: 20px 40px;
border-radius: 1px;
font-size: 24px;
font-weight: bold;
font-family: 'Cinzel', serif;
text-align: center;
z-index: 1000;
box-shadow:
0 0 40px rgba(138, 43, 226, 0.8),
inset 0 0 20px rgba(255, 255, 255, 0.2);
animation: meditation-pulse 2s ease-in-out infinite;
pointer-events: none;
}
@keyframes meditation-pulse {
0%, 100% {
box-shadow:
0 0 30px rgba(138, 43, 226, 0.6),
inset 0 0 15px rgba(255, 255, 255, 0.2);
}
50% {
box-shadow:
0 0 60px rgba(138, 43, 226, 1),
inset 0 0 25px rgba(255, 255, 255, 0.4);
}
}
.meditation-glow {
animation: meditation-card-glow 1.5s ease-in-out infinite !important;
}
@keyframes meditation-card-glow {
0%, 100% {
box-shadow: 0 0 15px rgba(138, 43, 226, 0.6);
border-color: rgba(138, 43, 226, 0.8);
}
50% {
box-shadow: 0 0 30px rgba(138, 43, 226, 1);
border-color: rgba(138, 43, 226, 1);
}
}
.card-cost.meditation-free {
background: linear-gradient(135deg, #8a2be2, #4b0082) !important;
color: #fff !important;
font-weight: bold !important;
animation: free-cost-shine 1s ease-in-out infinite !important;
}
@keyframes free-cost-shine {
0%, 100% {
text-shadow: 0 0 5px rgba(255, 255, 255, 0.8);
}
50% {
text-shadow: 0 0 15px rgba(255, 255, 255, 1);
}
}
/* COMBAT LOG STYLING */
.combat-meditation {
color: #8a2be2;
font-weight: bold;
text-shadow: 0 0 10px rgba(138, 43, 226, 0.8);
font-size: 1.1em;
}
.combat-meditation-combo {
color: #ff69b4;
font-weight: bold;
text-shadow: 0 0 15px rgba(255, 105, 180, 0.9);
font-size: 1.2em;
}
</style>
<script>
(function() {
setTimeout(function() {
var shakeTrigger = document.querySelector('.shake-trigger');
if (!shakeTrigger) return;
var whoGotHit = shakeTrigger.getAttribute('data-who');
var enemyBox = document.getElementById('enemyHeartBox');
var playerBox = document.getElementById('playerHeartBox');
if ((whoGotHit === 'enemy' || whoGotHit === 'both') && enemyBox) {
enemyBox.classList.add('box-shake');
for (var i = 0; i < 25; i++) {
var particle = document.createElement('div');
particle.className = 'particle enemy-particle';
particle.style.left = (Math.random() * 100) + '%';
particle.style.animationDelay = (Math.random() * 0.3) + 's';
enemyBox.appendChild(particle);
(function(p) {
setTimeout(function() { p.remove(); }, 1200);
})(particle);
}
setTimeout(function() { enemyBox.classList.remove('box-shake'); }, 500);
}
if ((whoGotHit === 'player' || whoGotHit === 'both') && playerBox) {
playerBox.classList.add('box-shake');
for (var i = 0; i < 25; i++) {
var particle = document.createElement('div');
particle.className = 'particle player-particle';
particle.style.left = (Math.random() * 100) + '%';
particle.style.animationDelay = (Math.random() * 0.3) + 's';
playerBox.appendChild(particle);
(function(p) {
setTimeout(function() { p.remove(); }, 1200);
})(particle);
}
setTimeout(function() { playerBox.classList.remove('box-shake'); }, 500);
}
var combatLog = document.querySelector('.combat-log-content');
if (combatLog) {
combatLog.scrollTop = combatLog.scrollHeight;
}
}, 500);
})();
</script>
<script>
(function() {
function updateHealthDisplay() {
// HRÁČ - ZDRAVÍ
var playerHp = (typeof $hp !== 'undefined') ? $hp : 20;
var playerMaxHp = (typeof $maxHp !== 'undefined') ? $maxHp : 20;
var playerShield = (typeof $tempHP !== 'undefined') ? $tempHP : 0;
var playerHealthFill = document.getElementById('playerHealthFill');
var playerShieldFill = document.getElementById('playerShieldFill');
var playerHpText = document.getElementById('playerHpText');
if (playerHealthFill && playerHpText) {
var healthPercent = (playerHp / playerMaxHp) * 100;
playerHealthFill.style.height = healthPercent + '%';
var displayHp = Math.max(0, playerHp);
var displayTotal = playerMaxHp;
if (playerShield > 0) {
displayHp += playerShield;
}
playerHpText.textContent = displayHp + '/' + displayTotal;
}
if (playerShieldFill) {
if (playerShield > 0) {
var shieldPercent = (playerShield / playerMaxHp) * 100;
playerShieldFill.style.height = shieldPercent + '%';
} else {
playerShieldFill.style.height = '0%';
}
}
// HRÁČ - KONDICE (STAMINA)
var playerStamina = (typeof $stamina !== 'undefined') ? $stamina : 5;
var playerMaxStamina = (typeof $effectiveMaxStamina !== 'undefined') ? $effectiveMaxStamina :
(typeof $maxStamina !== 'undefined') ? $maxStamina : 5;
var playerStaminaFill = document.getElementById('playerStaminaFill');
var playerStaminaText = document.getElementById('playerStaminaText');
if (playerStaminaFill && playerStaminaText) {
var staminaPercent = (playerStamina / playerMaxStamina) * 100;
playerStaminaFill.style.height = staminaPercent + '%';
var displayStamina = Math.max(0, playerStamina);
playerStaminaText.textContent = displayStamina + '/' + playerMaxStamina;
}
// NEPŘÍTEL - ZDRAVÍ
var enemyHp = (typeof $enemyHP !== 'undefined') ? $enemyHP : 15;
var enemyMaxHp = (typeof $enemyMaxHP !== 'undefined') ? $enemyMaxHP : 15;
var enemyHealthFill = document.getElementById('enemyHealthFill');
var enemyHpText = document.getElementById('enemyHpText');
if (enemyHealthFill && enemyHpText) {
var enemyHealthPercent = (enemyHp / enemyMaxHp) * 100;
enemyHealthFill.style.height = enemyHealthPercent + '%';
var displayEnemyHp = Math.max(0, enemyHp);
enemyHpText.textContent = displayEnemyHp + '/' + enemyMaxHp;
}
}
// Spustit při načtení
setTimeout(updateHealthDisplay, 100);
// Spustit při každé změně (třesení)
setTimeout(function() {
var shakeTrigger = document.querySelector('.shake-trigger');
if (!shakeTrigger) return;
var whoGotHit = shakeTrigger.getAttribute('data-who');
var enemyBox = document.getElementById('enemyHeartBox');
var playerBox = document.getElementById('playerHeartBox');
// Update zdraví před animací
updateHealthDisplay();
if ((whoGotHit === 'enemy' || whoGotHit === 'both') && enemyBox) {
enemyBox.classList.add('box-shake');
for (var i = 0; i < 25; i++) {
var particle = document.createElement('div');
particle.className = 'particle enemy-particle';
particle.style.left = (Math.random() * 100) + '%';
particle.style.setProperty('--random-x', Math.random());
particle.style.setProperty('--random-y', Math.random());
particle.style.animationDelay = (Math.random() * 0.3) + 's';
enemyBox.appendChild(particle);
(function(p) {
setTimeout(function() { p.remove(); }, 1200);
})(particle);
}
setTimeout(function() {
enemyBox.classList.remove('box-shake');
updateHealthDisplay();
}, 500);
}
if ((whoGotHit === 'player' || whoGotHit === 'both') && playerBox) {
playerBox.classList.add('box-shake');
for (var i = 0; i < 25; i++) {
var particle = document.createElement('div');
particle.className = 'particle player-particle';
particle.style.left = (Math.random() * 100) + '%';
particle.style.setProperty('--random-x', Math.random());
particle.style.setProperty('--random-y', Math.random());
particle.style.animationDelay = (Math.random() * 0.3) + 's';
playerBox.appendChild(particle);
(function(p) {
setTimeout(function() { p.remove(); }, 1200);
})(particle);
}
setTimeout(function() {
playerBox.classList.remove('box-shake');
updateHealthDisplay();
}, 500);
}
var combatLog = document.querySelector('.combat-log-content');
if (combatLog) {
combatLog.scrollTop = combatLog.scrollHeight;
}
}, 500);
// Kontrolovat změny každých 100ms pro update staminy
setInterval(updateHealthDisplay, 100);
})();
</script>
<style>
/* ═══════════════════════════════════════════════════ */
/* 📊 HRÁČOVA IKONA - vlevo dole, VŽDY FIXED */
/* ═══════════════════════════════════════════════════ */
.player-weapon-icon {
position: fixed !important;
left: 420px !important;
bottom: 465px !important;
z-index: 9999 !important;
align-items: center;
justify-content: center;
width: 130px;
height: 130px;
opacity: 1 !important;
visibility: visible !important;
transition: opacity 0.3s ease;
}
/* ═══════════════════════════════════════════════════ */
/* ⚔️ NEPŘÍTELOVA IKONA - vpravo dole, VŽDY FIXED */
/* ═══════════════════════════════════════════════════ */
.enemy-weapon-icon {
position: fixed !important;
right: 415px !important;
bottom: 465px !important;
z-index: 9999 !important;
align-items: center;
justify-content: center;
width: 130px;
height: 130px;
opacity: 1 !important;
visibility: visible !important;
transition: opacity 0.3s ease;
}
/* ═══════════════════════════════════════════════════ */
/* 🎨 SDÍLENÉ STYLY PRO OBOJE IKONY */
/* ═══════════════════════════════════════════════════ */
.player-weapon-icon .dmg-icon-bg,
.enemy-weapon-icon .dmg-icon-bg {
position: absolute;
width: 130px;
height: auto;
z-index: 1;
}
.player-weapon-icon .dmg-text-overlay,
.enemy-weapon-icon .dmg-text-overlay {
position: absolute;
z-index: 2;
font-size: 28px;
font-weight: bold;
color: white;
text-shadow: 2px 2px 4px black;
font-family: 'Cinzel', serif;
}
/* ═══════════════════════════════════════════════════ */
/* 💬 TOOLTIP */
/* ═══════════════════════════════════════════════════ */
.tooltip-container {
position: relative;
}
.tooltip-bubble {
visibility: hidden;
opacity: 0;
position: absolute;
bottom: 100%;
left: 50%;
transform: translateX(-50%);
background-color: rgba(0, 0, 0, 0.9);
color: white;
padding: 8px 12px;
border-radius: 6px;
white-space: nowrap;
margin-bottom: 10px;
transition: opacity 0.3s;
z-index: 1000;
font-size: 14px;
}
.tooltip-container:hover .tooltip-bubble {
visibility: visible;
opacity: 1;
}
</style>
<script>
// ⚔️ GLOBÁLNÍ FUNKCE PRO UPDATE WEAPON IKON
window.updateWeaponIcons = function() {
// HRÁČOVA IKONA
var playerIcon = document.querySelector('.player-weapon-icon');
var playerIconImg = document.getElementById('playerWeaponIcon');
var playerDmgText = document.getElementById('playerWeaponDmg');
var playerTooltip = document.getElementById('playerWeaponTooltip');
if (typeof $weaponImageURL !== 'undefined' && $weaponImageURL !== '' && $weaponImageURL !== 0) {
if (playerIcon) playerIcon.style.display = 'flex';
// Nastav správnou ikonu podle levelu
var playerIconURL = 'https://files.catbox.moe/4tfd8n.png'; // Level 1
if (typeof $weaponLevel !== 'undefined') {
if ($weaponLevel >= 3) {
playerIconURL = 'https://files.catbox.moe/h87n3x.png'; // Level 3
} else if ($weaponLevel === 2) {
playerIconURL = 'https://files.catbox.moe/x7hpjq.png'; // Level 2
}
}
if (playerIconImg) playerIconImg.src = playerIconURL;
if (playerDmgText && typeof $weaponDamage !== 'undefined') {
playerDmgText.textContent = $weaponDamage;
}
if (playerTooltip && typeof $weaponName !== 'undefined') {
playerTooltip.innerHTML = '<em>Automatický útok, každého kola, pomocí zbraně: ' + $weaponName + '</em>';
}
} else {
if (playerIcon) playerIcon.style.display = 'none';
}
// NEPŘÍTELOVA IKONA
var enemyIcon = document.querySelector('.enemy-weapon-icon');
var enemyIconImg = document.getElementById('enemyWeaponIcon');
var enemyDmgText = document.getElementById('enemyWeaponDmg');
var enemyTooltip = document.getElementById('enemyWeaponTooltip');
if (typeof $enemyWeaponImageURL !== 'undefined' && $enemyWeaponImageURL !== '' && $enemyWeaponImageURL !== 0) {
if (enemyIcon) enemyIcon.style.display = 'flex';
// Nastav správnou ikonu podle levelu
var enemyIconURL = 'https://files.catbox.moe/4tfd8n.png'; // Level 1
if (typeof $enemyWeaponLevel !== 'undefined') {
if ($enemyWeaponLevel >= 3) {
enemyIconURL = 'https://files.catbox.moe/h87n3x.png'; // Level 3
} else if ($enemyWeaponLevel === 2) {
enemyIconURL = 'https://files.catbox.moe/x7hpjq.png'; // Level 2
}
}
if (enemyIconImg) enemyIconImg.src = enemyIconURL;
if (enemyDmgText && typeof $enemyWeaponDamage !== 'undefined') {
enemyDmgText.textContent = $enemyWeaponDamage;
}
if (enemyTooltip && typeof $enemyWeaponName !== 'undefined') {
enemyTooltip.innerHTML = '<em>Útok nepřítele: ' + $enemyWeaponName + '</em>';
}
} else {
if (enemyIcon) enemyIcon.style.display = 'none';
}
};
// ⚡ SPUSTIT UPDATE PŘI NAČTENÍ STRÁNKY
setTimeout(function() {
if (typeof window.updateWeaponIcons === 'function') {
window.updateWeaponIcons();
}
}, 100);
// ⚡ SPUSTIT UPDATE KAŽDÝCH 500ms (pro případ změn)
setInterval(function() {
if (typeof window.updateWeaponIcons === 'function') {
window.updateWeaponIcons();
}
}, 500);
</script>
}(enchant: ?page, (t8n: "dissolve") + (t8n-time: 1s))
<!-- ⭐ INICIALIZACE TURN COUNTER PRO POISON -->
(unless: $turnCounter is a number)[(set: $turnCounter to 1)]
(unless: $lastPoisonTickTurn is a number)[(set: $lastPoisonTickTurn to 0)]
/* ------------------------------------------------------------------- */
/* CENTRÁLNÍ DATABÁZE OBRÁZKŮ */
/* ------------------------------------------------------------------- */
(set: $cardImages to (dm:
"dagger", "https://files.catbox.moe/bg7ln1.jpg",
"hunterBow", "https://files.catbox.moe/s29dm7.jpg",
"woodenSword", "https://files.catbox.moe/eattgi.png",
"daggerQuality", "https://files.catbox.moe/nwo1j2.jpg",
"sword", "https://files.catbox.moe/hr73qv.jpg",
"swordMaster", "https://files.catbox.moe/vb7rw7.jpg",
"axe", "https://files.catbox.moe/3bgbsz.jpg",
"axeWar", "https://files.catbox.moe/vj52at.jpg",
"greatsword", "https://files.catbox.moe/2xd8jl.jpg",
"greatswordLegendary", "https://files.catbox.moe/gbpr6a.jpg",
"mace", "https://files.catbox.moe/rl4xsm.jpg",
"morningstar", "https://files.catbox.moe/47d521.jpg",
"spear", "https://files.catbox.moe/c5u2x3.png",
"halberd", "https://files.catbox.moe/8ryt3d.png",
"warhammer", "https://files.catbox.moe/sk5n4x.png",
"battleaxe", "https://files.catbox.moe/hm88l5.png",
"scimitar", "https://files.catbox.moe/l90kma.png",
"rapier", "https://files.catbox.moe/f3ijtv.png",
"katana", "https://files.catbox.moe/h2pl87.png",
"claymore", "https://files.catbox.moe/s2v3y5.png",
"lance", "https://files.catbox.moe/c5u2x3.png",
"flail", "https://files.catbox.moe/sk5n4x.png",
"shortsword", "https://files.catbox.moe/eattgi.png",
"longbow", "https://files.catbox.moe/7qak07.png",
"crossbow", "https://files.catbox.moe/2olwuv.png",
"dragonslayer", "https://files.catbox.moe/vf3p07.png",
"excalibur", "https://files.catbox.moe/vf3p07.png",
"shadowblade", "https://files.catbox.moe/f3ijtv.png",
"soulreaper", "https://files.catbox.moe/s2v3y5.png",
"stormbringer", "https://files.catbox.moe/4p7cwe.jpg",
"woodenShield", "https://files.catbox.moe/jpbtij.png",
"ironShield", "https://files.catbox.moe/fg8ccm.png",
"towerShield", "https://files.catbox.moe/y8q8tv.png",
"leather", "https://files.catbox.moe/6bdqid.png",
"chainmail", "https://files.catbox.moe/bownbh.png",
"plate", "https://files.catbox.moe/4c49c7.png",
"rest", "https://files.catbox.moe/pyet8q.jpg",
"fist", "https://files.catbox.moe/g0veup.jpg",
"breath", "https://files.catbox.moe/7qak07.png",
"lightCover", "https://files.catbox.moe/0tx3ox.jpg",
"cover", "https://files.catbox.moe/fo44qb.jpg",
"kick", "https://files.catbox.moe/ijd3ez.jpg",
"koralka", "https://files.catbox.moe/9cgxs9.png",
"dodge", "https://files.catbox.moe/rhusru.jpg",
"counter", "https://files.catbox.moe/c3sxec.jpg",
"feint", "https://files.catbox.moe/7qak07.png",
"powerStrike", "https://files.catbox.moe/sk5n4x.png",
"doubleSlash", "https://files.catbox.moe/r6t44r.jpg",
"berserkerRage", "https://files.catbox.moe/4gtc4e.jpg",
"precisionStrike", "https://files.catbox.moe/2yoy72.jpg",
"execute", "https://files.catbox.moe/vf3p07.png",
"ironWill", "https://files.catbox.moe/9aa6ns.jpg",
"deflect", "https://files.catbox.moe/y8q8tv.png",
"fortify", "https://files.catbox.moe/yjdfgn.jpg",
"parry", "https://files.catbox.moe/r09jgb.jpg",
"swiftStrike", "https://files.catbox.moe/mr6iaw.jpg",
"guardedAttack", "https://files.catbox.moe/83kxod.jpg",
"tacticalStrike", "https://files.catbox.moe/pxcdyc.jpg",
"adrenaline", "https://files.catbox.moe/g9he6c.jpg",
"meditate", "https://files.catbox.moe/p8vj5l.jpg",
"lastStand", "https://files.catbox.moe/s2v3y5.png",
"skullcrusher", "https://files.catbox.moe/j9sxft.jpg",
"secondWind", "https://files.catbox.moe/pegu3z.jpg"
))
/* ------------------------------------------------------------------- */
/* INICIALIZACE ŠTÍTOVÝCH HP - ZACHOVÁ existující hodnoty */
/* ------------------------------------------------------------------- */
(set: $shieldHead to (either: $shieldHead, 0))
(set: $shieldChest to (either: $shieldChest, 0))
(set: $shieldLimbs to (either: $shieldLimbs, 0))
(set: $tempHP to $shieldHead + $shieldChest + $shieldLimbs)
/* ------------------------------------------------------------------- */
/* I. ZÁKLADNÍ NASTAVENÍ PROMĚNNÝCH */
/* ------------------------------------------------------------------- */
(set: $handSize to 4)
(set: $playerDeck to (a:))
(set: $tempDeck to (a:))
(set: $discardPile to (a:))
(set: $enemyDeck to (a:))
(set: $playerHand to (a:))
(set: $enemyHand to (a:))
/* ------------------------------------------------------------------- */
/* II. EQUIP STATUS - Pouze inicializace, pokud neexistuje */
/* ------------------------------------------------------------------- */
/* Základní karty */
(unless: $equippedRest is true or $equippedRest is false)[(set: $equippedRest to false)]
(unless: $equippedFist is true or $equippedFist is false)[(set: $equippedFist to false)]
(unless: $equippedBreathe is true or $equippedBreathe is false)[(set: $equippedBreathe to false)]
(unless: $equippedLightCover is true or $equippedLightCover is false)[(set: $equippedLightCover to false)]
(unless: $equippedCover is true or $equippedCover is false)[(set: $equippedCover to false)]
(unless: $equippedKick is true or $equippedKick is false)[(set: $equippedKick to false)]
/* Speciální bojové karty */
(unless: $equippedKoralka is true or $equippedKoralka is false)[(set: $equippedKoralka to false)]
(unless: $equippedDodge is true or $equippedDodge is false)[(set: $equippedDodge to false)]
(unless: $equippedCounter is true or $equippedCounter is false)[(set: $equippedCounter to false)]
(unless: $equippedFeint is true or $equippedFeint is false)[(set: $equippedFeint to false)]
(unless: $equippedPowerStrike is true or $equippedPowerStrike is false)[(set: $equippedPowerStrike to false)]
(unless: $equippedDoubleSlash is true or $equippedDoubleSlash is false)[(set: $equippedDoubleSlash to false)]
(unless: $equippedBerserkerRage is true or $equippedBerserkerRage is false)[(set: $equippedBerserkerRage to false)]
(unless: $equippedPrecisionStrike is true or $equippedPrecisionStrike is false)[(set: $equippedPrecisionStrike to false)]
(unless: $equippedExecute is true or $equippedExecute is false)[(set: $equippedExecute to false)]
(unless: $equippedIronWill is true or $equippedIronWill is false)[(set: $equippedIronWill to false)]
(unless: $equippedDeflect is true or $equippedDeflect is false)[(set: $equippedDeflect to false)]
(unless: $equippedFortify is true or $equippedFortify is false)[(set: $equippedFortify to false)]
(unless: $equippedParry is true or $equippedParry is false)[(set: $equippedParry to false)]
(unless: $equippedSwiftStrike is true or $equippedSwiftStrike is false)[(set: $equippedSwiftStrike to false)]
(unless: $equippedGuardedAttack is true or $equippedGuardedGuardedAttack is false)[(set: $equippedGuardedAttack to false)]
(unless: $equippedTacticalStrike is true or $equippedTacticalStrike is false)[(set: $equippedTacticalStrike to false)]
(unless: $equippedAdrenaline is true or $equippedAdrenaline is false)[(set: $equippedAdrenaline to false)]
(unless: $equippedMeditate is true or $equippedMeditate is false)[(set: $equippedMeditate to false)]
(unless: $equippedLastStand is true or $equippedLastStand is false)[(set: $equippedLastStand to false)]
(unless: $equippedSecondWind is true or $equippedSecondWind is false)[(set: $equippedSecondWind to false)]
/* ------------------------------------------------------------------- */
/* III. VLASTNICTVÍ KARET - Pouze inicializace, pokud neexistuje */
/* ------------------------------------------------------------------- */
/* Základní karty */
(unless: $hasRest is true or $hasRest is false)[(set: $hasRest to false)]
(unless: $hasFist is true or $hasFist is false)[(set: $hasFist to false)]
(unless: $hasBreath is true or $hasBreath is false)[(set: $hasBreath to false)]
(unless: $hasLightCover is true or $hasLightCover is false)[(set: $hasLightCover to false)]
(unless: $hasCover is true or $hasCover is false)[(set: $hasCover to false)]
(unless: $hasKick is true or $hasKick is false)[(set: $hasKick to false)]
/* Speciální bojové karty */
(unless: $hasKoralka is true or $hasKoralka is false)[(set: $hasKoralka to false)]
(unless: $koralkaCount is a number)[(set: $koralkaCount to 0)]
(unless: $hasDodge is true or $hasDodge is false)[(set: $hasDodge to false)]
(unless: $hasCounter is true or $hasCounter is false)[(set: $hasCounter to false)]
(unless: $hasFeint is true or $hasFeint is false)[(set: $hasFeint to false)]
(unless: $hasPowerStrike is true or $hasPowerStrike is false)[(set: $hasPowerStrike to false)]
(unless: $hasDoubleSlash is true or $hasDoubleSlash is false)[(set: $hasDoubleSlash to false)]
(unless: $hasBerserkerRage is true or $hasBerserkerRage is false)[(set: $hasBerserkerRage to false)]
(unless: $hasPrecisionStrike is true or $hasPrecisionStrike is false)[(set: $hasPrecisionStrike to false)]
(unless: $hasExecute is true or $hasExecute is false)[(set: $hasExecute to false)]
(unless: $hasIronWill is true or $hasIronWill is false)[(set: $hasIronWill to false)]
(unless: $hasDeflect is true or $hasDeflect is false)[(set: $hasDeflect to false)]
(unless: $hasFortify is true or $hasFortify is false)[(set: $hasFortify to false)]
(unless: $hasParry is true or $hasParry is false)[(set: $hasParry to false)]
(unless: $hasSwiftStrike is true or $hasSwiftStrike is false)[(set: $hasSwiftStrike to false)]
(unless: $hasGuardedAttack is true or $hasGuardedAttack is false)[(set: $hasGuardedAttack to false)]
(unless: $hasTacticalStrike is true or $hasTacticalStrike is false)[(set: $hasTacticalStrike to false)]
(unless: $hasAdrenaline is true or $hasAdrenaline is false)[(set: $hasAdrenaline to false)]
(unless: $hasMeditate is true or $hasMeditate is false)[(set: $hasMeditate to false)]
(unless: $hasLastStand is true or $hasLastStand is false)[(set: $hasLastStand to false)]
(unless: $hasSecondWind is true or $hasSecondWind is false)[(set: $hasSecondWind to false)]
/* ------------------------------------------------------------------- */
/* REGISTRACE ZVUKŮ PRO KARTY */
/* ------------------------------------------------------------------- */
(print: "<script>
if (typeof combatSounds !== 'undefined') {
/* Základní karty */
combatSounds.registerCard('Odpočinek', 'whoosh', 0.2);
combatSounds.registerCard('Pěstí', 'punch', 0.5);
combatSounds.registerCard('Nadechnout se', 'whoosh', 0.3);
combatSounds.registerCard('Lehký kryt', 'whoosh', 0.4);
combatSounds.registerCard('Kryt', 'whoosh', 0.4);
combatSounds.registerCard('Nakopnutí', 'kick', 0.6);
/* Běžné zbraně */
combatSounds.registerCard('Dýka', 'daggerStab', 0.5);
combatSounds.registerCard('Kvalitní dýka', 'daggerStab', 0.6);
combatSounds.registerCard('Starý a rezavý meč', 'swordSwing', 0.5);
combatSounds.registerCard('Meč', 'swordSwing', 0.6);
combatSounds.registerCard('Mistrovský meč', 'swordSwing', 0.7);
combatSounds.registerCard('Sekera', 'axeSwing', 0.7);
combatSounds.registerCard('Válečná sekera', 'axeSwing', 0.8);
combatSounds.registerCard('Obouruční meč', 'greatswordSwing', 0.8);
combatSounds.registerCard('Zvlněný meč', 'greatswordSwing', 0.9);
combatSounds.registerCard('Palcát', 'punch', 0.6);
combatSounds.registerCard('Jitřenka', 'axeSwing', 0.7);
combatSounds.registerCard('Kopí', 'daggerStab', 0.6);
combatSounds.registerCard('Halapartna', 'axeSwing', 0.8);
combatSounds.registerCard('Válečné kladivo', 'axeSwing', 0.8);
combatSounds.registerCard('Bojová sekera', 'axeSwing', 0.7);
combatSounds.registerCard('Šavle', 'swordSwing', 0.6);
combatSounds.registerCard('Rapír', 'daggerStab', 0.5);
combatSounds.registerCard('Katana', 'swordSwing', 0.7);
combatSounds.registerCard('Claymore', 'greatswordSwing', 0.8);
combatSounds.registerCard('Jezdecké kopí', 'daggerStab', 0.7);
combatSounds.registerCard('Cep', 'axeSwing', 0.7);
combatSounds.registerCard('Krátký meč', 'swordSwing', 0.5);
combatSounds.registerCard('Dlouhý luk', 'whoosh', 0.5);
combatSounds.registerCard('Kuše', 'whoosh', 0.6);
/* Legendární zbraně */
combatSounds.registerCard('Drakobijec', 'greatswordSwing', 1.0);
combatSounds.registerCard('Excalibur', 'greatswordSwing', 0.95);
combatSounds.registerCard('Stínové ostří', 'daggerStab', 0.9);
combatSounds.registerCard('Žnec duší', 'greatswordSwing', 1.0);
combatSounds.registerCard('Přivolávač bouří', 'axeSwing', 0.95);
/* Štíty a brnění */
combatSounds.registerCard('Dřevěný štít', 'shieldBlock', 0.5);
combatSounds.registerCard('Železný štít', 'shieldBlock', 0.6);
combatSounds.registerCard('Věžový štít', 'shieldBlock', 0.7);
combatSounds.registerCard('Schovat se za kožené brnění', 'armorEquip', 0.4);
combatSounds.registerCard('Schovat se za kroužkovou zbroj', 'armorEquip', 0.5);
combatSounds.registerCard('Schovat se za plátovou zbroj', 'armorEquip', 0.6);
/* Speciální bojové karty */
combatSounds.registerCard('Kořalka', 'whoosh', 0.4);
combatSounds.registerCard('Úhyb', 'whoosh', 0.5);
combatSounds.registerCard('Protiútok', 'punch', 0.6);
combatSounds.registerCard('Finta', 'whoosh', 0.4);
combatSounds.registerCard('Silový úder', 'punch', 0.7);
combatSounds.registerCard('Dvojitý sek', 'swordSwing', 0.7);
combatSounds.registerCard('Zuřivost', 'axeSwing', 0.8);
combatSounds.registerCard('Přesný úder', 'daggerStab', 0.6);
combatSounds.registerCard('Poprava', 'greatswordSwing', 0.9);
combatSounds.registerCard('Železná vůle', 'shieldBlock', 0.6);
combatSounds.registerCard('Odražení', 'shieldBlock', 0.7);
combatSounds.registerCard('Posílení', 'armorEquip', 0.5);
combatSounds.registerCard('Parírování', 'shieldBlock', 0.6);
combatSounds.registerCard('Rychlý úder', 'daggerStab', 0.5);
combatSounds.registerCard('Krytý útok', 'swordSwing', 0.6);
combatSounds.registerCard('Taktický úder', 'swordSwing', 0.6);
combatSounds.registerCard('Adrenalin', 'whoosh', 0.6);
combatSounds.registerCard('Meditace', 'whoosh', 0.3);
combatSounds.registerCard('Poslední vzdor', 'axeSwing', 0.8);
combatSounds.registerCard('Druhý dech', 'whoosh', 0.5);
}
</script>")
/* ------------------------------------------------------------------- */
/* IV. DEFINICE KARET PRO DOBÍRACÍ BALÍČEK - Z INVENTORY BALÍČKU */
/* ------------------------------------------------------------------- */
(set: $tempDeck to (a:))
<!-- ═══════════════════════════════════════════════════════════════
KONTROLA VALIDITY BALÍČKU - ZÁKLADNÍ REŽIM
═══════════════════════════════════════════════════════════════ -->
(if: $deckIsValid is false or $deckCards's length is 0)[
<!-- ZÁKLADNÍ BALÍČEK - POUZE základní karty, ŽÁDNÉ weapon -->
(set: $tempDeck to (a:
(dm: "name", "Základní pěstí", "attack", 1, "defense", 0, "cost", 0, "type", "basic", "image", "https://files.catbox.moe/mpodxa.jpg"),
(dm: "name", "Těžký kop", "attack", 3, "defense", 2, "cost", 4, "type", "basic", "missChance", 15, "image", "https://files.catbox.moe/qblf9a.jpg"),
(dm: "name", "Odlákat Pozornost", "attack", 0, "defense", 2, "cost", 1, "type", "basic", "image", "https://files.catbox.moe/xkdyig.jpg"),
(dm: "name", "Připravit se", "attack", 0, "defense", 0, "cost", -6, "type", "basic", "missChance", 50, "image", "https://files.catbox.moe/r28rc7.jpg"),
(dm: "name", "Pokřik", "attack", 0, "defense", 0, "cost", -2, "type", "basic", "image", "https://files.catbox.moe/9w4o4h.jpg"),
(dm: "name", "Útok ze skoku", "attack", 4, "defense", 1, "cost", 4, "type", "basic", "missChance", 25, "image", "https://files.catbox.moe/qn8plu.jpg"),
(dm: "name", "Hodit kámen", "attack", 6, "defense", 0, "cost", 3, "type", "basic", "missChance", 35, "image", "https://files.catbox.moe/uyejeg.jpg"),
(dm: "name", "Vyhnout se", "attack", 0, "defense", 1, "cost", 0, "type", "basic", "image", "https://files.catbox.moe/02uu8l.jpg"),
(dm: "name", "Silný úder", "attack", 5, "defense", 0, "cost", 4, "type", "basic", "image", "https://files.catbox.moe/god1qw.jpg"),
(dm: "name", "Náhlý výpad", "attack", 4, "defense", 4, "cost", 3, "type", "counter", "image", "https://files.catbox.moe/usrumj.jpg")
))
](else:)[
<!-- NORMÁLNÍ REŽIM - načti karty z balíčku -->
<!-- Načtení karet z inventory -->
(for: each _inventoryCard, ...$deckCards)[
(set: _cardId to _inventoryCard's id)
(set: _cardName to _inventoryCard's name)
(set: _cardImage to _inventoryCard's image)
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- Mapování ID karet na jejich bojové statistiky -->
<!-- ═══════════════════════════════════════════════════════════════ -->
(if: _cardId is "woodenSword")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Rezavý meč",
"defense", 0,
"cost", 4,
"type", "weapon",
"image", "https://files.catbox.moe/8opbcl.jpg",
"levels", (a:
(dm: "minAttack", 1, "maxAttack", 4),
(dm: "minAttack", 3, "maxAttack", 8),
(dm: "minAttack", 6, "maxAttack", 10)
)
)))
](else-if: _cardId is "dagger")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Dýka",
"defense", 0,
"cost", 2,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 0, "maxAttack", 8),
(dm: "minAttack", 2, "maxAttack", 8),
(dm: "minAttack", 6, "maxAttack", 8)
)
)))
](else-if: _cardId is "daggerQuality")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Kvalitní dýka",
"defense", 2,
"cost", 2,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 1, "maxAttack", 9),
(dm: "minAttack", 3, "maxAttack", 9),
(dm: "minAttack", 6, "maxAttack", 10)
)
)))
](else-if: _cardId is "sword")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Meč",
"defense", 2,
"cost", 4,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 2, "maxAttack", 5),
(dm: "minAttack", 3, "maxAttack", 9),
(dm: "minAttack", 7, "maxAttack", 11)
)
)))
](else-if: _cardId is "swordMaster")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Mistrovský meč",
"defense", 3,
"cost", 4,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 3, "maxAttack", 8),
(dm: "minAttack", 4, "maxAttack", 10),
(dm: "minAttack", 11, "maxAttack", 12)
)
)))
](else-if: _cardId is "axe")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Sekera",
"defense", 1,
"cost", 5,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 0, "maxAttack", 10),
(dm: "minAttack", 3, "maxAttack", 11),
(dm: "minAttack", 6, "maxAttack", 12)
)
)))
](else-if: _cardId is "axeWar")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Válečná sekera",
"defense", 2,
"cost", 6,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 3, "maxAttack", 12),
(dm: "minAttack", 3, "maxAttack", 16),
(dm: "minAttack", 6, "maxAttack", 19)
)
)))
](else-if: _cardId is "greatsword")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Obouruční meč",
"defense", 2,
"cost", 6,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 6, "maxAttack", 8),
(dm: "minAttack", 8, "maxAttack", 12),
(dm: "minAttack", 11, "maxAttack", 16)
)
)))
](else-if: _cardId is "greatswordLegendary")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Zvlněný meč",
"defense", 4,
"cost", 6,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 7, "maxAttack", 9),
(dm: "minAttack", 9, "maxAttack", 11),
(dm: "minAttack", 12, "maxAttack", 15)
)
)))
](else-if: _cardId is "morningstar")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Jitřenka",
"defense", 0,
"cost", 4,
"type", "weapon",
"image", "https://files.catbox.moe/rl4xsm.jpg",
"levels", (a:
(dm: "minAttack", 2, "maxAttack", 11),
(dm: "minAttack", 4, "maxAttack", 13),
(dm: "minAttack", 6, "maxAttack", 14)
)
)))
](else-if: _cardId is "mace")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Palcát",
"defense", 0,
"cost", 3,
"type", "weapon",
"image", "https://files.catbox.moe/47d521.jpg",
"levels", (a:
(dm: "minAttack", 0, "maxAttack", 8),
(dm: "minAttack", 1, "maxAttack", 12),
(dm: "minAttack", 2, "maxAttack", 13)
)
)))
](else-if: _cardId is "spear")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Kopí",
"defense", 3,
"cost", 3,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 3, "maxAttack", 6),
(dm: "minAttack", 5, "maxAttack", 8),
(dm: "minAttack", 7, "maxAttack", 10)
)
)))
](else-if: _cardId is "halberd")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Halapartna",
"defense", 2,
"cost", 5,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 5, "maxAttack", 9),
(dm: "minAttack", 7, "maxAttack", 12),
(dm: "minAttack", 10, "maxAttack", 14)
)
)))
](else-if: _cardId is "warhammer")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Válečné kladivo",
"defense", 1,
"cost", 5,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 6, "maxAttack", 10),
(dm: "minAttack", 8, "maxAttack", 13),
(dm: "minAttack", 11, "maxAttack", 15)
)
)))
](else-if: _cardId is "battleaxe")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Bojová sekera",
"defense", 2,
"cost", 4,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 4, "maxAttack", 8),
(dm: "minAttack", 6, "maxAttack", 11),
(dm: "minAttack", 9, "maxAttack", 13)
)
)))
](else-if: _cardId is "scimitar")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Šavle",
"defense", 3,
"cost", 3,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 3, "maxAttack", 6),
(dm: "minAttack", 5, "maxAttack", 8),
(dm: "minAttack", 7, "maxAttack", 10)
)
)))
](else-if: _cardId is "rapier")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Rapír",
"defense", 4,
"cost", 3,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 2, "maxAttack", 5),
(dm: "minAttack", 4, "maxAttack", 7),
(dm: "minAttack", 6, "maxAttack", 9)
)
)))
](else-if: _cardId is "katana")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Katana",
"defense", 3,
"cost", 4,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 5, "maxAttack", 9),
(dm: "minAttack", 7, "maxAttack", 11),
(dm: "minAttack", 10, "maxAttack", 13)
)
)))
](else-if: _cardId is "claymore")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Claymore",
"defense", 2,
"cost", 5,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 6, "maxAttack", 11),
(dm: "minAttack", 9, "maxAttack", 14),
(dm: "minAttack", 12, "maxAttack", 17)
)
)))
](else-if: _cardId is "lance")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Jezdecké kopí",
"defense", 1,
"cost", 4,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 4, "maxAttack", 8),
(dm: "minAttack", 6, "maxAttack", 10),
(dm: "minAttack", 9, "maxAttack", 12)
)
)))
](else-if: _cardId is "flail")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Cep",
"defense", 0,
"cost", 4,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 3, "maxAttack", 7),
(dm: "minAttack", 5, "maxAttack", 10),
(dm: "minAttack", 8, "maxAttack", 12)
)
)))
](else-if: _cardId is "shortsword")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Krátký meč",
"defense", 2,
"cost", 2,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 1, "maxAttack", 4),
(dm: "minAttack", 3, "maxAttack", 6),
(dm: "minAttack", 5, "maxAttack", 8)
)
)))
](else-if: _cardId is "longbow")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Dlouhý luk",
"defense", 0,
"cost", 3,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 3, "maxAttack", 6, "missChance", 25),
(dm: "minAttack", 5, "maxAttack", 8, "missChance", 20),
(dm: "minAttack", 7, "maxAttack", 10, "missChance", 15)
)
)))
](else-if: _cardId is "crossbow")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Kuše",
"defense", 1,
"cost", 3,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 4, "maxAttack", 7, "missChance", 20),
(dm: "minAttack", 6, "maxAttack", 9, "missChance", 15),
(dm: "minAttack", 8, "maxAttack", 11, "missChance", 10)
)
)))
](else-if: _cardId is "dragonslayer")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Drakobijec",
"defense", 5,
"cost", 7,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 13, "maxAttack", 18),
(dm: "minAttack", 16, "maxAttack", 21),
(dm: "minAttack", 19, "maxAttack", 24)
)
)))
](else-if: _cardId is "excalibur")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Excalibur",
"defense", 6,
"cost", 6,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 11, "maxAttack", 16),
(dm: "minAttack", 14, "maxAttack", 19),
(dm: "minAttack", 17, "maxAttack", 22)
)
)))
](else-if: _cardId is "shadowblade")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Stínové ostří",
"defense", 5,
"cost", 6,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 10, "maxAttack", 14),
(dm: "minAttack", 12, "maxAttack", 17),
(dm: "minAttack", 15, "maxAttack", 20)
)
)))
](else-if: _cardId is "soulreaper")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Žnec duší",
"defense", 3,
"cost", 7,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 12, "maxAttack", 17),
(dm: "minAttack", 15, "maxAttack", 20),
(dm: "minAttack", 18, "maxAttack", 23)
)
)))
](else-if: _cardId is "stormbringer")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Drtihlavka",
"defense", 0,
"cost", 2,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 9, "maxAttack", 9),
(dm: "minAttack", 9, "maxAttack", 9, "addsCard", "skullcrusher"),
(dm: "minAttack", 15, "maxAttack", 19)
)
)))
](else-if: _cardId is "compositebow")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Kompozitní luk",
"defense", 1,
"cost", 3,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 4, "maxAttack", 7, "missChance", 25),
(dm: "minAttack", 6, "maxAttack", 9, "missChance", 20),
(dm: "minAttack", 8, "maxAttack", 11, "missChance", 15)
)
)))
](else-if: _cardId is "recurvebow")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Reflexní luk",
"defense", 2,
"cost", 4,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 5, "maxAttack", 8, "missChance", 22),
(dm: "minAttack", 7, "maxAttack", 10, "missChance", 18),
(dm: "minAttack", 9, "maxAttack", 12, "missChance", 14)
)
)))
](else-if: _cardId is "heavyCrossbow")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Těžká kuše",
"defense", 0,
"cost", 4,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 6, "maxAttack", 9, "missChance", 18),
(dm: "minAttack", 8, "maxAttack", 12, "missChance", 14),
(dm: "minAttack", 11, "maxAttack", 14, "missChance", 10)
)
)))
](else-if: _cardId is "repeatingCrossbow")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Opakující kuše",
"defense", 2,
"cost", 3,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 3, "maxAttack", 6, "missChance", 20),
(dm: "minAttack", 5, "maxAttack", 8, "missChance", 16),
(dm: "minAttack", 7, "maxAttack", 10, "missChance", 12)
)
)))
](else-if: _cardId is "warbow")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Válečný luk",
"defense", 1,
"cost", 5,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 6, "maxAttack", 10, "missChance", 20),
(dm: "minAttack", 9, "maxAttack", 13, "missChance", 15),
(dm: "minAttack", 12, "maxAttack", 16, "missChance", 10)
)
)))
](else-if: _cardId is "sniperCrossbow")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Odstřelovačská kuše",
"defense", 3,
"cost", 4,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 5, "maxAttack", 8, "missChance", 15),
(dm: "minAttack", 7, "maxAttack", 11, "missChance", 10),
(dm: "minAttack", 10, "maxAttack", 13, "missChance", 5)
)
)))
](else-if: _cardId is "hunterBow")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Lovecký luk",
"defense", 0,
"cost", 4,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 6, "maxAttack", 12, "missChance", 30),
(dm: "minAttack", 6, "maxAttack", 12, "missChance", 25),
(dm: "minAttack", 6, "maxAttack", 12, "missChance", 20)
)
)))
](else-if: _cardId is "elvenBow")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Elfský luk",
"defense", 3,
"cost", 4,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 6, "maxAttack", 9, "missChance", 12),
(dm: "minAttack", 8, "maxAttack", 12, "missChance", 8),
(dm: "minAttack", 11, "maxAttack", 14, "missChance", 5)
)
)))
](else-if: _cardId is "dragonCrossbow")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Dračí kuše",
"defense", 4,
"cost", 6,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 10, "maxAttack", 15, "missChance", 10),
(dm: "minAttack", 13, "maxAttack", 18, "missChance", 6),
(dm: "minAttack", 16, "maxAttack", 21, "missChance", 3)
)
)))
](else-if: _cardId is "windbow")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Luk větru",
"defense", 2,
"cost", 4,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 5, "maxAttack", 8, "missChance", 18),
(dm: "minAttack", 7, "maxAttack", 10, "missChance", 14),
(dm: "minAttack", 9, "maxAttack", 12, "missChance", 10)
)
)))
](else-if: _cardId is "fireballStaff")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Hůl ohnivé koule",
"defense", 2,
"cost", 4,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 5, "maxAttack", 8),
(dm: "minAttack", 7, "maxAttack", 11),
(dm: "minAttack", 10, "maxAttack", 13)
)
)))
](else-if: _cardId is "lightningWand")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Hůlka blesku",
"defense", 1,
"cost", 3,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 4, "maxAttack", 7),
(dm: "minAttack", 6, "maxAttack", 9),
(dm: "minAttack", 8, "maxAttack", 11)
)
)))
](else-if: _cardId is "frostOrb")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Ledová sféra",
"defense", 3,
"cost", 3,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 3, "maxAttack", 6),
(dm: "minAttack", 5, "maxAttack", 8),
(dm: "minAttack", 7, "maxAttack", 10)
)
)))
](else-if: _cardId is "arcaneBlaster")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Arkánový vrhač",
"defense", 2,
"cost", 4,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 6, "maxAttack", 9),
(dm: "minAttack", 8, "maxAttack", 12),
(dm: "minAttack", 11, "maxAttack", 14)
)
)))
](else-if: _cardId is "voidScepter")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Žezlo prázdnoty",
"defense", 4,
"cost", 7,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 11, "maxAttack", 16),
(dm: "minAttack", 14, "maxAttack", 19),
(dm: "minAttack", 17, "maxAttack", 22)
)
)))
](else-if: _cardId is "sunbeamRod")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Prut slunečního paprsku",
"defense", 3,
"cost", 5,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 7, "maxAttack", 10),
(dm: "minAttack", 9, "maxAttack", 13),
(dm: "minAttack", 12, "maxAttack", 15)
)
)))
](else-if: _cardId is "shadowBolt")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Stínový šíp",
"defense", 2,
"cost", 2,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 2, "maxAttack", 5),
(dm: "minAttack", 4, "maxAttack", 7),
(dm: "minAttack", 6, "maxAttack", 9)
)
)))
](else-if: _cardId is "chaosOrb")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Chaotická koule",
"defense", 1,
"cost", 5,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 7, "maxAttack", 11),
(dm: "minAttack", 10, "maxAttack", 14),
(dm: "minAttack", 13, "maxAttack", 17)
)
)))
](else-if: _cardId is "starfall")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Hvězdný pád",
"defense", 5,
"cost", 7,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 12, "maxAttack", 17),
(dm: "minAttack", 15, "maxAttack", 20),
(dm: "minAttack", 18, "maxAttack", 23)
)
)))
](else-if: _cardId is "mysticMissile")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Mystická střela",
"defense", 1,
"cost", 2,
"type", "weapon",
"image", _cardImage,
"levels", (a:
(dm: "minAttack", 1, "maxAttack", 4),
(dm: "minAttack", 3, "maxAttack", 6),
(dm: "minAttack", 5, "maxAttack", 8)
)
)))
<!-- ZÁKLADNÍ KARTY -->
](else-if: _cardId is "rest")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Odpočinek", "attack", 0, "defense", 0, "cost", -3, "type", "basic", "image", _cardImage)))
](else-if: _cardId is "fist")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Pěstí", "attack", 1, "defense", 0, "cost", 0, "type", "basic", "image", _cardImage)))
](else-if: _cardId is "breathe")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Nadechnout se", "attack", 0, "defense", 0, "cost", -5, "type", "basic", "image", _cardImage)))
](else-if: _cardId is "lightCover")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Lehký kryt", "attack", 0, "defense", 2, "cost", 0, "type", "basic", "image", _cardImage)))
](else-if: _cardId is "cover")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Kryt", "attack", 0, "defense", 4, "cost", 1, "type", "basic", "image", _cardImage)))
](else-if: _cardId is "kick")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Nakopnutí", "attack", 2, "defense", 0, "cost", 0, "type", "basic", "image", _cardImage)))
<!-- BOJOVÉ KARTY -->
](else-if: _cardId is "koralka")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Kořalka", "attack", 0, "defense", 0, "cost", 0, "type", "healing", "healing", 5, "consumable", true, "image", _cardImage)))
](else-if: _cardId is "dodge")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Úhyb", "attack", 0, "defense", 500, "cost", 6, "type", "defensive", "image", _cardImage)))
<!-- ⚔️ COUNTER KARTA - OPRAVENO -->
](else-if: _cardId is "counter")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Protiútok",
"attack", 6,
"defense", 4,
"cost", 3,
"type", "counter",
"image", _cardImage
)))
](else-if: _cardId is "feint")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Finta", "attack", 3, "defense", 1, "cost", 1, "type", "tactical", "image", _cardImage)))
](else-if: _cardId is "powerStrike")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Silový úder", "attack", 7, "defense", 0, "cost", 4, "type", "offensive", "image", _cardImage)))
](else-if: _cardId is "doubleSlash")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Dvojitý sek", "attack", 3, "defense", 1, "cost", 3, "type", "offensive", "image", _cardImage)))
](else-if: _cardId is "berserkerRage")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Zuřivost", "attack", 9, "defense", 0, "cost", 4, "type", "berserker", "image", _cardImage)))
](else-if: _cardId is "precisionStrike")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Přesný úder", "attack", 7, "defense", 1, "cost", 5, "type", "precision", "image", _cardImage)))
](else-if: _cardId is "execute")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Poprava", "attack", 0, "defense", 0, "cost", 9, "type", "finisher", "image", _cardImage)))
](else-if: _cardId is "meditate")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Natrhsval", "attack", 0, "defense", 0, "cost", 0, "type", "meditation", "image", _cardImage)))
<!-- BOJOVÉ KARTY - CHYBĚJÍCÍ -->
](else-if: _cardId is "ironWill")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Železná vůle", "attack", 0, "defense", 7, "cost", 3, "type", "mental", "image", _cardImage)))
](else-if: _cardId is "deflect")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Odražení", "attack", 4, "defense", 5, "cost", 4, "type", "counter", "image", _cardImage)))
](else-if: _cardId is "fortify")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Posílení", "attack", 0, "defense", 0, "cost", 2, "type", "buff", "image", _cardImage)))
](else-if: _cardId is "parry")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Parírování", "attack", 2, "defense", 4, "cost", 4, "type", "defensive", "image", _cardImage)))
](else-if: _cardId is "swiftStrike")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Rychlý úder", "attack", 2, "defense", 2, "cost", 2, "type", "offensive", "image", _cardImage)))
](else-if: _cardId is "guardedAttack")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Krytý útok", "attack", 5, "defense", 3, "cost", 3, "type", "balanced", "image", _cardImage)))
](else-if: _cardId is "tacticalStrike")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Taktický úder", "attack", 5, "defense", 2, "cost", 3, "type", "tactical", "image", _cardImage)))
](else-if: _cardId is "adrenaline")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Adrenalin",
"attack", 0,
"defense", 0,
"cost", 0,
"type", "meditationstrong",
"image", _cardImage
)))
](else-if: _cardId is "lastStand")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Poslední vzdor", "attack", 4, "defense", 4, "cost", 2, "type", "desperate", "image", _cardImage)))
](else-if: _cardId is "secondWind")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Druhý dech", "attack", 0, "defense", 0, "cost", -4, "type", "regeneration", "image", _cardImage)))
<!-- ŠTÍTY -->
](else-if: _cardId is "woodenShield")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Dřevěný štít", "attack", 0, "defense", 4, "cost", 2, "type", "defensive", "image", _cardImage)))
](else-if: _cardId is "ironShield")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Železný štít", "attack", 0, "defense", 6, "cost", 3, "type", "defensive", "image", _cardImage)))
](else-if: _cardId is "towerShield")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Věžový štít", "attack", 0, "defense", 8, "cost", 4, "type", "defensive", "image", _cardImage)))
<!-- SVITKY -->
](else-if: _cardId is "scrollFireball")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Svitek ohnivé koule", "attack", 10, "defense", 0, "cost", 4, "type", "scroll", "consumable", true, "image", _cardImage)))
](else-if: _cardId is "scrollHeal")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Svitek léčení", "attack", 0, "defense", 0, "cost", 3, "type", "healing", "healing", 10, "consumable", true, "image", _cardImage)))
](else-if: _cardId is "scrollShield")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Svitek ochrany", "attack", 0, "defense", 8, "cost", 3, "type", "defensive", "consumable", true, "image", _cardImage)))
](else-if: _cardId is "scrollLightning")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Svitek blesku", "attack", 12, "defense", 0, "cost", 5, "type", "scroll", "consumable", true, "image", _cardImage)))
](else-if: _cardId is "scrollFrost")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Svitek mrazu", "attack", 8, "defense", 2, "cost", 4, "type", "scroll", "consumable", true, "image", _cardImage)))
](else-if: _cardId is "scrollTeleport")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Svitek teleportace", "attack", 0, "defense", 10, "cost", 5, "type", "tactical", "consumable", true, "image", _cardImage)))
](else-if: _cardId is "scrollRevive")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Svitek zmrtvýchvstání", "attack", 0, "defense", 0, "cost", 8, "type", "healing", "healing", 50, "consumable", true, "image", _cardImage)))
<!-- LEKTVARY -->
](else-if: _cardId is "potionHealthSmall")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Malý lektvar zdraví", "attack", 0, "defense", 0, "cost", 1, "type", "healing", "healing", 5, "consumable", true, "image", _cardImage)))
](else-if: _cardId is "potionHealthMedium")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Střední lektvar zdraví", "attack", 0, "defense", 0, "cost", 2, "type", "healing", "healing", 10, "consumable", true, "image", _cardImage)))
](else-if: _cardId is "potionHealthLarge")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Velký lektvar zdraví", "attack", 0, "defense", 0, "cost", 3, "type", "healing", "healing", 20, "consumable", true, "image", _cardImage)))
](else-if: _cardId is "potionStrength")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Lektvar síly", "attack", 5, "defense", 0, "cost", 3, "type", "buff", "consumable", true, "image", _cardImage)))
](else-if: _cardId is "potionDefense")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Lektvar obrany", "attack", 0, "defense", 5, "cost", 3, "type", "buff", "consumable", true, "image", _cardImage)))
](else-if: _cardId is "potionSpeed")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Lektvar rychlosti", "attack", 3, "defense", 3, "cost", 4, "type", "buff", "consumable", true, "image", _cardImage)))
](else-if: _cardId is "potionInvincibility")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Lektvar nesmrtelnosti", "attack", 0, "defense", 20, "cost", 8, "type", "buff", "consumable", true, "image", _cardImage)))
<!-- Extra karty, které lze získat jedině vyvoláním jinýma kartama -->
](else-if: _cardId is "skullcrusher")[
(set: $tempDeck to $tempDeck + (a: (dm:
"name", "Drcení hlav",
"minAttack", 9,
"maxAttack", 19,
"defense", 0,
"cost", 3,
"type", "precision",
"image", _cardImage
)))
<!-- KONZUMNÍ PŘEDMĚTY -->
](else-if: _cardId is "smokeBomb")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Kouřová bomba", "attack", 0, "defense", 5, "cost", 2, "type", "tactical", "consumable", true, "image", _cardImage)))
](else-if: _cardId is "holyWater")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Svatá voda", "attack", 8, "defense", 2, "cost", 3, "type", "special", "consumable", true, "image", _cardImage)))
](else-if: _cardId is "fireBomb")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Ohnivá bomba", "attack", 12, "defense", 0, "cost", 4, "type", "offensive", "consumable", true, "image", _cardImage)))
](else-if: _cardId is "poisonDagger")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Jedový nůž", "attack", 6, "defense", 0, "cost", 3, "type", "weapon", "consumable", true, "image", _cardImage)))
](else-if: _cardId is "thunderstone")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Hromový kámen", "attack", 10, "defense", 1, "cost", 4, "type", "offensive", "consumable", true, "image", _cardImage)))
](else-if: _cardId is "protectionAmulet")[
(set: $tempDeck to $tempDeck + (a: (dm: "name", "Amulet ochrany", "attack", 0, "defense", 7, "cost", 4, "type", "defensive", "consumable", true, "image", _cardImage)))
]
]
/* ------------------------------------------------------------------- */
/* V. SESTAVENÍ BALÍČKU */
/* ------------------------------------------------------------------- */
(set: $allAvailableCards to (shuffled: ...$tempDeck))
(set: $playerDeck to $allAvailableCards)
<!-- ⚠️ POJISTKA - Pokud hráč nemá žádné karty, přesměruj na chybovou stránku -->
(if: $playerDeck's length is 0)[
(go-to: "ErrorNoCards")
]
/* ------------------------------------------------------------------- */
/* VI. ROZDÁNÍ KARET A START */
/* ------------------------------------------------------------------- */
(set: $playerHand to $playerDeck's (range: 1, (min: $handSize, $playerDeck's length)))
/* Nepřátelský balíček */
(set: $enemyDeck to (a:
(dm: "name", "Úskok", "attack", 0, "defense", 3, "cost", 1, "type", "enemy", "image", "https://files.catbox.moe/3eezad.jpg"),
(dm: "name", "Vytí", "attack", 0, "defense", 0, "cost", -3, "type", "enemy", "image", "https://files.catbox.moe/1kttrj.jpg"),
(dm:
"name", "Drápy",
"attack", 1,
"defense", 0,
"cost", 3,
"type", "poison",
"poisonDamage", 2,
"poisonDuration", 2,
"image", "https://files.catbox.moe/qztqof.jpg"
),
(dm: "name", "tesáky", "attack", 3, "defense", 0, "cost", 0, "type", "enemy", "image", "https://files.catbox.moe/e68znd.jpg"),
(dm:
"name", "Trhání masa",
"attack", 6,
"defense", 0,
"cost", 2,
"type", "basic", "missChance", 30,
"image", "https://files.catbox.moe/f4cgry.jpg"
)
))
(set: $enemyHand to (shuffled: ...$enemyDeck))
(go-to: "CardBattle"){<!-- ═══════════════════════════════════════════════════════════════
HANDLER PRO BONUSOVÉ KARTY V MODALU
═══════════════════════════════════════════════════════════════ -->
(set: $cardBonusMapping to (dm:
"stormbringer", (dm:
"mainCard", "https://files.catbox.moe/4p7cwe.jpg",
"bonusCard", "https://files.catbox.moe/j9sxft.jpg",
"mainName", "Přivolávač bouří",
"bonusName", "Drcení hlav"
)
))
<script>
// Globální mapa bonusových karet pro JavaScript
window.cardBonusMapping = {
"stormbringer": {
mainCard: "https://files.catbox.moe/4p7cwe.jpg",
bonusCard: "https://files.catbox.moe/j9sxft.jpg",
mainName: "Přivolávač bouří",
bonusName: "Drcení hlav"
},
// Přidej další karty s bonusem zde:
// "jineKartyID": {
// mainCard: "url_hlavni_karty.jpg",
// bonusCard: "url_bonus_karty.jpg",
// mainName: "Jméno hlavní karty",
// bonusName: "Jméno bonusové karty"
// }
};
</script>}{
(set: $cardWeights to (dm:
"woodenSword", 1,
"dagger", 1,
"daggerQuality", 1,
"sword", 1,
"swordMaster", 2,
"axe", 1,
"axeWar", 2,
"greatsword", 2,
"mace", 1,
"morningstar", 1,
"spear", 1,
"halberd", 2,
"warhammer", 2,
"battleaxe", 2,
"scimitar", 1,
"rapier", 1,
"katana", 2,
"claymore", 2,
"lance", 1,
"flail", 1,
"shortsword", 1,
"longbow", 1,
"crossbow", 1,
"greatswordLegendary", 3,
"dragonslayer", 3,
"excalibur", 3,
"shadowblade", 3,
"soulreaper", 3,
"stormbringer", 3,
"fireballStaff", 2,
"lightningWand", 2,
"frostOrb", 2,
"arcaneBlaster", 2,
"voidScepter", 3,
"sunbeamRod", 2,
"shadowBolt", 2,
"chaosOrb", 2,
"starfall", 3,
"mysticMissile", 2,
"compositebow", 1,
"recurvebow", 1,
"heavyCrossbow", 2,
"repeatingCrossbow", 2,
"warbow", 2,
"sniperCrossbow", 2,
"hunterBow", 1,
"elvenBow", 2,
"dragonCrossbow", 3,
"windbow", 2,
"leather", 1,
"chain", 2,
"plate", 3,
"woodenShield", 1,
"ironShield", 2,
"towerShield", 3,
"rest", 1,
"fist", 1,
"breathe", 1,
"lightCover", 1,
"cover", 1,
"kick", 1,
"koralka", 1,
"dodge", 1,
"counter", 2,
"feint", 1,
"powerStrike", 2,
"doubleSlash", 2,
"berserkerRage", 3,
"precisionStrike", 2,
"execute", 3,
"ironWill", 2,
"deflect", 2,
"fortify", 1,
"parry", 2,
"swiftStrike", 1,
"guardedAttack", 2,
"tacticalStrike", 2,
"adrenaline", 1,
"meditate", 1,
"lastStand", 3,
"secondWind", 2
))
(unless: $deckCards is a array)[(set: $deckCards to (a:))]
(set: $totalDeckWeight to 0)
(for: each _card, ...$deckCards)[
(if: _card contains "id")[
(set: _cardWeight to $cardWeights's (_card's id))
(if: _cardWeight is a number)[
(set: $totalDeckWeight to $totalDeckWeight + _cardWeight)
](else:)[
(set: $totalDeckWeight to $totalDeckWeight + 1)
]
]
]
(set: $deckMinCards to 10)
(set: $deckMaxCards to 20)
(set: $deckMaxWeight to 21)
(set: $deckCardCount to $deckCards's length)
(set: $deckIsValid to false)
(if: $deckCardCount >= $deckMinCards and $deckCardCount <= $deckMaxCards and $totalDeckWeight <= $deckMaxWeight)[
(set: $deckIsValid to true)
]
(set: $canAddCardToDeck to (macro: str-type _cardId, [
(set: _cardWeight to $cardWeights's _cardId)
(if: _cardWeight is 0)[(set: _cardWeight to 1)]
(set: _newWeight to $totalDeckWeight + _cardWeight)
(set: _newCount to $deckCardCount + 1)
/* Kontrola limitů */
(if: _newCount > $deckMaxCards)[
(output-data: false)
](else-if: _newWeight > $deckMaxWeight)[
(output-data: false)
](else:)[
(output-data: true)
]
]))
(set: $getAddCardBlockReason to (macro: str-type _cardId, [
(set: _cardWeight to $cardWeights's _cardId)
(if: _cardWeight is 0)[(set: _cardWeight to 1)]
(set: _newWeight to $totalDeckWeight + _cardWeight)
(set: _newCount to $deckCardCount + 1)
(if: _newCount > $deckMaxCards)[
(output-data: "Balíček už má maximum karet (" + (text: $deckMaxCards) + ")")
](else-if: _newWeight > $deckMaxWeight)[
(set: _overWeight to _newWeight - $deckMaxWeight)
(output-data: "Přesáhla by se maximální váha balíčku o " + (text: _overWeight))
](else:)[
(output-data: "")
]
]))
}{{<!-- CounterHandler - UPDATED s Turn System -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- DETEKCE COUNTER KARTY -->
<!-- ═══════════════════════════════════════════════════════════════ -->
(if: $chosenPlayerCard contains "type" and $chosenPlayerCard's type is "counter")[
<!-- ✅ KONTROLA: Je nepřítel na tahu? (používáme nový turn system) -->
(if: $isEnemyFirstThisTurn is true)[
<!-- COUNTER JE PLATNÝ - nepřítel je na tahu -->
(set: $counterCardActive to true)
<!-- 📝 LOG ZPRÁVA -->
(set: $counterMsg to "<span class='combat-counter'>Částečně blokuješ nepřítele a provádíš výpad.</span>")
(set: $combatLog to $combatLog + (a: $counterMsg))
](else:)[
<!-- ❌ COUNTER NENÍ PLATNÝ - hráč je na tahu -->
(set: $counterCardActive to false)
<!-- 🛡️ PŘEPSÁNÍ STATŮ NA 0 PRO RESOLVE -->
(set: $chosenPlayerCard to (dm:
"name", $chosenPlayerCard's name,
"attack", 0,
"defense", 0,
"cost", $chosenPlayerCard's cost,
"type", $chosenPlayerCard's type,
"image", $chosenPlayerCard's image
))
<!-- 📝 LOG ZPRÁVA -->
(set: $counterMsg to "<span class='combat-counter-fail'>PROTIÚTOK SELHAL! Můžeš ho použít pouze když je nepřítel na tahu.</span>")
(set: $combatLog to $combatLog + (a: $counterMsg))
]
](else:)[
<!-- Není counter karta - nic nedělej -->
(set: $counterCardActive to false)
]
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- CSS STYLY PRO COUNTER KARTU -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<style>
/* ⚔️ COUNTER KARTA - SPECIÁLNÍ VZHLED */
.counter-card {
background: linear-gradient(135deg, rgba(109, 110, 80, 0.8), rgba(51, 51, 39, 0.9)) !important;
border-color: rgba(220, 20, 60, 0.1) !important;
position: relative;
overflow: hidden;
}
/* AKTIVNÍ COUNTER KARTA - zelený glow (když nepřítel hraje první) */
.counter-card.counter-active {
box-shadow: 0 0 20px rgba(0, 255, 0, 0.1) !important;
border-color: rgba(0, 255, 0, 0.8) !important;
animation: counter-ready 1.5s ease-in-out infinite;
}
@keyframes counter-ready {
0%, 100% {
box-shadow: 0 0 15px rgba(0, 255, 0, 0.1);
}
50% {
box-shadow: 0 0 30px rgba(0, 255, 0, 0.2);
}
}
/* NEAKTIVNÍ COUNTER KARTA - červený glow (když hráč hraje první) */
.counter-card.counter-inactive {
box-shadow: 0 0 20px rgba(255, 0, 0, 0.6) !important;
border-color: rgba(255, 0, 0, 0.8) !important;
filter: grayscale(70%) brightness(0.5);
opacity: 0.5;
pointer-events: none !important; /* ← NOVÉ: Nelze na ni kliknout */
cursor: not-allowed !important;
}
/* COMBAT LOG ZPRÁVY */
.combat-counter {
color: #00ff00;
font-weight: bold;
text-shadow: 0 0 10px rgba(0, 255, 0, 0.8);
font-size: 1.1em;
}
.combat-counter-fail {
color: #ff4444;
font-weight: bold;
text-shadow: 0 0 10px rgba(255, 68, 68, 0.8);
}
/* INDIKÁTOR NA KARTĚ */
.counter-card .card-name::after {
content: ' ⚔️';
color: #dc143c;
text-shadow: 0 0 5px rgba(220, 20, 60, 0.8);
}
/* TEXT PRO NEPOUŽITELNOU COUNTER KARTU */
.counter-card.counter-inactive .card-disabled-text {
display: block !important;
position: absolute;
bottom: 50px;
left: 50%;
transform: translateX(-50%);
background: rgba(255, 0, 0, 0.8);
color: white;
padding: 5px 10px;
border-radius: 3px;
font-size: 11px;
font-weight: bold;
white-space: nowrap;
}
/* Styl pro textovou hlášku v neaktivní kartě */
.card-disabled-text {
background: #e3dd9f !important; /* Krémová */
color: #000 !important; /* Černá */
border: none !important; /* Bez rámečku */
padding: 5px 10px;
font-family: 'Cinzel', serif;
font-weight: bold;
border-radius: 2px;
}
</style>
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- JAVASCRIPT PRO DYNAMICKÉ PŘIDÁNÍ TŘÍD -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<script>
(function() {
setTimeout(function() {
// Najdi všechny counter karty
var cards = document.querySelectorAll('.card.counter-card');
cards.forEach(function(card) {
var cardName = card.querySelector('.card-name');
if (cardName && cardName.textContent.includes('Protiútok')) {
// Zjisti, jestli je nepřítel na tahu (NOVÝ SYSTÉM)
var isEnemyFirst = (typeof $isEnemyFirstThisTurn !== 'undefined' && $isEnemyFirstThisTurn === true);
if (isEnemyFirst) {
card.classList.add('counter-active');
card.classList.remove('counter-inactive');
} else {
card.classList.add('counter-inactive');
card.classList.remove('counter-active');
// Zajisti, že na neaktivní kartu nelze kliknout
card.style.pointerEvents = 'none';
}
}
});
}, 100);
})();
</script>
}}{
<!-- ============================================ -->
<!-- TEST ODDĚLOVAČŮ -->
<!-- ============================================ -->
<h3>Test oddělovacích čar</h3>
<br><br>
<!-- ODDĚLOVAČ 1: Klasický -->
<div class="text-divider divider-classic"></div>
<br><br>
Text mezi oddělovači 1 a 2
<br><br>
<!-- ODDĚLOVAČ 2: RPG (meče) -->
<div class="text-divider divider-rpg"></div>
<br><br>
Text mezi oddělovači 2 a 3
<br><br>
<!-- ODDĚLOVAČ 3: Magický -->
<div class="text-divider divider-magic"></div>
<br><br>
Text po oddělovači 3
<br><br>
<!-- ============================================ -->
<!-- VŠECHNY TŘI POD SEBOU PRO SROVNÁNÍ -->
<!-- ============================================ -->
<h4>Přehled všech stylů:</h4>
<br>
<p>1. Klasický styl:</p>
<div class="text-divider divider-classic"></div>
<br>
<p>2. RPG styl (meče):</p>
<div class="text-divider divider-rpg"></div>
<br>
<p>3. Magický styl (měsíc a hvězdy):</p>
<div class="text-divider divider-magic"></div>
<br><br>
<!-- KOMENT: nové tlačítko s rukama kostry -->
(t8n-depart: "dissolve") + (t8n-arrive: "dissolve")[<span class="burning">(text-colour:#1a1f13)[[[Pokračovat|Pouzitelna]]]</span>]
}{<html lang="cs">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Soubojová scéna</title>
<link href="https://fonts.googleapis.com/css2?family=Cinzel:wght@400;700&display=swap" rel="stylesheet">
<style>
body, html {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
overflow: hidden;
font-family: 'Cinzel', serif;
background: linear-gradient(135deg, #0a0a0a 0%, #1a0a0a 50%, #0a0a1a 100%);
}
/* Vignetace - Rohový, Tmavě Modrý Kontrast (Beze změny) */
#battle-vignette {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
pointer-events: none;
z-index: 2;
/* Kombinace čtyř radial-gradientů pro koncentraci v rozích */
background:
radial-gradient(circle at 10% 10%, transparent 40%, rgba(0, 0, 80, 0.9) 80%, rgba(0, 0, 0, 1) 100%), /* Horní levý */
radial-gradient(circle at 90% 10%, transparent 40%, rgba(0, 0, 80, 0.9) 80%, rgba(0, 0, 0, 1) 100%), /* Horní pravý */
radial-gradient(circle at 10% 90%, transparent 40%, rgba(0, 0, 80, 0.9) 80%, rgba(0, 0, 0, 1) 100%), /* Spodní levý */
radial-gradient(circle at 90% 90%, transparent 40%, rgba(0, 0, 80, 0.9) 80%, rgba(0, 0, 0, 1) 100%); /* Spodní pravý */
/* Klíčové: Opakování gradientu, aby se efekty překrývaly a byly tmavé */
background-repeat: no-repeat;
background-blend-mode: multiply; /* Pomáhá zvýšit tmavost, kde se gradienty překrývají */
animation: vignette-pulse 4s ease-in-out infinite;
}
#dust-container {
position: fixed;
top: 0;
left: -1500px;
width: calc(100% + 1500px);
height: 100%;
pointer-events: none;
z-index: 3;
overflow: hidden;
/* ODSTRANĚNO: Transform už není potřeba, posun je řešen pomocí 'left' */
/* transform: translateX(-500px); */
}
#dust-layer {
position: absolute;
width: 100%;
height: 100%;
opacity: 0.5;
}
/* ÚPRAVA: Tvar částeček na šikmé čáry a rotace o 30deg (více ležící) */
.dust-particle {
position: absolute;
top: -10vh;
color: rgba(180, 180, 180, 0.7);
font-size: 0.1em;
width: 2px;
height: 35px; /* Ponecháno na 35px */
background-color: currentColor;
transform-origin: bottom center;
/* ZMĚNA 1: Nový úhel */
transform: rotate(-45deg);
animation-name: dustfall;
animation-timing-function: linear;
animation-iteration-count: infinite;
text-shadow: 0 0 2px rgba(180, 180, 180, 0.3);
pointer-events: none;
}
/* Čárečky různých velikostí */
.dust-particle-medium {
height: 20px;
color: rgba(160, 160, 160, 0.6);
}
.dust-particle-large {
height: 25px;
color: rgba(140, 140, 140, 0.5);
}
@keyframes vignette-pulse {
0%, 100% {
opacity: 0.8;
}
50% {
opacity: 1;
}
}
/* ÚPRAVA: Směr animace pro -30 stupňů (dolů a doprava, méně strmě) */
@keyframes dustfall {
0% {
/* ZMĚNA 2: Start s novým úhlem */
transform: translateY(-10vh) translateX(0) rotate(-45deg);
opacity: 0;
}
10% {
opacity: 1;
}
90% {
opacity: 1;
}
100% {
/* ZMĚNA 3: Konec s novým úhlem */
transform: translateY(110vh) translateX(100vw) rotate(-75deg);
opacity: 0;
}
}
</style>
</head>
<body>
<div id="battle-vignette"></div>
<div id="dust-container">
<div id="dust-layer">
<div class="dust-particle" style="left: 10%; animation-delay: 0s; animation-duration: 5s;"></div>
<div class="dust-particle" style="left: 20%; animation-delay: 1s; animation-duration: 6s;"></div>
<div class="dust-particle" style="left: 30%; animation-delay: 2s; animation-duration: 5.5s;"></div>
<div class="dust-particle" style="left: 40%; animation-delay: 0.5s; animation-duration: 6.5s;"></div>
<div class="dust-particle" style="left: 50%; animation-delay: 1.5s; animation-duration: 5.8s;"></div>
<div class="dust-particle" style="left: 60%; animation-delay: 2.5s; animation-duration: 6.8s;"></div>
<div class="dust-particle" style="left: 70%; animation-delay: 0.8s; animation-duration: 6s;"></div>
<div class="dust-particle" style="left: 80%; animation-delay: 1.8s; animation-duration: 7s;"></div>
<div class="dust-particle" style="left: 90%; animation-delay: 2.8s; animation-duration: 5.2s;"></div>
<div class="dust-particle" style="left: 5%; animation-delay: 0.3s; animation-duration: 6.3s;"></div>
<div class="dust-particle" style="left: 15%; animation-delay: 1.3s; animation-duration: 5.3s;"></div>
<div class="dust-particle" style="left: 25%; animation-delay: 2.3s; animation-duration: 6.9s;"></div>
<div class="dust-particle" style="left: 35%; animation-delay: 0.6s; animation-duration: 5.6s;"></div>
<div class="dust-particle" style="left: 45%; animation-delay: 1.6s; animation-duration: 6.6s;"></div>
<div class="dust-particle" style="left: 55%; animation-delay: 2.6s; animation-duration: 5.9s;"></div>
<div class="dust-particle" style="left: 65%; animation-delay: 0.9s; animation-duration: 7s;"></div>
<div class="dust-particle" style="left: 75%; animation-delay: 1.9s; animation-duration: 5s;"></div>
<div class="dust-particle" style="left: 85%; animation-delay: 2.9s; animation-duration: 6s;"></div>
<div class="dust-particle" style="left: 95%; animation-delay: 0.4s; animation-duration: 5.4s;"></div>
<div class="dust-particle" style="left: 12%; animation-delay: 1.4s; animation-duration: 7s;"></div>
<div class="dust-particle" style="left: 22%; animation-delay: 2.4s; animation-duration: 5.1s;"></div>
<div class="dust-particle" style="left: 32%; animation-delay: 0.7s; animation-duration: 6.7s;"></div>
<div class="dust-particle" style="left: 42%; animation-delay: 1.7s; animation-duration: 5.7s;"></div>
<div class="dust-particle" style="left: 52%; animation-delay: 2.7s; animation-duration: 7s;"></div>
<div class="dust-particle" style="left: 62%; animation-delay: 0.2s; animation-duration: 5.2s;"></div>
<div class="dust-particle" style="left: 72%; animation-delay: 1.2s; animation-duration: 6.2s;"></div>
<div class="dust-particle" style="left: 82%; animation-delay: 2.2s; animation-duration: 5.9s;"></div>
<div class="dust-particle" style="left: 92%; animation-delay: 0.1s; animation-duration: 6.2s;"></div>
<div class="dust-particle" style="left: 8%; animation-delay: 1.1s; animation-duration: 5.1s;"></div>
<div class="dust-particle" style="left: 18%; animation-delay: 2.1s; animation-duration: 6.1s;"></div>
<div class="dust-particle" style="left: 28%; animation-delay: 0.9s; animation-duration: 5.5s;"></div>
<div class="dust-particle dust-particle-medium" style="left: 8%; animation-delay: 0.2s; animation-duration: 7s;"></div>
<div class="dust-particle dust-particle-medium" style="left: 22%; animation-delay: 1.2s; animation-duration: 8s;"></div>
<div class="dust-particle dust-particle-medium" style="left: 38%; animation-delay: 2.2s; animation-duration: 7.5s;"></div>
<div class="dust-particle dust-particle-medium" style="left: 52%; animation-delay: 0.7s; animation-duration: 8s;"></div>
<div class="dust-particle dust-particle-medium" style="left: 68%; animation-delay: 1.7s; animation-duration: 7.8s;"></div>
<div class="dust-particle dust-particle-medium" style="left: 82%; animation-delay: 2.7s; animation-duration: 7.5s;"></div>
<div class="dust-particle dust-particle-medium" style="left: 92%; animation-delay: 0.1s; animation-duration: 7.2s;"></div>
<div class="dust-particle dust-particle-medium" style="left: 18%; animation-delay: 1.1s; animation-duration: 7.4s;"></div>
<div class="dust-particle dust-particle-medium" style="left: 42%; animation-delay: 2.1s; animation-duration: 7.9s;"></div>
<div class="dust-particle dust-particle-medium" style="left: 58%; animation-delay: 0.9s; animation-duration: 7.1s;"></div>
<div class="dust-particle dust-particle-medium" style="left: 26%; animation-delay: 1.6s; animation-duration: 7.3s;"></div>
<div class="dust-particle dust-particle-medium" style="left: 74%; animation-delay: 2.6s; animation-duration: 7.6s;"></div>
<div class="dust-particle dust-particle-large" style="left: 14%; animation-delay: 0.5s; animation-duration: 10s;"></div>
<div class="dust-particle dust-particle-large" style="left: 32%; animation-delay: 1.5s; animation-duration: 9s;"></div>
<div class="dust-particle dust-particle-large" style="left: 48%; animation-delay: 2.5s; animation-duration: 11s;"></div>
<div class="dust-particle dust-particle-large" style="left: 64%; animation-delay: 0.8s; animation-duration: 9.5s;"></div>
<div class="dust-particle dust-particle-large" style="left: 78%; animation-delay: 1.8s; animation-duration: 10.5s;"></div>
<div class="dust-particle dust-particle-large" style="left: 88%; animation-delay: 2.8s; animation-duration: 9.2s;"></div>
<div class="dust-particle dust-particle-large" style="left: 36%; animation-delay: 1.3s; animation-duration: 9.8s;"></div>
<div class="dust-particle dust-particle-large" style="left: 56%; animation-delay: 2.3s; animation-duration: 10.3s;"></div>
</div>
</div>
</body>
</html>}{
(display: "DragonAnimation")
(display: "DeathSnowAnimation")
<h4>Prohra</h4>
<div class="text-divider divider-rpg"></div>
<!-- Spusť hudbu pro outro -->
(print: "<script>
changeMusic('https://files.catbox.moe/ac7hh8.ogg', 0.5);
</script>")
<!-- ⭐ DEBUG DIV S PORTRAIT URL PRO HRÁČE -->
<div style="display:none;" id="debug-portrait-url-outro">(print: $portraitURL)</div>
<style>
/* OUTRO ZOOM OBRÁZEK - ODZOOMUJE */
.outro-zoom-image {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-image: url('https://files.catbox.moe/w6jqq0.jpg');
background-size: cover;
background-position: center;
z-index: 9999;
opacity: 1;
transform: scale(1.8);
animation: zoomOutAndFade 4.5s ease-out 0.8s forwards;
pointer-events: none;
}
@keyframes zoomOutAndFade {
0% { transform: scale(1.8); opacity: 1; }
70% { transform: scale(1); opacity: 1; }
100% { transform: scale(1); opacity: 0; }
}
/* PORTRÉTY - VIDITELNÉ HNED, POZDĚJI ODJÍŽDÍ */
.outro-portrait {
position: fixed;
width: 300px;
height: 400px;
background-size: cover;
background-position: center;
border: 4px solid #d1b66b;
box-shadow: 0 0 30px rgba(209, 182, 107, 0.5);
opacity: 1;
animation-duration: 1.5s;
animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
animation-fill-mode: forwards;
top: 50%;
transform: translateY(-50%);
z-index: 10000;
}
.outro-portrait-player {
right: calc(50% + 80px);
}
.outro-portrait-teacher {
left: calc(50% + 80px);
background-image: url('https://files.catbox.moe/ouajvi.jpg');
}
/* Animace odjezdu - spustí se po 3 sekundách */
.outro-portrait-player.slide-out {
animation-name: slideOutRight;
animation-delay: 3s;
}
.outro-portrait-teacher.slide-out {
animation-name: slideOutLeft;
animation-delay: 3s;
}
@keyframes slideOutRight {
0% { right: calc(50% + 80px); opacity: 1; }
100% { right: -350px; opacity: 0; }
}
@keyframes slideOutLeft {
0% { left: calc(50% + 80px); opacity: 1; }
100% { left: -350px; opacity: 0; }
}
/* ⭐ LEBKA - ZÁKLADNÍ STYL ⭐ */
.skull-overlay {
position: fixed;
top: 50%;
width: 400px;
height: 400px;
background-image: url('https://files.catbox.moe/5ntk8n.png');
background-size: contain;
background-position: center;
background-repeat: no-repeat;
opacity: 1;
z-index: 10001;
filter: drop-shadow(0 0 20px rgba(255, 0, 0, 0.6));
transform: translateY(-50%) scale(1);
}
/* ⭐ LEBKA NA HRÁČI (VPRAVO) - SMAŽ TENTO BLOK PRO SKRYTÍ ⭐ */
#playerSkull {
right: calc(50% - 200px);
top: calc(50% - 50px);
}
/* ⭐ LEBKA NA UČITELI (VLEVO) - SMAŽ TENTO BLOK PRO SKRYTÍ ⭐ */
#teacherSkull {
left: calc(50% - 200px);
top: calc(50% - 50px);
display: none; /* smaž TENTO ŘÁDEK PRO zobrazení LEBKY NA UČITELI */
}
/* JMÉNA POD PORTRÉTY */
.outro-character-name {
position: absolute;
bottom: -60px;
width: 100%;
text-align: center;
color: #d1b66b;
font-size: 24px;
font-weight: bold;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);
font-family: 'Cinzel Decorative', serif;
opacity: 1;
}
/* ⭐ PŘEŠKRTNUTÉ JMÉNO HRÁČE - SMAŽ PRO NORMÁLNÍ JMÉNO ⭐ */
#outroPlayerName.defeated {
color: #8b0000;
text-decoration: line-through;
/* display: none; */ /* ODKOMENTUJ PRO SKRYTÍ JMÉNA */
}
/* KONTEJNER PRO NORMÁLNÍ OBSAH - SKRYTÝ BĚHEM OUTRA */
.main-content-hidden {
opacity: 0;
pointer-events: none;
transition: opacity 0.5s ease-in;
}
.main-content-visible {
opacity: 1;
pointer-events: auto;
}
</style>
<div class="outro-zoom-image" id="outroZoom"></div>
<div class="outro-animation-container" id="outroContainer">
<div class="outro-portrait outro-portrait-player slide-out" id="outroPlayerPortrait">
<div class="skull-overlay" id="playerSkull"></div>
<div class="outro-character-name" id="outroPlayerName">(print: $vybranaPostava)</div>
</div>
<div class="outro-portrait outro-portrait-teacher slide-out">
<div class="skull-overlay" id="teacherSkull"></div>
<div class="outro-character-name" id="outroTeacherName">Trenér</div>
</div>
</div>
<!-- NORMÁLNÍ OBSAH PASÁŽE - ZOBRAZÍ SE PO OUTRU -->
<div id="mainContent" class="main-content-hidden">
(align:"=><=")+(box:"X")[
(display: "zpet")
(display: "HodHUD")]
|prologText>[
<div style="background: linear-gradient(135deg, rgba(42,24,16,0.2) 0%, rgba(26,15,8,0.2) 100%); border: 3px solid rgba(139,105,20,0.2); border-radius: 2px; padding: 30px; margin: 30px auto; max-width: 700px; box-shadow: 0 8px 20px rgba(0,0,0,0.2);">
Drtihlavka dopadla tvrdě. "Do prdele, to bolí!"]
</div>
(set: $skillCheckRolled to false)
(set: $skillCheckResult to "")
(set: $roll to 0)
(set: $celkemHod to 0)
(set: $zakladniObtiznost to 5)
(set: $minSuccessRoll to (max: 2, $zakladniObtiznost - $umeni))
<div style="margin-bottom: 1px; padding: 1px; background: rgba(0,0,0,0.); border: 2px solid rgba(139, 105, 20, 0.2); border-radius: 2px; font-size: 0.9em;">
<div class="result-panel">
|storyText>[]
</div>
(if: not $skillCheckRolled)[
<h4 class="burning">
<div class="floating-button-wrapper">
|attackButton>[
(link: "(text-colour:#080a08)[Prohmatat bolavou ruku(text-colour:#666654)[ (Umění $umeni)]]")[
(set: _freshRoll to (random: 1, 6))
(set: $roll to _freshRoll)
(set: $celkemHod to $roll + $umeni)
(set: $skillCheckRolled to true)
(replace: ?prologText)[]
</div>
</h4>
<script>
var diceSound = new Audio('https://files.catbox.moe/oamu5w.ogg');
diceSound.volume = 0.6;
diceSound.play().catch(function(e) {
console.log('Audio playback failed:', e);
});
</script>
(replace: ?attackButton)[]
(replace: ?diceDisplay)[
<div class="dice-fall-animation-wrapper">
<div class="dice-rolling">
<img src="https://files.catbox.moe/a843tu.png" class="dice-image dice-fall">
</div>
</div>
]
(live: 0.6s)[
(stop:)
<script>
var resultSound = new Audio('https://files.catbox.moe/98jtvb.ogg');
resultSound.volume = 0.7;
resultSound.play().catch(function(e) {
console.log('Result sound failed:', e);
});
</script>
(replace: ?diceDisplay)[
<div style="margin-top: -100px;">
(if: $roll is 1)[
<img src="https://files.catbox.moe/a843tu.png" class="dice-image">
](else-if: $roll is 2)[
<img src="https://files.catbox.moe/laokqg.png" class="dice-image">
](else-if: $roll is 3)[
<img src="https://files.catbox.moe/9ubppy.png" class="dice-image">
](else-if: $roll is 4)[
<img src="https://files.catbox.moe/zp7fb4.png" class="dice-image">
](else-if: $roll is 5)[
<img src="https://files.catbox.moe/vqfqru.png" class="dice-image">
](else-if: $roll is 6)[
<img src="https://files.catbox.moe/hi7w7n.png" class="dice-image">
]
**<div class="dice-number-white-small">$roll(if: $umeni > 0)[+$umeni] = $celkemHod</div>**
</div>
]
(if: $celkemHod < $minSuccessRoll)[
(set: $skillCheckResult to "NEÚSPĚCH")
(set: $trait1 to true)
(replace: ?resultBox)[]
(replace: ?storyText)[
<div class="result-box">
[(text-colour:#6e4447)[(NEÚSPĚCH):] "Kurva ta sedla"<br>[[Koukni na učitele|Ucitel reci]]]
</div>
]
](else:)[
(set: $skillCheckResult to "ÚSPĚCH")
(replace: ?resultBox)[]
(replace: ?storyText)[
<div class="result-box">
[(text-colour:#334731)[(ÚSPĚCH):] "To bylo štígro, jen mě lehce zasáhl ruku"<br>[[Koukni na učitele|Ucitel reci]]]
</div>
]
]
]
]
]
</div>
<div class="dice-player-box">
|diceDisplay>[
(if: not $skillCheckRolled)[
]
]
</div>
</div>
|resultBox>[]
]
</div>
<script>
(function() {
var attempts = 0;
var maxAttempts = 30;
function loadOutroPortraits() {
attempts++;
var debugDiv = document.getElementById('debug-portrait-url-outro');
var playerURL = '';
if (debugDiv && debugDiv.textContent.trim() !== '') {
playerURL = debugDiv.textContent.trim();
} else if (typeof State !== 'undefined' && State.variables && State.variables.portraitURL) {
playerURL = State.variables.portraitURL;
}
if (!playerURL || playerURL === '' || playerURL.length < 10) {
if (attempts < maxAttempts) {
setTimeout(loadOutroPortraits, 100);
return;
} else {
playerURL = 'https://files.catbox.moe/hs2gd7.jpg';
}
}
var playerPortrait = document.getElementById('outroPlayerPortrait');
if (playerPortrait) {
playerPortrait.style.backgroundImage = "url('" + playerURL + "')";
} else if (attempts < maxAttempts) {
setTimeout(loadOutroPortraits, 100);
return;
}
var nameDiv = document.getElementById('outroPlayerName');
if (nameDiv && typeof State !== 'undefined' && State.variables && State.variables.vybranaPostava) {
nameDiv.textContent = State.variables.vybranaPostava;
}
// ⭐ Přidej nebo odeber třídu .defeated pro přeškrtnutí jména ⭐
// Pro přeškrtnutí jména hráče odkomentuj následující řádek:
document.getElementById('outroPlayerName').classList.add('defeated');
// Pro přeškrtnutí jména učitele odkomentuj následující řádek:
document.getElementById('outroTeacherName').classList.add('defeated');
}
// Odstranění outro zoom
setTimeout(function() {
var outroZoom = document.getElementById('outroZoom');
if (outroZoom) outroZoom.remove();
}, 5300);
// Odstranění portrétů a zobrazení hlavního obsahu
setTimeout(function() {
var outroContainer = document.getElementById('outroContainer');
if (outroContainer) outroContainer.remove();
var mainContent = document.getElementById('mainContent');
if (mainContent) {
mainContent.classList.remove('main-content-hidden');
mainContent.classList.add('main-content-visible');
}
}, 5500);
setTimeout(loadOutroPortraits, 200);
})();
</script>
<style>
.floating-button-wrapper {
z-index: 1000;
margin: -20px auto;
text-align: center;
}
.dice-fall-animation-wrapper {
margin-top: -10px;
}
.skill-check-layout {
display: flex;
gap: 10px;
align-items: flex-start;
margin: 1px 0;
flex-wrap: nowrap;
}
.dice-player-box {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 1px;
text-align: center;
opacity: 1;
}
.scene-card {
position: relative;
background: linear-gradient(135deg, rgba(0, 0, 0, 0.0), rgba(42, 24, 16, 0.0));
border: 3px solid rgba(0, 0, 11, 0.05);
border-radius: 2px;
padding: 0px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.0);
flex: 0 0 45%;
opacity: 1.4;
}
.result-panel {
flex: 1;
min-height: 35px;
}
.dice-image {
width: 150px;
height: 150px;
margin: -5px auto;
display: block;
}
.dice-rolling {
animation: shake 0.08s infinite;
}
.dice-fall {
animation: fall 0.6s ease-out, spin 0.6s linear, shake 0.08s infinite;
transform-origin: center;
}
.dice-number-white-small {
color: #ffffff;
font-size: 1.3em;
text-align: center;
margin-top: -30px;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);
}
.result-box {
background: rgba(42, 24, 16, 0.0);
border: 2px solid rgba(139, 69, 19, 0.05);
border-radius: 2px;
padding: -5px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.0);
margin-top: -45px;
animation: expandFromButton 0.6s ease-out;
transform-origin: top left;
}
@keyframes expandFromButton {
0% {
transform: scale(0.1) translateX(-5px) translateY(-380px);
opacity: 0;
}
50% {
opacity: 0.5;
}
100% {
transform: scale(1) translateX(0) translateY(0);
opacity: 1;
}
}
@keyframes fall {
0% {
transform: translateY(-200px);
opacity: 0;
}
100% {
transform: translateY(0);
opacity: 1;
}
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(720deg); }
}
@keyframes shake {
0%, 100% { transform: translateX(0) translateY(0); }
25% { transform: translateX(-3px) translateY(3px); }
50% { transform: translateX(3px) translateY(-3px); }
75% { transform: translateX(-3px) translateY(-3px); }
}
@media (max-width: 768px) {
.skill-check-layout {
flex-direction: column;
}
.scene-card {
flex: 1 1 100%;
}
}
</style>
}{(align:"=><=")+(box:"X")[
(display: "DeathSnowAnimation")
(display: "HodHUD")
<h4>Prohra</h4>
<div class="text-divider divider-rpg"></div>
[
|prologText>[
<div style="background: linear-gradient(135deg, rgba(42,24,16,0.2) 0%, rgba(26,15,8,0.2) 100%); border: 3px solid rgba(139,105,20,0.2); border-radius: 2px; padding: 30px; margin: 30px auto; max-width: 700px; box-shadow: 0 8px 20px rgba(0,0,0,0.2);">
Drtihlavka tvrdě dopadla. "Do prdele snad mi nerozdrtila ruku!"]
</div>
(set: $skillCheckRolled to false)
(set: $skillCheckResult to "")
(set: $roll to 0)
(set: $celkemHod to 0)
(set: $zakladniObtiznost to 5)
(set: $minSuccessRoll to (max: 2, $zakladniObtiznost - $umeni))
<div style="margin-bottom: 1px; padding: 1px; background: rgba(0,0,0,0.); border: 2px solid rgba(139, 105, 20, 0.2); border-radius: 2px; font-size: 0.9em;">
<div class="result-panel">
|storyText>[]
</div>
<!-- ABSOLUTNĚ POZICOVANÉ TLAČÍTKO -->
(if: not $skillCheckRolled)[
<h4 class="burning">
<div class="floating-button-wrapper">
|attackButton>[
(link: "(text-colour:#080a08)[Prohmatat bolavou ruku(text-colour:#666654)[ (Umění $umeni)]]")[
(set: _freshRoll to (random: 1, 6))
(set: $roll to _freshRoll)
(set: $celkemHod to $roll + $umeni)
(set: $skillCheckRolled to true)
(replace: ?prologText)[]
</div>
</h4>
<!-- PŘEHRAJ ZVUK HNED -->
<script>
var diceSound = new Audio('https://files.catbox.moe/oamu5w.ogg');
diceSound.volume = 0.6; // Hlasitost 60%
diceSound.play().catch(function(e) {
console.log('Audio playback failed:', e);
});
</script>
(replace: ?attackButton)[]
(replace: ?diceDisplay)[
<div class="dice-fall-animation-wrapper">
<div class="dice-rolling">
<img src="https://files.catbox.moe/a843tu.png" class="dice-image dice-fall">
</div>
</div>
]
(live: 0.6s)[
(stop:)
<!-- PŘEHRAJ ZVUK PRO RESULT BOX -->
<script>
var resultSound = new Audio('https://files.catbox.moe/98jtvb.ogg');
resultSound.volume = 0.7;
resultSound.play().catch(function(e) {
console.log('Result sound failed:', e);
});
</script>
(replace: ?diceDisplay)[
<div style="margin-top: -100px;">
(if: $roll is 1)[
<img src="https://files.catbox.moe/a843tu.png" class="dice-image">
](else-if: $roll is 2)[
<img src="https://files.catbox.moe/laokqg.png" class="dice-image">
](else-if: $roll is 3)[
<img src="https://files.catbox.moe/9ubppy.png" class="dice-image">
](else-if: $roll is 4)[
<img src="https://files.catbox.moe/zp7fb4.png" class="dice-image">
](else-if: $roll is 5)[
<img src="https://files.catbox.moe/vqfqru.png" class="dice-image">
](else-if: $roll is 6)[
<img src="https://files.catbox.moe/hi7w7n.png" class="dice-image">
]
**<div class="dice-number-white-small">$roll(if: $umeni > 0)[+$umeni] = $celkemHod</div>**
</div>
]
(if: $celkemHod < $minSuccessRoll)[
(set: $skillCheckResult to "NEÚSPĚCH")
(set: $trait1 to true)
(replace: ?resultBox)[]
(replace: ?storyText)[
<div class="result-box">
[(text-colour:#6e4447)[(NEÚSPĚCH):] "Kurva ta sedla"<br>[[Koukni na učitele|Pytlak reci]]]
</div>
]
](else:)[
(set: $skillCheckResult to "ÚSPĚCH")
(replace: ?resultBox)[]
(replace: ?storyText)[
<div class="result-box">
[(text-colour:#334731)[(ÚSPĚCH):] "To bylo štígro, ruka je celá, ale bolí jak čert"<br>[[Koukni na učitele|Pytlak reci]]]
</div>
]
]
]
]
]
</div>
<div class="dice-player-box">
|diceDisplay>[
(if: not $skillCheckRolled)[
]
]
</div>
</div>
]
|resultBox>[]
]
<style>
.floating-button-wrapper {
z-index: 1000;
margin: -20px auto;
text-align: center;
}
}
/* NOVÁ TŘÍDA PRO POSUN ANIMACE NAHORU */
.dice-fall-animation-wrapper {
margin-top: -10px;
}
.skill-check-layout {
display: flex;
gap: 10px;
align-items: flex-start;
margin: 1px 0;
flex-wrap: nowrap;
}
.dice-player-box {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 1px;
text-align: center;
opacity: 1;
}
.scene-card {
position: relative;
background: linear-gradient(135deg, rgba(0, 0, 0, 0.0), rgba(42, 24, 16, 0.0));
border: 3px solid rgba(0, 0, 11, 0.05);
border-radius: 2px;
padding: 0px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.0);
flex: 0 0 45%;
opacity: 1.4;
}
.result-panel {
flex: 1;
min-height: 35px;
}
.dice-image {
width: 150px;
height: 150px;
margin: -5px auto;
display: block;
}
.dice-rolling {
animation: shake 0.08s infinite;
}
.dice-fall {
animation: fall 0.6s ease-out, spin 0.6s linear, shake 0.08s infinite;
transform-origin: center;
}
.dice-number-white-small {
color: #ffffff;
font-size: 1.3em;
text-align: center;
margin-top: -30px;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);
}
.result-box {
background: rgba(42, 24, 16, 0.0);
border: 2px solid rgba(139, 69, 19, 0.05);
border-radius: 2px;
padding: -5px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.0);
margin-top: -45px;
/* Animace rozbalení zleva shora */
animation: expandFromButton 0.6s ease-out;
transform-origin: top left;
}
@keyframes expandFromButton {
0% {
transform: scale(0.1) translateX(-5px) translateY(-380px);
opacity: 0;
}
50% {
opacity: 0.5;
}
100% {
transform: scale(1) translateX(0) translateY(0);
opacity: 1;
}
}
@keyframes fall {
0% {
transform: translateY(-200px);
opacity: 0;
}
100% {
transform: translateY(0);
opacity: 1;
}
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(720deg); }
}
@keyframes shake {
0%, 100% { transform: translateX(0) translateY(0); }
25% { transform: translateX(-3px) translateY(3px); }
50% { transform: translateX(3px) translateY(-3px); }
75% { transform: translateX(-3px) translateY(-3px); }
}
@media (max-width: 768px) {
.skill-check-layout {
flex-direction: column;
}
.scene-card {
flex: 1 1 100%;
}
}
</style>]}{<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- DODGE KARTA - NEGUJE POUZE PRÁVĚ ZAHRANOU KARTU (NE ZBRAŇ NA STOLE!) -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- ⭐ KONTROLA: Zahrál hráč kartu "Úhyb"? -->
(if: $playerCard is not 0)[
(if: $playerCard contains "name")[
(if: $playerCard's name is "Úhyb")[
<!-- 🎯 SPOČÍTEJ KOLIK DMG BY UDĚLALA PRÁVĚ ZAHRANÁ KARTA (ne zbraň!) -->
(set: _dodgedDamage to 0)
(if: $enemyCard contains "levels")[
<!-- Karta s levely (Drtihlavka atd.) -->
(if: $enemyWeaponLevel > 0 and $enemyWeaponLevel <= ($enemyCard's levels's length))[
(set: _currentEnemyLevel to $enemyCard's levels's ($enemyWeaponLevel))
(set: _dodgedDamage to (random: _currentEnemyLevel's minAttack, _currentEnemyLevel's maxAttack))
]
](else-if: $enemyCard contains "attack")[
<!-- Normální karta -->
(set: _dodgedDamage to $enemyCard's attack)
]
<!-- ⚡ NASTAV ENEMY KARTU NA NULU (negace) -->
(set: $enemyCard to (dm:
"name", "Zrušeno (" + $enemyCard's name + ")",
"attack", 0,
"defense", 0,
"minAttack", 0,
"maxAttack", 0,
"type", "negated",
"cost", 0,
"image", ""
))
<!-- 📢 LOG MESSAGE -->
(set: $dodgeMsg to "<span class='combat-dodge'>Úhyb! vyhnul jsi se.</span>")
(set: $combatLog to it + (a: $dodgeMsg))
<!-- ⚠️ DŮLEŽITÉ: ZBRAŇ NA STOLE STÁLE FUNGUJE! -->
<!-- $enemyWeaponDamage se NEPŘEPISUJE → damage ze zbraně PROJDE -->
]
]
]
<style>
/* 💨 DODGE KARTA - STYLING */
.combat-dodge {
color: #00d4ff;
font-weight: bold;
text-shadow: 0 0 15px rgba(0, 212, 255, 0.9);
font-size: 1.2em;
}
.dodge-card {
background: linear-gradient(135deg, rgba(0, 100, 200, 0.3), rgba(0, 200, 255, 0.4)) !important;
border-color: rgba(0, 212, 255, 0.8) !important;
}
</style>}<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- ⚔️ double slash handler, WEAPON SYNERGY - BONUSY PRO KARTY S AKTIVNÍ ZBRANÍ -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- ⚔️ DVOJITÝ SEK - BONUS K ÚTOKU -->
(if: $playerCard's name is "Dvojitý sek")[
<!-- Kontrola: Má hráč aktivní zbraň? -->
(if: $weaponName is not "" and $weaponName is not 0)[
<!-- ✅ ZBRAŇ AKTIVNÍ - přidej +3 k útoku -->
(set: $playerCard to $playerCard + (dm: "attack", ($playerCard's attack + 3)))
(set: $doubleSlashMsg to "<span class='combat-weapon-synergy'>Dvojitý sek posílen aktivní zbraní! (+3 útok)</span>")
(set: $combatLog to it + (a: $doubleSlashMsg))
]
]
<!-- 🛡️ KRYTÝ ÚTOK - BONUS K OBRANĚ -->
(if: $playerCard's name is "Krytý útok")[
<!-- Kontrola: Má hráč aktivní zbraň? -->
(if: $weaponName is not "" and $weaponName is not 0)[
<!-- ✅ ZBRAŇ AKTIVNÍ - přidej +2 k obraně -->
(set: $playerCard to $playerCard + (dm: "defense", ($playerCard's defense + 2)))
(set: $guardedAttackMsg to "<span class='combat-weapon-synergy-defense'>Krytý útok posílen aktivní zbraní! (+2 obrana)</span>")
(set: $combatLog to it + (a: $guardedAttackMsg))
]
]
<style>
/* ═══════════════════════════════════════════════════ */
/* ⚔️ WEAPON SYNERGY STYLING */
/* ═══════════════════════════════════════════════════ */
/* 🃏 BALANCED CARD - pro Krytý útok */
.balanced-card {
background: linear-gradient(135deg,
rgba(100, 150, 200, 0.2),
rgba(255, 165, 0, 0.2)) !important;
border-color: rgba(150, 150, 150, 0.8) !important;
box-shadow:
0 0 15px rgba(100, 150, 200, 0.4),
0 0 15px rgba(255, 165, 0, 0.4);
}
.balanced-card::before,
.balanced-card::after {
border-color: #96c8fa !important;
box-shadow:
inset 0 0 8px rgba(100, 150, 200, 0.5),
inset 0 0 8px rgba(255, 165, 0, 0.3) !important;
}
</style><!-- PASSAGE: DragAndDrop -->
<!-- Použití: (display: "DragAndDrop") -->
{
<script>
(function() {
setTimeout(function() {
console.log('🎴 Inicializuji Drag & Drop systém...');
// NEJDŘÍV ODSTRAŇ VŠECHNY STARÉ DROP ZÓNY
var oldZones = document.querySelectorAll('.card-drop-zone');
oldZones.forEach(function(zone) {
zone.remove();
});
console.log('🗑️ Odstraněno', oldZones.length, 'starých zón');
// Najdi všechny hratelné karty
var playableCards = document.querySelectorAll('.hand .card.playable');
// VYTVOŘ JEDNU NOVOU DROP ZÓNU
var dropZone = document.createElement('div');
dropZone.className = 'card-drop-zone';
dropZone.innerHTML = '<div class="drop-zone-text">⬇ Přetáhni kartu sem ⬇</div>';
var battleContainer = document.querySelector('.battle-container');
if (battleContainer) {
battleContainer.appendChild(dropZone);
}
console.log('✅ Drop zóna vytvořena');
console.log('✅ Nalezeno', playableCards.length, 'hratelných karet');
playableCards.forEach(function(card) {
var cardWrapper = card.closest('.card-wrapper');
if (!cardWrapper) return;
// Udělej kartu draggable
cardWrapper.setAttribute('draggable', 'true');
cardWrapper.style.cursor = 'grab';
// DRAGSTART - začátek tažení
cardWrapper.addEventListener('dragstart', function(e) {
console.log('🎯 Začínám drag karty');
cardWrapper.classList.add('dragging');
cardWrapper.style.cursor = 'grabbing';
dropZone.classList.add('drop-zone-active');
// Uložíme název karty pro identifikaci
var cardName = card.querySelector('.card-name').textContent.trim();
e.dataTransfer.effectAllowed = 'move';
e.dataTransfer.setData('cardName', cardName);
// Vytvoř drag image (klon karty)
var dragImage = card.cloneNode(true);
dragImage.style.opacity = '0.8';
dragImage.style.transform = 'rotate(5deg)';
document.body.appendChild(dragImage);
e.dataTransfer.setDragImage(dragImage, 120, 150);
setTimeout(function() { dragImage.remove(); }, 0);
});
// DRAGEND - konec tažení
cardWrapper.addEventListener('dragend', function(e) {
console.log('🏁 Konec drag');
cardWrapper.classList.remove('dragging');
cardWrapper.style.cursor = 'grab';
dropZone.classList.remove('drop-zone-active');
});
});
// DROP ZONE události
dropZone.addEventListener('dragover', function(e) {
e.preventDefault();
e.dataTransfer.dropEffect = 'move';
dropZone.classList.add('drop-zone-hover');
});
dropZone.addEventListener('dragleave', function(e) {
dropZone.classList.remove('drop-zone-hover');
});
dropZone.addEventListener('drop', function(e) {
e.preventDefault();
console.log('💥 Karta dropnuta!');
dropZone.classList.remove('drop-zone-hover', 'drop-zone-active');
var cardName = e.dataTransfer.getData('cardName');
console.log('📛 Dropped card:', cardName);
// Najdi kartu podle jména a spusť kliknutí
playableCards.forEach(function(card) {
var name = card.querySelector('.card-name').textContent.trim();
if (name === cardName) {
var clickArea = card.querySelector('.card-click-area a, .card-click-area tw-link');
if (clickArea) {
console.log('🎯 Spouštím click na kartě:', cardName);
clickArea.click();
}
}
});
});
console.log('✅ Drag & Drop systém aktivní!');
}, 300); // Počkej na načtení karet
})();
</script>
<style>
/* 🎴 DRAG & DROP STYLY */
/* Karta při tažení */
.card-wrapper.dragging {
opacity: 0.5;
transform: scale(0.95);
transition: all 0.2s ease;
}
/* DROP ZÓNA - základní styl - FIXNÍ POZICE */
.card-drop-zone {
position: fixed;
top: 46%; /* 👈 POZICE SHORA (změň číslo pro posun) */
left: 50%; /* 👈 POZICE ZLEVA (50% = střed) */
transform: translate(-50%, -50%);
width: 600px;
height: 300px;
border: 3px dashed rgba(128, 128, 128, 0); /* 👈 NEVIDITELNÁ defaultně */
border-radius: 20px;
background: rgba(0, 0, 0, 0);
display: flex;
align-items: center;
justify-content: center;
z-index: 50;
pointer-events: none;
opacity: 0; /* 👈 SKRYTÁ */
transition: opacity 0.3s ease, border-color 0.3s ease;
}
/* DROP ZÓNA - aktivní (během tažení) - TEPRVE TEĎ SE ZOBRAZÍ */
.card-drop-zone.drop-zone-active {
opacity: 1; /* 👈 VIDITELNÁ */
border-color: rgba(128, 128, 128, 0.5); /* 👈 ŠEDÁ */
background: rgba(0, 0, 0, 0);
pointer-events: auto;
}
/* DROP ZÓNA - hover (karta nad zónou) */
.card-drop-zone.drop-zone-hover {
opacity: 1; /* 👈 VIDITELNÁ */
border-color: rgba(180, 180, 180, 0.7); /* 👈 SVĚTLEJŠÍ ŠEDÁ při hoveru */
background: rgba(0, 0, 0, 0);
}
@keyframes drop-zone-pulse {
/* VYPNUTO - žádná animace */
}
/* TEXT V DROP ZÓNĚ */
.drop-zone-text {
color: rgba(128, 128, 128, 0); /* 👈 SKRYTÝ TEXT defaultně */
font-size: 24px;
font-family: 'Cinzel', serif;
font-weight: bold;
text-shadow: none;
transition: all 0.3s ease;
}
.drop-zone-active .drop-zone-text {
color: rgba(128, 128, 128, 0.7); /* 👈 ŠEDÝ TEXT při tažení */
text-shadow: none;
}
.drop-zone-hover .drop-zone-text {
color: rgba(180, 180, 180, 0.9); /* 👈 SVĚTLEJŠÍ při hoveru */
text-shadow: none;
transform: scale(1.05);
}
/* KURZOR při tažení */
.card-wrapper[draggable="true"] {
cursor: grab !important;
}
.card-wrapper[draggable="true"]:active {
cursor: grabbing !important;
}
/* Pokud už máš .resolve-area, udělej z ní drop zónu */
.resolve-area {
position: relative;
}
/* VYPNUTO - žádný efekt na resolve-area */
.resolve-area.drop-zone-active::before {
display: none;
}
</style>
}{<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="UTF-8">
<title>Torch Scene - Final</title>
<style>
#torch-scene-container {
opacity: 1;
position: fixed;
bottom: 0;
left: 0;
right: 0;
width: 100%;
height: 80vh;
max-height: 500px;
z-index: 997;
pointer-events: none;
user-select: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
}
@keyframes fadeInSide {
from { opacity: 0; }
to { opacity: 0.8; }
}
/
/* Vignetace */
@keyframes vignette-pulse {
0%, 100% { opacity: 0.8; }
50% { opacity: 1; }
}
@keyframes corner-flicker {
0%, 100% { opacity: 0.3; }
25% { opacity: 0.6; }
50% { opacity: 0.4; }
75% { opacity: 0.7; }
}
#flame-canvas {
filter: blur(8px);
z-index: 998;
position: fixed;
top: 0; left: 0;
width: 100%; height: 100%;
pointer-events: none;
user-select: none;
-webkit-user-select: none;
}
</style>
</head>
<body style="background:#111; min-height:100vh;">
<canvas id="flame-canvas"></canvas>
<div id="torch-scene-container">
<!-- ===== LEVÝ OBRÁZEK ===== -->
<div style="position: absolute; left: 0; top: -150px; height: 150%; pointer-events: none;">
<img src="https://files.catbox.moe/tom22p.png"
style="height: 100%; width: auto; opacity: 1.5; animation: fadeInSide 1s ease-in-out; display: block; pointer-events: none;">
<div id="left-sparks" style="position: fixed; pointer-events: none;">
</div>
</div>
<!-- ===== PRAVÝ OBRÁZEK ===== -->
<div style="position: absolute; right: 0; top: -160px; height: 150%;">
<img src="https://files.catbox.moe/latjjc.png"
style="height: 100%; width: auto; opacity: 1.5; animation: fadeInSide 1s ease-in-out; display: block;">
<div id="right-sparks" style="position: fixed; pointer-events: none;">
</div>
</div>
</div>
<!-- Vignetace -->
<div id="fire-vignette" style="position: fixed; top: 0; left: 0; right: 0; bottom: 0; pointer-events: none; user-select: none; -webkit-user-select: none; z-index: 1;">
<div style="position: absolute; inset: 0; background: radial-gradient(ellipse at center, transparent 0%, transparent 30%, rgba(60,50,0,0.3) 60%, rgba(50,40,0,0.6) 100%); animation: vignette-pulse 4s ease-in-out infinite;"></div>
<div style="position: absolute; top: 0; left: 0; width: 40%; height: 40%; background: radial-gradient(ellipse at top left, rgba(255,215,0,0.15) 0%, transparent 50%); animation: corner-flicker 3s ease-in-out infinite;"></div>
<div style="position: absolute; top: 0; right: 0; width: 40%; height: 40%; background: radial-gradient(ellipse at top right, rgba(255,215,0,0.15) 0%, transparent 50%); animation: corner-flicker 3s ease-in-out infinite 0.5s;"></div>
<div style="position: absolute; bottom: 0; left: 0; width: 40%; height: 40%; background: radial-gradient(ellipse at bottom left, rgba(218,165,32,0.1) 0%, transparent 50%); animation: corner-flicker 3.5s ease-in-out infinite 1s;"></div>
<div style="position: absolute; bottom: 0; right: 0; width: 40%; height: 40%; background: radial-gradient(ellipse at bottom right, rgba(218,165,32,0.1) 0%, transparent 50%); animation: corner-flicker 3.5s ease-in-out infinite 1.5s;"></div>
</div>
<script>
(function () {
/* ── GUARD: spustit jen jednou per stránka ── */
if (window._dragonFlameRunning) return;
window._dragonFlameRunning = true;
const canvas = document.getElementById('flame-canvas');
if (!canvas) { window._dragonFlameRunning = false; return; }
const ctx = canvas.getContext('2d', { alpha: true, desynchronized: true });
let W = 0, H = 0;
function resize() {
W = canvas.width = window.innerWidth;
H = canvas.height = window.innerHeight;
cachePositions();
buildGradients();
}
window.addEventListener('resize', resize, { passive: true });
let leftX = 0, leftY = 0, rightX = 0, rightY = 0;
function cachePositions() {
leftX = W * 0.19;
leftY = H * 0.52;
rightX = W * 0.74;
rightY = H * 0.55;
const lEl = document.getElementById('left-sparks');
const rEl = document.getElementById('right-sparks');
if (lEl) { lEl.style.left = leftX + 'px'; lEl.style.top = leftY + 'px'; }
if (rEl) { rEl.style.left = rightX + 'px'; rEl.style.top = rightY + 'px'; }
}
/* Lookup tabulky */
const SEGS = 25;
const powWidth = new Float32Array(SEGS + 1);
const powAlpha = new Float32Array(SEGS + 1);
const powAmp = new Float32Array(SEGS + 1);
for (let i = 0; i <= SEGS; i++) {
const t = i / SEGS;
powWidth[i] = Math.pow(1 - t, 0.8);
powAlpha[i] = Math.pow(1 - t, 2.2);
powAmp[i] = Math.pow(t, 0.5);
}
const LAYERS = [
{ maxW: 80, baseAlpha: 0.20, r: 0, g: 140, b: 0 },
{ maxW: 12, baseAlpha: 0.92, r: 210, g: 255, b: 190 },
];
let glowGrdL = null, glowGrdR = null;
function buildGradients() {
const R = 70;
glowGrdL = ctx.createRadialGradient(leftX, leftY, 0, leftX, leftY, R);
glowGrdL.addColorStop(0, 'rgba(200,255,200,0.9)');
glowGrdL.addColorStop(0.4, 'rgba(0,255,0,0.2)');
glowGrdL.addColorStop(1, 'rgba(0,100,0,0)');
glowGrdR = ctx.createRadialGradient(rightX, rightY, 0, rightX, rightY, R);
glowGrdR.addColorStop(0, 'rgba(200,255,200,0.9)');
glowGrdR.addColorStop(0.4, 'rgba(0,255,0,0.25)');
glowGrdR.addColorStop(1, 'rgba(0,100,0,0)');
}
const W1F = 0.020, W1S = 2.8;
const W2F = 0.038, W2S = 4.4;
const W3F = 0.060, W3S = 6.2;
const ptsX = new Float32Array(SEGS + 1);
const ptsY = new Float32Array(SEGS + 1);
function drawFlame(ox, oy, dir, t, glowGrd, reverseWave) {
const streamLen = W * 0.27;
const segW = streamLen / SEGS;
const mirror = dir === -1 ? -1 : 1;
for (let i = 0; i <= SEGS; i++) {
const dist = i * segW;
const phase = dir * dist;
const timeDir = reverseWave ? 1 : -1;
const amp = powAmp[i];
ptsX[i] = ox + dir * dist;
ptsY[i] = oy
+ mirror * Math.sin(phase * W1F + timeDir * t * W1S) * (32 * amp)
+ mirror * Math.sin(phase * W2F + timeDir * t * W2S + 1.2) * (16 * amp)
+ mirror * Math.sin(phase * W3F + timeDir * t * W3S + 2.5) * (8 * amp);
}
ctx.lineCap = 'round';
ctx.lineJoin = 'round';
for (let li = 0; li < LAYERS.length; li++) {
const layer = LAYERS[li];
for (let i = 0; i < SEGS; i++) {
const lw = layer.maxW * powWidth[i];
if (lw < 0.3) continue;
const alpha = layer.baseAlpha * powAlpha[i];
if (alpha < 0.005) continue;
ctx.lineWidth = lw;
ctx.strokeStyle = `rgba(${layer.r},${layer.g},${layer.b},${alpha.toFixed(2)})`;
ctx.beginPath();
ctx.moveTo(ptsX[i], ptsY[i]);
ctx.lineTo(ptsX[i + 1], ptsY[i + 1]);
ctx.stroke();
}
}
ctx.globalAlpha = 0.7 + 0.3 * Math.sin(t * 19 + dir * 3);
ctx.fillStyle = glowGrd;
ctx.beginPath();
ctx.arc(ox, oy, 50, 0, 6.2832);
ctx.fill();
ctx.globalAlpha = 1;
}
/* Animační smyčka */
let t = 0;
let lastTime = 0;
const FPS = 30;
const STEP = 1000 / FPS;
function animate(now) {
/* ── GUARD: zastav smyčku pokud canvas už není v DOM ── */
if (!document.getElementById('flame-canvas')) {
window._dragonFlameRunning = false;
return;
}
requestAnimationFrame(animate);
if (now - lastTime < STEP) return;
lastTime = now;
ctx.clearRect(0, 0, W, H);
t += 0.033;
drawFlame(leftX, leftY, -1, t, glowGrdL, true);
drawFlame(rightX, rightY, +1, t, glowGrdR, false);
}
/* ── SPUSTIT OKAMŽITĚ - bez setTimeout ── */
resize();
requestAnimationFrame(animate);
})();
</script>
</body>
</html>}{
(display: "DeathSnowAnimation")
<h4>Všichni prohráli</h4>
<div class="text-divider divider-rpg"></div>
<!-- Spusť hudbu pro outro -->
(print: "<script>
changeMusic('https://files.catbox.moe/ac7hh8.ogg', 0.5);
</script>")
<!-- ⭐ DEBUG DIV S PORTRAIT URL PRO HRÁČE -->
<div style="display:none;" id="debug-portrait-url-outro">(print: $portraitURL)</div>
<style>
/* OUTRO ZOOM OBRÁZEK - ODZOOMUJE */
.outro-zoom-image {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-image: url('https://files.catbox.moe/w6jqq0.jpg');
background-size: cover;
background-position: center;
z-index: 9999;
opacity: 1;
transform: scale(1.8);
animation: zoomOutAndFade 4.5s ease-out 0.8s forwards;
pointer-events: none;
}
@keyframes zoomOutAndFade {
0% { transform: scale(1.8); opacity: 1; }
70% { transform: scale(1); opacity: 1; }
100% { transform: scale(1); opacity: 0; }
}
/* PORTRÉTY - VIDITELNÉ HNED, POZDĚJI ODJÍŽDÍ */
.outro-portrait {
position: fixed;
width: 300px;
height: 400px;
background-size: cover;
background-position: center;
border: 4px solid #d1b66b;
box-shadow: 0 0 30px rgba(209, 182, 107, 0.5);
opacity: 1;
animation-duration: 1.5s;
animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
animation-fill-mode: forwards;
top: 50%;
transform: translateY(-50%);
z-index: 10000;
}
.outro-portrait-player {
right: calc(50% + 80px);
}
.outro-portrait-teacher {
left: calc(50% + 80px);
background-image: url('https://files.catbox.moe/ouajvi.jpg');
}
/* Animace odjezdu - spustí se po 3 sekundách */
.outro-portrait-player.slide-out {
animation-name: slideOutRight;
animation-delay: 3s;
}
.outro-portrait-teacher.slide-out {
animation-name: slideOutLeft;
animation-delay: 3s;
}
@keyframes slideOutRight {
0% { right: calc(50% + 80px); opacity: 1; }
100% { right: -350px; opacity: 0; }
}
@keyframes slideOutLeft {
0% { left: calc(50% + 80px); opacity: 1; }
100% { left: -350px; opacity: 0; }
}
/* ⭐ LEBKA - ZÁKLADNÍ STYL ⭐ */
.skull-overlay {
position: fixed;
top: 50%;
width: 400px;
height: 400px;
background-image: url('https://files.catbox.moe/5ntk8n.png');
background-size: contain;
background-position: center;
background-repeat: no-repeat;
opacity: 1;
z-index: 10001;
filter: drop-shadow(0 0 20px rgba(255, 0, 0, 0.6));
transform: translateY(-50%) scale(1);
}
/* ⭐ LEBKA NA HRÁČI (VPRAVO) - SMAŽ TENTO BLOK PRO SKRYTÍ ⭐ */
#playerSkull {
right: calc(50% - 200px);
top: calc(50% - 50px);
}
/* ⭐ LEBKA NA UČITELI (VLEVO) - SMAŽ TENTO BLOK PRO SKRYTÍ ⭐ */
#teacherSkull {
left: calc(50% - 200px);
top: calc(50% - 50px);
}
/* JMÉNA POD PORTRÉTY */
.outro-character-name {
position: absolute;
bottom: -60px;
width: 100%;
text-align: center;
color: #d1b66b;
font-size: 24px;
font-weight: bold;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);
font-family: 'Cinzel Decorative', serif;
opacity: 1;
}
/* ⭐ PŘEŠKRTNUTÉ JMÉNO HRÁČE - SMAŽ PRO NORMÁLNÍ JMÉNO ⭐ */
#outroPlayerName.defeated {
color: #8b0000;
text-decoration: line-through;
}
/* ⭐ PŘEŠKRTNUTÉ JMÉNO UČITELE - SMAŽ PRO NORMÁLNÍ JMÉNO ⭐ */
#outroTeacherName.defeated {
color: #8b0000;
text-decoration: line-through;
}
/* KONTEJNER PRO NORMÁLNÍ OBSAH - SKRYTÝ BĚHEM OUTRA */
.main-content-hidden {
opacity: 0;
pointer-events: none;
transition: opacity 0.5s ease-in;
}
.main-content-visible {
opacity: 1;
pointer-events: auto;
}
</style>
<div class="outro-zoom-image" id="outroZoom"></div>
<div class="outro-animation-container" id="outroContainer">
<div class="outro-portrait outro-portrait-player slide-out" id="outroPlayerPortrait">
<div class="skull-overlay" id="playerSkull"></div>
<div class="outro-character-name" id="outroPlayerName">(print: $vybranaPostava)</div>
</div>
<div class="outro-portrait outro-portrait-teacher slide-out">
<div class="skull-overlay" id="teacherSkull"></div>
<div class="outro-character-name" id="outroTeacherName">Trenér</div>
</div>
</div>
<!-- NORMÁLNÍ OBSAH PASÁŽE - ZOBRAZÍ SE PO OUTRU -->
<div id="mainContent" class="main-content-hidden">
(align:"=><=")+(box:"X")[
(display: "zpet")
(display: "HodHUD")]
|prologText>[
<div style="background: linear-gradient(135deg, rgba(42,24,16,0.2) 0%, rgba(26,15,8,0.2) 100%); border: 3px solid rgba(139,105,20,0.2); border-radius: 2px; padding: 30px; margin: 30px auto; max-width: 700px; box-shadow: 0 8px 20px rgba(0,0,0,0.2);">
Drtihlavka dopadla tvrdě. "Do prdele, to bolí!"]
</div>
(set: $skillCheckRolled to false)
(set: $skillCheckResult to "")
(set: $roll to 0)
(set: $celkemHod to 0)
(set: $zakladniObtiznost to 5)
(set: $minSuccessRoll to (max: 2, $zakladniObtiznost - $umeni))
<div style="margin-bottom: 1px; padding: 1px; background: rgba(0,0,0,0.); border: 2px solid rgba(139, 105, 20, 0.2); border-radius: 2px; font-size: 0.9em;">
<div class="result-panel">
|storyText>[]
</div>
(if: not $skillCheckRolled)[
<h4 class="burning">
<div class="floating-button-wrapper">
|attackButton>[
(link: "(text-colour:#080a08)[Prohmatat bolavou ruku(text-colour:#666654)[ (Umění $umeni)]]")[
(set: _freshRoll to (random: 1, 6))
(set: $roll to _freshRoll)
(set: $celkemHod to $roll + $umeni)
(set: $skillCheckRolled to true)
(replace: ?prologText)[]
</div>
</h4>
<script>
var diceSound = new Audio('https://files.catbox.moe/oamu5w.ogg');
diceSound.volume = 0.6;
diceSound.play().catch(function(e) {
console.log('Audio playback failed:', e);
});
</script>
(replace: ?attackButton)[]
(replace: ?diceDisplay)[
<div class="dice-fall-animation-wrapper">
<div class="dice-rolling">
<img src="https://files.catbox.moe/a843tu.png" class="dice-image dice-fall">
</div>
</div>
]
(live: 0.6s)[
(stop:)
<script>
var resultSound = new Audio('https://files.catbox.moe/98jtvb.ogg');
resultSound.volume = 0.7;
resultSound.play().catch(function(e) {
console.log('Result sound failed:', e);
});
</script>
(replace: ?diceDisplay)[
<div style="margin-top: -100px;">
(if: $roll is 1)[
<img src="https://files.catbox.moe/a843tu.png" class="dice-image">
](else-if: $roll is 2)[
<img src="https://files.catbox.moe/laokqg.png" class="dice-image">
](else-if: $roll is 3)[
<img src="https://files.catbox.moe/9ubppy.png" class="dice-image">
](else-if: $roll is 4)[
<img src="https://files.catbox.moe/zp7fb4.png" class="dice-image">
](else-if: $roll is 5)[
<img src="https://files.catbox.moe/vqfqru.png" class="dice-image">
](else-if: $roll is 6)[
<img src="https://files.catbox.moe/hi7w7n.png" class="dice-image">
]
**<div class="dice-number-white-small">$roll(if: $umeni > 0)[+$umeni] = $celkemHod</div>**
</div>
]
(if: $celkemHod < $minSuccessRoll)[
(set: $skillCheckResult to "NEÚSPĚCH")
(set: $trait1 to true)
(replace: ?resultBox)[]
(replace: ?storyText)[
<div class="result-box">
[(text-colour:#6e4447)[(NEÚSPĚCH):] "Kurva ta sedla"<br>[[Koukni na učitele|Ucitel reci]]]
</div>
]
](else:)[
(set: $skillCheckResult to "ÚSPĚCH")
(replace: ?resultBox)[]
(replace: ?storyText)[
<div class="result-box">
[(text-colour:#334731)[(ÚSPĚCH):] "To bylo štígro, jen mě lehce zasáhl ruku"<br>[[Koukni na učitele|Ucitel reci]]]
</div>
]
]
]
]
]
</div>
<div class="dice-player-box">
|diceDisplay>[
(if: not $skillCheckRolled)[
]
]
</div>
</div>
|resultBox>[]
]
</div>
<script>
(function() {
var attempts = 0;
var maxAttempts = 30;
function loadOutroPortraits() {
attempts++;
var debugDiv = document.getElementById('debug-portrait-url-outro');
var playerURL = '';
if (debugDiv && debugDiv.textContent.trim() !== '') {
playerURL = debugDiv.textContent.trim();
} else if (typeof State !== 'undefined' && State.variables && State.variables.portraitURL) {
playerURL = State.variables.portraitURL;
}
if (!playerURL || playerURL === '' || playerURL.length < 10) {
if (attempts < maxAttempts) {
setTimeout(loadOutroPortraits, 100);
return;
} else {
playerURL = 'https://files.catbox.moe/hs2gd7.jpg';
}
}
var playerPortrait = document.getElementById('outroPlayerPortrait');
if (playerPortrait) {
playerPortrait.style.backgroundImage = "url('" + playerURL + "')";
} else if (attempts < maxAttempts) {
setTimeout(loadOutroPortraits, 100);
return;
}
var nameDiv = document.getElementById('outroPlayerName');
if (nameDiv && typeof State !== 'undefined' && State.variables && State.variables.vybranaPostava) {
nameDiv.textContent = State.variables.vybranaPostava;
}
// ⭐ Přidej nebo odeber třídu .defeated pro přeškrtnutí jména ⭐
// Pro přeškrtnutí jména hráče odkomentuj následující řádek:
document.getElementById('outroPlayerName').classList.add('defeated');
// Pro přeškrtnutí jména učitele odkomentuj následující řádek:
document.getElementById('outroTeacherName').classList.add('defeated');
}
// Odstranění outro zoom
setTimeout(function() {
var outroZoom = document.getElementById('outroZoom');
if (outroZoom) outroZoom.remove();
}, 5300);
// Odstranění portrétů a zobrazení hlavního obsahu
setTimeout(function() {
var outroContainer = document.getElementById('outroContainer');
if (outroContainer) outroContainer.remove();
var mainContent = document.getElementById('mainContent');
if (mainContent) {
mainContent.classList.remove('main-content-hidden');
mainContent.classList.add('main-content-visible');
}
}, 5500);
setTimeout(loadOutroPortraits, 200);
})();
</script>
<style>
.floating-button-wrapper {
z-index: 1000;
margin: -20px auto;
text-align: center;
}
.dice-fall-animation-wrapper {
margin-top: -10px;
}
.skill-check-layout {
display: flex;
gap: 10px;
align-items: flex-start;
margin: 1px 0;
flex-wrap: nowrap;
}
.dice-player-box {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 1px;
text-align: center;
opacity: 1;
}
.scene-card {
position: relative;
background: linear-gradient(135deg, rgba(0, 0, 0, 0.0), rgba(42, 24, 16, 0.0));
border: 3px solid rgba(0, 0, 11, 0.05);
border-radius: 2px;
padding: 0px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.0);
flex: 0 0 45%;
opacity: 1.4;
}
.result-panel {
flex: 1;
min-height: 35px;
}
.dice-image {
width: 150px;
height: 150px;
margin: -5px auto;
display: block;
}
.dice-rolling {
animation: shake 0.08s infinite;
}
.dice-fall {
animation: fall 0.6s ease-out, spin 0.6s linear, shake 0.08s infinite;
transform-origin: center;
}
.dice-number-white-small {
color: #ffffff;
font-size: 1.3em;
text-align: center;
margin-top: -30px;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);
}
.result-box {
background: rgba(42, 24, 16, 0.0);
border: 2px solid rgba(139, 69, 19, 0.05);
border-radius: 2px;
padding: -5px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.0);
margin-top: -45px;
animation: expandFromButton 0.6s ease-out;
transform-origin: top left;
}
@keyframes expandFromButton {
0% {
transform: scale(0.1) translateX(-5px) translateY(-380px);
opacity: 0;
}
50% {
opacity: 0.5;
}
100% {
transform: scale(1) translateX(0) translateY(0);
opacity: 1;
}
}
@keyframes fall {
0% {
transform: translateY(-200px);
opacity: 0;
}
100% {
transform: translateY(0);
opacity: 1;
}
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(720deg); }
}
@keyframes shake {
0%, 100% { transform: translateX(0) translateY(0); }
25% { transform: translateX(-3px) translateY(3px); }
50% { transform: translateX(3px) translateY(-3px); }
75% { transform: translateX(-3px) translateY(-3px); }
}
@media (max-width: 768px) {
.skill-check-layout {
flex-direction: column;
}
.scene-card {
flex: 1 1 100%;
}
}
</style>
}{(align:"=><=")+(box:"X")[
(display: "SnowDegreeAnimation")
(display: "HodHUD")
<h4>Remízat</h4>
<div class="text-divider divider-rpg"></div>
[
|prologText>[
<div style="background: linear-gradient(135deg, rgba(42,24,16,0.2) 0%, rgba(26,15,8,0.2) 100%); border: 3px solid rgba(139,105,20,0.2); border-radius: 2px; padding: 30px; margin: 30px auto; max-width: 700px; box-shadow: 0 8px 20px rgba(0,0,0,0.2);">
Drtihlavka dopadla, ale také jsi dokázal učitele povalit "Do prdele snad mě tím kolosem někam nezasáhl!"]
</div>
(set: $skillCheckRolled to false)
(set: $skillCheckResult to "")
(set: $roll to 0)
(set: $celkemHod to 0)
(set: $zakladniObtiznost to 5)
(set: $minSuccessRoll to (max: 2, $zakladniObtiznost - $umeni))
<div style="margin-bottom: 1px; padding: 1px; background: rgba(0,0,0,0.); border: 2px solid rgba(139, 105, 20, 0.2); border-radius: 2px; font-size: 0.9em;">
<div class="result-panel">
|storyText>[]
</div>
<!-- ABSOLUTNĚ POZICOVANÉ TLAČÍTKO -->
(if: not $skillCheckRolled)[
<h4 class="burning">
<div class="floating-button-wrapper">
|attackButton>[
(link: "(text-colour:#080a08)[Prohmatat bolavou ruku(text-colour:#666654)[ (Umění $umeni)]]")[
(set: _freshRoll to (random: 1, 6))
(set: $roll to _freshRoll)
(set: $celkemHod to $roll + $umeni)
(set: $skillCheckRolled to true)
(replace: ?prologText)[]
</div>
</h4>
<!-- PŘEHRAJ ZVUK HNED -->
<script>
var diceSound = new Audio('https://files.catbox.moe/oamu5w.ogg');
diceSound.volume = 0.6; // Hlasitost 60%
diceSound.play().catch(function(e) {
console.log('Audio playback failed:', e);
});
</script>
(replace: ?attackButton)[]
(replace: ?diceDisplay)[
<div class="dice-fall-animation-wrapper">
<div class="dice-rolling">
<img src="https://files.catbox.moe/a843tu.png" class="dice-image dice-fall">
</div>
</div>
]
(live: 0.6s)[
(stop:)
<!-- PŘEHRAJ ZVUK PRO RESULT BOX -->
<script>
var resultSound = new Audio('https://files.catbox.moe/98jtvb.ogg');
resultSound.volume = 0.7;
resultSound.play().catch(function(e) {
console.log('Result sound failed:', e);
});
</script>
(replace: ?diceDisplay)[
<div style="margin-top: -100px;">
(if: $roll is 1)[
<img src="https://files.catbox.moe/a843tu.png" class="dice-image">
](else-if: $roll is 2)[
<img src="https://files.catbox.moe/laokqg.png" class="dice-image">
](else-if: $roll is 3)[
<img src="https://files.catbox.moe/9ubppy.png" class="dice-image">
](else-if: $roll is 4)[
<img src="https://files.catbox.moe/zp7fb4.png" class="dice-image">
](else-if: $roll is 5)[
<img src="https://files.catbox.moe/vqfqru.png" class="dice-image">
](else-if: $roll is 6)[
<img src="https://files.catbox.moe/hi7w7n.png" class="dice-image">
]
**<div class="dice-number-white-small">$roll(if: $umeni > 0)[+$umeni] = $celkemHod</div>**
</div>
]
(if: $celkemHod < $minSuccessRoll)[
(set: $skillCheckResult to "NEÚSPĚCH")
(set: $trait1 to true)
(replace: ?resultBox)[]
(replace: ?storyText)[
<div class="result-box">
[(text-colour:#6e4447)[(NEÚSPĚCH):] "Kurva ta sedla"<br>[[Koukni na učitele|Pytlak reci]]]
</div>
]
](else:)[
(set: $skillCheckResult to "ÚSPĚCH")
(replace: ?resultBox)[]
(replace: ?storyText)[
<div class="result-box">
[(text-colour:#334731)[(ÚSPĚCH):] "To bylo štígro, vyhnul jsem se akorát, ruka mě ale bolí"<br>[[Koukni na učitele|Pytlak reci]]]
</div>
]
]
]
]
]
</div>
<div class="dice-player-box">
|diceDisplay>[
(if: not $skillCheckRolled)[
]
]
</div>
</div>
]
|resultBox>[]
]
<style>
.floating-button-wrapper {
z-index: 1000;
margin: -20px auto;
text-align: center;
}
}
/* NOVÁ TŘÍDA PRO POSUN ANIMACE NAHORU */
.dice-fall-animation-wrapper {
margin-top: -10px;
}
.skill-check-layout {
display: flex;
gap: 10px;
align-items: flex-start;
margin: 1px 0;
flex-wrap: nowrap;
}
.dice-player-box {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 1px;
text-align: center;
opacity: 1;
}
.scene-card {
position: relative;
background: linear-gradient(135deg, rgba(0, 0, 0, 0.0), rgba(42, 24, 16, 0.0));
border: 3px solid rgba(0, 0, 11, 0.05);
border-radius: 2px;
padding: 0px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.0);
flex: 0 0 45%;
opacity: 1.4;
}
.result-panel {
flex: 1;
min-height: 35px;
}
.dice-image {
width: 150px;
height: 150px;
margin: -5px auto;
display: block;
}
.dice-rolling {
animation: shake 0.08s infinite;
}
.dice-fall {
animation: fall 0.6s ease-out, spin 0.6s linear, shake 0.08s infinite;
transform-origin: center;
}
.dice-number-white-small {
color: #ffffff;
font-size: 1.3em;
text-align: center;
margin-top: -30px;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);
}
.result-box {
background: rgba(42, 24, 16, 0.0);
border: 2px solid rgba(139, 69, 19, 0.05);
border-radius: 2px;
padding: -5px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.0);
margin-top: -45px;
/* Animace rozbalení zleva shora */
animation: expandFromButton 0.6s ease-out;
transform-origin: top left;
}
@keyframes expandFromButton {
0% {
transform: scale(0.1) translateX(-5px) translateY(-380px);
opacity: 0;
}
50% {
opacity: 0.5;
}
100% {
transform: scale(1) translateX(0) translateY(0);
opacity: 1;
}
}
@keyframes fall {
0% {
transform: translateY(-200px);
opacity: 0;
}
100% {
transform: translateY(0);
opacity: 1;
}
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(720deg); }
}
@keyframes shake {
0%, 100% { transform: translateX(0) translateY(0); }
25% { transform: translateX(-3px) translateY(3px); }
50% { transform: translateX(3px) translateY(-3px); }
75% { transform: translateX(-3px) translateY(-3px); }
}
@media (max-width: 768px) {
.skill-check-layout {
flex-direction: column;
}
.scene-card {
flex: 1 1 100%;
}
}
</style>]}<!-- ⚔️ ZOBRAZENÍ NEPŘÁTELOVY KARTY - PODLE TURN ORDER -->
{
<!-- 🎯 Vyber nepřátelovu kartu PŘED zobrazením (když nepřítel hraje první) -->
(if: $isEnemyFirstThisTurn and ($chosenEnemyCard is 0))[
(set: $playableEnemyCards to (a:))
(for: each _card, ...$enemyHand)[
(if: _card's cost <= 3)[
(set: $playableEnemyCards to $playableEnemyCards + (a: _card))
]
]
(if: $playableEnemyCards's length > 0)[
(set: $chosenEnemyCard to (either: ...$playableEnemyCards))
](else:)[
(set: $chosenEnemyCard to (either: ...$enemyHand))
]
]
<!-- 📺 ZOBRAZENÍ KARTY -->
(if: $isEnemyFirstThisTurn and ($chosenEnemyCard is not 0))[
<!-- Nepřítel hraje první - ukázat ČISTOU kartu bez rámečku -->
<div class="enemy-card-preview-container clean-card" id="enemyCardPreview">
<div class="card enemy-card preview-card-animate">
<div class="card-image-container">
(if: ($chosenEnemyCard is a datamap) and ($chosenEnemyCard contains "image") and ($chosenEnemyCard's image is not ""))[
(print: "<img src='" + $chosenEnemyCard's image + "' alt='" + $chosenEnemyCard's name + "'>")
]
</div>
<div class="card-name">(print: $chosenEnemyCard's name)</div>
<div class="card-stats">
<span class="attack"><img src="https://files.catbox.moe/sk5n4x.png" class="stat-icon" alt="⚔️"> (print: $chosenEnemyCard's attack)</span>
<span class="defense"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> (print: $chosenEnemyCard's defense)</span>
</div>
</div>
</div>
](else-if: ($isEnemyFirstThisTurn is false))[
<!-- Hráč hraje první - ukázat RUBOVOU stranu karty (vždy!) -->
<div class="enemy-card-preview-container card-back-preview" id="enemyCardBackPreview">
<img src="https://files.catbox.moe/h0nv84.jpeg" alt="Card Back" class="preview-card-back">
</div>
]
<script>
(function() {
setTimeout(function() {
var previewContainer = document.getElementById('enemyCardPreview') || document.getElementById('enemyCardBackPreview');
if (!previewContainer) {
console.error('❌ Enemy card preview container nenalezen!');
return;
}
console.log('✅ Enemy card preview nalezen:', previewContainer.id);
console.log('🎲 Turn starter:', window.Twine?.State?.variables?.currentTurnStarter || 'unknown');
console.log('🔄 Enemy first this turn:', window.Twine?.State?.variables?.isEnemyFirstThisTurn || false);
// Zkontroluj jestli bylo zmáčknuto zamíchat
var shufflePressed = localStorage.getItem('shufflePressed') === 'true';
var delay = shufflePressed ? 0 : 1800; // 0ms pokud shuffle, jinak 1.8s
if (shufflePressed) {
localStorage.removeItem('shufflePressed'); // Vyčisti flag
console.log('🔀 Shuffle detected - okamžité zobrazení');
}
// Zobraz s dynamickým zpožděním
setTimeout(function() {
previewContainer.classList.add('show-preview');
console.log('🎴 Preview zobrazen po ' + delay + 'ms');
}, delay);
}, 100);
})();
</script>
}
<style>
/* 🎴 KONTEJNER PRO PREVIEW NEPŘÁTELOVY KARTY */
.enemy-card-preview-container {
position: fixed;
top: 46%;
right: -400px;
transform: translateY(-50%);
z-index: 9000;
opacity: 0;
transition: all 0.5s cubic-bezier(0.68, -0.55, 0.27, 1.55);
/* Vynucení rozměrů pro celý kontejner */
height: 280px;
aspect-ratio: 2 / 3; /* Udrží poměr stran karty (šířka cca 186px) */
}
.enemy-card-preview-container.show-preview {
right: 625px;
opacity: 1;
}
/* 🎴 ČISTÁ KARTA (vzhled lícové strany) */
.enemy-card-preview-container.clean-card .card {
height: 102%;
width: 126%;
margin: 0;
transform: scale(1.0);
transition: all 0.3s ease;
display: flex;
flex-direction: column;
box-shadow:
0 10px 30px rgba(0, 0, 0, 0.4), /* Hlavní stín */
0 5px 15px rgba(0, 0, 0, 0.3), /* Druhý stín */
0 2px 5px rgba(0, 0, 0, 0.2); /* Jemný detail */
}
/* 🃏 RUBOVÁ STRANA KARTY - OPRAVENO */
.enemy-card-preview-container.card-back-preview {
width: 220px; /* Širší kontejner pro celý obrázek */
height: auto; /* Automatická výška podle obrázku */
}
.preview-card-back {
width: 98%;
height: 80%;
object-fit: contain; /* ⚠️ Zobrazí celý obrázek bez oříznutí */
border-radius: 0; /* ⚠️ Bez zaoblených rohů */
box-shadow:
0 10px 30px rgba(0, 0, 0, 0.4), /* Hlavní stín */
0 5px 15px rgba(0, 0, 0, 0.3), /* Druhý stín */
0 2px 5px rgba(0, 0, 0, 0.2); /* Jemný detail */
}
.enemy-card-preview-container.card-back-preview:hover .preview-card-back {
transform: scale(1.05);
}
.enemy-card-preview-container.card-back-preview:hover .preview-card-back {
transform: scale(1.05);
}
/* ✨ ANIMACE PŘÍCHODU KARTY */
@keyframes card-preview-entrance {
0% {
transform: scale(1.0) rotate(-10deg);
opacity: 0;
filter: blur(10px);
}
60% {
transform: scale(1) rotate(5deg);
opacity: 1;
filter: blur(0px);
}
100% {
transform: scale(1.0) rotate(0deg);
opacity: 1;
filter: blur(0px);
}
}
.preview-card-animate {
animation: card-preview-entrance 0.8s cubic-bezier(0.68, -0.55, 0.27, 1.55) forwards;
}
</style><!-- EnemyPoisonHandler -->
<!-- ⭐ OPRAVA: Správná inicializace -->
(unless: $enemyPoisonStacks is a number)[(set: $enemyPoisonStacks to 0)]
(unless: $enemyPoisonDuration is a number)[(set: $enemyPoisonDuration to 0)]
<!-- ☠️ POISON TICK - na začátku kola -->
(if: $battlePhase is "selecting" or $battlePhase is "enemy_waiting")[
(if: $enemyPoisonStacks > 0 and $enemyPoisonDuration > 0)[
<!-- Aplikuj damage -->
(set: $hp to $hp - $enemyPoisonStacks)
(set: $poisonMsg to "<span class='combat-poison-enemy'>☠️ Utrpěl jsi " + (text: $enemyPoisonStacks) + " HP z otravy! (Zbývá " + (text: ($enemyPoisonDuration - 1)) + " kol)</span>")
(set: $combatLog to it + (a: $poisonMsg))
<!-- Odečti duration AŽ PO aplikaci damage -->
(set: $enemyPoisonDuration to $enemyPoisonDuration - 1)
<!-- Zkontroluj, jestli poison vypršel -->
(if: $enemyPoisonDuration <= 0)[
(set: $expireMsg to "<span class='combat-poison-enemy'>💀 Tvá otrava vypršela</span>")
(set: $combatLog to it + (a: $expireMsg))
(set: $enemyPoisonStacks to 0)
]
]
]
<!-- 🗡️ APLIKACE POISON z karty -->
(if: $battlePhase is "resolving")[
(if: $enemyCard contains "type" and $enemyCard's type is "poison")[
(set: _poisonDamage to 2)
(set: _poisonTurns to 2)
(if: $enemyCard contains "poisonDamage")[
(set: _poisonDamage to $enemyCard's poisonDamage)
]
(if: $enemyCard contains "poisonDuration")[
(set: _poisonTurns to $enemyCard's poisonDuration)
]
(set: $enemyPoisonStacks to _poisonDamage)
(set: $enemyPoisonDuration to _poisonTurns)
(set: $applyMsg to "<span class='combat-poison-enemy'>☠️ Byl jsi otráven! (" + (text: _poisonDamage) + " HP/kolo po dobu " + (text: _poisonTurns) + " kol)</span>")
(set: $combatLog to it + (a: $applyMsg))
]
]{(if: $enemyWeaponImageURL is not "" and $enemyWeaponImageURL is not 0)[
<!-- ⭐ PŘIDEJ TŘÍDU weapon-level-X podle úrovně zbraně nepřítele -->
(set: _enemyWeaponClass to "weapon-on-table enemy-weapon")
(set: _iconURL to "https://files.catbox.moe/4tfd8n.png")
(if: $enemyWeaponLevel >= 3)[
(set: _enemyWeaponClass to "weapon-on-table enemy-weapon weapon-legendary")
(set: _iconURL to "https://files.catbox.moe/h87n3x.png")
](else-if: $enemyWeaponLevel is 2)[
(set: _enemyWeaponClass to "weapon-on-table enemy-weapon weapon-rare")
(set: _iconURL to "https://files.catbox.moe/x7hpjq.png")
](else-if: $enemyWeaponLevel is 1)[
(set: _enemyWeaponClass to "weapon-on-table enemy-weapon weapon-common")
(set: _iconURL to "https://files.catbox.moe/4tfd8n.png")
]
<!-- ⭐ VYTVOŘ HTML PRO RUNY (pokud level >= 2) -->
(set: _enemyRunesHTML to "")
(if: $enemyWeaponLevel >= 2)[
(set: _enemyRunesHTML to "<div class='weapon-runes-orbit'>
<div class='weapon-rune' style='--angle: 0deg;'>ᚠ</div>
<div class='weapon-rune' style='--angle: 60deg;'>ᚢ</div>
<div class='weapon-rune' style='--angle: 120deg;'>ᚦ</div>
<div class='weapon-rune' style='--angle: 180deg;'>ᚨ</div>
<div class='weapon-rune' style='--angle: 240deg;'>ᚱ</div>
<div class='weapon-rune' style='--angle: 300deg;'>ᚲ</div>
</div>")
]
<!-- ⭐ VYTVOŘ HTML PRO PAPRSKY (pokud level >= 3) -->
(set: _enemyRaysHTML to "")
(if: $enemyWeaponLevel >= 3)[
(set: _enemyRaysHTML to "<div class='weapon-light-rays'></div>")
]
<!-- ⭐ PRINTNI JEN ENEMY WEAPON BEZ WRAPPERU (wrapper je v player weapon) -->
(print: "<div class='" + _enemyWeaponClass + "' style='display: block !important; opacity: 1 !important; visibility: visible !important;'>
" + _enemyRunesHTML + "
" + _enemyRaysHTML + "
<div class='weapon-card-wrapper'>
<img src='" + $enemyWeaponImageURL + "' class='card'>
</div>
<div class='weapon-slash'></div>
</div>
<script>
(function() {
setTimeout(function() {
// Aktualizuj enemy ikonu v hráčově wrapperu
var enemyIcon = document.querySelector('.enemy-weapon-icon');
if (enemyIcon) {
enemyIcon.style.display = 'flex';
enemyIcon.style.opacity = '1';
enemyIcon.style.visibility = 'visible';
var enemyImg = enemyIcon.querySelector('.dmg-icon-bg');
var enemyText = enemyIcon.querySelector('.dmg-text-overlay');
var enemyTooltip = enemyIcon.querySelector('.tooltip-bubble em');
if (enemyImg) {
enemyImg.src = '" + _iconURL + "';
enemyImg.style.opacity = '1';
enemyImg.style.visibility = 'visible';
}
if (enemyText) {
enemyText.textContent = '" + (text: $enemyWeaponDamage) + "';
enemyText.style.opacity = '1';
enemyText.style.visibility = 'visible';
}
if (enemyTooltip) {
enemyTooltip.textContent = 'Útok nepřítele: " + $enemyWeaponName + "';
}
}
}, 50);
})();
</script>")
]}
<style>
/* ═══════════════════════════════════════════════════ */
/* 🗡️ ENEMY WEAPON - POZICOVATELNÁ NA PRAVOU STRANU */
/* ═══════════════════════════════════════════════════ */
.weapon-on-table.enemy-weapon {
position: fixed;
right: -17%; /* ← Na pravou stranu obrazovky */
top: 33.5%;
transform: translate(50%, -50%);
display: flex;
flex-direction: column;
align-items: center;
z-index: 600;
pointer-events: auto;
min-height: 250px; /* Stabilizace layoutu */
}
/* ⚔️ TEXT PRO ENEMY DAMAGE */
.enemy-dmg-text {
color: #000000 !important;
text-shadow: 0 0 10px rgba(255, 215, 0, 0.4); /* Jemnější zlatý stín místo červeného */
}
/* Ikony poškození nepřítele */
.enemy-weapon .dmg-icon-bg {
filter: none; /* Odstraněna červená rotace, aby ladila s novými barvami */
}
/* 🌀 JEMNÉ RUNY PRO STABILITU (Opacity 0.15) */
.enemy-weapon .weapon-runes-orbit {
position: absolute;
top: 50%;
left: 50%;
width: 200px;
height: 200px;
transform: translate(-50%, -50%);
pointer-events: none;
z-index: 2;
animation: runes-spin 15s linear infinite;
opacity: 0.15;
}
@keyframes runes-spin {
from { transform: translate(-50%, -50%) rotate(0deg); }
to { transform: translate(-50%, -50%) rotate(360deg); }
}
.enemy-weapon .weapon-rune {
position: absolute;
top: 50%;
left: 50%;
font-size: 24px;
transform-origin: 0 0;
transform: rotate(var(--angle)) translateX(100px) rotate(calc(-1 * var(--angle)));
}
/* ═══════════════════════════════════════════════════ */
/* ✨ ENEMY LEVEL GLOW (Stejné schéma jako hráč) */
/* ═══════════════════════════════════════════════════ */
/* 🟤 LEVEL 1 - COMMON (Hnědá) */
.enemy-weapon.weapon-common .card {
filter: drop-shadow(0 0 10px rgba(139, 69, 19, 0.6));
}
.enemy-weapon.weapon-common .weapon-rune {
color: #8b4513;
}
/* 🟠 LEVEL 2 - RARE (Oranžová) */
.enemy-weapon.weapon-rare .card {
filter: drop-shadow(0 0 15px rgba(255, 140, 0, 0.7));
}
.enemy-weapon.weapon-rare .weapon-rune {
color: #ff8c00;
}
/* 🟡 LEVEL 3 - LEGENDARY (Zlatá) */
.enemy-weapon.weapon-legendary .card {
filter: drop-shadow(0 0 20px rgba(255, 215, 0, 0.8));
animation: weapon-legendary-pulse-enemy 2s ease-in-out infinite;
}
.enemy-weapon.weapon-legendary .weapon-rune {
color: #ffd700;
opacity: 0.2;
}
@keyframes weapon-legendary-pulse-enemy {
0%, 100% { filter: drop-shadow(0 0 15px rgba(255, 215, 0, 0.7)); }
50% { filter: drop-shadow(0 0 30px rgba(255, 215, 0, 1)) brightness(1.1); }
}
/* ⚡ ANIMACE ÚTOKU (Změněno na zlatou/bílou záři) */
@keyframes weapon-glow-enemy {
0% { filter: brightness(1) drop-shadow(0 0 5px rgba(255, 215, 0, 0.3)); }
50% { filter: brightness(2.5) drop-shadow(0 0 40px rgba(255, 255, 255, 0.8)) drop-shadow(0 0 60px rgba(255, 215, 0, 1)); }
100% { filter: brightness(1) drop-shadow(0 0 5px rgba(255, 215, 0, 0.3)); }
}
.weapon-on-table.enemy-weapon.weapon-attacking .card {
animation: weapon-glow-enemy 1.2s ease-in-out;
}
/* Combat log style */
.combat-weapon-enemy {
color: #ffd700; /* Změněno na zlatou, aby to ladilo s legendárkou */
font-weight: bold;
text-shadow: 0 0 5px rgba(0, 0, 0, 0.5);
}
</style>{<div class="escape-card-wrapper">
<div class="escape-link-overlay">
(link: " ")[ (go-to: "EscapeSuccess") ]
</div>
<div class="escape-card-visual">
<img src="https://files.catbox.moe/2b62ns.jpg" alt="Karta Útěk">
<div class="escape-card-text">Pokusit se o útěk</div>
</div>
</div>
<style>
.escape-card-wrapper {
position: fixed;
bottom: 40px;
left: 40px;
width: 100px;
height: 150px;
z-index: 10000;
transition: all 0.4s ease;
/* ZÁKLADNÍ PRŮHLEDNOST KARTY */
opacity: 0.8;
}
.escape-link-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 30;
}
.escape-link-overlay tw-link {
display: block !important;
width: 100% !important;
height: 100% !important;
opacity: 0;
cursor: pointer;
}
.escape-card-visual {
position: relative;
width: 100%;
height: 100%;
border: 2px solid rgba(139, 105, 20, 0.6);
border-radius: 3px;
overflow: hidden;
box-shadow: 0 8px 15px rgba(0,0,0,0.6);
background: #1a0f08;
z-index: 10;
}
/* Styl pro skrytý text */
.escape-card-text {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -30%);
width: 90%;
text-align: center;
color: #d1cba1;
font-family: 'Cinzel', serif;
font-size: 13px;
font-weight: bold;
text-shadow: 2px 2px 4px rgba(0,0,0,1);
z-index: 20;
pointer-events: none;
opacity: 0;
transition: all 0.4s ease;
}
/* Zlaté rohy */
.escape-card-visual::before,
.escape-card-visual::after {
content: "";
position: absolute;
width: 0.5rem;
height: 0.5rem;
border: 1.5px solid #8b6914;
z-index: 25;
}
.escape-card-visual::before { top: 3px; left: 3px; border-right: none; border-bottom: none; }
.escape-card-visual::after { bottom: 3px; right: 3px; border-left: none; border-top: none; }
.escape-card-visual img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
transition: filter 0.4s ease;
}
/* --- HOVER EFEKTY --- */
.escape-card-wrapper:hover {
transform: translateY(-8px) scale(1.05);
/* PŘI HOVERU SE KARTA PLNĚ ZOBRAZÍ */
opacity: 1;
}
.escape-card-wrapper:hover .escape-card-text {
opacity: 1;
transform: translate(-50%, -50%);
}
.escape-card-wrapper:hover img {
/* Ztmavení a rozostření pozadí pro čitelnost textu */
filter: brightness(0.3) blur(2px);
}
.escape-card-wrapper:hover .escape-card-visual {
border-color: #756a2f;
box-shadow: 0 0 20px rgba(255, 215, 0, 0.5);
}
</style>}{(align:"=><=")+(box:"X")[
(display: "DeathSnowAnimation")
(display: "HodHUD")
<h4>útěk se nepodařil</h4>
<div class="text-divider divider-rpg"></div>
[
|prologText>[
<div style="background: linear-gradient(135deg, rgba(42,24,16,0.2) 0%, rgba(26,15,8,0.2) 100%); border: 3px solid rgba(139,105,20,0.2); border-radius: 2px; padding: 30px; margin: 30px auto; max-width: 700px; box-shadow: 0 8px 20px rgba(0,0,0,0.2);">
"Do prdele otáčet se zády nebyl dobrý nápad!" pomyslíš si, když náhle ucítíš bolest v paži]
</div>
(set: $skillCheckRolled to false)
(set: $skillCheckResult to "")
(set: $roll to 0)
(set: $celkemHod to 0)
(set: $zakladniObtiznost to 5)
(set: $minSuccessRoll to (max: 2, $zakladniObtiznost - $umeni))
<div style="margin-bottom: 1px; padding: 1px; background: rgba(0,0,0,0.); border: 2px solid rgba(139, 105, 20, 0.2); border-radius: 2px; font-size: 0.9em;">
<div class="result-panel">
|storyText>[]
</div>
<!-- ABSOLUTNĚ POZICOVANÉ TLAČÍTKO -->
(if: not $skillCheckRolled)[
<h4 class="burning">
<div class="floating-button-wrapper">
|attackButton>[
(link: "(text-colour:#080a08)[Prohmatat bolavou ruku(text-colour:#666654)[ (Umění $umeni)]]")[
(set: _freshRoll to (random: 1, 6))
(set: $roll to _freshRoll)
(set: $celkemHod to $roll + $umeni)
(set: $skillCheckRolled to true)
(replace: ?prologText)[]
</div>
</h4>
<!-- PŘEHRAJ ZVUK HNED -->
<script>
var diceSound = new Audio('https://files.catbox.moe/oamu5w.ogg');
diceSound.volume = 0.6; // Hlasitost 60%
diceSound.play().catch(function(e) {
console.log('Audio playback failed:', e);
});
</script>
(replace: ?attackButton)[]
(replace: ?diceDisplay)[
<div class="dice-fall-animation-wrapper">
<div class="dice-rolling">
<img src="https://files.catbox.moe/a843tu.png" class="dice-image dice-fall">
</div>
</div>
]
(live: 0.6s)[
(stop:)
<!-- PŘEHRAJ ZVUK PRO RESULT BOX -->
<script>
var resultSound = new Audio('https://files.catbox.moe/98jtvb.ogg');
resultSound.volume = 0.7;
resultSound.play().catch(function(e) {
console.log('Result sound failed:', e);
});
</script>
(replace: ?diceDisplay)[
<div style="margin-top: -100px;">
(if: $roll is 1)[
<img src="https://files.catbox.moe/a843tu.png" class="dice-image">
](else-if: $roll is 2)[
<img src="https://files.catbox.moe/laokqg.png" class="dice-image">
](else-if: $roll is 3)[
<img src="https://files.catbox.moe/9ubppy.png" class="dice-image">
](else-if: $roll is 4)[
<img src="https://files.catbox.moe/zp7fb4.png" class="dice-image">
](else-if: $roll is 5)[
<img src="https://files.catbox.moe/vqfqru.png" class="dice-image">
](else-if: $roll is 6)[
<img src="https://files.catbox.moe/hi7w7n.png" class="dice-image">
]
**<div class="dice-number-white-small">$roll(if: $umeni > 0)[+$umeni] = $celkemHod</div>**
</div>
]
(if: $celkemHod < $minSuccessRoll)[
(set: $skillCheckResult to "NEÚSPĚCH")
(set: $trait1 to true)
(replace: ?resultBox)[]
(replace: ?storyText)[
<div class="result-box">
[(text-colour:#6e4447)[(NEÚSPĚCH):] "Kurva ta sedla, přímo do ruky"<br>[[Koukni na učitele|Pytlak reci]]]
</div>
]
](else:)[
(set: $skillCheckResult to "ÚSPĚCH")
(replace: ?resultBox)[]
(replace: ?storyText)[
<div class="result-box">
[(text-colour:#334731)[(ÚSPĚCH):] "To bylo štígro, ruka je celá, ale bolí."<br>[[Koukni na učitele|Pytlak reci]]]
</div>
]
]
]
]
]
</div>
<div class="dice-player-box">
|diceDisplay>[
(if: not $skillCheckRolled)[
]
]
</div>
</div>
]
|resultBox>[]
]
<style>
.floating-button-wrapper {
z-index: 1000;
margin: -20px auto;
text-align: center;
}
}
/* NOVÁ TŘÍDA PRO POSUN ANIMACE NAHORU */
.dice-fall-animation-wrapper {
margin-top: -10px;
}
.skill-check-layout {
display: flex;
gap: 10px;
align-items: flex-start;
margin: 1px 0;
flex-wrap: nowrap;
}
.dice-player-box {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 1px;
text-align: center;
opacity: 1;
}
.scene-card {
position: relative;
background: linear-gradient(135deg, rgba(0, 0, 0, 0.0), rgba(42, 24, 16, 0.0));
border: 3px solid rgba(0, 0, 11, 0.05);
border-radius: 2px;
padding: 0px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.0);
flex: 0 0 45%;
opacity: 1.4;
}
.result-panel {
flex: 1;
min-height: 35px;
}
.dice-image {
width: 150px;
height: 150px;
margin: -5px auto;
display: block;
}
.dice-rolling {
animation: shake 0.08s infinite;
}
.dice-fall {
animation: fall 0.6s ease-out, spin 0.6s linear, shake 0.08s infinite;
transform-origin: center;
}
.dice-number-white-small {
color: #ffffff;
font-size: 1.3em;
text-align: center;
margin-top: -30px;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);
}
.result-box {
background: rgba(42, 24, 16, 0.0);
border: 2px solid rgba(139, 69, 19, 0.05);
border-radius: 2px;
padding: -5px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.0);
margin-top: -45px;
/* Animace rozbalení zleva shora */
animation: expandFromButton 0.6s ease-out;
transform-origin: top left;
}
@keyframes expandFromButton {
0% {
transform: scale(0.1) translateX(-5px) translateY(-380px);
opacity: 0;
}
50% {
opacity: 0.5;
}
100% {
transform: scale(1) translateX(0) translateY(0);
opacity: 1;
}
}
@keyframes fall {
0% {
transform: translateY(-200px);
opacity: 0;
}
100% {
transform: translateY(0);
opacity: 1;
}
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(720deg); }
}
@keyframes shake {
0%, 100% { transform: translateX(0) translateY(0); }
25% { transform: translateX(-3px) translateY(3px); }
50% { transform: translateX(3px) translateY(-3px); }
75% { transform: translateX(-3px) translateY(-3px); }
}
@media (max-width: 768px) {
.skill-check-layout {
flex-direction: column;
}
.scene-card {
flex: 1 1 100%;
}
}
</style>]}{(align:"=><=")+(box:"X")[
(display: "DeathSnowAnimation")
(display: "zpet")
(display: "HodHUD")
<h4>útěk se nepodařil</h4>
<div class="text-divider divider-rpg"></div>
[
|prologText>[
<div style="background: linear-gradient(135deg, rgba(42,24,16,0.2) 0%, rgba(26,15,8,0.2) 100%); border: 3px solid rgba(139,105,20,0.2); border-radius: 2px; padding: 30px; margin: 30px auto; max-width: 700px; box-shadow: 0 8px 20px rgba(0,0,0,0.2);">
"Do prdele otáčet se zády nebyl dobrý nápad!" pomyslíš si, když náhle ucítíš bolest v paži]
</div>
(set: $skillCheckRolled to false)
(set: $skillCheckResult to "")
(set: $roll to 0)
(set: $celkemHod to 0)
(set: $zakladniObtiznost to 5)
(set: $minSuccessRoll to (max: 2, $zakladniObtiznost - $umeni))
<div style="margin-bottom: 1px; padding: 1px; background: rgba(0,0,0,0.); border: 2px solid rgba(139, 105, 20, 0.2); border-radius: 2px; font-size: 0.9em;">
<div class="result-panel">
|storyText>[]
</div>
<!-- ABSOLUTNĚ POZICOVANÉ TLAČÍTKO -->
(if: not $skillCheckRolled)[
<h4 class="burning">
<div class="floating-button-wrapper">
|attackButton>[
(link: "(text-colour:#080a08)[Prohmatat bolavou ruku(text-colour:#666654)[ (Umění $umeni)]]")[
(set: _freshRoll to (random: 1, 6))
(set: $roll to _freshRoll)
(set: $celkemHod to $roll + $umeni)
(set: $skillCheckRolled to true)
(replace: ?prologText)[]
</div>
</h4>
<!-- PŘEHRAJ ZVUK HNED -->
<script>
var diceSound = new Audio('https://files.catbox.moe/oamu5w.ogg');
diceSound.volume = 0.6; // Hlasitost 60%
diceSound.play().catch(function(e) {
console.log('Audio playback failed:', e);
});
</script>
(replace: ?attackButton)[]
(replace: ?diceDisplay)[
<div class="dice-fall-animation-wrapper">
<div class="dice-rolling">
<img src="https://files.catbox.moe/a843tu.png" class="dice-image dice-fall">
</div>
</div>
]
(live: 0.6s)[
(stop:)
<!-- PŘEHRAJ ZVUK PRO RESULT BOX -->
<script>
var resultSound = new Audio('https://files.catbox.moe/98jtvb.ogg');
resultSound.volume = 0.7;
resultSound.play().catch(function(e) {
console.log('Result sound failed:', e);
});
</script>
(replace: ?diceDisplay)[
<div style="margin-top: -100px;">
(if: $roll is 1)[
<img src="https://files.catbox.moe/a843tu.png" class="dice-image">
](else-if: $roll is 2)[
<img src="https://files.catbox.moe/laokqg.png" class="dice-image">
](else-if: $roll is 3)[
<img src="https://files.catbox.moe/9ubppy.png" class="dice-image">
](else-if: $roll is 4)[
<img src="https://files.catbox.moe/zp7fb4.png" class="dice-image">
](else-if: $roll is 5)[
<img src="https://files.catbox.moe/vqfqru.png" class="dice-image">
](else-if: $roll is 6)[
<img src="https://files.catbox.moe/hi7w7n.png" class="dice-image">
]
**<div class="dice-number-white-small">$roll(if: $umeni > 0)[+$umeni] = $celkemHod</div>**
</div>
]
(if: $celkemHod < $minSuccessRoll)[
(set: $skillCheckResult to "NEÚSPĚCH")
(set: $trait1 to true)
(replace: ?resultBox)[]
(replace: ?storyText)[
<div class="result-box">
[(text-colour:#6e4447)[(NEÚSPĚCH):] "Kurva ta sedla, přímo do ruky"<br>[[Koukni na učitele|Ucitel reci]]]
</div>
]
](else:)[
(set: $skillCheckResult to "ÚSPĚCH")
(replace: ?resultBox)[]
(replace: ?storyText)[
<div class="result-box">
[(text-colour:#334731)[(ÚSPĚCH):] "To bylo štígro, ruka je celá, ale bolí."<br>[[Koukni na učitele|Ucitel reci]]]
</div>
]
]
]
]
]
</div>
<div class="dice-player-box">
|diceDisplay>[
(if: not $skillCheckRolled)[
]
]
</div>
</div>
]
|resultBox>[]
]
<style>
.floating-button-wrapper {
z-index: 1000;
margin: -20px auto;
text-align: center;
}
}
/* NOVÁ TŘÍDA PRO POSUN ANIMACE NAHORU */
.dice-fall-animation-wrapper {
margin-top: -10px;
}
.skill-check-layout {
display: flex;
gap: 10px;
align-items: flex-start;
margin: 1px 0;
flex-wrap: nowrap;
}
.dice-player-box {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 1px;
text-align: center;
opacity: 1;
}
.scene-card {
position: relative;
background: linear-gradient(135deg, rgba(0, 0, 0, 0.0), rgba(42, 24, 16, 0.0));
border: 3px solid rgba(0, 0, 11, 0.05);
border-radius: 2px;
padding: 0px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.0);
flex: 0 0 45%;
opacity: 1.4;
}
.result-panel {
flex: 1;
min-height: 35px;
}
.dice-image {
width: 150px;
height: 150px;
margin: -5px auto;
display: block;
}
.dice-rolling {
animation: shake 0.08s infinite;
}
.dice-fall {
animation: fall 0.6s ease-out, spin 0.6s linear, shake 0.08s infinite;
transform-origin: center;
}
.dice-number-white-small {
color: #ffffff;
font-size: 1.3em;
text-align: center;
margin-top: -30px;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);
}
.result-box {
background: rgba(42, 24, 16, 0.0);
border: 2px solid rgba(139, 69, 19, 0.05);
border-radius: 2px;
padding: -5px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.0);
margin-top: -45px;
/* Animace rozbalení zleva shora */
animation: expandFromButton 0.6s ease-out;
transform-origin: top left;
}
@keyframes expandFromButton {
0% {
transform: scale(0.1) translateX(-5px) translateY(-380px);
opacity: 0;
}
50% {
opacity: 0.5;
}
100% {
transform: scale(1) translateX(0) translateY(0);
opacity: 1;
}
}
@keyframes fall {
0% {
transform: translateY(-200px);
opacity: 0;
}
100% {
transform: translateY(0);
opacity: 1;
}
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(720deg); }
}
@keyframes shake {
0%, 100% { transform: translateX(0) translateY(0); }
25% { transform: translateX(-3px) translateY(3px); }
50% { transform: translateX(3px) translateY(-3px); }
75% { transform: translateX(-3px) translateY(-3px); }
}
@media (max-width: 768px) {
.skill-check-layout {
flex-direction: column;
}
.scene-card {
flex: 1 1 100%;
}
}
</style>]}<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- ⚔️ EXECUTE & SWIFT STRIKE HANDLER - HP-BASED MECHANICS -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- 💀 POPRAVA - INSTANT KILL POD 16 HP -->
(if: $playerCard's name is "Poprava")[
<!-- ✅ KONTROLA: Má nepřítel méně než 16 HP? -->
(if: $enemyHP < 16)[
<!-- 💀 INSTANT KILL -->
(set: $playerAttack to 999)
(set: $executeMsg to "<span class='combat-execute'>POPRAVA! Nepřítel byl okamžitě zabit! [" + (text: $enemyHP) + "/" + (text: $enemyMaxHP) + "]</span>")
(set: $combatLog to it + (a: $executeMsg))
](else:)[
<!-- ❌ PODMÍNKA NESPLNĚNA -->
(set: $playerAttack to 0)
(set: $executeMsg to "<span class='combat-execute-fail'>Poprava selhala, nepřítel má příliš mnoho zdraví [" + (text: $enemyHP) + "/" + (text: $enemyMaxHP) + "]. Potřebuješ ho dostat pod 16 zdraví.</span>")
(set: $combatLog to it + (a: $executeMsg))
]
]
<!-- ⚡ RYCHLÝ ÚDER - BONUS PROTI ZDRAVÝM NEPŘÁTELŮM -->
(if: $playerCard's name is "Rychlý úder")[
<!-- ✅ KONTROLA: Má nepřítel 15+ HP? -->
(if: $enemyHP >= 15)[
<!-- ⚡ DOUBLE DAMAGE - změň attack z 2 na 4 -->
(set: $playerCard to $playerCard + (dm: "attack", 4))
(set: $swiftMsg to "<span class='combat-swift-active'>RYCHLÝ ÚDER! Nepřítel má dost zdraví → Útok zvýšen na 4! [" + (text: $enemyHP) + "/" + (text: $enemyMaxHP) + "]</span>")
(set: $combatLog to it + (a: $swiftMsg))
](else:)[
<!-- ❌ NORMÁLNÍ DAMAGE - zůstává 2 -->
(set: $swiftMsg to "<span class='combat-swift-normal'>Rychlý úder - normální útok 2 dmg. Nepřítel má málo zdraví [" + (text: $enemyHP) + "/" + (text: $enemyMaxHP) + "].</span>")
(set: $combatLog to it + (a: $swiftMsg))
]
]
<style>
/* ═══════════════════════════════════════════════════ */
/* 💀 EXECUTE - POPRAVA */
/* ═══════════════════════════════════════════════════ */
/* ⚔️ ÚSPĚŠNÁ POPRAVA */
.combat-execute {
color: #ff0000 !important;
font-weight: bold !important;
font-size: 16px !important;
text-shadow: 0 0 15px rgba(255, 0, 0, 0.9) !important;
animation: executeFlash 0.5s ease-in-out !important;
}
@keyframes executeFlash {
0%, 100% { opacity: 1; }
50% { opacity: 0.5; text-shadow: 0 0 25px rgba(255, 0, 0, 1); }
}
/* ❌ NEÚSPĚŠNÁ POPRAVA */
.combat-execute-fail {
color: #888 !important;
font-size: 15px !important;
font-style: italic !important;
}
/* 🎴 EXECUTE KARTA */
.execute-card {
background: linear-gradient(135deg, rgba(139, 0, 0, 0.8), rgba(0, 0, 0, 0.9)) !important;
border-color: rgba(255, 0, 0, 0.8) !important;
position: relative;
overflow: hidden;
}
.execute-card.execute-active {
box-shadow: 0 0 30px rgba(255, 0, 0, 1) !important;
border-color: rgba(255, 0, 0, 1) !important;
animation: execute-ready 1s ease-in-out infinite;
}
@keyframes execute-ready {
0%, 100% { box-shadow: 0 0 25px rgba(255, 0, 0, 0.8); }
50% { box-shadow: 0 0 40px rgba(255, 0, 0, 1); }
}
.execute-card.execute-inactive {
filter: grayscale(60%) brightness(0.6);
opacity: 0.6;
}
.execute-card .card-name::after {
content: ' 💀';
color: #ff0000;
text-shadow: 0 0 10px rgba(255, 0, 0, 0.9);
}
/* ═══════════════════════════════════════════════════ */
/* ⚡ SWIFT STRIKE - RYCHLÝ ÚDER */
/* ═══════════════════════════════════════════════════ */
/* 🎴 OFFENSIVE CARD - RYCHLÝ ÚDER */
.offensive-card {
background: linear-gradient(135deg, rgba(30, 144, 255, 0.3), rgba(0, 191, 255, 0.4)) !important;
border-color: rgba(0, 191, 255, 0.8) !important;
}
.offensive-card::before,
.offensive-card::after {
border-color: #00bfff !important;
box-shadow: inset 0 0 10px rgba(0, 191, 255, 0.6) !important;
}
/* AKTIVNÍ SWIFT (nepřítel má 15+ HP) */
.offensive-card.swift-active {
box-shadow: 0 0 25px rgba(0, 191, 255, 1) !important;
animation: swift-pulse 1.2s ease-in-out infinite;
}
@keyframes swift-pulse {
0%, 100% {
box-shadow: 0 0 20px rgba(0, 191, 255, 0.7);
border-color: rgba(0, 191, 255, 0.8);
}
50% {
box-shadow: 0 0 35px rgba(0, 191, 255, 1);
border-color: rgba(0, 191, 255, 1);
}
}
/* NEAKTIVNÍ SWIFT (nepřítel má < 15 HP) */
.offensive-card.swift-inactive {
filter: brightness(0.8);
opacity: 0.85;
}
/* INDIKÁTOR NA KARTĚ */
.offensive-card .card-name::after {
content: ' ⚡';
color: #00bfff;
text-shadow: 0 0 10px rgba(0, 191, 255, 0.9);
}
</style>
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- JAVASCRIPT PRO DYNAMICKÉ TŘÍDY -->
<!-- ═══════════════════════════════════════════════════════════════ -->
(print: "<script>
(function() {
setTimeout(function() {
var enemyHp = " + (text: $enemyHP) + ";
// 💀 EXECUTE KARTY
var executeCards = document.querySelectorAll('.card.execute-card');
executeCards.forEach(function(card) {
var cardName = card.querySelector('.card-name');
if (cardName && cardName.textContent.includes('Poprava')) {
if (enemyHp < 16) {
card.classList.add('execute-active');
card.classList.remove('execute-inactive');
} else {
card.classList.add('execute-inactive');
card.classList.remove('execute-active');
}
}
});
// ⚡ SWIFT STRIKE KARTY
var swiftCards = document.querySelectorAll('.card.offensive-card');
swiftCards.forEach(function(card) {
var cardName = card.querySelector('.card-name');
if (cardName && cardName.textContent.includes('Rychlý úder')) {
if (enemyHp >= 15) {
card.classList.add('swift-active');
card.classList.remove('swift-inactive');
} else {
card.classList.add('swift-inactive');
card.classList.remove('swift-active');
}
}
});
}, 100);
})();
</script>"){<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- ⚡ FORTIFY HANDLER - BUFF SYSTEM (+5 K ÚTOKU PŘÍŠTÍ KOLO) -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- 🔧 INICIALIZACE PROMĚNNÝCH -->
(if: $fortifyActive is 0)[
(set: $fortifyActive to false)
(set: $fortifyBonusAttack to 0)
]
<!-- ⭐ DETEKCE A AKTIVACE FORTIFY KARTY -->
(if: $chosenPlayerCard contains "type" and $chosenPlayerCard's type is "buff")[
(if: $chosenPlayerCard's name is "Posílení")[
<!-- ✅ AKTIVUJ BUFF -->
(set: $fortifyActive to true)
(set: $fortifyBonusAttack to 5)
<!-- LOG -->
(set: $fortifyMsg to "<span class='combat-fortify'>POSÍLENÍ AKTIVNÍ! Příští útok +5 DMG</span>")
(set: $combatLog to it + (a: $fortifyMsg))
(set: $skipNormalResolve to false)
]
<!-- ⭐ APLIKACE BONUSU V PŘÍŠTÍM KOLE -->
](else-if: $fortifyActive is true)[
<!-- APLIKUJ BONUS K ÚTOKU -->
(set: $playerAttack to $playerAttack + $fortifyBonusAttack)
<!-- LOG -->
(set: $fortifyAppliedMsg to "<span class='combat-fortify-applied'>POSÍLENÍ APLIKOVÁNO! +" + (text: $fortifyBonusAttack) + " k útoku</span>")
(set: $combatLog to it + (a: $fortifyAppliedMsg))
<!-- IMPACT EFEKT -->
(print: "<script>
(function() {
setTimeout(function() {
var impact = document.createElement('div');
impact.className = 'fortify-impact';
document.body.appendChild(impact);
setTimeout(function() { impact.remove(); }, 1000);
}, 100);
})();
</script>")
<!-- RESET -->
(set: $fortifyActive to false)
(set: $fortifyBonusAttack to 0)
]
<style>
/* ═══════════════════════════════════════════════════ */
/* ⚡ FORTIFY BUFF STYLING */
/* ═══════════════════════════════════════════════════ */
/* 🃏 BUFF CARD */
.buff-card {
background: linear-gradient(135deg, rgba(255, 165, 0, 0.3), rgba(255, 215, 0, 0.4)) !important;
border-color: rgba(255, 215, 0, 0.9) !important;
box-shadow: 0 0 20px rgba(255, 215, 0, 0.5), inset 0 0 15px rgba(255, 165, 0, 0.3);
animation: fortify-glow 2s ease-in-out infinite;
}
.buff-card::before,
.buff-card::after {
border-color: #ffd700 !important;
box-shadow: inset 0 0 10px rgba(255, 215, 0, 0.6) !important;
}
</style>}{<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Fullscreen Demo</title>
<style>
body {
margin: 0;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
background: #111;
font-family: Arial, sans-serif;
}
/* Fullscreen tlačítko - absolutní pozicování */
.fullscreen-btn {
position: fixed;
top: 120px;
right: 20px;
background: rgba(0, 0, 0, 0.5);
color: white;
border: 1px solid rgba(255,255,255,0.3);
padding: 10px 20px;
font-size: 14px;
letter-spacing: 1px;
cursor: pointer;
transition: all 0.2s ease;
z-index: 9999;
backdrop-filter: blur(10px);
border-radius: 4px;
}
.fullscreen-btn:hover {
background: rgba(255,255,255,0.2);
border-color: white;
}
.fullscreen-btn:active {
transform: scale(0.95);
}
/* Skrýt tlačítko ve fullscreen módu (volitelné) */
.fullscreen-btn.in-fullscreen {
opacity: 0.3;
}
.fullscreen-btn.in-fullscreen:hover {
opacity: 1;
}
/* Demo obsah */
.demo-content {
text-align: center;
color: white;
}
.demo-content h1 {
font-size: 48px;
margin-bottom: 20px;
}
.demo-content p {
font-size: 18px;
opacity: 0.7;
}
</style>
</head>
<body>
<button class="fullscreen-btn" onclick="toggleFullscreen()">
⛶ FULLSCREEN
</button>
<script>
function toggleFullscreen() {
const btn = document.querySelector('.fullscreen-btn');
if (!document.fullscreenElement) {
// Vstup do fullscreen
document.documentElement.requestFullscreen().then(() => {
btn.textContent = '✕ EXIT FULLSCREEN';
btn.classList.add('in-fullscreen');
}).catch(err => {
alert('Fullscreen není podporován nebo byl blokován. Chyba: ' + err.message);
console.log('Fullscreen error:', err);
});
} else {
// Výstup z fullscreen
document.exitFullscreen().then(() => {
btn.textContent = '⛶ FULLSCREEN';
btn.classList.remove('in-fullscreen');
});
}
}
// Poslouchej změny fullscreen (např. když uživatel stiskne Esc)
document.addEventListener('fullscreenchange', () => {
const btn = document.querySelector('.fullscreen-btn');
if (!document.fullscreenElement) {
btn.textContent = '⛶ FULLSCREEN';
btn.classList.remove('in-fullscreen');
}
});
</script>
</body>
</html>}"V téhle vesnici moc s výdělkem nepochodíš. Tady nikdo nic nemá. Musí hledat štěstí jinde. Vydej se za hory, tam možná něco najdeš." Hned na to si hlídač této podivné vesnice opět dýchnul do dlaní, aby si je zahřál.
[[[Dej mi tvoje zlatky!|Hl2a]]
[[Zpět na pokec|Hlidac]]]
<!-- (link: "✮ načíst ")[(load-game: "slot1")]) -->(display: "InventoryHUD")"Ale víš ty co? Jak na tebe koukám, tak bych asi věděl," podrbal se strážný na zarudlém zátylku.
"Před polednem tudy projížděla obchodní karavana. Jejich velitel vyprávěl, že měli potyčku s lapkama a několik jeho mužů zemřelo. Možná by tě přijal. Pokud si pospíšíš, určitě je dostihneš."
(text-style:"italic")[Je ti jasné, že toto je jediná šance jak se dostat z této díry a něco si vydělat. Až se budeš cítit připraven, vydej se za karavanou.]
[
[[Pospíchat za karavanou, vstříc dobrodružství! |Zacatek]]
[[Zpět na pokec|Hlidac]]]
<!-- (link: "✮ načíst ")[(load-game: "slot1")]) -->(display: "InventoryHUD")Strážný se zamyslel, možná i trochu zatuhnul mrazem. Ale pak spustil s mrazivou párou od huby.
"Tahle vesnice mladej, je fakt díra. Nikde nic ... rozumíš tomu? Nebýt své rodiny, tak už tady dávno nejsem. Koukni se kolem sebe. Támhle jsou hory ... vidíš je jo? A támhle jsou další hory ..." začal mávat rukama kolem sebe. Pak se zakuckal a zmlkl.
[
[[Je tu nějaké nebezpečí? |Hl1a]]
[[Zpět na pokec|Hlidac]]]
<!-- (link: "✮ načíst ")[(load-game: "slot1")]) -->(display: "InventoryHUD")"Prý jsou v okolí lapkové," změřil si tě pohledem, jestli k nim náhodou nepatříš.
"Ale kromě divé zvěře sem nikdo nechodí. Koho by taky zajímala tahle díra," a hořce se u této poznámky usmál.
[
[[Zpět na pokec|Hlidac]]]
<!-- (link: "✮ načíst ")[(load-game: "slot1")]) -->(display: "InventoryHUD")"Nebuď drzej mladej a už neotravuj!" pohrozil hlídač.
V duchu ale tušíš, že by jsi ho snadno porazil, nicméně také tušíš, že nic ceného u sebe mít nebude. Zabloudil jsi prostě do špatného kraje. Bude lepší vydat se jinam ...
[
[[Zpět na pokec|Hlidac]]]
<!-- (link: "✮ načíst ")[(load-game: "slot1")]) -->(display: "InventoryHUD")Strážný procházející po vesnici je zmrzlý a zahřívá si ruce třením. Kouká na tebe, ale nedává na jevo žádné své emoce. Nejspíš by byl raději u krbu, než vykecával s nějakým pocestným.
[[[Řekni mi více o této vesnici?|Hl1]]
[[Nemáš nějakou zlatku pro mě? |HL2]]
[[Nevíš o nějaké práci? |HL3]]
[[Zpět do vesnice|Vesnice]]]
<!-- (link: "✮ načíst ")[(load-game: "slot1")]) -->(display: "InventoryHUD"){
<div id="statContainer">
<div class="player-stats-hud">
<div class="stat-umeni">
<span class="stat-label">(text-colour:#728c69)[úspěch]</span>
<span class="stat-value">4 - 6</span>
</div>
<div class="stat-mp">
<span class="stat-label">(text-colour:#8c6a69)[neúspěch]</span>
<span class="stat-value">0 - 3</span>
</div>
</div>
</div>
}Zde teprve bude obsah, zkuste mezitím, vesnici nebo trhy
[[Zpět|vyberlokaci]]{(display: "BattleScene")
<div class="text-divider divider-rpg"></div>
<!-- Úvodní text 1 (zobrazí se hned) -->
<div id="introText1" style="position:fixed; top:50%; left:50%; transform:translate(-50%, -50%);
z-index:10000;
background: linear-gradient(135deg, rgba(42,24,16,0.8) 0%, rgba(26,15,8,0.8) 100%);
border: 3px solid rgba(139,105,20,0.6);
border-radius: 2px;
padding: 30px;
max-width: 700px;
box-shadow: 0 8px 20px rgba(0,0,0,0.5);
transition: opacity 1s;
opacity: 1;
text-align: center;
color: #d4af37;">
Jako by to bylo včera, vybavuješ si ten pohnutek mysli...
</div>
<!-- První video (skryté na začátku) -->
<video id="introVideo1" src="https://files.catbox.moe/0iuju1.mp4" muted playsinline
style="position:fixed; top:0; left:50%; transform:translateX(-50%); width:100vw; height:100vh; object-fit:cover; z-index:9999; transition: opacity 1s; opacity: 0;">
</video>
<!-- Text 2 přes první video -->
<div id="videoText1" style="position:fixed; top:50%; left:50%; transform:translate(-50%, -50%);
z-index:10000;
background: linear-gradient(135deg, rgba(42,24,16,0.8) 0%, rgba(26,15,8,0.8) 100%);
border: 3px solid rgba(139,105,20,0.6);
border-radius: 2px;
padding: 30px;
max-width: 700px;
box-shadow: 0 8px 20px rgba(0,0,0,0.5);
transition: opacity 5s;
opacity: 0;
text-align: center;
color: #d4af37;">
...Opustit tuhle špinavou díru na konci světa...
</div>
<!-- Druhé video (skryté na začátku) -->
<video id="introVideo2" src="https://files.catbox.moe/cwa2cc.mp4" muted playsinline
style="position:fixed; top:0; left:50%; transform:translateX(-50%); width:100vw; height:100vh; object-fit:cover; z-index:9998; transition: opacity 1s; opacity: 0;">
</video>
<!-- Třetí video (skryté na začátku) - bude mít pomalý 5s fade-out -->
<video id="introVideo3" src="https://files.catbox.moe/g799kg.mp4" muted playsinline
style="position:fixed; top:0; left:50%; transform:translateX(-50%); width:100vw; height:100vh; object-fit:cover; z-index:9997; transition: opacity 5s; opacity: 0;">
</video>
<!-- Text 3 přes třetí video -->
<div id="videoText2" style="position:fixed; top:50%; left:50%; transform:translate(-50%, -50%);
z-index:10000;
background: linear-gradient(135deg, rgba(42,24,16,0.8) 0%, rgba(26,15,8,0.8) 100%);
border: 3px solid rgba(139,105,20,0.6);
border-radius: 2px;
padding: 30px;
max-width: 700px;
box-shadow: 0 8px 20px rgba(0,0,0,0.5);
transition: opacity 5s;
opacity: 0;
text-align: center;
color: #d4af37;">
...A tak necháváš vesnici Volka daleko za sebou.
</div>
<script>
(function() {
var introText1 = document.getElementById("introText1");
var video1 = document.getElementById("introVideo1");
var video2 = document.getElementById("introVideo2");
var video3 = document.getElementById("introVideo3");
var videoText1 = document.getElementById("videoText1");
var videoText2 = document.getElementById("videoText2");
// 1. Po 5 sekundách: zmizí první text, objeví se první video a druhý text
setTimeout(function() {
if (introText1) introText1.style.opacity = "0";
if (video1) {
video1.style.opacity = "1";
video1.play();
}
// Zobrazí druhý text přes video
if (videoText1) videoText1.style.opacity = "1";
// Spuštění zvuků
try {
if (typeof window.sceneSounds !== "undefined") {
window.sceneSounds.play("wind", 0.3, true, 0);
window.sceneSounds.play("footsteps", 0.4, false, 1000);
window.sceneSounds.play("heartbeat", 0.25, true, 500);
}
} catch(e) { console.log("Chyba zvuků:", e); }
}, 5000);
// 2. Po 10 sekundách: přechod na video2, mizí druhý text
setTimeout(function() {
if (video1) video1.style.opacity = "0";
if (video2) {
video2.style.opacity = "1";
video2.play();
}
// Začne mizet druhý text (5s dissolve)
if (videoText1) videoText1.style.opacity = "0";
}, 10000);
// 3. Po 15 sekundách: přechod na video3, objeví se třetí text
setTimeout(function() {
if (video2) video2.style.opacity = "0";
if (video3) {
video3.style.opacity = "1";
video3.play();
}
// Zobrazí se třetí text
if (videoText2) videoText2.style.opacity = "1";
}, 15000);
// 4. Po 17 sekundách (15s + 2s): začne mizet třetí video (5s fade-out)
setTimeout(function() {
if (video3) video3.style.opacity = "0";
}, 17000);
// 5. Po 20 sekundách: začne mizet třetí text
setTimeout(function() {
if (videoText2) videoText2.style.opacity = "0";
}, 20000);
// 6. Zastavení zvuků (v 25. sekundě)
setTimeout(function() {
if (typeof window.sceneSounds !== "undefined") {
window.sceneSounds.stopAll();
}
}, 25000);
})();
</script>
(live: 25s)[
(stop:)
(goto: "Nastavení postavy")
]}{
{
Balíček:
(if: $inventoryCounter <= 3 and $tipShown is not true)[
<div class="tip-absolute-center">
<div class="tip-content">
<img src="https://files.catbox.moe/pxrhgd.png" class="tip-icon">
<span class="tip-text">TIP: Pravé tlačítko myši zobrazí kartu v plné velikosti. Platí to i pro kartičky nevalidního balíčku uplně dole.</span>
</div>
</div>
(set: $tipShown to true)
]
(display: "CardBonusHandler")
(display: "DragonAnimation")
(if: $deckCards is 0 or $deckCards is "")[
(set: $deckCards to (a:))
]
<!-- VÝPOČET POČTU KARET A CELKOVÉ VÁHY -->
(set: $deckCardCount to $deckCards's length)
(set: $totalDeckWeight to 0)
(for: each _card, ...$deckCards)[
(set: _weight to $cardWeights's (_card's id))
(if: _weight is 0)[(set: _weight to 1)]
(set: $totalDeckWeight to $totalDeckWeight + _weight)
]
<!-- VALIDACE BALÍČKU -->
(set: $deckIsValid to (
$deckCardCount >= $deckMinCards and
$deckCardCount <= $deckMaxCards and
$totalDeckWeight <= $deckMaxWeight
))
(display: "CardWeightsSystem")
<div class="loadout-container">
<div class="deck-grid">
(for: each _i, ...(range: 1, 20))[
(if: $deckCards's length >= _i)[
(set: _card to $deckCards's (_i))
(set: _cardWeight to $cardWeights's (_card's id))
(if: _cardWeight is 0)[(set: _cardWeight to 1)]
(set: _cardHTML to '<div class="selector-card-wrapper filled" data-card-name="' + _card's name + '" data-card-image="' + _card's image + '">
<img src="' + _card's image + '" class="card-img">
<div class="card-hover-overlay">
<img src="https://files.catbox.moe/pxrhgd.png" class="hover-icon">
<span class="zoom-tooltip-bubble">
Pravé tlačítko myši zobrazí kartu v plné velikosti.
</span>
</div>
<div class="card-name">' + _card's name + '</div>
<div class="card-weight">
<img src="https://files.catbox.moe/ulzkcd.png" style="width: 1em; height: 1em; vertical-align: middle; pointer-events: none;">
' + (text: _cardWeight) + '
</div>
</div>')
(link: _cardHTML)[
(set: $removePosition to _i)
(go-to: "RemoveCardHelper")
]
](else:)[
(set: _emptyHTML to '<div class="selector-card-wrapper empty">
<div class="plus-icon">+</div>
<div class="card-name" style="opacity:0.3">Prázdné</div>
</div>')
(link: _emptyHTML)[
(set: $addingCardSlot to _i)
(go-to: "InventoryAddCard")
]
]
]
</div>
</div>
<div class="deck-stats-container">
<div class="deck-stat-box">
<div class="stat-label">Karty v balíčku</div>
<div class="stat-value (if: $deckCardCount < $deckMinCards)[stat-warning](else-if: $deckCardCount is $deckMaxCards)[stat-full]">
(print: $deckCardCount) / (print: $deckMaxCards)
</div>
(if: $deckCardCount < $deckMinCards)[
<div class="stat-warning-text"> Minimum: (print: $deckMinCards) karet</div>
]
</div>
<div class="deck-stat-box">
<div class="stat-label">Váha balíčku</div>
<div class="stat-value (if: $totalDeckWeight > $deckMaxWeight)[stat-error](else-if: $totalDeckWeight is $deckMaxWeight)[stat-full]">
(print: $totalDeckWeight) / (print: $deckMaxWeight)
</div>
(if: $totalDeckWeight > $deckMaxWeight)[
<div class="stat-error-text"> Přetíženo!</div>
]
</div>
<div class="deck-stat-box">
<div class="stat-label">Stav</div>
<div class="stat-value">
(if: $deckIsValid)[
(color: "#8fb586")[Vše připraveno<br>na souboj]
]
(else:)[
(color: "#c49378")[Neplní základní <br>požadavky]
]
</div>
</div>
</div>
<hr style="border-color: #d4af37; margin: 15px 0; opacity: 0.2;">
<div class="main-inventory-selection-container small-row">
(link-goto: '<div class="mini-category-card"><img src="https://files.catbox.moe/unw77b.png"><span>Zbraně</span></div>', "InventoryWeapons")
(link-goto: '<div class="mini-category-card"><img src="https://files.catbox.moe/16e8j3.png"><span>Brnění</span></div>', "InventoryArmor")
(link-goto: '<div class="mini-category-card"><img src="https://files.catbox.moe/ay077s.png"><span>Štíty</span></div>', "InventoryShields")
(link-goto: '<div class="mini-category-card"><img src="https://files.catbox.moe/ywsgon.png"><span>Předměty</span></div>', "InventoryConsumables")
(link-goto: '<div class="mini-category-card"><img src="https://files.catbox.moe/y2alsr.png"><span>Bojové karty</span></div>', "InventoryCombat")
</div>
<div style="text-align: center; margin-top: -10px;">
</div>
<span class="CinzelButton">
(text-colour: #1a1f13)[
(link: "Zpět do hry")[
(if: $returnPassage contains "Inventory")[(go-to: "StartHry")]
(else:)[(go-to: $returnPassage)]
]
]
</span>
<div style="text-align: center; margin-top: -10px;">
</div>
<!-- ═══════════════════════════════════════════════════════════════
STAV BALÍČKU - VALIDNÍ I NEVALIDNÍ VE STEJNÉM KONTEJNERU
═══════════════════════════════════════════════════════════════ -->
(if: $deckIsValid)[
<div class="default-deck-warning deck-valid-state">
<div class="valid-deck-text"><h5>Balíček se zdá vhodný na souboj.</h5></div>
</div>
](else:)[
<div class="default-deck-warning">
<div class="warning-text">
<h6>Nesplněné podmínky balíčku. Bude se používat základní balíček + 1 zbraň z karet, které máš přiřazené nahoře.</h6>
</div>
<div class="default-cards-grid">
<!-- ZÁKLADNÍ KARTY -->
<div class="default-card-mini">
<img src="https://files.catbox.moe/god1qw.jpg">
</div>
<div class="default-card-mini">
<img src="https://files.catbox.moe/usrumj.jpg">
</div>
<div class="default-card-mini">
<img src="https://files.catbox.moe/02uu8l.jpg">
</div>
<div class="default-card-mini">
<img src="https://files.catbox.moe/r28rc7.jpg">
</div>
<div class="default-card-mini">
<img src="https://files.catbox.moe/qblf9a.jpg">
</div>
<div class="default-card-mini">
<img src="https://files.catbox.moe/mpodxa.jpg">
</div>
<div class="default-card-mini">
<img src="https://files.catbox.moe/uyejeg.jpg">
</div>
<div class="default-card-mini">
<img src="https://files.catbox.moe/9w4o4h.jpg">
</div>
<div class="default-card-mini">
<img src="https://files.catbox.moe/qn8plu.jpg">
</div>
<div class="default-card-mini">
<img src="https://files.catbox.moe/xkdyig.jpg">
</div>
<!-- OTAZNÍK PRO NÁHODNOU ZBRAŇ -->
<div class="weapon-tooltip-container">
<div class="default-card-mini weapon-mystery">
<div class="mystery-icon">?</div>
<div class="default-card-name">Náhodná zbraň</div>
</div>
<span class="zoom-tooltip-bubble">
Jedna ze zbraňí, které máš přiřazené do balíčku bude vybrána. <br><br> <div class="text-divider divider-classic"></div><br> Pokdu nemáš přiřazenou žádnou zbraň, nevezmeš si žádnou.
</span>
</div>
</div>
]
<style>
/* ============================================
INVENTORY - FIXNÍ GRID JAKO AddCards SIZE-XL
============================================ */
tw-link, .link, a {
text-decoration: none !important;
border: none !important;
outline: none !important;
box-shadow: none !important;
color: inherit !important;
}
/* HLAVNÍ GRID KONTEJNER */
.deck-grid {
display: grid !important;
grid-template-columns: repeat(auto-fill, 145px) !important;
gap: 10px !important;
justify-content: center !important;
max-width: 1600px !important;
margin: 30px auto !important;
padding: 20px !important;
}
/* Odstranit Twine wrappery */
.deck-grid > tw-expression,
.deck-grid > tw-hook,
.deck-grid > tw-link {
display: contents !important;
}
.deck-grid br { display: none; }
/* KARTY - ZMENŠENÁ VELIKOST 150x183px */
.selector-card-wrapper,
.card-stack {
width: 150px !important;
height: 183px !important;
background: rgba(30, 25, 20, 0.5) !important;
border: 2px solid rgba(212, 175, 55, 0.4) !important;
border-radius: 0px !important;
padding: -10px !important;
position: relative !important;
transition: all 0.2s ease-in-out !important;
z-index: 1 !important;
display: flex !important;
flex-direction: column !important;
align-items: center !important;
justify-content: center !important;
}
.selector-card-wrapper:hover {
transform: scale(1.15) !important;
border-color: rgba(212, 175, 55, 1) !important;
box-shadow: 0 0 25px rgba(212, 175, 55, 0.7) !important;
z-index: 100 !important;
background: rgba(45, 35, 25, 1) !important;
}
/* OBRÁZKY */
.card-img {
width: 100% !important;
height: 180px !important;
object-fit: contain !important;
pointer-events: none !important;
}
/* NÁZEV KARTY */
.card-name {
color: #d4af37 !important;
font-family: 'Cinzel' !important;
font-size: 11px !important;
text-align: center !important;
pointer-events: none !important;
margin-top: 6px !important;
}
.card-weight {
position: absolute !important;
top: 6px !important;
left: 6px !important;
background: rgba(0, 0, 0, 0.4) !important;
color: #d4af37 !important;
padding: -5px -5px !important;
border-radius: 0px !important;
font-size: 20px;
/* Změna na sloupec (číslo nahoře, ikonka dole) */
display: flex !important;
flex-direction: column !important;
align-items: center !important;
justify-content: center !important;
gap: 0px !important;
pointer-events: none !important;
z-index: 20;
}
.card-weight h4 {
margin: 0 !important;
padding: 0 !important;
font-size: 50px !important; /* Trochu větší, aby vynikl embos */
font-family: 'Cinzel Decorative', serif !important;
color: #d4af37 !important;
}
/* PLUS IKONA */
.plus-icon {
font-size: 42px !important;
color: rgba(212, 175, 55, 0.3) !important;
pointer-events: none !important;
}
/* REMOVE BUTTON */
.remove-btn {
position: absolute !important;
top: 6px !important;
right: 6px !important;
width: 24px !important;
height: 24px !important;
background: #382307 !important;
color: white !important;
border-radius: 0px !important;
font-size: 14px !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
opacity: 0 !important;
cursor: pointer !important;
transition: opacity 0.2s ease !important;
}
.selector-card-wrapper:hover .remove-btn {
opacity: 0.8 !important;
}
/* BONUSOVÁ KARTA V CARD-STACK */
.card-stack {
position: relative !important;
}
.bonus-card-behind {
position: absolute !important;
top: 10px !important;
left: 30px !important;
width: 150px !important;
height: 183px !important;
background: rgba(20, 15, 10, 0.9) !important;
border: 2px solid rgba(255, 107, 53, 0.5) !important;
border-radius: 0px !important;
padding: 6px !important;
z-index: -1 !important;
pointer-events: none !important;
transform: rotate(4deg) !important;
box-shadow: 0 2px 8px rgba(255, 107, 53, 0.4) !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
}
.bonus-card-behind img {
width: 100% !important;
height: 133px !important;
object-fit: contain !important;
}
/* EQUIPNUTÉ KARTY */
.selector-card-wrapper.equipped {
border: 3px solid #FFD700 !important;
animation: glow 2s ease-in-out infinite !important;
}
@keyframes glow {
0%, 100% {
box-shadow: 0 0 15px rgba(255, 215, 0, 0.6);
}
50% {
box-shadow: 0 0 25px rgba(255, 215, 0, 1);
}
}
/* LEGENDARY KARTY */
.selector-card-wrapper.legendary {
border-color: rgba(255, 107, 53, 0.7) !important;
box-shadow: 0 0 12px rgba(255, 107, 53, 0.5) !important;
}
/* LOCKED KARTY */
.selector-card-wrapper.locked {
opacity: 0.3 !important;
cursor: not-allowed !important;
filter: grayscale(0.9) !important;
}
.selector-card-wrapper.locked:hover {
transform: none !important;
box-shadow: none !important;
}
/* ============================================
STATISTIKY BALÍČKU
============================================ */
.deck-stats-container {
display: flex;
justify-content: center;
gap: 15px;
margin: 15px auto;
flex-wrap: wrap;
max-width: 900px;
}
.deck-stat-box {
background: rgba(30, 25, 20, 0.9);
border: 2px solid rgba(212, 175, 55, 0.5);
border-radius: 0px;
padding: 8px 15px;
min-width: 150px;
text-align: center;
}
.stat-label {
color: #d4af37;
font-family: 'Cinzel', serif;
font-size: 11px;
margin-bottom: 4px;
opacity: 0.8;
}
.stat-value {
color: #ffffff;
font-family: 'Cinzel', serif;
font-size: 20px;
font-weight: bold;
margin: 3px 0;
}
.stat-valid { color: #4CAF50; text-shadow: 0 0 10px rgba(76, 175, 80, 0.5); }
.stat-invalid { color: #f44336; text-shadow: 0 0 10px rgba(244, 67, 54, 0.5); }
.stat-warning { color: #ff9800; text-shadow: 0 0 10px rgba(255, 152, 0, 0.5); }
.stat-error { color: #f44336; text-shadow: 0 0 10px rgba(244, 67, 54, 0.5); }
.stat-full { color: #2196F3; text-shadow: 0 0 10px rgba(33, 150, 243, 0.5); }
.stat-warning-text, .stat-error-text {
font-size: 10px;
margin-top: 3px;
font-family: 'Cinzel', serif;
}
.stat-warning-text { color: #ff9800; }
.stat-error-text { color: #f44336; }
/* ============================================
PODKATEGORIE
============================================ */
.main-inventory-selection-container {
display: flex;
justify-content: center;
flex-wrap: wrap;
gap: 8px;
margin: 15px auto;
}
.mini-category-card {
background: rgba(40, 38, 35, 0.8);
border: 1px solid rgba(212, 175, 55, 0.3);
border-radius: 0px;
padding: 6px 12px;
display: flex;
align-items: center;
gap: 10px;
transition: all 0.2s ease;
min-width: 110px;
}
.mini-category-card:hover {
background: rgba(212, 175, 55, 0.15);
border-color: rgba(212, 175, 55, 1);
transform: translateY(-2px);
box-shadow: 0 4px 10px rgba(0,0,0,0.5);
}
.mini-category-card img {
width: 28px;
height: 28px;
object-fit: contain;
}
.mini-category-card span {
color: #d4af37;
font-family: 'Cinzel';
font-size: 13px;
}
/* ============================================
NOTIFIKACE A VÝSTRAHY
============================================ */
.notification-message {
position: fixed;
top: 20px;
left: 50%;
transform: translateX(-50%);
z-index: 9999;
background: rgba(40, 40, 40, 0.95);
border: 2px solid #d4af37;
border-radius: 0px;
padding: 12px 24px;
max-width: 600px;
text-align: center;
color: #ffffff;
font-family: 'Cinzel Decorative', serif;
font-size: 14px;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.8);
animation: slideDown 0.7s ease;
}
@keyframes slideDown {
from {
opacity: 0;
transform: translateX(-50%) translateY(-30px);
}
to {
opacity: 1;
transform: translateX(-50%) translateY(0);
}
}
/* ============================================
STAV BALÍČKU - SDÍLENÝ KONTEJNER
============================================ */
.default-deck-warning {
background: rgba(150, 96, 81, 0.15);
border: 1px solid #966051;
border-radius: 0px;
padding: 25px;
margin: 25px auto;
height: 225px;
width: 1065px;
}
/* PŘEPSÁNÍ BAREV PRO VALIDNÍ STAV */
.default-deck-warning.deck-valid-state {
background: rgba(146, 150, 81, 0.15);
border-color: #617347;
border-radius: 0px;
padding: 25px;
margin: 25px auto;
height: 225px;
width: 1065px;
}
.valid-deck-text {
color: #475239;
font-family: 'Cinzel', serif;
font-size: 18px;
font-weight: bold;
text-align: center;
text-shadow: 0 0 12px rgba(76, 175, 80, 0.6);
letter-spacing: 1px;
}
.warning-header {
color: #ff4444;
font-family: 'Cinzel', serif;
font-size: 20px;
font-weight: bold;
text-align: center;
margin-bottom: 15px;
text-shadow: 0 0 10px rgba(255, 68, 68, 0.5);
letter-spacing: 2px;
}
.warning-text {
color: #ffcccc;
font-family: 'Cinzel', serif;
font-size: 20px;
text-align: center;
margin-bottom: 20px;
line-height: 1.6;
}
.default-cards-grid {
display: flex;
justify-content: center;
gap: 2px;
flex-wrap: wrap;
margin-top: 15px;
}
.default-card-mini {
background: rgba(30, 25, 20, 0.95);
border: 2px solid rgba(139, 0, 0, 0.6);
border-radius: 0px;
padding: 0px;
width: 90px;
height: 115px;
display: flex;
flex-direction: column;
align-items: center;
transition: all 0.3s ease;
}
.default-card-mini:hover {
transform: scale(1.1);
border-color: #ff4444;
box-shadow: 0 0 15px rgba(255, 68, 68, 0.5);
}
.default-card-mini img {
width: 110px;
height: 110px;
object-fit: contain;
margin-bottom: 8px;
/* ✅ PŘIDEJ TOTO */
position: relative;
z-index: 100;
}
.default-card-name {
color: #d4af37;
font-family: 'Cinzel', serif;
font-size: 11px;
text-align: center;
line-height: 1.3;
}
/* ============================================
MODAL PRO ZVĚTŠENÍ KARTY
============================================ */
.card-preview-overlay {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background: rgba(0, 0, 0, 0.95);
z-index: 10000;
justify-content: center;
align-items: center;
}
.card-preview-overlay.active {
display: flex;
}
.card-preview-image {
max-width: 500px;
max-height: 700px;
border: 4px solid #d4af37;
border-radius: 0px;
box-shadow: 0 0 60px rgba(212, 175, 55, 0.8);
}
/* ============================================
JAKÁ KARTA BUDE TYPE WEAOPON?
============================================ */
.weapon-mystery {
background: linear-gradient(135deg, rgba(30, 25, 20, 0.95), rgba(50, 40, 30, 0.95)) !important;
border-color: rgba(212, 175, 55, 0.8) !important;
position: relative;
overflow: hidden;
}
.weapon-mystery::before {
content: '';
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background: linear-gradient(45deg, transparent, rgba(212, 175, 55, 0.1), transparent);
animation: shimmer 3s infinite;
}
@keyframes shimmer {
0% { transform: translateX(-100%) translateY(-100%) rotate(45deg); }
100% { transform: translateX(100%) translateY(100%) rotate(45deg); }
}
.mystery-icon {
font-size: 48px;
color: #d4af37;
font-family: 'Cinzel', serif;
font-weight: bold;
text-shadow: 0 0 20px rgba(212, 175, 55, 0.8);
margin-bottom: 0px;
animation: pulse 2s infinite;
}
@keyframes pulse {
0%, 100% { opacity: 0.6; transform: scale(1); }
50% { opacity: 1; transform: scale(1.1); }
}
/* Obal, který drží kartu a tooltip pohromadě */
.weapon-tooltip-container {
position: relative;
display: inline-block;
}
/* Aktivace tvého tooltipu při najetí myší na kartu */
.weapon-tooltip-container:hover .zoom-tooltip-bubble {
opacity: 1;
transform: translate(-50%, -100%) translateY(0); /* Použije tvoji animaci */
pointer-events: auto;
}
/* Jelikož máš v originálu 'position: fixed', pro tohle ukotvení nad kartou
je lepší ho přepsat na 'absolute' jen pro tento případ */
.weapon-tooltip-container .zoom-tooltip-bubble {
position: absolute;
bottom: 10%; /* Nad kartu */
left: 50%;
/* Odstraníme fixed, aby to neutíkalo z obrazovky */
}
/* Obal, který drží kartu a tooltip pohromadě */
.weapon-tooltip-container {
position: relative;
display: inline-block;
}
/* Aktivace tvého tooltipu při najetí myší na kartu */
.weapon-tooltip-container:hover .zoom-tooltip-bubble {
opacity: 1;
transform: translate(-50%, -10%) translateY(-10px); /* Lehké posunutí nahoru nad kartu */
pointer-events: auto;
}
/* Úprava chování tvé existující třídy uvnitř kontejneru */
.weapon-tooltip-container .zoom-tooltip-bubble {
position: absolute;
bottom: 100%; /* Umístí tooltip nad kartu */
left: 50%;
transform: translate(-50%, -100%) translateY(0);
/* FIX PRO ŠÍŘKU */
width: 350px; /* Pevná šířka, aby nebyl úzký */
max-width: 80vw; /* Aby na mobilech nepřetekl obrazovku */
white-space: normal; /* Povolí textu zalomení na řádky */
height: auto; /* Výška se přizpůsobí textu */
line-height: 1.4; /* Lepší čitelnost textu */
/* Vynucení zobrazení (původně máš opacity 0) */
pointer-events: none;
transition: opacity 0.2s ease, transform 0.2s ease;
}
/* ============================================
HOVER OVERLAY S IKONOU – OPRAVENO
============================================ */
/* --- ZMĚNA: HOVER OVERLAY (Top Right pro ikonu) --- */
.card-hover-overlay {
position: absolute;
inset: 0;
background: rgba(0,0,0,0);
display: flex;
/* Změna zarovnání na vpravo nahoře */
align-items: flex-start !important;
justify-content: flex-end !important;
padding: 8px; /* Odstup od okraje */
opacity: 0.0;
transition: background 0.2s ease, opacity 0.2s ease;
pointer-events: none;
z-index: 5;
}
/* Aktivace při hover */
.selector-card-wrapper:hover .card-hover-overlay {
opacity: 1;
background: rgba(0,0,0,0.1); /* tady řešíme tmavost */
}
/* IKONA */
.hover-icon {
width: 60px;
height: 60px;
object-fit: contain;
filter: drop-shadow(0 0 15px rgba(212,175,55,0.9));
animation: pulseIcon 1.5s infinite;
z-index: 10;
opacity: 1; /* důležité */
}
/* Pulzování */
@keyframes pulseIcon {
0%,100% { transform: scale(1); }
50% { transform: scale(1.1); }
}
/* Jemné ztmavení samotného obrázku */
.selector-card-wrapper:hover .card-img {
opacity: 0.8;
transition: opacity 0.2s ease;
}
/* ============================================
tip
============================================ */
/* Samotná krabička s nápisem */
.tip-content {
display: flex;
align-items: center;
justify-content: center;
background: rgba(30, 25, 20, 0.95); /* Téměř neprůhledné, aby to bylo čitelné */
border: 1px solid #d4af37;
padding: 10px 25px;
box-shadow: 0 10px 30px rgba(0,0,0,0.8);
pointer-events: auto; /* Pokud bys chtěl na tip kliknout, tohle to umožní */
min-width: 300px;
}
.tip-icon {
width: 25px;
margin-right: 15px;
filter: drop-shadow(0 0 5px #d4af37);
}
.tip-text {
font-family: 'Cinzel', serif;
font-size: 14px;
color: #d4af37;
white-space: nowrap; /* Zabrání zalomení na dva řádky */
}
/* Definice skokového zmizení */
@keyframes suddenExit {
0% { opacity: 1; visibility: visible; }
99% { opacity: 1; visibility: visible; }
100% { opacity: 0; visibility: hidden; }
}
/* 1. TIP - Teď je úplně nahoře (s ikonou) */
.tip-absolute-center {
position: absolute;
left: 50%;
transform: translateX(-50%);
top: 5px !important; /* Posunuto úplně nahoru */
z-index: 9999;
width: auto;
pointer-events: none;
}
/* Přidej do <style> sekce */
.card-flying {
animation: flyToWeight 0.6s cubic-bezier(0.4, 0, 0.2, 1) forwards;
}
@keyframes flyToWeight {
0% {
transform: scale(1) translateY(0);
opacity: 1;
}
100% {
transform: scale(0.2) translateY(-200px);
opacity: 0;
}
}
</style>
<div class="card-preview-overlay" id="cardPreview">
<img class="card-preview-image" id="cardPreviewImg">
</div>
<script>
document.addEventListener("contextmenu", function(e){
const card = e.target.closest(".selector-card-wrapper.filled");
if(card){
e.preventDefault();
const imgSrc = card.getAttribute("data-card-image");
const preview = document.getElementById("cardPreview");
const previewImg = document.getElementById("cardPreviewImg");
previewImg.src = imgSrc;
preview.classList.add("active");
}
});
document.getElementById("cardPreview").addEventListener("click", function(){
this.classList.remove("active");
});{Your Text Here}
<script>
// Existující kód pro preview karty...
document.addEventListener("contextmenu", function(e){
const card = e.target.closest(".selector-card-wrapper.filled");
if(card){
e.preventDefault();
const imgSrc = card.getAttribute("data-card-image");
const preview = document.getElementById("cardPreview");
const previewImg = document.getElementById("cardPreviewImg");
previewImg.src = imgSrc;
preview.classList.add("active");
}
});
document.getElementById("cardPreview").addEventListener("click", function(){
this.classList.remove("active");
});
// NOVÁ ANIMACE PŘI PŘIDÁNÍ KARTY
function animateCardToWeight(cardElement) {
// Najdi stat box s váhou
const weightBox = document.querySelector('.deck-stat-box:nth-child(2)');
if (!weightBox) return;
// Získej pozice
const cardRect = cardElement.getBoundingClientRect();
const weightRect = weightBox.getBoundingClientRect();
// Vytvoř klon karty pro animaci
const clone = cardElement.cloneNode(true);
clone.style.position = 'fixed';
clone.style.left = cardRect.left + 'px';
clone.style.top = cardRect.top + 'px';
clone.style.width = cardRect.width + 'px';
clone.style.height = cardRect.height + 'px';
clone.style.zIndex = '10000';
clone.style.pointerEvents = 'none';
clone.style.transition = 'all 0.6s cubic-bezier(0.4, 0, 0.2, 1)';
document.body.appendChild(clone);
// Spusť animaci po krátkém timeoutu
setTimeout(() => {
clone.style.left = (weightRect.left + weightRect.width / 2 - 25) + 'px';
clone.style.top = (weightRect.top + weightRect.height / 2 - 30) + 'px';
clone.style.transform = 'scale(0.2)';
clone.style.opacity = '0';
}, 50);
// Odstraň klon po dokončení animace
setTimeout(() => {
clone.remove();
}, 700);
}
// Sleduj přidání nových karet
const observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
mutation.addedNodes.forEach((node) => {
if (node.nodeType === 1) {
const newCard = node.querySelector('.selector-card-wrapper.filled');
if (newCard) {
animateCardToWeight(newCard);
}
}
});
});
});
// Spusť observer na deck-grid
setTimeout(() => {
const deckGrid = document.querySelector('.deck-grid');
if (deckGrid) {
observer.observe(deckGrid, {
childList: true,
subtree: true
});
}
}, 100);
</script>
</script>
}
}{
<!-- Kontrola, které karty jsou v decku -->
(set: _cardsInDeck to (a:))
(for: each _c, ...$deckCards)[
(set: _cardsInDeck to _cardsInDeck + (a: _c's id))
]
<div class="deck-grid">
<!-- ═══════════════════════════════════════════════════════════════
VŠECHNY KARTY - POUZE OBRÁZKY
═══════════════════════════════════════════════════════════════ -->
<!-- REZAVÝ MEČ -->
(if: $hasWoodenSword and not (_cardsInDeck contains "woodenSword"))[
(link: '<div class="card" data-card-name="Rezavý meč"><img src="https://files.catbox.moe/8opbcl.jpg">
</div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "woodenSword")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "woodenSword",
"name", "Rezavý meč",
"image", "https://files.catbox.moe/8opbcl.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- DÝKA -->
(if: $hasDagger and not (_cardsInDeck contains "dagger"))[
(link: '<div class="card" data-card-name="Dýka"><img src="https://files.catbox.moe/bg7ln1.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "dagger")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
<!-- KVALITNÍ DÝKA - SPRÁVNĚ ✅ -->
(set: $deckCards to $deckCards + (a: (dm:
"id", "daggerQuality",
"name", "Kvalitní dýka",
"image", "https://files.catbox.moe/nwo1j2.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- KVALITNÍ DÝKA -->
(if: $hasDaggerQuality and not (_cardsInDeck contains "daggerQuality"))[
(link: '<div class="card" data-card-name="Kvalitní dýka"><img src="https://files.catbox.moe/nwo1j2.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "daggerQuality")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "daggerQuality",
"name", "Kvalitní dýka",
"image", "https://files.catbox.moe/nwo1j2.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- MEČ -->
(if: $hasSwordInv and not (_cardsInDeck contains "sword"))[
(link: '<div class="card" data-card-name="Meč"><img src="https://files.catbox.moe/hr73qv.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "sword")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "sword",
"name", "Meč",
"image", "https://files.catbox.moe/hr73qv.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- MISTROVSKÝ MEČ -->
(if: $hasSwordMaster and not (_cardsInDeck contains "swordMaster"))[
(link: '<div class="card" data-card-name="Mistrovský meč"><img src="https://files.catbox.moe/vb7rw7.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "swordMaster")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "swordMaster",
"name", "Mistrovský meč",
"image", "https://files.catbox.moe/vb7rw7.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- SEKERA -->
(if: $hasAxe and not (_cardsInDeck contains "axe"))[
(link: '<div class="card" data-card-name="Sekera"><img src="https://files.catbox.moe/3bgbsz.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "axe")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "axe",
"name", "Sekera",
"image", "https://files.catbox.moe/3bgbsz.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- VÁLEČNÁ SEKERA -->
(if: $hasAxeWar and not (_cardsInDeck contains "axeWar"))[
(link: '<div class="card" data-card-name="Válečná sekera"><img src="https://files.catbox.moe/vj52at.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "axeWar")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "axeWar",
"name", "Válečná sekera",
"image", "https://files.catbox.moe/vj52at.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- vlnitý zvlněný MEČ -->
(if: $hasGreatswordLegendary and not (_cardsInDeck contains "greatswordLegendary"))[
(link: '<div class="card" data-card-name="Zvlněný meč"><img src="https://files.catbox.moe/gbpr6a.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "greatswordLegendary")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "greatswordLegendary",
"name", "Zvlněný meč",
"image", "https://files.catbox.moe/gbpr6a.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- OBOURUČNÍ MEČ -->
(if: $hasGreatsword and not (_cardsInDeck contains "greatsword"))[
(link: '<div class="card" data-card-name="Obouruční meč"><img src="https://files.catbox.moe/2xd8jl.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "greatsword")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "greatsword",
"name", "Obouruční meč",
"image", "https://files.catbox.moe/2xd8jl.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- Jitřenka -->
(if: $hasMace and not (_cardsInDeck contains "mace"))[
(link: '<div class="card" data-card-name="Jitřenka"><img src="https://files.catbox.moe/rl4xsm.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "mace")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "mace",
"name", "Jitřenka",
"image", "https://files.catbox.moe/rl4xsm.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- Palcát -->
(if: $hasMorningstar and not (_cardsInDeck contains "morningstar"))[
(link: '<div class="card" data-card-name="Palcát"><img src="https://files.catbox.moe/47d521.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "morningstar")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "morningstar",
"name", "Palcát",
"image", "https://files.catbox.moe/47d521.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- KOPÍ -->
(if: $hasSpear and not (_cardsInDeck contains "spear"))[
(link: '<div class="card" data-card-name="Kopí"><img src="https://files.catbox.moe/c5u2x3.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "spear")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "spear",
"name", "Kopí",
"image", "https://files.catbox.moe/c5u2x3.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- HALAPARTNA -->
(if: $hasHalberd and not (_cardsInDeck contains "halberd"))[
(link: '<div class="card" data-card-name="Halapartna"><img src="https://files.catbox.moe/8ryt3d.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "halberd")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "halberd",
"name", "Halapartna",
"image", "https://files.catbox.moe/8ryt3d.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- VÁLEČNÉ KLADIVO -->
(if: $hasWarhammer and not (_cardsInDeck contains "warhammer"))[
(link: '<div class="card" data-card-name="Válečné kladivo"><img src="https://files.catbox.moe/sk5n4x.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "warhammer")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "warhammer",
"name", "Válečné kladivo",
"image", "https://files.catbox.moe/sk5n4x.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- BOJOVÁ SEKERA -->
(if: $hasBattleaxe and not (_cardsInDeck contains "battleaxe"))[
(link: '<div class="card" data-card-name="Bojová sekera"><img src="https://files.catbox.moe/hm88l5.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "battleaxe")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "battleaxe",
"name", "Bojová sekera",
"image", "https://files.catbox.moe/hm88l5.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- ŠAVLE -->
(if: $hasScimitar and not (_cardsInDeck contains "scimitar"))[
(link: '<div class="card" data-card-name="Šavle"><img src="https://files.catbox.moe/l90kma.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "scimitar")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "scimitar",
"name", "Šavle",
"image", "https://files.catbox.moe/l90kma.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- RAPÍR -->
(if: $hasRapier and not (_cardsInDeck contains "rapier"))[
(link: '<div class="card" data-card-name="Rapír"><img src="https://files.catbox.moe/f3ijtv.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "rapier")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "rapier",
"name", "Rapír",
"image", "https://files.catbox.moe/f3ijtv.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- KATANA -->
(if: $hasKatana and not (_cardsInDeck contains "katana"))[
(link: '<div class="card" data-card-name="Katana"><img src="https://files.catbox.moe/h2pl87.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "katana")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "katana",
"name", "Katana",
"image", "https://files.catbox.moe/h2pl87.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- CLAYMORE -->
(if: $hasClaymore and not (_cardsInDeck contains "claymore"))[
(link: '<div class="card" data-card-name="Claymore"><img src="https://files.catbox.moe/s2v3y5.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "claymore")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "claymore",
"name", "Claymore",
"image", "https://files.catbox.moe/s2v3y5.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- JEZDECKÉ KOPÍ -->
(if: $hasLance and not (_cardsInDeck contains "lance"))[
(link: '<div class="card" data-card-name="Jezdecké kopí"><img src="https://files.catbox.moe/c5u2x3.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "lance")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "lance",
"name", "Jezdecké kopí",
"image", "https://files.catbox.moe/c5u2x3.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- CEP -->
(if: $hasFlail and not (_cardsInDeck contains "flail"))[
(link: '<div class="card" data-card-name="Cep"><img src="https://files.catbox.moe/sk5n4x.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "flail")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "flail",
"name", "Cep",
"image", "https://files.catbox.moe/sk5n4x.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- KRÁTKÝ MEČ -->
(if: $hasShortsword and not (_cardsInDeck contains "shortsword"))[
(link: '<div class="card" data-card-name="Krátký meč"><img src="https://files.catbox.moe/eattgi.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "shortsword")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "shortsword",
"name", "Krátký meč",
"image", "https://files.catbox.moe/eattgi.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- DLOUHÝ LUK -->
(if: $hasLongbow and not (_cardsInDeck contains "longbow"))[
(link: '<div class="card" data-card-name="Dlouhý luk"><img src="https://files.catbox.moe/7qak07.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "longbow")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "longbow",
"name", "Dlouhý luk",
"image", "https://files.catbox.moe/7qak07.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- KUŠE -->
(if: $hasCrossbow and not (_cardsInDeck contains "crossbow"))[
(link: '<div class="card" data-card-name="Kuše"><img src="https://files.catbox.moe/2olwuv.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "crossbow")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "crossbow",
"name", "Kuše",
"image", "https://files.catbox.moe/2olwuv.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- DRAKOBIJEC (LEGENDARY) -->
(if: $hasDragonslayer and not (_cardsInDeck contains "dragonslayer"))[
(link: '<div class="card legendary" data-card-name="Drakobijec"><img src="https://files.catbox.moe/vf3p07.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "dragonslayer")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "dragonslayer",
"name", "Drakobijec",
"image", "https://files.catbox.moe/vf3p07.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- EXCALIBUR (LEGENDARY) -->
(if: $hasExcalibur and not (_cardsInDeck contains "excalibur"))[
(link: '<div class="card legendary" data-card-name="Excalibur"><img src="https://files.catbox.moe/vf3p07.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "excalibur")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "excalibur",
"name", "Excalibur",
"image", "https://files.catbox.moe/vf3p07.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- STÍNOVÉ OSTŘÍ (LEGENDARY) -->
(if: $hasShadowblade and not (_cardsInDeck contains "shadowblade"))[
(link: '<div class="card legendary" data-card-name="Stínové ostří"><img src="https://files.catbox.moe/f3ijtv.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "shadowblade")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "shadowblade",
"name", "Stínové ostří",
"image", "https://files.catbox.moe/f3ijtv.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- ŽNEC DUŠÍ (LEGENDARY) -->
(if: $hasSoulreaper and not (_cardsInDeck contains "soulreaper"))[
(link: '<div class="card legendary" data-card-name="Žnec duší"><img src="https://files.catbox.moe/s2v3y5.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "soulreaper")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "soulreaper",
"name", "Žnec duší",
"image", "https://files.catbox.moe/s2v3y5.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- PŘIVOLÁVAČ BOUŘÍ s bonusovou kartou -->
(if: $hasStormbringer and not (_cardsInDeck contains "stormbringer"))[
<div class="card-stack">
(link: '<div class="card legendary" data-card-name="Přivolávač bouří"><img src="https://files.catbox.moe/4p7cwe.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "stormbringer")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "stormbringer",
"name", "Přivolávač bouří",
"image", "https://files.catbox.moe/4p7cwe.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
<div class="bonus-card-behind">
<img src="https://files.catbox.moe/j9sxft.jpg">
</div>
</div>
]
<!-- HŮL OHNIVÉ KOULE -->
(if: $hasFireballStaff and not (_cardsInDeck contains "fireballStaff"))[
(link: '<div class="card" data-card-name="Hůl ohnivé koule"><img src="https://files.catbox.moe/7qak07.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "fireballStaff")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "fireballStaff",
"name", "Hůl ohnivé koule",
"image", "https://files.catbox.moe/7qak07.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- HŮLKA BLESKU -->
(if: $hasLightningWand and not (_cardsInDeck contains "lightningWand"))[
(link: '<div class="card" data-card-name="Hůlka blesku"><img src="https://files.catbox.moe/2olwuv.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "lightningWand")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "lightningWand",
"name", "Hůlka blesku",
"image", "https://files.catbox.moe/2olwuv.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- LEDOVÁ SFÉRA -->
(if: $hasFrostOrb and not (_cardsInDeck contains "frostOrb"))[
(link: '<div class="card" data-card-name="Ledová sféra"><img src="https://files.catbox.moe/9cgxs9.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "frostOrb")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "frostOrb",
"name", "Ledová sféra",
"image", "https://files.catbox.moe/9cgxs9.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- ARKÁNOVÝ VRHAČ -->
(if: $hasArcaneBlaster and not (_cardsInDeck contains "arcaneBlaster"))[
(link: '<div class="card" data-card-name="Arkánový vrhač"><img src="https://files.catbox.moe/sk5n4x.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "arcaneBlaster")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "arcaneBlaster",
"name", "Arkánový vrhač",
"image", "https://files.catbox.moe/sk5n4x.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- ŽEZLO PRÁZDNOTY (LEGENDARY) -->
(if: $hasVoidScepter and not (_cardsInDeck contains "voidScepter"))[
(link: '<div class="card legendary" data-card-name="Žezlo prázdnoty"><img src="https://files.catbox.moe/vf3p07.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "voidScepter")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "voidScepter",
"name", "Žezlo prázdnoty",
"image", "https://files.catbox.moe/vf3p07.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- PRUT SLUNEČNÍHO PAPRSKU -->
(if: $hasSunbeamRod and not (_cardsInDeck contains "sunbeamRod"))[
(link: '<div class="card" data-card-name="Prut slunečního paprsku"><img src="https://files.catbox.moe/7qak07.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "sunbeamRod")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "sunbeamRod",
"name", "Prut slunečního paprsku",
"image", "https://files.catbox.moe/7qak07.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- STÍNOVÝ ŠÍP -->
(if: $hasShadowBolt and not (_cardsInDeck contains "shadowBolt"))[
(link: '<div class="card" data-card-name="Stínový šíp"><img src="https://files.catbox.moe/f3ijtv.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "shadowBolt")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "shadowBolt",
"name", "Stínový šíp",
"image", "https://files.catbox.moe/f3ijtv.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- CHAOTICKÁ KOULE -->
(if: $hasChaosOrb and not (_cardsInDeck contains "chaosOrb"))[
(link: '<div class="card" data-card-name="Chaotická koule"><img src="https://files.catbox.moe/8ryt3d.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "chaosOrb")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "chaosOrb",
"name", "Chaotická koule",
"image", "https://files.catbox.moe/8ryt3d.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- HVĚZDNÝ PÁD -->
(if: $hasStarfall and not (_cardsInDeck contains "starfall"))[
(link: '<div class="card legendary" data-card-name="Hvězdný pád"><img src="https://files.catbox.moe/vf3p07.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "starfall")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "starfall",
"name", "Hvězdný pád",
"image", "https://files.catbox.moe/vf3p07.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- MYSTICKÁ STŘELA -->
(if: $hasMysticMissile and not (_cardsInDeck contains "mysticMissile"))[
(link: '<div class="card" data-card-name="Mystická střela"><img src="https://files.catbox.moe/2olwuv.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "mysticMissile")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "mysticMissile",
"name", "Mystická střela",
"image", "https://files.catbox.moe/2olwuv.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- KOMPOZITNÍ LUK -->
(if: $hasCompositeBow and not (_cardsInDeck contains "compositebow"))[
(link: '<div class="card" data-card-name="Kompozitní luk"><img src="https://files.catbox.moe/7qak07.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "compositebow")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "compositebow",
"name", "Kompozitní luk",
"image", "https://files.catbox.moe/7qak07.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- REFLEXNÍ LUK -->
(if: $hasRecurveBow and not (_cardsInDeck contains "recurvebow"))[
(link: '<div class="card" data-card-name="Reflexní luk"><img src="https://files.catbox.moe/7qak07.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "recurvebow")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "recurvebow",
"name", "Reflexní luk",
"image", "https://files.catbox.moe/7qak07.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- TĚŽKÁ KUŠE -->
(if: $hasHeavyCrossbow and not (_cardsInDeck contains "heavyCrossbow"))[
(link: '<div class="card" data-card-name="Těžká kuše"><img src="https://files.catbox.moe/2olwuv.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "heavyCrossbow")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "heavyCrossbow",
"name", "Těžká kuše",
"image", "https://files.catbox.moe/2olwuv.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- OPAKUJÍCÍ KUŠE -->
(if: $hasRepeatingCrossbow and not (_cardsInDeck contains "repeatingCrossbow"))[
(link: '<div class="card" data-card-name="Opakující kuše"><img src="https://files.catbox.moe/2olwuv.png">
</div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "repeatingCrossbow")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "repeatingCrossbow",
"name", "Opakující kuše",
"image", "https://files.catbox.moe/2olwuv.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- VÁLEČNÝ LUK -->
(if: $hasWarbow and not (_cardsInDeck contains "warbow"))[
(link: '<div class="card" data-card-name="Válečný luk"><img src="https://files.catbox.moe/7qak07.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "warbow")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "warbow",
"name", "Válečný luk",
"image", "https://files.catbox.moe/7qak07.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- ODSTŘELOVAČSKÁ KUŠE -->
(if: $hasSniperCrossbow and not (_cardsInDeck contains "sniperCrossbow"))[
(link: '<div class="card" data-card-name="Odstřelovačská kuše"><img src="https://files.catbox.moe/2olwuv.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "sniperCrossbow")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "sniperCrossbow",
"name", "Odstřelovačská kuše",
"image", "https://files.catbox.moe/2olwuv.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
(if: $hasHunterBow and not (_cardsInDeck contains "hunterBow"))[
(link: '<div class="card" data-card-name="Lovecký luk"><img src="https://files.catbox.moe/s29dm7.jpg" style="width:100%"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "hunterBow")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "hunterBow",
"name", "Lovecký luk",
"image", "https://files.catbox.moe/s29dm7.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- ELFSKÝ LUK -->
(if: $hasElvenBow and not (_cardsInDeck contains "elvenBow"))[
(link: '<div class="card" data-card-name="Elfský luk"><img src="https://files.catbox.moe/h2pl87.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "elvenBow")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "elvenBow",
"name", "Elfský luk",
"image", "https://files.catbox.moe/h2pl87.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- DRAČÍ KUŠE -->
(if: $hasDragonCrossbow and not (_cardsInDeck contains "dragonCrossbow"))[
(link: '<div class="card legendary" data-card-name="Dračí kuše"><img src="https://files.catbox.moe/vf3p07.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "dragonCrossbow")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "dragonCrossbow",
"name", "Dračí kuše",
"image", "https://files.catbox.moe/vf3p07.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- LUK VĚTRU -->
(if: $hasWindbow and not (_cardsInDeck contains "windbow"))[
(link: '<div class="card" data-card-name="Luk větru"><img src="https://files.catbox.moe/7qak07.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "windbow")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "windbow",
"name", "Luk větru",
"image", "https://files.catbox.moe/7qak07.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- MEDITACE -->
(if: $hasMeditate and not (_cardsInDeck contains "meditate"))[
(link: '<div class="card" data-card-name="Meditace"><img src="https://files.catbox.moe/p8vj5l.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "meditate")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "meditate",
"name", "Natrhsval",
"image", "https://files.catbox.moe/p8vj5l.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- ODPOČINEK -->
(if: $hasRest and not (_cardsInDeck contains "rest"))[
(link: '<div class="card" data-card-name="Odpočinek"><img src="https://files.catbox.moe/pyet8q.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "rest")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "rest",
"name", "Odpočinek",
"image", "https://files.catbox.moe/pyet8q.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- PĚSTÍ -->
(if: $hasFist and not (_cardsInDeck contains "fist"))[
(link: '<div class="card" data-card-name="Pěstí"><img src="https://files.catbox.moe/g0veup.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "fist")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "fist",
"name", "Pěstí",
"image", "https://files.catbox.moe/g0veup.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- NADECHNOUT SE -->
(if: $hasBreath and not (_cardsInDeck contains "breathe"))[
(link: '<div class="card" data-card-name="Nadechnout se"><img src="https://files.catbox.moe/7qak07.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "breathe")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "breathe",
"name", "Nadechnout se",
"image", "https://files.catbox.moe/7qak07.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- LEHKÝ KRYT -->
(if: $hasLightCover and not (_cardsInDeck contains "lightCover"))[
(link: '<div class="card" data-card-name="Lehký kryt"><img src="https://files.catbox.moe/0tx3ox.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "lightCover")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "lightCover",
"name", "Lehký kryt",
"image", "https://files.catbox.moe/0tx3ox.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- KRYT -->
(if: $hasCover and not (_cardsInDeck contains "cover"))[
(link: '<div class="card" data-card-name="Kryt"><img src="https://files.catbox.moe/fo44qb.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "cover")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "cover",
"name", "Kryt",
"image", "https://files.catbox.moe/fo44qb.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- NAKOPNUTÍ -->
(if: $hasKick and not (_cardsInDeck contains "kick"))[
(link: '<div class="card" data-card-name="Nakopnutí"><img src="https://files.catbox.moe/ijd3ez.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "kick")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "kick",
"name", "Nakopnutí",
"image", "https://files.catbox.moe/ijd3ez.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- KOŘALKA -->
(if: $hasKoralka and not (_cardsInDeck contains "koralka"))[
(link: '<div class="card" data-card-name="Kořalka"><img src="https://files.catbox.moe/9cgxs9.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "koralka")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "koralka",
"name", "Kořalka",
"image", "https://files.catbox.moe/9cgxs9.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- ÚHYB -->
(if: $hasDodge and not (_cardsInDeck contains "dodge"))[
(link: '<div class="card" data-card-name="Úhyb"><img src="https://files.catbox.moe/rhusru.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "dodge")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "dodge",
"name", "Úhyb",
"image", "https://files.catbox.moe/rhusru.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- PROTIÚTOK -->
(if: $hasCounter and not (_cardsInDeck contains "counter"))[
(link: '<div class="card" data-card-name="Protiútok"><img src="https://files.catbox.moe/c3sxec.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "counter")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "counter",
"name", "Protiútok",
"image", "https://files.catbox.moe/c3sxec.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- FINTA -->
(if: $hasFeint and not (_cardsInDeck contains "feint"))[
(link: '<div class="card" data-card-name="Finta"><img src="https://files.catbox.moe/7qak07.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "feint")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "feint",
"name", "Finta",
"image", "https://files.catbox.moe/7qak07.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- SILOVÝ ÚDER -->
(if: $hasPowerStrike and not (_cardsInDeck contains "powerStrike"))[
(link: '<div class="card" data-card-name="Silový úder"><img src="https://files.catbox.moe/sk5n4x.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "powerStrike")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "powerStrike",
"name", "Silový úder",
"image", "https://files.catbox.moe/sk5n4x.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- DVOJITÝ SEK -->
(if: $hasDoubleSlash and not (_cardsInDeck contains "doubleSlash"))[
(link: '<div class="card" data-card-name="Dvojitý sek"><img src="https://files.catbox.moe/r6t44r.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "doubleSlash")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "doubleSlash",
"name", "Dvojitý sek",
"image", "https://files.catbox.moe/r6t44r.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- ZUŘIVOST -->
(if: $hasBerserkerRage and not (_cardsInDeck contains "berserkerRage"))[
(link: '<div class="card" data-card-name="Zuřivost"><img src="https://files.catbox.moe/4gtc4e.jpg">
</div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "berserkerRage")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "berserkerRage",
"name", "Zuřivost",
"image", "https://files.catbox.moe/4gtc4e.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- PŘESNÝ ÚDER -->
(if: $hasPrecisionStrike and not (_cardsInDeck contains "precisionStrike"))[
(link: '<div class="card" data-card-name="Přesný úder"><img src="https://files.catbox.moe/2yoy72.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "precisionStrike")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "precisionStrike",
"name", "Přesný úder",
"image", "https://files.catbox.moe/2yoy72.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- POPRAVA --><!-- POPRAVA -->
(if: $hasExecute and not (_cardsInDeck contains "execute"))[
(link: '<div class="card" data-card-name="Poprava"><img src="https://files.catbox.moe/sgxm5s.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "execute")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "execute",
"name", "Poprava",
"image", "https://files.catbox.moe/sgxm5s.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- ŽELEZNÁ VŮLE -->
(if: $hasIronWill and not (_cardsInDeck contains "ironWill"))[
(link: '<div class="card" data-card-name="Železná vůle"><img src="https://files.catbox.moe/9aa6ns.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "ironWill")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "ironWill",
"name", "Železná vůle",
"image", "https://files.catbox.moe/9aa6ns.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- ODRAŽENÍ -->
(if: $hasDeflect and not (_cardsInDeck contains "deflect"))[
(link: '<div class="card" data-card-name="Odražení"><img src="https://files.catbox.moe/y8q8tv.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "deflect")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "deflect",
"name", "Odražení",
"image", "https://files.catbox.moe/y8q8tv.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- POSÍLENÍ -->
(if: $hasFortify and not (_cardsInDeck contains "fortify"))[
(link: '<div class="card" data-card-name="Posílení"><img src="https://files.catbox.moe/yjdfgn.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "fortify")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "fortify",
"name", "Posílení",
"image", "https://files.catbox.moe/yjdfgn.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- PARÍROVÁNÍ -->
(if: $hasParry and not (_cardsInDeck contains "parry"))[
(link: '<div class="card" data-card-name="Parírování"><img src="https://files.catbox.moe/r09jgb.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "parry")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "parry",
"name", "Parírování",
"image", "https://files.catbox.moe/r09jgb.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- RYCHLÝ ÚDER -->
(if: $hasSwiftStrike and not (_cardsInDeck contains "swiftStrike"))[
(link: '<div class="card" data-card-name="Rychlý úder"><img src="https://files.catbox.moe/mr6iaw.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "swiftStrike")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "swiftStrike",
"name", "Rychlý úder",
"image", "https://files.catbox.moe/mr6iaw.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- KRYTÝ ÚTOK -->
(if: $hasGuardedAttack and not (_cardsInDeck contains "guardedAttack"))[
(link: '<div class="card" data-card-name="Krytý útok"><img src="https://files.catbox.moe/83kxod.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "guardedAttack")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "guardedAttack",
"name", "Krytý útok",
"image", "https://files.catbox.moe/83kxod.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- TAKTICKÝ ÚDER -->
(if: $hasTacticalStrike and not (_cardsInDeck contains "tacticalStrike"))[
(link: '<div class="card" data-card-name="Taktický úder"><img src="https://files.catbox.moe/pxcdyc.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "tacticalStrike")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "tacticalStrike",
"name", "Taktický úder",
"image", "https://files.catbox.moe/pxcdyc.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- ADRENALIN -->
(if: $hasAdrenaline and not (_cardsInDeck contains "adrenaline"))[
(link: '<div class="card" data-card-name="Adrenalin"><img src="https://files.catbox.moe/g9he6c.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "adrenaline")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "adrenaline",
"name", "Adrenalin",
"image", "https://files.catbox.moe/g9he6c.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- POSLEDNÍ VZDOR -->
(if: $hasLastStand and not (_cardsInDeck contains "lastStand"))[
(link: '<div class="card" data-card-name="Poslední vzdor"><img src="https://files.catbox.moe/gw1fxk.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "lastStand")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "lastStand",
"name", "Poslední vzdor",
"image", "https://files.catbox.moe/gw1fxk.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- DRUHÝ DECH -->
(if: $hasSecondWind and not (_cardsInDeck contains "secondWind"))[
(link: '<div class="card" data-card-name="Druhý dech"><img src="https://files.catbox.moe/pegu3z.jpg"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "secondWind")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "secondWind",
"name", "Druhý dech",
"image", "https://files.catbox.moe/pegu3z.jpg"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- DŘEVĚNÝ ŠTÍT -->
(if: $hasWoodenShield and not (_cardsInDeck contains "woodenShield"))[
(link: '<div class="card" data-card-name="Dřevěný štít"><img src="https://files.catbox.moe/9cgxs9.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "woodenShield")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "woodenShield",
"name", "Dřevěný štít",
"image", "https://files.catbox.moe/9cgxs9.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- ŽELEZNÝ ŠTÍT -->
(if: $hasIronShield and not (_cardsInDeck contains "ironShield"))[
(link: '<div class="card" data-card-name="Železný štít"><img src="https://files.catbox.moe/fg8ccm.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "ironShield")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "ironShield",
"name", "Železný štít",
"image", "https://files.catbox.moe/fg8ccm.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- VĚŽOVÝ ŠTÍT -->
(if: $hasTowerShield and not (_cardsInDeck contains "towerShield"))[
(link: '<div class="card" data-card-name="Věžový štít"><img src="https://files.catbox.moe/y8q8tv.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "towerShield")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "towerShield",
"name", "Věžový štít",
"image", "https://files.catbox.moe/y8q8tv.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- SVITEK OHNIVÉ KOULE -->
(if: $hasScrollFireball and not (_cardsInDeck contains "scrollFireball"))[
(link: '<div class="card" data-card-name="Svitek ohnivé koule"><img src="https://files.catbox.moe/2olwuv.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "scrollFireball")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "scrollFireball",
"name", "Svitek ohnivé koule",
"image", "https://files.catbox.moe/2olwuv.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- SVITEK LÉČENÍ -->
(if: $hasScrollHeal and not (_cardsInDeck contains "scrollHeal"))[
(link: '<div class="card" data-card-name="Svitek léčení"><img src="https://files.catbox.moe/9cgxs9.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "scrollHeal")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "scrollHeal",
"name", "Svitek léčení",
"image", "https://files.catbox.moe/9cgxs9.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- SVITEK OCHRANY -->
(if: $hasScrollShield and not (_cardsInDeck contains "scrollShield"))[
(link: '<div class="card"><img src="https://files.catbox.moe/fg8ccm.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "scrollShield")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "scrollShield",
"name", "Svitek ochrany",
"image", "https://files.catbox.moe/fg8ccm.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- SVITEK BLESKU -->
(if: $hasScrollLightning and not (_cardsInDeck contains "scrollLightning"))[
(link: '<div class="card" data-card-name="Svitek blesku"><img src="https://files.catbox.moe/7qak07.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "scrollLightning")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "scrollLightning",
"name", "Svitek blesku",
"image", "https://files.catbox.moe/7qak07.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- SVITEK MRAZU -->
(if: $hasScrollFrost and not (_cardsInDeck contains "scrollFrost"))[
(link: '<div class="card" data-card-name="Svitek mrazu"><img src="https://files.catbox.moe/9cgxs9.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "scrollFrost")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "scrollFrost",
"name", "Svitek mrazu",
"image", "https://files.catbox.moe/9cgxs9.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- SVITEK TELEPORTACE -->
(if: $hasScrollTeleport and not (_cardsInDeck contains "scrollTeleport"))[
(link: '<div class="card" data-card-name="Svitek teleportace"><img src="https://files.catbox.moe/2olwuv.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "scrollTeleport")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "scrollTeleport",
"name", "Svitek teleportace",
"image", "https://files.catbox.moe/2olwuv.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- SVITEK ZMRTVÝCHVSTÁNÍ (LEGENDARY) -->
(if: $hasScrollRevive and not (_cardsInDeck contains "scrollRevive"))[
(link: '<div class="card legendary" data-card-name="Svitek zmrtvýchvstání"><img src="https://files.catbox.moe/vf3p07.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "scrollRevive")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "scrollRevive",
"name", "Svitek zmrtvýchvstání",
"image", "https://files.catbox.moe/vf3p07.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- MALÝ LEKTVAR ZDRAVÍ -->
(if: $hasPotionHealthSmall and not (_cardsInDeck contains "potionHealthSmall"))[
(link: '<div class="card" data-card-name="Malý lektvar zdraví"><img src="https://files.catbox.moe/9cgxs9.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "potionHealthSmall")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "potionHealthSmall",
"name", "Malý lektvar zdraví",
"image", "https://files.catbox.moe/9cgxs9.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- STŘEDNÍ LEKTVAR ZDRAVÍ -->
(if: $hasPotionHealthMedium and not (_cardsInDeck contains "potionHealthMedium"))[
(link: '<div class="card" data-card-name="Střední lektvar zdraví"><img src="https://files.catbox.moe/9cgxs9.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "potionHealthMedium")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "potionHealthMedium",
"name", "Střední lektvar zdraví",
"image", "https://files.catbox.moe/9cgxs9.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- VELKÝ LEKTVAR ZDRAVÍ -->
(if: $hasPotionHealthLarge and not (_cardsInDeck contains "potionHealthLarge"))[
(link: '<div class="card" data-card-name="Velký lektvar zdraví"><img src="https://files.catbox.moe/9cgxs9.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "potionHealthLarge")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "potionHealthLarge",
"name", "Velký lektvar zdraví",
"image", "https://files.catbox.moe/9cgxs9.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- LEKTVAR SÍLY -->
(if: $hasPotionStrength and not (_cardsInDeck contains "potionStrength"))[
(link: '<div class="card" data-card-name="Lektvar síly"><img src="https://files.catbox.moe/sk5n4x.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "potionStrength")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "potionStrength",
"name", "Lektvar síly",
"image", "https://files.catbox.moe/sk5n4x.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- LEKTVAR OBRANY -->
(if: $hasPotionDefense and not (_cardsInDeck contains "potionDefense"))[
(link: '<div class="card" data-card-name="Lektvar obrany"><img src="https://files.catbox.moe/fg8ccm.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "potionDefense")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "potionDefense",
"name", "Lektvar obrany",
"image", "https://files.catbox.moe/fg8ccm.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- LEKTVAR RYCHLOSTI -->
(if: $hasPotionSpeed and not (_cardsInDeck contains "potionSpeed"))[
(link: '<div class="card" data-card-name="Lektvar rychlosti"><img src="https://files.catbox.moe/7qak07.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "potionSpeed")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "potionSpeed",
"name", "Lektvar rychlosti",
"image", "https://files.catbox.moe/7qak07.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- LEKTVAR NESMRTELNOSTI (LEGENDARY) -->
(if: $hasPotionInvincibility and not (_cardsInDeck contains "potionInvincibility"))[
(link: '<div class="card legendary" data-card-name="Lektvar nesmrtelnosti"><img src="https://files.catbox.moe/vf3p07.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "potionInvincibility")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "potionInvincibility",
"name", "Lektvar nesmrtelnosti",
"image", "https://files.catbox.moe/vf3p07.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- KOUŘOVÁ BOMBA -->
(if: $hasSmokeBomb and not (_cardsInDeck contains "smokeBomb"))[
(link: '<div class="card" data-card-name="Kouřová bomba"><img src="https://files.catbox.moe/2olwuv.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "smokeBomb")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "smokeBomb",
"name", "Kouřová bomba",
"image", "https://files.catbox.moe/2olwuv.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- SVATÁ VODA -->
(if: $hasHolyWater and not (_cardsInDeck contains "holyWater"))[
(link: '<div class="card" data-card-name="Svatá voda"><img src="https://files.catbox.moe/9cgxs9.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "holyWater")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "holyWater",
"name", "Svatá voda",
"image", "https://files.catbox.moe/9cgxs9.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- OHNIVÁ BOMBA -->
(if: $hasFireBomb and not (_cardsInDeck contains "fireBomb"))[
(link: '<div class="card" data-card-name="Ohnivá bomba"><img src="https://files.catbox.moe/sk5n4x.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "fireBomb")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "fireBomb",
"name", "Ohnivá bomba",
"image", "https://files.catbox.moe/sk5n4x.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- JEDOVÝ NŮŽ -->
(if: $hasPoisonDagger and not (_cardsInDeck contains "poisonDagger"))[
(link: '<div class="card" data-card-name="Jedový nůž"><img src="https://files.catbox.moe/f3ijtv.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "poisonDagger")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "poisonDagger",
"name", "Jedový nůž",
"image", "https://files.catbox.moe/f3ijtv.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- HROMOVÝ KÁMEN -->
(if: $hasThunderstone and not (_cardsInDeck contains "thunderstone"))[
(link: '<div class="card" data-card-name="Hromový kámen"><img src="https://files.catbox.moe/7qak07.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "thunderstone")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "thunderstone",
"name", "Hromový kámen",
"image", "https://files.catbox.moe/7qak07.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- AMULET OCHRANY -->
(if: $hasProtectionAmulet and not (_cardsInDeck contains "protectionAmulet"))[
(link: '<div class="card" data-card-name="Amulet ochrany"><img src="https://files.catbox.moe/9cgxs9.png"></div>')[
(if: $deckCardCount >= $deckMaxCards)[
(set: $lastEquipMessage to " Balíček je plný! Maximum je " + (text: $deckMaxCards) + " karet.")
(set: $showNotification to true)
(go-to: "Inventory")
](else-if: ($totalDeckWeight + ($cardWeights's "protectionAmulet")) > $deckMaxWeight)[
(set: $lastEquipMessage to " Balíček je přetížený! Maximální váha je " + (text: $deckMaxWeight) + ".")
(set: $showNotification to true)
(go-to: "Inventory")
](else:)[
(set: $deckCards to $deckCards + (a: (dm:
"id", "protectionAmulet",
"name", "Amulet ochrany",
"image", "https://files.catbox.moe/9cgxs9.png"
)))
(set: $lastEquipMessage to "Karta přidána do balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
]
]
]
<!-- KLÍČ -->
(if: $hasKey)[
<div class="card"><img src="https://files.catbox.moe/1rhk43.png"></div>
]
<!-- MAPA -->
(if: $hasMap)[
<div class="card"><img src="https://files.catbox.moe/1fs7tw.png"></div>
]
</div>
<div style="text-align: center; margin-top: 30px;">
(link-goto: "↩ Zpět do inventáře", "Inventory")
</div>
<style>
/* Odstranit Twine wrappery */
.deck-grid > tw-expression,
.deck-grid > tw-hook,
.deck-grid > tw-link {
display: contents !important;
}
/* Grid kontejner - BASE */
.deck-grid {
display: grid !important;
gap: 6px !important;
justify-content: center !important;
max-width: 1400px !important;
margin: 0 auto !important;
padding: 20px !important;
}
/* 1-20 karet - NEJVĚTŠÍ */
.deck-grid.size-xl {
grid-template-columns: repeat(auto-fill, 180px) !important;
}
.deck-grid.size-xl .card,
.deck-grid.size-xl .card-stack {
width: 180px !important;
height: 220px !important;
}
/* 21-40 karet - VELKÉ */
.deck-grid.size-l {
grid-template-columns: repeat(auto-fill, 140px) !important;
}
.deck-grid.size-l .card,
.deck-grid.size-l .card-stack {
width: 140px !important;
height: 171px !important;
}
/* 41-60 karet - STŘEDNÍ */
.deck-grid.size-m {
grid-template-columns: repeat(auto-fill, 110px) !important;
}
.deck-grid.size-m .card,
.deck-grid.size-m .card-stack {
width: 110px !important;
height: 134px !important;
}
/* 61-80 karet - MALÉ */
.deck-grid.size-s {
grid-template-columns: repeat(auto-fill, 90px) !important;
}
.deck-grid.size-s .card,
.deck-grid.size-s .card-stack {
width: 90px !important;
height: 110px !important;
}
/* 80+ karet - NEJMENŠÍ */
.deck-grid.size-xs {
grid-template-columns: repeat(auto-fill, 82px) !important;
}
.deck-grid.size-xs .card,
.deck-grid.size-xs .card-stack {
width: 82px !important;
height: 100px !important;
}
/* Všechny karty - základní styl */
.deck-grid .card {
background: rgba(20, 15, 10, 0.9) !important;
border: 1.5px solid rgba(212, 175, 55, 0.3) !important;
border-radius: 4px !important;
padding: 4px !important;
cursor: pointer !important;
transition: all 0.2s ease !important;
box-sizing: border-box !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
position: relative !important;
}
/* Card stack kontejner */
.deck-grid .card-stack {
position: relative !important;
}
/* Bonusová karta - proporcionální */
.card-stack .bonus-card-behind {
position: absolute !important;
top: 8px !important;
left: 30px !important;
width: 100% !important;
height: 100% !important;
background: rgba(20, 15, 10, 0.9) !important;
border: 1.5px solid rgba(255, 107, 53, 0.5) !important;
border-radius: 4px !important;
padding: 4px !important;
z-index: -1 !important;
pointer-events: none !important;
transform: rotate(4deg) !important;
box-shadow: 0 2px 8px rgba(255, 107, 53, 0.4) !important;
}
/* Obrázky */
.deck-grid .card img,
.card-stack .bonus-card-behind img {
width: 105% !important;
height: 105% !important;
object-fit: contain !important;
pointer-events: none !important;
}
/* Hover */
.deck-grid .card:hover {
transform: scale(1.2) !important;
border-color: rgba(212, 175, 55, 0.9) !important;
box-shadow: 0 0 20px rgba(212, 175, 55, 0.7) !important;
z-index: 100 !important;
}
/* Equipnuté */
.deck-grid .card.equipped {
border: 2px solid #FFD700 !important;
animation: glow 2s ease-in-out infinite !important;
}
@keyframes glow {
0%, 100% { box-shadow: 0 0 12px rgba(255, 215, 0, 0.6); }
50% { box-shadow: 0 0 20px rgba(255, 215, 0, 1); }
}
/* Legendary */
.deck-grid .card.legendary {
border-color: rgba(255, 107, 53, 0.7) !important;
box-shadow: 0 0 10px rgba(255, 107, 53, 0.5) !important;
}
/* Locked */
.deck-grid .card.locked {
opacity: 0.25 !important;
cursor: not-allowed !important;
filter: grayscale(0.9) !important;
}
.deck-grid .card.locked:hover {
transform: none !important;
box-shadow: none !important;
}
</style>
<script>
$(document).ready(function() {
function resizeCardGrid() {
const $grid = $('.deck-grid');
const cardCount = $grid.find('.card, .card-stack').length;
// Odstranit všechny size třídy
$grid.removeClass('size-xs size-s size-m size-l size-xl');
// Přidat třídu podle počtu karet
if (cardCount <= 20) {
$grid.addClass('size-xl'); // Největší
} else if (cardCount <= 40) {
$grid.addClass('size-l');
} else if (cardCount <= 60) {
$grid.addClass('size-m');
} else if (cardCount <= 80) {
$grid.addClass('size-s');
} else {
$grid.addClass('size-xs'); // Nejmenší
}
}
// Spustit při načtení stránky
resizeCardGrid();
// Spustit při změně stránky (Twine)
$(window).on('showpassage:after', function() {
resizeCardGrid();
});
});
</script>
}{(if: ($lastEquipMessage is not "") and ($showNotification is true))[
<div class="notification-message">$lastEquipMessage</div>
](set: $showNotification to false)
<div class="armor-selection-header">
<h2>Vybavení zbroje</h2>
<p style="color: #888; font-style: italic;">Můžeš vrstvit libovolné množství zbrojí najednou.</p>
</div>
<div class="armor-cards-container">
(if: $hasLeatherArmor)[
(if: $equippedLeatherArmor is true)[
(link: '<div class="armor-card equipped">
<div class="card-glow"></div>
<div class="card-image"><img src="https://files.catbox.moe/6bdqid.png"></div>
<div class="card-checkmark">✓</div>
<div class="card-name">Kožené brnění</div>
<div class="card-stats">+1 DEF · +3 🛡️ HP</div>
<div class="card-action">Klikni pro svlečení</div>
</div>')[
(set: $equippedLeatherArmor to false)
(set: $tempHP to it - 3)
(set: $lastEquipMessage to "🛡 Kožené brnění svlečeno (-3 štítových HP)")
(set: $showNotification to true)
(go-to: "InventoryArmor")
]
](else:)[
(link: '<div class="armor-card">
<div class="card-glow"></div>
<div class="card-image"><img src="https://files.catbox.moe/6bdqid.png"></div>
<div class="card-name">Kožené brnění</div>
<div class="card-stats">+1 DEF · +3 🛡️ HP</div>
<div class="card-action">Klikni pro nasazení</div>
</div>')[
(set: $equippedLeatherArmor to true)
(set: $tempHP to it + 3)
(set: $lastEquipMessage to "🛡 Kožené brnění nasazeno! (+3 štítových HP)")
(set: $showNotification to true)
(go-to: "InventoryArmor")
]
]
](else:)[
<div class="armor-card locked">
<div class="card-image"><img src="https://files.catbox.moe/6bdqid.png"></div>
<div class="card-name">Kožené brnění</div>
<div class="card-locked">Nenalezeno</div>
</div>
]
(if: $hasChainmail)[
(if: $equippedChainmail is true)[
(link: '<div class="armor-card equipped">
<div class="card-glow"></div>
<div class="card-image"><img src="https://files.catbox.moe/bownbh.png"></div>
<div class="card-checkmark">✓</div>
<div class="card-name">Kroužková zbroj</div>
<div class="card-stats">+2 DEF · +6 🛡️ HP</div>
<div class="card-action">Klikni pro svlečení</div>
</div>')[
(set: $equippedChainmail to false)
(set: $tempHP to it - 6)
(set: $lastEquipMessage to "🛡 Kroužková zbroj svlečena (-6 štítových HP)")
(set: $showNotification to true)
(go-to: "InventoryArmor")
]
](else:)[
(link: '<div class="armor-card">
<div class="card-glow"></div>
<div class="card-image"><img src="https://files.catbox.moe/bownbh.png"></div>
<div class="card-name">Kroužková zbroj</div>
<div class="card-stats">+2 DEF · +6 🛡️ HP</div>
<div class="card-action">Klikni pro nasazení</div>
</div>')[
(set: $equippedChainmail to true)
(set: $tempHP to it + 6)
(set: $lastEquipMessage to "🛡 Kroužková zbroj nasazena! (+6 štítových HP)")
(set: $showNotification to true)
(go-to: "InventoryArmor")
]
]
](else:)[
<div class="armor-card locked">
<div class="card-image"><img src="https://files.catbox.moe/bownbh.png"></div>
<div class="card-name">Kroužková zbroj</div>
<div class="card-locked">Nenalezeno</div>
</div>
]
(if: $hasPlateArmor)[
(if: $equippedPlateArmor is true)[
(link: '<div class="armor-card equipped">
<div class="card-glow"></div>
<div class="card-image"><img src="https://files.catbox.moe/4c49c7.png"></div>
<div class="card-checkmark">✓</div>
<div class="card-name">Plátová zbroj</div>
<div class="card-stats">+3 DEF · +9 🛡️ HP</div>
<div class="card-action">Klikni pro svlečení</div>
</div>')[
(set: $equippedPlateArmor to false)
(set: $tempHP to it - 9)
(set: $lastEquipMessage to "🛡 Plátová zbroj svlečena (-9 štítových HP)")
(set: $showNotification to true)
(go-to: "InventoryArmor")
]
](else:)[
(link: '<div class="armor-card">
<div class="card-glow"></div>
<div class="card-image"><img src="https://files.catbox.moe/4c49c7.png"></div>
<div class="card-name">Plátová zbroj</div>
<div class="card-stats">+3 DEF · +9 🛡️ HP</div>
<div class="card-action">Klikni pro nasazení</div>
</div>')[
(set: $equippedPlateArmor to true)
(set: $tempHP to it + 9)
(set: $lastEquipMessage to "🛡 Plátová zbroj nasazena! (+9 štítových HP)")
(set: $showNotification to true)
(go-to: "InventoryArmor")
]
]
](else:)[
<div class="armor-card locked">
<div class="card-image"><img src="https://files.catbox.moe/4c49c7.png"></div>
<div class="card-name">Plátová zbroj</div>
<div class="card-locked">Nenalezeno</div>
</div>
]
</div>
<style>
/* Styly zůstávají stejné jako ve tvém původním návrhu */
.notification-message {
background: rgba(212, 175, 55, 0.2);
border: 2px solid #d4af37;
padding: 15px;
margin: 20px auto;
max-width: 600px;
text-align: center;
color: #d4af37;
font-family: 'Cinzel', serif;
animation: fadeIn 0.5s ease;
}
.armor-selection-header { text-align: center; margin: 30px 0; color: #d4af37; font-family: 'Cinzel', serif; }
.armor-cards-container { display: flex; justify-content: center; flex-wrap: wrap; gap: 30px; margin: 40px auto; max-width: 1200px; padding: 0 20px; }
.armor-card {
position: relative;
width: 200px;
background: linear-gradient(135deg, rgba(40,30,20,0.95), rgba(20,15,10,0.95));
border: 2px solid rgba(212, 175, 55, 0.6);
padding: 20px;
text-align: center;
cursor: pointer;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.armor-card.equipped {
border-color: #d4af37;
background: linear-gradient(135deg, rgba(60,50,30,0.95), rgba(40,30,15,0.95));
animation: gentle-glow 3s ease-in-out infinite;
}
.armor-card:hover:not(.locked) { transform: translateY(-10px) scale(1.05); border-color: #d4af37; }
.card-image img { width: 100%; height: 160px; object-fit: contain; }
.card-checkmark { position: absolute; top: 10px; right: 10px; background: #d4af37; color: #1a1410; width: 30px; height: 30px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: bold; }
.card-name { color: #d4af37; font-family: 'Cinzel', serif; font-size: 18px; margin: 10px 0; }
.card-stats { color: #c0c0c0; font-size: 14px; }
.card-locked { color: #666; font-style: italic; }
@keyframes gentle-glow {
0%, 100% { box-shadow: 0 0 8px rgba(212, 175, 55, 0.4); }
50% { box-shadow: 0 0 18px rgba(212, 175, 55, 0.8); }
}
</style>
<script>
$(document).ready(function() {
$('.armor-cards-container tw-link').css({ 'display': 'contents', 'text-decoration': 'none' });
});
</script>
<div style="text-align: center; margin-top: 40px;">
(link-goto: "↩ Zpět do inventáře", "Inventory")
(link: "Zpět do hry")[
(if: $returnPassage is "Inventory" or $returnPassage is "InventoryWeapons" or $returnPassage is "InventoryArmor" or $returnPassage is "InventoryShields" or $returnPassage is "InventoryConsumables")[
(go-to: "StartHry")
](else:)[
(go-to: $returnPassage)
]
]
</div>
}{(if: ($lastEquipMessage is not "") and ($showNotification is true))[
<div id="equip-notification" class="show-notification">$lastEquipMessage</div>
]
(set: $showNotification to false)
<style>
#equip-notification {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: linear-gradient(135deg, rgba(40,40,40,0.8), rgba(20,20,20,0.8));
border: 2px solid #735b29;
border-radius: 24px;
padding: 25px 40px;
color: #d16c1f;
font-family: 'Cinzel', serif;
font-size: 20px;
box-shadow: 0 8px 32px rgba(0,0,0,0.8), 0 0 20px rgba(150,150,150,0.3);
z-index: 10000;
min-width: 300px;
text-align: center;
pointer-events: none;
}
.show-notification {
animation: fadeInOut 1.2s ease-in-out forwards;
}
@keyframes fadeInOut {
0% { opacity: 0; transform: translate(-50%, -40%) scale(0.9); }
15% { opacity: 1; transform: translate(-50%, -50%) scale(1); }
85% { opacity: 1; transform: translate(-50%, -50%) scale(1); }
100% { opacity: 0; transform: translate(-50%, -60%) scale(0.9); }
}
@keyframes equip-blink {
0%, 100% { box-shadow: 0 0 0 3px rgba(212, 175, 55, 0.5), 0 0 20px rgba(212, 175, 55, 0.3); }
50% { box-shadow: 0 0 0 6px rgba(212, 175, 55, 0.8), 0 0 30px rgba(212, 175, 55, 0.5); }
}
.inventory-card.locked {
opacity: 0.4;
filter: grayscale(80%);
cursor: not-allowed;
}
.inventory-card.locked::after {
content: "🔒";
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
font-size: 48px;
color: #888;
text-shadow: 0 0 10px rgba(0,0,0,0.8);
}
</style>
<p style="text-align: center; color: #d4c5a9; font-style: italic; margin-bottom: 30px; font-family: 'Cinzel', serif;">
Základní karty pro souboj. Vyber si, které chceš mít v balíčku.
</p>
<div class="inventory-grid">
<!-- ODPOČINEK -->
(if: $hasRest)[
(if: $equippedRest)[
(link: '<div class="inventory-card combat-card" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/pyet8q.jpg"></div>
<div class="inventory-card-name" style="color: #90ee90;">✓ Odpočinek</div>
<div class="inventory-card-description">Pasivní regenerace</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(50,200,50,0.5); border-color: rgba(100,255,100,0.4);">+4 kondice</span>
</div>
</div>')[
(set: $equippedRest to false)
(set: $lastEquipMessage to "Odpočinek odložen")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
](else:)[
(link: '<div class="inventory-card combat-card">
<div class="inventory-card-image"><img src="https://files.catbox.moe/pyet8q.jpg"></div>
<div class="inventory-card-name" style="color: #90ee90;">Odpočinek</div>
<div class="inventory-card-description">Pasivní regenerace</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(50,200,50,0.5); border-color: rgba(100,255,100,0.4);">+4 kondice</span>
</div>
</div>')[
(set: $equippedRest to true)
(set: $lastEquipMessage to "Odpočinek připraven!")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
]
](else:)[
<div class="inventory-card combat-card locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/pyet8q.jpg"></div>
<div class="inventory-card-name" style="color: #666;">Odpočinek</div>
<div class="inventory-card-description">Nenalezeno</div>
</div>
]
<!-- PĚSTÍ -->
(if: $hasFist)[
(if: $equippedFist)[
(link: '<div class="inventory-card combat-card" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/g0veup.jpg"></div>
<div class="inventory-card-name" style="color: #ffa500;">✓ Pěstí</div>
<div class="inventory-card-description">Základní útok</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5); border-color: rgba(255,100,100,0.4);">+2 útok</span>
<span class="inventory-card-stat" style="background: rgba(139,105,20,0.5); border-color: rgba(255,215,0,0.4);">0 kondice</span>
</div>
</div>')[
(set: $equippedFist to false)
(set: $lastEquipMessage to "Pěstí odloženo")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
](else:)[
(link: '<div class="inventory-card combat-card">
<div class="inventory-card-image"><img src="https://files.catbox.moe/g0veup.jpg"></div>
<div class="inventory-card-name" style="color: #ffa500;">Pěstí</div>
<div class="inventory-card-description">Základní útok</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5); border-color: rgba(255,100,100,0.4);">+2 útok</span>
<span class="inventory-card-stat" style="background: rgba(139,105,20,0.5); border-color: rgba(255,215,0,0.4);">0 kondice</span>
</div>
</div>')[
(set: $equippedFist to true)
(set: $lastEquipMessage to "Pěstí equipnuto!")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
]
](else:)[
<div class="inventory-card combat-card locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/g0veup.jpg"></div>
<div class="inventory-card-name" style="color: #666;">Pěstí</div>
<div class="inventory-card-description">Nenalezeno</div>
</div>
]
<!-- NADECHNOUT SE -->
(if: $hasBreath)[
(if: $equippedBreathe)[
(link: '<div class="inventory-card combat-card" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/pegu3z.jpg"></div>
<div class="inventory-card-name" style="color: #87ceeb;">✓ Nadechnout se</div>
<div class="inventory-card-description">Obnovení kondice</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(50,150,200,0.5); border-color: rgba(100,200,255,0.4);">+5 kondice</span>
</div>
</div>')[
(set: $equippedBreathe to false)
(set: $lastEquipMessage to "Dech odložen")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
](else:)[
(link: '<div class="inventory-card combat-card">
<div class="inventory-card-image"><img src="https://files.catbox.moe/pegu3z.jpg"></div>
<div class="inventory-card-name" style="color: #87ceeb;">Nadechnout se</div>
<div class="inventory-card-description">Obnovení kondice</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(50,150,200,0.5); border-color: rgba(100,200,255,0.4);">+5 kondice</span>
</div>
</div>')[
(set: $equippedBreathe to true)
(set: $lastEquipMessage to "Dech equipnut!")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
]
](else:)[
<div class="inventory-card combat-card locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/pegu3z.jpg"></div>
<div class="inventory-card-name" style="color: #666;">Nadechnout se</div>
<div class="inventory-card-description">Nenalezeno</div>
</div>
]
<!-- LEHKÝ KRYT -->
(if: $hasLightCover)[
(if: $equippedLightCover)[
(link: '<div class="inventory-card combat-card" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/0tx3ox.jpg"></div>
<div class="inventory-card-name">✓ Lehký kryt</div>
<div class="inventory-card-description">Malá obrana</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5); border-color: rgba(100,150,255,0.4);">+2 obrana</span>
</div>
</div>')[
(set: $equippedLightCover to false)
(set: $lastEquipMessage to "Lehký kryt odložen")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
](else:)[
(link: '<div class="inventory-card combat-card">
<div class="inventory-card-image"><img src="https://files.catbox.moe/0tx3ox.jpg"></div>
<div class="inventory-card-name">Lehký kryt</div>
<div class="inventory-card-description">Malá obrana</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5); border-color: rgba(100,150,255,0.4);">+2 obrana</span>
</div>
</div>')[
(set: $equippedLightCover to true)
(set: $lastEquipMessage to "Lehký kryt equipnut!")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
]
](else:)[
<div class="inventory-card combat-card locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/0tx3ox.jpg"></div>
<div class="inventory-card-name" style="color: #666;">Lehký kryt</div>
<div class="inventory-card-description">Nenalezeno</div>
</div>
]
<!-- KRYT -->
(if: $hasCover)[
(if: $equippedCover)[
(link: '<div class="inventory-card combat-card" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/fo44qb.jpg"></div>
<div class="inventory-card-name" style="color: #87ceeb;">✓ Kryt</div>
<div class="inventory-card-description">Střední obrana</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5); border-color: rgba(100,150,255,0.4);">+3 obrana</span>
</div>
</div>')[
(set: $equippedCover to false)
(set: $lastEquipMessage to "Kryt odložen")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
](else:)[
(link: '<div class="inventory-card combat-card">
<div class="inventory-card-image"><img src="https://files.catbox.moe/fo44qb.jpg"></div>
<div class="inventory-card-name" style="color: #87ceeb;">Kryt</div>
<div class="inventory-card-description">Střední obrana</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5); border-color: rgba(100,150,255,0.4);">+3 obrana</span>
</div>
</div>')[
(set: $equippedCover to true)
(set: $lastEquipMessage to "Kryt equipnut!")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
]
](else:)[
<div class="inventory-card combat-card locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/fo44qb.jpg"></div>
<div class="inventory-card-name" style="color: #666;">Kryt</div>
<div class="inventory-card-description">Nenalezeno</div>
</div>
]
<!-- NAKOPNUTÍ -->
(if: $hasKick)[
(if: $equippedKick)[
(link: '<div class="inventory-card combat-card" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/ijd3ez.jpg"></div>
<div class="inventory-card-name" style="color: #ff8c00;">✓ Nakopnutí</div>
<div class="inventory-card-description">Útok + obrana</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+3 ATK</span>
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+1 DEF</span>
</div>
</div>')[
(set: $equippedKick to false)
(set: $lastEquipMessage to "Nakopnutí odloženo")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
](else:)[
(link: '<div class="inventory-card combat-card">
<div class="inventory-card-image"><img src="https://files.catbox.moe/ijd3ez.jpg"></div>
<div class="inventory-card-name" style="color: #ff8c00;">Nakopnutí</div>
<div class="inventory-card-description">Útok + obrana</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+3 ATK</span>
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+1 DEF</span>
</div>
</div>')[
(set: $equippedKick to true)
(set: $lastEquipMessage to "Nakopnutí equipnuto!")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
]
](else:)[
<div class="inventory-card combat-card locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/ijd3ez.jpg"></div>
<div class="inventory-card-name" style="color: #666;">Nakopnutí</div>
<div class="inventory-card-description">Nenalezeno</div>
</div>
]
<!-- KOŘALKA -->
(if: $hasKoralka)[
(if: $equippedKoralka)[
(link: '<div class="inventory-card combat-card" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/9cgxs9.png"></div>
<div class="inventory-card-name" style="color: #90ee90;">✓ Kořalka</div>
<div class="inventory-card-description">Léčivý nápoj</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(50,200,50,0.5); border-color: rgba(100,255,100,0.4);">+5 HP</span>
</div>
</div>')[
(set: $equippedKoralka to false)
(set: $lastEquipMessage to "Kořalka odložena")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
](else:)[
(link: '<div class="inventory-card combat-card">
<div class="inventory-card-image"><img src="https://files.catbox.moe/9cgxs9.png"></div>
<div class="inventory-card-name" style="color: #90ee90;">Kořalka</div>
<div class="inventory-card-description">Léčivý nápoj</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(50,200,50,0.5); border-color: rgba(100,255,100,0.4);">+5 HP</span>
</div>
</div>')[
(set: $equippedKoralka to true)
(set: $lastEquipMessage to "Kořalka připravena!")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
]
](else:)[
<div class="inventory-card combat-card locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/9cgxs9.png"></div>
<div class="inventory-card-name" style="color: #666;">Kořalka</div>
<div class="inventory-card-description">Nenalezeno</div>
</div>
]
<!-- ÚHYB -->
(if: $hasDodge)[
(if: $equippedDodge)[
(link: '<div class="inventory-card combat-card" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/rhusru.jpg"></div>
<div class="inventory-card-name" style="color: #87ceeb;">✓ Úhyb</div>
<div class="inventory-card-description">Obranný manévr</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+5 obrana</span>
<span class="inventory-card-stat" style="background: rgba(139,105,20,0.5);">1 kondice</span>
</div>
</div>')[
(set: $equippedDodge to false)
(set: $lastEquipMessage to "Úhyb odložen")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
](else:)[
(link: '<div class="inventory-card combat-card">
<div class="inventory-card-image"><img src="https://files.catbox.moe/rhusru.jpg"></div>
<div class="inventory-card-name" style="color: #87ceeb;">Úhyb</div>
<div class="inventory-card-description">Obranný manévr</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+5 obrana</span>
<span class="inventory-card-stat" style="background: rgba(139,105,20,0.5);">1 kondice</span>
</div>
</div>')[
(set: $equippedDodge to true)
(set: $lastEquipMessage to "Úhyb equipnut!")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
]
](else:)[
<div class="inventory-card combat-card locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/c5u2x3.png"></div>
<div class="inventory-card-name" style="color: #666;">Úhyb</div>
<div class="inventory-card-description">Nenalezeno</div>
</div>
]
<!-- PROTIÚTOK -->
(if: $hasCounter)[
(if: $equippedCounter)[
(link: '<div class="inventory-card combat-card" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/c3sxec.jpg"></div>
<div class="inventory-card-name" style="color: #ff8c00;">✓ Protiútok</div>
<div class="inventory-card-description">Útok + obrana</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+4 útok</span>
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+3 obrana</span>
</div>
</div>')[
(set: $equippedCounter to false)
(set: $lastEquipMessage to "Protiútok odložen")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
](else:)[
(link: '<div class="inventory-card combat-card">
<div class="inventory-card-image"><img src="https://files.catbox.moe/c3sxec.jpg"></div>
<div class="inventory-card-name" style="color: #ff8c00;">Protiútok</div>
<div class="inventory-card-description">Útok + obrana</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+4 útok</span>
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+3 obrana</span>
</div>
</div>')[
(set: $equippedCounter to true)
(set: $lastEquipMessage to "Protiútok equipnut!")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
]
](else:)[
<div class="inventory-card combat-card locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/c3sxec.jpg"></div>
<div class="inventory-card-name" style="color: #666;">Protiútok</div>
<div class="inventory-card-description">Nenalezeno</div>
</div>
]
<!-- FINTA -->
(if: $hasFeint)[
(if: $equippedFeint)[
(link: '<div class="inventory-card combat-card" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/7qak07.png"></div>
<div class="inventory-card-name" style="color: #ffa500;">✓ Finta</div>
<div class="inventory-card-description">Taktický útok</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+3 útok</span>
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+1 obrana</span>
</div>
</div>')[
(set: $equippedFeint to false)
(set: $lastEquipMessage to "Finta odložena")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
](else:)[
(link: '<div class="inventory-card combat-card">
<div class="inventory-card-image"><img src="https://files.catbox.moe/7qak07.png"></div>
<div class="inventory-card-name" style="color: #ffa500;">Finta</div>
<div class="inventory-card-description">Taktický útok</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+3 útok</span>
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+1 obrana</span>
</div>
</div>')[
(set: $equippedFeint to true)
(set: $lastEquipMessage to "Finta equipnuta!")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
]
](else:)[
<div class="inventory-card combat-card locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/7qak07.png"></div>
<div class="inventory-card-name" style="color: #666;">Finta</div>
<div class="inventory-card-description">Nenalezeno</div>
</div>
]
<!-- SILOVÝ ÚDER -->
(if: $hasPowerStrike)[
(if: $equippedPowerStrike)[
(link: '<div class="inventory-card combat-card" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/sk5n4x.png"></div>
<div class="inventory-card-name" style="color: #ff4500;">✓ Silový úder</div>
<div class="inventory-card-description">Devastující útok</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+8 útok</span>
<span class="inventory-card-stat" style="background: rgba(139,105,20,0.5);">4 kondice</span>
</div>
</div>')[
(set: $equippedPowerStrike to false)
(set: $lastEquipMessage to "Silový úder odložen")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
](else:)[
(link: '<div class="inventory-card combat-card">
<div class="inventory-card-image"><img src="https://files.catbox.moe/sk5n4x.png"></div>
<div class="inventory-card-name" style="color: #ff4500;">Silový úder</div>
<div class="inventory-card-description">Devastující útok</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+8 útok</span>
<span class="inventory-card-stat" style="background: rgba(139,105,20,0.5);">4 kondice</span>
</div>
</div>')[
(set: $equippedPowerStrike to true)
(set: $lastEquipMessage to "Silový úder equipnut!")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
]
](else:)[
<div class="inventory-card combat-card locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/sk5n4x.png"></div>
<div class="inventory-card-name" style="color: #666;">Silový úder</div>
<div class="inventory-card-description">Nenalezeno</div>
</div>
]
<!-- DVOJITÝ SEK -->
(if: $hasDoubleSlash)[
(if: $equippedDoubleSlash)[
(link: '<div class="inventory-card combat-card" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/r6t44r.jpg"></div>
<div class="inventory-card-name" style="color: #ffa500;">✓ Dvojitý sek</div>
<div class="inventory-card-description">Dva útoky</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+6 útok</span>
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+1 obrana</span>
</div>
</div>')[
(set: $equippedDoubleSlash to false)
(set: $lastEquipMessage to "Dvojitý sek odložen")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
](else:)[
(link: '<div class="inventory-card combat-card">
<div class="inventory-card-image"><img src="https://files.catbox.moe/r6t44r.jpg"></div>
<div class="inventory-card-name" style="color: #ffa500;">Dvojitý sek</div>
<div class="inventory-card-description">Dva útoky</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+6 útok</span>
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+1 obrana</span>
</div>
</div>')[
(set: $equippedDoubleSlash to true)
(set: $lastEquipMessage to "Dvojitý sek equipnut!")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
]
](else:)[
<div class="inventory-card combat-card locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/r6t44r.jpg"></div>
<div class="inventory-card-name" style="color: #666;">Dvojitý sek</div>
<div class="inventory-card-description">Nenalezeno</div>
</div>
]
<!-- ZUŘIVOST -->
(if: $hasBerserkerRage)[
(if: $equippedBerserkerRage)[
(link: '<div class="inventory-card combat-card" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/8ryt3d.png"></div>
<div class="inventory-card-name" style="color: #dc143c;">✓ Zuřivost</div>
<div class="inventory-card-description">Berserk mode</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+12 útok</span>
<span class="inventory-card-stat" style="background: rgba(139,105,20,0.5);">5 kondice</span>
</div>
</div>')[
(set: $equippedBerserkerRage to false)
(set: $lastEquipMessage to "Zuřivost odložena")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
](else:)[
(link: '<div class="inventory-card combat-card">
<div class="inventory-card-image"><img src="https://files.catbox.moe/8ryt3d.png"></div>
<div class="inventory-card-name" style="color: #dc143c;">Zuřivost</div>
<div class="inventory-card-description">Berserk mode</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+12 útok</span>
<span class="inventory-card-stat" style="background: rgba(139,105,20,0.5);">5 kondice</span>
</div>
</div>')[
(set: $equippedBerserkerRage to true)
(set: $lastEquipMessage to "Zuřivost equipnuta!")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
]
](else:)[
<div class="inventory-card combat-card locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/8ryt3d.png"></div>
<div class="inventory-card-name" style="color: #666;">Zuřivost</div>
<div class="inventory-card-description">Nenalezeno</div>
</div>
]
<!-- PŘESNÝ ÚDER -->
(if: $hasPrecisionStrike)[
(if: $equippedPrecisionStrike)[
(link: '<div class="inventory-card combat-card" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/2yoy72.jpg"></div>
<div class="inventory-card-name" style="color: #ffa500;">✓ Přesný úder</div>
<div class="inventory-card-description">Cílený útok</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+7 útok</span>
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+1 obrana</span>
</div>
</div>')[
(set: $equippedPrecisionStrike to false)
(set: $lastEquipMessage to "Přesný úder odložen")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
](else:)[
(link: '<div class="inventory-card combat-card">
<div class="inventory-card-image"><img src="https://files.catbox.moe/2yoy72.jpg"></div>
<div class="inventory-card-name" style="color: #ffa500;">Přesný úder</div>
<div class="inventory-card-description">Cílený útok</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+7 útok</span>
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+1 obrana</span>
</div>
</div>')[
(set: $equippedPrecisionStrike to true)
(set: $lastEquipMessage to "Přesný úder equipnut!")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
]
](else:)[
<div class="inventory-card combat-card locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/2yoy72.jpg"></div>
<div class="inventory-card-name" style="color: #666;">Přesný úder</div>
<div class="inventory-card-description">Nenalezeno</div>
</div>
]
<!-- POPRAVA -->
(if: $hasExecute)[
(if: $equippedExecute)[
(link: '<div class="inventory-card combat-card" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/sgxm5s.jpg"></div>
<div class="inventory-card-name" style="color: #8b0000;">✓ Poprava</div>
<div class="inventory-card-description">Smrtící rána</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+14 útok</span>
<span class="inventory-card-stat" style="background: rgba(139,105,20,0.5);">6 kondice</span>
</div>
</div>')[
(set: $equippedExecute to false)
(set: $lastEquipMessage to "Poprava odložena")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
](else:)[
(link: '<div class="inventory-card combat-card">
<div class="inventory-card-image"><img src="https://files.catbox.moe/sgxm5s.jpg"></div>
<div class="inventory-card-name" style="color: #8b0000;">Poprava</div>
<div class="inventory-card-description">Smrtící rána</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+14 útok</span>
<span class="inventory-card-stat" style="background: rgba(139,105,20,0.5);">6 kondice</span>
</div>
</div>')[
(set: $equippedExecute to true)
(set: $lastEquipMessage to "Poprava equipnuta!")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
]
](else:)[
<div class="inventory-card combat-card locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/sgxm5s.jpg"></div>
<div class="inventory-card-name" style="color: #666;">Poprava</div>
<div class="inventory-card-description">Nenalezeno</div>
</div>
]
<!-- ŽELEZNÁ VŮLE -->
(if: $hasIronWill)[
(if: $equippedIronWill)[
(link: '<div class="inventory-card combat-card" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/9aa6ns.jpg"></div>
<div class="inventory-card-name" style="color: #87ceeb;">✓ Železná vůle</div>
<div class="inventory-card-description">Pevná obrana</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+7 obrana</span>
<span class="inventory-card-stat" style="background: rgba(139,105,20,0.5);">3 kondice</span>
</div>
</div>')[
(set: $equippedIronWill to false)
(set: $lastEquipMessage to "Železná vůle odložena")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
](else:)[
(link: '<div class="inventory-card combat-card">
<div class="inventory-card-image"><img src="https://files.catbox.moe/9aa6ns.jpg"></div>
<div class="inventory-card-name" style="color: #87ceeb;">Železná vůle</div>
<div class="inventory-card-description">Pevná obrana</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+7 obrana</span>
<span class="inventory-card-stat" style="background: rgba(139,105,20,0.5);">3 kondice</span>
</div>
</div>')[
(set: $equippedIronWill to true)
(set: $lastEquipMessage to "Železná vůle equipnuta!")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
]
](else:)[
<div class="inventory-card combat-card locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/9aa6ns.jpg"></div>
<div class="inventory-card-name" style="color: #666;">Železná vůle</div>
<div class="inventory-card-description">Nenalezeno</div>
</div>
]
<!-- ODRAŽENÍ -->
(if: $hasDeflect)[
(if: $equippedDeflect)[
(link: '<div class="inventory-card combat-card" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/y8q8tv.png"></div>
<div class="inventory-card-name" style="color: #87ceeb;">✓ Odražení</div>
<div class="inventory-card-description">Blok + protiútok</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+2 útok</span>
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+6 obrana</span>
</div>
</div>')[
(set: $equippedDeflect to false)
(set: $lastEquipMessage to "Odražení odloženo")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
](else:)[
(link: '<div class="inventory-card combat-card">
<div class="inventory-card-image"><img src="https://files.catbox.moe/y8q8tv.png"></div>
<div class="inventory-card-name" style="color: #87ceeb;">Odražení</div>
<div class="inventory-card-description">Blok + protiútok</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+2 útok</span>
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+6 obrana</span>
</div>
</div>')[
(set: $equippedDeflect to true)
(set: $lastEquipMessage to "Odražení equipnuto!")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
]
](else:)[
<div class="inventory-card combat-card locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/y8q8tv.png"></div>
<div class="inventory-card-name" style="color: #666;">Odražení</div>
<div class="inventory-card-description">Nenalezeno</div>
</div>
]
<!-- POSÍLENÍ -->
(if: $hasFortify)[
(if: $equippedFortify)[
(link: '<div class="inventory-card combat-card" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/yjdfgn.jpg"></div>
<div class="inventory-card-name" style="color: #87ceeb;">✓ Posílení</div>
<div class="inventory-card-description">Buff obrana</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+4 obrana</span>
<span class="inventory-card-stat" style="background: rgba(139,105,20,0.5);">2 kondice</span>
</div>
</div>')[
(set: $equippedFortify to false)
(set: $lastEquipMessage to "Posílení odloženo")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
](else:)[
(link: '<div class="inventory-card combat-card">
<div class="inventory-card-image"><img src="https://files.catbox.moe/yjdfgn.jpg"></div>
<div class="inventory-card-name" style="color: #87ceeb;">Posílení</div>
<div class="inventory-card-description">Buff obrana</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+4 obrana</span>
<span class="inventory-card-stat" style="background: rgba(139,105,20,0.5);">2 kondice</span>
</div>
</div>')[
(set: $equippedFortify to true)
(set: $lastEquipMessage to "Posílení equipnuto!")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
]
](else:)[
<div class="inventory-card combat-card locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/yjdfgn.jpg"></div>
<div class="inventory-card-name" style="color: #666;">Posílení</div>
<div class="inventory-card-description">Nenalezeno</div>
</div>
]
<!-- PARÍROVÁNÍ -->
(if: $hasParry)[
(if: $equippedParry)[
(link: '<div class="inventory-card combat-card" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/r09jgb.jpg"></div>
<div class="inventory-card-name" style="color: #87ceeb;">✓ Parírování</div>
<div class="inventory-card-description">Mistrovská obrana</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+1 útok</span>
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+8 obrana</span>
</div>
</div>')[
(set: $equippedParry to false)
(set: $lastEquipMessage to "Parírování odloženo")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
](else:)[
(link: '<div class="inventory-card combat-card">
<div class="inventory-card-image"><img src="https://files.catbox.moe/r09jgb.jpg"></div>
<div class="inventory-card-name" style="color: #87ceeb;">Parírování</div>
<div class="inventory-card-description">Mistrovská obrana</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+1 útok</span>
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+8 obrana</span>
</div>
</div>')[
(set: $equippedParry to true)
(set: $lastEquipMessage to "Parírování equipnuto!")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
]
](else:)[
<div class="inventory-card combat-card locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/2olwuv.png"></div>
<div class="inventory-card-name" style="color: #666;">Parírování</div>
<div class="inventory-card-description">Nenalezeno</div>
</div>
]
<!-- RYCHLÝ ÚDER -->
(if: $hasSwiftStrike)[
(if: $equippedSwiftStrike)[
(link: '<div class="inventory-card combat-card" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/mr6iaw.jpg"></div>
<div class="inventory-card-name" style="color: #ffa500;">✓ Rychlý úder</div>
<div class="inventory-card-description">Rychlý útok</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+4 útok</span>
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+2 obrana</span>
</div>
</div>')[
(set: $equippedSwiftStrike to false)
(set: $lastEquipMessage to "Rychlý úder odložen")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
](else:)[
(link: '<div class="inventory-card combat-card">
<div class="inventory-card-image"><img src="https://files.catbox.moe/mr6iaw.jpg"></div>
<div class="inventory-card-name" style="color: #ffa500;">Rychlý úder</div>
<div class="inventory-card-description">Rychlý útok</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+4 útok</span>
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+2 obrana</span>
</div>
</div>')[
(set: $equippedSwiftStrike to true)
(set: $lastEquipMessage to "Rychlý úder equipnut!")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
]
](else:)[
<div class="inventory-card combat-card locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/mr6iaw.jpg"></div>
<div class="inventory-card-name" style="color: #666;">Rychlý úder</div>
<div class="inventory-card-description">Nenalezeno</div>
</div>
]
<!-- KRYTÝ ÚTOK -->
(if: $hasGuardedAttack)[
(if: $equippedGuardedAttack)[
(link: '<div class="inventory-card combat-card" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/83kxod.jpg"></div>
<div class="inventory-card-name" style="color: #ff8c00;">✓ Krytý útok</div>
<div class="inventory-card-description">Vyvážený útok</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+5 útok</span>
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+4 obrana</span>
</div>
</div>')[
(set: $equippedGuardedAttack to false)
(set: $lastEquipMessage to "Krytý útok odložen")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
](else:)[
(link: '<div class="inventory-card combat-card">
<div class="inventory-card-image"><img src="https://files.catbox.moe/83kxod.jpg"></div>
<div class="inventory-card-name" style="color: #ff8c00;">Krytý útok</div>
<div class="inventory-card-description">Vyvážený útok</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+5 útok</span>
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+4 obrana</span>
</div>
</div>')[
(set: $equippedGuardedAttack to true)
(set: $lastEquipMessage to "Krytý útok equipnut!")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
]
](else:)[
<div class="inventory-card combat-card locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/83kxod.jpg"></div>
<div class="inventory-card-name" style="color: #666;">Krytý útok</div>
<div class="inventory-card-description">Nenalezeno</div>
</div>
]
<!-- TAKTICKÝ ÚDER -->
(if: $hasTacticalStrike)[
(if: $equippedTacticalStrike)[
(link: '<div class="inventory-card combat-card" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/pxcdyc.jpg"></div>
<div class="inventory-card-name" style="color: #ffa500;">✓ Taktický úder</div>
<div class="inventory-card-description">Promyšlený útok</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+6 útok</span>
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+3 obrana</span>
</div>
</div>')[
(set: $equippedTacticalStrike to false)
(set: $lastEquipMessage to "Taktický úder odložen")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
](else:)[
(link: '<div class="inventory-card combat-card">
<div class="inventory-card-image"><img src="https://files.catbox.moe/pxcdyc.jpg"></div>
<div class="inventory-card-name" style="color: #ffa500;">Taktický úder</div>
<div class="inventory-card-description">Promyšlený útok</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+6 útok</span>
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+3 obrana</span>
</div>
</div>')[
(set: $equippedTacticalStrike to true)
(set: $lastEquipMessage to "Taktický úder equipnut!")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
]
](else:)[
<div class="inventory-card combat-card locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/pxcdyc.jpg"></div>
<div class="inventory-card-name" style="color: #666;">Taktický úder</div>
<div class="inventory-card-description">Nenalezeno</div>
</div>
]
<!-- ADRENALIN -->
(if: $hasAdrenaline)[
(if: $equippedAdrenaline)[
(link: '<div class="inventory-card combat-card" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/g9he6c.jpg"></div>
<div class="inventory-card-name" style="color: #ffa500;">✓ Adrenalin</div>
<div class="inventory-card-description">Rychlý útok</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+3 útok</span>
<span class="inventory-card-stat" style="background: rgba(50,200,50,0.5);">-3 kondice</span>
</div>
</div>')[
(set: $equippedAdrenaline to false)
(set: $lastEquipMessage to "Adrenalin odložen")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
](else:)[
(link: '<div class="inventory-card combat-card">
<div class="inventory-card-image"><img src="https://files.catbox.moe/g9he6c.jpg"></div>
<div class="inventory-card-name" style="color: #ffa500;">Adrenalin</div>
<div class="inventory-card-description">Rychlý útok</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+3 útok</span>
<span class="inventory-card-stat" style="background: rgba(50,200,50,0.5);">-3 kondice</span>
</div>
</div>')[
(set: $equippedAdrenaline to true)
(set: $lastEquipMessage to "Adrenalin equipnut!")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
]
](else:)[
<div class="inventory-card combat-card locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/7qak07.png"></div>
<div class="inventory-card-name" style="color: #666;">Adrenalin</div>
<div class="inventory-card-description">Nenalezeno</div>
</div>
]
<!-- MEDITACE -->
(if: $hasMeditate)[
(if: $equippedMeditate)[
(link: '<div class="inventory-card combat-card" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/p8vj5l.jpg"></div>
<div class="inventory-card-name" style="color: #87ceeb;">✓ Meditace</div>
<div class="inventory-card-description">Natrhsval</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+2 obrana</span>
<span class="inventory-card-stat" style="background: rgba(50,200,50,0.5);">-6 kondice</span>
</div>
</div>')[
(set: $equippedMeditate to false)
(set: $lastEquipMessage to "Natrhsval odložen")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
](else:)[
(link: '<div class="inventory-card combat-card">
<div class="inventory-card-image"><img src="https://files.catbox.moe/p8vj5l.jpg"></div>
<div class="inventory-card-name" style="color: #87ceeb;">Meditace</div>
<div class="inventory-card-description">Hluboké soustředění</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+2 obrana</span>
<span class="inventory-card-stat" style="background: rgba(50,200,50,0.5);">-6 kondice</span>
</div>
</div>')[
(set: $equippedMeditate to true)
(set: $lastEquipMessage to "Natrhsval equipnut!")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
]
](else:)[
<div class="inventory-card combat-card locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/9cgxs9.png"></div>
<div class="inventory-card-name" style="color: #666;">Meditace</div>
<div class="inventory-card-description">Nenalezeno</div>
</div>
]
<!-- POSLEDNÍ VZDOR -->
(if: $hasLastStand)[
(if: $equippedLastStand)[
(link: '<div class="inventory-card combat-card" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/gw1fxk.jpg"></div>
<div class="inventory-card-name" style="color: #dc143c;">✓ Poslední vzdor</div>
<div class="inventory-card-description">Zoufalý útok</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+10 útok</span>
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+2 obrana</span>
</div>
</div>')[
(set: $equippedLastStand to false)
(set: $lastEquipMessage to "Poslední vzdor odložen")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
](else:)[
(link: '<div class="inventory-card combat-card">
<div class="inventory-card-image"><img src="https://files.catbox.moe/gw1fxk.jpg"></div>
<div class="inventory-card-name" style="color: #dc143c;">Poslední vzdor</div>
<div class="inventory-card-description">Zoufalý útok</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(200,50,50,0.5);">+10 útok</span>
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+2 obrana</span>
</div>
</div>')[
(set: $equippedLastStand to true)
(set: $lastEquipMessage to "Poslední vzdor equipnut!")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
]
](else:)[
<div class="inventory-card combat-card locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/gw1fxk.jpg"></div>
<div class="inventory-card-name" style="color: #666;">Poslední vzdor</div>
<div class="inventory-card-description">Nenalezeno</div>
</div>
]
<!-- DRUHÝ DECH -->
(if: $hasSecondWind)[
(if: $equippedSecondWind)[
(link: '<div class="inventory-card combat-card" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/7qak07.png"></div>
<div class="inventory-card-name" style="color: #90ee90;">✓ Druhý dech</div>
<div class="inventory-card-description">Regenerace</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+3 obrana</span>
<span class="inventory-card-stat" style="background: rgba(50,200,50,0.5);">-4 kondice</span>
<span class="inventory-card-stat" style="background: rgba(50,200,50,0.5);">+3 HP</span>
</div>
</div>')[
(set: $equippedSecondWind to false)
(set: $lastEquipMessage to "Druhý dech odložen")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
](else:)[
(link: '<div class="inventory-card combat-card">
<div class="inventory-card-image"><img src="https://files.catbox.moe/7qak07.png"></div>
<div class="inventory-card-name" style="color: #90ee90;">Druhý dech</div>
<div class="inventory-card-description">Regenerace</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(50,100,200,0.5);">+3 obrana</span>
<span class="inventory-card-stat" style="background: rgba(50,200,50,0.5);">-4 kondice</span>
<span class="inventory-card-stat" style="background: rgba(50,200,50,0.5);">+3 HP</span>
</div>
</div>')[
(set: $equippedSecondWind to true)
(set: $lastEquipMessage to "Druhý dech equipnut!")
(set: $showNotification to true)
(go-to: "InventoryCombat")
]
]
](else:)[
<div class="inventory-card combat-card locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/7qak07.png"></div>
<div class="inventory-card-name" style="color: #666;">Druhý dech</div>
<div class="inventory-card-description">Nenalezeno</div>
</div>
]
</div>
<div style="text-align: center; margin-top: 40px;">
(link-goto: "↩ Zpět do inventáře", "Inventory")<br><br>
(link: "Zpět do hry")[
(if: $returnPassage contains "Inventory")[
(go-to: "StartHry")
](else:)[
(go-to: $returnPassage)
]
]
</div>
<script>
$(document).ready(function() {
$('.inventory-grid tw-link').css({
'display': 'contents',
'padding': '0',
'margin': '0',
'border': 'none',
'background': 'none'
});
});
</script>
}{
<p style="text-align: center; color: #d4c5a9; font-style: italic; margin-bottom: 30px; font-family: 'Cinzel', serif;">
Klikni na předmět pro equipnutí/uložení do bojového balíčku.
</p>
<div class="inventory-grid">
<!-- ═══════════════════════════════════════════════════════════ -->
<!-- 🧪 EXISTUJÍCÍ PŘEDMĚTY (Lektvar léčení, Obvaz) 🧪 -->
<!-- ═══════════════════════════════════════════════════════════ -->
(if: $hasPotion > 0)[
<div class="inventory-card consumable">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/nh7x9n.png">
</div>
<div class="inventory-card-name" style="color: #6cdb1d;">Lektvar léčení</div>
<div class="inventory-card-description">Obnoví 10 HP</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(40,150,40,0.5); border-color: rgba(100,200,100,0.4);">Počet: $hasPotion</span>
</div>
</div>
]
(if: $hasObvaz > 0)[
<div class="inventory-card consumable">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/i1mcha.png">
</div>
<div class="inventory-card-name" style="color: #f5e6d3;">Obvaz</div>
<div class="inventory-card-description">Malé ošetření rány (Obnoví 1 HP)</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(40,150,40,0.5); border-color: rgba(100,200,100,0.4);">Počet: $hasObvaz</span>
</div>
</div>
]
<!-- ═══════════════════════════════════════════════════════════ -->
<!-- 📜 SVITKY (7 ks) - KLIKATELNÉ PRO EQUIPNUTÍ 📜 -->
<!-- ═══════════════════════════════════════════════════════════ -->
<!-- SVITEK OHNIVÉ KOULE -->
(if: $hasScrollFireball and $scrollFireballCount > 0)[
(if: $equippedScrollFireball)[
(link: '<div class="inventory-card consumable equipped">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/2olwuv.png">
</div>
<div class="inventory-card-name" style="color: #ff6b35;">🔥 Svitek ohnivé koule</div>
<div class="inventory-card-description">Útok +12 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(255,107,53,0.5); border-color: rgba(255,107,53,0.4);">×' + (text: $scrollFireballCount) + ' | ✓ Equipnuto</span>
</div>
</div>')[
(set: $equippedScrollFireball to false)
(go-to: "InventoryConsumables")
]
](else:)[
(link: '<div class="inventory-card consumable">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/2olwuv.png">
</div>
<div class="inventory-card-name" style="color: #ff6b35;">🔥 Svitek ohnivé koule</div>
<div class="inventory-card-description">Útok +12 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(255,107,53,0.5); border-color: rgba(255,107,53,0.4);">×' + (text: $scrollFireballCount) + '</span>
</div>
</div>')[
(set: $equippedScrollFireball to true)
(go-to: "InventoryConsumables")
]
]
]
<!-- SVITEK LÉČENÍ -->
(if: $hasScrollHeal and $scrollHealCount > 0)[
(if: $equippedScrollHeal)[
(link: '<div class="inventory-card consumable equipped">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/9cgxs9.png">
</div>
<div class="inventory-card-name" style="color: #6cdb1d;">💚 Svitek léčení</div>
<div class="inventory-card-description">Léčí +8 HP | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(40,150,40,0.5); border-color: rgba(100,200,100,0.4);">×' + (text: $scrollHealCount) + ' | ✓ Equipnuto</span>
</div>
</div>')[
(set: $equippedScrollHeal to false)
(go-to: "InventoryConsumables")
]
](else:)[
(link: '<div class="inventory-card consumable">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/9cgxs9.png">
</div>
<div class="inventory-card-name" style="color: #6cdb1d;">💚 Svitek léčení</div>
<div class="inventory-card-description">Léčí +8 HP | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(40,150,40,0.5); border-color: rgba(100,200,100,0.4);">×' + (text: $scrollHealCount) + '</span>
</div>
</div>')[
(set: $equippedScrollHeal to true)
(go-to: "InventoryConsumables")
]
]
]
<!-- SVITEK OCHRANY -->
(if: $hasScrollShield and $scrollShieldCount > 0)[
(if: $equippedScrollShield)[
(link: '<div class="inventory-card consumable equipped">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/fg8ccm.png">
</div>
<div class="inventory-card-name" style="color: #6496c8;">🛡️ Svitek ochrany</div>
<div class="inventory-card-description">Obrana +10 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(100,150,200,0.5); border-color: rgba(100,150,200,0.4);">×' + (text: $scrollShieldCount) + ' | ✓ Equipnuto</span>
</div>
</div>')[
(set: $equippedScrollShield to false)
(go-to: "InventoryConsumables")
]
](else:)[
(link: '<div class="inventory-card consumable">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/fg8ccm.png">
</div>
<div class="inventory-card-name" style="color: #6496c8;">🛡️ Svitek ochrany</div>
<div class="inventory-card-description">Obrana +10 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(100,150,200,0.5); border-color: rgba(100,150,200,0.4);">×' + (text: $scrollShieldCount) + '</span>
</div>
</div>')[
(set: $equippedScrollShield to true)
(go-to: "InventoryConsumables")
]
]
]
<!-- SVITEK BLESKU -->
(if: $hasScrollLightning and $scrollLightningCount > 0)[
(if: $equippedScrollLightning)[
(link: '<div class="inventory-card consumable equipped">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/7qak07.png">
</div>
<div class="inventory-card-name" style="color: #ffd700;">⚡ Svitek blesku</div>
<div class="inventory-card-description">Útok +10 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(255,215,0,0.5); border-color: rgba(255,215,0,0.4);">×' + (text: $scrollLightningCount) + ' | ✓ Equipnuto</span>
</div>
</div>')[
(set: $equippedScrollLightning to false)
(go-to: "InventoryConsumables")
]
](else:)[
(link: '<div class="inventory-card consumable">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/7qak07.png">
</div>
<div class="inventory-card-name" style="color: #ffd700;">⚡ Svitek blesku</div>
<div class="inventory-card-description">Útok +10 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(255,215,0,0.5); border-color: rgba(255,215,0,0.4);">×' + (text: $scrollLightningCount) + '</span>
</div>
</div>')[
(set: $equippedScrollLightning to true)
(go-to: "InventoryConsumables")
]
]
]
<!-- SVITEK MRAZU -->
(if: $hasScrollFrost and $scrollFrostCount > 0)[
(if: $equippedScrollFrost)[
(link: '<div class="inventory-card consumable equipped">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/9cgxs9.png">
</div>
<div class="inventory-card-name" style="color: #87ceeb;">❄️ Svitek mrazu</div>
<div class="inventory-card-description">Útok +8 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(135,206,235,0.5); border-color: rgba(135,206,235,0.4);">×' + (text: $scrollFrostCount) + ' | ✓ Equipnuto</span>
</div>
</div>')[
(set: $equippedScrollFrost to false)
(go-to: "InventoryConsumables")
]
](else:)[
(link: '<div class="inventory-card consumable">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/9cgxs9.png">
</div>
<div class="inventory-card-name" style="color: #87ceeb;">❄️ Svitek mrazu</div>
<div class="inventory-card-description">Útok +8 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(135,206,235,0.5); border-color: rgba(135,206,235,0.4);">×' + (text: $scrollFrostCount) + '</span>
</div>
</div>')[
(set: $equippedScrollFrost to true)
(go-to: "InventoryConsumables")
]
]
]
<!-- SVITEK TELEPORTACE -->
(if: $hasScrollTeleport and $scrollTeleportCount > 0)[
(if: $equippedScrollTeleport)[
(link: '<div class="inventory-card consumable equipped">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/2olwuv.png">
</div>
<div class="inventory-card-name" style="color: #9370db;">🌀 Svitek teleportace</div>
<div class="inventory-card-description">Obrana +8 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(147,112,219,0.5); border-color: rgba(147,112,219,0.4);">×' + (text: $scrollTeleportCount) + ' | ✓ Equipnuto</span>
</div>
</div>')[
(set: $equippedScrollTeleport to false)
(go-to: "InventoryConsumables")
]
](else:)[
(link: '<div class="inventory-card consumable">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/2olwuv.png">
</div>
<div class="inventory-card-name" style="color: #9370db;">🌀 Svitek teleportace</div>
<div class="inventory-card-description">Obrana +8 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(147,112,219,0.5); border-color: rgba(147,112,219,0.4);">×' + (text: $scrollTeleportCount) + '</span>
</div>
</div>')[
(set: $equippedScrollTeleport to true)
(go-to: "InventoryConsumables")
]
]
]
<!-- SVITEK ZMRTVÝCHVSTÁNÍ -->
(if: $hasScrollRevive and $scrollReviveCount > 0)[
(if: $equippedScrollRevive)[
(link: '<div class="inventory-card consumable equipped legendary">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/vf3p07.png">
</div>
<div class="inventory-card-name" style="color: #ffd700;">⭐ Svitek zmrtvýchvstání</div>
<div class="inventory-card-description">Léčí +15 HP | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(255,215,0,0.5); border-color: rgba(255,215,0,0.4);">×' + (text: $scrollReviveCount) + ' | ✓ Equipnuto</span>
</div>
</div>')[
(set: $equippedScrollRevive to false)
(go-to: "InventoryConsumables")
]
](else:)[
(link: '<div class="inventory-card consumable legendary">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/vf3p07.png">
</div>
<div class="inventory-card-name" style="color: #ffd700;">⭐ Svitek zmrtvýchvstání</div>
<div class="inventory-card-description">Léčí +15 HP | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(255,215,0,0.5); border-color: rgba(255,215,0,0.4);">×' + (text: $scrollReviveCount) + '</span>
</div>
</div>')[
(set: $equippedScrollRevive to true)
(go-to: "InventoryConsumables")
]
]
]
<!-- ═══════════════════════════════════════════════════════════ -->
<!-- 🧪 LEKTVARY (7 ks) - KLIKATELNÉ PRO EQUIPNUTÍ 🧪 -->
<!-- ═══════════════════════════════════════════════════════════ -->
<!-- MALÝ LEKTVAR ZDRAVÍ -->
(if: $hasPotionHealthSmall and $potionHealthSmallCount > 0)[
(if: $equippedPotionHealthSmall)[
(link: '<div class="inventory-card consumable equipped">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/9cgxs9.png">
</div>
<div class="inventory-card-name" style="color: #6cdb1d;">💚 Malý lektvar zdraví</div>
<div class="inventory-card-description">Léčí +5 HP | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(40,150,40,0.5); border-color: rgba(100,200,100,0.4);">×' + (text: $potionHealthSmallCount) + ' | ✓ Equipnuto</span>
</div>
</div>')[
(set: $equippedPotionHealthSmall to false)
(go-to: "InventoryConsumables")
]
](else:)[
(link: '<div class="inventory-card consumable">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/9cgxs9.png">
</div>
<div class="inventory-card-name" style="color: #6cdb1d;">💚 Malý lektvar zdraví</div>
<div class="inventory-card-description">Léčí +5 HP | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(40,150,40,0.5); border-color: rgba(100,200,100,0.4);">×' + (text: $potionHealthSmallCount) + '</span>
</div>
</div>')[
(set: $equippedPotionHealthSmall to true)
(go-to: "InventoryConsumables")
]
]
]
<!-- STŘEDNÍ LEKTVAR ZDRAVÍ -->
(if: $hasPotionHealthMedium and $potionHealthMediumCount > 0)[
(if: $equippedPotionHealthMedium)[
(link: '<div class="inventory-card consumable equipped">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/9cgxs9.png">
</div>
<div class="inventory-card-name" style="color: #6cdb1d;">💚 Střední lektvar zdraví</div>
<div class="inventory-card-description">Léčí +10 HP | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(40,150,40,0.5); border-color: rgba(100,200,100,0.4);">×' + (text: $potionHealthMediumCount) + ' | ✓ Equipnuto</span>
</div>
</div>')[
(set: $equippedPotionHealthMedium to false)
(go-to: "InventoryConsumables")
]
](else:)[
(link: '<div class="inventory-card consumable">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/9cgxs9.png">
</div>
<div class="inventory-card-name" style="color: #6cdb1d;">💚 Střední lektvar zdraví</div>
<div class="inventory-card-description">Léčí +10 HP | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(40,150,40,0.5); border-color: rgba(100,200,100,0.4);">×' + (text: $potionHealthMediumCount) + '</span>
</div>
</div>')[
(set: $equippedPotionHealthMedium to true)
(go-to: "InventoryConsumables")
]
]
]
<!-- VELKÝ LEKTVAR ZDRAVÍ -->
(if: $hasPotionHealthLarge and $potionHealthLargeCount > 0)[
(if: $equippedPotionHealthLarge)[
(link: '<div class="inventory-card consumable equipped">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/9cgxs9.png">
</div>
<div class="inventory-card-name" style="color: #6cdb1d;">💚 Velký lektvar zdraví</div>
<div class="inventory-card-description">Léčí +20 HP | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(40,150,40,0.5); border-color: rgba(100,200,100,0.4);">×' + (text: $potionHealthLargeCount) + ' | ✓ Equipnuto</span>
</div>
</div>')[
(set: $equippedPotionHealthLarge to false)
(go-to: "InventoryConsumables")
]
](else:)[
(link: '<div class="inventory-card consumable">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/9cgxs9.png">
</div>
<div class="inventory-card-name" style="color: #6cdb1d;">💚 Velký lektvar zdraví</div>
<div class="inventory-card-description">Léčí +20 HP | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(40,150,40,0.5); border-color: rgba(100,200,100,0.4);">×' + (text: $potionHealthLargeCount) + '</span>
</div>
</div>')[
(set: $equippedPotionHealthLarge to true)
(go-to: "InventoryConsumables")
]
]
]
<!-- LEKTVAR SÍLY -->
(if: $hasPotionStrength and $potionStrengthCount > 0)[
(if: $equippedPotionStrength)[
(link: '<div class="inventory-card consumable equipped">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/sk5n4x.png">
</div>
<div class="inventory-card-name" style="color: #ff6b35;">💪 Lektvar síly</div>
<div class="inventory-card-description">Útok +5 | Kondice -2 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(255,107,53,0.5); border-color: rgba(255,107,53,0.4);">×' + (text: $potionStrengthCount) + ' | ✓ Equipnuto</span>
</div>
</div>')[
(set: $equippedPotionStrength to false)
(go-to: "InventoryConsumables")
]
](else:)[
(link: '<div class="inventory-card consumable">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/sk5n4x.png">
</div>
<div class="inventory-card-name" style="color: #ff6b35;">💪 Lektvar síly</div>
<div class="inventory-card-description">Útok +5 | Kondice -2 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(255,107,53,0.5); border-color: rgba(255,107,53,0.4);">×' + (text: $potionStrengthCount) + '</span>
</div>
</div>')[
(set: $equippedPotionStrength to true)
(go-to: "InventoryConsumables")
]
]
]
<!-- LEKTVAR OBRANY -->
(if: $hasPotionDefense and $potionDefenseCount > 0)[
(if: $equippedPotionDefense)[
(link: '<div class="inventory-card consumable equipped">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/fg8ccm.png">
</div>
<div class="inventory-card-name" style="color: #6496c8;">🛡️ Lektvar obrany</div>
<div class="inventory-card-description">Obrana +6 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(100,150,200,0.5); border-color: rgba(100,150,200,0.4);">×' + (text: $potionDefenseCount) + ' | ✓ Equipnuto</span>
</div>
</div>')[
(set: $equippedPotionDefense to false)
(go-to: "InventoryConsumables")
]
](else:)[
(link: '<div class="inventory-card consumable">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/fg8ccm.png">
</div>
<div class="inventory-card-name" style="color: #6496c8;">🛡️ Lektvar obrany</div>
<div class="inventory-card-description">Obrana +6 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(100,150,200,0.5); border-color: rgba(100,150,200,0.4);">×' + (text: $potionDefenseCount) + '</span>
</div>
</div>')[
(set: $equippedPotionDefense to true)
(go-to: "InventoryConsumables")
]
]
]
<!-- LEKTVAR RYCHLOSTI -->
(if: $hasPotionSpeed and $potionSpeedCount > 0)[
(if: $equippedPotionSpeed)[
(link: '<div class="inventory-card consumable equipped">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/7qak07.png">
</div>
<div class="inventory-card-name" style="color: #ffd700;">⚡ Lektvar rychlosti</div>
<div class="inventory-card-description">Útok +3 | Obrana +3 | Kondice -3 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(255,215,0,0.5); border-color: rgba(255,215,0,0.4);">×' + (text: $potionSpeedCount) + ' | ✓ Equipnuto</span>
</div>
</div>')[
(set: $equippedPotionSpeed to false)
(go-to: "InventoryConsumables")
]
](else:)[
(link: '<div class="inventory-card consumable">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/7qak07.png">
</div>
<div class="inventory-card-name" style="color: #ffd700;">⚡ Lektvar rychlosti</div>
<div class="inventory-card-description">Útok +3 | Obrana +3 | Kondice -3 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(255,215,0,0.5); border-color: rgba(255,215,0,0.4);">×' + (text: $potionSpeedCount) + '</span>
</div>
</div>')[
(set: $equippedPotionSpeed to true)
(go-to: "InventoryConsumables")
]
]
]
<!-- LEKTVAR NESMRTELNOSTI -->
(if: $hasPotionInvincibility and $potionInvincibilityCount > 0)[
(if: $equippedPotionInvincibility)[
(link: '<div class="inventory-card consumable equipped legendary">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/vf3p07.png"></div>
<div class="inventory-card-name" style="color: #ffd700;">⭐ Lektvar nesmrtelnosti</div>
<div class="inventory-card-description">Obrana +15 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(255,215,0,0.5); border-color: rgba(255,215,0,0.4);">×' + (text: $potionInvincibilityCount) + ' | ✓ Equipnuto</span>
</div>
</div>')[
(set: $equippedPotionInvincibility to false)
(go-to: "InventoryConsumables")
]
](else:)[
(link: '<div class="inventory-card consumable legendary">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/vf3p07.png">
</div>
<div class="inventory-card-name" style="color: #ffd700;">⭐ Lektvar nesmrtelnosti</div>
<div class="inventory-card-description">Obrana +15 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(255,215,0,0.5); border-color: rgba(255,215,0,0.4);">×' + (text: $potionInvincibilityCount) + '</span>
</div>
</div>')[
(set: $equippedPotionInvincibility to true)
(go-to: "InventoryConsumables")
]
]
]
<!-- ═══════════════════════════════════════════════════════════ -->
<!-- 💣 OSTATNÍ SPOTŘEBNÍ (6 ks) - KLIKATELNÉ PRO EQUIPNUTÍ 💣 -->
<!-- ═══════════════════════════════════════════════════════════ -->
<!-- KOUŘOVÁ BOMBA -->
(if: $hasSmokeBomb and $smokeBombCount > 0)[
(if: $equippedSmokeBomb)[
(link: '<div class="inventory-card consumable equipped">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/2olwuv.png">
</div>
<div class="inventory-card-name" style="color: #9370db;">💨 Kouřová bomba</div>
<div class="inventory-card-description">Obrana +7 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(147,112,219,0.5); border-color: rgba(147,112,219,0.4);">×' + (text: $smokeBombCount) + ' | ✓ Equipnuto</span>
</div>
</div>')[
(set: $equippedSmokeBomb to false)
(go-to: "InventoryConsumables")
]
](else:)[
(link: '<div class="inventory-card consumable">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/2olwuv.png">
</div>
<div class="inventory-card-name" style="color: #9370db;">💨 Kouřová bomba</div>
<div class="inventory-card-description">Obrana +7 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(147,112,219,0.5); border-color: rgba(147,112,219,0.4);">×' + (text: $smokeBombCount) + '</span>
</div>
</div>')[
(set: $equippedSmokeBomb to true)
(go-to: "InventoryConsumables")
]
]
]
<!-- SVATÁ VODA -->
(if: $hasHolyWater and $holyWaterCount > 0)[
(if: $equippedHolyWater)[
(link: '<div class="inventory-card consumable equipped">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/9cgxs9.png">
</div>
<div class="inventory-card-name" style="color: #87ceeb;">✝️ Svatá voda</div>
<div class="inventory-card-description">Útok +8 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(135,206,235,0.5); border-color: rgba(135,206,235,0.4);">×' + (text: $holyWaterCount) + ' | ✓ Equipnuto</span>
</div>
</div>')[
(set: $equippedHolyWater to false)
(go-to: "InventoryConsumables")
]
](else:)[
(link: '<div class="inventory-card consumable">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/9cgxs9.png">
</div>
<div class="inventory-card-name" style="color: #87ceeb;">✝️ Svatá voda</div>
<div class="inventory-card-description">Útok +8 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(135,206,235,0.5); border-color: rgba(135,206,235,0.4);">×' + (text: $holyWaterCount) + '</span>
</div>
</div>')[
(set: $equippedHolyWater to true)
(go-to: "InventoryConsumables")
]
]
]
<!-- OHNIVÁ BOMBA -->
(if: $hasFireBomb and $fireBombCount > 0)[
(if: $equippedFireBomb)[
(link: '<div class="inventory-card consumable equipped">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/sk5n4x.png">
</div>
<div class="inventory-card-name" style="color: #ff6b35;">💥 Ohnivá bomba</div>
<div class="inventory-card-description">Útok +14 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(255,107,53,0.5); border-color: rgba(255,107,53,0.4);">×' + (text: $fireBombCount) + ' | ✓ Equipnuto</span>
</div>
</div>')[
(set: $equippedFireBomb to false)
(go-to: "InventoryConsumables")
]
](else:)[
(link: '<div class="inventory-card consumable">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/sk5n4x.png">
</div>
<div class="inventory-card-name" style="color: #ff6b35;">💥 Ohnivá bomba</div>
<div class="inventory-card-description">Útok +14 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(255,107,53,0.5); border-color: rgba(255,107,53,0.4);">×' + (text: $fireBombCount) + '</span>
</div>
</div>')[
(set: $equippedFireBomb to true)
(go-to: "InventoryConsumables")
]
]
]
<!-- JEDOVÝ NŮŽ -->
(if: $hasPoisonDagger and $poisonDaggerCount > 0)[
(if: $equippedPoisonDagger)[
(link: '<div class="inventory-card consumable equipped">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/f3ijtv.png">
</div>
<div class="inventory-card-name" style="color: #9acd32;">🗡️ Jedový nůž</div>
<div class="inventory-card-description">Útok +6 | Kondice -1 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(154,205,50,0.5); border-color: rgba(154,205,50,0.4);">×' + (text: $poisonDaggerCount) + ' | ✓ Equipnuto</span>
</div>
</div>')[
(set: $equippedPoisonDagger to false)
(go-to: "InventoryConsumables")
]
](else:)[
(link: '<div class="inventory-card consumable">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/f3ijtv.png">
</div>
<div class="inventory-card-name" style="color: #9acd32;">🗡️ Jedový nůž</div>
<div class="inventory-card-description">Útok +6 | Kondice -1 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(154,205,50,0.5); border-color: rgba(154,205,50,0.4);">×' + (text: $poisonDaggerCount) + '</span>
</div>
</div>')[
(set: $equippedPoisonDagger to true)
(go-to: "InventoryConsumables")
]
]
]
<!-- HROMOVÝ KÁMEN -->
(if: $hasThunderstone and $thunderstoneCount > 0)[
(if: $equippedThunderstone)[
(link: '<div class="inventory-card consumable equipped">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/7qak07.png">
</div>
<div class="inventory-card-name" style="color: #ffd700;">⚡ Hromový kámen</div>
<div class="inventory-card-description">Útok +10 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(255,215,0,0.5); border-color: rgba(255,215,0,0.4);">×' + (text: $thunderstoneCount) + ' | ✓ Equipnuto</span>
</div>
</div>')[
(set: $equippedThunderstone to false)
(go-to: "InventoryConsumables")
]
](else:)[
(link: '<div class="inventory-card consumable">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/7qak07.png">
</div>
<div class="inventory-card-name" style="color: #ffd700;">⚡ Hromový kámen</div>
<div class="inventory-card-description">Útok +10 | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(255,215,0,0.5); border-color: rgba(255,215,0,0.4);">×' + (text: $thunderstoneCount) + '</span>
</div>
</div>')[
(set: $equippedThunderstone to true)
(go-to: "InventoryConsumables")
]
]
]
<!-- AMULET OCHRANY -->
(if: $hasProtectionAmulet and $protectionAmuletCount > 0)[
(if: $equippedProtectionAmulet)[
(link: '<div class="inventory-card consumable equipped">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/9cgxs9.png">
</div>
<div class="inventory-card-name" style="color: #ffd700;">🔮 Amulet ochrany</div>
<div class="inventory-card-description">Léčí +12 HP | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(255,215,0,0.5); border-color: rgba(255,215,0,0.4);">×' + (text: $protectionAmuletCount) + ' | ✓ Equipnuto</span>
</div>
</div>')[
(set: $equippedProtectionAmulet to false)
(go-to: "InventoryConsumables")
]
](else:)[
(link: '<div class="inventory-card consumable">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/9cgxs9.png">
</div>
<div class="inventory-card-name" style="color: #ffd700;">🔮 Amulet ochrany</div>
<div class="inventory-card-description">Léčí +12 HP | Spotřební</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(255,215,0,0.5); border-color: rgba(255,215,0,0.4);">×' + (text: $protectionAmuletCount) + '</span>
</div>
</div>')[
(set: $equippedProtectionAmulet to true)
(go-to: "InventoryConsumables")
]
]
]
<!-- ═══════════════════════════════════════════════════════════ -->
<!-- 🔑 KLÍČOVÉ PŘEDMĚTY (Neequipnutelné) 🔑 -->
<!-- ═══════════════════════════════════════════════════════════ -->
(if: $hasKey)[
<div class="inventory-card key-item" style="border-color: rgba(255,215,0,0.6);">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/1rhk43.png">
</div>
<div class="inventory-card-name" style="color: #ffd700;">Klíč</div>
<div class="inventory-card-description">Odemyká zamčené dveře.</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">Důležitý předmět</span>
</div>
</div>
]
(if: $hasMap)[
<div class="inventory-card key-item" style="border-color: rgba(255,215,0,0.6);">
<div class="inventory-card-image">
<img src="https://files.catbox.moe/1fs7tw.png">
</div>
<div class="inventory-card-name" style="color: #ffd700;">Mapa</div>
<div class="inventory-card-description">Ukazuje cestu a důležité lokace.</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">Důležitý předmět</span>
</div>
</div>
]
<!-- PRÁZDNÝ INVENTÁŘ -->
(if: $hasPotion is 0 and $hasObvaz is 0 and not $hasKey and not $hasMap and
(not $hasScrollFireball or $scrollFireballCount is 0) and
(not $hasScrollHeal or $scrollHealCount is 0) and
(not $hasScrollShield or $scrollShieldCount is 0) and
(not $hasScrollLightning or $scrollLightningCount is 0) and
(not $hasScrollFrost or $scrollFrostCount is 0) and
(not $hasScrollTeleport or $scrollTeleportCount is 0) and
(not $hasScrollRevive or $scrollReviveCount is 0) and
(not $hasPotionHealthSmall or $potionHealthSmallCount is 0) and
(not $hasPotionHealthMedium or $potionHealthMediumCount is 0) and
(not $hasPotionHealthLarge or $potionHealthLargeCount is 0) and
(not $hasPotionStrength or $potionStrengthCount is 0) and
(not $hasPotionDefense or $potionDefenseCount is 0) and
(not $hasPotionSpeed or $potionSpeedCount is 0) and
(not $hasPotionInvincibility or $potionInvincibilityCount is 0) and
(not $hasSmokeBomb or $smokeBombCount is 0) and
(not $hasHolyWater or $holyWaterCount is 0) and
(not $hasFireBomb or $fireBombCount is 0) and
(not $hasPoisonDagger or $poisonDaggerCount is 0) and
(not $hasThunderstone or $thunderstoneCount is 0) and
(not $hasProtectionAmulet or $protectionAmuletCount is 0))[
<div style="grid-column: 1/-1; text-align: center; padding: 60px 20px;">
<p style="font-size: 18px; color: #888; font-family: 'Cinzel', serif; margin-top: 10px;">Nemáš žádné spotřební předměty</p>
</div>
]
</div>
<div style="text-align: center; margin-top: 40px;">
(link-goto: "↩ Zpět do inventáře", "Inventory")<br><br>
(link: "Zpět do hry")[
(if: $returnPassage is "Inventory" or $returnPassage is "InventoryWeapons" or $returnPassage is "InventoryArmor" or $returnPassage is "InventoryShields" or $returnPassage is "InventoryConsumables")[
(go-to: "StartHry")
](else:)[
(go-to: $returnPassage)
]
]
</div>
<style>
.inventory-card.equipped {
border-color: rgba(255, 215, 0, 0.9) !important;
box-shadow: 0 0 20px rgba(255, 215, 0, 0.6) !important;
}
.inventory-card.legendary {
border: 2px solid #ffd700;
box-shadow: 0 0 25px rgba(255, 215, 0, 0.8);
}
.inventory-card.legendary:hover {
box-shadow: 0 0 35px rgba(255, 215, 0, 1);
}
</style>
<script>
$(document).ready(function() {
$('.inventory-card.consumable, .inventory-card.key-item').css({
'cursor': 'pointer',
});
// Klíčové předměty zůstanou neklikatelné
$('.inventory-card.key-item').css({
'cursor': 'default',
});
$('.inventory-card.key-item').hover(function() {
$(this).css({
'transform': 'none',
'box-shadow': '0 8px 20px rgba(0,0,0,0.4), inset 0 2px 4px rgba(139,105,20,0.2)',
'border-color': 'rgba(255,215,0,0.6)'
});
$(this).find('.inventory-card-image img').css('transform', 'none');
});
});
</script>
}{
<div id="settingContainer">
(link-goto: "<div class='setting'>⚙️<span class='tooltip'>Nastavení</span></div>", "Nastaveni")
</div>
<div id="inventoryButtonContainer">
(link: "<div class='setting'>📦<span class='tooltip'>Inventář</span></div>")[
(set: $returnPassage to (passage:)'s name)
(go-to: "Inventory")
]
</div>
<div id="msgContainer"|msg></div>
<div id="traitContainer">
(if: $trait1)[
<div class="trait">
<img src="https://files.catbox.moe/ub9joh.png">
<span class="tooltip">(text-colour:#f66)[Pomožděná ruka]</span>
</div>
]
</div>
}{
(if: ($lastEquipMessage is not "") and ($showNotification is true))[
<div class="notification-message">$lastEquipMessage</div>
](set: $showNotification to false)
<div class="weapon-selection-header">
<h2>🏹 Vyber si střelnou zbraň 🔮</h2>
</div>
<div class="weapon-cards-container">
<!-- HŮL OHNIVÉ KOULE -->
(if: $hasFireballStaff)[
(if: $equippedWeapons contains "fireballStaff")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/7qak07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "fireballStaff"))
(set: $lastEquipMessage to "🔥 Hůl ohnivé koule odložena")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/7qak07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "fireballStaff"))
(set: $lastEquipMessage to "🔥 Hůl ohnivé koule equipnuta!")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
]
]
<!-- HŮLKA BLESKU -->
(if: $hasLightningWand)[
(if: $equippedWeapons contains "lightningWand")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/2olwuv.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "lightningWand"))
(set: $lastEquipMessage to "⚡ Hůlka blesku odložena")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/2olwuv.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "lightningWand"))
(set: $lastEquipMessage to "⚡ Hůlka blesku equipnuta!")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
]
]
<!-- LEDOVÁ SFÉRA -->
(if: $hasFrostOrb)[
(if: $equippedWeapons contains "frostOrb")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/9cgxs9.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "frostOrb"))
(set: $lastEquipMessage to "❄️ Ledová sféra odložena")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/9cgxs9.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "frostOrb"))
(set: $lastEquipMessage to "❄️ Ledová sféra equipnuta!")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
]
]
<!-- ARKÁNOVÝ VRHAČ -->
(if: $hasArcaneBlaster)[
(if: $equippedWeapons contains "arcaneBlaster")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/sk5n4x.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "arcaneBlaster"))
(set: $lastEquipMessage to "🔮 Arkánový vrhač odložen")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/sk5n4x.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "arcaneBlaster"))
(set: $lastEquipMessage to "🔮 Arkánový vrhač equipnut!")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
]
]
<!-- ŽEZLO PRÁZDNOTY -->
(if: $hasVoidScepter)[
(if: $equippedWeapons contains "voidScepter")[
(link: '<div class="weapon-card equipped legendary">
<div class="card-image"><img src="https://files.catbox.moe/vf3p07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "voidScepter"))
(set: $lastEquipMessage to "⚫ Žezlo prázdnoty odloženo")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
](else:)[
(link: '<div class="weapon-card legendary">
<div class="card-image"><img src="https://files.catbox.moe/vf3p07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "voidScepter"))
(set: $lastEquipMessage to "⚫ ŽEZLO PRÁZDNOTY EQUIPNUTO!")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
]
]
<!-- PRUT SLUNEČNÍHO PAPRSKU -->
(if: $hasSunbeamRod)[
(if: $equippedWeapons contains "sunbeamRod")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/7qak07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "sunbeamRod"))
(set: $lastEquipMessage to "☀️ Prut slunečního paprsku odložen")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/7qak07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "sunbeamRod"))
(set: $lastEquipMessage to "☀️ Prut slunečního paprsku equipnut!")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
]
]
<!-- STÍNOVÝ ŠÍP -->
(if: $hasShadowBolt)[
(if: $equippedWeapons contains "shadowBolt")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/f3ijtv.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "shadowBolt"))
(set: $lastEquipMessage to "🌑 Stínový šíp odložen")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/f3ijtv.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "shadowBolt"))
(set: $lastEquipMessage to "🌑 Stínový šíp equipnut!")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
]
]
<!-- CHAOTICKÁ KOULE -->
(if: $hasChaosOrb)[
(if: $equippedWeapons contains "chaosOrb")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/8ryt3d.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "chaosOrb"))
(set: $lastEquipMessage to "🌀 Chaotická koule odložena")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/8ryt3d.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "chaosOrb"))
(set: $lastEquipMessage to "🌀 Chaotická koule equipnuta!")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
]
]
<!-- HVĚZDNÝ PÁD -->
(if: $hasStarfall)[
(if: $equippedWeapons contains "starfall")[
(link: '<div class="weapon-card equipped legendary">
<div class="card-image"><img src="https://files.catbox.moe/vf3p07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "starfall"))
(set: $lastEquipMessage to "⭐ Hvězdný pád odložen")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
](else:)[
(link: '<div class="weapon-card legendary">
<div class="card-image"><img src="https://files.catbox.moe/vf3p07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "starfall"))
(set: $lastEquipMessage to "⭐ HVĚZDNÝ PÁD EQUIPNUT!")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
]
]
<!-- MYSTICKÁ STŘELA -->
(if: $hasMysticMissile)[
(if: $equippedWeapons contains "mysticMissile")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/2olwuv.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "mysticMissile"))
(set: $lastEquipMessage to "✨ Mystická střela odložena")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/2olwuv.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "mysticMissile"))
(set: $lastEquipMessage to "✨ Mystická střela equipnuta!")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
]
]
<!-- KOMPOZITNÍ LUK -->
(if: $hasCompositeBow)[
(if: $equippedWeapons contains "compositebow")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/7qak07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "compositebow"))
(set: $lastEquipMessage to "Kompozitní luk odložen")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/7qak07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "compositebow"))
(set: $lastEquipMessage to "Kompozitní luk equipnut!")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
]
]
<!-- REFLEXNÍ LUK -->
(if: $hasRecurveBow)[
(if: $equippedWeapons contains "recurvebow")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/7qak07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "recurvebow"))
(set: $lastEquipMessage to "Reflexní luk odložen")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/7qak07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "recurvebow"))
(set: $lastEquipMessage to "Reflexní luk equipnut!")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
]
]
<!-- TĚŽKÁ KUŠE -->
(if: $hasHeavyCrossbow)[
(if: $equippedWeapons contains "heavyCrossbow")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/2olwuv.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "heavyCrossbow"))
(set: $lastEquipMessage to "Těžká kuše odložena")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/2olwuv.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "heavyCrossbow"))
(set: $lastEquipMessage to "Těžká kuše equipnuta!")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
]
]
<!-- OPAKUJÍCÍ KUŠE -->
(if: $hasRepeatingCrossbow)[
(if: $equippedWeapons contains "repeatingCrossbow")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/2olwuv.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "repeatingCrossbow"))
(set: $lastEquipMessage to "Opakující kuše odložena")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/2olwuv.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "repeatingCrossbow"))
(set: $lastEquipMessage to "Opakující kuše equipnuta!")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
]
]
<!-- VÁLEČNÝ LUK -->
(if: $hasWarbow)[
(if: $equippedWeapons contains "warbow")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/7qak07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "warbow"))
(set: $lastEquipMessage to "Válečný luk odložen")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/7qak07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "warbow"))
(set: $lastEquipMessage to "Válečný luk equipnut!")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
]
]
<!-- ODSTŘELOVAČSKÁ KUŠE -->
(if: $hasSniperCrossbow)[
(if: $equippedWeapons contains "sniperCrossbow")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/2olwuv.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "sniperCrossbow"))
(set: $lastEquipMessage to "Odstřelovačská kuše odložena")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/2olwuv.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "sniperCrossbow"))
(set: $lastEquipMessage to "Odstřelovačská kuše equipnuta!")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
]
]
<!-- LOVECKÝ LUK -->
(if: $hasHunterBow)[
(if: $equippedWeapons contains "hunterBow")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/7qak07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "hunterBow"))
(set: $lastEquipMessage to "Lovecký luk odložen")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/7qak07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "hunterBow"))
(set: $lastEquipMessage to "Lovecký luk equipnut!")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
]
]
<!-- ELFSKÝ LUK -->
(if: $hasElvenBow)[
(if: $equippedWeapons contains "elvenBow")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/h2pl87.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "elvenBow"))
(set: $lastEquipMessage to "✨ Elfský luk odložen")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/h2pl87.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "elvenBow"))
(set: $lastEquipMessage to "✨ Elfský luk equipnut!")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
]
]
<!-- DRAČÍ KUŠE -->
(if: $hasDragonCrossbow)[
(if: $equippedWeapons contains "dragonCrossbow")[
(link: '<div class="weapon-card equipped legendary">
<div class="card-image"><img src="https://files.catbox.moe/vf3p07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "dragonCrossbow"))
(set: $lastEquipMessage to "🐉 Dračí kuše odložena")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
](else:)[
(link: '<div class="weapon-card legendary">
<div class="card-image"><img src="https://files.catbox.moe/vf3p07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "dragonCrossbow"))
(set: $lastEquipMessage to "🐉 DRAČÍ KUŠE EQUIPNUTA!")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
]
]
<!-- LUK VĚTRU -->
(if: $hasWindbow)[
(if: $equippedWeapons contains "windbow")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/7qak07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "windbow"))
(set: $lastEquipMessage to "🌬️ Luk větru odložen")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/7qak07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "windbow"))
(set: $lastEquipMessage to "🌬️ Luk větru equipnut!")
(set: $showNotification to true)
(go-to: "InventoryRangeWeapons")
]
]
]
</div>
<style>
.notification-message {
background: rgba(212, 175, 55, 0.2);
border: 2px solid #d4af37;
border-radius: 1px;
padding: 15px;
margin: 20px auto;
max-width: 600px;
text-align: center;
color: #d4af37;
font-family: 'Cinzel', serif;
font-size: 16px;
animation: fadeIn 0.5s ease;
}
.weapon-selection-header {
text-align: center;
margin: 30px 0;
color: #d4af37;
font-family: 'Cinzel', serif;
}
.weapon-selection-header h2 {
font-size: 24px;
margin: 0;
}
.weapon-cards-container {
display: flex;
justify-content: center;
align-items: flex-start;
flex-wrap: wrap;
gap: 30px;
margin: 40px auto;
max-width: 1200px;
padding: 0 20px;
}
.weapon-card {
position: relative;
width: 160px;
height: 196px;
background: none;
border: none;
padding: 0;
text-align: center;
cursor: pointer;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.weapon-card:not(.locked):hover {
transform: translateY(-10px) scale(1.05);
}
.weapon-card.equipped {
filter: brightness(1.3);
}
.weapon-card.equipped .card-image img {
box-shadow: 0 0 20px rgba(255, 215, 0, 0.8);
}
.weapon-card.legendary {
border: 2px solid #ffd700;
box-shadow: 0 0 15px rgba(255, 215, 0, 0.6);
}
.weapon-card.legendary:hover {
box-shadow: 0 0 30px rgba(255, 215, 0, 0.9);
}
.weapon-card.locked {
opacity: 0.5;
cursor: not-allowed;
filter: grayscale(50%);
}
.card-image {
width: 100%;
height: 100%;
margin: 0 auto;
position: relative;
display: flex;
align-items: center;
justify-content: center;
}
.card-image img {
max-width: 100%;
max-height: 100%;
object-fit: contain;
transition: filter 0.3s ease;
border-radius: 8px;
}
.weapon-card:not(.locked):hover .card-image img {
filter: brightness(1.2) drop-shadow(0 0 15px rgba(212, 175, 55, 0.8));
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(-10px); }
to { opacity: 1; transform: translateY(0); }
}
</style>
<script>
$(document).ready(function() {
$('.weapon-cards-container tw-link').css({
'display': 'contents',
'text-decoration': 'none'
});
});
</script>
<div style="text-align: center; margin-top: 40px;">
(link-goto: "↩ Zpět do inventáře", "Inventory")<br><br>
(link: "Zpět do hry")[
(if: $returnPassage is "Inventory" or $returnPassage is "InventoryWeapons" or $returnPassage is "InventoryRangeWeapons" or $returnPassage is "InventoryArmor" or $returnPassage is "InventoryShields" or $returnPassage is "InventoryConsumables")[
(go-to: "StartHry")
](else:)[
(go-to: $returnPassage)
]
]
</div>
}{(if: ($lastEquipMessage is not "") and ($showNotification is true))[
<div id="equip-notification" class="show-notification">$lastEquipMessage</div>
]
(set: $showNotification to false)
<style>
#equip-notification {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: linear-gradient(135deg, rgba(40,40,40,0.7), rgba(20,20,20,0.7));
border: 2px solid #735b29;
border-radius: 12px;
padding: 25px 40px;
color: #b0a04c;
font-family: 'Cinzel', serif;
font-size: 20px;
box-shadow: 0 8px 32px rgba(0,0,0,0.8), 0 0 20px rgba(255,215,0,0.8);
z-index: 10000;
min-width: 300px;
text-align: center;
}
.show-notification {
animation: fadeInOut 0.9s ease-in-out 0.2s forwards;
}
@keyframes fadeInOut {
0%, 15%, 85% { opacity: 1; transform: translate(-50%, -50%) scale(1); }
100% { opacity: 0; transform: translate(-50%, -50%) scale(1); }
}
@keyframes equip-blink {
0%, 100% { box-shadow: 0 0 0 3px rgba(176, 160, 76, 0.9), 0 0 25px rgba(125, 69, 36, 0.5); }
50% { box-shadow: 0 0 0 8px rgba(48, 89, 76, 0.4), 0 0 15px rgba(66, 60, 20, 0.2); }
}
.inventory-card.locked {
opacity: 0.4;
filter: grayscale(80%);
cursor: not-allowed;
}
.inventory-card.locked::after {
content: "🔒";
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
font-size: 48px;
color: #888;
}
</style>
<p style="text-align: center; color: #d4c5a9; font-style: italic; margin-bottom: 30px; font-family: 'Cinzel', serif;">
Můžeš nést a používat libovolný počet štítů najednou.
</p>
<div class="inventory-grid">
(if: $hasWoodenShield)[
(if: $equippedWoodenShield is true)[
(link: '<div class="inventory-card shield" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/9cgxs9.png"></div>
<div class="inventory-card-name">✓ Dřevěný štít</div>
<div class="inventory-card-stats"><span class="inventory-card-stat">+1 DEF</span></div>
</div>')[
(set: $equippedWoodenShield to false)
(set: $lastEquipMessage to "🛡 Dřevěný štít odložen")
(set: $showNotification to true)
(go-to: "InventoryShields")
]
](else:)[
(link: '<div class="inventory-card shield">
<div class="inventory-card-image"><img src="https://files.catbox.moe/9cgxs9.png"></div>
<div class="inventory-card-name">Dřevěný štít</div>
<div class="inventory-card-stats"><span class="inventory-card-stat">+1 DEF</span></div>
</div>')[
(set: $equippedWoodenShield to true)
(set: $lastEquipMessage to "🛡 Dřevěný štít nasazen!")
(set: $showNotification to true)
(go-to: "InventoryShields")
]
]
](else:)[
<div class="inventory-card shield locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/9cgxs9.png"></div>
<div class="inventory-card-name" style="color: #666;">Dřevěný štít</div>
</div>
]
(if: $hasIronShield)[
(if: $equippedIronShield is true)[
(link: '<div class="inventory-card shield" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/fg8ccm.png"></div>
<div class="inventory-card-name" style="color: #c0c0c0;">✓ Železný štít</div>
<div class="inventory-card-stats"><span class="inventory-card-stat">+2 DEF</span></div>
</div>')[
(set: $equippedIronShield to false)
(set: $lastEquipMessage to "🛡 Železný štít odložen")
(set: $showNotification to true)
(go-to: "InventoryShields")
]
](else:)[
(link: '<div class="inventory-card shield">
<div class="inventory-card-image"><img src="https://files.catbox.moe/fg8ccm.png"></div>
<div class="inventory-card-name" style="color: #c0c0c0;">Železný štít</div>
<div class="inventory-card-stats"><span class="inventory-card-stat">+2 DEF</span></div>
</div>')[
(set: $equippedIronShield to true)
(set: $lastEquipMessage to "🛡 Železný štít nasazen!")
(set: $showNotification to true)
(go-to: "InventoryShields")
]
]
](else:)[
<div class="inventory-card shield locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/fg8ccm.png"></div>
<div class="inventory-card-name" style="color: #666;">Železný štít</div>
</div>
]
(if: $hasTowerShield)[
(if: $equippedTowerShield is true)[
(link: '<div class="inventory-card shield" style="border: 2px solid #FFD700 !important; animation: equip-blink 2s ease-in-out infinite;">
<div class="inventory-card-image"><img src="https://files.catbox.moe/y8q8tv.png"></div>
<div class="inventory-card-name" style="color: #6496c8;">✓ Věžový štít</div>
<div class="inventory-card-stats"><span class="inventory-card-stat">+3 DEF</span></div>
</div>')[
(set: $equippedTowerShield to false)
(set: $lastEquipMessage to "🛡 Věžový štít odložen")
(set: $showNotification to true)
(go-to: "InventoryShields")
]
](else:)[
(link: '<div class="inventory-card shield">
<div class="inventory-card-image"><img src="https://files.catbox.moe/y8q8tv.png"></div>
<div class="inventory-card-name" style="color: #6496c8;">Věžový štít</div>
<div class="inventory-card-stats"><span class="inventory-card-stat">+3 DEF</span></div>
</div>')[
(set: $equippedTowerShield to true)
(set: $lastEquipMessage to "🛡 Věžový štít nasazen!")
(set: $showNotification to true)
(go-to: "InventoryShields")
]
]
](else:)[
<div class="inventory-card shield locked">
<div class="inventory-card-image"><img src="https://files.catbox.moe/y8q8tv.png"></div>
<div class="inventory-card-name" style="color: #666;">Věžový štít</div>
</div>
]
</div>
<div style="text-align: center; margin-top: 40px;">
(link-goto: "↩ Zpět do inventáře", "Inventory")<br><br>
(link: "Zpět do hry")[
(if: $returnPassage is "Inventory" or $returnPassage is "InventoryWeapons" or $returnPassage is "InventoryArmor" or $returnPassage is "InventoryShields" or $returnPassage is "InventoryConsumables")[
(go-to: "StartHry")
](else:)[
(go-to: $returnPassage)
]
]
</div>
<script>
$(document).ready(function() {
$('.inventory-grid tw-link').css({
'display': 'contents',
'padding': '0',
'margin': '0',
'border': 'none',
'background': 'none',
'box-shadow': 'none'
});
setTimeout(function() {
const State = window.State || window.SugarCube?.State;
if (State && State.variables) {
State.variables.lastEquipMessage = "";
}
}, 2500);
});
</script>}{
(if: ($lastEquipMessage is not "") and ($showNotification is true))[
<div class="notification-message">$lastEquipMessage</div>
](set: $showNotification to false)
<div class="weapon-selection-header">
<h2>Vyber si zbraň, kterou chceš držet v ruce</h2>
</div>
<div class="weapon-cards-container">
<!-- STARÝ A REZAVÝ MEČ -->
(if: $hasWoodenSword)[
(if: $equippedWeapons contains "woodenSword")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/8opbcl.jpg"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "woodenSword"))
(set: $lastEquipMessage to "Rezavý meč odložen")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/8opbcl.jpg"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "woodenSword"))
(set: $lastEquipMessage to "Rezavý meč equipnut!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- DÝKA -->
(if: $hasDagger)[
(if: $equippedWeapons contains "dagger")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/nwo1j2.jpg"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "dagger"))
(set: $lastEquipMessage to "Dýka odložena")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/nwo1j2.jpg"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "dagger"))
(set: $lastEquipMessage to "Dýka equipnuta!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- KVALITNÍ DÝKA -->
(if: $hasDaggerQuality)[
(if: $equippedWeapons contains "daggerQuality")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/2olwuv.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "daggerQuality"))
(set: $lastEquipMessage to "Kvalitní dýka odložena")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/2olwuv.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "daggerQuality"))
(set: $lastEquipMessage to "Kvalitní dýka equipnuta!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- MEČ -->
(if: $hasSwordInv)[
(if: $equippedWeapons contains "sword")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/l90kma.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "sword"))
(set: $lastEquipMessage to "Meč odložen")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/l90kma.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "sword"))
(set: $lastEquipMessage to "Meč equipnut!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- MISTROVSKÝ MEČ -->
(if: $hasSwordMaster)[
(if: $equippedWeapons contains "swordMaster")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/h2pl87.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "swordMaster"))
(set: $lastEquipMessage to "Mistrovský meč odložen")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/h2pl87.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "swordMaster"))
(set: $lastEquipMessage to "Mistrovský meč equipnut!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- SEKERA -->
(if: $hasAxe)[
(if: $equippedWeapons contains "axe")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/8ryt3d.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "axe"))
(set: $lastEquipMessage to "Sekera odložena")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/8ryt3d.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "axe"))
(set: $lastEquipMessage to "Sekera equipnuta!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- VÁLEČNÁ SEKERA -->
(if: $hasAxeWar)[
(if: $equippedWeapons contains "axeWar")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/hm88l5.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "axeWar"))
(set: $lastEquipMessage to "Válečná sekera odložena")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/hm88l5.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "axeWar"))
(set: $lastEquipMessage to "Válečná sekera equipnuta!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- OBOURUČNÍ MEČ -->
(if: $hasGreatsword)[
(if: $equippedWeapons contains "greatsword")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/s2v3y5.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "greatsword"))
(set: $lastEquipMessage to "Obouruční meč odložen")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/s2v3y5.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "greatsword"))
(set: $lastEquipMessage to "Obouruční meč equipnut!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- PALCÁT -->
(if: $hasMace)[
(if: $equippedWeapons contains "mace")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/pbbmii.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "mace"))
(set: $lastEquipMessage to "Palcát odložen")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/pbbmii.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "mace"))
(set: $lastEquipMessage to "Palcát equipnut!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- JITŘENKA -->
(if: $hasMorningstar)[
(if: $equippedWeapons contains "morningstar")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/47d521.jpg"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "morningstar"))
(set: $lastEquipMessage to "Jitřenka odložena")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/47d521.jpg"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "morningstar"))
(set: $lastEquipMessage to "Jitřenka equipnuta!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- KOPÍ -->
(if: $hasSpear)[
(if: $equippedWeapons contains "spear")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/c5u2x3.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "spear"))
(set: $lastEquipMessage to "Kopí odloženo")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/c5u2x3.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "spear"))
(set: $lastEquipMessage to "Kopí equipnuto!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- HALAPARTNA -->
(if: $hasHalberd)[
(if: $equippedWeapons contains "halberd")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/8ryt3d.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "halberd"))
(set: $lastEquipMessage to "Halapartna odložena")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/8ryt3d.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "halberd"))
(set: $lastEquipMessage to "Halapartna equipnuta!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- VÁLEČNÉ KLADIVO -->
(if: $hasWarhammer)[
(if: $equippedWeapons contains "warhammer")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/sk5n4x.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "warhammer"))
(set: $lastEquipMessage to "Válečné kladivo odloženo")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/sk5n4x.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "warhammer"))
(set: $lastEquipMessage to "Válečné kladivo equipnuto!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- BOJOVÁ SEKERA -->
(if: $hasBattleaxe)[
(if: $equippedWeapons contains "battleaxe")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/hm88l5.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "battleaxe"))
(set: $lastEquipMessage to "Bojová sekera odložena")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/hm88l5.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "battleaxe"))
(set: $lastEquipMessage to "Bojová sekera equipnuta!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- ŠAVLE -->
(if: $hasScimitar)[
(if: $equippedWeapons contains "scimitar")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/l90kma.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "scimitar"))
(set: $lastEquipMessage to "Šavle odložena")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/l90kma.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "scimitar"))
(set: $lastEquipMessage to "Šavle equipnuta!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- RAPÍR -->
(if: $hasRapier)[
(if: $equippedWeapons contains "rapier")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/f3ijtv.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "rapier"))
(set: $lastEquipMessage to "Rapír odložen")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/f3ijtv.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "rapier"))
(set: $lastEquipMessage to "Rapír equipnut!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- KATANA -->
(if: $hasKatana)[
(if: $equippedWeapons contains "katana")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/h2pl87.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "katana"))
(set: $lastEquipMessage to "Katana odložena")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/h2pl87.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "katana"))
(set: $lastEquipMessage to "Katana equipnuta!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- CLAYMORE -->
(if: $hasClaymore)[
(if: $equippedWeapons contains "claymore")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/s2v3y5.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "claymore"))
(set: $lastEquipMessage to "Claymore odložen")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/s2v3y5.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "claymore"))
(set: $lastEquipMessage to "Claymore equipnut!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- JEZDECKÉ KOPÍ -->
(if: $hasLance)[
(if: $equippedWeapons contains "lance")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/c5u2x3.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "lance"))
(set: $lastEquipMessage to "Jezdecké kopí odloženo")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/c5u2x3.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "lance"))
(set: $lastEquipMessage to "Jezdecké kopí equipnuto!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- CEP -->
(if: $hasFlail)[
(if: $equippedWeapons contains "flail")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/sk5n4x.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "flail"))
(set: $lastEquipMessage to "Cep odložen")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/sk5n4x.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "flail"))
(set: $lastEquipMessage to "Cep equipnut!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- KRÁTKÝ MEČ -->
(if: $hasShortsword)[
(if: $equippedWeapons contains "shortsword")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/eattgi.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "shortsword"))
(set: $lastEquipMessage to "Krátký meč odložen")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/eattgi.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "shortsword"))
(set: $lastEquipMessage to "Krátký meč equipnut!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- DLOUHÝ LUK -->
(if: $hasLongbow)[
(if: $equippedWeapons contains "longbow")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/7qak07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "longbow"))
(set: $lastEquipMessage to "Dlouhý luk odložen")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/7qak07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "longbow"))
(set: $lastEquipMessage to "Dlouhý luk equipnut!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- KUŠE -->
(if: $hasCrossbow)[
(if: $equippedWeapons contains "crossbow")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/2olwuv.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "crossbow"))
(set: $lastEquipMessage to "Kuše odložena")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/2olwuv.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "crossbow"))
(set: $lastEquipMessage to "Kuše equipnuta!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- ═══════════════════════════════════════════════════════════ -->
<!-- 🌟 LEGENDÁRNÍ ZBRANĚ 🌟 -->
<!-- ═══════════════════════════════════════════════════════════ -->
<!-- DRAKOBIJEC -->
(if: $hasDragonslayer)[
(if: $equippedWeapons contains "dragonslayer")[
(link: '<div class="weapon-card equipped legendary">
<div class="card-image"><img src="https://files.catbox.moe/vf3p07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "dragonslayer"))
(set: $lastEquipMessage to "⚡ Drakobijec odložen")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card legendary">
<div class="card-image"><img src="https://files.catbox.moe/vf3p07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "dragonslayer"))
(set: $lastEquipMessage to "⚡ DRAKOBIJEC EQUIPNUT!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- EXCALIBUR -->
(if: $hasExcalibur)[
(if: $equippedWeapons contains "excalibur")[
(link: '<div class="weapon-card equipped legendary">
<div class="card-image"><img src="https://files.catbox.moe/vf3p07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "excalibur"))
(set: $lastEquipMessage to "⚡ Excalibur odložen")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card legendary">
<div class="card-image"><img src="https://files.catbox.moe/vf3p07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "excalibur"))
(set: $lastEquipMessage to "⚡ EXCALIBUR EQUIPNUT!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- STÍNOVÉ OSTŘÍ -->
(if: $hasShadowblade)[
(if: $equippedWeapons contains "shadowblade")[
(link: '<div class="weapon-card equipped legendary">
<div class="card-image"><img src="https://files.catbox.moe/f3ijtv.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "shadowblade"))
(set: $lastEquipMessage to "⚡ Stínové ostří odloženo")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card legendary">
<div class="card-image"><img src="https://files.catbox.moe/f3ijtv.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "shadowblade"))
(set: $lastEquipMessage to "⚡ STÍNOVÉ OSTŘÍ EQUIPNUTO!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- ŽNEC DUŠÍ -->
(if: $hasSoulreaper)[
(if: $equippedWeapons contains "soulreaper")[
(link: '<div class="weapon-card equipped legendary">
<div class="card-image"><img src="https://files.catbox.moe/s2v3y5.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "soulreaper"))
(set: $lastEquipMessage to "⚡ Žnec duší odložen")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card legendary">
<div class="card-image"><img src="https://files.catbox.moe/s2v3y5.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "soulreaper"))
(set: $lastEquipMessage to "⚡ ŽNEC DUŠÍ EQUIPNUT!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- PŘIVOLÁVAČ BOUŘÍ drtihlavka -->
(if: $hasStormbringer)[
(if: $equippedWeapons contains "stormbringer")[
(link: '<div class="weapon-card equipped legendary">
<div class="card-image"><img src="https://files.catbox.moe/4p7cwe.jpg"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "stormbringer"))
(set: $lastEquipMessage to "⚡ Přivolávač bouří odložen")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card legendary">
<div class="card-image"><img src="https://files.catbox.moe/4p7cwe.jpg"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "stormbringer"))
(set: $lastEquipMessage to "⚡ PŘIVOLÁVAČ BOUŘÍ EQUIPNUT!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
<!-- ZVLNĚNÝ MEČ (LEGENDARY) -->
(if: $hasGreatswordLegendary)[
(if: $equippedWeapons contains "greatswordLegendary")[
(link: '<div class="weapon-card equipped">
<div class="card-image"><img src="https://files.catbox.moe/vf3p07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons - (a: "greatswordLegendary"))
(set: $lastEquipMessage to "Zvlněný meč odložen")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
](else:)[
(link: '<div class="weapon-card">
<div class="card-image"><img src="https://files.catbox.moe/vf3p07.png"></div>
</div>')[
(set: $equippedWeapons to $equippedWeapons + (a: "greatswordLegendary"))
(set: $lastEquipMessage to "Zvlněný meč equipnut!")
(set: $showNotification to true)
(go-to: "InventoryWeapons")
]
]
]
</div>
<style>
.notification-message {
background: rgba(212, 175, 55, 0.2);
border: 2px solid #d4af37;
border-radius: 1px;
padding: 15px;
margin: 20px auto;
max-width: 600px;
text-align: center;
color: #d4af37;
font-family: 'Cinzel', serif;
font-size: 16px;
animation: fadeIn 0.5s ease;
}
.weapon-selection-header {
text-align: center;
margin: 30px 0;
color: #d4af37;
font-family: 'Cinzel', serif;
}
.weapon-selection-header h2 {
font-size: 24px;
margin: 0;
}
.weapon-cards-container {
display: flex;
justify-content: center;
align-items: flex-start;
flex-wrap: wrap;
gap: 30px;
margin: 40px auto;
max-width: 1200px;
padding: 0 20px;
}
.weapon-card {
position: relative;
width: 160px;
height: 196px;
background: none;
border: none;
padding: 0;
text-align: center;
cursor: pointer;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.weapon-card:not(.locked):hover {
transform: translateY(-10px) scale(1.05);
}
.weapon-card.equipped {
filter: brightness(1.3);
}
.weapon-card.equipped .card-image img {
box-shadow: 0 0 20px rgba(255, 215, 0, 0.8);
}
.weapon-card.locked {
opacity: 0.5;
cursor: not-allowed;
filter: grayscale(50%);
}
.card-image {
width: 100%;
height: 100%;
margin: 0 auto;
position: relative;
display: flex;
align-items: center;
justify-content: center;
}
.card-image img {
max-width: 100%;
max-height: 100%;
object-fit: contain;
transition: filter 0.3s ease;
border-radius: 8px;
}
.weapon-card:not(.locked):hover .card-image img {
filter: brightness(1.2) drop-shadow(0 0 15px rgba(212, 175, 55, 0.8));
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(-10px); }
to { opacity: 1; transform: translateY(0); }
}
</style>
<script>
$(document).ready(function() {
$('.weapon-cards-container tw-link').css({
'display': 'contents',
'text-decoration': 'none'
});
});
</script>
<div style="text-align: center; margin-top: 40px;">
(link-goto: "↩ Zpět do inventáře", "Inventory")<br><br>
(link: "Zpět do hry")[
(if: $returnPassage is "Inventory" or $returnPassage is "InventoryWeapons" or $returnPassage is "InventoryArmor" or $returnPassage is "InventoryShields" or $returnPassage is "InventoryConsumables")[
(go-to: "StartHry")
](else:)[
(go-to: $returnPassage)
]
]
</div>
}{<div id="intro-video" class="video-container">
<img id="video" src="https://files.catbox.moe/ggqcbf.gif" alt="Intro video">
</div>
<div id="cards-container" style="display: none;">
<div class="cards-wrapper">
<div class="card" id="card1">
<img src="https://files.catbox.moe/h0nv84.jpeg" alt="Kartička 1">
</div>
<div class="card" id="card2">
<img src="https://files.catbox.moe/h0nv84.jpeg" alt="Kartička 2">
</div>
<div class="card" id="card3">
<img src="https://files.catbox.moe/h0nv84.jpeg" alt="Kartička 3">
</div>
</div>
</div>
<div id="video-player" style="display: none;">
<img id="click-gif" src="" alt="Video">
<div id="result-text" style="display: none; margin-top: 20px; padding: 20px; background: linear-gradient(135deg, rgba(42,24,16,0.2) 0%, rgba(26,15,8,0.2) 100%); border: 3px solid rgba(139,105,20,0.2); border-radius: 2px; max-width: 700px; margin-left: auto; margin-right: auto;"></div>
<div id="button-uspech" style="display: none; margin-top: 20px; text-align: center;">
[[Prohlédnout si předmět->dyka lepsi]]
</div>
<div id="button-neuspech" style="display: none; margin-top: 20px; text-align: center;">
[[Prohlédnout si předmět->rezavy mec]]
</div>
</div>
<script>
(function() {
const introVideo = document.getElementById('video');
const cardsContainer = document.getElementById('cards-container');
const videoPlayer = document.getElementById('video-player');
const clickGif = document.getElementById('click-gif');
const resultText = document.getElementById('result-text');
const buttonUspech = document.getElementById('button-uspech');
const buttonNeuspech = document.getElementById('button-neuspech');
const gifDurations = {
intro: 3000,
winning: 1200,
losing: 1200
};
const winningPosition = Math.floor(Math.random() * 3) + 1;
const staticImages = {
card1: winningPosition === 1 ? 'https://files.catbox.moe/a75693.png' : 'https://files.catbox.moe/cm1hvq.png',
card2: winningPosition === 2 ? 'https://files.catbox.moe/a75693.png' : 'https://files.catbox.moe/cm1hvq.png',
card3: winningPosition === 3 ? 'https://files.catbox.moe/a75693.png' : 'https://files.catbox.moe/cm1hvq.png'
};
const gifUrls = {
card1: winningPosition === 1 ? 'https://files.catbox.moe/d0o2yq.gif' : 'https://files.catbox.moe/adjrcu.gif',
card2: winningPosition === 2 ? 'https://files.catbox.moe/d0o2yq.gif' : 'https://files.catbox.moe/adjrcu.gif',
card3: winningPosition === 3 ? 'https://files.catbox.moe/d0o2yq.gif' : 'https://files.catbox.moe/adjrcu.gif'
};
const cardDurations = {
card1: winningPosition === 1 ? gifDurations.winning : gifDurations.losing,
card2: winningPosition === 2 ? gifDurations.winning : gifDurations.losing,
card3: winningPosition === 3 ? gifDurations.winning : gifDurations.losing
};
setTimeout(() => {
setTimeout(() => {
document.getElementById('intro-video').style.display = 'none';
cardsContainer.style.display = 'block';
const prologText = document.querySelector('[data-name="prologText"]');
if (prologText) {
prologText.style.display = 'none';
}
}, gifDurations.intro);
}, 1000);
document.getElementById('card1').addEventListener('click', () => {
playGif('card1', 1);
});
document.getElementById('card2').addEventListener('click', () => {
playGif('card2', 2);
});
document.getElementById('card3').addEventListener('click', () => {
playGif('card3', 3);
});
function playGif(cardId, cardNumber) {
cardsContainer.style.display = 'none';
videoPlayer.style.display = 'flex';
clickGif.src = gifUrls[cardId];
clickGif.className = 'gif-large';
const isWinning = cardNumber === winningPosition;
setTimeout(() => {
clickGif.src = staticImages[cardId];
clickGif.className = 'static-small';
if (isWinning) {
resultText.innerHTML = '<span style="color:#334731">(ÚSPĚCH):</span> Když jsi impulsivně odcházel, nebylo moc času, ale cítíš, že jsi ze stolu sebral něco cenného..<br>Pohlédneš nervózně k pasu.... "Dobře jsem to ukryl"';
buttonUspech.style.display = 'block';
buttonNeuspech.style.display = 'none';
} else {
resultText.innerHTML = '<span style="color:#6e4447">(NEÚSPĚCH):</span> Když jsi impulsivně odcházel, nebylo moc času a tak jsi sáhl po prvním předmětu, který visel na zdi.<br>Pohlédneš nervózně k pasu.... "Dobře jsem to ukryl"';
buttonUspech.style.display = 'none';
buttonNeuspech.style.display = 'block';
}
resultText.style.display = 'block';
}, cardDurations[cardId]);
}
})();
</script>
<style>
.video-container {
text-align: center;
margin: 20px auto;
min-height: 450px;
display: flex;
align-items: center;
justify-content: center;
}
.video-container img {
max-width: 100%;
height: auto;
width: 800px;
display: block;
}
#cards-container {
text-align: center;
padding: 20px;
min-height: 450px;
display: flex;
align-items: center;
justify-content: center;
}
.cards-wrapper {
display: flex;
justify-content: center;
gap: 20px;
flex-wrap: wrap;
max-width: 1280px;
margin: 0 auto;
}
.card {
cursor: pointer;
transition: transform 0.3s ease;
border-radius: 1px;
overflow: hidden;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
padding: 0;
margin: 0;
}
.card:hover {
transform: scale(1.05);
box-shadow: 0 6px 12px rgba(0,0,0,0.2);
}
.card img {
display: block;
width: 100%;
height: auto;
}
#video-player {
text-align: center;
padding: 20px;
min-height: 450px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
#video-player img {
max-width: 100%;
height: auto;
}
#video-player img.gif-large {
width: 800px;
max-width: 100%;
}
#video-player img.static-small {
max-width: 450px;
}
#video, img.gif-large {
filter: brightness(2.1) contrast(0.9) saturate(1.1);
}
img.static-small {
filter: none;
}
</style>}<!-- ⚔️ LAST STAND HANDLER - ZVÝŠENÍ ÚTOKU PŘI NÍZKÉM HP -->
{
(if: $playerCard's name is "Poslední vzdor")[
(if: $hp < 16)[
<!-- BOOST: Přepiš útok z 4 na 12 -->
(set: $playerAttack to 12)
(set: $lastStandMsg to "<span class='combat-desperate'>Útok zvýšen na 12! Zdraví: " + (text: $hp) + "/20</span>")
(set: $combatLog to it + (a: $lastStandMsg))
](else:)[
<!-- Normální stav -->
(set: $lastStandMsg to "<span class='combat-normal'>Poslední vzdor - Normální útok: 4</span>")
(set: $combatLog to it + (a: $lastStandMsg))
]
]
}
<style>
/* ⚡ LAST STAND - DESPERATE STYLING */
/* ⚡ COMBAT LOG - AKTIVNÍ REŽIM */
.combat-desperate {
color: #dc143c;
font-weight: bold;
text-shadow: 0 0 10px rgba(220, 20, 60, 0.8);
font-size: 1.1em;
}
/* 🔘 COMBAT LOG - NORMÁLNÍ REŽIM */
.combat-normal {
color: #888;
font-style: italic;
}
</style>Zde teprve bude obsah, zkuste mezitím, vesnici nebo trhy
[[Zpět|vyberlokaci]]{<h4 style="text-align: center; color: #0a0a0a; font-family: 'Cinzel Decorative', serif; margin-bottom: 20px; text-shadow: 0 0 10px rgba(255,215,0,0.5);">Zde se dají prodávat všemožné předměty</h42>
<p style="text-align: center; color: #1a1914; font-size: 18px; margin-bottom: 10px;">🌙 (text-colour:#c8b25f)[Zlato:] <b>$gold</b></p>
<p style="text-align: center; color: #0a0a0a; font-style: italic; margin-bottom: 30px; font-family: 'Cinzel', serif;">Kupec odkoupí tvé obyčejné předměty za 50% a kvalitní předměty za 25% jejich původní ceny.</p>
<h3 style="color: #1a1914; margin: 30px 0 15px 0; font-family: 'Cinzel', serif;">Zbraně</h3>
<div class="inventory-grid">
(if: $hasDagger)[(set: $isEquipped to $equippedWeapon is "dagger")<div class="inventory-card weapon (print: ($isEquipped ? 'disabled-sale' : ''))">
<div class="inventory-card-image"><img src="https://files.catbox.moe/5tkzw4.png"></div>
<div class="inventory-card-name">Dýka</div>
<div class="sell-price-stat">+$daggerSellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">DMG +1</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $daggerSellPrice)(set: $hasDagger to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
(if: $hasSwordInv)[(set: $isEquipped to $equippedWeapon is "sword")<div class="inventory-card weapon (print: ($isEquipped ? 'disabled-sale' : ''))">
<div class="inventory-card-image"><img src="https://files.catbox.moe/dg5k0s.png"></div>
<div class="inventory-card-name">Meč</div>
<div class="sell-price-stat">+$swordSellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">DMG +2</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $swordSellPrice)(set: $hasSwordInv to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
(if: $hasAxe)[(set: $isEquipped to $equippedWeapon is "axe")<div class="inventory-card weapon (print: ($isEquipped ? 'disabled-sale' : ''))">
<div class="inventory-card-image"><img src="https://files.catbox.moe/dg5k0s.png"></div>
<div class="inventory-card-name">Sekera</div>
<div class="sell-price-stat">+$axeSellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">DMG +3</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $axeSellPrice)(set: $hasAxe to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
(if: $hasGreatsword)[(set: $isEquipped to $equippedWeapon is "greatsword")<div class="inventory-card weapon (print: ($isEquipped ? 'disabled-sale' : ''))">
<div class="inventory-card-image"><img src="https://files.catbox.moe/dg5k0s.png"></div>
<div class="inventory-card-name">Obouruční meč</div>
<div class="sell-price-stat">+$greatswordSellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">DMG +4</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $greatswordSellPrice)(set: $hasGreatsword to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
(if: $hasDaggerQuality)[(set: $isEquipped to $equippedWeapon is "daggerQuality")<div class="inventory-card weapon (print: ($isEquipped ? 'disabled-sale' : ''))" style="border-color: rgba(100,150,200,0.6);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/2olwuv.png"></div>
<div class="inventory-card-name" style="color: #87ceeb;">Kvalitní dýka</div>
<div class="sell-price-stat">+$daggerQualitySellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">DMG +2</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $daggerQualitySellPrice)(set: $hasDaggerQuality to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
(if: $hasSwordMaster)[(set: $isEquipped to $equippedWeapon is "swordMaster")<div class="inventory-card weapon (print: ($isEquipped ? 'disabled-sale' : ''))" style="border-color: rgba(150,100,200,0.6);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/a7b2cd.png"></div>
<div class="inventory-card-name" style="color: #9370db;">Mistrovský meč</div>
<div class="sell-price-stat">+$swordMasterSellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">DMG +5</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $swordMasterSellPrice)(set: $hasSwordMaster to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
(if: $hasAxeWar)[(set: $isEquipped to $equippedWeapon is "axeWar")<div class="inventory-card weapon (print: ($isEquipped ? 'disabled-sale' : ''))" style="border-color: rgba(200,100,100,0.6);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/e9f4gh.png"></div>
<div class="inventory-card-name" style="color: #ff6347;">Válečná sekera</div>
<div class="sell-price-stat">+$axeWarSellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">DMG +6</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $axeWarSellPrice)(set: $hasAxeWar to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
(if: $hasGreatswordLegendary)[(set: $isEquipped to $equippedWeapon is "greatswordLegendary")<div class="inventory-card weapon (print: ($isEquipped ? 'disabled-sale' : ''))" style="border-color: #1a1914; box-shadow: 0 0 20px rgba(255,215,0,0.3);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/j5k6lm.png"></div>
<div class="inventory-card-name" style="color: #1a1914;">útok + 3</div>
<div class="sell-price-stat">+$greatswordLegendarySellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">DMG +8</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $greatswordLegendarySellPrice)(set: $hasGreatswordLegendary to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
</div>
<h3 style="color: #1a1914; margin: 30px 0 15px 0; font-family: 'Cinzel', serif;">Brnění</h3>
<div class="inventory-grid">
(if: $hasLeatherArmor)[(set: $isEquipped to $equippedArmor is "leather")<div class="inventory-card armor (print: ($isEquipped ? 'disabled-sale' : ''))">
<div class="inventory-card-image"><img src="https://files.catbox.moe/dg5k0s.png"></div>
<div class="inventory-card-name">Kožené brnění</div>
<div class="sell-price-stat">+$leatherArmorSellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">+1 DEF</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $leatherArmorSellPrice)(set: $hasLeatherArmor to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
(if: $hasChainmail)[(set: $isEquipped to $equippedArmor is "chain")<div class="inventory-card armor (print: ($isEquipped ? 'disabled-sale' : ''))">
<div class="inventory-card-image"><img src="https://files.catbox.moe/dg5k0s.png"></div>
<div class="inventory-card-name">Kroužková zbroj</div>
<div class="sell-price-stat">+$chainmailSellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">+2 DEF</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $chainmailSellPrice)(set: $hasChainmail to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
(if: $hasPlateArmor)[(set: $isEquipped to $equippedArmor is "plate")<div class="inventory-card armor (print: ($isEquipped ? 'disabled-sale' : ''))">
<div class="inventory-card-image"><img src="https://files.catbox.moe/dg5k0s.png"></div>
<div class="inventory-card-name">Plátová zbroj</div>
<div class="sell-price-stat">+$plateArmorSellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">+3 DEF</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $plateArmorSellPrice)(set: $hasPlateArmor to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
</div>
<h3 style="color: #1a1914; margin: 30px 0 15px 0; font-family: 'Cinzel', serif;">Štíty</h3>
<div class="inventory-grid">
(if: $hasWoodenShield)[(set: $isEquipped to $equippedShield is "wooden")<div class="inventory-card shield (print: ($isEquipped ? 'disabled-sale' : ''))">
<div class="inventory-card-image"><img src="https://files.catbox.moe/dg5k0s.png"></div>
<div class="inventory-card-name">Dřevěný štít</div>
<div class="sell-price-stat">+$woodenShieldSellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">+1 DEF</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $woodenShieldSellPrice)(set: $hasWoodenShield to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
(if: $hasIronShield)[(set: $isEquipped to $equippedShield is "iron")<div class="inventory-card shield (print: ($isEquipped ? 'disabled-sale' : ''))">
<div class="inventory-card-image"><img src="https://files.catbox.moe/dg5k0s.png"></div>
<div class="inventory-card-name">Železný štít</div>
<div class="sell-price-stat">+$ironShieldSellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">+2 DEF</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $ironShieldSellPrice)(set: $hasIronShield to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
(if: $hasTowerShield)[(set: $isEquipped to $equippedShield is "tower")<div class="inventory-card shield (print: ($isEquipped ? 'disabled-sale' : ''))">
<div class="inventory-card-image"><img src="https://files.catbox.moe/dg5k0s.png"></div>
<div class="inventory-card-name">Věžový štít</div>
<div class="sell-price-stat">+$towerShieldSellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">+3 DEF</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $towerShieldSellPrice)(set: $hasTowerShield to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
</div>
<h3 style="color: #1a1914; margin: 30px 0 15px 0; font-family: 'Cinzel', serif;">Spotřební předměty</h3>
<div class="inventory-grid">
(if: $hasPotion > 0)[<div class="inventory-card consumable">
<div class="inventory-card-image"><img src="https://files.catbox.moe/y1rymu.png"></div>
<div class="inventory-card-name">Lektvar (x$hasPotion)</div>
<div class="sell-price-stat">+$potionSellPrice 🌙 / kus</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(40,150,40,0.5); border-color: rgba(100,200,100,0.4);">+10 HP</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
<span class="sell-button">(link-repeat: "🌙 Prodat 1ks")[(set: $gold to $gold + $potionSellPrice)(set: $hasPotion to $hasPotion - 1)(go-to: "ShopSell")]</span>
</div>
</div>]
(if: $hasObvaz > 0)[<div class="inventory-card consumable">
<div class="inventory-card-image"><img src="https://files.catbox.moe/i1mcha.png"></div>
<div class="inventory-card-name">Obvaz (x$hasObvaz)</div>
<div class="sell-price-stat">+$obvazSellPrice 🌙 / kus</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(40,150,40,0.5); border-color: rgba(100,200,100,0.4);">+1 HP</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
<span class="sell-button">(link-repeat: "🌙 Prodat 1ks")[(set: $gold to $gold + $obvazSellPrice)(set: $hasObvaz to $hasObvaz - 1)(go-to: "ShopSell")]</span>
</div>
</div>]
</div>
(if: not $hasDagger and not $hasSwordInv and not $hasAxe and not $hasGreatsword and not $hasDaggerQuality and not $hasSwordMaster and not $hasAxeWar and not $hasGreatswordLegendary and not $hasLeatherArmor and not $hasChainmail and not $hasPlateArmor and not $hasWoodenShield and not $hasIronShield and not $hasTowerShield and $hasPotion is 0 and $hasObvaz is 0)[
<div style="grid-column: 1/-1; text-align: center; padding: 60px 20px;">
<p style="font-size: 18px; color: #888; font-family: 'Cinzel', serif; margin-top: 10px;">Nemáš žádné předměty k prodeji</p>
</div>]
<div style="text-align: center; margin-top: 40px;">
(link-goto: "Zpět na trhy", "Trh")<br><br>
</div>
<script>
$(document).ready(function() {
$('.sell-button tw-link').each(function() {
$(this).addClass('sell-link');
});
});
</script>}<!--LowPerfMode-->
<!--
⚡ LOW PERF MODE - JS PATCH PRO OSTATNÍ HANDLERY
Vlož (display: "LowPerfMode") do CardBattle HNED PO (display: "PerformanceDetect").
Přepíše funkce v jiných handlerech tak, aby v low-tier režimu
nevytvářely těžké efekty (částice, trail, glow smyčky).
OVLIVNÍ:
- Animaci karty při zahození (card-fly-to-table: bez rún, bez trail, bez flash, bez partial)
- Zbraňové animace (weapon-attacking: bez slash elementu)
- Šípy (arrow-projectile: jen prostý pohyb)
- Shake efekt (box-shake: bez particles)
- setInterval weapon ikon (snížení na 2000ms)
- BattleLog scroll (throttle)
-->
(print: "<script>
(function() {
/* Čekáme na dokončení FPS testu (max 500ms) */
setTimeout(function() {
var tier = (document.body.classList.contains('perf-high')) ? 'low' : 'high';
if (tier !== 'low') return; /* nic nedělat na rychlých strojích */
console.log('[LowPerfMode] Aktivován - patchuji efekty');
/* ════════════════════════════════════════════
PATCH 1: Karta na stůl - bez rún, trail, flash, particles
Přepíše cardAnimationRunning blok injektovaný z Harlowe linku.
Protože Harlowe generuje inline script při každém kliknutí,
zachytíme kliknutí na .card-click-area a zastavíme původní skript.
════════════════════════════════════════════ */
window._lowPerfCardAnim = function(cardName, targetX, targetY, cardRect) {
if (window.cardAnimationRunning) return;
window.cardAnimationRunning = true;
if (window.combatSounds) {
combatSounds.playCardSound(cardName);
}
var cards = document.querySelectorAll('.hand .card.playable');
var originalCard = null;
for (var i = 0; i < cards.length; i++) {
var cn = cards[i].querySelector('.card-name');
if (cn && cn.textContent.trim() === cardName) {
originalCard = cards[i];
break;
}
}
if (!originalCard) { window.cardAnimationRunning = false; return; }
var wrapper = originalCard.closest('.card-wrapper');
if (wrapper) { wrapper.style.opacity = '0'; wrapper.style.pointerEvents = 'none'; }
var clone = originalCard.cloneNode(true);
var rect = originalCard.getBoundingClientRect();
clone.style.cssText = [
'position:fixed',
'left:' + rect.left + 'px',
'top:' + rect.top + 'px',
'width:' + rect.width + 'px',
'height:' + rect.height + 'px',
'margin:0',
'z-index:9999',
'transform:scale(0.85)',
'pointer-events:none'
].join(';');
var tx = window.innerWidth / 2 - rect.width / 2;
var ty = window.innerHeight / 2 - rect.height / 2;
clone.style.setProperty('--target-x', (tx - rect.left) + 'px');
clone.style.setProperty('--target-y', (ty - rect.top) + 'px');
document.body.appendChild(clone);
/* BEZ trail, flash, rune, particles - jen let */
setTimeout(function() { clone.classList.add('card-fly-to-table'); }, 10);
setTimeout(function() { clone.remove(); window.cardAnimationRunning = false; }, 700);
};
/* ════════════════════════════════════════════
PATCH 2: Weapon-attacking - přeskočí slash element
Monkey-patch: odstraň .weapon-slash z DOM před animací
════════════════════════════════════════════ */
var _origWeaponAttack = function() {
document.querySelectorAll('.weapon-slash').forEach(function(el) {
el.style.display = 'none';
});
};
/* Spusť patch při každém přidání třídy weapon-attacking */
var weaponObserver = new MutationObserver(function(mutations) {
mutations.forEach(function(m) {
if (m.type === 'attributes' && m.attributeName === 'class') {
var el = m.target;
if (el.classList.contains('weapon-attacking')) {
el.querySelectorAll('.weapon-slash').forEach(function(s) {
s.style.display = 'none';
});
/* Jen záblesk brightness - bez glow smyčky */
var img = el.querySelector('img');
if (img) {
img.style.transition = 'filter 0.3s';
img.style.filter = 'brightness(1.5)';
setTimeout(function() { img.style.filter = ''; }, 300);
}
}
}
});
});
document.querySelectorAll('.weapon-on-table').forEach(function(w) {
weaponObserver.observe(w, { attributes: true });
});
/* Observer pro nově přidané weapon elementy */
var domObserver = new MutationObserver(function(mutations) {
mutations.forEach(function(m) {
m.addedNodes.forEach(function(node) {
if (node.nodeType === 1 && node.classList && node.classList.contains('weapon-on-table')) {
weaponObserver.observe(node, { attributes: true });
}
});
});
});
domObserver.observe(document.body, { childList: true, subtree: true });
/* ════════════════════════════════════════════
PATCH 3: Šípy - odstraň arrow elementy hned po přidání
(nechají jen holý pohyb bez trail pseudo-elementu)
════════════════════════════════════════════ */
var arrowObserver = new MutationObserver(function(mutations) {
mutations.forEach(function(m) {
m.addedNodes.forEach(function(node) {
if (node.nodeType === 1 && node.classList) {
/* arrow-hit::after je CSS pseudo - stačí odebrat třídu arrow-hit a dát jen inline */
if (node.classList.contains('arrow-projectile')) {
node.classList.remove('arrow-hit');
/* Jednoduchá inline animace */
node.style.cssText += ';transition:transform 2s linear,opacity 2s linear;';
setTimeout(function() {
node.style.transform = 'translate(1200px,-50%) scale(1.2)';
node.style.opacity = '0';
}, 50);
setTimeout(function() { node.remove(); }, 2100);
}
}
});
});
});
arrowObserver.observe(document.body, { childList: true, subtree: true });
/* ════════════════════════════════════════════
PATCH 4: Shake particles - max 3 místo 25
════════════════════════════════════════════ */
/* Přepíšeme funkci přidávání particle přes prototype trap na appendChild */
var _origAppendChild = Element.prototype.appendChild;
var particleCount = {};
Element.prototype.appendChild = function(node) {
if (node && node.nodeType === 1 && node.classList && node.classList.contains('particle')) {
var id = this.id || 'unknown';
particleCount[id] = (particleCount[id] || 0) + 1;
if (particleCount[id] > 3) {
/* Zahodíme particle */
setTimeout(function() { particleCount[id] = 0; }, 1500);
return node;
}
}
return _origAppendChild.call(this, node);
};
/* Reset počítadla po animaci */
setInterval(function() { particleCount = {}; }, 2000);
/* ════════════════════════════════════════════
PATCH 5: Weapon ikony - snížení intervalu update
════════════════════════════════════════════ */
/* Zrušíme původní 500ms interval a nahradíme 3000ms */
/* Protože nemáme referenci na původní interval, přepíšeme updateWeaponIcons */
var _origUpdate = window.updateWeaponIcons;
var _lastUpdate = 0;
window.updateWeaponIcons = function() {
var now = Date.now();
if (now - _lastUpdate < 2800) return;
_lastUpdate = now;
if (_origUpdate) _origUpdate();
};
/* ════════════════════════════════════════════
PATCH 6: Combat log scroll - throttle
════════════════════════════════════════════ */
var _lastScroll = 0;
var _origScroll = Element.prototype.__lookupSetter__('scrollTop');
/* Throttle přes MutationObserver na combat-log-content */
var logObserver = new MutationObserver(function() {
var now = Date.now();
if (now - _lastScroll < 500) return;
_lastScroll = now;
var log = document.querySelector('.combat-log-content');
if (log) log.scrollTop = log.scrollHeight;
});
var logEl = document.querySelector('.combat-log-content');
if (logEl) {
logObserver.observe(logEl, { childList: true });
} else {
/* Čekáme na vytvoření logu */
var logWaiter = new MutationObserver(function() {
var l = document.querySelector('.combat-log-content');
if (l) { logObserver.observe(l, { childList: true }); logWaiter.disconnect(); }
});
logWaiter.observe(document.body, { childList: true, subtree: true });
}
/* ════════════════════════════════════════════
PATCH 7: setInterval health update - snížení z 100ms na 800ms
════════════════════════════════════════════ */
/* Harlowe znovu vytváří intervaly při každém re-renderu,
takže stačí přepsat setInterval pro volání updateHealthDisplay */
var _origSetInterval = window.setInterval;
window.setInterval = function(fn, delay) {
/* Pokud je delay 100ms a funkce vypadá jako health update, zvýšíme na 800ms */
if (delay === 100 && fn && fn.toString().indexOf('updateHealthDisplay') !== -1) {
delay = 800;
console.log('[LowPerfMode] Health interval snížen na 800ms');
}
return _origSetInterval.call(window, fn, delay);
};
console.log('[LowPerfMode] Všechny patche aplikovány');
}, 600); /* 600ms - dost času pro FPS test (10 frames ~166ms) */
})();
</script>"){(display: "BattleScene")
<div class="text-divider divider-rpg"></div>
<!-- Úvodní text (zobrazí se hned na 3 sekundy) -->
<div id="mapIntroText" style="position:fixed; top:50%; left:50%; transform:translate(-50%, -50%);
z-index:10000;
background: linear-gradient(135deg, rgba(42,24,16,0.8) 0%, rgba(26,15,8,0.8) 100%);
border: 3px solid rgba(139,105,20,0.6);
border-radius: 2px;
padding: 30px;
max-width: 700px;
box-shadow: 0 8px 20px rgba(0,0,0,0.5);
transition: opacity 5s;
opacity: 1;
text-align: center;
color: #d4af37;">
Vybavuješ si vzpomínku na učitele, který ti kdysi ukazoval útržek mapy.
</div>
<!-- Video mapy (skryté na začátku) -->
<video id="mapVideo" src="https://files.catbox.moe/fa35lm.mp4" muted playsinline
style="position:fixed; top:0; left:0; width:100vw; height:100vh; object-fit:cover; z-index:9999; transition: opacity 1s; opacity: 0;">
</video>
<!-- Statický obrázek mapy (zobrazí se po videu) -->
<div id="mapBackground" style="position:fixed; top:0; left:0; width:100%; height:100%;
background-image: url('https://files.catbox.moe/hd59q2.jpg');
background-size: cover;
background-position: center;
z-index:9998;
opacity: 0;
transition: opacity 1s;">
</div>
<!-- Kontejner pro lokace (zobrazí se s mapou) -->
<div id="locationContainer" style="position:fixed; top:0; left:0; width:1920px; height:1080px; z-index:9999; opacity: 0; transition: opacity 1s; overflow: hidden;">
(if:visits is 1)[
<div class="tutorial-pointer-inline" id="itemNotification" style="position:absolute; top: 25px; right: 60px; cursor: pointer;">
<div class="tutorial-pointer-text">(text-style:"bold","italic")[$vybranaPostava má v inventáři novou věc]</div>
<img src="https://files.catbox.moe/9iog7u.png" alt="pointer" style="width: 85px; height: 100px;">
</div>
<script>
$(document).ready(function() {
setTimeout(function() {
$('#itemNotification').fadeOut(1000);
}, 5000);
$('#itemNotification').click(function() {
$(this).fadeOut(500);
});
});
</script>]
<!-- LOKACE -->
(link-goto: "<div class='location location-vesnice' data-tooltip='Vesnice Mezihoří - vypadá, že byla již několikrát vypleněna do základů'><img class='location-icon' src='https://files.catbox.moe/2we1pn.png'></div>", "Vesnice")
(link-goto: "<div class='location location-les' data-tooltip='Temný les - Tady se již párkrát někdo stratil'><img class='location-icon' src='https://files.catbox.moe/41ktv5.png'></div>", "Les")
(link-goto: "<div class='location location-hrad' data-tooltip='Zřícenina - Byl to hrad? jméno si už ani místní nepamatujou'><img class='location-icon' src='https://files.catbox.moe/l4afzn.png'></div>", "Hrad")
(link-goto: "<div class='location location-trh' data-tooltip='Provizorní trhy - Na rychlo postavené stany kupců a jejich obránců'><img class='location-icon' src='https://files.catbox.moe/tutzju.png'></div>", "Trh")
</div>
<!-- Tooltip bubble -->
<div id="locationTooltip" class="zoom-tooltip-bubble"></div>
<!-- HUD elementy vždy viditelné -->
<div style="position:fixed; top:0; left:0; width:100%; height:100%; pointer-events:none; z-index:10001;">
<div style="pointer-events:auto;">
(display: "InventoryHUD")
</div>
</div>
(display: "SnowAnimation")
<style>
/* DŮLEŽITÉ: Skrýt Twine wrapper pro location linky */
#locationContainer tw-link {
display: contents !important;
padding: 0 !important;
margin: 0 !important;
border: none !important;
background: none !important;
box-shadow: none !important;
}
/* Vypnout diamantové ozdoby pro location linky */
#locationContainer tw-link::before,
#locationContainer tw-link::after {
display: none !important;
}
.location {
width: 90px;
height: 90px;
border: 2px solid #baa988;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
background: rgba(255,215,0,0.0);
box-shadow: 0 0 8px rgba(255,215,0,0.2), inset 0 0 5px rgba(0,0,0,0.2);
position: fixed;
transition: transform 0.2s, border-color 0.2s, box-shadow 0.2s;
cursor: pointer;
overflow: hidden;
animation: pulse-glow-subtle 3s ease-in-out infinite;
}
/* Pozice pro jednotlivé lokace */
.location-hrad {
top: calc(35% - 30px);
left: calc(65% - 30px);
}
.location-vesnice {
top: calc(40% - 30px);
left: calc(45% - 30px);
}
.location-les {
top: calc(60% - 30px);
left: calc(25% - 30px);
}
.location-trh {
bottom: calc(20% - 30px);
left: calc(50% - 30px);
}
.location-icon {
width: 90%;
height: 90%;
object-fit: contain;
border-radius: 0;
border: none !important;
display: block;
pointer-events: none;
position: relative;
z-index: 10;
}
.location:hover {
border-color: #cfbb74; /* Změněno z lightgreen na zlatou */
transform: scale(1.3);
box-shadow: 0 0 15px rgba(255, 215, 0, 0.6); /* Změněno z zelené na zlatou */
cursor: pointer;
animation: none;
}
/* 💬 TOOLTIP BUBBLE */
.zoom-tooltip-bubble {
position: fixed;
background: rgba(212, 200, 150, 1.0);
color: #0f0f0f;
padding: 12px 20px;
border-radius: 1px;
font-size: 14px;
font-family: 'Cinzel Decorative', serif;
border: 2px solid #8a8443;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.6);
pointer-events: none;
z-index: 100000;
opacity: 0;
transform: translate(-50%, -100%) translateY(-10px);
transition: opacity 0.2s ease, transform 0.2s ease;
max-width: 300px;
text-align: center;
white-space: normal;
}
.zoom-tooltip-bubble.show {
opacity: 1;
transform: translate(-80%, -100%) translateY(0);
}
/* Šipka tooltipů */
.zoom-tooltip-bubble::after {
content: '';
position: absolute;
bottom: -10px;
left: 50%;
transform: translateX(-50%);
width: 0;
height: 0;
border-left: 10px solid transparent;
border-right: 10px solid transparent;
border-top: 10px solid #8a8443;
}
/* ✨ JEMNÉ DÝCHÁNÍ (pro neaktivní ikony) */
@keyframes pulse-glow-subtle {
0%, 100% {
filter: drop-shadow(0 0 5px rgba(212, 200, 150, 0.2));
transform: scale(1);
}
50% {
filter: drop-shadow(0 0 8px rgba(212, 200, 150, 0.4));
transform: scale(1.04);
}
}
</style>
<script>
(function() {
var mapIntroText = document.getElementById("mapIntroText");
var mapVideo = document.getElementById("mapVideo");
var mapBackground = document.getElementById("mapBackground");
var locationContainer = document.getElementById("locationContainer");
// 1. Po 3 sekundách: začne mizet text a objeví se video
setTimeout(function() {
if (mapIntroText) mapIntroText.style.opacity = "0";
if (mapVideo) {
mapVideo.style.opacity = "1";
mapVideo.play();
}
}, 3000);
// 2. Po 8 sekundách: video zmizí, objeví se statická mapa a lokace
setTimeout(function() {
if (mapVideo) mapVideo.style.opacity = "0";
if (mapBackground) mapBackground.style.opacity = "1";
if (locationContainer) locationContainer.style.opacity = "1";
// Aktivace tooltipů po zobrazení lokací
setupLocationTooltips();
}, 8000);
})();
// Tooltip funkcionalita
function setupLocationTooltips() {
const tooltip = document.getElementById('locationTooltip');
const locations = document.querySelectorAll('.location');
locations.forEach(location => {
location.addEventListener('mouseenter', function(e) {
const tooltipText = this.getAttribute('data-tooltip');
if (tooltipText) {
tooltip.textContent = tooltipText;
tooltip.classList.add('show');
updateTooltipPosition(e);
}
});
location.addEventListener('mousemove', updateTooltipPosition);
location.addEventListener('mouseleave', function() {
tooltip.classList.remove('show');
});
});
function updateTooltipPosition(e) {
const tooltipHeight = tooltip.offsetHeight;
tooltip.style.left = e.clientX + 'px';
tooltip.style.top = (e.clientY - tooltipHeight - 1) + 'px';
}
}
</script>}<!-- pasáž MeditationHandler -->
{
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- MEDITATION SYSTEM - BUFF PRO PŘÍŠTÍ KOLO + FREE COST -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- ⭐ NORMÁLNÍ MEDITATION (1 karta zdarma) -->
(if: $chosenPlayerCard contains "type" and $chosenPlayerCard's type is "meditation")[
<!-- ULOŽENÍ MEDITATION BONUSU PRO PŘÍŠTÍ KOLO -->
(if: $chosenPlayerCard contains "attack")[
(set: $meditationBonusAttack to $chosenPlayerCard's attack)
](else:)[
(set: $meditationBonusAttack to 0)
]
(if: $chosenPlayerCard contains "defense")[
(set: $meditationBonusDefense to $chosenPlayerCard's defense)
](else:)[
(set: $meditationBonusDefense to 0)
]
<!-- PŘÍŠTÍ KARTA BUDE ZDARMA -->
(set: $nextCardFree to true)
(set: $meditationActive to true)
<!-- LOG ZPRÁVA -->
(set: $meditationMsg to "<span class='combat-meditation'>Napínáš síly, příští pohyb tě nestojí kondici")
(if: $meditationBonusAttack > 0 or $meditationBonusDefense > 0)[
(set: $meditationMsg to $meditationMsg + " a dostane")
(if: $meditationBonusAttack > 0)[
(set: $meditationMsg to $meditationMsg + " +" + (text: $meditationBonusAttack) + " útok")
]
(if: $meditationBonusDefense > 0)[
(if: $meditationBonusAttack > 0)[
(set: $meditationMsg to $meditationMsg + " a")
]
(set: $meditationMsg to $meditationMsg + " +" + (text: $meditationBonusDefense) + " obranu")
]
]
(set: $meditationMsg to $meditationMsg + "!</span>")
(set: $combatLog to it + (a: $meditationMsg))
<!-- ZVUK -->
(print: "<script>
if(window.combatSounds){
combatSounds.playMeditationSound();
}
</script>")
<!-- MEDITATION SE NORMÁLNĚ ZAHRAJE -->
(set: $skipNormalResolve to false)
<!-- ⭐ SILNÁ MEDITATION / ADRENALIN (2 karty zdarma, -6 HP) -->
](else-if: $chosenPlayerCard contains "type" and $chosenPlayerCard's type is "meditationstrong")[
<!-- ⚠️ ODEČTEME 6 HP HNED PŘI ZAHRÁNÍ -->
(set: $hp to $hp - 6) <!-- ⭐ JEDNODUŠE ODEČTI 6 HP -->
<!-- ULOŽENÍ MEDITATION BONUSU PRO PŘÍŠTÍ KOLA -->
(if: $chosenPlayerCard contains "attack")[
(set: $meditationBonusAttack to $chosenPlayerCard's attack)
](else:)[
(set: $meditationBonusAttack to 0)
]
(if: $chosenPlayerCard contains "defense")[
(set: $meditationBonusDefense to $chosenPlayerCard's defense)
](else:)[
(set: $meditationBonusDefense to 0)
]
<!-- PŘÍŠTÍ 2 KARTY BUDOU ZDARMA -->
(set: $nextCardFree to true)
(set: $meditationActive to true)
(set: $strongMeditationTurnsLeft to 2)
<!-- LOG ZPRÁVA -->
(set: $meditationMsg to "<span class='combat-meditation'Napínáš síli na hranici možného. Příští 2 karty jsou zdarma")
(if: $meditationBonusAttack > 0 or $meditationBonusDefense > 0)[
(set: $meditationMsg to $meditationMsg + " a dostanou")
(if: $meditationBonusAttack > 0)[
(set: $meditationMsg to $meditationMsg + " +" + (text: $meditationBonusAttack) + " útok")
]
(if: $meditationBonusDefense > 0)[
(if: $meditationBonusAttack > 0)[
(set: $meditationMsg to $meditationMsg + " a")
]
(set: $meditationMsg to $meditationMsg + " +" + (text: $meditationBonusDefense) + " obranu")
]
]
(set: $meditationMsg to $meditationMsg + "!</span>")
(set: $combatLog to it + (a: $meditationMsg))
<!-- ZVUK -->
(print: "<script>
if(window.combatSounds){
combatSounds.playMeditationSound();
}
</script>")
<!-- MEDITATION SE NORMÁLNĚ ZAHRAJE -->
(set: $skipNormalResolve to false)
<!-- ⭐ APLIKACE FREE KARTY (s bonusem z meditace) -->
](else-if: $meditationActive is true and $nextCardFree is true)[
<!-- ULOŽENÍ PŮVODNÍ CENY PRO LOG -->
(set: $originalCost to $chosenPlayerCard's cost)
<!-- VRÁTIT STAMINU (protože už byla odečtena v CardBattle) -->
(set: $stamina to $stamina + $originalCost)
<!-- PŘÍŠTÍ KARTA DOSTANE MEDITATION BONUS -->
(if: $chosenPlayerCard contains "attack")[
(set: $originalAttack to $chosenPlayerCard's attack)
(set: $boostedAttack to $originalAttack + $meditationBonusAttack)
](else:)[
(set: $originalAttack to 0)
(set: $boostedAttack to $meditationBonusAttack)
]
(if: $chosenPlayerCard contains "defense")[
(set: $originalDefense to $chosenPlayerCard's defense)
(set: $boostedDefense to $originalDefense + $meditationBonusDefense)
](else:)[
(set: $originalDefense to 0)
(set: $boostedDefense to $meditationBonusDefense)
]
<!-- OVERRIDE STATS AKTUÁLNÍ KARTY -->
(if: $chosenPlayerCard contains "minAttack" and $chosenPlayerCard contains "maxAttack")[
(set: $chosenPlayerCard to (dm:
"name", $chosenPlayerCard's name + " ⚡",
"attack", $boostedAttack,
"defense", $boostedDefense,
"minAttack", $chosenPlayerCard's minAttack,
"maxAttack", $chosenPlayerCard's maxAttack,
"cost", 0,
"type", $chosenPlayerCard's type,
"image", $chosenPlayerCard's image,
"levels", (if: $chosenPlayerCard contains "levels")[$chosenPlayerCard's levels](else:)[0]
))
](else:)[
(set: $chosenPlayerCard to (dm:
"name", $chosenPlayerCard's name + " ",
"attack", $boostedAttack,
"defense", $boostedDefense,
"cost", 0,
"type", $chosenPlayerCard's type,
"image", $chosenPlayerCard's image
))
]
<!-- LOG ZPRÁVA O FREE KARTĚ + BONUSECH -->
(set: $comboMsg to "<span class='combat-meditation-combo'>Napnul jsi síly na " + $chosenPlayerCard's name + " (ušetřil jsi " + (text: $originalCost) + " kondice)")
(if: $meditationBonusAttack > 0 or $meditationBonusDefense > 0)[
(set: $comboMsg to $comboMsg + " | Bonus:")
(if: $meditationBonusAttack > 0)[
(set: $comboMsg to $comboMsg + " Útok " + (text: $originalAttack) + " → " + (text: $boostedAttack))
]
(if: $meditationBonusDefense > 0)[
(if: $meditationBonusAttack > 0)[
(set: $comboMsg to $comboMsg + ",")
]
(set: $comboMsg to $comboMsg + " Obrana " + (text: $originalDefense) + " → " + (text: $boostedDefense))
]
]
(set: $comboMsg to $comboMsg + "</span>")
(set: $combatLog to it + (a: $comboMsg))
<!-- ⭐ KONTROLA, JESTLI JE AKTIVNÍ SILNÁ MEDITACE -->
(if: $strongMeditationTurnsLeft is not 0 and $strongMeditationTurnsLeft > 0)[
<!-- Snížíme počítadlo -->
(set: $strongMeditationTurnsLeft to it - 1)
<!-- Pokud ještě zbývají tahy, ponecháme aktivní -->
(if: $strongMeditationTurnsLeft > 0)[
(set: $nextCardFree to true)
(set: $combatLog to it + (a: "<span class='combat-meditation'> Ještě " + (text: $strongMeditationTurnsLeft) + " karta(y) zdarma.</span>"))
](else:)[
<!-- Když už nezbývají tahy, vypneme meditaci -->
(set: $meditationActive to false)
(set: $nextCardFree to false)
(set: $combatLog to it + (a: "<span class='combat-meditation-end'>Účinek napnutí síly vyprchal.</span>"))
]
](else:)[
<!-- Standardní meditace - funguje jen 1 tah -->
(set: $meditationActive to false)
(set: $nextCardFree to false)
]
<!-- RESET BONUSŮ -->
(set: $meditationBonusAttack to 0)
(set: $meditationBonusDefense to 0)
<!-- KARTA SE NORMÁLNĚ ZAHRAJE S BONUSEM A ZDARMA -->
(set: $skipNormalResolve to false)
]
<!-- ⭐ POKUD NENÍ MEDITATION, NORMÁLNÍ PRŮBĚH -->
(if: $skipNormalResolve is 0 or $skipNormalResolve is false)[
(set: $skipNormalResolve to false)
]
}
<style>
/* 1. Aktivace meditace (Buff nahozen) */
.combat-meditation {
color: #c77dff; /* Světlejší fialová pro dobrou čitelnost */
font-weight: bold; /* Tučně, aby to nezapadlo */
text-shadow: 0 0 5px rgba(180, 50, 255, 0.5); /* Jemná fialová záře */
display: block; /* Aby to bylo na novém řádku (volitelné) */
margin-top: 5px;
}
/* 2. Použití karty zdarma s bonusem (Combo) */
.combat-meditation-combo {
color: #e0aaff; /* Ještě jasnější fialová/růžová pro efekt úderu */
font-weight: bold;
font-style: italic; /* Kurzíva pro dynamiku */
text-shadow: 0 0 8px rgba(224, 170, 255, 0.6); /* Silnější záře */
border-left: 3px solid #9d4edd; /* Fialový proužek vlevo pro zvýraznění */
padding-left: 8px; /* Odsazení od proužku */
display: block;
margin: 5px 0;
}
/* 3. Vypršení efektu (End) */
.combat-meditation-end {
color: #9d4edd; /* Tmavší, tlumenější fialová */
font-size: 0.9em; /* Trochu menší písmo */
font-style: italic;
opacity: 0.8; /* Lehce průhledné, protože efekt končí */
}
</style>{
<div class="tutorial-intro" style="text-align: center; padding: 40px 20px; position: relative;">
<img src="https://files.catbox.moe/kuu8gf.png"
class="side-image side-image-left"
style="position: fixed; left: 0; top: 50%; transform: translateY(-50%); height: 80vh; max-height: 500px; width: auto; z-index: 0; opacity: 0.8; pointer-events: none;">
<img src="https://files.catbox.moe/kuu8gf.png"
class="side-image side-image-right"
style="position: fixed; right: 0; top: 50%; transform: translateY(-50%) scaleX(-1); height: 80vh; max-height: 500px; width: auto; z-index: 0; opacity: 0.8; pointer-events: none;">
<div style="position: relative; z-index: 1;">
<h3>⚙ NASTAVENÍ VZHLEDU</h3>
<div style="background: linear-gradient(135deg, rgba(42,24,16,0.2) 0%, rgba(26,15,8,0.2) 100%); border: 3px solid rgba(139,105,20,0.2); border-radius: 1px; padding: 30px; margin: 30px auto; max-width: 800px; box-shadow: 0 8px 20px rgba(0,0,0,0.2);">
<div class="settings-group" data-type="theme">
<h3 style="color: #d4af37; margin-bottom: 15px;">Barevné téma pozadí</h3>
<div style="display: flex; flex-wrap: wrap; gap: 10px; justify-content: center;">
<tw-link class="macro-link" data-val="tema-modre" onclick="changeTheme('tema-modre', this)">Modré</tw-link>
<tw-link class="macro-link" data-val="tema-bezove" onclick="changeTheme('tema-bezove', this)">Béžové</tw-link>
<tw-link class="macro-link" data-val="tema-tmave" onclick="changeTheme('tema-tmave', this)">Tmavé</tw-link>
<tw-link class="macro-link" data-val="tema-zelene" onclick="changeTheme('tema-zelene', this)">Zelené</tw-link>
<tw-link class="macro-link" data-val="tema-fialove" onclick="changeTheme('tema-fialove', this)">Fialové</tw-link>
<tw-link class="macro-link" data-val="" onclick="changeTheme('', this)">↺ Výchozí</tw-link>
</div>
</div>
<hr style="border: 1px solid rgba(139,105,20,0.3); margin: 25px 0;">
<div class="settings-group" data-type="font">
<h3 style="color: #d4af37; margin-bottom: 15px;">Typ písma</h3>
<div style="display: flex; flex-wrap: wrap; gap: 10px; justify-content: center;">
<tw-link class="macro-link" data-val="font-modern" onclick="changeFontFamily('font-modern', this)">Modern Antiqua</tw-link>
<tw-link class="macro-link" data-val="font-georgia" onclick="changeFontFamily('font-georgia', this)">Georgia</tw-link>
<tw-link class="macro-link" data-val="font-times" onclick="changeFontFamily('font-times', this)">Times</tw-link>
<tw-link class="macro-link" data-val="font-arial" onclick="changeFontFamily('font-arial', this)">Arial</tw-link>
<tw-link class="macro-link" data-val="font-courier" onclick="changeFontFamily('font-courier', this)">Courier</tw-link>
<tw-link class="macro-link" data-val="font-verdana" onclick="changeFontFamily('font-verdana', this)">Verdana</tw-link>
<tw-link class="macro-link" data-val="font-impact" onclick="changeFontFamily('font-impact', this)">Cinzel</tw-link>
<tw-link class="macro-link" data-val="" onclick="changeFontFamily('', this)">↺ Výchozí</tw-link>
</div>
</div>
<hr style="border: 1px solid rgba(139,105,20,0.3); margin: 25px 0;">
<div class="settings-group" data-type="size">
<h3 style="color: #d4af37; margin-bottom: 15px;">Velikost textu</h3>
<div style="display: flex; flex-wrap: wrap; gap: 10px; justify-content: center;">
<tw-link class="macro-link" data-val="size-small" onclick="changeFontSize('size-small', this)">Malý (14px)</tw-link>
<tw-link class="macro-link" data-val="size-medium" onclick="changeFontSize('size-medium', this)">Střední (16px)</tw-link>
<tw-link class="macro-link" data-val="" onclick="changeFontSize('', this)">Původní (20px)</tw-link>
<tw-link class="macro-link" data-val="size-xlarge" onclick="changeFontSize('size-xlarge', this)">Velký (22px)</tw-link>
<tw-link class="macro-link" data-val="size-massive" onclick="changeFontSize('size-massive', this)">Masivní (24px)</tw-link>
<tw-link class="macro-link" data-val="size-mega" onclick="changeFontSize('size-mega', this)">Mega (30px)</tw-link>
</div>
</div>
<hr style="border: 1px solid rgba(139,105,20,0.3); margin: 25px 0;">
<hr style="border: 1px solid rgba(139,105,20,0.3); margin: 25px 0;">
<div class="settings-group" data-type="perf">
<div style="display: flex; flex-wrap: wrap; gap: 10px; justify-content: center;">
<tw-link class="macro-link" data-val="high" onclick="changePerf('high', this)">Vysoký výkon (efekty zapnuty)</tw-link>
<tw-link class="macro-link" data-val="low" onclick="changePerf('low', this)">Nízký výkon (efekty vypnuty)</tw-link>
</div>
</div>
<div style="margin-top: 30px;">
(link: "↩ Zpět do hry")[(go-to: (history:)'s last)]
</div>
</div>
</div>
</div>
<style>
/* CSS pro animaci a záři - můžete nechat zde nebo dát do Story Stylesheet */
tw-story {
transition: font-size 0.4s ease-in-out;
}
.macro-link {
transition: all 0.3s ease;
border: 1px solid rgba(212, 175, 55, 0.2);
padding: 8px 15px;
border-radius: 1px;
cursor: pointer;
background: rgba(0,0,0,0.1);
display: inline-block;
}
.macro-link:hover {
border-color: #d4af37;
background: rgba(212, 175, 55, 0.1);
}
/* Třída pro svítící aktivní tlačítko */
.active-glow {
color: #575124 !important;
text-shadow: 0 0 10px #d4af37, 0 0 20px #d4af37;
border: 1px solid #d4af37 !important;
background: rgba(212, 175, 55, 0.15) !important;
box-shadow: 0 0 15px rgba(212, 175, 55, 0.2);
transform: scale(1.05);
}
</style>
<script>
// Pomocná funkce pro přepínání vizuální záře
function updateGlow(element) {
if (!element) return;
const parent = element.parentElement;
parent.querySelectorAll('tw-link').forEach(el => el.classList.remove('active-glow'));
element.classList.add('active-glow');
}
window.changeTheme = function(theme, el) {
const story = document.querySelector('tw-story');
story.className = story.className.replace(/tema-\w+/g, '').trim();
if (theme) story.classList.add(theme);
localStorage.setItem('selectedTheme', theme);
updateGlow(el);
};
window.changeFontFamily = function(fontClass, el) {
const story = document.querySelector('tw-story');
story.className = story.className.replace(/font-\w+/g, '').trim();
if (fontClass) story.classList.add(fontClass);
localStorage.setItem('selectedFont', fontClass);
updateGlow(el);
};
window.changeFontSize = function(sizeClass, el) {
const story = document.querySelector('tw-story');
story.className = story.className.replace(/size-\w+/g, '').trim();
if (sizeClass) story.classList.add(sizeClass);
localStorage.setItem('selectedSize', sizeClass);
updateGlow(el);
};
// Automatické zvýraznění tlačítek po načtení pasáže
setTimeout(() => {
const savedTheme = localStorage.getItem('selectedTheme') || "";
const savedFont = localStorage.getItem('selectedFont') || "";
const savedSize = localStorage.getItem('selectedSize') || "";
document.querySelectorAll('.macro-link').forEach(link => {
const val = link.getAttribute('data-val');
if (link.closest('[data-type="theme"]') && val === savedTheme) link.classList.add('active-glow');
if (link.closest('[data-type="font"]') && val === savedFont) link.classList.add('active-glow');
if (link.closest('[data-type="size"]') && val === savedSize) link.classList.add('active-glow');
});
}, 50);
window.changePerf = function(tier, el) {
localStorage.setItem('selectedPerf', tier);
document.body.classList.remove('perf-high', 'perf-low');
document.body.classList.add('perf-' + tier);
// Nastav Harlowe proměnnou
if (typeof State !== 'undefined' && State.variables) {
State.variables.performanceTier = tier;
}
// Aplikuj/odstraň low-perf CSS
var existing = document.getElementById('low-perf-override');
if (tier === 'low') {
if (!existing) {
var style = document.createElement('style');
style.id = 'low-perf-override';
style.textContent = [
'.card-magic-trail { display: none !important; }',
'.card-screen-flash { display: none !important; }',
'.card-rune { display: none !important; }',
'.card-magic-particle { display: none !important; }',
'.card-particle { display: none !important; }',
'.weapon-slash { display: none !important; }',
'.arrow-hit::after { display: none !important; }',
'.particle { display: none !important; }'
].join('\n');
document.head.appendChild(style);
}
} else {
if (existing) existing.remove();
}
updateGlow(el);
};
// Načti uložené nastavení výkonu při startu
setTimeout(() => {
const savedPerf = localStorage.getItem('selectedPerf') || 'low';
// Aplikuj ihned
document.body.classList.remove('perf-high', 'perf-low');
document.body.classList.add('perf-' + savedPerf);
if (savedPerf === 'low') {
changePerf('low', null);
}
// Zvýrazni aktivní tlačítko
document.querySelectorAll('[data-type="perf"] tw-link').forEach(link => {
if (link.getAttribute('data-val') === savedPerf) link.classList.add('active-glow');
});
}, 50);
</script>}{{(display: "InventoryHUD")
(set: $vybranaPostava to "RONEK")
(set: $portraitURL to "")
(set: $portraitVariant to 1)
<style>
.character-selection-container {
display: flex;
top: 200px;
justify-content: center;
margin: 20px auto;
max-width: 1000px;
}
.character-card {
width: 450px;
background: rgba(0, 0, 0, 0.3);
border: 3px solid #8b7355;
border-radius: 3px;
overflow: visible;
cursor: pointer;
transition: all 0.3s ease;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5);
}
.character-card:hover {
transform: translateY(-5px);
box-shadow: 0 8px 30px rgba(212, 175, 55, 0.4);
border-color: #d4af37;
}
.character-card.selected {
border-color: #ffd700;
box-shadow: 0 0 30px rgba(255, 215, 0, 0.6);
transform: scale(1.02);
}
.character-card-header {
height: 250px;
background-size: cover;
background-position: center 15%;
position: relative;
border-radius: 3px 3px 0 0;
overflow: hidden;
}
.portrait-navigation {
position: absolute;
top: 50%;
transform: translateY(-50%);
background: rgba(0, 0, 0, 0.6);
color: #ffd700;
border: 2px solid #8b7355;
width: 50px;
height: 50px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
font-size: 30px;
font-weight: bold;
transition: all 0.3s ease;
z-index: 10;
user-select: none;
}
.portrait-nav-left {
left: 10px;
}
.portrait-nav-right {
right: 10px;
}
.portrait-navigation:hover {
background: rgba(0, 0, 0, 0.85);
border-color: #ffd700;
transform: translateY(-50%) scale(1.1);
}
.portrait-indicator {
position: absolute;
bottom: 10px;
right: 10px;
background: rgba(0, 0, 0, 0.7);
color: #ffd700;
padding: 5px 10px;
border-radius: 2px;
font-size: 12px;
border: 1px solid #8b7355;
}
/* ⭐ JMÉNO JEN NAHOŘE NAD KARTOU */
.character-main-name {
text-align: center;
margin-bottom: 20px;
color: #ffd700;
font-family: 'Cinzel Decorative', serif;
font-size: 48px;
font-weight: bold;
text-shadow: 3px 3px 6px rgba(0, 0, 0, 0.8);
letter-spacing: 3px;
}
.character-card-body { padding: 20px; }
.character-stats { color: #e2c636; font-family: 'Cinzel', serif; }
.stat-row { display: flex; justify-content: space-between; padding: 8px 0; border-bottom: 1px solid rgba(139, 115, 85, 0.3); }
.stat-label { color: #c9a961; font-weight: 600; }
.stat-value { color: #ffd700; font-weight: bold; }
.stat-divider { height: 2px; background: linear-gradient(90deg, transparent, #8b7355, transparent); margin: 15px 0; }
.inventory-container { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 10px; }
.inventory-item { position: relative; display: inline-block; cursor: pointer; width: 50px; height: 50px; }
.inventory-item img { width: 50px; height: 50px; border: 2px solid #8b7355; border-radius: 2px; background: rgba(0, 0, 0, 0.2); transition: all 0.3s ease; object-fit: contain; }
.inventory-item:hover img { border-color: #ffd700; transform: scale(1.1); }
.item-tooltip {
position: absolute; bottom: 0%; left: 100%; transform: translateY(-50%); margin-left: 10px;
background: rgba(0, 0, 0, 0.95); color: #ffd700; padding: 8px 12px; border-radius: 2px;
font-size: 12px; white-space: nowrap; opacity: 0; pointer-events: none;
transition: opacity 0.3s ease; border: 1px solid #8b7355; z-index: 9999;
}
.inventory-item:hover .item-tooltip { opacity: 1; }
.character-bio-display {
max-width: 700px; margin: 30px auto; padding: 25px;
background: rgba(143, 133, 84, 0.3); border: 3px solid #8b7355; border-radius: 3px;
top: 200px;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); opacity: 0; transform: translateY(-20px);
transition: all 0.5s ease; display: none;
}
.character-bio-display.visible { opacity: 1; transform: translateY(0); display: block; }
.character-bio-display h3 { color: #a67f16; font-family: 'Cinzel Decorative', serif; margin-bottom: 15px; text-align: center; font-size: 28px; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2); }
.character-bio-display p { color: #000000; font-family: 'Modern Antiqua', serif; line-height: 1.8; text-align: center; font-size: 20px; }
.confirm-selection-button {
display: inline-block; background: linear-gradient(135deg, #8b7355 0%, #6b5545 100%);
top: 200px;
color: #ffd700; border: 3px solid #d4af37; padding: 15px 40px; font-size: 18px;
font-family: 'Cinzel', serif; font-weight: bold; cursor: pointer; border-radius: 3px;
box-shadow: 0 4px 15px rgba(212, 175, 55, 0.4); transition: all 0.3s ease;
text-transform: uppercase; text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);
}
.confirm-selection-button:hover {
background: linear-gradient(135deg, #a08060 0%, #8b7355 100%);
box-shadow: 0 6px 20px rgba(255, 215, 0, 0.6);
top: 200px;
transform: translateY(-2px); border-color: #ffd700;
}
#confirm-button-container { text-align: center; margin-top: 30px; display: none; }
.item-reveal-overlay {
position: fixed; top: 0; left: 0; width: 100%; height: 100%;
background: rgba(0, 0, 0, 0.85); z-index: 10000; display: none;
justify-content: center; align-items: center; cursor: pointer;
opacity: 0; transition: opacity 0.3s ease;
}
.item-reveal-overlay.active { display: flex; opacity: 1; }
.item-reveal-image { max-width: 100%; max-height: 100%; object-fit: contain; filter: drop-shadow(0 0 30px rgba(255, 215, 0, 0.6)); }
.scroll-spacer { height: 500px; }
/* Animace pro potvrzení výběru */
.character-card.confirming {
animation: confirmSelection 1.5s ease-in-out forwards;
z-index: 1000;
}
@keyframes confirmSelection {
0% {
transform: scale(1.02);
opacity: 1;
}
50% {
transform: scale(1.3);
opacity: 0.8;
}
100% {
transform: scale(1.5);
opacity: 0;
}
}
/* Skrytí tlačítka a bio při potvrzení */
.fade-out-content {
animation: fadeOut 1s ease-in-out forwards;
}
@keyframes fadeOut {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
</style>
<div class="scroll-wrapper">
<!-- ⭐ JMÉNO NAHOŘE -->
<div class="character-main-name">RONEK</div>
<div id="bio-box" class="character-bio-display">
<div id="bio-content"></div>
</div>
<div id="confirm-button-container">
<span class="confirm-selection-button" id="confirm-button">POTVRDIT VÝBĚR POSTAVY</span>
</div>
<div class="character-selection-container">
<div class="character-card" id="main-character-card">
<div class="character-card-header" id="char-portrait-header">
<div class="portrait-navigation portrait-nav-left" id="prev-char">◀</div>
<div class="portrait-navigation portrait-nav-right" id="next-char">▶</div>
<div class="portrait-indicator" id="char-indicator">1/3</div>
</div>
<div class="character-card-body">
<div class="character-stats">
<div class="stat-row"><span class="stat-label">Životy (HP):</span><span class="stat-value" id="stat-hp">0</span></div>
<div class="stat-row"><span class="stat-label">Umění:</span><span class="stat-value" id="stat-art">0</span></div>
<div class="stat-divider"></div>
<div class="stat-row"><span class="stat-label">Zkušenosti:</span><span class="stat-value" id="stat-exp">0</span></div>
<div class="stat-row"><span class="stat-label">Kondice:</span><span class="stat-value" id="stat-kondice">0</span></div>
<div class="inventory-container" id="char-inventory">
<!-- Inventory items injected by JS -->
</div>
</div>
</div>
</div>
</div>
<div class="scroll-spacer"></div>
</div>
<div class="item-reveal-overlay" id="itemRevealOverlay">
<img src="" alt="Item" class="item-reveal-image" id="revealImage">
</div>
<!-- ⭐ HIDDEN LINKS PRO NASTAVENÍ PROMĚNNÝCH -->
<div style="display: none;">
<span id="link-variant-1">(link-repeat: "v1")[(set: $vybranaPostava to "RONEK")(set: $portraitURL to "https://files.catbox.moe/fews8p.jpg")(set: $portraitVariant to 1)]</span>
<span id="link-variant-2">(link-repeat: "v2")[(set: $vybranaPostava to "RONEK")(set: $portraitURL to "https://files.catbox.moe/dajli0.jpg")(set: $portraitVariant to 2)]</span>
<span id="link-variant-3">(link-repeat: "v3")[(set: $vybranaPostava to "RONEK")(set: $portraitURL to "https://files.catbox.moe/hj5ee6.jpg")(set: $portraitVariant to 3)]</span>
<span id="trigger-variant-1">(link: "goto-1")[(goto: "ronek-animace-1")]</span>
<span id="trigger-variant-2">(link: "goto-2")[(goto: "ronek-animace-2")]</span>
<span id="trigger-variant-3">(link: "goto-3")[(goto: "ronek-animace-3")]</span>
</div>
<script>
(function() {
function initCharacterSelection() {
var currentIdx = 0;
// ⭐ TŘI VARIANTY RONKA - RŮZNÉ PORTRÉTY A PŘÍBĚHY
var variants = [
{
id: 1,
portrait: "https://files.catbox.moe/fews8p.jpg",
hp: 28,
art: 0,
exp: 1,
kondice: 10,
bio: '<h3>Vesničan na útěku</h3><p>Mladý kluk z vesnice, který se zachránil útěkem před pleniteli. Od té doby se nikde neusadil a přijímá různé práce, aby přežil.</p>',
inventory: [
{ img: "https://files.catbox.moe/i1mcha.png", tooltip: "Obvaz: Malé ošetření +1 život" },
{ img: "https://files.catbox.moe/ayn9i6.png", tooltip: "Léčivý lektvar: +10 životů" },
{ img: "https://files.catbox.moe/pbbmii.png", tooltip: "Pěstí: Útok 2" },
{ img: "https://files.catbox.moe/jpbtij.png", tooltip: "Vyčkat: +4 Kondice" }
]
},
{
id: 2,
portrait: "https://files.catbox.moe/dajli0.jpg",
hp: 23,
art: 0,
exp: 3,
kondice: 10,
bio: '<h3>Zběhlý strážce</h3><p>Původně městský strážce, na kterého se nadřízení pokoušeli svalit vinu. Raději se vytratil hledat štěstí jinde.</p>',
inventory: [
{ img: "https://files.catbox.moe/i1mcha.png", tooltip: "Obvaz: Malé ošetření +1 život" },
{ img: "https://files.catbox.moe/c5u2x3.png", tooltip: "Nakopnutí: Útok 2, Kondice -1, obrana +1" },
{ img: "https://files.catbox.moe/7qak07.png", tooltip: "Nadechnutí: +5 Kondice" },
{ img: "https://files.catbox.moe/f3ijtv.png", tooltip: "Dýka: Útok 4, Kondice -1" }
]
},
{
id: 3,
portrait: "https://files.catbox.moe/hj5ee6.jpg",
hp: 25,
art: 2,
exp: 2,
kondice: 12,
bio: '<h3>Lovec z hlubokých lesů</h3><p>Bývalý lovec z hlubokých lesů, vydal se do světa hledat zmizelou slávu. Jeho luk je stejně rychlý jako jeho úsudek.</p>',
inventory: [
{ img: "https://files.catbox.moe/i1mcha.png", tooltip: "Obvaz: Malé ošetření +1 život" },
{ img: "https://files.catbox.moe/f3ijtv.png", tooltip: "Dýka: Útok 4, Kondice -1" },
{ img: "https://files.catbox.moe/jpbtij.png", tooltip: "Vyčkat: +4 Kondice" },
{ img: "https://files.catbox.moe/ayn9i6.png", tooltip: "Léčivý lektvar: +10 životů" }
]
}
];
function clickHiddenLink(id) {
var container = document.getElementById(id);
if (!container) return;
var link = container.querySelector('tw-link') || container.querySelector('a');
if (link) link.click();
}
function updateUI() {
var variant = variants[currentIdx];
// Portrait
document.getElementById('char-portrait-header').style.backgroundImage = "url('" + variant.portrait + "')";
document.getElementById('char-indicator').textContent = (currentIdx + 1) + '/' + variants.length;
// Stats
document.getElementById('stat-hp').textContent = variant.hp;
document.getElementById('stat-art').textContent = variant.art;
document.getElementById('stat-exp').textContent = variant.exp;
document.getElementById('stat-kondice').textContent = variant.kondice;
// Bio
var bioBox = document.getElementById('bio-box');
document.getElementById('bio-content').innerHTML = variant.bio;
bioBox.classList.add('visible');
document.getElementById('confirm-button-container').style.display = 'block';
// Inventory
var invContainer = document.getElementById('char-inventory');
invContainer.innerHTML = '';
variant.inventory.forEach(function(item) {
var itemDiv = document.createElement('div');
itemDiv.className = 'inventory-item';
itemDiv.setAttribute('data-item-image', item.img);
itemDiv.innerHTML = '<img src="' + item.img + '"><div class="item-tooltip">' + item.tooltip + '</div>';
itemDiv.addEventListener('click', function(e) {
e.stopPropagation();
document.getElementById('revealImage').src = this.getAttribute('data-item-image');
document.getElementById('itemRevealOverlay').classList.add('active');
});
invContainer.appendChild(itemDiv);
});
// ⭐ Set Harlowe Variables - nastavení portrétu a varianty
clickHiddenLink('link-variant-' + variant.id);
console.log('✅ Variant ' + variant.id + ' selected, portrait: ' + variant.portrait);
}
document.getElementById('prev-char').addEventListener('click', function(e) {
e.stopPropagation();
currentIdx = (currentIdx - 1 + variants.length) % variants.length;
updateUI();
});
document.getElementById('next-char').addEventListener('click', function(e) {
e.stopPropagation();
currentIdx = (currentIdx + 1) % variants.length;
updateUI();
});
document.getElementById('main-character-card').addEventListener('click', function() {
this.classList.add('selected');
});
document.getElementById('itemRevealOverlay').addEventListener('click', function() {
this.classList.remove('active');
});
var confirmBtn = document.getElementById('confirm-button');
if (confirmBtn) {
confirmBtn.addEventListener('click', function() {
var variant = variants[currentIdx];
var selectedCard = document.getElementById('main-character-card');
selectedCard.classList.add('confirming');
document.getElementById('confirm-button-container').classList.add('fade-out-content');
document.getElementById('bio-box').classList.add('fade-out-content');
console.log('🚀 Launching ronek-animace-' + variant.id);
setTimeout(function() {
clickHiddenLink('trigger-variant-' + variant.id);
}, 1500);
});
}
// Initial update
updateUI();
console.log('✅ Character selection initialized - RONEK with 3 portrait variants');
}
// Počkáme na vykreslení Harlowe
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', function() {
setTimeout(initCharacterSelection, 100);
});
} else {
setTimeout(initCharacterSelection, 100);
}
})();
</script>
}
(display: "BattleScene")}{
(display: "InventoryHUD")
<!-- NASTAVENÍ: Zde nastavte kolik zkušeností hráč získal -->
(set: $ziskaneExp to 2)
<!-- Kontrola, jestli $experience existuje, pokud ne, použij výchozí hodnotu -->
(if: $experience is 0 or $experience > 0)[
(set: $puvodniExp to $experience)
](else:)[
(set: $puvodniExp to 1)
]
(set: $noveExp to $puvodniExp + $ziskaneExp)
(set: $maxExp to 10)
(align:"=><=")+(box:"X")[//(text-colour:#574f4f)[...Získané zkušenosti za souboj a dokončený Prolog..] //]
<style>
.scroll-wrapper {
max-height: 90vh;
overflow-y: auto;
padding-right: 10px;
}
.scroll-wrapper::-webkit-scrollbar {
width: 8px;
height: 8px;
}
.scroll-wrapper::-webkit-scrollbar-track {
background: rgba(0, 0, 0, 0.1);
border-radius: 3px;
}
.scroll-wrapper::-webkit-scrollbar-thumb {
background: rgba(139, 115, 85, 0.5);
border-radius: 1px;
}
.scroll-wrapper::-webkit-scrollbar-thumb:hover {
background: rgba(139, 115, 85, 0.8);
}
.character-selection-container {
display: flex;
justify-content: center;
gap: 40px;
margin: 10px auto;
max-width: 900px;
flex-wrap: wrap;
}
.character-card {
width: 300px;
background: rgba(0, 0, 0, 0.3);
border: 3px solid #8b7355;
border-radius: 3px;
overflow: visible;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5);
}
.character-card-header {
height: 250px;
background-size: cover;
background-position: center;
position: relative;
border-radius: 3px 3px 0 0;
overflow: hidden;
}
.character-card[data-character="DALEK"] .character-card-header {
background-position: center 15%;
}
.character-card[data-character="RON"] .character-card-header {
background-position: center 15%;
}
.character-name {
position: absolute;
bottom: 10px;
left: 50%;
transform: translateX(-50%);
background: rgba(0, 0, 0, 0.3);
color: #ffd700;
padding: 10px 30px;
font-family: 'Cinzel Decorative', serif;
font-size: 24px;
font-weight: bold;
border: 2px solid #8b7355;
border-radius: 2px;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);
}
.character-card-body {
padding: 20px;
}
.character-stats {
color: #e2c636;
font-family: 'Cinzel', serif;
}
.stat-row {
display: flex;
justify-content: space-between;
padding: 8px 0;
border-bottom: 1px solid rgba(139, 115, 85, 0.3);
}
.stat-label {
color: #c9a961;
font-weight: 600;
}
.stat-value {
color: #ffd700;
font-weight: bold;
}
.stat-divider {
height: 2px;
background: linear-gradient(90deg, transparent, #8b7355, transparent);
margin: 15px 0;
}
.exp-gain-section {
margin-top: 30px;
padding: 25px;
background: rgba(0, 0, 0, 0.4);
border: 3px solid #d4af37;
border-radius: 3px;
text-align: center;
}
.exp-gain-title {
color: #ffd700;
font-family: 'Cinzel Decorative', serif;
font-size: 24px;
margin-bottom: 20px;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);
}
.exp-bar-container {
width: 100%;
height: 40px;
background: rgba(0, 0, 0, 0.5);
border: 2px solid #8b7355;
border-radius: 3px;
overflow: hidden;
position: relative;
margin: 20px 0;
}
.exp-bar-fill {
height: 100%;
background: linear-gradient(90deg, #d4af37 0%, #ffd700 50%, #d4af37 100%);
width: 0%;
transition: width 2s ease-out;
box-shadow: 0 0 20px rgba(255, 215, 0, 0.6);
position: relative;
}
.exp-bar-fill::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(90deg,
transparent 0%,
rgba(255, 255, 255, 0.3) 50%,
transparent 100%);
animation: shine 2s infinite;
}
@keyframes shine {
0% { transform: translateX(-100%); }
100% { transform: translateX(100%); }
}
.exp-text {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
color: #000;
font-family: 'Cinzel', serif;
font-size: 18px;
font-weight: bold;
text-shadow: 1px 1px 2px rgba(255, 255, 255, 0.5);
z-index: 10;
}
.exp-gain-message {
color: #ffd700;
font-family: 'Cinzel', serif;
font-size: 18px;
margin-top: 15px;
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.8);
}
.level-up-message {
color: #ff6b6b;
font-family: 'Cinzel Decorative', serif;
font-size: 22px;
margin-top: 20px;
margin-bottom: 20px;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);
animation: pulse 1.5s infinite;
}
@keyframes pulse {
0%, 100% { opacity: 1; transform: scale(1); }
50% { opacity: 0.8; transform: scale(1.05); }
}
.scroll-spacer {
height: 500px;
display: block;
}
</style>
<div class="scroll-wrapper">
<div style="max-width: 500px; margin: 20px auto;">
<div class="exp-gain-section">
<div class="exp-gain-title">ZÍSKANÉ ZKUŠENOSTI</div>
<div class="exp-bar-container">
<div class="exp-bar-fill" id="expBar"></div>
<div class="exp-text" id="expText">$puvodniExp / $maxExp</div>
</div>
<div class="exp-gain-message" id="expMessage"></div>
<!-- Skrytá data pro JavaScript -->
<div id="exp-data" style="display: none;">
<span id="old-exp">$puvodniExp</span>
<span id="gained-exp">$ziskaneExp</span>
<span id="new-exp">$noveExp</span>
<span id="max-exp">$maxExp</span>
</div>
</div>
</div>
<div class="character-selection-container">
(if: $vybranaPostava is "RON")[
<div class="character-card" data-character="RON">
<div class="character-card-header" style="background-image: url('https://files.catbox.moe/jcf5tg.png');">
<div class="character-name">RON</div>
</div>
<div class="character-card-body">
<div class="character-stats">
<div class="stat-row"><span class="stat-label">Životy (HP):</span><span class="stat-value">25</span></div>
<div class="stat-row"><span class="stat-label">Umění:</span><span class="stat-value">0</span></div>
<div class="stat-divider"></div>
<div class="stat-row"><span class="stat-label">Zkušenosti:</span><span class="stat-value">$noveExp</span></div>
<div class="stat-row"><span class="stat-label">Kondice:</span><span class="stat-value">10</span></div>
</div>
</div>
</div>
](else:)[
<div class="character-card" data-character="DALEK">
<div class="character-card-header" style="background-image: url('https://files.catbox.moe/lybbh9.png');">
<div class="character-name">DALEK</div>
</div>
<div class="character-card-body">
<div class="character-stats">
<div class="stat-row"><span class="stat-label">Životy (HP):</span><span class="stat-value">23</span></div>
<div class="stat-row"><span class="stat-label">Umění:</span><span class="stat-value">0</span></div>
<div class="stat-divider"></div>
<div class="stat-row"><span class="stat-label">Zkušenosti:</span><span class="stat-value">$noveExp</span></div>
<div class="stat-row"><span class="stat-label">Kondice:</span><span class="stat-value">10</span></div>
</div>
</div>
</div>
]
</div>
(align:"=><=")[
(if: $noveExp >= $maxExp)[
<div class="level-up-message">🌟 POSTOUPIL/A JSI NA DALŠÍ ÚROVEŇ! 🌟</div>
(link-repeat: "ZVÝŠIT ÚROVEŇ")[(set: $experience to $noveExp)(goto: "ExpeniPasaz")]
](else:)[
(link-repeat: "POKRAČOVAT")[(set: $experience to $noveExp)(goto: "mapavenku")]
]
]
<div class="scroll-spacer"></div>
</div>
<script>
$(document).ready(function() {
// Načtení dat ze skrytých elementů
const characterData = {
oldExp: parseInt($('#old-exp').text()) || 0,
gainedExp: parseInt($('#gained-exp').text()) || 3,
newExp: parseInt($('#new-exp').text()) || 3,
maxExp: parseInt($('#max-exp').text()) || 10
};
console.log('Character Data:', characterData);
// Animace experience baru
setTimeout(function() {
const oldPercent = (characterData.oldExp / characterData.maxExp) * 100;
const newPercent = (characterData.newExp / characterData.maxExp) * 100;
$('#expBar').css('width', oldPercent + '%');
setTimeout(function() {
$('#expBar').css('width', Math.min(newPercent, 100) + '%');
// Animuj i změnu čísla v textu
if (characterData.gainedExp > 0) {
let currentDisplayExp = characterData.oldExp;
const expInterval = setInterval(function() {
currentDisplayExp++;
$('#expText').text(currentDisplayExp + ' / ' + characterData.maxExp);
if (currentDisplayExp >= characterData.newExp) {
clearInterval(expInterval);
}
}, (2000 / characterData.gainedExp));
} else {
$('#expText').text(characterData.newExp + ' / ' + characterData.maxExp);
}
$('#expMessage').text('+ ' + characterData.gainedExp + ' zkušeností získáno!');
}, 300);
}, 500);
});
</script>
}(display: "SnowDegreeAnimation"){
<div id="locationContainer">
(link-goto: "<div class='location location-Gareth'><img class='location-icon' src='https://files.catbox.moe/r8qrzi.png'><span class='tooltip'>[<h3>(text-colour:orange)[Stánek kupce Garetha]</h3>]Vypadá, že je zcestovalý</span></div>", "gareth")
(link-goto: "<div class='location location-les'><img class='location-icon' src='https://files.catbox.moe/ba33t5.png'><span class='tooltip'>(text-colour:orange)[<h3>(text-colour:orange)[Kovář]</h3>]Takový se vždy hodí navštívit</span></div>", "kovar")
(link-goto: "<div class='location location-obchodnik'><img class='location-icon' src='https://files.catbox.moe/ykt8id.png'><span class='tooltip'>(text-colour:orange)[<h3>(text-colour:orange)[Orientální obchodník]</h3>]Co ten tu prodává?</span></div>", "predmety")
(link-goto: "<div class='location location-trh'><img class='location-icon' src='https://files.catbox.moe/2n4lib.png'><span class='tooltip'>(text-colour:orange)[<h3>(text-colour:orange)[Dřevorubec]</h3>]Dřevorubec vypadá že chce něco prodat</span></div>", "drevorubec")
(link-goto: "<div class='location location-kupec'><img class='location-icon' src='https://files.catbox.moe/98dybl.png'><span class='tooltip'>(text-colour:orange)[<h3>(text-colour:orange)[Bohatý kupec]</h3>]Místní bohatý kupec, který je dobře chráněný</span></div>", "LocalSell")
</div>
}<!-- ParryHandler - Detekce útoku nepřítele a zvýšení obrany -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- ⚠️ TENTO HANDLER MUSÍ BÝT ZAVOLÁN AŽ PO NASTAVENÍ $playerCard! -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- DETEKCE PARRY KARTY -->
<!-- ═══════════════════════════════════════════════════════════════ -->
(if: $playerCard is 0)[
(set: $parryCardActive to false)
](else-if: $playerCard contains "type" and $playerCard's type is "defensive")[
<!-- ⚠️ KONTROLA: Je nepřítelova karta už vybraná? -->
(if: $chosenEnemyCard is 0)[
<!-- Nepřítel ještě nevybral kartu - nemůžeme zkontrolovat attack -->
(set: $parryCardActive to false)
(set: $parryMsg to "<span class='combat-parry-fail'>Nepřítel ještě nezaútočil.</span>")
(set: $combatLog to $combatLog + (a: $parryMsg))
](else:)[
<!-- ✅ KONTROLA: Má nepřítel útok? -->
(set: $enemyHasAttack to false)
<!-- 1. Kontrola klasického attack -->
(if: $chosenEnemyCard contains "attack" and $chosenEnemyCard's attack >= 1)[
(set: $enemyHasAttack to true)
]
<!-- 2. Kontrola minAttack (pro zbraně bez levelů) -->
(if: $chosenEnemyCard contains "minAttack" and $chosenEnemyCard's minAttack >= 1)[
(set: $enemyHasAttack to true)
]
<!-- 3. Kontrola levels (pro zbraně s levely) -->
(if: $chosenEnemyCard contains "levels" and $chosenEnemyCard's levels's length > 0)[
(set: $enemyHasAttack to true)
]
<!-- 4. Kontrola weapon typu -->
(if: $chosenEnemyCard contains "type" and $chosenEnemyCard's type is "weapon")[
(set: $enemyHasAttack to true)
]
<!-- VYHODNOCENÍ -->
(if: $enemyHasAttack is true)[
<!-- ✅ PARRY JE PLATNÝ - nepřítel útočí -->
(set: $parryCardActive to true)
<!-- 🛡️ ZVÝŠENÍ OBRANY NA 12 -->
(set: $originalDefense to $playerCard's defense)
(set: $playerCard's defense to 12)
<!-- 📝 LOG ZPRÁVA -->
(set: $parryMsg to "<span class='combat-parry'>Perfektní Obrana!</span>")
(set: $combatLog to $combatLog + (a: $parryMsg))
](else:)[
<!-- ❌ PARRY NENÍ PLATNÝ - nepřítel neútočí -->
(set: $parryCardActive to false)
<!-- 📝 LOG ZPRÁVA -->
(set: $parryMsg to "<span class='combat-parry-fail'>Nepřítel nezaútočil.</span>")
(set: $combatLog to $combatLog + (a: $parryMsg))
]
]
](else:)[
<!-- Není parry karta - nic nedělej -->
(set: $parryCardActive to false)
]
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- CSS STYLY PRO PARRY KARTU -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<style>
/* 🛡️ PARRY KARTA - SPECIÁLNÍ VZHLED */
.defensive-card {
background: linear-gradient(135deg, rgba(25, 25, 112, 0.8), rgba(70, 130, 180, 0.9)) !important;
border-color: rgba(135, 206, 250, 0.6) !important;
position: relative;
overflow: hidden;
}
/* AKTIVNÍ PARRY KARTA - modrý glow (když nepřítel útočí) */
.defensive-card.parry-active {
box-shadow: 0 0 25px rgba(135, 206, 250, 0.9) !important;
border-color: rgba(135, 206, 250, 1) !important;
animation: parry-ready 1.2s ease-in-out infinite;
}
@keyframes parry-ready {
0%, 100% {
box-shadow: 0 0 20px rgba(135, 206, 250, 0.7);
}
50% {
box-shadow: 0 0 35px rgba(135, 206, 250, 1);
}
}
/* NEAKTIVNÍ PARRY KARTA - šedý glow (když nepřítel neútočí) */
.defensive-card.parry-inactive {
filter: grayscale(50%) brightness(0.7);
opacity: 0.8;
}
/* COMBAT LOG ZPRÁVY */
.combat-parry {
color: #87ceeb;
font-weight: bold;
text-shadow: 0 0 10px rgba(135, 206, 250, 0.9);
font-size: 1.1em;
}
.combat-parry-fail {
color: #888;
font-style: italic;
}
/* INDIKÁTOR NA KARTĚ */
.defensive-card .card-name::after {
content: ' 🛡️';
color: #87ceeb;
text-shadow: 0 0 8px rgba(135, 206, 250, 0.8);
}
/* BONUS INDIKÁTOR (když je aktivní) */
.defensive-card.parry-active .card-stats .defense::after {
content: ' → 12';
color: #00ff00;
font-size: 12px;
font-weight: bold;
text-shadow: 0 0 5px rgba(0, 255, 0, 0.8);
}
</style>
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- JAVASCRIPT PRO DYNAMICKÉ TŘÍDY -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<script>
(function() {
setTimeout(function() {
// Najdi všechny defensive karty
var cards = document.querySelectorAll('.card.defensive-card');
cards.forEach(function(card) {
var cardName = card.querySelector('.card-name');
if (!cardName) return;
// Zjisti, jestli parry je aktivní (použij Twine proměnnou)
var parryIsActive = false;
if (typeof State !== 'undefined' && State.variables) {
parryIsActive = State.variables.parryCardActive === true;
}
if (parryIsActive) {
card.classList.add('parry-active');
card.classList.remove('parry-inactive');
} else {
card.classList.add('parry-inactive');
card.classList.remove('parry-active');
}
});
}, 100);
})();
</script>(if: $performanceTierDetected is not true)[
(set: $performanceTierDetected to true)
(set: $performanceTier to "high")
(print: "<script>
(function() {
// Pokud má hráč manuální volbu, použij ji
var manual = localStorage.getItem('selectedPerf');
if (manual) {
document.body.classList.remove('perf-high', 'perf-low');
document.body.classList.add('perf-' + manual);
if (typeof State !== 'undefined' && State.variables) {
State.variables.performanceTier = manual;
}
if (manual === 'low') {
var style = document.createElement('style');
style.id = 'low-perf-override';
// ... stejný obsah jako dřív
document.head.appendChild(style);
}
console.log('[PerfDetect] Manuální volba:', manual);
return; // přeskoč auto-detect
}
// Jinak spusť původní auto-detect...
})();
</script>")
]Vychrtlé zvíře s němou tváří na tebe smutně kouká a pak zakňučelo.
Koukáš na něj a hodnítíš jeho stav. Moc jídla by z něj nebylo, ani ta povyslá kůže pokrytá sněhem nemá hodnotu. Zbytky jídla nemáš, abys ho nakrmil ... takže co s ním?
"Asi zemře hladem," probleskne ti hlavou.
[
[[Zpět do vesnice|Vesnice]]]
<!-- (link: "✮ načíst ")[(load-game: "slot1")]) -->(display: "InventoryHUD")<!-- PlayerPoisonHandler -->
<!-- ⭐ OPRAVA: Správná inicializace -->
(unless: $playerPoisonStacks is a number)[(set: $playerPoisonStacks to 0)]
(unless: $playerPoisonDuration is a number)[(set: $playerPoisonDuration to 0)]
<!-- ☠️ POISON TICK - na začátku kola -->
(if: $battlePhase is "selecting" or $battlePhase is "enemy_waiting")[
(if: $playerPoisonStacks > 0 and $playerPoisonDuration > 0)[
<!-- Aplikuj damage -->
(set: $enemyHP to $enemyHP - $playerPoisonStacks)
(set: $poisonMsg to "<span class='combat-poison'>☠️ Nepřítel utrpěl " + (text: $playerPoisonStacks) + " HP z otravy! (Zbývá " + (text: ($playerPoisonDuration - 1)) + " kol)</span>")
(set: $combatLog to it + (a: $poisonMsg))
<!-- Odečti duration AŽ PO aplikaci damage -->
(set: $playerPoisonDuration to $playerPoisonDuration - 1)
<!-- Zkontroluj, jestli poison vypršel -->
(if: $playerPoisonDuration <= 0)[
(set: $expireMsg to "<span class='combat-poison'>💀 Otrava nepřítele vypršela</span>")
(set: $combatLog to it + (a: $expireMsg))
(set: $playerPoisonStacks to 0)
]
]
]
<!-- 🗡️ APLIKACE POISON z karty -->
(if: $battlePhase is "resolving")[
(if: $playerCard contains "type" and $playerCard's type is "poison")[
(set: _poisonDamage to 2)
(set: _poisonTurns to 2)
(if: $playerCard contains "poisonDamage")[
(set: _poisonDamage to $playerCard's poisonDamage)
]
(if: $playerCard contains "poisonDuration")[
(set: _poisonTurns to $playerCard's poisonDuration)
]
(set: $playerPoisonStacks to _poisonDamage)
(set: $playerPoisonDuration to _poisonTurns)
(set: $applyMsg to "<span class='combat-poison'>☠️ Nepřítel byl otráven! (" + (text: _poisonDamage) + " HP/kolo po dobu " + (text: _poisonTurns) + " kol)</span>")
(set: $combatLog to it + (a: $applyMsg))
]
]{{
(if: $hasPotion > 0)[
<div class="potion-card-wrapper">
<div class="potion-link-overlay">
(link: " ")[
<!-- Použij lektvar -->
(set: $hasPotion to $hasPotion - 1)
<!-- Vyléčení -->
(set: $healAmount to 10)
(if: $hp + $healAmount > $maxHp)[
(set: $healAmount to $maxHp - $hp)
]
(set: $hp to $hp + $healAmount)
<!-- Nepřítel zaútočí -->
(set: $playableEnemyCards to (a:))
(for: each _card, ...$enemyHand)[
(if: _card's cost <= 3)[
(set: $playableEnemyCards to $playableEnemyCards + (a: _card))
]
]
(if: $playableEnemyCards's length > 0)[
(set: $enemyCard to (either: ...$playableEnemyCards))
](else:)[
(set: $enemyCard to (either: ...$enemyHand))
]
<!-- Damage od nepřítele -->
(set: $damageToPlayer to $enemyCard's attack - 0)
(if: $damageToPlayer < 0)[(set: $damageToPlayer to 0)]
<!-- Aplikace damage přes štít -->
(if: $damageToPlayer > 0)[
(if: $tempHP > 0)[
(if: $damageToPlayer >= $tempHP)[
(set: $damageToPlayer to $damageToPlayer - $tempHP)
(set: $tempHP to 0)
](else:)[
(set: $tempHP to $tempHP - $damageToPlayer)
(set: $damageToPlayer to 0)
]
]
(if: $damageToPlayer > 0)[
(set: $hp to $hp - $damageToPlayer)
(set: $playerHitCounter to $playerHitCounter + 1)
]
]
<!-- Záznam do combat logu -->
(set: $vysledek to "<span class='combat-healing'>**Síla dodána!** +**" + (text: $healAmount) + " HP** | Nepřítel útočí: **-" + (text: $damageToPlayer) + " HP**</span>")
(set: $combatLog to $combatLog + (a: $vysledek))
<!-- Zvuk vypití lektvaru -->
(print: "<script>
if(window.combatSounds){
combatSounds.playPotionSound(0.6);
}
</script>")
<!-- Pokud hráč dostal damage, zahraj pokřik -->
(if: $damageToPlayer > 0)[
(print: "<script>
if(window.combatSounds){
combatSounds.playBattleCry('player', 0.6, 200);
}
</script>")
]
<!-- Návrat do selecting fáze BEZ regenerace karet -->
(set: $battlePhase to "selecting")
(go-to: "CardBattle")
]
</div>
<div class="potion-card-visual">
<img src="https://files.catbox.moe/nh7x9n.png" alt="Lektvar léčení">
<div class="potion-card-text">Použít lektvar</div>
<div class="potion-count">×(print: $hasPotion)</div>
</div>
</div>
]
}
<style>
.potion-card-wrapper {
position: fixed;
top: 40px;
left: 40px;
width: 100px;
height: 150px;
z-index: 10000;
transition: all 0.4s ease;
opacity: 0.8;
}
.potion-link-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 30;
}
.potion-link-overlay tw-link {
display: block !important;
width: 100% !important;
height: 100% !important;
opacity: 0;
cursor: pointer;
}
.potion-card-visual {
position: relative;
width: 100%;
height: 100%;
border: 1px solid rgba(108, 219, 29, 0.6);
border-radius: 3px;
overflow: hidden;
box-shadow: 0 8px 15px rgba(0,0,0,0.6);
background: #1a0f08;
z-index: 10;
}
.potion-card-text {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -30%);
width: 90%;
text-align: center;
color: #6cdb1d;
font-family: 'Cinzel', serif;
font-size: 13px;
font-weight: bold;
text-shadow: 2px 2px 4px rgba(0,0,0,1), 0 0 10px rgba(108, 219, 29, 0.5);
z-index: 20;
pointer-events: none;
opacity: 0;
transition: all 0.4s ease;
}
/* Počet lektvarů */
.potion-count {
position: absolute;
bottom: 8px;
right: 8px;
background: rgba(0, 0, 0, 0.8);
color: #6cdb1d;
font-family: 'Cinzel', serif;
font-size: 16px;
font-weight: bold;
padding: 2px 6px;
border-radius: 3px;
border: 1px solid rgba(108, 219, 29, 0.6);
text-shadow: 0 0 8px rgba(108, 219, 29, 0.8);
z-index: 20;
}
.potion-card-visual::before,
.potion-card-visual::after {
content: "";
position: absolute;
width: 0.5rem;
height: 0.5rem;
border: 1.5px solid rgba(108, 219, 29, 0.7);
z-index: 25;
}
.potion-card-visual::before {
top: 3px;
left: 3px;
border-right: none;
border-bottom: none;
}
.potion-card-visual::after {
bottom: 3px;
right: 3px;
border-left: none;
border-top: none;
}
.potion-card-visual img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
transition: filter 0.4s ease;
}
/* HOVER EFEKTY */
.potion-card-wrapper:hover {
transform: translateY(-8px) scale(1.05);
opacity: 1;
}
.potion-card-wrapper:hover .potion-card-text {
opacity: 1;
transform: translate(-50%, -50%);
}
.potion-card-wrapper:hover img {
filter: brightness(0.3) blur(2px);
}
.potion-card-wrapper:hover .potion-card-visual {
border-color: #6cdb1d;
box-shadow: 0 0 20px rgba(108, 219, 29, 0.5);
}
/* Styl pro combat log healing */
.combat-healing {
color: #6cdb1d;
font-weight: bold;
text-shadow: 0 0 10px rgba(108, 219, 29, 0.5);
}
</style>}{ <h4>Název scény</h4>
<br>
<div class="text-divider divider-classic"></div>
<div class="gamebook-container" id="container">
<div class="gamebook-box">
Zde napište váš příběh. Můžete psát více odstavců. (lorem ipsum, lorem impsum, leremoipsum, loremipsum, lorem ipsum, lorem ipsum)
<br>
Toto je druhý odstavec.
</div>
</div>
<br>
<h5>
[[Pokračovat|PrvniPasaz]]
<br>
(t8n-depart: "dissolve") + (t8n-arrive: "dissolve")[<span class="CinzelButton">(text-colour:#1a1f13)[[[Pokračovat hezčí|PrvniPasaz]]]</span>]
</h5>
}<!-- 🎯 PRECISION HANDLER - Ignoruje enemy defense -->
(if: $playerCard contains "type" and $playerCard's type is "precision")[
<!-- Ulož původní defense nepřítele -->
(set: $originalEnemyDefense to $enemyCard's defense)
<!-- Nastav enemy defense na 0 pro tento útok -->
(set: $enemyCard to $enemyCard + (dm: "defense", 0))
<!-- Přidej zprávu do logu -->
(if: $originalEnemyDefense > 0)[
(set: $precisionMsg to "<span class='combat-precision'>Přesný úder!</span>")
(set: $combatLog to it + (a: $precisionMsg))
](else:)[
(set: $precisionMsg to "<span class='combat-precision'>Přesný úder! Nepřítel se ani nebránil</span>")
(set: $combatLog to it + (a: $precisionMsg))
]
]📋 STRUKTURA CSS SOUBORU
SEKCE 1: ZÁKLADNÍ NASTAVENÍ A TYPOGRAFIE (GLOBAL)
Google Fonts import
Základní styling STORY
Kurzory (default a pointer)
Přechody mezi pasážemi (Harlowe fade-in) a sway tlačítka
Alternativní témata (modrá, béžová, tmavá, zelená, fialová)
Styling textu PASSÁŽE
Nadpisy (H1-H6)
Sidebar
Velikosti textu (propojené nastavení)
SEKCE 2: POZADÍ A SCÉNY (BACKGROUND & TAGS)
Základní pozadí pro hru s animací
Překryvné vrstvy pro pozadí scény
Specifické tagy pozadí (hra, cesta, souboj, vesnice, les, chram, mapa, trhy, inventory, batoh, stul, prohra, vyhra, muz, stan, lesCesta, trener, pytlak, house, napoveda, empty)
Animace pozadí (backgroundDrift)
SEKCE 2.1: POZADÍ ANIMOVANÉ
Prolínání dvou obrázků (tag "prolinacka")
Animace fadeBackground a fadeBackgroundReverse
SEKCE 2.2: POZADÍ ANIMOVANÉ 2
Prolínání dvou obrázků (tag "prolinacka2")
SEKCE 3: KARTY POSTAV A SCÉNY (STAT & SCENE CARDS)
Kontejner pro startovní karty postav (stat-cards-container)
Základní styl KARTY TVORBY POSTAVY (stat-card)
Vylepšené rohové ozdoby pro karty
Obrázky kartiček POSTAVY (HP, ATK, SKILL)
Card Content & Name
Permanentní označení karty postavy (is-selected)
Scene card (Karta uprostřed pasáže)
Rohové ozdoby pro scene-card
Třída is-gone (animace zmizení)
Karty pro specifické tagy TUTORIAL
SEKCE 4: SOUBOJ (COMBAT & DICE)
Combat Box (Staty a Log)
Rohové ozdoby pro combat-box
Combat Log (historie souboje)
Speciální barvy pro log (victory, defeat, draw)
Sekce pro kostky / tlačítko hodu
Diamantové ozdoby pro dice tlačítko
Vizualizace kostek v SCENE-CARD (dice-container)
Vzhled kostky hráče a nepřítele
Efekty a zprávy k souboji
Zešednutí poražené kostky
Rudý Gradient Overlay při prohře/smrti
Boxy vítězství a porážky
Battle container
SEKCE 5: INTERAKCE A TLAČÍTKA (LINKS & STATS)
Diamantové ozdoby pro tlačítka
Tlačítka hover efekt
Hover pro navštívené odkazy
Staty a klikatelné staty (sekce #staty)
Tlačítka vzhled (GLOBAL)
Informační bublina (TOOLTIP)
SEKCE 6: INVENTÁŘ, TRAITY A STATY (HUD)
Styly pro itemy (itemContainer)
Styly pro inventory button (inventoryButtonContainer)
Setting container
Styly pro traity (traitContainer)
Styly pro tooltip
Fixní staty hráče pod itemy (statContainer, player-stats-hud)
Rohové ozdoby pro player-stats-hud
Stylování jednotlivých řádků (HP, MP, XP)
SEKCE 7: ANIMACE, POPUPY, PŘECHODY, TOOLTIP
Combat efekt zčernání obrazu (overlay-dark)
Tutorial popup
Animace obecné (fadeIn, popIn, fadeOut)
Karta souboje - Animace Obrázků
Tooltip s animací zleva a diamantovými ozdobami
Responsivita a oprava scrollbaru pro tooltipy
SEKCE 8: RESPONSIVITA A MOBILNÍ ZAŘÍZENÍ
Media queries pro různé rozlišení (1400px, 900px, 600px)
Scrollbar styling
SEKCE 9: NASTAVENÍ FONTU (DYNAMICKÉ)
Fonty aplikované přes tw-story (times, arial, courier, georgia, verdana, impact, modern)
Velikosti fontů (small, medium, xlarge)
SEKCE 10: KARTY POSTAV, INVENTÁŘE A TUTORIAL POINTER
Tutorial pointer
Animace pointBounce
Tutorial pointer inline
Styly pro inventory karty kategorií (main-inventory-selection-container)
SEKCE 11: VYLEPŠENÉ KARTY INVENTÁŘE a zoom karet
Card preview overlay (zoom)
Kontejner pro karty inventáře (inventory-grid)
Základní karta itemu (inventory-card)
Rohové ozdoby
Hover efekt
Kontejner pro obrázek
Název a popis itemu
Staty itemu
Kategorie karty (weapon, armor, shield, consumable)
Responsivita pro inventory grid
Podsekce: Sekce prodeje itemů
Kontejner pro prodejní tlačítko
Styling pro sell-link
Fixní výška pro prodejní karty
Prodejní tlačítko v action containeru
Varovný text pro vybavené předměty
Zvětšení fontů pro tlačítka PRODAT/KOUPIT
Vlastněný item (owned-item)
Podsekce: Styl pro vybavený předmět (equipped-item)
SEKCE 12: BATTLE HUD - HRÁČ VS NEPŘÍTEL (ZDRAVÍ V BAŇCE)
Battle HUD hearts
Rohové ozdoby
Kontejner pro hráče/nepřítele
Stamina box a bottle
Hearts box a potion bottle
Health fill container a fill
Stamina fill container a fill
Shield fill (modré brnění)
Animace bublin (bubble-rise)
Label a HP text
VS separator
Třesení při zásahu (box-shake)
Částice při zásahu (particle)
Info box pod srdíčky
Responsivita
SEKCE 13: STYL KNIHY, LINKY ROZDĚLENÍ
Základní kontejner pro textové oddělovače (text-divider)
Styl 1: Klasické Vlnovky (divider-classic)
Styl 3: RPG / Bojový (divider-rpg)
Styl 4: Mystický / Magický (divider-magic)
SEKCE 14: CARDBATTLE SYSTEM - VĚJÍŘOVÉ ROZLOŽENÍ
Battle container
Hand (ruka s kartami)
Card wrapper
Hover efekt
Card
Skryté elementy karty (card-name, card-stats, card-cost-wrapper, atd.)
Unplayable card
Resolve area
Cards in battle
AnimacefadeOut a fade-after-5s
Battle card slot
Card shake animace
VS battle
Continue section
Combat armor
Trait warning a gained
Bonus stat
Media queries pro mobil
SEKCE 15: CINZEL BUTTON a ZOOM MODAL Z JAVASCRIPTU
Globální styl pro Cinzel tlačítka + burning efekty
Pseudoelementy pro obrázky zleva a zprava
Animace burnHigh
Podsekce: Card Description Bubble
Popis karty pod modal oknem
HTML formátování
Responsive
SEKCE 15.1: FULL ART OBRÁZKY NA KARTÁCH, BOX gamebook style a tooltip wrapper style
Card image container
Gamebook container a box
Text wrapper
Pulzování (pulse)
Vylepšený tooltip s herním rámečkem
Rohové ozdoby pro tooltip
Styling obsahu tooltipu
Tooltip s obrázkem vedle textu
SEKCE 16: ZOOM MODAL OVERLAY pro vysvětlivky kartiček, FX effects, CROSSFADE PŘECHODY
Zoom modal overlay
Card preview wrapper a image
Tooltip hotspoty
Hotspot icon
Kompletní pozice hotspotů
Tooltip bubble
Animace pulse-glow-subtle
Podsekce 16.1: Bonus Card Modal
Card preview image bonus
Dual card mode
DODATEČNÉ SEKCE (bez číslování)
Dice icon fx
Passage transition effect
Vypnout button kurzor
Fixní velikost pro všechny pasáže
Game scaler
Černé pozadí
HUD (vyjmutí z Flexbox)
Crossfade přechody pasáží
Celkem: 16 hlavních sekcí + několik dodatečných bloků{
(display: "InventoryHUD")
<div class="text-divider divider-rpg"></div>
(align:"=><=")+(box:"X")[<!-- Hlavní obsah --><div style="position: relative; z-index: 1;"><h2>Kpitola: Nový začátek</h2>
<div class="text-divider divider-classic"></div>
<div style="background: linear-gradient(135deg, rgba(42,24,16,0.2) 0%, rgba(26,15,8,0.2) 100%); border: 3px solid rgba(139,105,20,0.2); border-radius: 2px; padding: 30px; margin: 30px auto; max-width: 700px; box-shadow: 0 8px 20px rgba(0,0,0,0.2);">Stojíš na lesní cestě. Blíží se k tobě postava. Trenér žoldákůl a zároveň i tvůj přítel, který ti už pomohl v mnohém. Je vyzbrojen svou těžkou palicí, která si vysloužila název Drtihlavka. Před léty ti sliboval lekci v boji, ale pak na to nedošlo.*
''"Buď zdráv, příteli ..."'' hlesl na tebe trenér, jen co tě spatřil.
</div>
<br>
<div class="tooltip-container">
<h4 class="burning">(text-colour:#1a1f13)[["Pozdravit"|Start]]</h4></div>
<br>
<div class="tooltip-container">
[[Ignorovat ho a jít dál|obejit]]
[[test na vlka|Vlk]]
<span class="tooltip-bubble">přeskočit tutorial část?</span>
</div>
<br>
<div class="tooltip-container">
[[Utéct zpět domu|Nastavení postavy]]
<span class="tooltip-bubble">Poslední možnost jít zpět na výběr postavy</span>
</div>]
}
(display: "SnowDegreeAnimation"){
(display: "InventoryHUD")
<div class="text-divider divider-rpg"></div>
(align:"=><=")+(box:"X")[<!-- Hlavní obsah --><div style="position: relative; z-index: 1;"><h2>Kpitola: Nový začátek</h2>
<div class="text-divider divider-classic"></div>
<div style="background: linear-gradient(135deg, rgba(42,24,16,0.2) 0%, rgba(26,15,8,0.2) 100%); border: 3px solid rgba(139,105,20,0.2); border-radius: 2px; padding: 30px; margin: 30px auto; max-width: 700px; box-shadow: 0 8px 20px rgba(0,0,0,0.2);">Procházíš lesem, když spatžíš pytláka. Zrovna nese polomrtvé zvíře a jde svižným tempem rovnou tvým směrem. Je ti celkem povědomý, zřejmě nekdo z tvé domoviny. Co uděláš?
</div>
<br>
<h4>(text-colour:#004000)[[["Pozdravit ho"|Pytlak]]]</h4>
<br>
[[Ignorovat a obejít ho.|obejit]]
<span class="tooltip-bubble">přeskočit tutorial část?</span>
</div>
<br>
<div class="tooltip-container">
[[Utéct zpět domu|Nastavení postavy]]
<span class="tooltip-bubble">Poslední možnost jít zpět na výběr postavy</span>
</div>]
}
(display: "SnowDegreeAnimation"){
<h4> h4 nadpis: pasáž potřebuje nastavit TAG, tag: "hra" je základní pergamen s lesní krajinou</h4>
<br>
<div class="text-divider divider-classic"></div>
<br>
<div class="gamebook-container" id="container">
<div class="gamebook-box">
Zde napišeš text příběhu. Pro nový odstavec použij
<br>
pokud ho použiješ dvakrát udělá se enter
<br>
<br>
nebo pokračuj na stejném řádku. Zde napišeš text příběhu. Pro nový odstavec použij nebo pokračuj na stejném řádku. Zde napišeš text příběhu. Pro nový odstavec použij nebo pokračuj na stejném řádku.
</div>
</div>
<br>
(t8n-arrive: "dissolve")[<span class="burning">[[Pokračovat|základní pasáž]]</span>]
<br>
(t8n-arrive: "dissolve")[<span class="burning">[[Pokračovat|základní pasáž]]</span>]
<!--Comment Text: tady neni <br> tak jsou ty tlačítka na jednom řádku -->
(t8n-arrive: "dissolve")[<span class="burning">[[Pokračovat|základní pasáž]]</span>]
}{<div id="intro-screen" class="combat-intro-screen">
<div class="intro-content">
<div class="intro-teacher-portrait">
<img src="https://files.catbox.moe/ouajvi.jpg" alt="Učitel">
</div>
<div class="intro-dialogue">
<h2>Pytlák</h2>
<p>**„Rád tě vidím. Dokonce máš i zbraň, co si projít závěrečnou lekci."** pousmál se učitel a v ruce promnul svou obávanou Drtihlavku.</p>
<p>**„Jen tě trochu omráčím, abys věděl, jak to chodí v reálném životě!"** Dodal jen tak mimochodem, aby ti sebral kuráž.</p>
</div>
</div>
<div class="actions">
[[Teď a tady? Dobrá, jsem připraven->PytlakBattleInit]]
<br>
[[pokusit se couvnout z boje->EscapeSuccess]]
</div>
</div>
<style>
/* --- Hlavní kontejner --- */
.combat-intro-screen {
max-width: 600px;
margin: 20px auto;
padding: 30px;
/* Béžové pozadí, velmi jemné (0.1) */
background: rgba(140, 127, 105, 0.3);
/* Změna: Rámeček s průhledností 0.2 */
border: 2px solid rgba(0, 0, 0, 0.2);
border-radius: 2px;
/* Černý text */
color:
#000000;
text-align: center;
box-shadow: 0 10px 20px rgba(0,0,0,0.1); /* Zjemnil jsem i stín */
}
/* --- Obrázek učitele --- */
.intro-teacher-portrait img {
max-width: 180px;
height: auto;
border-radius: 2px;
/* Změna: Rámeček s průhledností 0.2 */
border: 2px solid rgba(0, 0, 0, 0.2);
box-shadow: 3px 3px 0px rgba(0,0,0,0.1); /* Zjemněný stín */
margin-bottom: 20px;
}
/* --- Nadpis --- */
.intro-dialogue h2 {
margin-top: 0;
color:
#000000;
text-transform: uppercase;
/* Změna: Podtržení s průhledností 0.2 */
border-bottom: 1px solid rgba(0, 0, 0, 0.2);
display: inline-block;
padding-bottom: 5px;
}
/* --- Tlačítka a akce --- */
.actions {
margin-top: 30px;
}
.actions a {
display: inline-block;
padding: 15px 30px;
background: transparent;
/* Změna: Rámeček tlačítka s průhledností 0.2 */
border: 2px solid rgba(0, 0, 0, 0.2);
border-radius: 2px;
color:
#000000;
text-decoration: none;
font-weight: bold;
transition: all 0.3s;
}
.actions a:hover {
/* Při najetí ztmavne pozadí na černo a rámeček splyne */
background:
#000000;
border-color:
#000000;
color:
#f5f5dc;
transform: scale(1.02);
cursor: pointer;
}
</style>}
(display: "SnowDegreeAnimation")
(display: "InventoryHUD"){
(display: "SnowDegreeAnimation")
(align:"=><=")+(box:"===XXXXXXXXXXXXXX===")[{**„Ukaž? to nic neni, jen pohmožděnina"** Učitel zkušeně přejel prsty po tvé ruce.
Získal jsi postih: **Pohmožděnina (text-colour:#c41e3a)[]**
(align:"=><=")+(box:"===XXXXXXXXXXXXXX===")[„Budeš slabší, dokud se nevyléčíš. Avšak v reálném boji by prohra znamenala mdloby nebo smrt!" Dodal přísným tónem, vědom si konců válečníků. ]
<br>
[[Rozumím!|tutorialKonec]]
</div>
<div id="traitContainer">
(if: $trait1)[
<div class="trait">
<img src="https://files.catbox.moe/ub9joh.png">
<span class="tooltip">(text-colour:#f66)[Pomožděná ruka]</span>
</div>
]
</div>
<div class="tutorial-pointer-inline" style="top: 50px; center: 1px;">
<div class="tutorial-pointer-text">(text-style:"bold","italic")[aktuální vlastnosti]</div>
<img src="https://files.catbox.moe/9iog7u.png" alt="pointer" style="width: 85px; height: 100px;">
</div>
}
]}{{
(if: visits is 1)[
(set: $combatLog to (a:))
(set: $battlePhase to "selecting")
<!-- Spusť hlavní hudbu -->
(print: "<script>
changeMusic('https://ajksner.github.io/Prototyp-gamebook/Sound/Echoes%20of%20Valhalla%20postava.mp3', 0.5);
</script>")
<!-- Zachování štítových HP z equipování -->
(set: $tempHP to $shieldHead + $shieldChest + $shieldLimbs)
<!-- Inicializace čítačů zásahů pro animace -->
(if: $playerHitCounter is 0)[(set: $playerHitCounter to 0)]
(if: $enemyHitCounter is 0)[(set: $enemyHitCounter to 0)]
<!-- Max stamina bez traitů -->
(set: $effectiveMaxStamina to $maxStamina)
(if: $stamina > $effectiveMaxStamina)[(set: $stamina to $effectiveMaxStamina)]
]
(if: $battlePhase is "resolving")[
(set: $playerCard to $chosenPlayerCard)
(if: $playerCard's cost >= 0)[
(set: $stamina to $stamina - $playerCard's cost)
](else:)[
(set: $stamina to $stamina + (abs: $playerCard's cost))
]
(if: $stamina > $effectiveMaxStamina)[(set: $stamina to $effectiveMaxStamina)]
(if: $playerCard contains "type" and $playerCard's type is "armor")[
(set: $armorPlayedThisTurn to true)
(set: $playerHand to $playerHand - (a: $playerCard))
](else:)[
(set: $armorPlayedThisTurn to false)
]
<!-- NOVÁ ČÁST: Zamíchání karet v ruce po resolve -->
(set: $playerHand to (a:))
(set: $tempPool to (shuffled: ...$allAvailableCards))
<!-- Vyber náhodně 4-5 karet (nebo kolik chceš max v ruce) -->
(set: $maxHandSize to 4)
(for: each _card, ...$tempPool)[
(if: $playerHand's length < $maxHandSize)[
<!-- Kontrola, že karta už není v ruce -->
(set: $isInHand to false)
(for: each _existing, ...$playerHand)[
(if: _existing's name is _card's name)[
(set: $isInHand to true)
]
]
(if: $isInHand is false)[
(set: $playerHand to $playerHand + (a: _card))
]
]
]
(set: $playableEnemyCards to (a:))
(for: each _card, ...$enemyHand)[
(if: _card's cost <= 3)[
(set: $playableEnemyCards to $playableEnemyCards + (a: _card))
]
]
(if: $playableEnemyCards's length > 0)[
(set: $enemyCard to (either: ...$playableEnemyCards))
](else:)[
(set: $enemyCard to (either: ...$enemyHand))
]
<!-- Útok hráče bez trait modifikátorů -->
(set: $playerAttack to $playerCard's attack)
(if: $umeni is 1)[
(set: $playerAttack to $playerAttack + 1)
]
(if: $playerAttack < 0)[(set: $playerAttack to 0)]
<!-- Útok nepřítele bez trait modifikátorů -->
(set: $enemyAttack to $enemyCard's attack)
(if: $enemyAttack < 0)[(set: $enemyAttack to 0)]
(set: $damageToEnemy to $playerAttack - $enemyCard's defense)
(if: $damageToEnemy < 0)[(set: $damageToEnemy to 0)]
(set: $damageToPlayer to $enemyAttack - $playerCard's defense)
(if: $damageToPlayer < 0)[(set: $damageToPlayer to 0)]
(set: $enemyHP to $enemyHP - $damageToEnemy)
<!-- Zvýšení čítače zásahů nepřítele -->
(if: $damageToEnemy > 0)[
(set: $enemyHitCounter to $enemyHitCounter + 1)
]
<!-- Aplikace brnění - MAX 6 dočasných HP -->
(if: $armorPlayedThisTurn is true)[
(set: $armorToAdd to $playerCard's armorValue)
<!-- Omezení na maximum 3 dočasné HP z jedné karty -->
(if: $armorToAdd > 3)[(set: $armorToAdd to 3)]
(set: $tempHP to $tempHP + $armorToAdd)
<!-- Omezení celkového štítu na 6 -->
(if: $tempHP > 6)[(set: $tempHP to 6)]
(set: $lastArmorDistribution to "+" + (text: $armorToAdd) + " dočasných HP")
]
(set: $originalDamage to $damageToPlayer)
<!-- Aplikace damage přes štít -->
(if: $damageToPlayer > 0)[
(if: $tempHP > 0)[
(if: $damageToPlayer >= $tempHP)[
(set: $damageToPlayer to $damageToPlayer - $tempHP)
(set: $tempHP to 0)
](else:)[
(set: $tempHP to $tempHP - $damageToPlayer)
(set: $damageToPlayer to 0)
]
]
(if: $damageToPlayer > 0)[
(set: $hp to $hp - $damageToPlayer)
<!-- Zvýšení čítače zásahů hráče -->
(set: $playerHitCounter to $playerHitCounter + 1)
]
]
<!-- PŘEHRÁNÍ POKŘIKŮ OKAMŽITĚ PO VÝPOČTU DAMAGE -->
(if: $originalDamage > 0 and $damageToEnemy > 0)[
<!-- Oba dostali damage -->
(print: "<script>if(window.combatSounds){combatSounds.playBattleCry('player', 0.6, 0); combatSounds.playBattleCry('enemy', 0.6, 300);}</script>")
](else-if: $originalDamage > 0)[
<!-- Jen hráč dostal damage -->
(print: "<script>if(window.combatSounds){combatSounds.playBattleCry('player', 0.6, 0);}</script>")
](else-if: $damageToEnemy > 0)[
<!-- Jen nepřítel dostal damage -->
(print: "<script>if(window.combatSounds){combatSounds.playBattleCry('enemy', 0.6, 0);}</script>")
]
<!-- HLÁŠKY -->
(if: $armorPlayedThisTurn is true)[
(set: $vysledek to "<span class='combat-armor'>**Brnění nasazeno!** +" + (text: $playerCard's armorValue) + " dočasných HP (max 6)</span>")
(set: $combatLog to it + (a: $vysledek))
]
(if: $damageToEnemy > $originalDamage)[
(set: $rozdil to $damageToEnemy - $originalDamage)
(if: $rozdil >= 5)[
(set: $hlasky to (a: "Dominuješ v boji!", "Tvůj úder byl silnější!", "Máš navrch!", "Nepřítel je v defenzivě!"))
](else-if: $rozdil >= 3)[
(set: $hlasky to (a: "Získáváš převahu!", "Tvůj útok je efektivnější!", "Lepší taktika!", "Vedoucí pozice!"))
](else:)[
(set: $hlasky to (a: "Mírně lepší!", "Lehká výhoda!", "Trochu lepší!", "Malá převaha!"))
]
(set: $hlaska to $hlasky's (random:1, $hlasky's length))
(set: $vysledek to "<span class='combat-victory'>**" + $hlaska + "** Vy: **-" + (text: $originalDamage) + " HP** | Nepřítel: **-" + (text: $damageToEnemy) + " HP**</span>")
(set: $whoGotHit to "enemy")
](else-if: $originalDamage > $damageToEnemy)[
(set: $rozdil to $originalDamage - $damageToEnemy)
(if: $rozdil >= 5)[
(set: $hlasky to (a: "Nepřítel dominuje!", "Jeho úder je mocnější!", "Jsi v ohrožení!", "Ztrácíš převahu!"))
](else-if: $rozdil >= 3)[
(set: $hlasky to (a: "Nepřítel má navrch!", "Jeho taktika je lepší!", "V nevýhodě!", "Obtížná situace!"))
](else:)[
(set: $hlasky to (a: "Lehce horší!", "Malá nevýhoda!", "Téměř vyrovnané!", "Drobná ztráta!"))
]
(set: $hlaska to $hlasky's (random:1, $hlasky's length))
(set: $vysledek to "<span class='combat-defeat'>**" + $hlaska + "** Vy: **-" + (text: $originalDamage) + " HP** | Nepřítel: **-" + (text: $damageToEnemy) + " HP**</span>")
(set: $whoGotHit to "player")
](else:)[
(if: $damageToEnemy is 0 and $originalDamage is 0)[
(set: $hlasky to (a: "Perfektní obrana obou!", "Nikdo nepronikl!", "Zbraně se jen střetly!", "Obě obrany držely!"))
(set: $whoGotHit to "none")
](else:)[
(set: $hlasky to (a: "Stejné poškození!", "Vyrovnaná výměna!", "Oba zasaženi stejně!", "Rovnocenný souboj!"))
(set: $whoGotHit to "both")
]
(set: $hlaska to $hlasky's (random:1, $hlasky's length))
(set: $vysledek to "<span class='combat-draw'>**" + $hlaska + "** Vy: **-" + (text: $originalDamage) + " HP** | Nepřítel: **-" + (text: $damageToEnemy) + " HP**</span>")
]
(set: $combatLog to it + (a: $vysledek))
]
}
<div class="battle-container">
(display: "BattleLog")
<div class="battle-hud-container">
<!-- HRÁČ - ZDRAVÍ A KONDICE -->
<div class="bhud-hearts-player" style="position: fixed; left: 20px; top: 80px;">
<div class="bhud-potions-wrapper">
<div class="bhud-hearts-box" id="playerHeartBox">
<div class="bhud-health-fill-container">
<div class="bhud-shield-fill" id="playerShieldFill" style="height: 0%;"></div>
<div class="bhud-health-fill" id="playerHealthFill" style="height: 100%;"></div>
</div>
<div class="bhud-potion-bottle"></div>
<div class="bhud-hp-text" id="playerHpText">20/20</div>
</div>
</div>
<div class="bhud-stamina-box" id="playerStaminaBox">
<div class="bhud-health-fill-container">
<div class="bhud-stamina-fill" id="playerStaminaFill" style="height: 100%;"></div>
</div>
<div class="bhud-potion-bottle"></div>
<div class="bhud-hp-text" id="playerStaminaText">5/5</div>
</div>
</div>
<!-- NEPŘÍTEL - ZDRAVÍ -->
<div class="bhud-hearts-enemy" style="position: fixed; right: 20px; top: 80px;">
<div class="bhud-hearts-box" id="enemyHeartBox">
<div class="bhud-health-fill-container">
<div class="bhud-health-fill" id="enemyHealthFill" style="height: 100%;"></div>
</div>
<div class="bhud-potion-bottle"></div>
<div class="bhud-hp-text" id="enemyHpText">15/15</div>
</div>
</div>
</div>
(if: $battlePhase is "selecting")[
<div class="player-section">
<div class="hand">
(for: each _card, ...$playerHand)[
(if: _card's cost <= $stamina or _card's cost < 0)[
<div class="card-wrapper">
<div class="card playable (if: _card contains 'type')[(print: _card's type)]">
<div class="card-image-container">
(if: (_card contains "image") and (_card's image is not ""))[
(print: "<img src='" + _card's image + "' alt='" + _card's name + "'>")
]
</div>
<div class="card-name">(print: _card's name)</div>
(if: _card contains "type" and _card's type is "armor")[
<div class="card-armor-value"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> +(print: _card's armorValue) HP</div>
<div class="card-stats">
<span class="defense"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> (print: _card's defense)</span>
</div>
](else:)[
<div class="card-stats">
<span class="attack"><img src="https://files.catbox.moe/sk5n4x.png" class="stat-icon" alt="⚔️"> (print: _card's attack)(if: $umeni is 1)[<span class="bonus-stat">+1</span>]</span>
<span class="defense"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> (print: _card's defense)</span>
</div>
]
<div class="card-cost-wrapper">
(if: _card's cost < 0)[
<div class="card-cost stamina-gain">+(print: (abs: _card's cost))</div>
](else:)[
<div class="card-cost">(print: _card's cost)</div>
]
</div>
<div class="card-click-area">
(link: " ")[
(print: "<script>
combatSounds.playCardSound('" + _card's name + "');
var clickedCard = event.target.closest('.card-wrapper');
var card = clickedCard ? clickedCard.querySelector('.card') : null;
if (card) {
card.classList.add('card-disintegrate');
for (var i = 0; i < 15; i++) {
var particle = document.createElement('div');
particle.className = 'card-particle';
particle.style.left = (Math.random() * 100) + '%';
particle.style.top = (Math.random() * 100) + '%';
particle.style.setProperty('--random-x', Math.random() - 0.5);
particle.style.setProperty('--random-y', Math.random());
particle.style.animationDelay = (Math.random() * 0.1) + 's';
card.appendChild(particle);
}
}
</script>")
(live: 0.65s)[
(stop:)
(set: $chosenPlayerCard to _card)
(set: $battlePhase to "resolving")
(go-to: "PytlakBattle")
]
]
</div>
</div>
</div>
]
]
<!-- NOVÁ SEKCE: Nepoužitelné karty vpravo -->
<div class="unplayable-cards-zone">
(for: each _card, ...$playerHand)[
(if: _card's cost > $stamina and _card's cost >= 0)[
<div class="card-wrapper-disabled">
<div class="card unplayable (if: _card contains 'type')[(print: _card's type)]">
<div class="card-image-container">
(if: (_card contains "image") and (_card's image is not ""))[
(print: "<img src='" + _card's image + "' alt='" + _card's name + "'>")
]
</div>
<div class="card-name">(print: _card's name)</div>
(if: _card contains "type" and _card's type is "armor")[
<div class="card-armor-value"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> +(print: _card's armorValue) HP</div>
<div class="card-stats">
<span class="defense"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> (print: _card's defense)</span>
</div>
](else:)[
<div class="card-stats">
<span class="attack"><img src="https://files.catbox.moe/sk5n4x.png" class="stat-icon" alt="⚔️"> (print: _card's attack)</span>
<span class="defense"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> (print: _card's defense)</span>
</div>
]
<div class="card-cost-wrapper">
<div class="card-cost">(print: _card's cost)</div>
</div>
<div class="card-disabled-text">Málo staminy</div>
</div>
</div>
]
]
</div>
</div>
</div>
]
(if: $battlePhase is "resolving")[
<div class="player-section">
<div class="hand">
(for: each _card, ...$playerHand)[
(if: _card's cost <= $stamina or _card's cost < 0)[
<div class="card-wrapper">
<div class="card playable (if: _card contains 'type')[(print: _card's type)] (if: _card is $chosenPlayerCard)[selected-card]">
<div class="card-image-container">
(if: (_card contains "image") and (_card's image is not ""))[
(print: "<img src='" + _card's image + "' alt='" + _card's name + "'>")
]
</div>
<div class="card-name">(print: _card's name)</div>
(if: _card contains "type" and _card's type is "armor")[
<div class="card-armor-value"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> +(print: _card's armorValue) HP</div>
<div class="card-stats">
<span class="defense"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> (print: _card's defense)</span>
</div>
](else:)[
<div class="card-stats">
<span class="attack"><img src="https://files.catbox.moe/sk5n4x.png" class="stat-icon" alt="⚔️"> (print: _card's attack)(if: $umeni is 1)[<span class="bonus-stat">+1</span>]</span>
<span class="defense"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> (print: _card's defense)</span>
</div>
]
<div class="card-cost-wrapper">
(if: _card's cost < 0)[
<div class="card-cost stamina-gain">+(print: (abs: _card's cost))</div>
](else:)[
<div class="card-cost">(print: _card's cost)</div>
]
</div>
<div class="card-click-area">
(link: " ")[
(print: "<script>
combatSounds.playCardSound('" + _card's name + "');
var clickedCard = event.target.closest('.card-wrapper');
var card = clickedCard ? clickedCard.querySelector('.card') : null;
if (card) {
card.classList.add('card-disintegrate');
for (var i = 0; i < 15; i++) {
var particle = document.createElement('div');
particle.className = 'card-particle';
particle.style.left = (Math.random() * 100) + '%';
particle.style.top = (Math.random() * 100) + '%';
particle.style.setProperty('--random-x', Math.random() - 0.5);
particle.style.setProperty('--random-y', Math.random());
particle.style.animationDelay = (Math.random() * 0.1) + 's';
card.appendChild(particle);
}
}
</script>")
(live: 0.65s)[
(stop:)
(set: $chosenPlayerCard to _card)
(set: $battlePhase to "resolving")
(go-to: "PytlakBattle")
]
]
</div>
</div>
</div>
]
]
<!-- NOVÁ SEKCE: Nepoužitelné karty vpravo -->
<div class="unplayable-cards-zone">
(for: each _card, ...$playerHand)[
(if: _card's cost > $stamina and _card's cost >= 0)[
<div class="card-wrapper-disabled">
<div class="card unplayable (if: _card contains 'type')[(print: _card's type)]">
<div class="card-image-container">
(if: (_card contains "image") and (_card's image is not ""))[
(print: "<img src='" + _card's image + "' alt='" + _card's name + "'>")
]
</div>
<div class="card-name">(print: _card's name)</div>
(if: _card contains "type" and _card's type is "armor")[
<div class="card-armor-value"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> +(print: _card's armorValue) HP</div>
<div class="card-stats">
<span class="defense"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> (print: _card's defense)</span>
</div>
](else:)[
<div class="card-stats">
<span class="attack"><img src="https://files.catbox.moe/sk5n4x.png" class="stat-icon" alt="⚔️"> (print: _card's attack)</span>
<span class="defense"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> (print: _card's defense)</span>
</div>
]
<div class="card-cost-wrapper">
<div class="card-cost">(print: _card's cost)</div>
</div>
<div class="card-disabled-text">Málo staminy</div>
</div>
</div>
]
]
</div>
</div>
</div>
<div class="resolve-area">
(if: $playerCard is not 0 and $enemyCard is not 0)[
<div class="cards-in-battle">
<div class="battle-card-slot">
<div class="card playable card-shake (if: $playerCard contains 'type')[(print: $playerCard's type)]">
<div class="card-image-container">
(if: ($playerCard contains "image") and ($playerCard's image is not ""))[
(print: "<img src='" + $playerCard's image + "' alt='" + $playerCard's name + "'>")
]
</div>
<div class="card-name">(print: $playerCard's name)</div>
(if: $playerCard contains "type" and $playerCard's type is "armor")[
<div class="card-armor-value"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> +(print: $playerCard's armorValue) HP</div>
<div class="card-stats">
<span class="defense"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> (print: $playerCard's defense)</span>
</div>
](else:)[
<div class="card-stats">
<span class="attack"><img src="https://files.catbox.moe/sk5n4x.png" class="stat-icon" alt="⚔️"> (print: $playerCard's attack)(if: $umeni is 1)[<span class="bonus-stat">+1</span>]</span>
<span class="defense"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> (print: $playerCard's defense)</span>
</div>
]
</div>
</div>
<div class="battle-card-slot">
<div class="card enemy-card card-shake">
<div class="card-image-container">
(if: ($enemyCard contains "image") and ($enemyCard's image is not ""))[
(print: "<img src='" + $enemyCard's image + "' alt='" + $enemyCard's name + "'>")
]
</div>
<div class="card-name">(print: $enemyCard's name)</div>
<div class="card-stats">
<span class="attack"><img src="https://files.catbox.moe/sk5n4x.png" class="stat-icon" alt="⚔️"> (print: $enemyCard's attack)</span>
<span class="defense"><img src="https://files.catbox.moe/fg8ccm.png" class="stat-icon" alt="🛡️"> (print: $enemyCard's defense)</span>
</div>
</div>
</div>
</div>
]
</div>
{(live: 0.1s)[
(if: $enemyHP <= 0)[
(stop:)
(set: $tempHP to 0)
<script>
(function() {
var enemyCard = document.getElementById('enemyCardBox');
var battleContainer = document.querySelector('.battle-container');
// Spuštění animace rozplynutí
if (enemyCard) {
enemyCard.classList.add('enemy-dissolve');
}
// Ztmavení scény
if (battleContainer) {
battleContainer.classList.add('game-ending');
}
// Zvuk smrti
if(window.combatSounds){
combatSounds.playDeathSound('enemy', 0.7, 0);
}
})();
</script>
(after: 3.5s)[(goto: "Victory")]
]
(else-if: $hp <= 0)[
(stop:)
<script>
var battleContainer = document.querySelector('.battle-container');
if (battleContainer) { battleContainer.classList.add('game-ending'); }
if(window.combatSounds){ combatSounds.playDeathSound('player', 0.7, 0); }
</script>
(after: 3.5s)[(goto: "Defeat")]
]
]}
(else-if: $hp <= 0)[
(set: $tempHP to 0)
(print: "<script>
var battleContainer = document.querySelector('.battle-container');
if (battleContainer) {
battleContainer.classList.add('game-ending');
}
if(window.combatSounds){
combatSounds.playDeathSound('player', 0.7, 0);
}
</script>")
(live: 3)[
(stop:)
(goto: "Defeat")
]
]
]
</div>
(display: "EscapeButton")
(display: "BattleCards")
(display: "SnowDegreeAnimation")
<style>
/* 🃏 ZÁKLADNÍ KARTA A STYLY VÝBĚRU */
.card {
position: relative;
transition: transform 0.3s ease;
}
.selected-card {
box-shadow: 0 0 20px rgba(212, 175, 55, 0.8) !important;
border-color: #d4af37 !important;
transform: scale(1.02);
}
/* 🛡️ KARTY BRNĚNÍ A STATISTIKY */
.armor-card {
background: linear-gradient(135deg, rgba(30, 60, 90, 0.8), rgba(20, 40, 70, 0.9)) !important;
border-color: rgba(100, 150, 200, 0.8) !important;
}
.armor-card::before,
.armor-card::after {
border-color: #6496c8 !important;
box-shadow: inset 0 0 8px rgba(100, 150, 200, 0.6) !important;
}
.card-armor-value {
font-size: 18px;
color: #6496c8;
font-family: 'Cinzel', serif;
text-align: center;
padding: 10px 0;
text-shadow: 0 0 10px rgba(100, 150, 200, 0.8);
font-weight: bold;
}
.combat-armor {
color: #6496c8;
font-weight: bold;
text-shadow: 0 0 10px rgba(100, 150, 200, 0.5);
}
.bonus-stat {
color: #ffd700;
font-size: 0.9em;
margin-left: 2px;
text-shadow: 0 0 5px rgba(255, 215, 0, 0.8);
}
/* 🖱️ KLIKACÍ OBLAST KARTY (Neviditelný link přes kartu) */
.card-click-area {
text-align: center;
padding: 10px 19px;
position: relative;
z-index: 10;
background: transparent;
}
.card-click-area tw-link,
.card-click-area a {
display: flex !important;
width: 280px !important;
height: 280px !important;
margin: -0px -0px -10px -20px !important;
opacity: 0.0 !important;
background: rgba(139,105,20,0.0) !important;
color: #ffd700 !important;
font-size: 16px !important;
border-radius: 3px !important;
text-decoration: none !important;
font-weight: bold !important;
transition: all 0.2s !important;
border: 2px solid rgba(255,215,0,0.0) !important;
font-family: 'Cinzel', serif !important;
outline: none !important;
text-align: center !important;
cursor: pointer !important;
align-items: center !important;
justify-content: center !important;
}
.card-click-area tw-link:hover,
.card-click-area a:hover {
opacity: 1 !important;
background: rgba(166,124,26,0.1) !important;
transform: scale(1.02) !important;
box-shadow: 0 0 15px rgba(255,215,0,0.1) !important;
}
/* 👁️ INDIKÁTOR HRATELNOSTI */
.card.playable::after {
content: '⋙ Zahrát ⋘';
position: absolute;
bottom: 220px;
left: 50%;
transform: translateX(-50%);
background: rgba(0, 0, 0, 0.7);
color: #d4af37;
padding: 5px 10px;
border-radius: 1px;
font-size: 12px;
font-weight: bold;
opacity: 0;
transition: opacity 0.3s ease;
pointer-events: none;
white-space: nowrap;
z-index: 5;
}
.card-wrapper:hover .card.playable::after {
opacity: 0.7;
}
/* ✨ PLYNULÁ ANIMACE ROZTRŽENÍ KARTY ✨ */
@keyframes card-disintegrate {
0% {
transform: scale(1) rotate(0deg) translateY(0);
opacity: 1;
filter: brightness(1) blur(0px);
}
20% {
/* Záblesk a mírné zvětšení */
transform: scale(1.1) rotate(2deg) translateY(-5px);
filter: brightness(2) drop-shadow(0 0 20px #ffd700);
}
50% {
/* Začátek rozpadu a rozmazání */
transform: scale(1.15) rotate(-3deg) translateY(-10px);
opacity: 0.8;
filter: brightness(2.5) blur(2px);
}
100% {
/* Odplutí nahoru a úplné zmizení */
transform: scale(0.5) rotate(10deg) translateY(-50px);
opacity: 0;
filter: brightness(4) blur(12px) hue-rotate(20deg);
}
}
.card-disintegrate {
animation: card-disintegrate 0.8s cubic-bezier(0.4, 0, 0.2, 1) forwards !important;
pointer-events: none !important;
z-index: 999 !important;
}
/* 🎇 ČÁSTICE PŘI ROZTRŽENÍ */
@keyframes particle-explode {
0% {
transform: translate(0, 0) scale(1);
opacity: 1;
filter: brightness(2);
}
100% {
transform: translate(
calc(var(--random-x) * 180px),
calc(var(--random-y) * 200px - 100px)
) rotate(360deg) scale(0);
opacity: 0;
filter: blur(2px);
}
}
.card-particle {
position: absolute;
width: 8px;
height: 8px;
background: radial-gradient(circle, #ffd700, #d4af37);
border-radius: 50%;
animation: particle-explode 0.9s cubic-bezier(0.1, 0.5, 0.3, 1) forwards;
pointer-events: none;
z-index: 1000;
box-shadow: 0 0 10px rgba(255, 215, 0, 0.8);
}
/* 🚫 ZÓNA PRO NEHRATELNÉ KARTY */
.unplayable-cards-zone {
position: fixed;
right: 20px;
bottom: 20px;
display: flex;
flex-direction: row;
gap: 10px;
z-index: 500;
flex-wrap: wrap;
max-width: 400px;
}
.card-wrapper-disabled {
opacity: 0.5;
pointer-events: none;
}
.card-wrapper-disabled .card {
transform: scale(0.7);
filter: grayscale(70%);
}
/* ẨN ELEMENTY BOJE */
.vs-battle, .bhud-vs-separator {
display: none;
}
/* 🚫 BLOKOVÁNÍ KARET PŘI KONCI HRY */
.battle-container.game-ending .card-click-area {
pointer-events: none !important;
opacity: 0.3;
cursor: not-allowed !important;
}
.battle-container.game-ending .card {
filter: grayscale(70%) brightness(0.7);
animation: card-fade-out 2s ease-out forwards;
}
@keyframes card-fade-out {
to {
opacity: 0.3;
transform: scale(0.95);
}
}
</style>
<script>
(function() {
setTimeout(function() {
var shakeTrigger = document.querySelector('.shake-trigger');
if (!shakeTrigger) return;
var whoGotHit = shakeTrigger.getAttribute('data-who');
var enemyBox = document.getElementById('enemyHeartBox');
var playerBox = document.getElementById('playerHeartBox');
if ((whoGotHit === 'enemy' || whoGotHit === 'both') && enemyBox) {
enemyBox.classList.add('box-shake');
for (var i = 0; i < 25; i++) {
var particle = document.createElement('div');
particle.className = 'particle enemy-particle';
particle.style.left = (Math.random() * 100) + '%';
particle.style.animationDelay = (Math.random() * 0.3) + 's';
enemyBox.appendChild(particle);
(function(p) {
setTimeout(function() { p.remove(); }, 1200);
})(particle);
}
setTimeout(function() { enemyBox.classList.remove('box-shake'); }, 500);
}
if ((whoGotHit === 'player' || whoGotHit === 'both') && playerBox) {
playerBox.classList.add('box-shake');
for (var i = 0; i < 25; i++) {
var particle = document.createElement('div');
particle.className = 'particle player-particle';
particle.style.left = (Math.random() * 100) + '%';
particle.style.animationDelay = (Math.random() * 0.3) + 's';
playerBox.appendChild(particle);
(function(p) {
setTimeout(function() { p.remove(); }, 1200);
})(particle);
}
setTimeout(function() { playerBox.classList.remove('box-shake'); }, 500);
}
var combatLog = document.querySelector('.combat-log-content');
if (combatLog) {
combatLog.scrollTop = combatLog.scrollHeight;
}
}, 500);
})();
</script>
<script>
(function() {
function updateHealthDisplay() {
// HRÁČ - ZDRAVÍ
var playerHp = (typeof $hp !== 'undefined') ? $hp : 20;
var playerMaxHp = (typeof $maxHp !== 'undefined') ? $maxHp : 20;
var playerShield = (typeof $tempHP !== 'undefined') ? $tempHP : 0;
var playerHealthFill = document.getElementById('playerHealthFill');
var playerShieldFill = document.getElementById('playerShieldFill');
var playerHpText = document.getElementById('playerHpText');
if (playerHealthFill && playerHpText) {
var healthPercent = (playerHp / playerMaxHp) * 100;
playerHealthFill.style.height = healthPercent + '%';
var displayHp = Math.max(0, playerHp);
var displayTotal = playerMaxHp;
if (playerShield > 0) {
displayHp += playerShield;
}
playerHpText.textContent = displayHp + '/' + displayTotal;
}
if (playerShieldFill) {
if (playerShield > 0) {
var shieldPercent = (playerShield / playerMaxHp) * 100;
playerShieldFill.style.height = shieldPercent + '%';
} else {
playerShieldFill.style.height = '0%';
}
}
// HRÁČ - KONDICE (STAMINA)
var playerStamina = (typeof $stamina !== 'undefined') ? $stamina : 5;
var playerMaxStamina = (typeof $effectiveMaxStamina !== 'undefined') ? $effectiveMaxStamina :
(typeof $maxStamina !== 'undefined') ? $maxStamina : 5;
var playerStaminaFill = document.getElementById('playerStaminaFill');
var playerStaminaText = document.getElementById('playerStaminaText');
if (playerStaminaFill && playerStaminaText) {
var staminaPercent = (playerStamina / playerMaxStamina) * 100;
playerStaminaFill.style.height = staminaPercent + '%';
var displayStamina = Math.max(0, playerStamina);
playerStaminaText.textContent = displayStamina + '/' + playerMaxStamina;
}
// NEPŘÍTEL - ZDRAVÍ
var enemyHp = (typeof $enemyHP !== 'undefined') ? $enemyHP : 15;
var enemyMaxHp = (typeof $enemyMaxHP !== 'undefined') ? $enemyMaxHP : 15;
var enemyHealthFill = document.getElementById('enemyHealthFill');
var enemyHpText = document.getElementById('enemyHpText');
if (enemyHealthFill && enemyHpText) {
var enemyHealthPercent = (enemyHp / enemyMaxHp) * 100;
enemyHealthFill.style.height = enemyHealthPercent + '%';
var displayEnemyHp = Math.max(0, enemyHp);
enemyHpText.textContent = displayEnemyHp + '/' + enemyMaxHp;
}
}
// Spustit při načtení
setTimeout(updateHealthDisplay, 100);
// Spustit při každé změně (třesení)
setTimeout(function() {
var shakeTrigger = document.querySelector('.shake-trigger');
if (!shakeTrigger) return;
var whoGotHit = shakeTrigger.getAttribute('data-who');
var enemyBox = document.getElementById('enemyHeartBox');
var playerBox = document.getElementById('playerHeartBox');
// Update zdraví před animací
updateHealthDisplay();
if ((whoGotHit === 'enemy' || whoGotHit === 'both') && enemyBox) {
enemyBox.classList.add('box-shake');
for (var i = 0; i < 25; i++) {
var particle = document.createElement('div');
particle.className = 'particle enemy-particle';
particle.style.left = (Math.random() * 100) + '%';
particle.style.setProperty('--random-x', Math.random());
particle.style.setProperty('--random-y', Math.random());
particle.style.animationDelay = (Math.random() * 0.3) + 's';
enemyBox.appendChild(particle);
(function(p) {
setTimeout(function() { p.remove(); }, 1200);
})(particle);
}
setTimeout(function() {
enemyBox.classList.remove('box-shake');
updateHealthDisplay();
}, 500);
}
if ((whoGotHit === 'player' || whoGotHit === 'both') && playerBox) {
playerBox.classList.add('box-shake');
for (var i = 0; i < 25; i++) {
var particle = document.createElement('div');
particle.className = 'particle player-particle';
particle.style.left = (Math.random() * 100) + '%';
particle.style.setProperty('--random-x', Math.random());
particle.style.setProperty('--random-y', Math.random());
particle.style.animationDelay = (Math.random() * 0.3) + 's';
playerBox.appendChild(particle);
(function(p) {
setTimeout(function() { p.remove(); }, 1200);
})(particle);
}
setTimeout(function() {
playerBox.classList.remove('box-shake');
updateHealthDisplay();
}, 500);
}
var combatLog = document.querySelector('.combat-log-content');
if (combatLog) {
combatLog.scrollTop = combatLog.scrollHeight;
}
}, 500);
// Kontrolovat změny každých 100ms pro update staminy
setInterval(updateHealthDisplay, 100);
})();
</script>
}/* ------------------------------------------------------------------- */
/* CENTRÁLNÍ DATABÁZE OBRÁZKŮ */
/* ------------------------------------------------------------------- */
(set: $cardImages to (dm:
"dagger", "https://files.catbox.moe/f3ijtv.png",
"woodenSword", "https://files.catbox.moe/pirpla.png",
"daggerQuality", "https://files.catbox.moe/f3ijtv.png",
"sword", "https://files.catbox.moe/l90kma.png",
"swordMaster", "https://files.catbox.moe/h2pl87.png",
"axe", "https://files.catbox.moe/8ryt3d.png",
"axeWar", "https://files.catbox.moe/hm88l5.png",
"greatsword", "https://files.catbox.moe/s2v3y5.png",
"greatswordLegendary", "https://files.catbox.moe/vf3p07.png",
"woodenShield", "https://files.catbox.moe/9cgxs9.png",
"ironShield", "https://files.catbox.moe/fg8ccm.png",
"towerShield", "https://files.catbox.moe/y8q8tv.png",
"leather", "https://files.catbox.moe/6bdqid.png",
"chainmail", "https://files.catbox.moe/bownbh.png",
"plate", "https://files.catbox.moe/4c49c7.png",
"rest", "https://files.catbox.moe/9cgxs9.png",
"fist", "https://files.catbox.moe/fp128s.png",
"breath", "https://files.catbox.moe/9wgl6r.png",
"lightCover", "https://files.catbox.moe/2olwuv.png",
"cover", "https://files.catbox.moe/2olwuv.png",
"kick", "https://files.catbox.moe/c5u2x3.png"
))
/* ------------------------------------------------------------------- */
/* INICIALIZACE ŠTÍTOVÝCH HP - ZACHOVÁ existující hodnoty */
/* ------------------------------------------------------------------- */
(set: $shieldHead to (either: $shieldHead, 0))
(set: $shieldChest to (either: $shieldChest, 0))
(set: $shieldLimbs to (either: $shieldLimbs, 0))
(set: $tempHP to $shieldHead + $shieldChest + $shieldLimbs)
/* ------------------------------------------------------------------- */
/* I. ZÁKLADNÍ NASTAVENÍ PROMĚNNÝCH */
/* ------------------------------------------------------------------- */
(set: $handSize to 4)
(set: $playerDeck to (a:))
(set: $tempDeck to (a:))
(set: $discardPile to (a:))
(set: $enemyDeck to (a:))
(set: $playerHand to (a:))
(set: $enemyHand to (a:))
/* 1. EQUIP STATUS - Pouze inicializace, pokud neexistuje */
(unless: $equippedRest is true or $equippedRest is false)[(set: $equippedRest to false)]
(unless: $equippedFist is true or $equippedFist is false)[(set: $equippedFist to false)]
(unless: $equippedBreathe is true or $equippedBreathe is false)[(set: $equippedBreathe to false)]
(unless: $equippedLightCover is true or $equippedLightCover is false)[(set: $equippedLightCover to false)]
(unless: $equippedCover is true or $equippedCover is false)[(set: $equippedCover to false)]
(unless: $equippedKick is true or $equippedKick is false)[(set: $equippedKick to false)]
/* 2. VLASTNICTVÍ KARET - Pouze inicializace, pokud neexistuje */
(unless: $hasRest is true or $hasRest is false)[(set: $hasRest to false)]
(unless: $hasFist is true or $hasFist is false)[(set: $hasFist to false)]
(unless: $hasBreath is true or $hasBreath is false)[(set: $hasBreath to false)]
(unless: $hasLightCover is true or $hasLightCover is false)[(set: $hasLightCover to false)]
(unless: $hasCover is true or $hasCover is false)[(set: $hasCover to false)]
(unless: $hasKick is true or $hasKick is false)[(set: $hasKick to false)]
/* ------------------------------------------------------------------- */
/* REGISTRACE ZVUKŮ PRO KARTY */
/* ------------------------------------------------------------------- */
(print: "<script>
if (typeof combatSounds !== 'undefined') {
combatSounds.registerCard('Odpočinek', 'whoosh', 0.2);
combatSounds.registerCard('Pěstí', 'punch', 0.5);
combatSounds.registerCard('Nadechnout se', 'whoosh', 0.3);
combatSounds.registerCard('Lehký kryt', 'whoosh', 0.4);
combatSounds.registerCard('Kryt', 'whoosh', 0.4);
combatSounds.registerCard('Nakopnutí', 'kick', 0.6);
/* Zbraně */
combatSounds.registerCard('Dýka', 'daggerStab', 0.5);
combatSounds.registerCard('Kvalitní dýka', 'daggerStab', 0.6);
combatSounds.registerCard('Starý a rezavý meč', 'swordSwing', 0.5);
combatSounds.registerCard('Meč', 'swordSwing', 0.6);
combatSounds.registerCard('Mistrovský meč', 'swordSwing', 0.7);
combatSounds.registerCard('Sekera', 'axeSwing', 0.7);
combatSounds.registerCard('Válečná sekera', 'axeSwing', 0.8);
combatSounds.registerCard('Obouruční meč', 'greatswordSwing', 0.8);
combatSounds.registerCard('Zvlněný meč', 'greatswordSwing', 0.9);
/* Štíty a brnění */
combatSounds.registerCard('Dřevěný štít', 'shieldBlock', 0.5);
combatSounds.registerCard('Železný štít', 'shieldBlock', 0.6);
combatSounds.registerCard('Věžový štít', 'shieldBlock', 0.7);
combatSounds.registerCard('Schovat se za kožené brnění', 'armorEquip', 0.4);
combatSounds.registerCard('Schovat se za kroužkovou zbroj', 'armorEquip', 0.5);
combatSounds.registerCard('Schovat se za plátovou zbroj', 'armorEquip', 0.6);
}
</script>")
/* ------------------------------------------------------------------- */
/* II. DEFINICE KARET PRO DOBÍRACÍ BALÍČEK ($tempDeck) */
/* ------------------------------------------------------------------- */
/* --- A. Zbraně --- */
(if: $equippedWeapon is "dagger" and $hasDagger)[(set: $tempDeck to $tempDeck + (a: (dm: "name", "Dýka", "attack", 4, "defense", 0, "cost", 1, "type", "weapon", "image", "https://files.catbox.moe/f3ijtv.png")))]
(if: $equippedWeapon is "woodenSword" and $hasWoodenSword)[(set: $tempDeck to $tempDeck + (a: (dm: "name", "Starý a rezavý meč", "attack", 3, "defense", 1, "cost", 2, "type", "weapon", "image", "https://files.catbox.moe/pirpla.png")))]
(if: $equippedWeapon is "daggerQuality" and $hasDaggerQuality)[(set: $tempDeck to $tempDeck + (a: (dm: "name", "Kvalitní dýka", "attack", 5, "defense", 2, "cost", 3, "type", "weapon", "image", "https://files.catbox.moe/f3ijtv.png")))]
(if: $equippedWeapon is "sword" and $hasSwordInv)[(set: $tempDeck to $tempDeck + (a: (dm: "name", "Meč", "attack", 5, "defense", 2, "cost", 3, "type", "weapon", "image", "https://files.catbox.moe/l90kma.png")))]
(if: $equippedWeapon is "swordMaster" and $hasSwordMaster)[(set: $tempDeck to $tempDeck + (a: (dm: "name", "Mistrovský meč", "attack", 8, "defense", 3, "cost", 4, "type", "weapon", "image", "https://files.catbox.moe/h2pl87.png")))]
(if: $equippedWeapon is "axe" and $hasAxe)[(set: $tempDeck to $tempDeck + (a: (dm: "name", "Sekera", "attack", 7, "defense", 1, "cost", 4, "type", "weapon", "image", "https://files.catbox.moe/8ryt3d.png")))]
(if: $equippedWeapon is "axeWar" and $hasAxeWar)[(set: $tempDeck to $tempDeck + (a: (dm: "name", "Válečná sekera", "attack", 11, "defense", 2, "cost", 5, "type", "weapon", "image", "https://files.catbox.moe/hm88l5.png")))]
(if: $equippedWeapon is "greatsword" and $hasGreatsword)[(set: $tempDeck to $tempDeck + (a: (dm: "name", "Obouruční meč", "attack", 10, "defense", 2, "cost", 5, "type", "weapon", "image", "https://files.catbox.moe/s2v3y5.png")))]
(if: $equippedWeapon is "greatswordLegendary" and $hasGreatswordLegendary)[(set: $tempDeck to $tempDeck + (a: (dm: "name", "Zvlněný meč", "attack", 15, "defense", 4, "cost", 6, "type", "weapon", "image", "https://files.catbox.moe/vf3p07.png")))]
/* --- B. Štíty --- */
(if: $equippedShield is "woodenShield" and $hasWoodenShield)[(set: $tempDeck to $tempDeck + (a: (dm: "name", "Dřevěný štít", "attack", 1, "defense", 4, "cost", 2, "type", "shield", "image", "https://files.catbox.moe/9cgxs9.png")))]
(if: $equippedShield is "ironShield" and $hasIronShield)[(set: $tempDeck to $tempDeck + (a: (dm: "name", "Železný štít", "attack", 2, "defense", 6, "cost", 3, "type", "shield", "image", "https://files.catbox.moe/fg8ccm.png")))]
(if: $equippedShield is "towerShield" and $hasTowerShield)[(set: $tempDeck to $tempDeck + (a: (dm: "name", "Věžový štít", "attack", 3, "defense", 9, "cost", 4, "type", "shield", "image", "https://files.catbox.moe/y8q8tv.png")))]
/* --- C. Brnění --- */
(if: $hasLeatherArmor and $equippedArmor is "leather")[(set: $tempDeck to $tempDeck + (a: (dm: "name", "Schovat se za kožené brnění", "attack", 0, "defense", 3, "cost", -3, "type", "armor-action", "image", "https://files.catbox.moe/6bdqid.png")))]
(if: $hasChainmail and $equippedArmor is "chainmail")[(set: $tempDeck to $tempDeck + (a: (dm: "name", "Schovat se za kroužkovou zbroj", "attack", 0, "defense", 5, "cost", -4, "type", "armor-action", "image", "https://files.catbox.moe/bownbh.png")))]
(if: $hasPlateArmor and $equippedArmor is "plate")[(set: $tempDeck to $tempDeck + (a: (dm: "name", "Schovat se za plátovou zbroj", "attack", 0, "defense", 8, "cost", -5, "type", "armor-action", "image", "https://files.catbox.moe/4c49c7.png")))]
/* --- D. Základní karty (Combat Inventory) - POUZE pokud má hráč kartu A je equipnutá --- */
(if: $hasRest and $equippedRest)[(set: $tempDeck to $tempDeck + (a: (dm: "name", "Odpočinek", "attack", 0, "defense", 0, "cost", -4, "type", "basic", "image", "https://files.catbox.moe/9cgxs9.png")))]
(if: $hasFist and $equippedFist)[(set: $tempDeck to $tempDeck + (a: (dm: "name", "Pěstí", "attack", 2, "defense", 0, "cost", 0, "type", "basic", "image", "https://files.catbox.moe/fp128s.png")))]
(if: $hasBreath and $equippedBreathe)[(set: $tempDeck to $tempDeck + (a: (dm: "name", "Nadechnout se", "attack", 0, "defense", 0, "cost", -5, "type", "basic", "image", "https://files.catbox.moe/9wgl6r.png")))]
(if: $hasLightCover and $equippedLightCover)[(set: $tempDeck to $tempDeck + (a: (dm: "name", "Lehký kryt", "attack", 0, "defense", 2, "cost", 0, "type", "basic", "image", "https://files.catbox.moe/2olwuv.png")))]
(if: $hasCover and $equippedCover)[(set: $tempDeck to $tempDeck + (a: (dm: "name", "Kryt", "attack", 0, "defense", 3, "cost", 1, "type", "basic", "image", "https://files.catbox.moe/2olwuv.png")))]
(if: $hasKick and $equippedKick)[(set: $tempDeck to $tempDeck + (a: (dm: "name", "Nakopnutí", "attack", 2, "defense", 1, "cost", 1, "type", "basic", "image", "https://files.catbox.moe/c5u2x3.png")))]
/* ------------------------------------------------------------------- */
/* III. SESTAVENÍ BALÍČKU */
/* ------------------------------------------------------------------- */
/* Uložíme všechny karty, které prošly podmínkami v II. sekci */
(set: $allAvailableCards to (shuffled: ...$tempDeck))
(set: $playerDeck to $allAvailableCards)
/* Pojistka: Pokud by byl balíček prázdný, přidáme aspoň Pěstí (ale jen pokud má hráč Pěstí) */
(if: $playerDeck's length is 0)[
(if: $hasFist)[
(set: $playerDeck to (a: (dm: "name", "Pěstí", "attack", 2, "defense", 0, "cost", 0, "type", "basic", "image", "https://files.catbox.moe/fp128s.png")))
](else:)[
(set: $playerDeck to (a: (dm: "name", "Bezbranný", "attack", 1, "defense", 0, "cost", 0, "type", "basic", "image", "https://files.catbox.moe/2olwuv.png")))
]
]
/* ------------------------------------------------------------------- */
/* IV. ROZDÁNÍ KARET A START */
/* ------------------------------------------------------------------- */
/* Rozdání karet na ruku */
(set: $playerHand to $playerDeck's (range: 1, (min: $handSize, $playerDeck's length)))
(set: $enemyDeck to (a:
(dm: "name", "Zlý úder", "attack", 2, "defense", 0, "cost", 0, "type", "enemy", "image", "https://files.catbox.moe/fp128s.png"),
(dm: "name", "Temná obrana", "attack", 1, "defense", 2, "cost", 2, "type", "enemy", "image", "https://files.catbox.moe/9cgxs9.png"),
(dm: "name", "Silný útok2", "attack", 5, "defense", 1, "cost", 3, "type", "enemy", "image", "https://files.catbox.moe/0qe6ow.png"),
(dm: "name", "Silný útok", "attack", 6, "defense", 0, "cost", 3, "type", "enemy", "image", "https://files.catbox.moe/0qe6ow.png")
))
(set: $enemyHand to (shuffled: ...$enemyDeck))
/* Finální stavy */
(set: $enemyHP to 19)
(set: $enemyMaxHP to 25)
(set: $stamina to $maxStamina)
(set: $battleInProgress to true)
(set: $selectedCard to 0)
(go-to: "PytlakBattle"){
(if: $removePosition is 1)[
(set: $deckCards to (subarray: $deckCards, 2, $deckCards's length + 1))
](else-if: $removePosition is 2)[
(set: $deckCards to (a: $deckCards's 1) + (subarray: $deckCards, 3, $deckCards's length + 1))
](else-if: $removePosition is 3)[
(set: $deckCards to (subarray: $deckCards, 1, 2) + (subarray: $deckCards, 4, $deckCards's length + 1))
](else-if: $removePosition is 4)[
(set: $deckCards to (subarray: $deckCards, 1, 3) + (subarray: $deckCards, 5, $deckCards's length + 1))
](else-if: $removePosition is 5)[
(set: $deckCards to (subarray: $deckCards, 1, 4) + (subarray: $deckCards, 6, $deckCards's length + 1))
](else-if: $removePosition is 6)[
(set: $deckCards to (subarray: $deckCards, 1, 5) + (subarray: $deckCards, 7, $deckCards's length + 1))
](else-if: $removePosition is 7)[
(set: $deckCards to (subarray: $deckCards, 1, 6) + (subarray: $deckCards, 8, $deckCards's length + 1))
](else-if: $removePosition is 8)[
(set: $deckCards to (subarray: $deckCards, 1, 7) + (subarray: $deckCards, 9, $deckCards's length + 1))
](else-if: $removePosition is 9)[
(set: $deckCards to (subarray: $deckCards, 1, 8) + (subarray: $deckCards, 10, $deckCards's length + 1))
](else-if: $removePosition is 10)[
(set: $deckCards to (subarray: $deckCards, 1, 9) + (subarray: $deckCards, 11, $deckCards's length + 1))
](else-if: $removePosition is 11)[
(set: $deckCards to (subarray: $deckCards, 1, 10) + (subarray: $deckCards, 12, $deckCards's length + 1))
](else-if: $removePosition is 12)[
(set: $deckCards to (subarray: $deckCards, 1, 11) + (subarray: $deckCards, 13, $deckCards's length + 1))
](else-if: $removePosition is 13)[
(set: $deckCards to (subarray: $deckCards, 1, 12) + (subarray: $deckCards, 14, $deckCards's length + 1))
](else-if: $removePosition is 14)[
(set: $deckCards to (subarray: $deckCards, 1, 13) + (subarray: $deckCards, 15, $deckCards's length + 1))
](else-if: $removePosition is 15)[
(set: $deckCards to (subarray: $deckCards, 1, 14) + (subarray: $deckCards, 16, $deckCards's length + 1))
](else-if: $removePosition is 16)[
(set: $deckCards to (subarray: $deckCards, 1, 15) + (subarray: $deckCards, 17, $deckCards's length + 1))
](else-if: $removePosition is 17)[
(set: $deckCards to (subarray: $deckCards, 1, 16) + (subarray: $deckCards, 18, $deckCards's length + 1))
](else-if: $removePosition is 18)[
(set: $deckCards to (subarray: $deckCards, 1, 17) + (subarray: $deckCards, 19, $deckCards's length + 1))
](else-if: $removePosition is 19)[
(set: $deckCards to (subarray: $deckCards, 1, 18) + (subarray: $deckCards, 20, $deckCards's length + 1))
](else:)[
(set: $deckCards to (subarray: $deckCards, 1, 19))
]
(set: $lastEquipMessage to "Karta odebrána z balíčku")
(set: $showNotification to true)
(go-to: "Inventory")
}<div id="settingContainer">
(link-goto: "<div class='setting'>⚙️<span class='tooltip'>Nastavení</span></div>", "Nastaveni")
</div>{<h4 style="text-align: center; color: #0a0a0a; font-family: 'Cinzel Decorative', serif; margin-bottom: 20px; text-shadow: 0 0 10px rgba(255,215,0,0.5);">Zavítal jsi k místnímu kováři</h4>
<p style="text-align: center; color: #1a1914; font-size: 18px; margin-bottom: 10px;">🌙 Zlato: <b>$gold</b></p>
<h3 style="color: #1a1914; margin: 30px 0 15px 0; font-family: 'Cinzel', serif;">Dostupné brnění</h3>
<div class="inventory-grid">
<!-- KOŽENÉ BRNĚNÍ -->
<div class="inventory-card armor (print: ($hasLeatherArmor ? 'owned-item' : ''))" style="border-color: rgba(176,160,76,0.3);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/6bdqid.png"></div>
<div class="inventory-card-name" style="color: #b0a04c;">Kožené brnění</div>
<div class="sell-price-stat" style="color: #b0a04c;">$leatherArmorPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="color: #9d8b4d;">+1 DEF</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $hasLeatherArmor)[
<p style="color: #6cdb1d !important;">✓ Vlastníš</p>
](else:)[
(if: $gold >= $leatherArmorPrice)[
<span class="sell-button">(link: "🛒 Koupit")[
(set: $gold to $gold - $leatherArmorPrice)
(set: $hasLeatherArmor to true)
(goto: "ShopArmor")
]</span>
](else:)[
<p style="color: #cc5555 !important;">Nemáš dost zlata</p>
]
]
</div>
</div>
</div>
<div style="text-align: center; margin-top: 40px;">
(link-goto: "Zpět na trhy", "Trh")<br><br>
</div>
<script>
$(document).ready(function() {
$('.sell-button tw-link').each(function() {
$(this).addClass('sell-link');
});
});
</script>}{<h4 style="text-align: center; color: #0a0a0a; font-family: 'Cinzel Decorative', serif; margin-bottom: 20px; text-shadow: 0 0 10px rgba(255,215,0,0.5);">Obchodník Gareth vypadá, že umí prodat téměř cokoliv</h4>
<p style="text-align: center; color: #1a1914; font-size: 18px; margin-bottom: 10px;">🌙 Zlato: <b>$gold</b></p>
<h3 style="color: #1a1914; margin: 30px 0 15px 0; font-family: 'Cinzel', serif;">Dostupné předměty</h3>
<div class="inventory-grid">
<!-- OBVAZ -->
<div class="inventory-card consumable" style="border-color: rgba(176,160,76,0.3);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/i1mcha.png"></div>
<div class="inventory-card-name" style="color: #b0a04c;">Obvaz</div>
<div class="sell-price-stat" style="color: #b0a04c;">$obvazPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(40,150,40,0.3); border-color: rgba(100,200,100,0.3); color: #7bc47b;">+1 HP</span>
</div>
<div class="inventory-card-description" style="color: #9d8b4d; font-size: 12px;">Vlastníš: $hasObvaz ks</div>
<div class="inventory-card-action">
(if: $gold >= $obvazPrice)[
<span class="sell-button">(link: "🛒 Koupit")[
(set: $gold to $gold - $obvazPrice)
(set: $hasObvaz to $hasObvaz + 1)
(goto: "ShopConsumables")
]</span>
](else:)[
<p style="color: #cc5555 !important;">Nemáš dost zlata</p>
]
</div>
</div>
</div>
<div style="text-align: center; margin-top: 40px;">
(link-goto: "Zpět na trhy", "Trh")<br><br>
</div>
<script>
$(document).ready(function() {
$('.sell-button tw-link').each(function() {
$(this).addClass('sell-link');
});
});
</script>}<!--
Odkaz na tohoto kupce se vším vložit do pasáže kde ho chci
<div id="locationContainer">
(link-goto: "<div class='location location-hrad'><img class='location-icon' src='https://files.catbox.moe/l4afzn.png'><span class='tooltip'>(text-colour:orange)[<h3>(text-colour:orange)[Obchodník s výbavou]</h3>]Další kupec co má nacpaný stan všemožným zbožím</span></div>", "ShopMerchant")
</div>
-->
{
<div style="max-width: 1200px; margin: 0 auto; padding: 40px 20px;">
<div style="text-align: center; margin-bottom: 40px;">
<h1 style="color: #b38900; font-family: 'Cinzel Decorative', serif; font-size: 36px; margin-bottom: 10px;">Obchod Kupce</h1>
<p style="color: #f5e6d3; font-size: 18px; margin-bottom: 20px;">
<span style="background: rgba(179,137,0,0.3); padding: 8px 20px; border-radius: 20px; border: 2px solid #b38900;">
🌙 Tvoje hřivny: <b>$gold</b></p>
</span>
</p>
</div>
<!-- NAVIGACE KATEGORIÍ -->
<div style="display: flex; justify-content: center; gap: 15px; margin-bottom: 40px; flex-wrap: wrap;">
(link-goto: "<div style='background: rgba(179,137,0,0.3); padding: 12px 24px; border-radius: 8px; border: 2px solid #b38900; color: #ffd700; font-weight: bold; cursor: pointer;'>⚔️ Zbraně</div>", "Allweapons")
(link-goto: "<div style='background: rgba(179,137,0,0.3); padding: 12px 24px; border-radius: 8px; border: 2px solid #b38900; color: #ffd700; font-weight: bold;'>🛡️ Brnění</div>", "Allarmor")
(link-goto: "<div style='background: rgba(179,137,0,0.3); padding: 12px 24px; border-radius: 8px; border: 2px solid #b38900; color: #ffd700; font-weight: bold;'>🪙 Štíty</div>", "Allshields")
(link-goto: "<div style='background: rgba(179,137,0,0.3); padding: 12px 24px; border-radius: 8px; border: 2px solid #b38900; color: #ffd700; font-weight: bold;'>🧪 Spotřební</div>", "Allconsumables")
(link-goto: "<div style='background: rgba(200,0,0,0.3); padding: 12px 24px; border-radius: 8px; border: 2px solid #c00; color: #ff6b6b; font-weight: bold;'>💸 Prodej</div>", "ShopSell")
</div>
<!-- POPIS OBCHODU -->
<div style="background: rgba(42,26,16,0.6); border: 2px solid rgba(139,105,20,0.5); border-radius: 12px; padding: 30px; margin-bottom: 30px;">
<p style="color: #f5e6d3; font-size: 16px; line-height: 1.8; text-align: center; font-style: italic;">
"Vítej, dobrodruhu! Jsem místní kupec. Mám to nejlepší zboží v celém kraji.
Pokud něco potřebuješ, určitě se tu najde. A pokud máš něco k prodeji, rád ti to odkoupím...
za poloviční cenu, samozřejmě."
</p>
<p style="color: #888; font-size: 14px; text-align: center; margin-top: 15px;">
💡 Tip: Ceny kupců v kraji se mohou lišit.
</p>
</div>
<div style="text-align: center;">
(link: "🚪 Opustit obchod")[
(go-to: $returnPassage)
]
</div>
</div>}{<h2 style="text-align: center; color: #ffd700; font-family: 'Cinzel Decorative', serif; margin-bottom: 20px; text-shadow: 0 0 10px rgba(255,215,0,0.5);">Prodej předmětů</h2>
<p style="text-align: center; color: #ffd700; font-size: 18px; margin-bottom: 10px;">🌙 Zlato: <b>$gold</b></p>
<p style="text-align: center; color: #888; font-style: italic; margin-bottom: 30px; font-family: 'Cinzel', serif;">Kupec odkoupí tvé obyčejné předměty za 50% a kvalitní předměty za 25% jejich původní ceny.</p>
<h3 style="color: #b38900; margin: 30px 0 15px 0; font-family: 'Cinzel', serif;">Zbraně</h3>
<div class="inventory-grid">
(if: $hasDagger)[(set: $isEquipped to $equippedWeapon is "dagger")<div class="inventory-card weapon (print: ($isEquipped ? 'disabled-sale' : ''))">
<div class="inventory-card-image"><img src="https://files.catbox.moe/5tkzw4.png"></div>
<div class="inventory-card-name">Dýka</div>
<div class="sell-price-stat">+$daggerSellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">DMG +1</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $daggerSellPrice)(set: $hasDagger to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
(if: $hasSwordInv)[(set: $isEquipped to $equippedWeapon is "sword")<div class="inventory-card weapon (print: ($isEquipped ? 'disabled-sale' : ''))">
<div class="inventory-card-image"><img src="https://files.catbox.moe/dg5k0s.png"></div>
<div class="inventory-card-name">Meč</div>
<div class="sell-price-stat">+$swordSellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">DMG +2</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $swordSellPrice)(set: $hasSwordInv to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
(if: $hasAxe)[(set: $isEquipped to $equippedWeapon is "axe")<div class="inventory-card weapon (print: ($isEquipped ? 'disabled-sale' : ''))">
<div class="inventory-card-image"><img src="https://files.catbox.moe/dg5k0s.png"></div>
<div class="inventory-card-name">Sekera</div>
<div class="sell-price-stat">+$axeSellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">DMG +3</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $axeSellPrice)(set: $hasAxe to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
(if: $hasGreatsword)[(set: $isEquipped to $equippedWeapon is "greatsword")<div class="inventory-card weapon (print: ($isEquipped ? 'disabled-sale' : ''))">
<div class="inventory-card-image"><img src="https://files.catbox.moe/dg5k0s.png"></div>
<div class="inventory-card-name">Obouruční meč</div>
<div class="sell-price-stat">+$greatswordSellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">DMG +4</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $greatswordSellPrice)(set: $hasGreatsword to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
(if: $hasDaggerQuality)[(set: $isEquipped to $equippedWeapon is "daggerQuality")<div class="inventory-card weapon (print: ($isEquipped ? 'disabled-sale' : ''))" style="border-color: rgba(100,150,200,0.6);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/2olwuv.png"></div>
<div class="inventory-card-name" style="color: #87ceeb;">Kvalitní dýka</div>
<div class="sell-price-stat">+$daggerQualitySellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">DMG +2</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $daggerQualitySellPrice)(set: $hasDaggerQuality to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
(if: $hasSwordMaster)[(set: $isEquipped to $equippedWeapon is "swordMaster")<div class="inventory-card weapon (print: ($isEquipped ? 'disabled-sale' : ''))" style="border-color: rgba(150,100,200,0.6);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/a7b2cd.png"></div>
<div class="inventory-card-name" style="color: #9370db;">Mistrovský meč</div>
<div class="sell-price-stat">+$swordMasterSellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">DMG +5</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $swordMasterSellPrice)(set: $hasSwordMaster to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
(if: $hasAxeWar)[(set: $isEquipped to $equippedWeapon is "axeWar")<div class="inventory-card weapon (print: ($isEquipped ? 'disabled-sale' : ''))" style="border-color: rgba(200,100,100,0.6);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/e9f4gh.png"></div>
<div class="inventory-card-name" style="color: #ff6347;">Válečná sekera</div>
<div class="sell-price-stat">+$axeWarSellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">DMG +6</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $axeWarSellPrice)(set: $hasAxeWar to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
(if: $hasGreatswordLegendary)[(set: $isEquipped to $equippedWeapon is "greatswordLegendary")<div class="inventory-card weapon (print: ($isEquipped ? 'disabled-sale' : ''))" style="border-color: #ffd700; box-shadow: 0 0 20px rgba(255,215,0,0.3);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/j5k6lm.png"></div>
<div class="inventory-card-name" style="color: #ffd700;">útok + 3</div>
<div class="sell-price-stat">+$greatswordLegendarySellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">DMG +8</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $greatswordLegendarySellPrice)(set: $hasGreatswordLegendary to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
</div>
<h3 style="color: #b38900; margin: 30px 0 15px 0; font-family: 'Cinzel', serif;">Brnění</h3>
<div class="inventory-grid">
(if: $hasLeatherArmor)[(set: $isEquipped to $equippedArmor is "leather")<div class="inventory-card armor (print: ($isEquipped ? 'disabled-sale' : ''))">
<div class="inventory-card-image"><img src="https://files.catbox.moe/dg5k0s.png"></div>
<div class="inventory-card-name">Kožené brnění</div>
<div class="sell-price-stat">+$leatherArmorSellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">+1 DEF</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $leatherArmorSellPrice)(set: $hasLeatherArmor to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
(if: $hasChainmail)[(set: $isEquipped to $equippedArmor is "chain")<div class="inventory-card armor (print: ($isEquipped ? 'disabled-sale' : ''))">
<div class="inventory-card-image"><img src="https://files.catbox.moe/dg5k0s.png"></div>
<div class="inventory-card-name">Kroužková zbroj</div>
<div class="sell-price-stat">+$chainmailSellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">+2 DEF</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $chainmailSellPrice)(set: $hasChainmail to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
(if: $hasPlateArmor)[(set: $isEquipped to $equippedArmor is "plate")<div class="inventory-card armor (print: ($isEquipped ? 'disabled-sale' : ''))">
<div class="inventory-card-image"><img src="https://files.catbox.moe/dg5k0s.png"></div>
<div class="inventory-card-name">Plátová zbroj</div>
<div class="sell-price-stat">+$plateArmorSellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">+3 DEF</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $plateArmorSellPrice)(set: $hasPlateArmor to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
</div>
<h3 style="color: #b38900; margin: 30px 0 15px 0; font-family: 'Cinzel', serif;">Štíty</h3>
<div class="inventory-grid">
(if: $hasWoodenShield)[(set: $isEquipped to $equippedShield is "wooden")<div class="inventory-card shield (print: ($isEquipped ? 'disabled-sale' : ''))">
<div class="inventory-card-image"><img src="https://files.catbox.moe/dg5k0s.png"></div>
<div class="inventory-card-name">Dřevěný štít</div>
<div class="sell-price-stat">+$woodenShieldSellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">+1 DEF</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $woodenShieldSellPrice)(set: $hasWoodenShield to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
(if: $hasIronShield)[(set: $isEquipped to $equippedShield is "iron")<div class="inventory-card shield (print: ($isEquipped ? 'disabled-sale' : ''))">
<div class="inventory-card-image"><img src="https://files.catbox.moe/dg5k0s.png"></div>
<div class="inventory-card-name">Železný štít</div>
<div class="sell-price-stat">+$ironShieldSellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">+2 DEF</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $ironShieldSellPrice)(set: $hasIronShield to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
(if: $hasTowerShield)[(set: $isEquipped to $equippedShield is "tower")<div class="inventory-card shield (print: ($isEquipped ? 'disabled-sale' : ''))">
<div class="inventory-card-image"><img src="https://files.catbox.moe/dg5k0s.png"></div>
<div class="inventory-card-name">Věžový štít</div>
<div class="sell-price-stat">+$towerShieldSellPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat">+3 DEF</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $isEquipped)[<p>⚠️ Vybaveno - nejprve odlož</p>](else:)[<span class="sell-button">(link-repeat: "🌙 Prodat")[(set: $gold to $gold + $towerShieldSellPrice)(set: $hasTowerShield to false)(go-to: "ShopSell")]</span>]
</div>
</div>]
</div>
<h3 style="color: #b38900; margin: 30px 0 15px 0; font-family: 'Cinzel', serif;">Spotřební předměty</h3>
<div class="inventory-grid">
(if: $hasPotion > 0)[<div class="inventory-card consumable">
<div class="inventory-card-image"><img src="https://files.catbox.moe/y1rymu.png"></div>
<div class="inventory-card-name">Lektvar (x$hasPotion)</div>
<div class="sell-price-stat">+$potionSellPrice 🌙 / kus</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(40,150,40,0.5); border-color: rgba(100,200,100,0.4);">+10 HP</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
<span class="sell-button">(link-repeat: "🌙 Prodat 1ks")[(set: $gold to $gold + $potionSellPrice)(set: $hasPotion to $hasPotion - 1)(go-to: "ShopSell")]</span>
</div>
</div>]
(if: $hasObvaz > 0)[<div class="inventory-card consumable">
<div class="inventory-card-image"><img src="https://files.catbox.moe/i1mcha.png"></div>
<div class="inventory-card-name">Obvaz (x$hasObvaz)</div>
<div class="sell-price-stat">+$obvazSellPrice 🌙 / kus</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="background: rgba(40,150,40,0.5); border-color: rgba(100,200,100,0.4);">+1 HP</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
<span class="sell-button">(link-repeat: "🌙 Prodat 1ks")[(set: $gold to $gold + $obvazSellPrice)(set: $hasObvaz to $hasObvaz - 1)(go-to: "ShopSell")]</span>
</div>
</div>]
</div>
(if: not $hasDagger and not $hasSwordInv and not $hasAxe and not $hasGreatsword and not $hasDaggerQuality and not $hasSwordMaster and not $hasAxeWar and not $hasGreatswordLegendary and not $hasLeatherArmor and not $hasChainmail and not $hasPlateArmor and not $hasWoodenShield and not $hasIronShield and not $hasTowerShield and $hasPotion is 0 and $hasObvaz is 0)[
<div style="grid-column: 1/-1; text-align: center; padding: 60px 20px;">
<p style="font-size: 18px; color: #888; font-family: 'Cinzel', serif; margin-top: 10px;">Nemáš žádné předměty k prodeji</p>
</div>]
<div style="text-align: center; margin-top: 40px;">
(link-goto: "Zpět do obchodu", "ShopMerchant")<br><br>
(link: "Opustit obchod")[(go-to: $returnPassage)]
</div>
<script>
$(document).ready(function() {
$('.sell-button tw-link').each(function() {
$(this).addClass('sell-link');
});
});
</script>}{<h4 style="text-align: center; color: #0a0a0a; font-family: 'Cinzel Decorative', serif; margin-bottom: 20px; text-shadow: 0 0 10px rgba(255,215,0,0.5);">Dřevorubec co chce prodat alespoň něco</h4>
<p style="text-align: center; color: #1a1914; font-size: 18px; margin-bottom: 10px;">🌙 Zlato: <b>$gold</b></p>
<h3 style="color: #1a1914; margin: 30px 0 15px 0; font-family: 'Cinzel', serif;">Dostupné štíty</h3>
<div class="inventory-grid">
<!-- DŘEVĚNÝ ŠTÍT -->
<div class="inventory-card shield (print: ($hasWoodenShield ? 'owned-item' : ''))" style="border-color: rgba(176,160,76,0.3);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/9cgxs9.png"></div>
<div class="inventory-card-name" style="color: #b0a04c;">Dřevěný štít</div>
<div class="sell-price-stat" style="color: #b0a04c;">$woodenShieldPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="color: #9d8b4d;">+1 DEF</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $hasWoodenShield)[
<p style="color: #6cdb1d !important;">✓ Vlastníš</p>
](else:)[
(if: $gold >= $woodenShieldPrice)[
<span class="sell-button">(link: "🛒 Koupit")[
(set: $gold to $gold - $woodenShieldPrice)
(set: $hasWoodenShield to true)
(goto: "ShopShields")
]</span>
](else:)[
<p style="color: #cc5555 !important;">Nemáš dost zlata</p>
]
]
</div>
</div>
</div>
<div style="text-align: center; margin-top: 40px;">
(link-goto: "Zpět na trhy", "Trh")<br><br>
</div>
<script>
$(document).ready(function() {
$('.sell-button tw-link').each(function() {
$(this).addClass('sell-link');
});
});
</script>}{<h4 style="text-align: center; color: #0a0a0a; font-family: 'Cinzel Decorative', serif; margin-bottom: 20px; text-shadow: 0 0 10px rgba(255,215,0,0.5);">Tento obchodník nejspíš přicestoval z veliké dálky</h4>
<p style="text-align: center; color: #1a1914; font-size: 18px; margin-bottom: 10px;">🌙 Zlato: <b>$gold</b></p>
<h3 style="color: #1a1914; margin: 30px 0 15px 0; font-family: 'Cinzel', serif;">Dostupné zbraně</h3>
<div class="inventory-grid">
<!-- DÝKA -->
<div class="inventory-card weapon (print: ($hasDagger ? 'owned-item' : ''))" style="border-color: rgba(176,160,76,0.3);">
<div class="inventory-card-image"><img src="https://files.catbox.moe/sk5n4x.png"></div>
<div class="inventory-card-name" style="color: #b0a04c;">Dýka</div>
<div class="sell-price-stat" style="color: #b0a04c;">$daggerPrice 🌙</div>
<div class="inventory-card-stats">
<span class="inventory-card-stat" style="color: #9d8b4d;">+1 útok</span>
</div>
<div class="inventory-card-description"></div>
<div class="inventory-card-action">
(if: $hasDagger)[
<p style="color: #6cdb1d !important;">✓ Vlastníš</p>
](else:)[
(if: $gold >= $daggerPrice)[
<span class="sell-button">(link: "🛒 Koupit")[
(set: $gold to $gold - $daggerPrice)
(set: $hasDagger to true)
(goto: "ShopWeapons")
]</span>
](else:)[
<p style="color: #cc5555 !important;">Nemáš dost zlata</p>
]
]
</div>
</div>
</div>
<div style="text-align: center; margin-top: 40px;">
(link-goto: "Zpět na trhy", "Trh")<br><br>
</div>
<script>
$(document).ready(function() {
$('.sell-button tw-link').each(function() {
$(this).addClass('sell-link');
});
});
</script>}{<div id="battle-vignette" style="position: fixed; top: 0; left: 0; right: 0; bottom: 0; pointer-events: none; z-index: 2; background: radial-gradient(circle at 10% 10%, transparent 40%, rgba(0, 0, 80, 0.9) 80%, rgba(0, 0, 0, 1) 100%), radial-gradient(circle at 90% 10%, transparent 40%, rgba(0, 0, 80, 0.9) 80%, rgba(0, 0, 0, 1) 100%), radial-gradient(circle at 10% 90%, transparent 40%, rgba(0, 0, 80, 0.9) 80%, rgba(0, 0, 0, 1) 100%), radial-gradient(circle at 90% 90%, transparent 40%, rgba(0, 0, 80, 0.9) 80%, rgba(0, 0, 0, 1) 100%); background-repeat: no-repeat; background-blend-mode: multiply; animation: vignette-pulse 4s ease-in-out infinite;"></div>
<div id="dust-container" style="position: fixed; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; z-index: 3; overflow: hidden;">
<div id="dust-layer" style="position: absolute; width: 100%; height: 100%; opacity: 0.5;">
<div class="dust-particle" style="position: absolute; left: 10%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 5s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 0s;">•</div>
<div class="dust-particle" style="position: absolute; left: 20%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 6s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 1s;">•</div>
<div class="dust-particle" style="position: absolute; left: 30%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 5.5s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 2s;">•</div>
<div class="dust-particle" style="position: absolute; left: 40%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 6.5s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 0.5s;">•</div>
<div class="dust-particle" style="position: absolute; left: 50%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 5.8s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 1.5s;">•</div>
<div class="dust-particle" style="position: absolute; left: 60%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 6.8s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 2.5s;">•</div>
<div class="dust-particle" style="position: absolute; left: 70%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 6s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 0.8s;">•</div>
<div class="dust-particle" style="position: absolute; left: 80%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 7s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 1.8s;">•</div>
<div class="dust-particle" style="position: absolute; left: 90%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 5.2s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 2.8s;">•</div>
<div class="dust-particle" style="position: absolute; left: 5%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 6.3s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 0.3s;">•</div>
<div class="dust-particle" style="position: absolute; left: 15%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 5.3s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 1.3s;">•</div>
<div class="dust-particle" style="position: absolute; left: 25%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 6.9s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 2.3s;">•</div>
<div class="dust-particle" style="position: absolute; left: 35%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 5.6s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 0.6s;">•</div>
<div class="dust-particle" style="position: absolute; left: 45%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 6.6s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 1.6s;">•</div>
<div class="dust-particle" style="position: absolute; left: 55%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 5.9s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 2.6s;">•</div>
<div class="dust-particle" style="position: absolute; left: 65%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 7s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 0.9s;">•</div>
<div class="dust-particle" style="position: absolute; left: 75%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 5s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 1.9s;">•</div>
<div class="dust-particle" style="position: absolute; left: 85%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 6s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 2.9s;">•</div>
<div class="dust-particle" style="position: absolute; left: 95%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 5.4s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 0.4s;">•</div>
<div class="dust-particle" style="position: absolute; left: 12%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 7s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 1.4s;">•</div>
<div class="dust-particle" style="position: absolute; left: 22%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 5.1s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 2.4s;">•</div>
<div class="dust-particle" style="position: absolute; left: 32%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 6.7s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 0.7s;">•</div>
<div class="dust-particle" style="position: absolute; left: 42%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 5.7s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 1.7s;">•</div>
<div class="dust-particle" style="position: absolute; left: 52%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 7s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 2.7s;">•</div>
<div class="dust-particle" style="position: absolute; left: 62%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 5.2s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 0.2s;">•</div>
<div class="dust-particle" style="position: absolute; left: 72%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 6.2s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 1.2s;">•</div>
<div class="dust-particle" style="position: absolute; left: 82%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 5.9s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 2.2s;">•</div>
<div class="dust-particle" style="position: absolute; left: 92%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 6.2s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 0.1s;">•</div>
<div class="dust-particle" style="position: absolute; left: 8%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 5.1s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 1.1s;">•</div>
<div class="dust-particle" style="position: absolute; left: 18%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 6.1s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 2.1s;">•</div>
<div class="dust-particle" style="position: absolute; left: 28%; color: rgba(255, 255, 255, 0.2); font-size: 0.8em; animation: dustfall 5.5s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 0.9s;">•</div>
<!-- Střední částečky -->
<div class="dust-particle" style="position: absolute; left: 8%; color: rgba(160, 160, 160, 0.6); font-size: 0.7em; animation: dustfall 7s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 0.2s;">•</div>
<div class="dust-particle" style="position: absolute; left: 22%; color: rgba(160, 160, 160, 0.6); font-size: 0.7em; animation: dustfall 8s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 1.2s;">•</div>
<div class="dust-particle" style="position: absolute; left: 38%; color: rgba(160, 160, 160, 0.6); font-size: 0.7em; animation: dustfall 7.5s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 2.2s;">•</div>
<div class="dust-particle" style="position: absolute; left: 52%; color: rgba(160, 160, 160, 0.6); font-size: 0.7em; animation: dustfall 8s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 0.7s;">•</div>
<div class="dust-particle" style="position: absolute; left: 68%; color: rgba(160, 160, 160, 0.6); font-size: 0.7em; animation: dustfall 7.8s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 1.7s;">•</div>
<div class="dust-particle" style="position: absolute; left: 82%; color: rgba(160, 160, 160, 0.6); font-size: 0.7em; animation: dustfall 7.5s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 2.7s;">•</div>
<div class="dust-particle" style="position: absolute; left: 92%; color: rgba(160, 160, 160, 0.6); font-size: 0.7em; animation: dustfall 7.2s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 0.1s;">•</div>
<div class="dust-particle" style="position: absolute; left: 18%; color: rgba(160, 160, 160, 0.6); font-size: 0.7em; animation: dustfall 7.4s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 1.1s;">•</div>
<div class="dust-particle" style="position: absolute; left: 42%; color: rgba(160, 160, 160, 0.6); font-size: 0.7em; animation: dustfall 7.9s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 2.1s;">•</div>
<div class="dust-particle" style="position: absolute; left: 58%; color: rgba(160, 160, 160, 0.6); font-size: 0.7em; animation: dustfall 7.1s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 0.9s;">•</div>
<div class="dust-particle" style="position: absolute; left: 26%; color: rgba(160, 160, 160, 0.6); font-size: 0.7em; animation: dustfall 7.3s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 1.6s;">•</div>
<div class="dust-particle" style="position: absolute; left: 74%; color: rgba(160, 160, 160, 0.6); font-size: 0.7em; animation: dustfall 7.6s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 2.6s;">•</div>
<!-- Velké částečky -->
<div class="dust-particle" style="position: absolute; left: 14%; color: rgba(140, 140, 140, 0.5); font-size: 0.9em; animation: dustfall 10s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 0.5s;">•</div>
<div class="dust-particle" style="position: absolute; left: 32%; color: rgba(140, 140, 140, 0.5); font-size: 0.9em; animation: dustfall 9s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 1.5s;">•</div>
<div class="dust-particle" style="position: absolute; left: 48%; color: rgba(140, 140, 140, 0.5); font-size: 0.9em; animation: dustfall 11s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 2.5s;">•</div>
<div class="dust-particle" style="position: absolute; left: 64%; color: rgba(140, 140, 140, 0.5); font-size: 0.9em; animation: dustfall 9.5s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 0.8s;">•</div>
<div class="dust-particle" style="position: absolute; left: 78%; color: rgba(140, 140, 140, 0.5); font-size: 0.9em; animation: dustfall 10.5s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 1.8s;">•</div>
<div class="dust-particle" style="position: absolute; left: 88%; color: rgba(140, 140, 140, 0.5); font-size: 0.9em; animation: dustfall 9.2s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 2.8s;">•</div>
<div class="dust-particle" style="position: absolute; left: 36%; color: rgba(140, 140, 140, 0.5); font-size: 0.9em; animation: dustfall 9.8s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 1.3s;">•</div>
<div class="dust-particle" style="position: absolute; left: 56%; color: rgba(140, 140, 140, 0.5); font-size: 0.9em; animation: dustfall 10.3s linear infinite; text-shadow: 0 0 2px rgba(180, 180, 180, 0.3); pointer-events: none; animation-delay: 2.3s;">•</div>
</div>
</div>
<style>
@keyframes vignette-pulse {
0%, 100% {
opacity: 0.3;
}
50% {
opacity: 0.2;
}
}
@keyframes dustfall {
0% {
transform: translateY(-10vh) translateX(0) rotate(0deg);
opacity: 0;
}
10% {
opacity: 1;
}
90% {
opacity: 1;
}
100% {
transform: translateY(110vh) translateX(20px) rotate(360deg);
opacity: 0;
}
}
</style>}{<html lang="cs">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Smíšená Bouře - Kontrast</title>
<link href="https://fonts.googleapis.com/css2?family=Cinzel:wght@400;700&display=swap" rel="stylesheet">
<style>
body, html {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
overflow: hidden;
font-family: 'Cinzel', serif;
background: linear-gradient(135deg, #0a0a0a 0%, #1a0a0a 50%, #0a0a1a 100%);
/* PŘIDÁNO: Animace kontrastu pro celé tělo stránky */
animation: storm-surge 25s ease-in-out infinite;
}
/* 1. Vignetace */
#battle-vignette {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
pointer-events: none;
z-index: 2;
background:
radial-gradient(circle at 10% 10%, transparent 40%, rgba(0, 0, 80, 0.9) 80%, rgba(0, 0, 0, 1) 100%),
radial-gradient(circle at 90% 10%, transparent 40%, rgba(0, 0, 80, 0.9) 80%, rgba(0, 0, 0, 1) 100%),
radial-gradient(circle at 10% 90%, transparent 40%, rgba(0, 0, 80, 0.9) 80%, rgba(0, 0, 0, 1) 100%),
radial-gradient(circle at 90% 90%, transparent 40%, rgba(0, 0, 80, 0.9) 80%, rgba(0, 0, 0, 1) 100%);
background-repeat: no-repeat;
background-blend-mode: multiply;
animation: vignette-pulse 10s ease-in-out infinite;
}
/* 2. Kontejner pro DEŠŤ/PRACH */
#dust-container {
position: fixed;
top: 0;
left: -1500px;
width: calc(100% + 1500px);
height: 100%;
pointer-events: none;
z-index: 4;
overflow: hidden;
}
/* 3. Kontejner pro SNÍH */
#snow-container {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 3;
overflow: hidden;
}
#dust-layer, #snow-layer {
position: absolute;
width: 100%;
height: 100%;
}
#dust-layer { opacity: 0.5; }
#snow-layer { opacity: 0.4; }
/* ČÁSTEČKY */
.dust-particle {
position: absolute;
top: -10vh;
color: rgba(180, 180, 180, 0.7);
font-size: 0.1em;
width: 2px;
height: 35px;
background-color: currentColor;
transform-origin: bottom center;
transform: rotate(-65deg);
animation-name: dustfall;
animation-timing-function: linear;
animation-iteration-count: infinite;
text-shadow: 0 0 2px rgba(180, 180, 180, 0.3);
pointer-events: none;
}
.dust-particle-medium { height: 20px; color: rgba(160, 160, 160, 0.6); }
.dust-particle-large { height: 25px; color: rgba(140, 140, 140, 0.5); }
/* VLOČKY */
.snowflake {
position: absolute;
top: -10vh;
color: rgba(255, 255, 255, 0.2);
font-size: 1em;
animation-name: snowfall;
animation-timing-function: linear;
animation-iteration-count: infinite;
text-shadow: 0 0 5px rgba(255, 255, 255, 0.2);
}
.snowflake-medium { font-size: 1.5em; color: rgba(255, 255, 255, 0.7); }
.snowflake-large { font-size: 2.2em; color: rgba(255, 255, 255, 0.4); }
.snowflake-fast {
animation-name: dustfall !important;
transform: rotate(-65deg);
}
/* ANIMACE */
@keyframes vignette-pulse {
0%, 100% { opacity: 0.1; }
50% { opacity: 0.2; }
}
/* NOVÁ ANIMACE: Občasné zvýšení kontrastu (Surge) */
/* Funguje to tak, že po většinu času (0-80%) se nic neděje,
a pak se rychle zvýší kontrast a zase vrátí. */
@keyframes storm-surge {
0%, 80% {
filter: contrast(100%) brightness(100%);
}
85% {
/* Tady je ten efekt: Zvýšíme kontrast o 15% a trochu ztmavíme jas,
aby barvy vylezly, ale nebyla to bílá rána */
filter: contrast(105%) brightness(98%);
}
90%, 100% {
filter: contrast(100%) brightness(100%);
}
}
@keyframes dustfall {
0% {
transform: translateY(-10vh) translateX(0) rotate(-65deg);
opacity: 0;
}
10% { opacity: 1; }
90% { opacity: 1; }
100% {
transform: translateY(110vh) translateX(100vw) rotate(-65deg);
opacity: 0;
}
}
@keyframes snowfall {
0% {
transform: translateY(-10vh) translateX(0) rotate(0deg);
opacity: 0;
}
10% { opacity: 1; }
90% { opacity: 1; }
100% {
transform: translateY(110vh) translateX(20px) rotate(360deg);
opacity: 0;
}
}
</style>
</head>
<body>
<div id="battle-vignette"></div>
<div id="dust-container">
<div id="dust-layer">
<div class="dust-particle" style="left: 10%; animation-delay: 0s; animation-duration: 2.5s;"></div>
<div class="dust-particle" style="left: 20%; animation-delay: 1s; animation-duration: 3s;"></div>
<div class="dust-particle" style="left: 30%; animation-delay: 2s; animation-duration: 2.75s;"></div>
<div class="dust-particle" style="left: 40%; animation-delay: 0.5s; animation-duration: 3.25s;"></div>
<div class="dust-particle" style="left: 50%; animation-delay: 1.5s; animation-duration: 2.9s;"></div>
<div class="dust-particle" style="left: 60%; animation-delay: 2.5s; animation-duration: 3.4s;"></div>
<div class="dust-particle" style="left: 70%; animation-delay: 0.8s; animation-duration: 3s;"></div>
<div class="dust-particle" style="left: 80%; animation-delay: 1.8s; animation-duration: 3.5s;"></div>
<div class="dust-particle" style="left: 90%; animation-delay: 2.8s; animation-duration: 2.6s;"></div>
<div class="dust-particle" style="left: 5%; animation-delay: 0.3s; animation-duration: 3.15s;"></div>
<div class="dust-particle" style="left: 15%; animation-delay: 1.3s; animation-duration: 2.65s;"></div>
<div class="dust-particle" style="left: 25%; animation-delay: 2.3s; animation-duration: 3.45s;"></div>
<div class="dust-particle" style="left: 35%; animation-delay: 0.6s; animation-duration: 2.8s;"></div>
<div class="dust-particle" style="left: 45%; animation-delay: 1.6s; animation-duration: 3.3s;"></div>
<div class="dust-particle" style="left: 55%; animation-delay: 2.6s; animation-duration: 2.95s;"></div>
<div class="dust-particle" style="left: 65%; animation-delay: 0.9s; animation-duration: 3.5s;"></div>
<div class="dust-particle" style="left: 75%; animation-delay: 1.9s; animation-duration: 2.5s;"></div>
<div class="dust-particle" style="left: 85%; animation-delay: 2.9s; animation-duration: 3s;"></div>
<div class="dust-particle" style="left: 95%; animation-delay: 0.4s; animation-duration: 2.7s;"></div>
<div class="dust-particle" style="left: 12%; animation-delay: 1.4s; animation-duration: 3.5s;"></div>
<div class="dust-particle" style="left: 22%; animation-delay: 2.4s; animation-duration: 2.55s;"></div>
<div class="dust-particle" style="left: 32%; animation-delay: 0.7s; animation-duration: 3.35s;"></div>
<div class="dust-particle" style="left: 42%; animation-delay: 1.7s; animation-duration: 2.85s;"></div>
<div class="dust-particle" style="left: 52%; animation-delay: 2.7s; animation-duration: 3.5s;"></div>
<div class="dust-particle" style="left: 62%; animation-delay: 0.2s; animation-duration: 2.6s;"></div>
<div class="dust-particle" style="left: 72%; animation-delay: 1.2s; animation-duration: 3.1s;"></div>
<div class="dust-particle" style="left: 82%; animation-delay: 2.2s; animation-duration: 2.95s;"></div>
<div class="dust-particle" style="left: 92%; animation-delay: 0.1s; animation-duration: 3.1s;"></div>
<div class="dust-particle" style="left: 8%; animation-delay: 1.1s; animation-duration: 2.55s;"></div>
<div class="dust-particle" style="left: 18%; animation-delay: 2.1s; animation-duration: 3.05s;"></div>
<div class="dust-particle" style="left: 28%; animation-delay: 0.9s; animation-duration: 2.75s;"></div>
<div class="dust-particle dust-particle-medium" style="left: 8%; animation-delay: 0.2s; animation-duration: 3.5s;"></div>
<div class="dust-particle dust-particle-medium" style="left: 22%; animation-delay: 1.2s; animation-duration: 4s;"></div>
<div class="dust-particle dust-particle-medium" style="left: 38%; animation-delay: 2.2s; animation-duration: 3.75s;"></div>
<div class="dust-particle dust-particle-medium" style="left: 52%; animation-delay: 0.7s; animation-duration: 4s;"></div>
<div class="dust-particle dust-particle-medium" style="left: 68%; animation-delay: 1.7s; animation-duration: 3.9s;"></div>
<div class="dust-particle dust-particle-medium" style="left: 82%; animation-delay: 2.7s; animation-duration: 3.75s;"></div>
<div class="dust-particle dust-particle-medium" style="left: 92%; animation-delay: 0.1s; animation-duration: 3.6s;"></div>
<div class="dust-particle dust-particle-medium" style="left: 18%; animation-delay: 1.1s; animation-duration: 3.7s;"></div>
<div class="dust-particle dust-particle-medium" style="left: 42%; animation-delay: 2.1s; animation-duration: 3.95s;"></div>
<div class="dust-particle dust-particle-medium" style="left: 58%; animation-delay: 0.9s; animation-duration: 3.55s;"></div>
<div class="dust-particle dust-particle-medium" style="left: 26%; animation-delay: 1.6s; animation-duration: 3.65s;"></div>
<div class="dust-particle dust-particle-medium" style="left: 74%; animation-delay: 2.6s; animation-duration: 3.8s;"></div>
<div class="dust-particle dust-particle-large" style="left: 14%; animation-delay: 0.5s; animation-duration: 4.5s;"></div>
<div class="dust-particle dust-particle-large" style="left: 32%; animation-delay: 1.5s; animation-duration: 4s;"></div>
<div class="dust-particle dust-particle-large" style="left: 48%; animation-delay: 2.5s; animation-duration: 4.5s;"></div>
<div class="dust-particle dust-particle-large" style="left: 64%; animation-delay: 0.8s; animation-duration: 4.25s;"></div>
<div class="dust-particle dust-particle-large" style="left: 78%; animation-delay: 1.8s; animation-duration: 4.75s;"></div>
<div class="dust-particle dust-particle-large" style="left: 88%; animation-delay: 2.8s; animation-duration: 4.1s;"></div>
<div class="dust-particle dust-particle-large" style="left: 36%; animation-delay: 1.3s; animation-duration: 4.4s;"></div>
<div class="dust-particle dust-particle-large" style="left: 56%; animation-delay: 2.3s; animation-duration: 4.65s;"></div>
</div>
</div>
<div id="snow-container">
<div id="snow-layer">
<div class="snowflake snowflake-fast" style="left: 10%; animation-delay: 0s; animation-duration: 8s;">❅</div>
<div class="snowflake snowflake-fast" style="left: 20%; animation-delay: 1s; animation-duration: 10s;">❅</div>
<div class="snowflake snowflake-fast" style="left: 30%; animation-delay: 2s; animation-duration: 9s;">❆</div>
<div class="snowflake snowflake-fast" style="left: 40%; animation-delay: 0.5s; animation-duration: 11s;">❅</div>
<div class="snowflake snowflake-fast" style="left: 50%; animation-delay: 1.5s; animation-duration: 8.5s;">❆</div>
<div class="snowflake snowflake-fast" style="left: 60%; animation-delay: 2.5s; animation-duration: 10.5s;">❅</div>
<div class="snowflake snowflake-fast" style="left: 70%; animation-delay: 0.8s; animation-duration: 9.5s;">❆</div>
<div class="snowflake snowflake-fast" style="left: 80%; animation-delay: 1.8s; animation-duration: 11.5s;">❅</div>
<div class="snowflake snowflake-fast" style="left: 90%; animation-delay: 2.8s; animation-duration: 8.8s;">❆</div>
<div class="snowflake snowflake-fast" style="left: 5%; animation-delay: 0.3s; animation-duration: 10.3s;">❅</div>
<div class="snowflake snowflake-fast" style="left: 15%; animation-delay: 1.3s; animation-duration: 9.3s;">❆</div>
<div class="snowflake snowflake-fast" style="left: 25%; animation-delay: 2.3s; animation-duration: 11.3s;">❅</div>
<div class="snowflake snowflake-fast" style="left: 35%; animation-delay: 0.6s; animation-duration: 8.6s;">❆</div>
<div class="snowflake snowflake-fast" style="left: 45%; animation-delay: 1.6s; animation-duration: 10.6s;">❅</div>
<div class="snowflake snowflake-fast" style="left: 55%; animation-delay: 2.6s; animation-duration: 9.6s;">❆</div>
<div class="snowflake snowflake-fast" style="left: 65%; animation-delay: 0.9s; animation-duration: 11.9s;">❅</div>
<div class="snowflake snowflake-fast" style="left: 75%; animation-delay: 1.9s; animation-duration: 8.9s;">❆</div>
<div class="snowflake snowflake-fast" style="left: 85%; animation-delay: 2.9s; animation-duration: 10.9s;">❅</div>
<div class="snowflake snowflake-fast" style="left: 95%; animation-delay: 0.4s; animation-duration: 9.4s;">❆</div>
<div class="snowflake snowflake-fast" style="left: 12%; animation-delay: 1.4s; animation-duration: 11.4s;">❅</div>
<div class="snowflake snowflake-medium snowflake-fast" style="left: 8%; animation-delay: 0.2s; animation-duration: 12s;">❅</div>
<div class="snowflake snowflake-medium snowflake-fast" style="left: 22%; animation-delay: 1.2s; animation-duration: 13s;">❆</div>
<div class="snowflake snowflake-medium snowflake-fast" style="left: 38%; animation-delay: 2.2s; animation-duration: 11.5s;">❅</div>
<div class="snowflake snowflake-medium snowflake-fast" style="left: 52%; animation-delay: 0.7s; animation-duration: 12.5s;">❆</div>
<div class="snowflake snowflake-medium snowflake-fast" style="left: 68%; animation-delay: 1.7s; animation-duration: 13.5s;">❅</div>
<div class="snowflake snowflake-medium snowflake-fast" style="left: 82%; animation-delay: 2.7s; animation-duration: 11.8s;">❆</div>
<div class="snowflake snowflake-medium snowflake-fast" style="left: 92%; animation-delay: 0.1s; animation-duration: 12.8s;">❅</div>
<div class="snowflake snowflake-medium snowflake-fast" style="left: 18%; animation-delay: 1.1s; animation-duration: 10.8s;">❆</div>
<div class="snowflake snowflake-medium snowflake-fast" style="left: 42%; animation-delay: 2.1s; animation-duration: 13.2s;">❅</div>
<div class="snowflake snowflake-medium snowflake-fast" style="left: 58%; animation-delay: 0.9s; animation-duration: 11.2s;">❆</div>
<div class="snowflake snowflake-large snowflake-fast" style="left: 14%; animation-delay: 0.5s; animation-duration: 5.5s;">❅</div>
<div class="snowflake snowflake-large snowflake-fast" style="left: 32%; animation-delay: 1.5s; animation-duration: 5s;">❆</div>
<div class="snowflake snowflake-large snowflake-fast" style="left: 48%; animation-delay: 2.5s; animation-duration: 6.5s;">❅</div>
<div class="snowflake snowflake-large snowflake-fast" style="left: 64%; animation-delay: 0.8s; animation-duration: 5.25s;">❆</div>
<div class="snowflake snowflake-large snowflake-fast" style="left: 78%; animation-delay: 1.8s; animation-duration: 5.75s;">❅</div>
<div class="snowflake snowflake-large snowflake-fast" style="left: 88%; animation-delay: 2.8s; animation-duration: 4.8s;">❆</div>
<div class="snowflake snowflake-large snowflake-fast" style="left: 36%; animation-delay: 1.3s; animation-duration: 5.1s;">❅</div>
<div class="snowflake snowflake-large snowflake-fast" style="left: 56%; animation-delay: 2.3s; animation-duration: 5.4s;">❆</div>
</div>
</div>
</body>
</html>}{<!-- ⭐ DEBUG DIV S PORTRAIT URL -->
<div style="display:none;" id="debug-portrait-url">(print: $portraitURL)</div>
<!-- HLAVNÍ INTRO OBRAZOVKA -->
<div id="combat-intro-screen" class="combat-intro-screen">
<!-- PORTRÉTY: Hero vlevo, Enemy vpravo -->
<div class="intro-portraits-container">
<!-- HERO PORTRAIT - VLEVO -->
<div class="intro-portrait-wrapper intro-hero">
<div class="intro-portrait-frame">
<div class="intro-portrait-image hero-portrait-background"></div>
</div>
<div class="intro-portrait-name">(print: $vybranaPostava)</div>
</div>
<!-- VS TEXT UPROSTŘED -->
<div class="intro-vs-text">VS</div>
<!-- ENEMY PORTRAIT - VPRAVO -->
<div class="intro-portrait-wrapper intro-enemy">
<div class="intro-portrait-frame">
<div class="intro-portrait-image enemy-portrait-background"></div>
</div>
<div class="intro-portrait-name">Trenér žoldáků</div>
</div>
</div>
<!-- DIALOG NEPŘÍTELE -->
<div class="intro-dialogue">
<p><strong>„Rád tě vidím. Dokonce máš i zbraň, co si projít závěrečnou lekci."</strong> pousmál se učitel a v ruce promnul svou obávanou Drtihlavku.</p>
<p><strong>„Jen tě trochu omráčím, abys věděl, jak to chodí v reálném životě!"</strong> Dodal jen tak mimochodem, aby ti sebral kuráž.</p>
</div>
<!-- TLAČÍTKA AKCÍ -->
<div class="intro-actions">
(t8n-depart: "dissolve") + (t8n-arrive: "dissolve")[<span class="CinzelButton">(text-colour:#1a1f13)[[[Teď a tady? Dobrá, jsem připraven|BattleIntro]]]</span>]
(t8n-depart: "dissolve") + (t8n-arrive: "dissolve")[<span class="CinzelButton">(text-colour:#1a1f13)[[[Pokusit se couvnout z boje|EscapeSuccess]]]</span>]
</div>
</div>
<!-- SCRIPT PRO NAČTENÍ HERO A ENEMY PORTRÉTU -->
<script>
(function() {
var attempts = 0;
var maxAttempts = 20;
function tryLoadPortraits() {
attempts++;
// ===== HERO PORTRAIT =====
var debugDiv = document.getElementById('debug-portrait-url');
var heroURL = '';
if (debugDiv && debugDiv.textContent.trim() !== '') {
heroURL = debugDiv.textContent.trim();
console.log('✅ Hero načteno z debug div:', heroURL);
} else if (typeof State !== 'undefined' && State.variables && State.variables.portraitURL) {
heroURL = State.variables.portraitURL;
console.log('✅ Hero načteno z State.variables:', heroURL);
}
if (!heroURL || heroURL === '' || heroURL.length < 10) {
if (attempts < maxAttempts) {
console.log('⏳ Čekám na portraitURL... pokus', attempts);
setTimeout(tryLoadPortraits, 100);
return;
} else {
console.error('❌ portraitURL nenalezena po', maxAttempts, 'pokusech!');
heroURL = 'https://files.catbox.moe/fews8p.jpg'; // Fallback
}
}
console.log('🎨 POUŽIJU HERO URL:', heroURL);
var heroBg = document.querySelector('.intro-portrait-image.hero-portrait-background');
if (heroBg) {
heroBg.style.backgroundImage = "url('" + heroURL + "')";
console.log('✅ Hero portrét aplikován do intro!');
} else {
console.error('❌ .hero-portrait-background nenalezen v intro!');
if (attempts < maxAttempts) {
setTimeout(tryLoadPortraits, 100);
return;
}
}
// ===== ENEMY PORTRAIT =====
var enemyURL = 'https://files.catbox.moe/p3c98l.jpg'; // ⭐ ZMĚŇ PODLE POTŘEBY
var enemyBg = document.querySelector('.intro-portrait-image.enemy-portrait-background');
if (enemyBg) {
enemyBg.style.backgroundImage = "url('" + enemyURL + "')";
console.log('✅ Enemy portrét aplikován do intro!');
} else {
console.error('❌ .enemy-portrait-background nenalezen v intro!');
}
}
setTimeout(tryLoadPortraits, 200);
})();
</script>
<style>
/* === HLAVNÍ KONTEJNER === */
.combat-intro-screen {
max-width: 800px;
margin: 30px auto;
padding: 40px;
background: rgba(140, 127, 105, 0.3);
border: 2px solid rgba(0, 0, 0, 0.2);
border-radius: 2px;
color: #000000;
box-shadow: 0 10px 20px rgba(0,0,0,0.1);
}
/* === KONTEJNER PORTRÉTŮ === */
.intro-portraits-container {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 30px;
gap: 20px;
}
/* === WRAPPER JEDNOTLIVÉHO PORTRÉTU === */
.intro-portrait-wrapper {
flex: 1;
text-align: center;
}
/* === RÁMEČEK PORTRÉTU === */
.intro-portrait-frame {
width: 200px;
height: 200px;
margin: 0 auto 15px;
border: 2px solid rgba(0, 0, 0, 0.2);
border-radius: 2px;
overflow: hidden;
box-shadow: 3px 3px 0px rgba(0,0,0,0.1);
}
/* === OBRÁZEK PORTRÉTU === */
.intro-portrait-image {
width: 100%;
height: 100%;
background-size: cover;
background-position: center;
background-repeat: no-repeat;
}
/* Specifické selectory pro intro portréty */
.intro-portrait-image.hero-portrait-background,
.intro-portrait-image.enemy-portrait-background {
position: relative;
z-index: 1;
}
/* === JMÉNO POD PORTRÉTEM === */
.intro-portrait-name {
font-weight: bold;
font-size: 1.1em;
color: #000000;
text-transform: uppercase;
letter-spacing: 1px;
}
/* === VS TEXT === */
.intro-vs-text {
font-size: 2.5em;
font-weight: bold;
color: rgba(0, 0, 0, 0.3);
text-shadow: 2px 2px 0px rgba(0,0,0,0.1);
padding: 0 20px;
}
/* === DIALOG === */
.intro-dialogue {
margin: 30px 0;
padding: 20px;
background: rgba(255, 255, 255, 0.1);
border-left: 3px solid rgba(0, 0, 0, 0.2);
text-align: left;
}
.intro-dialogue p {
margin: 10px 0;
line-height: 1.6;
}
.intro-dialogue strong {
color: #000000;
}
/* === TLAČÍTKA === */
.intro-actions {
margin-top: 30px;
display: flex;
flex-direction: column;
gap: 15px;
align-items: center;
}
.CinzelButton {
display: inline-block;
}
.CinzelButton a {
display: inline-block;
padding: 15px 40px;
background: transparent;
border: 2px solid rgba(0, 0, 0, 0.2);
border-radius: 2px;
color: #1a1f13;
text-decoration: none;
font-weight: bold;
transition: all 0.3s;
text-align: center;
min-width: 300px;
}
.CinzelButton a:hover {
background: #000000;
border-color: #000000;
color: #f5f5dc;
transform: scale(1.02);
cursor: pointer;
}
</style>
(display: "SnowDegreeAnimation")
(display: "InventoryHUD")}{
(set: $portraitURL to "https://files.catbox.moe/fews8p.jpg")
(set: $portraitVariant to 1)
{
(set: $equippedWeapons to (a:))
(set: $previousPassage to "")
(display: "TorchAnimation")
(display: "SettingsHUD")
(display: "Fullscreen")
(if: visits is 1)[
<!-- Spusť hlavní hudbu -->
(print: "<script>
changeMusic('https://ajksner.github.io/Prototyp-gamebook/Sound/Echoes%20of%20Valhalla.mp3', 0.5);
</script>")
]
(if: visits is 1)[
<!-- ============================================ -->
<!-- INICIALIZACE KARTOVÉHO SYSTÉMU - POUZE JEDNOU -->
<!-- ============================================ -->
<!-- ŠTÍTOVÉ HP -->
(set: $shieldHead to 0)
(set: $shieldChest to 0)
(set: $shieldLimbs to 0)
(set: $tempHP to 0)
<!-- ============================================ -->
<!-- VLASTNICTVÍ ZÁKLADNÍCH KARET - VŠE FALSE NA ZAČÁTKU -->
<!-- ============================================ -->
(set: $hasRest to false)
(set: $hasFist to false)
(set: $hasBreath to false)
(set: $hasLightCover to false)
(set: $hasCover to false)
(set: $hasKick to false)
<!-- ============================================ -->
<!-- EQUIPOVÁNÍ ZÁKLADNÍCH KARET - VŠE FALSE NA ZAČÁTKU -->
<!-- ============================================ -->
(set: $equippedRest to false)
(set: $equippedFist to false)
(set: $equippedBreathe to false)
(set: $equippedLightCover to false)
(set: $equippedCover to false)
(set: $equippedKick to false)
<!-- ============================================ -->
<!-- VLASTNICTVÍ POKROČILÝCH BOJOVÝCH KARET -->
<!-- ============================================ -->
(set: $hasKoralka to false)
(set: $koralkaCount to 0)
(set: $hasDodge to false)
(set: $hasCounter to false)
(set: $hasFeint to false)
(set: $hasPowerStrike to false)
(set: $hasDoubleSlash to false)
(set: $hasBerserkerRage to false)
(set: $hasPrecisionStrike to false)
(set: $hasExecute to false)
(set: $hasIronWill to false)
(set: $hasDeflect to false)
(set: $hasFortify to false)
(set: $hasParry to false)
(set: $hasSwiftStrike to false)
(set: $hasGuardedAttack to false)
(set: $hasTacticalStrike to false)
(set: $hasAdrenaline to false)
(set: $hasMeditate to false)
(set: $hasLastStand to false)
(set: $hasSecondWind to false)
<!-- ============================================ -->
<!-- EQUIPOVÁNÍ POKROČILÝCH BOJOVÝCH KARET -->
<!-- ============================================ -->
(set: $equippedKoralka to false)
(set: $equippedDodge to false)
(set: $equippedCounter to false)
(set: $equippedFeint to false)
(set: $equippedPowerStrike to false)
(set: $equippedDoubleSlash to false)
(set: $equippedBerserkerRage to false)
(set: $equippedPrecisionStrike to false)
(set: $equippedExecute to false)
(set: $equippedIronWill to false)
(set: $equippedDeflect to false)
(set: $equippedFortify to false)
(set: $equippedParry to false)
(set: $equippedSwiftStrike to false)
(set: $equippedGuardedAttack to false)
(set: $equippedTacticalStrike to false)
(set: $equippedAdrenaline to false)
(set: $equippedMeditate to false)
(set: $equippedLastStand to false)
(set: $equippedSecondWind to false)
<!-- ============================================ -->
<!-- SVITKY - VLASTNICTVÍ, POČTY A EQUIPOVÁNÍ -->
<!-- ============================================ -->
(set: $hasScrollFireball to false)
(set: $scrollFireballCount to 0)
(set: $equippedScrollFireball to false)
(set: $hasScrollHeal to false)
(set: $scrollHealCount to 0)
(set: $equippedScrollHeal to false)
(set: $hasScrollShield to false)
(set: $scrollShieldCount to 0)
(set: $equippedScrollShield to false)
(set: $hasScrollLightning to false)
(set: $scrollLightningCount to 0)
(set: $equippedScrollLightning to false)
(set: $hasScrollFrost to false)
(set: $scrollFrostCount to 0)
(set: $equippedScrollFrost to false)
(set: $hasScrollTeleport to false)
(set: $scrollTeleportCount to 0)
(set: $equippedScrollTeleport to false)
(set: $hasScrollRevive to false)
(set: $scrollReviveCount to 0)
(set: $equippedScrollRevive to false)
<!-- ============================================ -->
<!-- LEKTVARY - VLASTNICTVÍ, POČTY A EQUIPOVÁNÍ -->
<!-- ============================================ -->
(set: $hasPotionHealthSmall to false)
(set: $potionHealthSmallCount to 0)
(set: $equippedPotionHealthSmall to false)
(set: $hasPotionHealthMedium to false)
(set: $potionHealthMediumCount to 0)
(set: $equippedPotionHealthMedium to false)
(set: $hasPotionHealthLarge to false)
(set: $potionHealthLargeCount to 0)
(set: $equippedPotionHealthLarge to false)
(set: $hasPotionStrength to false)
(set: $potionStrengthCount to 0)
(set: $equippedPotionStrength to false)
(set: $hasPotionDefense to false)
(set: $potionDefenseCount to 0)
(set: $equippedPotionDefense to false)
(set: $hasPotionSpeed to false)
(set: $potionSpeedCount to 0)
(set: $equippedPotionSpeed to false)
(set: $hasPotionInvincibility to false)
(set: $potionInvincibilityCount to 0)
(set: $equippedPotionInvincibility to false)
<!-- ============================================ -->
<!-- OSTATNÍ SPOTŘEBNÍ PŘEDMĚTY -->
<!-- ============================================ -->
(set: $hasSmokeBomb to false)
(set: $smokeBombCount to 0)
(set: $equippedSmokeBomb to false)
(set: $hasHolyWater to false)
(set: $holyWaterCount to 0)
(set: $equippedHolyWater to false)
(set: $hasFireBomb to false)
(set: $fireBombCount to 0)
(set: $equippedFireBomb to false)
(set: $hasPoisonDagger to false)
(set: $poisonDaggerCount to 0)
(set: $equippedPoisonDagger to false)
(set: $hasThunderstone to false)
(set: $thunderstoneCount to 0)
(set: $equippedThunderstone to false)
(set: $hasProtectionAmulet to false)
(set: $protectionAmuletCount to 0)
(set: $equippedProtectionAmulet to false)
<!-- ============================================ -->
<!-- MAGICKÉ STŘELNÉ ZBRANĚ - VLASTNICTVÍ -->
<!-- ============================================ -->
(set: $hasFireballStaff to false)
(set: $hasLightningWand to false)
(set: $hasFrostOrb to false)
(set: $hasArcaneBlaster to false)
(set: $hasVoidScepter to false)
(set: $hasSunbeamRod to false)
(set: $hasShadowBolt to false)
(set: $hasChaosOrb to false)
(set: $hasStarfall to false)
(set: $hasMysticMissile to false)
<!-- ============================================ -->
<!-- LUKY A KUŠE - VLASTNICTVÍ -->
<!-- ============================================ -->
(set: $hasCompositeBow to false)
(set: $hasRecurveBow to false)
(set: $hasHeavyCrossbow to false)
(set: $hasRepeatingCrossbow to false)
(set: $hasWarbow to false)
(set: $hasSniperCrossbow to false)
(set: $hasHunterBow to false)
(set: $hasElvenBow to false)
(set: $hasDragonCrossbow to false)
(set: $hasWindbow to false)
<!-- ============================================ -->
<!-- BĚŽNÉ ZBRANĚ - VLASTNICTVÍ - **FORCE FALSE** -->
<!-- ============================================ -->
(set: $hasMace to false)
(set: $hasMorningstar to false)
(set: $hasSpear to false)
(set: $hasHalberd to false)
(set: $hasWarhammer to false)
(set: $hasBattleaxe to false)
(set: $hasScimitar to false)
(set: $hasRapier to false)
(set: $hasKatana to false)
(set: $hasClaymore to false)
(set: $hasLance to false)
(set: $hasFlail to false)
(set: $hasShortsword to false)
(set: $hasLongbow to false)
(set: $hasCrossbow to false)
<!-- ============================================ -->
<!-- LEGENDÁRNÍ ZBRANĚ - VLASTNICTVÍ -->
<!-- ============================================ -->
(set: $hasDragonslayer to false)
(set: $hasExcalibur to false)
(set: $hasShadowblade to false)
(set: $hasSoulreaper to false)
(set: $hasStormbringer to false)
(set: $hasGreatswordLegendary to false)
<!-- ============================================ -->
<!-- BRNĚNÍ - VLASTNICTVÍ A EQUIPOVÁNÍ -->
<!-- ============================================ -->
(set: $hasLeatherArmor to false)
(set: $equippedLeatherArmor to false)
(set: $hasChainmail to false)
(set: $equippedChainmail to false)
(set: $hasPlateArmor to false)
(set: $equippedPlateArmor to false)
<!-- ============================================ -->
<!-- ŠTÍTY - VLASTNICTVÍ A EQUIPOVÁNÍ -->
<!-- ============================================ -->
(set: $hasWoodenShield to false)
(set: $equippedWoodenShield to false)
(set: $hasIronShield to false)
(set: $equippedIronShield to false)
(set: $hasTowerShield to false)
(set: $equippedTowerShield to false)
<!-- NOTIFIKACE PRO EQUIPOVÁNÍ -->
(set: $lastEquipMessage to "")
(set: $showNotification to false)
<!-- ============================================ -->
<!-- MĚNA -->
<!-- ============================================ -->
(set: $gold to 15)
<!-- ============================================ -->
<!-- CENY ZBRANÍ - ZÁKLADNÍ -->
<!-- ============================================ -->
(set: $daggerPrice to 15)
(set: $swordPrice to 45)
(set: $axePrice to 80)
(set: $greatswordPrice to 150)
<!-- CENY ZBRANÍ - VYLEPŠENÉ VARIANTY -->
(set: $daggerQualityPrice to 30)
(set: $swordMasterPrice to 90)
(set: $axeWarPrice to 130)
(set: $greatswordLegendaryPrice to 250)
<!-- ============================================ -->
<!-- CENY BRNĚNÍ -->
<!-- ============================================ -->
(set: $leatherArmorPrice to 30)
(set: $chainmailPrice to 70)
(set: $plateArmorPrice to 120)
<!-- ============================================ -->
<!-- CENY ŠTÍTŮ -->
<!-- ============================================ -->
(set: $woodenShieldPrice to 20)
(set: $ironShieldPrice to 50)
(set: $towerShieldPrice to 90)
<!-- ============================================ -->
<!-- CENY SPOTŘEBNÍCH PŘEDMĚTŮ -->
<!-- ============================================ -->
(set: $potionPrice to 25)
(set: $obvazPrice to 5)
(set: $keyPrice to 100)
(set: $mapPrice to 40)
<!-- ============================================ -->
<!-- HODNOTY PRO PRODEJ (50% z nákupní ceny) -->
<!-- ============================================ -->
<!-- ZÁKLADNÍ ZBRANĚ -->
(set: $daggerSellPrice to 7)
(set: $swordSellPrice to 22)
(set: $axeSellPrice to 40)
(set: $greatswordSellPrice to 75)
<!-- VYLEPŠENÉ VARIANTY -->
(set: $daggerQualitySellPrice to 15)
(set: $swordMasterSellPrice to 45)
(set: $axeWarSellPrice to 65)
(set: $greatswordLegendarySellPrice to 125)
<!-- OSTATNÍ -->
(set: $leatherArmorSellPrice to 15)
(set: $chainmailSellPrice to 35)
(set: $plateArmorSellPrice to 60)
(set: $woodenShieldSellPrice to 10)
(set: $ironShieldSellPrice to 25)
(set: $towerShieldSellPrice to 45)
(set: $potionSellPrice to 12)
(set: $obvazSellPrice to 2)
<!-- ============================================ -->
<!-- VYBAVENÍ - STARTOVNÍ STAV (VŠE DEEQUIPLÉ) -->
<!-- ============================================ -->
(set: $hasWoodenSword to false)
(set: $equippedWeapon to "none")
(set: $equippedArmor to "none")
(set: $equippedShield to "none")
<!-- ============================================ -->
<!-- VLASTNICTVÍ ZBRANÍ - ZÁKLADNÍ (VŠE ZAMČENÉ) -->
<!-- ============================================ -->
(set: $hasDagger to false)
(set: $hasSwordInv to false)
(set: $hasAxe to false)
(set: $hasGreatsword to false)
<!-- VLASTNICTVÍ ZBRANÍ - VYLEPŠENÉ VARIANTY (VŠE ZAMČENÉ) -->
(set: $hasDaggerQuality to false)
(set: $hasSwordMaster to false)
(set: $hasAxeWar to false)
<!-- ============================================ -->
<!-- STATISTIKY HRÁČE -->
<!-- ============================================ -->
(set: $hp to 3)
(set: $maxHp to 7)
(set: $stamina to 15)
(set: $maxStamina to 16)
(set: $hracATK to 0)
(set: $atk to 0)
(set: $rychlost to 0)
<!-- ============================================ -->
<!-- SPOTŘEBNÍ PŘEDMĚTY -->
<!-- ============================================ -->
(set: $hasPotion to 0)
(set: $hasObvaz to 0)
(set: $hasKey to false)
(set: $hasMap to false)
<!-- ============================================ -->
<!-- TRAITY/STAVY -->
<!-- ============================================ -->
(set: $trait1 to false)
(set: $trait2 to false)
(set: $trait3 to false)
<!-- ============================================ -->
<!-- ZKUŠENOSTI -->
<!-- ============================================ -->
(set: $maxExperience to 20)
(set: $experience to 1)
<!-- ============================================ -->
<!-- OSTATNÍ -->
<!-- ============================================ -->
(set: $hasSword to false)
<!-- ============================================ -->
<!-- ⚠️ DŮLEŽITÉ: VALIDITA BALÍČKU -->
<!-- ============================================ -->
(set: $deckIsValid to false)
(set: $deckCards to (a:))
]
}
(align:"=><=")+(box:"X")[
<div style="position: relative; z-index: 1;">
<h5>Gamebook Filipa Ajksnera a Jana Eise</h5>
<h4>Kapitola 1.</h4><br>
<div class="text-divider divider-rpg"></div><br>
<h1>VÍTEJ, DOBRODRUHU!</h1>
<div class="text-divider divider-classic"></div>
<div class="gamebook-divider"></div><br>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Gamebook Glitch Effect</title>
<style>
body {
margin: 0;
padding: 20px;
background: #1a0f08;
font-family: 'Georgia', serif;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
.transition-in[data-t8n^=dissolve] {
-webkit-animation: appear 5s;
animation: appear 5s;
}
[data-t8n^=dissolve].transition-out {
-webkit-animation: appear 5s reverse;
animation: appear 5s reverse;
}
</style>
</head>
<body>
<div class="gamebook-container" id="container">
<div class="gamebook-box">
<span class="text-wrapper">
<span class="text-glitch" id="glitch">*Kroky osudu tě zavedly do mrazivých končin Nalgatského království. Budeš zde čelit nebezpečí, které na tebe číhá v temných stínech a nečisté lidské mysli.*</span>
</span>
</div>
</div>
<div class="tooltip-container">
(t8n-depart: "dissolve") + (t8n-arrive: "dissolve")[<span class="CinzelButton">(text-colour:#1a1f13)[[[Začít dobrodružství|Intro]]]
<span class="tooltip-bubble">(text-style:"subscript")[//Výběr postavy//]</span>]
</div>
</div>
(t8n-depart: "dissolve") + (t8n-arrive: "dissolve")[<span class="CinzelButton">(text-colour:#1a1f13)[[[Nácvik boje|Vlk]]]</span>]
<br>
<h5>[[Nastavení grafiky|Nastaveni]] <br>
[[testování|Test]]</h5>
(if: visits is 1)[
<!-- Spusť hlavní hudbu -->
(print: "<script>
changeMusic('https://ajksner.github.io/Prototyp-gamebook/Sound/Echoes%20of%20Valhalla.mp3', 0.5);
</script>")
]
]}{<!-- TacticalHandler - Detekce obrany nepřítele -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- DETEKCE TACTICAL KARTY -->
<!-- ═══════════════════════════════════════════════════════════════ -->
(if: $chosenPlayerCard contains "type" and $chosenPlayerCard's type is "tactical")[
<!-- ⚠️ KONTROLA: Je nepřítelova karta už vybraná? -->
(if: $chosenEnemyCard is 0)[
<!-- Nepřítel ještě nevybral kartu - nemůžeme zkontrolovat defense -->
(set: $tacticalCardActive to false)
(set: $tacticalMsg to "<span class='combat-tactical-fail'>Nepřítel se ještě nestačil bránit.</span>")
(set: $combatLog to $combatLog + (a: $tacticalMsg))
](else:)[
<!-- ✅ KONTROLA: Má nepřítel připravenou kartu s defense ≥ 1? -->
(if: $chosenEnemyCard contains "defense" and $chosenEnemyCard's defense >= 1)[
<!-- TACTICAL JE PLATNÝ - nepřítel má obranu -->
(set: $tacticalCardActive to true)
<!-- 💰 VRÁCENÍ STAMINY -->
(set: $stamina to $stamina + $chosenPlayerCard's cost)
<!-- 📝 LOG ZPRÁVA -->
(set: $tacticalMsg to "<span class='combat-tactical'>Přesně podle očekávání. Nepřítel se snažil bránit. Neztrácíš kondici.</span>")
(set: $combatLog to $combatLog + (a: $tacticalMsg))
](else:)[
<!-- ❌ TACTICAL NENÍ PLATNÝ - nepřítel nemá obranu -->
(set: $tacticalCardActive to false)
<!-- 📝 LOG ZPRÁVA -->
(set: $tacticalMsg to "<span class='combat-tactical-fail'>Nepřítel se nebránil a lehce tě to vyvedlo z rovnováhy.</span>")
(set: $combatLog to $combatLog + (a: $tacticalMsg))
]
]
](else:)[
<!-- Není tactical karta - nic nedělej -->
(set: $tacticalCardActive to false)
]
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- CSS STYLY PRO TACTICAL KARTU -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<style>
/* ⚡ TACTICAL KARTA - SPECIÁLNÍ VZHLED */
.tactical-card {
background: linear-gradient(135deg, rgba(70, 130, 180, 0.8), rgba(25, 25, 112, 0.9)) !important;
border-color: rgba(255, 215, 0, 0.6) !important;
position: relative;
overflow: hidden;
}
/* AKTIVNÍ TACTICAL KARTA - zlatý glow (když nepřítel má defense) */
.tactical-card.tactical-active {
box-shadow: 0 0 25px rgba(255, 215, 0, 0.8) !important;
border-color: rgba(255, 215, 0, 1) !important;
animation: tactical-ready 1.2s ease-in-out infinite;
}
@keyframes tactical-ready {
0%, 100% {
box-shadow: 0 0 20px rgba(255, 215, 0, 0.6);
}
50% {
box-shadow: 0 0 35px rgba(255, 215, 0, 1);
}
}
/* NEAKTIVNÍ TACTICAL KARTA - šedý glow (když nepřítel nemá defense) */
.tactical-card.tactical-inactive {
filter: grayscale(50%) brightness(0.7);
opacity: 0.8;
}
/* COMBAT LOG ZPRÁVY */
.combat-tactical {
color: #ffd700;
font-weight: bold;
text-shadow: 0 0 10px rgba(255, 215, 0, 0.9);
font-size: 1.1em;
}
.combat-tactical-fail {
color: #888;
font-style: italic;
}
/* INDIKÁTOR NA KARTĚ */
.tactical-card .card-name::after {
content: ' ⚡';
color: #ffd700;
text-shadow: 0 0 8px rgba(255, 215, 0, 0.8);
}
/* BONUS INDIKÁTOR (když je aktivní) */
.tactical-card.tactical-active .card-cost::after {
content: ' → ZDARMA';
color: #00ff00;
font-size: 10px;
font-weight: bold;
text-shadow: 0 0 5px rgba(0, 255, 0, 0.8);
}
</style>
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- JAVASCRIPT PRO DYNAMICKÉ TŘÍDY -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<script>
(function() {
setTimeout(function() {
// Najdi všechny tactical karty
var cards = document.querySelectorAll('.card.tactical-card');
cards.forEach(function(card) {
var cardName = card.querySelector('.card-name');
if (cardName && cardName.textContent.includes('Taktický úder')) {
// Zjisti, jestli nepřítel má defense ≥ 1
var enemyHasDefense = (typeof $chosenEnemyCard !== 'undefined'
&& $chosenEnemyCard !== 0
&& $chosenEnemyCard.defense !== undefined
&& $chosenEnemyCard.defense >= 1);
if (enemyHasDefense) {
card.classList.add('tactical-active');
card.classList.remove('tactical-inactive');
} else {
card.classList.add('tactical-inactive');
card.classList.remove('tactical-active');
}
}
});
}, 100);
})();
</script>
}{<!-- 🧪 AKTIVACE TEST MÓDU -->
(set: $testModeEnabled to true)
<!-- ============================================ -->
<!-- TEST PASÁŽ - VŠECHNY KARTY ODEMČENÉ -->
<!-- ============================================ -->
<!-- ŠTÍTOVÉ HP -->
(set: $shieldHead to 0)
(set: $shieldChest to 0)
(set: $shieldLimbs to 0)
(set: $tempHP to 0)
<!-- ============================================ -->
<!-- VLASTNICTVÍ ZÁKLADNÍCH KARET - VŠE TRUE -->
<!-- ============================================ -->
(set: $hasRest to true)
(set: $hasFist to true)
(set: $hasBreath to true)
(set: $hasLightCover to true)
(set: $hasCover to true)
(set: $hasKick to true)
<!-- ============================================ -->
<!-- EQUIPOVÁNÍ ZÁKLADNÍCH KARET - VŠE FALSE -->
<!-- ============================================ -->
(set: $equippedRest to false)
(set: $equippedFist to false)
(set: $equippedBreathe to false)
(set: $equippedLightCover to false)
(set: $equippedCover to false)
(set: $equippedKick to false)
<!-- ============================================ -->
<!-- VLASTNICTVÍ POKROČILÝCH BOJOVÝCH KARET - VŠE TRUE -->
<!-- ============================================ -->
(set: $hasKoralka to true)
(set: $koralkaCount to 5)
(set: $hasDodge to true)
(set: $hasCounter to true)
(set: $hasFeint to true)
(set: $hasPowerStrike to true)
(set: $hasDoubleSlash to true)
(set: $hasBerserkerRage to true)
(set: $hasPrecisionStrike to true)
(set: $hasExecute to true)
(set: $hasIronWill to true)
(set: $hasDeflect to true)
(set: $hasFortify to true)
(set: $hasParry to true)
(set: $hasSwiftStrike to true)
(set: $hasGuardedAttack to true)
(set: $hasTacticalStrike to true)
(set: $hasAdrenaline to true)
(set: $hasMeditate to true)
(set: $hasLastStand to true)
(set: $hasSecondWind to true)
<!-- ============================================ -->
<!-- EQUIPOVÁNÍ POKROČILÝCH BOJOVÝCH KARET - VŠE FALSE -->
<!-- ============================================ -->
(set: $equippedKoralka to false)
(set: $equippedDodge to false)
(set: $equippedCounter to false)
(set: $equippedFeint to false)
(set: $equippedPowerStrike to false)
(set: $equippedDoubleSlash to false)
(set: $equippedBerserkerRage to false)
(set: $equippedPrecisionStrike to false)
(set: $equippedExecute to false)
(set: $equippedIronWill to false)
(set: $equippedDeflect to false)
(set: $equippedFortify to false)
(set: $equippedParry to false)
(set: $equippedSwiftStrike to false)
(set: $equippedGuardedAttack to false)
(set: $equippedTacticalStrike to false)
(set: $equippedAdrenaline to false)
(set: $equippedMeditate to false)
(set: $equippedLastStand to false)
(set: $equippedSecondWind to false)
<!-- ============================================ -->
<!-- SVITKY - VŠE TRUE S POČTY -->
<!-- ============================================ -->
(set: $hasScrollFireball to true)
(set: $scrollFireballCount to 3)
(set: $equippedScrollFireball to false)
(set: $hasScrollHeal to true)
(set: $scrollHealCount to 3)
(set: $equippedScrollHeal to false)
(set: $hasScrollShield to true)
(set: $scrollShieldCount to 3)
(set: $equippedScrollShield to false)
(set: $hasScrollLightning to true)
(set: $scrollLightningCount to 3)
(set: $equippedScrollLightning to false)
(set: $hasScrollFrost to true)
(set: $scrollFrostCount to 3)
(set: $equippedScrollFrost to false)
(set: $hasScrollTeleport to true)
(set: $scrollTeleportCount to 3)
(set: $equippedScrollTeleport to false)
(set: $hasScrollRevive to true)
(set: $scrollReviveCount to 1)
(set: $equippedScrollRevive to false)
<!-- ============================================ -->
<!-- LEKTVARY - VŠE TRUE S POČTY -->
<!-- ============================================ -->
(set: $hasPotionHealthSmall to true)
(set: $potionHealthSmallCount to 5)
(set: $equippedPotionHealthSmall to false)
(set: $hasPotionHealthMedium to true)
(set: $potionHealthMediumCount to 3)
(set: $equippedPotionHealthMedium to false)
(set: $hasPotionHealthLarge to true)
(set: $potionHealthLargeCount to 2)
(set: $equippedPotionHealthLarge to false)
(set: $hasPotionStrength to true)
(set: $potionStrengthCount to 3)
(set: $equippedPotionStrength to false)
(set: $hasPotionDefense to true)
(set: $potionDefenseCount to 3)
(set: $equippedPotionDefense to false)
(set: $hasPotionSpeed to true)
(set: $potionSpeedCount to 3)
(set: $equippedPotionSpeed to false)
(set: $hasPotionInvincibility to true)
(set: $potionInvincibilityCount to 1)
(set: $equippedPotionInvincibility to false)
<!-- ============================================ -->
<!-- OSTATNÍ SPOTŘEBNÍ PŘEDMĚTY - VŠE TRUE S POČTY -->
<!-- ============================================ -->
(set: $hasSmokeBomb to true)
(set: $smokeBombCount to 3)
(set: $equippedSmokeBomb to false)
(set: $hasHolyWater to true)
(set: $holyWaterCount to 3)
(set: $equippedHolyWater to false)
(set: $hasFireBomb to true)
(set: $fireBombCount to 3)
(set: $equippedFireBomb to false)
(set: $hasPoisonDagger to true)
(set: $poisonDaggerCount to 3)
(set: $equippedPoisonDagger to false)
(set: $hasThunderstone to true)
(set: $thunderstoneCount to 3)
(set: $equippedThunderstone to false)
(set: $hasProtectionAmulet to true)
(set: $protectionAmuletCount to 2)
(set: $equippedProtectionAmulet to false)
<!-- ============================================ -->
<!-- MAGICKÉ STŘELNÉ ZBRANĚ - VŠE TRUE -->
<!-- ============================================ -->
(set: $hasFireballStaff to true)
(set: $hasLightningWand to true)
(set: $hasFrostOrb to true)
(set: $hasArcaneBlaster to true)
(set: $hasVoidScepter to true)
(set: $hasSunbeamRod to true)
(set: $hasShadowBolt to true)
(set: $hasChaosOrb to true)
(set: $hasStarfall to true)
(set: $hasMysticMissile to true)
<!-- ============================================ -->
<!-- LUKY A KUŠE - VŠE TRUE -->
<!-- ============================================ -->
(set: $hasCompositeBow to true)
(set: $hasRecurveBow to true)
(set: $hasHeavyCrossbow to true)
(set: $hasRepeatingCrossbow to true)
(set: $hasWarbow to true)
(set: $hasSniperCrossbow to true)
(set: $hasHunterBow to true)
(set: $hasElvenBow to true)
(set: $hasDragonCrossbow to true)
(set: $hasWindbow to true)
<!-- ============================================ -->
<!-- BĚŽNÉ ZBRANĚ - VŠE TRUE -->
<!-- ============================================ -->
(set: $hasWoodenSword to true)
(set: $hasDagger to true)
(set: $hasDaggerQuality to true)
(set: $hasSwordInv to true)
(set: $hasSwordMaster to true)
(set: $hasAxe to true)
(set: $hasAxeWar to true)
(set: $hasGreatsword to true)
(set: $hasMace to true)
(set: $hasMorningstar to true)
(set: $hasSpear to true)
(set: $hasHalberd to true)
(set: $hasWarhammer to true)
(set: $hasBattleaxe to true)
(set: $hasScimitar to true)
(set: $hasRapier to true)
(set: $hasKatana to true)
(set: $hasClaymore to true)
(set: $hasLance to true)
(set: $hasFlail to true)
(set: $hasShortsword to true)
(set: $hasLongbow to true)
(set: $hasCrossbow to true)
<!-- ============================================ -->
<!-- LEGENDÁRNÍ ZBRANĚ - VŠE TRUE -->
<!-- ============================================ -->
(set: $hasDragonslayer to true)
(set: $hasExcalibur to true)
(set: $hasShadowblade to true)
(set: $hasSoulreaper to true)
(set: $hasStormbringer to true)
(set: $hasGreatswordLegendary to true)
<!-- ============================================ -->
<!-- BRNĚNÍ - VŠE TRUE -->
<!-- ============================================ -->
(set: $hasLeatherArmor to true)
(set: $equippedLeatherArmor to false)
(set: $hasChainmail to true)
(set: $equippedChainmail to false)
(set: $hasPlateArmor to true)
(set: $equippedPlateArmor to false)
<!-- ============================================ -->
<!-- ŠTÍTY - VŠE TRUE -->
<!-- ============================================ -->
(set: $hasWoodenShield to true)
(set: $equippedWoodenShield to false)
(set: $hasIronShield to true)
(set: $equippedIronShield to false)
(set: $hasTowerShield to true)
(set: $equippedTowerShield to false)
<!-- NOTIFIKACE PRO EQUIPOVÁNÍ -->
(set: $lastEquipMessage to "")
(set: $showNotification to false)
<!-- ============================================ -->
<!-- MĚNA A OSTATNÍ -->
<!-- ============================================ -->
(set: $gold to 9999)
(set: $hp to 100)
(set: $maxHp to 200)
(set: $stamina to 100)
(set: $maxStamina to 200)
<!-- SPOTŘEBNÍ PŘEDMĚTY -->
(set: $hasPotion to 10)
(set: $hasObvaz to 10)
(set: $hasKey to true)
(set: $hasMap to true)
</script>
(display: "InventoryHUD")
(set: $finalAtk to $atk)
(set: $finalDef to 0)
(set: $finalRychlost to $rychlost)
(set: $finalStaminaBonus to 0)
(set: $hracATK to 0)
(set: $atk to 0)
(if: visits is 1)[
(set: $gold to 1005)
(set: $returnPassage to "Test")
(set: $daggerPrice to 15, $swordPrice to 45, $axePrice to 80, $greatswordPrice to 150)
(set: $daggerQualityPrice to 30, $swordMasterPrice to 90, $axeWarPrice to 130, $greatswordLegendaryPrice to 250)
(set: $leatherArmorPrice to 30, $chainmailPrice to 70, $plateArmorPrice to 120)
(set: $woodenShieldPrice to 20, $ironShieldPrice to 50, $towerShieldPrice to 90)
<button id="test-back-btn" class="test-button hidden" onclick="goBackHistory()">
⬅ Zpět (TEST)
</button>
(if: $equippedWeapon is "dagger")[(set: $finalAtk to $finalAtk + 1)]
(else-if: $equippedWeapon is "woodenSword")[(set: $finalRychlost to $finalRychlost + 1)]
(else-if: $equippedWeapon is "daggerQuality")[(set: $finalAtk to $finalAtk + 1)(set: $finalStaminaBonus to $finalStaminaBonus + 1)]
(else-if: $equippedWeapon is "sword")[(set: $finalAtk to $finalAtk + 2)(set: $finalStaminaBonus to $finalStaminaBonus + 1)]
(else-if: $equippedWeapon is "swordMaster")[(set: $finalAtk to $finalAtk + 2)(set: $finalStaminaBonus to $finalStaminaBonus + 2)]
(else-if: $equippedWeapon is "axe")[(set: $finalAtk to $finalAtk + 3)]
(else-if: $equippedWeapon is "axeWar")[(set: $finalAtk to $finalAtk + 3)(set: $finalStaminaBonus to $finalStaminaBonus + 1)]
(else-if: $equippedWeapon is "greatsword")[(set: $finalAtk to $finalAtk + 3)(set: $finalStaminaBonus to $finalStaminaBonus + 2)]
(else-if: $equippedWeapon is "greatswordLegendary")[(set: $finalAtk to $finalAtk + 3)(set: $finalStaminaBonus to $finalStaminaBonus + 3)]
(if: $equippedArmor is "leather")[(set: $finalDef to $finalDef + 1)]
(else-if: $equippedArmor is "chain")[(set: $finalDef to $finalDef + 2)]
(else-if: $equippedArmor is "plate")[(set: $finalDef to $finalDef + 3)]
(if: $equippedShield is "wooden")[(set: $finalDef to $finalDef + 1)]
(else-if: $equippedShield is "iron")[(set: $finalDef to $finalDef + 2)]
(else-if: $equippedShield is "tower")[(set: $finalDef to $finalDef + 3)]
(if: $trait1)[(set: $finalAtk to $finalAtk - 1)]
(if: $trait2)[(set: $finalRychlost to $finalRychlost - 5)]
(set: $umeni to 0)
<div style="text-align: center; margin: 40px 0;">
<h2 style="color: #d4af37; font-family: 'Cinzel', serif;">🎮 TESTOVACÍ MENU 🎮</h2>
<p style="color: #d4c5a9; font-style: italic;">Vyberte si testovací scénář</p>
</div>
<div style="background: rgba(20,20,20,0.8); border: 2px solid #735b29; border-radius: 12px; padding: 30px; max-width: 600px; margin: 0 auto;">
<h3 style="color: #d4af37; font-family: 'Cinzel', serif; border-bottom: 1px solid #735b29; padding-bottom: 10px;">⚔️ Bojové testy</h3>
[[ Test pasáží)|PrvniPasaz]]
[[🎴 Test souboje se včemi kartami (Start)|Start]]
[[⚔️ Tutorial boj - silnější hráč|TutorialBoj]]
[[✅ Již vyhraný souboj s lapkou|mec]]
<h3 style="color: #d4af37; font-family: 'Cinzel', serif; border-bottom: 1px solid #735b29; padding-bottom: 10px; margin-top: 30px;">🛒 Obchod a inventář</h3>
[[🏪 Navštívit obchodníka|ShopMerchant]]
[[🎒 Inventář bojových karet|InventoryCombat]]
<h3 style="color: #d4af37; font-family: 'Cinzel', serif; border-bottom: 1px solid #735b29; padding-bottom: 10px; margin-top: 30px;">🗺️ Navigace</h3>
[[🗺️ Mapa všech lokací|vynerlokaci vsechny lokace]]
<!--tlacitko s lukem-->
(link: "🏹 TEST: Hunter Build (Jen vybrané karty)")[
(set: $hasRest to false, $hasFist to false, $hasBreath to false, $hasLightCover to false, $hasCover to false, $hasKick to false)
(set: $hasKoralka to false, $hasDodge to false, $hasCounter to false, $hasFeint to false)
(set: $hasPowerStrike to false, $hasDoubleSlash to false, $hasBerserkerRage to false)
(set: $hasPrecisionStrike to false, $hasExecute to false, $hasIronWill to false)
(set: $hasDeflect to false, $hasFortify to false, $hasParry to false)
(set: $hasSwiftStrike to false, $hasGuardedAttack to false, $hasTacticalStrike to false)
(set: $hasAdrenaline to false, $hasMeditate to false, $hasLastStand to false, $hasSecondWind to false)
(set: $hasCompositeBow to false, $hasRecurveBow to false, $hasHeavyCrossbow to false, $hasRepeatingCrossbow to false)
(set: $hasWarbow to false, $hasSniperCrossbow to false, $hasHunterBow to false, $hasElvenBow to false, $hasDragonCrossbow to false, $hasWindbow to false)
(set: $hasFireballStaff to false, $hasLightningWand to false, $hasFrostOrb to false, $hasArcaneBlaster to false, $hasVoidScepter to false)
(set: $hasSunbeamRod to false, $hasShadowBolt to false, $hasChaosOrb to false, $hasStarfall to false, $hasMysticMissile to false)
(set: $hasWoodenSword to false, $hasDagger to false, $hasDaggerQuality to false, $hasSwordInv to false, $hasSwordMaster to false)
(set: $hasAxe to false, $hasAxeWar to false, $hasGreatsword to false, $hasMace to false, $hasMorningstar to false)
(set: $hasSpear to false, $hasHalberd to false, $hasWarhammer to false, $hasBattleaxe to false, $hasScimitar to false)
(set: $hasRapier to false, $hasKatana to false, $hasClaymore to false, $hasLance to false, $hasFlail to false)
(set: $hasShortsword to false, $hasLongbow to false, $hasCrossbow to false)
(set: $hasDragonslayer to false, $hasExcalibur to false, $hasShadowblade to false, $hasSoulreaper to false, $hasStormbringer to false, $hasGreatswordLegendary to false)
(set: $hasScrollFireball to false, $hasScrollHeal to false, $hasScrollShield to false, $hasScrollLightning to false, $hasScrollFrost to false, $hasScrollTeleport to false, $hasScrollRevive to false)
(set: $hasPotionHealthSmall to false, $hasPotionHealthMedium to false, $hasPotionHealthLarge to false, $hasPotionStrength to false, $hasPotionDefense to false, $hasPotionSpeed to false, $hasPotionInvincibility to false)
(set: $hasSmokeBomb to false, $hasHolyWater to false, $hasFireBomb to false, $hasPoisonDagger to false, $hasThunderstone to false, $hasProtectionAmulet to false)
(set: $hasLeatherArmor to false, $hasChainmail to false, $hasPlateArmor to false)
(set: $hasWoodenShield to false, $hasIronShield to false, $hasTowerShield to false)
(set: $hasHunterBow to true)
(set: $hasFist to true)
(set: $hasPrecisionStrike to true)
(set: $hasExecute to true)
(set: $hasParry to true)
(set: $hasTacticalStrike to true)
(set: $hasAdrenaline to true)
(set: $hasMeditate to true)
(set: $hasLastStand to true)
(set: $hasSecondWind to true)
(set: $hasSkullcrusher to true)
(goto: "Start")
]
</div>
<script>
// 1. Funkce pro návrat v historii (v prohlížeči)
function goBackHistory() {
window.history.back();
// Pokud používáš specifický systém (např. Twine nebo vlastní engine),
// nahraď window.history.back() svou funkcí, např. State.backward()
}
// 2. Funkce, kterou zavoláš, když chceš tlačítko ukázat
function enableTestMode() {
const btn = document.getElementById('test-back-btn');
if (btn) {
btn.classList.remove('hidden');
console.log("Testovací režim aktivován: Tlačítko zpět zobrazeno.");
}
}</script>
}{
<style>
/* Zpoždění jen pro pochodně a plameny */
#torch-scene-container {
animation: torchDelayFadeIn 0.6s ease-out forwards;
animation-delay: 0.6s;
opacity: 0;
}
@keyframes torchDelayFadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="torch-scene-container" style="position: fixed...">
<!-- zbytek kódu pokračuje -->
<div id="torch-scene-container" style="position: fixed; bottom: 0%; transform: translateY(-50%); left: 0; right: 0; width: 100%; height: 80vh; max-height: 500px; z-index: 0; pointer-events: none;">
<!-- Kontejner pro levý obrázek + plamen -->
<div class="image-with-flame" style="position: absolute; left: 0; top: 0px; height: 150%;">
<img src="https://files.catbox.moe/k1wlon.png"
class="torch-side-image"
style="height: 100%; width: auto; opacity: 1.5; animation: fadeInSide 1s ease-in-out; display: block;">
<!-- Plamen vlevo (na konkrétní pozici nad obrázkem) -->
<div class="flame-position" style="position: absolute; left: 72%; top: -8%; z-index: 2;">
<div class="flame-container" style="position: relative; width: 80px; height: 100px;">
<!-- Vnitřní bílý plamen -->
<div class="flame flame-inner" style="position: absolute; bottom: 0; left: 50%; transform: translateX(-50%); width: 25px; height: 45px; background: radial-gradient(ellipse at center bottom, #ffffff 0%, #e0ffff 25%, #00ffff 50%, transparent 100%); border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%; filter: blur(1px); animation: flicker-inner 0.15s infinite alternate, sway 2s ease-in-out infinite;">
</div>
<!-- Střední tyrkysový plamen -->
<div class="flame flame-middle" style="position: absolute; bottom: 0; left: 50%; transform: translateX(-50%); width: 40px; height: 65px; background: radial-gradient(ellipse at center bottom, #00ffff 0%, #00d4d4 35%, #00a8a8 65%, transparent 100%); border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%; filter: blur(2px); animation: flicker-middle 0.2s infinite alternate, sway 2.5s ease-in-out infinite;"></div>
<!-- Vnější modro-tyrkysový plamen -->
<div class="flame flame-outer" style="position: absolute; bottom: 0; left: 50%; transform: translateX(-50%); width: 55px; height: 85px; background: radial-gradient(ellipse at center bottom, #00d4d4 0%, #0099cc 45%, #006699 75%, rgba(0, 102, 153, 0.3) 90%, transparent 100%); border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%; filter: blur(3px); animation: flicker-outer 0.25s infinite alternate, sway 3s ease-in-out infinite; opacity: 0.85;"></div>
<!-- Extra detaily plamene -->
<div class="flame-detail" style="position: absolute; bottom: 5px; left: 50%; transform: translateX(-50%); width: 15px; height: 30px; background: radial-gradient(ellipse at center bottom, #ffffff 0%, #00ffff 50%, transparent 100%); border-radius: 50%; filter: blur(2px); animation: flicker-detail 0.1s infinite alternate, sway 1.8s ease-in-out infinite 0.5s; opacity: 0.9;"></div>
<!-- Jiskry - tyrkysové -->
<div class="spark" style="position: absolute; bottom: 60px; left: 20px; width: 5px; height: 5px; background: #00ffff; border-radius: 50%; box-shadow: 0 0 10px #00ffff, 0 0 16px #00ffff; animation: spark-rise 3s infinite ease-out;"></div>
<div class="spark" style="position: absolute; bottom: 55px; left: 35px; width: 4px; height: 4px; background: #66ffff; border-radius: 50%; box-shadow: 0 0 8px #66ffff, 0 0 12px #00ffff; animation: spark-rise 3.5s infinite ease-out 0.2s;"></div>
<div class="spark" style="position: absolute; bottom: 65px; left: 15px; width: 4px; height: 4px; background: #00d4d4; border-radius: 50%; box-shadow: 0 0 8px #00d4d4, 0 0 12px #00ffff; animation: spark-rise 3.2s infinite ease-out 0.4s;"></div>
<div class="spark" style="position: absolute; bottom: 58px; left: 30px; width: 5px; height: 5px; background: #33ffff; border-radius: 50%; box-shadow: 0 0 10px #33ffff, 0 0 14px #00ffff; animation: spark-rise 3.8s infinite ease-out 0.6s;"></div>
<div class="spark" style="position: absolute; bottom: 62px; left: 25px; width: 3px; height: 3px; background: #fff; border-radius: 50%; box-shadow: 0 0 12px #00ffff, 0 0 18px #00ffff; animation: spark-rise 3.3s infinite ease-out 0.8s;"></div>
<div class="spark" style="position: absolute; bottom: 68px; left: 18px; width: 4px; height: 4px; background: #00ffff; border-radius: 50%; box-shadow: 0 0 9px #00ffff, 0 0 13px #00ffff; animation: spark-rise 3.6s infinite ease-out 1s;"></div>
<div class="spark" style="position: absolute; bottom: 57px; left: 32px; width: 3px; height: 3px; background: #99ffff; border-radius: 50%; box-shadow: 0 0 8px #99ffff, 0 0 12px #00ffff; animation: spark-rise 3.4s infinite ease-out 1.2s;"></div>
<!-- Záře plamene -->
<div style="position: absolute; top: 10px; left: 50%; transform: translateX(-50%); width: 120px; height: 120px; background: radial-gradient(circle, rgba(0,255,255,0.5) 0%, rgba(0,212,212,0.3) 40%, transparent 70%); border-radius: 50%; animation: glow-pulse 2s ease-in-out infinite;"></div>
<!-- Kouř - zviditelnější a více kouře -->
<div class="smoke" style="position: absolute; top: -20px; left: 40%; transform: translateX(-50%); width: 35px; height: 45px; background: radial-gradient(ellipse at bottom, rgba(150,220,240,0.7) 0%, rgba(100,180,200,0.5) 40%, transparent 70%); border-radius: 50%; filter: blur(6px); animation: smoke-rise 5s infinite ease-out;"></div>
<div class="smoke" style="position: absolute; top: -25px; left: 45%; transform: translateX(-50%); width: 30px; height: 40px; background: radial-gradient(ellipse at bottom, rgba(130,200,220,0.65) 0%, rgba(80,160,180,0.45) 40%, transparent 70%); border-radius: 50%; filter: blur(8px); animation: smoke-rise-twist 5.5s infinite ease-out 0.8s;"></div>
<div class="smoke" style="position: absolute; top: -30px; left: 48%; transform: translateX(-50%); width: 28px; height: 38px; background: radial-gradient(ellipse at bottom, rgba(120,200,230,0.6) 0%, rgba(70,150,170,0.4) 40%, transparent 70%); border-radius: 50%; filter: blur(9px); animation: smoke-rise-spiral 6s infinite ease-out 1.5s;"></div>
<div class="smoke" style="position: absolute; top: -15px; left: 52%; transform: translateX(-50%); width: 32px; height: 42px; background: radial-gradient(ellipse at bottom, rgba(140,210,230,0.68) 0%, rgba(90,170,190,0.48) 40%, transparent 70%); border-radius: 50%; filter: blur(7px); animation: smoke-rise-wave 5.8s infinite ease-out 0.3s;"></div>
<div class="smoke" style="position: absolute; top: -22px; left: 43%; transform: translateX(-50%); width: 29px; height: 39px; background: radial-gradient(ellipse at bottom, rgba(135,205,225,0.72) 0%, rgba(85,165,185,0.52) 40%, transparent 70%); border-radius: 50%; filter: blur(8px); animation: smoke-rise-twist 6.2s infinite ease-out 1.8s;"></div>
<div class="smoke" style="position: absolute; top: -18px; left: 50%; transform: translateX(-50%); width: 33px; height: 44px; background: radial-gradient(ellipse at bottom, rgba(145,215,235,0.69) 0%, rgba(95,175,195,0.49) 40%, transparent 70%); border-radius: 50%; filter: blur(7px); animation: smoke-rise-spiral 5.3s infinite ease-out 2.5s;"></div>
</div>
</div>
</div>
<!-- Kontejner pro pravý obrázek + plamen -->
<div class="image-with-flame" style="position: absolute; right: 0; top: 0; height: 150%;">
<img src="https://files.catbox.moe/3oyj2s.png"
class="torch-side-image"
style="height: 100%; width: auto; opacity: 1.5; transform: scaleX(-1); animation: fadeInSide 1s ease-in-out; display: block;">
<!-- Plamen vpravo (nad pravým obrázkem) -->
<div class="flame-position" style="position: absolute; right: 80%; top: -8%; z-index: 2;">
<div class="flame-container" style="position: relative; width: 80px; height: 100px;">
<!-- Základna plamene -->
<div class="flame-base" style="position: absolute; bottom: -10px; left: 50%; transform: translateX(-50%); width: 50px; height: 20px; background: rgba(0, 100, 150, 0.4); border-radius: 50%; filter: blur(8px); z-index: 0;"></div>
<!-- Vnější modrý plamen -->
<div class="flame flame-outer" style="position: absolute; bottom: 0; left: 50%; transform: translateX(-50%); width: 55px; height: 85px; background: radial-gradient(ellipse at center bottom, #00d4d4 0%, #0099cc 35%, #006699 65%, rgba(0, 102, 153, 0.3) 85%, transparent 100%); border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%; filter: blur(3px); animation: flicker-outer 0.25s infinite alternate, sway 3s ease-in-out infinite 0.2s; opacity: 0.85; z-index: 1;"></div>
<!-- Střední tyrkysový plamen -->
<div class="flame flame-middle" style="position: absolute; bottom: 0; left: 50%; transform: translateX(-50%); width: 40px; height: 70px; background: radial-gradient(ellipse at center bottom, #00ffff 0%, #00d4d4 30%, #00a8a8 60%, transparent 90%); border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%; filter: blur(2px); animation: flicker-middle 0.2s infinite alternate, sway 2.5s ease-in-out infinite 0.5s; z-index: 2;"></div>
<!-- Vnitřní bílý plamen -->
<div class="flame flame-inner" style="position: absolute; bottom: 0; left: 50%; transform: translateX(-50%); width: 25px; height: 50px; background: radial-gradient(ellipse at center bottom, #ffffff 0%, #e0ffff 20%, #00ffff 45%, transparent 85%); border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%; filter: blur(1px); animation: flicker-inner 0.15s infinite alternate, sway 2s ease-in-out infinite 0.8s; z-index: 3;"></div>
<!-- Horní jazýček plamene -->
<div class="flame-tip" style="position: absolute; bottom: 35px; left: 50%; transform: translateX(-50%); width: 15px; height: 35px; background: radial-gradient(ellipse at center bottom, #ffffff 0%, #00ffff 40%, transparent 85%); border-radius: 50%; filter: blur(2px); animation: flicker-tip 0.12s infinite alternate, sway 1.8s ease-in-out infinite 1s; opacity: 0.9; z-index: 4;"></div>
<!-- Jiskry -->
<div class="spark" style="position: absolute; bottom: 60px; left: 20px; width: 4px; height: 4px; background: #00ffff; border-radius: 50%; box-shadow: 0 0 8px #00ffff, 0 0 12px #00ffff; animation: spark-rise 2.5s infinite ease-out 0.2s;"></div>
<div class="spark" style="position: absolute; bottom: 55px; left: 35px; width: 3px; height: 3px; background: #66ffff; border-radius: 50%; box-shadow: 0 0 6px #66ffff, 0 0 10px #00ffff; animation: spark-rise 3s infinite ease-out 0.5s;"></div>
<div class="spark" style="position: absolute; bottom: 65px; left: 15px; width: 3px; height: 3px; background: #00d4d4; border-radius: 50%; box-shadow: 0 0 6px #00d4d4, 0 0 10px #00ffff; animation: spark-rise 2.8s infinite ease-out 0.8s;"></div>
<div class="spark" style="position: absolute; bottom: 58px; left: 30px; width: 4px; height: 4px; background: #33ffff; border-radius: 50%; box-shadow: 0 0 8px #33ffff, 0 0 12px #00ffff; animation: spark-rise 3.2s infinite ease-out 1.1s;"></div>
<!-- Záře plamene -->
<div style="position: absolute; top: 10px; left: 50%; transform: translateX(-50%); width: 120px; height: 120px; background: radial-gradient(circle, rgba(0,255,255,0.5) 0%, rgba(0,212,212,0.3) 40%, transparent 70%); border-radius: 50%; animation: glow-pulse 2s ease-in-out infinite 0.5s; z-index: 0;"></div>
</div>
<div class="smoke" style="position: absolute; top: -30px; left: 52%; transform: translateX(-50%); width: 28px; height: 38px; background: radial-gradient(ellipse at bottom, rgba(120,200,230,0.6) 0%, rgba(70,150,170,0.4) 40%, transparent 70%); border-radius: 50%; filter: blur(9px); animation: smoke-rise-spiral 6s infinite ease-out 2s;"></div>
<div class="smoke" style="position: absolute; top: -15px; left: 48%; transform: translateX(-50%); width: 32px; height: 42px; background: radial-gradient(ellipse at bottom, rgba(140,210,230,0.68) 0%, rgba(90,170,190,0.48) 40%, transparent 70%); border-radius: 50%; filter: blur(7px); animation: smoke-rise-wave 5.8s infinite ease-out 0.8s;"></div>
<div class="smoke" style="position: absolute; top: -22px; left: 57%; transform: translateX(-50%); width: 29px; height: 39px; background: radial-gradient(ellipse at bottom, rgba(135,205,225,0.72) 0%, rgba(85,165,185,0.52) 40%, transparent 70%); border-radius: 50%; filter: blur(8px); animation: smoke-rise-twist 6.2s infinite ease-out 2.3s;"></div>
<div class="smoke" style="position: absolute; top: -18px; left: 50%; transform: translateX(-50%); width: 33px; height: 44px; background: radial-gradient(ellipse at bottom, rgba(145,215,235,0.69) 0%, rgba(95,175,195,0.49) 40%, transparent 70%); border-radius: 50%; filter: blur(7px); animation: smoke-rise-spiral 5.3s infinite ease-out 3s;"></div>
</div>
</div>
</div>
</div>
<!-- Animovaná vignetace s efektem ohně -->
<div id="fire-vignette" style="position: fixed; top: 0; left: 0; right: 0; bottom: 0; pointer-events: none; z-index: 1;">
<!-- Hlavní vignetace -->
<div style="position: absolute; inset: 0; background: radial-gradient(ellipse at center, transparent 0%, transparent 30%, rgba(0, 50, 60, 0.3) 60%, rgba(0, 40, 50, 0.6) 100%); animation: vignette-pulse 4s ease-in-out infinite;"></div>
<!-- Tyrkysový třpyt z rohů -->
<div style="position: absolute; top: 0; left: 0; width: 40%; height: 40%; background: radial-gradient(ellipse at top left, rgba(0, 255, 255, 0.15) 0%, transparent 50%); animation: corner-flicker 3s ease-in-out infinite;"></div>
<div style="position: absolute; top: 0; right: 0; width: 40%; height: 40%; background: radial-gradient(ellipse at top right, rgba(0, 255, 255, 0.15) 0%, transparent 50%); animation: corner-flicker 3s ease-in-out infinite 0.5s;"></div>
<div style="position: absolute; bottom: 0; left: 0; width: 40%; height: 40%; background: radial-gradient(ellipse at bottom left, rgba(0, 200, 200, 0.1) 0%, transparent 50%); animation: corner-flicker 3.5s ease-in-out infinite 1s;"></div>
<div style="position: absolute; bottom: 0; right: 0; width: 40%; height: 40%; background: radial-gradient(ellipse at bottom right, rgba(0, 200, 200, 0.1) 0%, transparent 50%); animation: corner-flicker 3.5s ease-in-out infinite 1.5s;"></div>
</div>
<!-- Sníh přes celou scénu -->
<div id="snow-container" style="position: fixed; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; z-index: 2; overflow: hidden;">
<!-- Můžete změnit opacity zde pro celkovou průhlednost sněhu -->
<div id="snow-layer" style="position: absolute; width: 100%; height: 100%; opacity: 0.4;">
<!-- Vločky - malé -->
<div class="snowflake" style="left: 10%; animation-delay: 0s; animation-duration: 8s;">❅</div>
<div class="snowflake" style="left: 20%; animation-delay: 1s; animation-duration: 10s;">❅</div>
<div class="snowflake" style="left: 30%; animation-delay: 2s; animation-duration: 9s;">❆</div>
<div class="snowflake" style="left: 40%; animation-delay: 0.5s; animation-duration: 11s;">❅</div>
<div class="snowflake" style="left: 50%; animation-delay: 1.5s; animation-duration: 8.5s;">❆</div>
<div class="snowflake" style="left: 60%; animation-delay: 2.5s; animation-duration: 10.5s;">❅</div>
<div class="snowflake" style="left: 70%; animation-delay: 0.8s; animation-duration: 9.5s;">❆</div>
<div class="snowflake" style="left: 80%; animation-delay: 1.8s; animation-duration: 11.5s;">❅</div>
<div class="snowflake" style="left: 90%; animation-delay: 2.8s; animation-duration: 8.8s;">❆</div>
<div class="snowflake" style="left: 5%; animation-delay: 0.3s; animation-duration: 10.3s;">❅</div>
<div class="snowflake" style="left: 15%; animation-delay: 1.3s; animation-duration: 9.3s;">❆</div>
<div class="snowflake" style="left: 25%; animation-delay: 2.3s; animation-duration: 11.3s;">❅</div>
<div class="snowflake" style="left: 35%; animation-delay: 0.6s; animation-duration: 8.6s;">❆</div>
<div class="snowflake" style="left: 45%; animation-delay: 1.6s; animation-duration: 10.6s;">❅</div>
<div class="snowflake" style="left: 55%; animation-delay: 2.6s; animation-duration: 9.6s;">❆</div>
<div class="snowflake" style="left: 65%; animation-delay: 0.9s; animation-duration: 11.9s;">❅</div>
<div class="snowflake" style="left: 75%; animation-delay: 1.9s; animation-duration: 8.9s;">❆</div>
<div class="snowflake" style="left: 85%; animation-delay: 2.9s; animation-duration: 10.9s;">❅</div>
<div class="snowflake" style="left: 95%; animation-delay: 0.4s; animation-duration: 9.4s;">❆</div>
<div class="snowflake" style="left: 12%; animation-delay: 1.4s; animation-duration: 11.4s;">❅</div>
<!-- Vločky - střední -->
<div class="snowflake snowflake-medium" style="left: 8%; animation-delay: 0.2s; animation-duration: 12s;">❅</div>
<div class="snowflake snowflake-medium" style="left: 22%; animation-delay: 1.2s; animation-duration: 13s;">❆</div>
<div class="snowflake snowflake-medium" style="left: 38%; animation-delay: 2.2s; animation-duration: 11.5s;">❅</div>
<div class="snowflake snowflake-medium" style="left: 52%; animation-delay: 0.7s; animation-duration: 12.5s;">❆</div>
<div class="snowflake snowflake-medium" style="left: 68%; animation-delay: 1.7s; animation-duration: 13.5s;">❅</div>
<div class="snowflake snowflake-medium" style="left: 82%; animation-delay: 2.7s; animation-duration: 11.8s;">❆</div>
<div class="snowflake snowflake-medium" style="left: 92%; animation-delay: 0.1s; animation-duration: 12.8s;">❅</div>
<div class="snowflake snowflake-medium" style="left: 18%; animation-delay: 1.1s; animation-duration: 10.8s;">❆</div>
<div class="snowflake snowflake-medium" style="left: 42%; animation-delay: 2.1s; animation-duration: 13.2s;">❅</div>
<div class="snowflake snowflake-medium" style="left: 58%; animation-delay: 0.9s; animation-duration: 11.2s;">❆</div>
<!-- Vločky - velké -->
<div class="snowflake snowflake-large" style="left: 14%; animation-delay: 0.5s; animation-duration: 15s;">❅</div>
<div class="snowflake snowflake-large" style="left: 32%; animation-delay: 1.5s; animation-duration: 14s;">❆</div>
<div class="snowflake snowflake-large" style="left: 48%; animation-delay: 2.5s; animation-duration: 16s;">❅</div>
<div class="snowflake snowflake-large" style="left: 64%; animation-delay: 0.8s; animation-duration: 14.5s;">❆</div>
<div class="snowflake snowflake-large" style="left: 78%; animation-delay: 1.8s; animation-duration: 15.5s;">❅</div>
<div class="snowflake snowflake-large" style="left: 88%; animation-delay: 2.8s; animation-duration: 13.5s;">❆</div>
</div>
</div>
<style>
/* Zpoždění jen pro pochodně a plameny */
#torch-scene-container {
animation: torchDelayFadeIn 0.6s ease-out forwards;
animation-delay: 0.6s;
opacity: 0;
}
@keyframes torchDelayFadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
/* Fade-in animace pro obrázky */
@keyframes fadeInSide {
from { opacity: 0; }
to { opacity: 0.8; }
}
/* VYLEPŠENÉ ANIMACE PLAMENE - realističtější */
@keyframes flicker-inner {
0% {
height: 45px;
opacity: 1;
transform: translateX(-50%) scaleX(1) scaleY(0.95);
}
25% {
height: 48px;
opacity: 0.95;
transform: translateX(-50%) scaleX(1.05) scaleY(1);
}
50% {
height: 43px;
opacity: 0.9;
transform: translateX(-50%) scaleX(0.98) scaleY(0.93);
}
75% {
height: 47px;
opacity: 0.97;
transform: translateX(-50%) scaleX(1.02) scaleY(0.98);
}
100% {
height: 44px;
opacity: 0.92;
transform: translateX(-50%) scaleX(1) scaleY(0.95);
}
}
@keyframes flicker-middle {
0% {
height: 65px;
opacity: 0.85;
transform: translateX(-50%) scaleX(1) scaleY(0.9);
}
25% {
height: 70px;
opacity: 0.8;
transform: translateX(-50%) scaleX(1.08) scaleY(1);
}
50% {
height: 62px;
opacity: 0.75;
transform: translateX(-50%) scaleX(0.95) scaleY(0.88);
}
75% {
height: 68px;
opacity: 0.82;
transform: translateX(-50%) scaleX(1.03) scaleY(0.95);
}
100% {
height: 64px;
opacity: 0.78;
transform: translateX(-50%) scaleX(1) scaleY(0.9);
}
}
@keyframes flicker-outer {
0% {
height: 85px;
opacity: 0.7;
transform: translateX(-50%) scaleX(1) scaleY(0.85);
}
25% {
height: 92px;
opacity: 0.75;
transform: translateX(-50%) scaleX(1.1) scaleY(1);
}
50% {
height: 80px;
opacity: 0.65;
transform: translateX(-50%) scaleX(0.92) scaleY(0.82);
}
75% {
height: 88px;
opacity: 0.72;
transform: translateX(-50%) scaleX(1.05) scaleY(0.92);
}
100% {
height: 83px;
opacity: 0.68;
transform: translateX(-50%) scaleX(1) scaleY(0.85);
}
}
@keyframes flicker-detail {
0% {
opacity: 0.9;
height: 30px;
transform: translateX(-50%) scaleY(0.95);
}
33% {
opacity: 1;
height: 35px;
transform: translateX(-50%) scaleY(1.05);
}
66% {
opacity: 0.85;
height: 28px;
transform: translateX(-50%) scaleY(0.9);
}
100% {
opacity: 0.92;
height: 31px;
transform: translateX(-50%) scaleY(0.95);
}
}
/* Houpání plamene - jemnější */
@keyframes sway {
0%, 100% {
transform: translateX(-50%) rotate(-2deg);
}
25% {
transform: translateX(-50%) rotate(1deg);
}
50% {
transform: translateX(-50%) rotate(2deg);
}
75% {
transform: translateX(-50%) rotate(-1deg);
}
}
/* Jiskry - upravená animace */
@keyframes spark-rise {
0% {
transform: translateY(0) scale(1);
opacity: 1;
}
10% {
opacity: 1;
}
100% {
transform: translateY(-300px) scale(0.3);
opacity: 0;
}
}
/* Pulzující záře - intenzivnější */
@keyframes glow-pulse {
0%, 100% {
opacity: 0.5;
transform: translateX(-50%) scale(0.95);
}
50% {
opacity: 0.85;
transform: translateX(-50%) scale(1.2);
}
}
/* Kouř - různé varianty */
@keyframes smoke-rise {
0% {
transform: translate(-50%, 0) scale(0.8) rotate(0deg);
opacity: 0.8;
}
15% {
opacity: 0.75;
}
100% {
transform: translate(-50%, -500px) scale(3.5) rotate(20deg);
opacity: 0;
}
}
@keyframes smoke-rise-twist {
0% {
transform: translate(-50%, 0) scale(0.8) rotate(0deg);
opacity: 0.8;
}
15% {
opacity: 0.75;
}
25% {
transform: translate(calc(-50% + 30px), -125px) scale(1.3) rotate(90deg);
}
50% {
transform: translate(calc(-50% - 20px), -250px) scale(2) rotate(180deg);
}
75% {
transform: translate(calc(-50% + 15px), -375px) scale(2.8) rotate(270deg);
}
100% {
transform: translate(-50%, -500px) scale(3.5) rotate(360deg);
opacity: 0;
}
}
@keyframes smoke-rise-spiral {
0% {
transform: translate(-50%, 0) scale(0.8) rotate(0deg);
opacity: 0.8;
}
15% {
opacity: 0.75;
}
20% {
transform: translate(calc(-50% - 25px), -100px) scale(1.2) rotate(72deg);
}
40% {
transform: translate(calc(-50% + 35px), -200px) scale(1.8) rotate(144deg);
}
60% {
transform: translate(calc(-50% - 30px), -300px) scale(2.4) rotate(216deg);
}
80% {
transform: translate(calc(-50% + 20px), -400px) scale(3) rotate(288deg);
}
100% {
transform: translate(-50%, -500px) scale(3.5) rotate(360deg);
opacity: 0;
}
}
@keyframes smoke-rise-wave {
0% {
transform: translate(-50%, 0) scale(0.8);
opacity: 0.8;
}
15% {
opacity: 0.75;
}
25% {
transform: translate(calc(-50% + 40px), -125px) scale(1.4);
}
50% {
transform: translate(calc(-50% - 35px), -250px) scale(2.2);
}
75% {
transform: translate(calc(-50% + 25px), -375px) scale(2.9);
}
100% {
transform: translate(-50%, -500px) scale(3.5);
opacity: 0;
}
}
/* Animace vignetace - pulzování */
@keyframes vignette-pulse {
0%, 100% {
opacity: 0.8;
}
50% {
opacity: 1;
}
}
/* Animace třpytu z rohů */
@keyframes corner-flicker {
0%, 100% {
opacity: 0.3;
}
25% {
opacity: 0.6;
}
50% {
opacity: 0.4;
}
75% {
opacity: 0.7;
}
}
/* Animace sněhových vloček */
@keyframes snowfall {
0% {
transform: translateY(-10vh) translateX(0) rotate(0deg);
opacity: 0;
}
10% {
opacity: 1;
}
90% {
opacity: 1;
}
100% {
transform: translateY(110vh) translateX(20px) rotate(360deg);
opacity: 0;
}
}
/* Styling sněhových vloček */
.snowflake {
position: absolute;
top: -10vh;
color: rgba(255, 255, 255, 0.8);
font-size: 1em;
animation-name: snowfall;
animation-timing-function: linear;
animation-iteration-count: infinite;
text-shadow: 0 0 5px rgba(255, 255, 255, 0.5);
}
.snowflake-medium {
font-size: 1.5em;
color: rgba(255, 255, 255, 0.7);
}
.snowflake-large {
font-size: 2em;
color: rgba(255, 255, 255, 0.6);
}
</style>}{
Nacházíš se na rušném místě. Kolem procházejí obchodníci a nabízejí své zboží.
<br>
[[Jít zpět k rozcestníku|vyberlokaci]]
<br>
(if: $gold >= 1)[
<div class="tooltip-wrapper">
(text-colour:#172e00)[[[Odpočinout si ve stanu - 1🌙|CampRest]]]
<div class="tooltip-content">
<strong>Odpočinek ti dodá:</strong><br>
• Plné zdraví<br>
• Opravenou výzbroj<br>
• Kondici
</div>
</div>
](else:)[
<div class="tooltip-wrapper">
<div class='disabled-button'>Odpočinout si ve stanu - 1🌙 (Nedostatek hřiven)</div>
<div class="tooltip-content">
Potřebuješ alespoň <strong>1 hřivnu</strong> pro odpočinek
</div>
</div>
]
(display: "ObchodHUD")
(set: $returnPassage to "Trh")
(display: "InventoryHUD")
(display: "SnowAnimation")
}{{<!-- TurnOrderHandler - Správa tahů a počítání kol -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- INICIALIZACE PŘI PRVNÍM VSTUPU DO BOJE -->
<!-- ═══════════════════════════════════════════════════════════════ -->
(if: $turnCounter is 0)[
(set: $turnCounter to 1)
<!-- Rozhodnutí, kdo začína (stejně jako původní logika) -->
(unless: $whoPlaysFirst is "player" or $whoPlaysFirst is "enemy")[
(set: $whoPlaysFirst to "player")
]
]
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- LOGIKA: KDO JE NA TAHU? -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- Liché kolo = Hráč začíná, Sudé kolo = Nepřítel začíná -->
(if: ($turnCounter % 2) is 1)[
(set: $currentTurnStarter to "player")
(set: $isEnemyFirstThisTurn to false)
](else:)[
(set: $currentTurnStarter to "enemy")
(set: $isEnemyFirstThisTurn to true)
]
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- VIZUÁLNÍ INDIKÁTOR TAHU -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<div class="turn-indicator-container">
<!-- Čítač kol nahoře -->
<div class="turn-counter-display">
Kolo: (print: $turnCounter)
</div>
<!-- Ruka s tooltipem -->
<div class="tooltip-container">
(if: $currentTurnStarter is "player")[
<img src="https://files.catbox.moe/vgpdfj.png" alt="Your Turn" class="turn-arrow turn-arrow-player">
](else:)[
<img src="https://files.catbox.moe/vgpdfj.png" alt="Enemy Turn" class="turn-arrow turn-arrow-enemy">
]
<span class="tooltip-bubble"><em>Kartu bojovníka, který se připravuje zaútočit lze vidět odkrytou. Být na tahu tedy není výhoda.</em></span>
</div>
</div>
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- CSS STYLY PRO INDIKÁTOR -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<style>
/* 🎯 KONTEJNER PRO INDIKÁTOR TAHU */
.turn-indicator-container {
position: fixed;
top: 15px;
left: 50%;
transform: translateX(-50%);
z-index: 1000;
display: flex;
flex-direction: column;
align-items: center;
gap: 10px;
}
/* ➡️ ŠIPKA/RUKA - základní nastavení */
.turn-arrow {
height: 40px;
width: auto; /* Automatická šířka podle poměru stran */
transform-origin: left center;
margin-left: 100px; /* Posun ruky doprava - uprav podle potřeby */
margin-top: -50px; /* Posun ruky dolů - uprav podle potřeby (záporné číslo = nahoru) */
}
/* Hráčova ruka - doleva dolů */
.turn-arrow-player {
transform: rotate(135deg);
}
/* Nepřítelova ruka - doprava dolů (+ 135° od hráče) */
.turn-arrow-enemy {
transform: rotate(35deg);
}
/* 🔢 ČÍTAČ KOL */
.turn-counter-display {
background: rgba(237, 215, 142, 0.1);
padding: 8px 15px;
color: #fae2a0;
font-family: 'Cinzel', serif;
font-size: 14px;
font-weight: bold;
}
</style>
}}{**„Ukaž? to nic neni, jen pohmožděnina"** Učitel zkušeně přejel prsty po tvé ruce.
Získal jsi postih: **Pohmožděnina (text-colour:#c41e3a)[-1 ATK]**
„Tvé útoky budou slabší, dokud se nevyléčíš. Avšak v reálném boji by prohra znamenala mdloby nebo smrt!" Dodal přísným tónem, vědom si konců válečníků.
<div class="scene-card"><div class="dice-container"><div class="dice-player-box"></div><div class="dice-enemy-box"></div></div></div><div style="background: rgba(255,215,0,0.1); padding: 5px; border-radius: 2px; margin: 5px 0; text-align: center;"></div>
[[Rozumím!|tutorialKonec]]
</div>
<div id="traitContainer">
(if: $trait1)[
<div class="trait">
<img src="https://files.catbox.moe/ub9joh.png">
<span class="tooltip">(text-colour:#f66)[Pomožděná ruka -1 ATK]</span>
</div>
]
</div>
<div class="tutorial-pointer-inline" style="top: 10px; right: 110px;">
<div class="tutorial-pointer-text">(text-style:"bold","italic")[aktální vlastnosti]</div>
<img src="https://files.catbox.moe/9iog7u.png" alt="pointer" style="width: 85px; height: 100px;">
</div>
<!-- Klikací obrázek, zmizí po kliknutí kamkoliv
<img id="itemNotification" src="https://files.catbox.moe/zoz6w9.png" alt="nová věc"
style="width:250px; height: 450px; position: absolute; top: 25px; right: 60px;">
<script>
$(document).ready(function() {
// Kliknutí kamkoliv na stránce
$(document).click(function() {
$('#itemNotification').fadeOut(500);
});
});
</script> -->}
(display: "SnowAnimation"){
(display: "SnowDegreeAnimation")
(align:"=><=")+(box:"===XXXXXXXXXXXXXX===")[{**„Ukaž? to nic neni, jen pohmožděnina"** Učitel zkušeně přejel prsty po tvé ruce.
Získal jsi postih: **Pohmožděnina (text-colour:#c41e3a)[]**
(align:"=><=")+(box:"===XXXXXXXXXXXXXX===")[„Budeš slabší, dokud se nevyléčíš. Avšak v reálném boji by prohra znamenala mdloby nebo smrt!" Dodal přísným tónem, vědom si konců válečníků. ]
<br>
[[Rozumím!|tutorialKonec]]
<br>
[["Dostanu se ze mdlob?" zeptat se|Mdloby]]
</div>
<div id="traitContainer">
(if: $trait1)[
<div class="trait">
<img src="https://files.catbox.moe/ub9joh.png">
<span class="tooltip">(text-colour:#f66)[Pomožděná ruka]</span>
</div>
]
</div>
<div class="tutorial-pointer-inline" style="top: 50px; center: 1px;">
<div class="tutorial-pointer-text">(text-style:"bold","italic")[aktuální vlastnosti]</div>
<img src="https://files.catbox.moe/9iog7u.png" alt="pointer" style="width: 85px; height: 100px;">
</div>
}
]}"Ty chceš provokovat, ty malé podsvinče?! ... Achych tě nepřetáhl sekerou!" naštval se ušmudlanec. Kouká na tebe svými tvamími oči, ve kterých je hlad a záblesky utrpení. Zachvilku se však sklidnil a zhluboka nadechl.
[
[[Zpět na pokec|Vesnican]]]
<!-- (link: "✮ načíst ")[(load-game: "slot1")]) -->(display: "InventoryHUD")"Já a peníze!" zasmál se. Byl to skutečný smích, nic vytlačeného. Skutečně jsi ho pobavil.
"Já nemám ani na chleba, pacholku!" a hořce polknul.
Zdá se ale, že své utrpení nejak zvládá. Možná svou nervozitou, nebo svým šílenstvím ...
[
[[Zpět na pokec|Vesnican]]]
<!-- (link: "✮ načíst ")[(load-game: "slot1")]) -->(display: "InventoryHUD")<!-- ⚔️ HANDLER PRO KARTY S VARIABILNÍM ÚTOKEM (minAttack/maxAttack) -->
(if: $playerCard contains "minAttack" and $playerCard contains "maxAttack")[
(if: $playerCard contains "type" and $playerCard's type is not "weapon")[
<!-- Karta má rozsah damage ale NENÍ to weapon - spočítej random hodnotu -->
(set: $calculatedAttack to (random: $playerCard's minAttack, $playerCard's maxAttack))
<!-- Debug log - BEZ ZÁVOREK -->
(set: $variableAttackMsg to "<span class='combat-precision'> " + $playerCard's name + " zaútočil jsi silou " + (text: $calculatedAttack) + " z " + (text: $playerCard's minAttack) + "-" + (text: $playerCard's maxAttack) + "</span>")
(set: $combatLog to it + (a: $variableAttackMsg))
]
]Vesničan je špinavý a nervózní. Asi dlouho nezažil žádnou srandu. Když tě zahlédl, odvrátil zrak, aby se stebou nemusel bavit.
[[[Jak se ti robí, nuzáku?|V1]]
[[Nemáš nějakou zlatku pro mě? |V2]]
[[Zpět do vesnice|Vesnice]]]
<!-- (link: "✮ načíst ")[(load-game: "slot1")]) -->(display: "InventoryHUD")(text-style:"bold")[Vesnice Mezihoří]
Procházíš se mezi zachumelenými dřevěnými stavbami, na které neustále dosedají vločky sněhu. Je zima a venku skoro nikdo není. Ale lze zahlédnout pár živáčků. Můžeš jít za nimi a prohodit pár hřejivých slov.
<!--kartička
--><div class="scene-card">
<div class="dice-container">
<div class="dice-player-box"></div>
<div class="dice-enemy-box"></div>
</div>
</div>
<div style="background: rgba(255,215,0,0.1); padding: 5px; border-radius: 2px; margin: 5px 0; text-align: center;">
[[Vesničan|Vesnican]]
[[Strážce|Hlidac]]
[[Vychrtlý pes|Pes]]
<!-- (link: "✮ načíst ")[(load-game: "slot1")]) -->(display: "InventoryHUD")(display: "SnowAnimation"){
(display: "BattleScene")
<h4>Výhra</h4>
<div class="text-divider divider-rpg"></div>
<!-- Spusť hudbu pro outro -->
(print: "<script>
changeMusic('https://files.catbox.moe/ac7hh8.ogg', 0.5);
</script>")
<!-- ⭐ DEBUG DIV S PORTRAIT URL PRO HRÁČE -->
<div style="display:none;" id="debug-portrait-url-outro">(print: $portraitURL)</div>
<style>
/* OUTRO ZOOM OBRÁZEK - ODZOOMUJE */
.outro-zoom-image {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-image: url('https://files.catbox.moe/w6jqq0.jpg');
background-size: cover;
background-position: center;
z-index: 9999;
opacity: 1;
transform: scale(1.8);
animation: zoomOutAndFade 4.5s ease-out 0.8s forwards;
pointer-events: none;
}
@keyframes zoomOutAndFade {
0% { transform: scale(1.8); opacity: 1; }
70% { transform: scale(1); opacity: 1; }
100% { transform: scale(1); opacity: 0; }
}
/* PORTRÉTY - VIDITELNÉ HNED, POZDĚJI ODJÍŽDÍ */
.outro-portrait {
position: fixed;
width: 300px;
height: 400px;
background-size: cover;
background-position: center;
border: 4px solid #d1b66b;
box-shadow: 0 0 30px rgba(209, 182, 107, 0.5);
opacity: 1;
animation-duration: 1.5s;
animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
animation-fill-mode: forwards;
top: 50%;
transform: translateY(-50%);
z-index: 10000;
}
.outro-portrait-player {
right: calc(50% + 80px);
}
.outro-portrait-teacher {
left: calc(50% + 80px);
background-image: url('https://files.catbox.moe/ouajvi.jpg');
}
/* Animace odjezdu - spustí se po 3 sekundách */
.outro-portrait-player.slide-out {
animation-name: slideOutRight;
animation-delay: 3s;
}
.outro-portrait-teacher.slide-out {
animation-name: slideOutLeft;
animation-delay: 3s;
}
@keyframes slideOutRight {
0% { right: calc(50% + 80px); opacity: 1; }
100% { right: -350px; opacity: 0; }
}
@keyframes slideOutLeft {
0% { left: calc(50% + 80px); opacity: 1; }
100% { left: -350px; opacity: 0; }
}
/* ⭐ LEBKA - ZÁKLADNÍ STYL ⭐ */
.skull-overlay {
position: fixed;
top: 50%;
width: 400px;
height: 400px;
background-image: url('https://files.catbox.moe/5ntk8n.png');
background-size: contain;
background-position: center;
background-repeat: no-repeat;
opacity: 1;
z-index: 10001;
filter: drop-shadow(0 0 20px rgba(255, 0, 0, 0.6));
transform: translateY(-50%) scale(1);
}
/* ⭐ LEBKA NA HRÁČI (VPRAVO) - SMAŽ TENTO BLOK PRO SKRYTÍ ⭐ */
#playerSkull {
right: calc(50% - 200px);
top: calc(50% - 50px);
display: none;
}
/* ⭐ LEBKA NA UČITELI (VLEVO) - SMAŽ TENTO BLOK PRO SKRYTÍ ⭐ */
#teacherSkull {
left: calc(50% - 200px);
top: calc(50% - 50px);
}
/* JMÉNA POD PORTRÉTY */
.outro-character-name {
position: absolute;
bottom: -60px;
width: 100%;
text-align: center;
color: #d1b66b;
font-size: 24px;
font-weight: bold;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);
font-family: 'Cinzel Decorative', serif;
opacity: 1;
}
/* ⭐ PŘEŠKRTNUTÉ JMÉNO HRÁČE - SMAŽ PRO NORMÁLNÍ JMÉNO ⭐ */
#outroPlayerName.defeated {
color: #8b0000;
text-decoration: line-through;
display: none;
}
/* ⭐ PŘEŠKRTNUTÉ JMÉNO UČITELE - SMAŽ PRO NORMÁLNÍ JMÉNO ⭐ */
#outroTeacherName.defeated {
color: #8b0000;
text-decoration: line-through;
}
/* KONTEJNER PRO NORMÁLNÍ OBSAH - SKRYTÝ BĚHEM OUTRA */
.main-content-hidden {
opacity: 0;
pointer-events: none;
transition: opacity 0.5s ease-in;
}
.main-content-visible {
opacity: 1;
pointer-events: auto;
}
</style>
<div class="outro-zoom-image" id="outroZoom"></div>
<div class="outro-animation-container" id="outroContainer">
<div class="outro-portrait outro-portrait-player slide-out" id="outroPlayerPortrait">
<div class="skull-overlay" id="playerSkull"></div>
<div class="outro-character-name" id="outroPlayerName">(print: $vybranaPostava)</div>
</div>
<div class="outro-portrait outro-portrait-teacher slide-out">
<div class="skull-overlay" id="teacherSkull"></div>
<div class="outro-character-name" id="outroTeacherName">Trenér</div>
</div>
</div>
<!-- NORMÁLNÍ OBSAH PASÁŽE - ZOBRAZÍ SE PO OUTRU -->
<div id="mainContent" class="main-content-hidden">
(align:"=><=")+(box:"X")[
(display: "zpet")
(display: "HodHUD")]
|prologText>[
<div style="background: linear-gradient(135deg, rgba(42,24,16,0.2) 0%, rgba(26,15,8,0.2) 100%); border: 3px solid rgba(139,105,20,0.2); border-radius: 2px; padding: 30px; margin: 30px auto; max-width: 700px; box-shadow: 0 8px 20px rgba(0,0,0,0.2);">
Drtihlavka dopadla tvrdě. "Do prdele, to bolí!"]
</div>
(set: $skillCheckRolled to false)
(set: $skillCheckResult to "")
(set: $roll to 0)
(set: $celkemHod to 0)
(set: $zakladniObtiznost to 5)
(set: $minSuccessRoll to (max: 2, $zakladniObtiznost - $umeni))
<div style="margin-bottom: 1px; padding: 1px; background: rgba(0,0,0,0.); border: 2px solid rgba(139, 105, 20, 0.2); border-radius: 2px; font-size: 0.9em;">
<div class="result-panel">
|storyText>[]
</div>
(if: not $skillCheckRolled)[
<h4 class="burning">
<div class="floating-button-wrapper">
|attackButton>[
(link: "(text-colour:#080a08)[Prohmatat bolavou ruku(text-colour:#666654)[ (Umění $umeni)]]")[
(set: _freshRoll to (random: 1, 6))
(set: $roll to _freshRoll)
(set: $celkemHod to $roll + $umeni)
(set: $skillCheckRolled to true)
(replace: ?prologText)[]
</div>
</h4>
<script>
var diceSound = new Audio('https://files.catbox.moe/oamu5w.ogg');
diceSound.volume = 0.6;
diceSound.play().catch(function(e) {
console.log('Audio playback failed:', e);
});
</script>
(replace: ?attackButton)[]
(replace: ?diceDisplay)[
<div class="dice-fall-animation-wrapper">
<div class="dice-rolling">
<img src="https://files.catbox.moe/a843tu.png" class="dice-image dice-fall">
</div>
</div>
]
(live: 0.6s)[
(stop:)
<script>
var resultSound = new Audio('https://files.catbox.moe/98jtvb.ogg');
resultSound.volume = 0.7;
resultSound.play().catch(function(e) {
console.log('Result sound failed:', e);
});
</script>
(replace: ?diceDisplay)[
<div style="margin-top: -100px;">
(if: $roll is 1)[
<img src="https://files.catbox.moe/a843tu.png" class="dice-image">
](else-if: $roll is 2)[
<img src="https://files.catbox.moe/laokqg.png" class="dice-image">
](else-if: $roll is 3)[
<img src="https://files.catbox.moe/9ubppy.png" class="dice-image">
](else-if: $roll is 4)[
<img src="https://files.catbox.moe/zp7fb4.png" class="dice-image">
](else-if: $roll is 5)[
<img src="https://files.catbox.moe/vqfqru.png" class="dice-image">
](else-if: $roll is 6)[
<img src="https://files.catbox.moe/hi7w7n.png" class="dice-image">
]
**<div class="dice-number-white-small">$roll(if: $umeni > 0)[+$umeni] = $celkemHod</div>**
</div>
]
(if: $celkemHod < $minSuccessRoll)[
(set: $skillCheckResult to "NEÚSPĚCH")
(set: $trait1 to true)
(replace: ?resultBox)[]
(replace: ?storyText)[
<div class="result-box">
[(text-colour:#6e4447)[(NEÚSPĚCH):] "Kurva ta sedla"<br>[[Koukni na učitele|Ucitel reci]]]
</div>
]
](else:)[
(set: $skillCheckResult to "ÚSPĚCH")
(replace: ?resultBox)[]
(replace: ?storyText)[
<div class="result-box">
[(text-colour:#334731)[(ÚSPĚCH):] "To bylo štígro, jen mě lehce zasáhl ruku"<br>[[Koukni na učitele|Ucitel reci]]]
</div>
]
]
]
]
]
</div>
<div class="dice-player-box">
|diceDisplay>[
(if: not $skillCheckRolled)[
]
]
</div>
</div>
|resultBox>[]
]
</div>
<script>
(function() {
var attempts = 0;
var maxAttempts = 30;
function loadOutroPortraits() {
attempts++;
var debugDiv = document.getElementById('debug-portrait-url-outro');
var playerURL = '';
if (debugDiv && debugDiv.textContent.trim() !== '') {
playerURL = debugDiv.textContent.trim();
} else if (typeof State !== 'undefined' && State.variables && State.variables.portraitURL) {
playerURL = State.variables.portraitURL;
}
if (!playerURL || playerURL === '' || playerURL.length < 10) {
if (attempts < maxAttempts) {
setTimeout(loadOutroPortraits, 100);
return;
} else {
playerURL = 'https://files.catbox.moe/hs2gd7.jpg';
}
}
var playerPortrait = document.getElementById('outroPlayerPortrait');
if (playerPortrait) {
playerPortrait.style.backgroundImage = "url('" + playerURL + "')";
} else if (attempts < maxAttempts) {
setTimeout(loadOutroPortraits, 100);
return;
}
var nameDiv = document.getElementById('outroPlayerName');
if (nameDiv && typeof State !== 'undefined' && State.variables && State.variables.vybranaPostava) {
nameDiv.textContent = State.variables.vybranaPostava;
}
// ⭐ Přidej nebo odeber třídu .defeated pro přeškrtnutí jména ⭐
// Pro přeškrtnutí jména hráče odkomentuj následující řádek:
document.getElementById('outroPlayerName').classList.add('defeated');
// Pro přeškrtnutí jména učitele odkomentuj následující řádek:
document.getElementById('outroTeacherName').classList.add('defeated');
}
// Odstranění outro zoom
setTimeout(function() {
var outroZoom = document.getElementById('outroZoom');
if (outroZoom) outroZoom.remove();
}, 5300);
// Odstranění portrétů a zobrazení hlavního obsahu
setTimeout(function() {
var outroContainer = document.getElementById('outroContainer');
if (outroContainer) outroContainer.remove();
var mainContent = document.getElementById('mainContent');
if (mainContent) {
mainContent.classList.remove('main-content-hidden');
mainContent.classList.add('main-content-visible');
}
}, 5500);
setTimeout(loadOutroPortraits, 200);
})();
</script>
<style>
.floating-button-wrapper {
z-index: 1000;
margin: -20px auto;
text-align: center;
}
.dice-fall-animation-wrapper {
margin-top: -10px;
}
.skill-check-layout {
display: flex;
gap: 10px;
align-items: flex-start;
margin: 1px 0;
flex-wrap: nowrap;
}
.dice-player-box {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 1px;
text-align: center;
opacity: 1;
}
.scene-card {
position: relative;
background: linear-gradient(135deg, rgba(0, 0, 0, 0.0), rgba(42, 24, 16, 0.0));
border: 3px solid rgba(0, 0, 11, 0.05);
border-radius: 2px;
padding: 0px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.0);
flex: 0 0 45%;
opacity: 1.4;
}
.result-panel {
flex: 1;
min-height: 35px;
}
.dice-image {
width: 150px;
height: 150px;
margin: -5px auto;
display: block;
}
.dice-rolling {
animation: shake 0.08s infinite;
}
.dice-fall {
animation: fall 0.6s ease-out, spin 0.6s linear, shake 0.08s infinite;
transform-origin: center;
}
.dice-number-white-small {
color: #ffffff;
font-size: 1.3em;
text-align: center;
margin-top: -30px;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);
}
.result-box {
background: rgba(42, 24, 16, 0.0);
border: 2px solid rgba(139, 69, 19, 0.05);
border-radius: 2px;
padding: -5px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.0);
margin-top: -45px;
animation: expandFromButton 0.6s ease-out;
transform-origin: top left;
}
@keyframes expandFromButton {
0% {
transform: scale(0.1) translateX(-5px) translateY(-380px);
opacity: 0;
}
50% {
opacity: 0.5;
}
100% {
transform: scale(1) translateX(0) translateY(0);
opacity: 1;
}
}
@keyframes fall {
0% {
transform: translateY(-200px);
opacity: 0;
}
100% {
transform: translateY(0);
opacity: 1;
}
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(720deg); }
}
@keyframes shake {
0%, 100% { transform: translateX(0) translateY(0); }
25% { transform: translateX(-3px) translateY(3px); }
50% { transform: translateX(3px) translateY(-3px); }
75% { transform: translateX(-3px) translateY(-3px); }
}
@media (max-width: 768px) {
.skill-check-layout {
flex-direction: column;
}
.scene-card {
flex: 1 1 100%;
}
}
</style>
}{(align:"=><=")+(box:"X")[
(display: "BattleScene")
(display: "HodHUD")
<h4>Výhra</h4>
<div class="text-divider divider-rpg"></div>
[
|prologText>[
<div style="background: linear-gradient(135deg, rgba(42,24,16,0.2) 0%, rgba(26,15,8,0.2) 100%); border: 3px solid rgba(139,105,20,0.2); border-radius: 2px; padding: 30px; margin: 30px auto; max-width: 700px; box-shadow: 0 8px 20px rgba(0,0,0,0.2);">
Drtihlavka dopadla, ale vyhnul jsi se jí "Do prdele snad mě tím kolosem někam nezasáhl!"]
</div>
(set: $skillCheckRolled to false)
(set: $skillCheckResult to "")
(set: $roll to 0)
(set: $celkemHod to 0)
(set: $zakladniObtiznost to 5)
(set: $minSuccessRoll to (max: 2, $zakladniObtiznost - $umeni))
<div style="margin-bottom: 1px; padding: 1px; background: rgba(0,0,0,0.); border: 2px solid rgba(139, 105, 20, 0.2); border-radius: 2px; font-size: 0.9em;">
<div class="result-panel">
|storyText>[]
</div>
<!-- ABSOLUTNĚ POZICOVANÉ TLAČÍTKO -->
(if: not $skillCheckRolled)[
<h4 class="burning">
<div class="floating-button-wrapper">
|attackButton>[
(link: "(text-colour:#080a08)[Prohmatat bolavou ruku(text-colour:#666654)[ (Umění $umeni)]]")[
(set: _freshRoll to (random: 1, 6))
(set: $roll to _freshRoll)
(set: $celkemHod to $roll + $umeni)
(set: $skillCheckRolled to true)
(replace: ?prologText)[]
</div>
</h4>
<!-- PŘEHRAJ ZVUK HNED -->
<script>
var diceSound = new Audio('https://files.catbox.moe/oamu5w.ogg');
diceSound.volume = 0.6; // Hlasitost 60%
diceSound.play().catch(function(e) {
console.log('Audio playback failed:', e);
});
</script>
(replace: ?attackButton)[]
(replace: ?diceDisplay)[
<div class="dice-fall-animation-wrapper">
<div class="dice-rolling">
<img src="https://files.catbox.moe/a843tu.png" class="dice-image dice-fall">
</div>
</div>
]
(live: 0.6s)[
(stop:)
<!-- PŘEHRAJ ZVUK PRO RESULT BOX -->
<script>
var resultSound = new Audio('https://files.catbox.moe/98jtvb.ogg');
resultSound.volume = 0.7;
resultSound.play().catch(function(e) {
console.log('Result sound failed:', e);
});
</script>
(replace: ?diceDisplay)[
<div style="margin-top: -100px;">
(if: $roll is 1)[
<img src="https://files.catbox.moe/a843tu.png" class="dice-image">
](else-if: $roll is 2)[
<img src="https://files.catbox.moe/laokqg.png" class="dice-image">
](else-if: $roll is 3)[
<img src="https://files.catbox.moe/9ubppy.png" class="dice-image">
](else-if: $roll is 4)[
<img src="https://files.catbox.moe/zp7fb4.png" class="dice-image">
](else-if: $roll is 5)[
<img src="https://files.catbox.moe/vqfqru.png" class="dice-image">
](else-if: $roll is 6)[
<img src="https://files.catbox.moe/hi7w7n.png" class="dice-image">
]
**<div class="dice-number-white-small">$roll(if: $umeni > 0)[+$umeni] = $celkemHod</div>**
</div>
]
(if: $celkemHod < $minSuccessRoll)[
(set: $skillCheckResult to "NEÚSPĚCH")
(set: $trait1 to true)
(replace: ?resultBox)[]
(replace: ?storyText)[
<div class="result-box">
[(text-colour:#6e4447)[(NEÚSPĚCH):] "Kurva ta sedla"<br>[[Koukni na učitele|Pytlak reci]]]
</div>
]
](else:)[
(set: $skillCheckResult to "ÚSPĚCH")
(replace: ?resultBox)[]
(replace: ?storyText)[
<div class="result-box">
[(text-colour:#334731)[(ÚSPĚCH):] "To bylo štígro, jen mě lehce zasáhl ruku"<br>[[Koukni na učitele|Pytlak reci]]]
</div>
]
]
]
]
]
</div>
<div class="dice-player-box">
|diceDisplay>[
(if: not $skillCheckRolled)[
]
]
</div>
</div>
]
|resultBox>[]
]
<style>
.floating-button-wrapper {
z-index: 1000;
margin: -20px auto;
text-align: center;
}
}
/* NOVÁ TŘÍDA PRO POSUN ANIMACE NAHORU */
.dice-fall-animation-wrapper {
margin-top: -10px;
}
.skill-check-layout {
display: flex;
gap: 10px;
align-items: flex-start;
margin: 1px 0;
flex-wrap: nowrap;
}
.dice-player-box {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 1px;
text-align: center;
opacity: 1;
}
.scene-card {
position: relative;
background: linear-gradient(135deg, rgba(0, 0, 0, 0.0), rgba(42, 24, 16, 0.0));
border: 3px solid rgba(0, 0, 11, 0.05);
border-radius: 2px;
padding: 0px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.0);
flex: 0 0 45%;
opacity: 1.4;
}
.result-panel {
flex: 1;
min-height: 35px;
}
.dice-image {
width: 150px;
height: 150px;
margin: -5px auto;
display: block;
}
.dice-rolling {
animation: shake 0.08s infinite;
}
.dice-fall {
animation: fall 0.6s ease-out, spin 0.6s linear, shake 0.08s infinite;
transform-origin: center;
}
.dice-number-white-small {
color: #ffffff;
font-size: 1.3em;
text-align: center;
margin-top: -30px;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);
}
.result-box {
background: rgba(42, 24, 16, 0.0);
border: 2px solid rgba(139, 69, 19, 0.05);
border-radius: 2px;
padding: -5px;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.0);
margin-top: -45px;
/* Animace rozbalení zleva shora */
animation: expandFromButton 0.6s ease-out;
transform-origin: top left;
}
@keyframes expandFromButton {
0% {
transform: scale(0.1) translateX(-5px) translateY(-380px);
opacity: 0;
}
50% {
opacity: 0.5;
}
100% {
transform: scale(1) translateX(0) translateY(0);
opacity: 1;
}
}
@keyframes fall {
0% {
transform: translateY(-200px);
opacity: 0;
}
100% {
transform: translateY(0);
opacity: 1;
}
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(720deg); }
}
@keyframes shake {
0%, 100% { transform: translateX(0) translateY(0); }
25% { transform: translateX(-3px) translateY(3px); }
50% { transform: translateX(3px) translateY(-3px); }
75% { transform: translateX(-3px) translateY(-3px); }
}
@media (max-width: 768px) {
.skill-check-layout {
flex-direction: column;
}
.scene-card {
flex: 1 1 100%;
}
}
</style>]}{<!-- ⭐ DEBUG DIV S PORTRAIT URL -->
(display: "WarewolfAnimation")
(set: $vybranaPostava to "RONEK")
(set: $portraitURL to "")
(set: $portraitVariant to 1)
(set: $stamina to 15)
(set: $maxStamina to 16)
(set: $maxHp to 28)
(set: $hp to 28)
(set: $hracHP to 28)
(set: $body to 0)
(set: $hracATK to 0)
(set: $umeni to 0)
(set: $rychlost to 0)
(set: $experience to 0)
(set: $enemyHP to 28)
(set: $enemyMaxHP to 35)
<!--Enemy portrait je uprostřtřed -->
<div style="display:none;" id="debug-portrait-url">(print: $portraitURL)</div>
<!-- HLAVNÍ INTRO OBRAZOVKA -->
<div id="combat-intro-screen" class="combat-intro-screen">
<!-- PORTRÉTY: Hero vlevo, Enemy vpravo -->
<div class="intro-portraits-container">
<!-- HERO PORTRAIT - VLEVO -->
<div class="intro-portrait-wrapper intro-hero">
<div class="intro-portrait-frame">
<div class="intro-portrait-image hero-portrait-background"></div>
</div>
<h4><div class="intro-portrait-name">(print: $vybranaPostava)</div></h4>
</div>
<!-- ENEMY PORTRAIT - VPRAVO -->
<div class="intro-portrait-wrapper intro-enemy">
<div class="intro-portrait-frame">
<div class="intro-portrait-image enemy-portrait-background"></div>
</div>
<h4> <div class="intro-portrait-name">Hladový vlk</div> </h4>
</div>
</div>
<div id="wolf-dialog" style="background: linear-gradient(135deg, rgba(42,24,16,0.2) 0%, rgba(26,15,8,0.2) 100%); border: none; border-radius: 0px; padding: 30px; margin: 30px auto; max-width: 700px; height: 240px; overflow-y: auto; box-shadow: inset 0 0 30px rgba(139,105,20,0.3), 0 8px 20px rgba(0,0,0,0.2); scroll-behavior: smooth;">
Stojíš na lesní cestě. Blíží se k tobě vlk. Toto není dobré znamení. ''Vlk si tě prohlíží a začíná vrčet.'' Boj je nevyhnutelný.
<br>
(link-reveal: "Podívat se mu do očí:")[(t8n-delay: 0.1s)[
<div class="text-divider divider-rpg"></div><br>
<div style="text-align: center; margin-top: -10px;">
(text-colour:#701f1f)[V jeho očích vidíš akorát hlad po čerstvém masu.]
<br>
(link-reveal: "Zařvat na něj:")[(t8n-delay: 0.1s)[
<div class="text-divider divider-rpg"></div><br>
<div style="text-align: center; margin-top: -10px;">
(text-colour:#701f1f)[ Vlk se naježil.]
]]
</div>]]
</div>
<!-- JEDEN SCRIPT PRO CELÝ DIV -->
<script>
(function() {
var dialog = document.getElementById('wolf-dialog');
if (!dialog) return;
// Sleduj jakoukoliv změnu obsahu
var observer = new MutationObserver(function() {
setTimeout(function() {
dialog.scrollTop = dialog.scrollHeight;
}, 150);
});
// Sleduj změny v celém divu
observer.observe(dialog, { childList: true, subtree: true });
})();
</script>
<div class="intro-actions">
(t8n-depart: "dissolve") + (t8n-arrive: "dissolve")[<span class="CinzelButton">(text-colour:#1a1f13)[[[Zaútočit|VlkBttleIntro]]]</span>]
<div style="text-align: center; margin-top: -10px;">
(t8n-depart: "dissolve") + (t8n-arrive: "dissolve")[<span class="CinzelButton" style="margin-top: -15px;">(text-colour:#1a1f13)[[[Zpět do vesnice|EscapeSuccess]]]</span>]
</div>
</div>
<!-- SCRIPT PRO NAČTENÍ HERO A ENEMY PORTRÉTU -->
<script>
(function() {
// Okamžitě načti portréty bez čekání
function loadPortraits() {
// ===== HERO PORTRAIT =====
var heroURL = '';
var debugDiv = document.getElementById('debug-portrait-url');
if (debugDiv && debugDiv.textContent.trim() !== '') {
heroURL = debugDiv.textContent.trim();
} else if (typeof State !== 'undefined' && State.variables && State.variables.portraitURL) {
heroURL = State.variables.portraitURL;
}
// Fallback pokud není URL
if (!heroURL || heroURL.length < 10) {
heroURL = 'https://files.catbox.moe/fews8p.jpg';
}
// Nastav Hero portrét
var heroBg = document.querySelector('.intro-portrait-image.hero-portrait-background');
if (heroBg) {
heroBg.style.backgroundImage = "url('" + heroURL + "')";
}
// ===== ============================================= ==================
// ===== ============================================= ==================
// ===== ENEMY PORTRAIT =====
var enemyURL = 'https://files.catbox.moe/qnb3if.jpg'; // ⭐ ZMĚŇ na URL vlka
var enemyBg = document.querySelector('.intro-portrait-image.enemy-portrait-background');
if (enemyBg) {
enemyBg.style.backgroundImage = "url('" + enemyURL + "')";
}
}
// Spusť OKAMŽITĚ
loadPortraits();
// Backup pokud by se nenačetlo - zkus znovu za 50ms
setTimeout(loadPortraits, 50);
})();
</script>
{
<!-- ⭐ ODEMKNUTÍ DÝKY V INVENTORY (bez automatického přidání) -->
(if: visits is 1)[
<!-- Odemkni dýku - hráč ji uvidí v AddCards -->
(set: $hasDagger to true)
<!-- ⚠️ KRITICKÉ: Inicializuj $deckCards pokud neexistuje -->
(unless: $deckCards is an array)[
(set: $deckCards to (a:))
]
<!-- ⚠️ DŮLEŽITÉ: Nastav validitu balíčku podle toho, zda má hráč karty -->
(if: $deckCards's length > 0)[
(set: $deckIsValid to true)
](else:)[
(set: $deckIsValid to false)
]
]
}
<style>
/* === KONTEJNER PORTRÉTŮ === */
.intro-portraits-container {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 30px;
gap: 20px;
}
/* === WRAPPER JEDNOTLIVÉHO PORTRÉTU === */
.intro-portrait-wrapper {
flex: 1;
text-align: center;
}
/* === RÁMEČEK PORTRÉTU === */
.intro-portrait-frame {
width: 200px;
height: 200px;
margin: 0 auto 20px;
border: 2px solid rgba(0, 0, 0, 0.2);
border-radius: 2px;
overflow: hidden;
box-shadow: 3px 3px 0px rgba(0,0,0,0.1);
}
/* === OBRÁZEK PORTRÉTU === */
.intro-portrait-image {
width: 100%;
height: 100%;
background-size: cover;
background-position: center;
background-repeat: no-repeat;
}
/* Specifické selectory pro intro portréty */
.intro-portrait-image.hero-portrait-background,
.intro-portrait-image.enemy-portrait-background {
position: relative;
z-index: 1;
}
/* === JMÉNO POD PORTRÉTEM === */
.intro-portrait-name {
font-weight: bold;
font-size: 1.1em;
color: #000000;
text-transform: uppercase;
letter-spacing: 1px;
z-index: 3;
}
/* === VS TEXT === */
.intro-vs-text {
font-size: 2.5em;
font-weight: bold;
color: rgba(0, 0, 0, 0.3);
text-shadow: 2px 2px 0px rgba(0,0,0,0.1);
padding: 0 20px;
}
/* === DIALOG === */
.intro-dialogue {
margin: 30px 0;
padding: 20px;
background: rgba(255, 255, 255, 0.1);
border-left: 3px solid rgba(0, 0, 0, 0.2);
text-align: left;
}
.intro-dialogue p {
margin: 10px 0;
line-height: 1.6;
}
.intro-dialogue strong {
color: #000000;
}
/* === TLAČÍTKA === */
.intro-actions {
margin-top: 30px;
display: flex;
flex-direction: column;
gap: 15px;
align-items: center;
}
.CinzelButton {
display: inline-block;
}
.CinzelButton a {
display: inline-block;
padding: 15px 40px;
background: transparent;
border: 2px solid rgba(0, 0, 0, 0.2);
border-radius: 2px;
color: #1a1f13;
text-decoration: none;
font-weight: bold;
transition: all 0.3s;
text-align: center;
min-width: 300px;
}
.CinzelButton a:hover {
background: #000000;
border-color: #000000;
color: #f5f5dc;
transform: scale(1.02);
cursor: pointer;
}
.divider-rpg {
margin-bottom: -25px !important;
margin-top: -10px !important;
position: relative;
z-index: 0;
}
/* Druhé tlačítko přitáhni nahoru */
.intro-actions .CinzelButton:last-child {
margin-top: -105px; !important
}
/* === HLAVNÍ KONTEJNER === */
.combat-intro-screen {
max-width: 740px;
margin: 30px auto;
padding: 20px;
border: none;
border-radius: 1px;
color: #000000;
position: relative;
z-index: 20;
}
/* Vlastní scrollbar - žlutý gradient */
#wolf-dialog::-webkit-scrollbar {
width: 12px; /* Širší scrollbar */
}
/* Pozadí scrollbaru (track) */
#wolf-dialog::-webkit-scrollbar-track {
background: transparent;
}
/* Samotný scrollbar (thumb) - VÝRAZNĚJŠÍ ZLATÝ GRADIENT */
#wolf-dialog::-webkit-scrollbar-thumb {
background: linear-gradient(
180deg,
rgba(212, 175, 55, 0) 0%, /* Úplně průhledná nahoře */
rgba(212, 175, 55, 0.2) 20%, /* Slabá zlatá */
rgba(244, 208, 63, 0.4) 50%, /* Plná zlatá uprostřed */
rgba(212, 175, 55, 0.2) 80%, /* Slabá zlatá */
rgba(212, 175, 55, 0) 100% /* Úplně průhledná dole */
);
border-radius: 10px;
min-height: 80px; /* Minimální výška pro zobrazení gradientu */
}
/* Scrollbar při hoveru */
#wolf-dialog::-webkit-scrollbar-thumb:hover {
background: linear-gradient(
180deg,
rgba(212, 175, 55, 0.1) 0%,
rgba(212, 175, 55, 0.2) 20%,
rgba(244, 208, 63, 0.3) 50%,
rgba(212, 175, 55, 0.2) 80%,
rgba(212, 175, 55, 0.1) 100%
);
}
</style>
(display: "SnowAnimation")
(display: "InventoryHUD")}{
(display: "WarewolfAnimation")
(set: $portraitURL to "https://files.catbox.moe/fews8p.jpg")
(set: $portraitVariant to 1)
(live: 6s)[
(goto: "CardBattleInit")
]}
(print: "<script>
changeMusic('https://files.catbox.moe/ac7hh8.ogg', 0.5);
</script>")
<div style="display:none;" id="debug-portrait-url-vs">(print: $portraitURL)</div>
<style>
/* --- ČERVENÁ VIGNETACE (jemná, od začátku) --- */
#fire-vignette {
position: fixed;
top: 0; left: 0; width: 100%; height: 100%;
pointer-events: none;
z-index: 9997;
background: radial-gradient(circle, transparent 20%, rgba(150, 0, 0, 0.08) 70%, rgba(50, 0, 0, 0.35) 100%);
animation: vignette-pulse 4s infinite ease-in-out;
}
/* --- TMAVĚ ČERVENÁ VIGNETACE OKRAJŮ (nad vším, po celou dobu) --- */
#edge-vignette {
position: fixed;
top: 0; left: 0; width: 100%; height: 100%;
pointer-events: none;
z-index: 10010;
background: radial-gradient(circle, transparent 30%, rgba(100, 0, 0, 0.5) 70%, rgba(30, 0, 0, 0.6) 100%);
animation: edge-vignette-pulse 5s infinite ease-in-out;
}
@keyframes vignette-pulse {
0%, 100% { opacity: 0.6; }
50% { opacity: 0.9; }
}
@keyframes edge-vignette-pulse {
0%, 100% { opacity: 0.8; }
50% { opacity: 1; }
}
/* --- STYLY PRO OHEŇ (v intro kontejneru) --- */
#vs-flame-canvas {
position: absolute;
top: 0; left: 0;
width: 100%; height: 100%;
filter: blur(2px);
z-index: 2;
pointer-events: none;
opacity: 0.5;
}
/* --- STYLY PRO VS OBRAZOVKU --- */
.intro-zoom-image {
position: fixed;
top: 0; left: 0; width: 100%; height: 100%;
z-index: 9998;
pointer-events: none;
overflow: hidden;
animation: zoomAndFade 4.5s ease-out forwards;
}
.intro-background {
position: absolute;
top: 0; left: 0;
width: 100%; height: 100%;
background-image: url('https://files.catbox.moe/w6jqq0.jpg');
background-size: cover;
background-position: center;
z-index: 1;
}
@keyframes zoomAndFade {
0% { transform: scale(1); opacity: 1; }
18% { transform: scale(1); opacity: 1; }<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" width="20" height="20"><path fill='rgb(174, 174, 174)' d="M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"/></svg>
80% { transform: scale(1.8); opacity: 1; }
100% { transform: scale(1.8); opacity: 0; }
}
.vs-animation-container {
position: fixed;
top: 0; left: 0; width: 100%; height: 100%;
background: radial-gradient(circle at center, rgba(30,0,0,1), rgba(0,0,0,1));
z-index: 10000;
display: flex;
align-items: center;
justify-content: center;
opacity: 0;
animation: fadeIn 5s ease 0.9s forwards; /* 5s trvání, 0s delay = začne hned */
overflow: hidden;
}
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
/* PORTRÉTY - NAJÍŽDÍ PO OBJEVENÍ VS KONTEJNERU */
.vs-portrait {
position: absolute;
width: 300px; height: 400px;
background-size: cover; background-position: center;
border: 4px solid #d1b66b;
box-shadow: 0 0 30px rgba(209, 182, 107, 0.5);
opacity: 0;
z-index: 10;
animation-duration: 2.2s;
animation-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94); /* Plynulé zpomalení */
animation-fill-mode: forwards;
animation-delay: 0.9s; /* Přijedou po VS kontejneru (2.1s + 0.4s) */
}
.vs-portrait-player {
animation-name: slideFromRight;
}
.vs-portrait-teacher {
background-image: url('https://files.catbox.moe/qnb3if.jpg');
animation-name: slideFromLeft;
}
/* HERO KARTA - PŘIJEDE ZLEVA */
@keyframes slideFromRight {
0% {
right: -450px;
opacity: 0;
}
100% {
right: calc(50% + 80px);
opacity: 1;
}
}
/* ENEMY KARTA - PŘIJEDE ZPRAVA */
@keyframes slideFromLeft {
0% {
left: -450px;
opacity: 0;
}
100% {
left: calc(50% + 80px);
opacity: 1;
}
}
/* VS SEPARATOR */
.vs-separator {
position: absolute;
font-size: 80px; font-weight: bold; color: #d1b66b;
text-shadow: 0 0 20px rgba(209, 182, 107, 0.8);
z-index: 15;
opacity: 0;
animation: fadeInVS 0.5s ease-in 4s forwards; /* Po příjezdu karet */
font-family: 'Cinzel Decorative', serif;
letter-spacing: 8px;
}
@keyframes fadeInVS { 0% { opacity: 0; transform: scale(0.5); } 100% { opacity: 1; transform: scale(1); } }
/* JMÉNA POD PORTRÉTY */
.vs-character-name {
position: absolute; bottom: -60px; width: 100%;
text-align: center; color: #d1b66b;
font-size: 24px; font-weight: bold;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);
font-family: 'Cinzel Decorative', serif;
opacity: 0;
animation: fadeInName 0.5s ease-in 4.2s forwards; /* Těsně po VS */
}
@keyframes fadeInName { 0% { opacity: 0; bottom: -50px; } 100% { opacity: 1; bottom: -60px; } }
</style>
<!-- VIGNETACE - úplně první, aby byla pod vším -->
<div id="fire-vignette"></div>
<!-- OKRAJOVÁ VIGNETACE - nad vším, po celou dobu -->
<div id="edge-vignette"></div>
<div class="intro-zoom-image" id="introZoom">
<div class="intro-background"></div>
<canvas id="vs-flame-canvas"></canvas>
</div>
<div class="vs-animation-container" id="vsContainer">
<div class="vs-portrait vs-portrait-player" id="vsPlayerPortrait">
<div class="vs-character-name" id="vsPlayerName">(print: $vybranaPostava)</div>
</div>
<div class="vs-separator">VS</div>
<div class="vs-portrait vs-portrait-teacher">
<div class="vs-character-name">Hladový vlk</div>
</div>
</div>
<script>
(function() {
// === ČÁST 1: ANIMACE PLAMENŮ NA OČÍCH ===
if (window._vsFireRunning) return;
window._vsFireRunning = true;
const canvas = document.getElementById('vs-flame-canvas');
let ctx = null;
if (canvas) {
ctx = canvas.getContext('2d', { alpha: true });
}
let W = 0, H = 0;
let leftX = 0, rightX = 0, bottomY = 0;
function resizeFire() {
if(!canvas) return;
W = canvas.width = window.innerWidth;
H = canvas.height = window.innerHeight;
// POZICE PLAMENŮ NA OČÍCH KOSTRY
leftX = W * 0.49; // Levé oko
rightX = W * 0.52; // Pravé oko
bottomY = H * 0.33; // Výška očí
buildGradients();
}
window.addEventListener('resize', resizeFire, { passive: true });
const SEGS = 25;
const powWidth = new Float32Array(SEGS + 1);
const powAlpha = new Float32Array(SEGS + 1);
const powAmp = new Float32Array(SEGS + 1);
for (let i = 0; i <= SEGS; i++) {
const t = i / SEGS;
powWidth[i] = Math.pow(1 - t, 0.8);
powAlpha[i] = Math.pow(1 - t, 2.2);
powAmp[i] = Math.pow(t, 0.5);
}
const LAYERS = [
{ maxW: 80, baseAlpha: 0.20, r: 180, g: 0, b: 0 },
{ maxW: 40, baseAlpha: 0.40, r: 255, g: 60, b: 0 },
{ maxW: 10, baseAlpha: 0.70, r: 255, g: 200, b: 50 }
];
let glowGrd = null;
function buildGradients() {
if(!ctx) return;
const R = 70;
glowGrd = ctx.createRadialGradient(0, 0, 0, 0, 0, R);
glowGrd.addColorStop(0, 'rgba(255,220,100,0.9)');
glowGrd.addColorStop(0.4, 'rgba(255,100,0,0.3)');
glowGrd.addColorStop(1, 'rgba(180,0,0,0)');
}
const W1F = 0.020, W1S = 2.8;
const W2F = 0.038, W2S = 4.4;
const W3F = 0.060, W3S = 6.2;
const ptsX = new Float32Array(SEGS + 1);
const ptsY = new Float32Array(SEGS + 1);
function drawVerticalFlame(ox, oy, t, scale, timeOffset) {
if(!ctx) return;
const flameHeight = H * 0.15;
const segH = flameHeight / SEGS;
for (let i = 0; i <= SEGS; i++) {
const dist = i * segH;
const phase = dist;
const amp = powAmp[i];
const tAdj = t + timeOffset;
ptsY[i] = oy - dist;
ptsX[i] = ox
+ Math.sin(phase * W1F + tAdj * W1S) * (32 * amp * scale)
+ Math.sin(phase * W2F + tAdj * W2S + 1.2) * (16 * amp * scale)
+ Math.sin(phase * W3F + tAdj * W3S + 2.5) * (8 * amp * scale);
}
ctx.lineCap = 'round';
ctx.lineJoin = 'round';
for (let li = 0; li < LAYERS.length; li++) {
const layer = LAYERS[li];
for (let i = 0; i < SEGS; i++) {
const lw = layer.maxW * powWidth[i] * scale;
if (lw < 0.3) continue;
const alpha = layer.baseAlpha * powAlpha[i];
if (alpha < 0.005) continue;
ctx.lineWidth = lw;
ctx.strokeStyle = `rgba(${layer.r},${layer.g},${layer.b},${alpha.toFixed(2)})`;
ctx.beginPath();
ctx.moveTo(ptsX[i], ptsY[i]);
ctx.lineTo(ptsX[i+1], ptsY[i+1]);
ctx.stroke();
}
}
ctx.save();
ctx.translate(ox, oy);
ctx.globalAlpha = 0.7 + 0.3 * Math.sin(t * 19 + timeOffset * 3);
ctx.fillStyle = glowGrd;
ctx.beginPath();
ctx.arc(0, 0, 50 * scale, 0, Math.PI * 2);
ctx.fill();
ctx.restore();
}
let t = 0;
let lastTime = 0;
const FPS = 30;
const STEP = 1000 / FPS;
function animateFire(now) {
if (!document.getElementById('vs-flame-canvas')) {
window._vsFireRunning = false;
return;
}
requestAnimationFrame(animateFire);
if (now - lastTime < STEP) return;
lastTime = now;
if(!ctx) return;
ctx.clearRect(0, 0, W, H);
t += 0.033;
drawVerticalFlame(leftX, bottomY, t, 1.0, 0);
drawVerticalFlame(rightX, bottomY, t, 1.1, 2);
}
resizeFire();
requestAnimationFrame(animateFire);
// === ČÁST 2: VS LOGIKA (PORTRÉTY) ===
var attempts = 0;
var maxAttempts = 30;
function loadVSPortraits() {
attempts++;
var debugDiv = document.getElementById('debug-portrait-url-vs');
var playerURL = '';
if (debugDiv && debugDiv.textContent.trim() !== '') {
playerURL = debugDiv.textContent.trim();
} else if (typeof State !== 'undefined' && State.variables && State.variables.portraitURL) {
playerURL = State.variables.portraitURL;
}
if (!playerURL || playerURL === '' || playerURL.length < 10) {
if (attempts < maxAttempts) {
setTimeout(loadVSPortraits, 100);
return;
}
}
var playerPortrait = document.getElementById('vsPlayerPortrait');
if (playerPortrait) {
playerPortrait.style.backgroundImage = "url('" + playerURL + "')";
} else if (attempts < maxAttempts) {
setTimeout(loadVSPortraits, 100);
}
var nameDiv = document.getElementById('vsPlayerName');
if (nameDiv && typeof State !== 'undefined' && State.variables && State.variables.vybranaPostava) {
nameDiv.textContent = State.variables.vybranaPostava;
}
}
// Odstranění intro zoom
setTimeout(function() {
var introZoom = document.getElementById('introZoom');
if (introZoom) introZoom.remove();
}, 4500);
setTimeout(loadVSPortraits, 200);
})();
</script>{<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="UTF-8">
<title>Torch Scene - Red Flame with Sparkles</title>
<style>
body {
background: #111;
min-height: 100vh;
margin: 0;
overflow: hidden;
}
#torch-scene-container {
opacity: 1;
position: fixed;
bottom: 0;
left: 0;
right: 0;
width: 100%;
height: 80vh;
max-height: 500px;
z-index: 997;
pointer-events: none;
}
@keyframes fadeInSide {
from { opacity: 0; }
to { opacity: 0.8; }
}
#flame-canvas {
filter: blur(3px); /* Snížen blur pro lepší viditelnost jisker */
z-index: 998;
position: fixed;
top: -25px; left: -10px;
width: 100%; height: 100%;
pointer-events: none;
}
#fire-vignette {
position: fixed; top: 0; left: 0; right: 0; bottom: 0;
pointer-events: none; z-index: 1;
}
</style>
</head>
<body>
<canvas id="flame-canvas"></canvas>
<div id="torch-scene-container">
<div style="position: absolute; left: -100px; top: -150px; height: 150%; pointer-events: none;">
<img src="https://files.catbox.moe/dj8azj.png"
style="height: 100%; width: auto; opacity: 1.5; animation: fadeInSide 1s ease-in-out; display: block; pointer-events: none;">
</div>
</div>
<div id="fire-vignette">
<div style="position: absolute; inset: 0; background: radial-gradient(ellipse at center, transparent 0%, transparent 40%, rgba(60,20,0,0.3) 70%, rgba(0,0,0,0.8) 100%);"></div>
</div>
<script>
(function () {
if (window._dragonFlameRunning) return;
window._dragonFlameRunning = true;
const canvas = document.getElementById('flame-canvas');
const ctx = canvas.getContext('2d', { alpha: true });
let W, H, leftX, leftY;
const particles = [];
function resize() {
W = canvas.width = window.innerWidth;
H = canvas.height = window.innerHeight;
leftX = W * 0.19;
leftY = H * 0.52;
buildGradients();
}
window.addEventListener('resize', resize);
// --- SYSTÉM JISKER ---
class Spark {
constructor(x, y) {
this.x = x;
this.y = y;
// Letí doleva (záporné X) a trochu nahoru/dolů
this.vx = -Math.random() * 3 - 1;
this.vy = (Math.random() - 0.5) * 2 - 0.5; // Mírně stoupají
this.life = 1.0;
this.decay = Math.random() * 0.02 + 0.01;
this.size = Math.random() * 2 + 0.5;
}
update() {
this.x += this.vx;
this.y += this.vy;
this.life -= this.decay;
}
draw(ctx) {
ctx.fillStyle = `rgba(255, ${100 + this.life * 155}, 50, ${this.life})`;
ctx.beginPath();
ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2);
ctx.fill();
}
}
/* Nastavení plamene */
const SEGS = 22;
const powWidth = new Float32Array(SEGS + 1);
const powAlpha = new Float32Array(SEGS + 1);
const powAmp = new Float32Array(SEGS + 1);
for (let i = 0; i <= SEGS; i++) {
let t = i / SEGS;
powWidth[i] = Math.pow(1 - t, 0.8);
powAlpha[i] = Math.pow(1 - t, 2.0);
powAmp[i] = Math.pow(t, 0.5);
}
const LAYERS = [
{ maxW: 30, baseAlpha: 0.25, r: 220, g: 40, b: 0 },
{ maxW: 7, baseAlpha: 0.9, r: 255, g: 200, b: 80 }
];
let glowGrdL;
function buildGradients() {
glowGrdL = ctx.createRadialGradient(leftX, leftY, 0, leftX, leftY, 40);
glowGrdL.addColorStop(0, 'rgba(255, 150, 50, 0.8)');
glowGrdL.addColorStop(1, 'rgba(100, 0, 0, 0)');
}
let t = 0;
function draw() {
ctx.clearRect(0, 0, W, H);
t += 0.033;
// 1. Generování nových jisker
if (Math.random() > 0.6) {
particles.push(new Spark(leftX, leftY));
}
// 2. Kreslení a update jisker
for (let i = particles.length - 1; i >= 0; i--) {
particles[i].update();
if (particles[i].life <= 0) {
particles.splice(i, 1);
} else {
particles[i].draw(ctx);
}
}
// 3. Kreslení plamene (převzato a upraveno)
const streamLen = W * 0.11;
const segW = streamLen / SEGS;
const ptsX = [], ptsY = [];
for (let i = 0; i <= SEGS; i++) {
let dist = i * segW;
let amp = powAmp[i] * 12; // Menší vlnění
ptsX[i] = leftX - dist;
ptsY[i] = leftY + Math.sin(dist * 0.03 - t * 4) * amp + Math.sin(dist * 0.06 - t * 7) * (amp/2);
}
ctx.lineCap = 'round';
LAYERS.forEach(layer => {
for (let i = 0; i < SEGS; i++) {
ctx.lineWidth = layer.maxW * powWidth[i];
ctx.strokeStyle = `rgba(${layer.r},${layer.g},${layer.b},${(layer.baseAlpha * powAlpha[i]).toFixed(2)})`;
ctx.beginPath();
ctx.moveTo(ptsX[i], ptsY[i]);
ctx.lineTo(ptsX[i+1], ptsY[i+1]);
ctx.stroke();
}
});
// Záře v místě hoření
ctx.globalAlpha = 0.6 + Math.sin(t*10)*0.2;
ctx.fillStyle = glowGrdL;
ctx.beginPath();
ctx.arc(leftX, leftY, 25, 0, 7);
ctx.fill();
ctx.globalAlpha = 1;
requestAnimationFrame(draw);
}
resize();
draw();
})();
</script>
</body>
</html>}{(if: $weaponImageURL is not "" and $weaponImageURL is not 0)[
<!-- ⭐ PŘIDEJ TŘÍDU weapon-level-X podle úrovně zbraně -->
(set: _weaponClass to "weapon-on-table player-weapon")
(set: _iconURL to "https://files.catbox.moe/4tfd8n.png")
<!-- ⭐ INICIALIZUJ PRÁZDNÉ HTML STRINGY -->
(set: _runesHTML to "")
(set: _raysHTML to "")
(if: $weaponLevel >= 3)[
(set: _weaponClass to "weapon-on-table player-weapon weapon-legendary")
(set: _iconURL to "https://files.catbox.moe/h87n3x.png")
<!-- Paprsky pro level 3 -->
(set: _raysHTML to "<div class='weapon-light-rays'></div>")
<!-- Runy pro level 3 -->
(set: _runesHTML to "<div class='weapon-runes-orbit'>
<div class='weapon-rune' style='--angle: 0deg;'>ᚠ</div>
<div class='weapon-rune' style='--angle: 60deg;'>ᚢ</div>
<div class='weapon-rune' style='--angle: 120deg;'>ᚦ</div>
<div class='weapon-rune' style='--angle: 180deg;'>ᚨ</div>
<div class='weapon-rune' style='--angle: 240deg;'>ᚱ</div>
<div class='weapon-rune' style='--angle: 300deg;'>ᚲ</div>
</div>")
](else-if: $weaponLevel is 2)[
(set: _weaponClass to "weapon-on-table player-weapon weapon-rare")
(set: _iconURL to "https://files.catbox.moe/x7hpjq.png")
<!-- Runy pro level 2 -->
(set: _runesHTML to "<div class='weapon-runes-orbit'>
<div class='weapon-rune' style='--angle: 0deg;'>ᚠ</div>
<div class='weapon-rune' style='--angle: 60deg;'>ᚢ</div>
<div class='weapon-rune' style='--angle: 120deg;'>ᚦ</div>
<div class='weapon-rune' style='--angle: 180deg;'>ᚨ</div>
<div class='weapon-rune' style='--angle: 240deg;'>ᚱ</div>
<div class='weapon-rune' style='--angle: 300deg;'>ᚲ</div>
</div>")
](else-if: $weaponLevel is 1)[
(set: _weaponClass to "weapon-on-table player-weapon weapon-common")
(set: _iconURL to "https://files.catbox.moe/4tfd8n.png")
]
<!-- ⭐ PŘIPRAV ENEMY IKONU DATA PŘEDEM -->
(set: _enemyIconURL to "https://files.catbox.moe/4tfd8n.png")
(set: _enemyDisplayStyle to "none")
(if: $enemyWeaponImageURL is not "" and $enemyWeaponImageURL is not 0)[
(set: _enemyDisplayStyle to "flex")
(if: $enemyWeaponLevel >= 3)[
(set: _enemyIconURL to "https://files.catbox.moe/h87n3x.png")
](else-if: $enemyWeaponLevel is 2)[
(set: _enemyIconURL to "https://files.catbox.moe/x7hpjq.png")
](else:)[
(set: _enemyIconURL to "https://files.catbox.moe/4tfd8n.png")
]
]
<!-- ⭐ WRAPPER PRO CELÝ WEAPON DISPLAY -->
(print: "<div class='weapon-display-container' style='display: block !important; opacity: 1 !important; visibility: visible !important;'>
<div class='" + _weaponClass + "'>
" + _runesHTML + "
" + _raysHTML + "
<div class='weapon-card-wrapper'>
<img src='" + $weaponImageURL + "' class='card'>
</div>
<div class='weapon-slash'></div>
</div>
<!-- ⭐ HRÁČOVA IKONA (vlevo dole) -->
<div class='player-weapon-icon tooltip-container' style='display: flex !important; opacity: 1 !important; visibility: visible !important;'>
<img src='" + _iconURL + "' class='dmg-icon-bg' style='opacity: 1 !important; visibility: visible !important;'>
<span class='dmg-text-overlay' style='opacity: 1 !important; visibility: visible !important;'>" + (text: $weaponDamage) + "</span>
<span class='tooltip-bubble'><em>Automatický útok každé kolo: " + $weaponName + "</em></span>
</div>
<!-- ⭐ NEPŘÍTELOVA IKONA (vpravo dole) -->
<div class='enemy-weapon-icon tooltip-container' style='display: " + _enemyDisplayStyle + " !important; opacity: 1 !important; visibility: visible !important;'>
<img src='" + _enemyIconURL + "' class='dmg-icon-bg' style='opacity: 1 !important; visibility: visible !important;'>
<span class='dmg-text-overlay' style='opacity: 1 !important; visibility: visible !important;'>" + (text: $enemyWeaponDamage) + "</span>
<span class='tooltip-bubble'><em>Útok nepřítele: " + $enemyWeaponName + "</em></span>
</div>
</div>")
]}
<style>
/* ═══════════════════════════════════════════════════ */
/* 📦 WRAPPER PRO WEAPON + IKONY */
/* ═══════════════════════════════════════════════════ */
.weapon-display-container {
position: relative;
width: 100%;
height: 100%;
display: block !important;
opacity: 1 !important;
visibility: visible !important;
}
/* ═══════════════════════════════════════════════════ */
/* 🗡️ ZÁKLADNÍ WEAPON DISPLAY & LAYOUT HOLDER */
/* ═══════════════════════════════════════════════════ */
.weapon-on-table {
position: fixed;
left: 25%;
top: 35%;
transform: translate(-50%, -50%);
display: flex;
flex-direction: column;
align-items: center;
min-height: 250px;
z-index: 600;
pointer-events: auto;
}
.weapon-card-wrapper .card {
width: 150px;
height: auto;
transition: all 0.4s ease-in-out;
z-index: 5;
}
/* 🌀 RUNY JAKO DRŽÁK PROSTORU */
.weapon-runes-orbit {
position: absolute;
top: 50%;
left: 50%;
width: 200px;
height: 200px;
transform: translate(-50%, -50%);
pointer-events: none;
z-index: 2;
animation: runes-spin 20s linear infinite;
opacity: 0.15;
}
@keyframes runes-spin {
from { transform: translate(-50%, -50%) rotate(0deg); }
to { transform: translate(-50%, -50%) rotate(360deg); }
}
.weapon-rune {
position: absolute;
top: 50%;
left: 50%;
font-size: 20px;
transform-origin: 0 0;
transform: rotate(var(--angle)) translateX(100px) rotate(calc(-1 * var(--angle)));
}
/* ═══════════════════════════════════════════════════ */
/* ✨ ÚROVNĚ ZÁŘE A BARVY RUN */
/* ═══════════════════════════════════════════════════ */
/* 🟤 LEVEL 1 - COMMON */
.weapon-common .card {
filter: drop-shadow(0 0 10px rgba(139, 69, 19, 0.6));
}
.weapon-common .weapon-rune {
color: #8b4513;
text-shadow: 0 0 5px rgba(139, 69, 19, 0.5);
}
/* 🟠 LEVEL 2 - RARE */
.weapon-rare .card {
filter: drop-shadow(0 0 15px rgba(255, 140, 0, 0.7));
}
.weapon-rare .weapon-rune {
color: #ff8c00;
text-shadow: 0 0 8px rgba(255, 140, 0, 0.6);
}
/* 🟡 LEVEL 3 - LEGENDARY */
.weapon-legendary .card {
filter: drop-shadow(0 0 20px rgba(255, 215, 0, 0.8));
animation: legendary-pulse 2s ease-in-out infinite;
}
.weapon-legendary .weapon-rune {
color: #ffd700;
text-shadow: 0 0 10px rgba(255, 215, 0, 0.8);
opacity: 0.2;
}
@keyframes legendary-pulse {
0%, 100% { filter: drop-shadow(0 0 15px rgba(255, 215, 0, 0.7)); }
50% { filter: drop-shadow(0 0 30px rgba(255, 215, 0, 1)) brightness(1.1); }
}
</style>{
(if: $weaponsActivatedThisBattle is 0)[
(set: $weaponsActivatedThisBattle to (dm:))
]
(if: $enemyWeaponsActivatedThisBattle is 0)[
(set: $enemyWeaponsActivatedThisBattle to (dm:))
]
(set: $isHandWeaponFirstPlay to false)
(set: $isEquippedWeaponFirstPlay to false)
(set: $isEnemyWeaponFirstPlay to false)
(if: $playerCard contains "type" and $playerCard's type is "weapon")[
(set: _handKey to $playerCard's name)
(if: $weaponsActivatedThisBattle contains _handKey)[
(set: $isHandWeaponFirstPlay to false)
](else:)[
(set: $isHandWeaponFirstPlay to true)
(set: $weaponsActivatedThisBattle to $weaponsActivatedThisBattle + (dm: _handKey, true))
]
]
(if: $weaponName is not 0 and $weaponName is not "")[
(if: $weaponsActivatedThisBattle contains $weaponName)[
(set: $isEquippedWeaponFirstPlay to false)
](else:)[
(set: $isEquippedWeaponFirstPlay to true)
(set: $weaponsActivatedThisBattle to $weaponsActivatedThisBattle + (dm: $weaponName, true))
]
]
(if: $enemyCard contains "type" and $enemyCard's type is "weapon")[
(set: _enemyHandKey to $enemyCard's name)
(if: not ($enemyWeaponsActivatedThisBattle contains _enemyHandKey))[
(set: $isEnemyWeaponFirstPlay to true)
(set: $enemyWeaponsActivatedThisBattle to $enemyWeaponsActivatedThisBattle + (dm: _enemyHandKey, true))
]
]
(if: $enemyWeaponName is not 0 and $enemyWeaponName is not "")[
(if: not ($enemyWeaponsActivatedThisBattle contains $enemyWeaponName))[
(set: $enemyWeaponsActivatedThisBattle to $enemyWeaponsActivatedThisBattle + (dm: $enemyWeaponName, true))
]
]
}(text-style:"superscript","blur")[//Nalgatské království 1238, předvánoční trhy//]
Jsi ochránce jménem ''|jmeno>[$vybranaPostava]'' a za nějakou tu zlatku doprovázíš potulné obchodníky, abys je chránil. Ve vesnici U tří ryb, jste postavili obchodní tábor, aby na večer bylo připraveno představení, které přitáhne kupce. Tyto předvánoční trhy byly ve velké oblibě a byl to zároveň i čas velkých žní pro obchodníky.
Po setmění začalo první vystoupení. Ty se procházíš s mečem u pasu mezi stany obchodníků, na které začalo vydatně chumelit a strážíš je.
„A nyní vám povím příběh o legendárním mistru špehovi, jménem Gosel,“ ozval se úvod dalšího vystoupení od zábavného vypravěče.
V tu chvíli si zahlédl podezřelou postavu, jak se plíží mezi stany.
''[[[Můžeš na ní křiknout a připravit se na boj|4]]
[[Nebo jí můžeš raději sledovat|10]]]''
<!-- (display: "SaveIcon"))-->
<!-- toto je poznamka -->
(display: "InventoryHUD")|notif>[<span style="position:fixed;right:25%;top:15%;transform:translate(-50%,-50%);background:rgba(42,24,16,0.5);border:2px solid rgba(139,105,20,0.9);border-radius:6px;padding:3px 6px;box-shadow:0 4px 10px rgba(0,0,0,0.9);color:#f5e6d3;font-size:25px;z-index:9999;opacity:1;animation:fadebox 5s ease-in-out forwards;">(after:0.8s)[(text-colour:yellow)[(text-style:"sway")[(text-style:"buoy")[zkušenost +1XP]]]]</span><style>@keyframes fadebox{0%{opacity:0;}10%{opacity:1;}90%{opacity:1;}100%{opacity:0;}}</style>](after:5s)[(replace:?notif)[]]|tutnotif>[<span style="position:fixed;right:5%;top:15%;transform:translate(-50%,-50%);background:rgba(42,24,16,0.5);border:2px solid rgba(139,105,20,0.9);border-radius:6px;padding:3px 6px;box-shadow:0 4px 10px rgba(0,0,0,0.9);color:#f5e6d3;font-size:25px;z-index:9999;opacity:1;animation:fadebox 5s ease-in-out forwards;">(after:0.8s)[(text-colour:yellow)[(text-style:"sway")[zkušenosti vydíš zde]]]</span><style>@keyframes fadebox{0%{opacity:0;}10%{opacity:1;}90%{opacity:1;}100%{opacity:0;}}</style>](after:4s)[(replace:?tutnotif)[]](display: "ShopShields"){(display: "TorchAnimation")
(display: "InventoryHUD")
(set: $hasSword to false)
(set: $hasDaggerQuality to true)
<div class="scroll-wrapper">
<div style="background: linear-gradient(135deg, rgba(42,24,16,0.2) 0%, rgba(26,15,8,0.2) 100%); border: 3px solid rgba(139,105,20,0.2); border-radius: 2px; padding: 30px; margin: 30px auto; max-width: 700px; box-shadow: 0 8px 20px rgba(0,0,0,0.2);">
Pořád nemůžeš uvěřit tomu, že jsi se konečeně rozhodl vydat z té díry do neznáma. Je štěstí že se ti podařilo popadnout zrovna dýku. Patřila zřejmě pánu usedlosti. Stejně se k tobě nechoval dobře a už ho nikdy neuvidíš. <br>Při odchodu z domova jsi ani nemyslel na to kam se vydat, chtěl jsi porstě pryč, automaticky jsi zamířil na cestu, která vede do vedlejší vesnice. Chceš tam opravdu jít? nebo projít lesem do neznámých končin?</div><br>
(align:"=><=")[ <div class="tooltip-container">
<h5 class="burning"><div style="text-align: center;"> (text-colour:#103102)[[[Pokračovat dál cestou|Prolog]]]</div></h5>
<span class="tooltip-bubble">Cesty bývají nebezpečné</span>
</div>
<br>
<div class="tooltip-container">
<h5 class="burning"><div style="text-align: center;"> (text-colour:#103102)[[[jít lesem|Prolog1]]]</div></h5>
<span class="tooltip-bubble">Lesy jsou nevyzpytatelné</span>
</div>
</span>
</span>]
<div class="tutorial-pointer-inline" id="inventory-pointer" style="top: 20px; right: 60px;">
<div class="tutorial-pointer-text">(text-style:"bold","italic")[věci v inventáři]</div>
<img src="https://files.catbox.moe/9iog7u.png" alt="pointer" style="width: 85px; height: 100px;">
</div>
</div>
(align:"=><=")+(box:"X")[//(text-colour:#574f4f)[...Tip. Klikni na ikonu inventáře v horním rohu obrazovky a vyber kartičku dýky, aby jsi ji měl při souboji v balíčku..] //]
<style>
/* --- ČÁSTICE (Blesky) --- */
.particle {
position: absolute;
pointer-events: none;
animation: particleRise 0.8s ease-out forwards;
z-index: 10001;
}
.lightning-particle {
background: radial-gradient(circle, #ADD8E6, #87CEEB);
box-shadow: 0 0 15px 5px rgba(173, 216, 230, 0.7), 0 0 30px 10px rgba(135, 206, 235, 0.5);
border-radius: 2px;
width: 4px;
height: 12px;
}
@keyframes particleRise {
0% { opacity: 1; transform: translateY(0) scale(1) rotate(0deg); }
100% { opacity: 0; transform: translateY(-30px) scale(0.3) rotate(360deg); }
}
/* --- ROTUJÍCÍ PAPRSKY POD KARTOU --- */
.ray-container {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 150px;
height: 150px;
z-index: 9997;
animation: rotateRays 4s linear infinite;
}
.ray {
position: absolute;
top: 50%;
left: 50%;
width: 3px;
height: 75px;
background: linear-gradient(to bottom,
rgba(135, 206, 235, 0.9),
rgba(173, 216, 230, 0.4),
transparent);
transform-origin: center top;
box-shadow: 0 0 10px rgba(135, 206, 235, 0.8),
0 0 20px rgba(173, 216, 230, 0.6),
0 0 30px rgba(135, 206, 235, 0.4);
filter: blur(1px);
}
@keyframes rotateRays {
0% { transform: translate(-50%, -50%) rotate(0deg); }
100% { transform: translate(-50%, -50%) rotate(360deg); }
}
/* --- KARTA REVEAL --- */
.card-reveal {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 300px;
height: 450px;
z-index: 9999;
cursor: pointer;
transition: all 0.6s cubic-bezier(0.4, 0, 0.2, 1);
animation: cardFloat 3s ease-in-out infinite;
}
@keyframes cardFloat {
0%, 100% { transform: translate(-50%, -50%) translateY(0px); }
50% { transform: translate(-50%, -50%) translateY(-15px); }
}
.card-reveal.flying {
top: 20px;
left: calc(100% - 80px);
transform: translate(0, 0) scale(0.2);
opacity: 0;
animation: none;
}
.card-img {
width: 100%;
height: 100%;
object-fit: contain;
filter: drop-shadow(0 0 25px rgba(135, 206, 235, 0.6))
drop-shadow(0 0 40px rgba(173, 216, 230, 0.4));
}
.card-reveal-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 20, 0.85);
z-index: 9998;
transition: opacity 0.6s ease;
}
.card-reveal-overlay.closing { opacity: 0; pointer-events: none; }
</style>
<script>
$(document).ready(function() {
// 1. Vytvoření paprsků
let raysHTML = '<div class="ray-container" id="ray-wheel">';
for (let i = 0; i < 16; i++) {
const angle = (360 / 16) * i;
raysHTML += `<div class="ray" style="transform: translate(-50%, 0) rotate(${angle}deg);"></div>`;
}
raysHTML += '</div>';
// 2. Vložení HTML karty dýky + paprsků
const cardRevealHTML = `
<div class="card-reveal-overlay"></div>
${raysHTML}
<div class="card-reveal" id="dagger-card">
<img src="https://files.catbox.moe/f3ijtv.png" class="card-img">
<div id="dagger-particle-container" style="position:absolute; top:0; left:0; width:100%; height:100%; pointer-events:none;"></div>
</div>`;
$('body').append(cardRevealHTML);
const $card = $('#dagger-card');
const $overlay = $('.card-reveal-overlay');
const $rays = $('#ray-wheel');
// 3. Funkce pro odlet karty
function dismissDagger() {
if ($card.hasClass('flying')) return;
$overlay.addClass('closing');
$card.addClass('flying');
$rays.fadeOut(600);
setTimeout(() => {
$card.remove();
$overlay.remove();
$rays.remove();
}, 600);
}
// 4. Funkce pro blesky přímo na kartě
function spawnDaggerParticles() {
const container = document.getElementById('dagger-particle-container');
if (!container) return;
for (let i = 0; i < 25; i++) {
const p = document.createElement('div');
p.className = 'particle lightning-particle';
p.style.left = Math.random() * 100 + '%';
p.style.top = Math.random() * 100 + '%';
p.style.animationDelay = (Math.random() * 0.5) + 's';
container.appendChild(p);
setTimeout(() => p.remove(), 1000);
}
}
// Spustit efekty
setTimeout(spawnDaggerParticles, 200);
// 5. Ovládání (Klik nebo 3s automatika)
$card.on('click', dismissDagger);
$overlay.on('click', dismissDagger);
// Automatický odlet po 3 sekundách
setTimeout(dismissDagger, 3000);
// 6. Mizení tutorial pointeru
const inventoryPointer = document.getElementById('inventory-pointer');
if (inventoryPointer) {
setTimeout(() => {
inventoryPointer.style.opacity = '0';
inventoryPointer.style.transition = 'opacity 0.5s ease-out';
setTimeout(() => inventoryPointer.remove(), 500);
}, 3000);
}
});
</script>
}Lapkova dýka je ve výsledku vcelku normální.
//(text-colour:#37291a)[přidáno do inventáře]//
<div class="scene-card">
<div class="dice-container">
<div class="dice-player-box" id="item-acquired-box" style="min-height: 100px;">
<img src="https://files.catbox.moe/5tkzw4.png" alt="Opotřebovaná dýka" style="max-width: 80%; filter: grayscale(30%) brightness(0.8);">
</div>
</div>
<div class="tutorial-pointer-inline" id="inventory-pointer" style="top: 20px; right: 60px;">
<div class="tutorial-pointer-text">(text-style:"bold","italic")[věci v inventáři]</div>
<img src="https://files.catbox.moe/9iog7u.png" alt="pointer" style="width: 85px; height: 100px;">
</div>
</div>
[[Podívat se co má lapka na sobě|7]]
(display: "InventoryHUD")
<style>
/* --- CSS pro scene-card --- */
.scene-card {
position: relative;
min-height: 200px;
border: 3px solid rgba(139, 69, 19, 0.8);
border-radius: 2px;
overflow: hidden;
}
.dice-container {
display: flex;
justify-content: center;
align-items: center;
min-height: 200px;
}
.dice-player-box {
position: relative;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 20px;
}
/* --- MODRÉ BLESKOVÉ ČÁSTICE PRO NORMÁLNÍ PŘEDMĚT --- */
.lightning-particle {
background: radial-gradient(circle, #ADD8E6, #87CEEB);
box-shadow: 0 0 15px 5px rgba(173, 216, 230, 0.7), 0 0 30px 10px rgba(135, 206, 235, 0.5);
border-radius: 2px;
width: 4px;
height: 12px;
}
.particle {
position: absolute;
pointer-events: none;
animation: particleRise 0.8s ease-out forwards;
z-index: 100;
}
@keyframes particleRise {
0% {
opacity: 1;
transform: translateY(0) scale(1) rotate(0deg);
}
100% {
opacity: 0;
transform: translateY(-30px) scale(0.3) rotate(360deg);
}
}
</style>
<script>
// =========================================================
// FUNKCE PRO MODRÉ BLESKOVÉ ČÁSTICE
// =========================================================
function spawnAcquisitionParticles() {
const particleTarget = document.querySelector('.scene-card');
if (particleTarget) {
const width = particleTarget.offsetWidth;
const height = particleTarget.offsetHeight;
for (let i = 0; i < 30; i++) {
const particle = document.createElement('div');
particle.className = 'particle lightning-particle'; // MODRÉ BLESKY
const randomX = Math.random() * width;
const randomY = Math.random() * height;
particle.style.left = randomX + 'px';
particle.style.top = randomY + 'px';
particle.style.animationDelay = (Math.random() * 0.4) + 's';
particleTarget.appendChild(particle);
setTimeout(() => { particle.remove(); }, 1200);
}
}
}
// =========================================================
// VOLÁNÍ FUNKCÍ A LOGIKA ZMIZENÍ POINTERU
// =========================================================
// 1. Spustíme efekt modrých blesků (po 300ms)
setTimeout(spawnAcquisitionParticles, 300);
// 2. Logika pro zobrazení a zmizení inventory pointeru
const inventoryPointer = document.getElementById('inventory-pointer');
if (inventoryPointer) {
// Pointer je viditelný hned od začátku
// Skryjeme ho po 3 sekundách
setTimeout(() => {
inventoryPointer.style.opacity = '0';
inventoryPointer.style.transition = 'opacity 0.5s ease-out';
// Po dokončení fade-outu element úplně odstraníme
setTimeout(() => {
inventoryPointer.remove();
}, 500);
}, 3000);
}
</script>Lapkova dýka je ve výsledku vcelku kvalitní.
//(text-colour:#37291a)[přidáno do inventáře]//
<div class="scene-card">
<div class="dice-container">
<div class="dice-player-box" id="item-acquired-box" style="min-height: 100px;">
<img src="https://files.catbox.moe/2olwuv.png" alt="Kvalitní dýka" style="max-width: 80%; filter: drop-shadow(0 0 15px rgba(100, 150, 200, 0.9)); animation: glow 2s ease-in-out infinite;">
</div>
</div>
<div class="tutorial-pointer-inline" id="inventory-pointer" style="top: 20px; right: 60px;">
<div class="tutorial-pointer-text">(text-style:"bold","italic")[věci v inventáři]</div>
<img src="https://files.catbox.moe/9iog7u.png" alt="pointer" style="width: 85px; height: 100px;">
</div>
</div>
[[Podívat se co má lapka na sobě|7]]
(display: "InventoryHUD")
<style>
/* --- CSS pro scene-card --- */
.scene-card {
position: relative;
min-height: 200px;
border: 3px solid rgba(139, 69, 19, 0.8);
border-radius: 2px;
overflow: hidden;
}
.dice-container {
display: flex;
justify-content: center;
align-items: center;
min-height: 200px;
}
.dice-player-box {
position: relative;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 20px;
}
/* --- ZLATÉ ČÁSTICE PRO KVALITNÍ PŘEDMĚT --- */
.success-particle {
background: radial-gradient(circle, #ffd700, #ff8800);
box-shadow: 0 0 15px #ffd700;
}
.particle {
position: absolute;
width: 10px;
height: 10px;
border-radius: 50%;
pointer-events: none;
animation: particleRise 0.8s ease-out forwards;
z-index: 100;
}
@keyframes particleRise {
0% {
opacity: 1;
transform: translateY(0) scale(1);
}
100% {
opacity: 0;
transform: translateY(-50px) scale(0.3);
}
}
@keyframes glow {
0%, 100% {
filter: drop-shadow(0 0 15px rgba(100, 150, 200, 0.9));
}
50% {
filter: drop-shadow(0 0 25px rgba(100, 150, 200, 1));
}
}
</style>
<script>
// =========================================================
// FUNKCE PRO ZLATÉ ČÁSTICE
// =========================================================
function spawnAcquisitionParticles() {
const particleTarget = document.querySelector('.scene-card');
if (particleTarget) {
const width = particleTarget.offsetWidth;
const height = particleTarget.offsetHeight;
for (let i = 0; i < 30; i++) {
const particle = document.createElement('div');
particle.className = 'particle success-particle'; // ZLATÉ ČÁSTICE
const randomX = Math.random() * width;
const randomY = Math.random() * height;
particle.style.left = randomX + 'px';
particle.style.top = randomY + 'px';
particle.style.animationDelay = (Math.random() * 0.4) + 's';
particleTarget.appendChild(particle);
setTimeout(() => { particle.remove(); }, 1200);
}
}
}
// =========================================================
// VOLÁNÍ FUNKCÍ A LOGIKA ZMIZENÍ POINTERU
// =========================================================
// 1. Spustíme efekt zlatých částic (po 300ms)
setTimeout(spawnAcquisitionParticles, 300);
// 2. Logika pro zobrazení a zmizení inventory pointeru
const inventoryPointer = document.getElementById('inventory-pointer');
if (inventoryPointer) {
// Pointer je viditelný hned od začátku
// Skryjeme ho po 3 sekundách
setTimeout(() => {
inventoryPointer.style.opacity = '0';
inventoryPointer.style.transition = 'opacity 0.5s ease-out';
// Po dokončení fade-outu element úplně odstraníme
setTimeout(() => {
inventoryPointer.remove();
}, 500);
}, 3000);
}
</script>(enchant: ?Link, (t8n-depart: "dissolve") + (t8n-arrive: "dissolve"))(display: "ShopConsumables")(display: "ShopArmor"){<div id="locationContainer">
(link-goto: "<div class='location location-vesnice'><img class='location-icon' src='https://files.catbox.moe/2we1pn.png'><span class='tooltip'>[<h3>(text-colour:orange)[Vesnice Mezihoří]</h3>]vypadá, že byla již několikrát
vypleněna do základů</span></div>", "Vesnice")
(link-goto: "<div class='location location-les'><img class='location-icon' src='https://files.catbox.moe/41ktv5.png'><span class='tooltip'>(text-colour:orange)[<h3>(text-colour:orange)[Temný les]</h3>]Tady se již párkrát někdo stratil</span></div>", "Les")
(link-goto: "<div class='location location-hrad'><img class='location-icon' src='https://files.catbox.moe/l4afzn.png'><span class='tooltip'>(text-colour:orange)[<h3>(text-colour:orange)[Zřícenina]</h3>]Byl to hrad? jméno si už ani
místní nepamatujou</span></div>", "Hrad")
(link-goto: "<div class='location location-trh'><img class='location-icon' src='https://files.catbox.moe/tutzju.png'><span class='tooltip'>(text-colour:orange)[<h3>(text-colour:orange)[Provizorní trhy]</h3>]Na rychlo postavené stany
kupců a jejich obránců</span></div>", "Trh")
</div>}{<div id="locationContainer">
(link-goto: "<div class='location location-trh'><img class='location-icon' src='https://files.catbox.moe/tutzju.png'><span class='tooltip'>(text-colour:orange)[<h3>(text-colour:orange)[Provizorní trhy]</h3>]Na rychlo postavené stany
kupců a jejich obránců</span></div>", "Trh")
(link-goto: "<div class='location location-vesnice'><img class='location-icon' src='https://files.catbox.moe/2we1pn.png'><span class='tooltip'>[<h3>(text-colour:orange)[Vesnice Mezihoří]</h3>]vypadá, že byla již několikrát
vypleněna do základů</span></div>", "Vesnice")
</div>}{Učitel kamsi zmizel a ty tu stojíš sám, zatím co na tebe sněží, vzpomeneš si že máš mapu pro případ že by jsi zabloudil.
<div class="scene-card">
<div class="dice-container">
<div class="dice-player-box"></div>
<div class="dice-enemy-box"></div>
</div>
</div>
<div style="background: rgba(255,215,0,0.1); padding: 5px; border-radius: 2px; margin: 5px 0; text-align: center;">
</div>
</div>(display: "InventoryHUD")
[[Podívat se na mapu|vyberlokaci]]
[[Zajít za učitelem|ucitel]]}
(display: "SnowDegreeAnimation"){
(if: visits is 1)[
(set: $daggerPickupRolled to false)
(set: $daggerDiceResult to 0)
(set: $animating to false)
]
Lapkova dýka se zanořila do sněhu.
(if: $daggerQuality is "quality")[
<style>
tw-story {
background-image: url('TVOJE_URL_PRO_DYKALEPSI.jpg') !important;
}
</style>
](else-if: $daggerQuality is "poor")[
<style>
tw-story {
background-image: url('TVOJE_URL_PRO_DYKAHORSI.jpg') !important;
}
</style>
]
(if: $hasDagger is not true)[
<div class="combat-box" style="background:rgba(42,24,16,0.5);">
(if: not $daggerPickupRolled)[
<div class="dice-section">
<p style="text-align: center; color: #ffd700; font-size: 1.1em; margin-bottom: 15px;">
**Prohlédni kvalitu dýky!**
</p>
|pickupButton>[
(link: "(text-colour:#ff8800)[hodit kostkou!]")[
(set: $daggerDiceResult to (random: 1, 6))
(set: $animating to true)
(replace: ?pickupButton)[]
(replace: ?diceDisplay)[<div class="dice-rolling"><img src="https://files.catbox.moe/a843tu.png" class="dice-image dice-fall"></div>]
(live: 0.6s)[
(stop:)
(set: $daggerPickupRolled to true)
(set: $animating to false)
(if: $daggerDiceResult > 3)[
(set: $hasDaggerQuality to true)
(set: $daggerQuality to "quality")
(set: $message to "<span class='combat-victory'>**Skvělý nález! Kvalitní dýka! Přidána do inventáře!**</span>")
<script>
setTimeout(function() {
var diceBox = document.querySelector('.dice-player-box');
if (diceBox) {
for (var i = 0; i < 20; i++) {
var particle = document.createElement('div');
particle.className = 'particle success-particle';
var width = diceBox.offsetWidth;
var height = diceBox.offsetHeight;
particle.style.left = (width * 0.3 + Math.random() * (width * 0.4)) + 'px';
particle.style.top = (height * 0.3 + Math.random() * (height * 0.4)) + 'px';
particle.style.animationDelay = (Math.random() * 0.3) + 's';
diceBox.appendChild(particle);
setTimeout(function(p) { p.remove(); }, 1200, particle);
}
}
}, 300);
</script>
(live: 0.3s)[
(stop:)
(goto: "dykalepsi")
]
](else:)[
(set: $hasDagger to true)
(set: $daggerQuality to "poor")
(set: $message to "<span class='combat-defeat'>**Opotřebovaná dýka. Ale ujde to. Přidána do inventáře!**</span>")
(live: 0.3s)[
(stop:)
(goto: "dykahorsi")
]
]
]
]
]
</div>
]
</div>
<div class="scene-card">
<div class="dice-container">
<div class="dice-player-box">
|diceDisplay>[
(if: $daggerPickupRolled)[
(if: $daggerDiceResult is 1)[
<img src="https://files.catbox.moe/a843tu.png" class="dice-image">
](else-if: $daggerDiceResult is 2)[
<img src="https://files.catbox.moe/laokqg.png" class="dice-image">
](else-if: $daggerDiceResult is 3)[
<img src="https://files.catbox.moe/9ubppy.png" class="dice-image">
](else-if: $daggerDiceResult is 4)[
<img src="https://files.catbox.moe/zp7fb4.png" class="dice-image">
](else-if: $daggerDiceResult is 5)[
<img src="https://files.catbox.moe/vqfqru.png" class="dice-image">
](else-if: $daggerDiceResult is 6)[
<img src="https://files.catbox.moe/hi7w7n.png" class="dice-image">
]
<div class="dice-number-white-small">$daggerDiceResult</div>
<div style="margin-top: 20px;">
(if: $daggerQuality is "quality")[
<img src="https://files.catbox.moe/2olwuv.png" alt="Kvalitní dýka" style="max-width: 80%; filter: drop-shadow(0 0 15px rgba(100, 150, 200, 0.9)); animation: glow 2s ease-in-out infinite;">
](else:)[
<img src="https://files.catbox.moe/5tkzw4.png" alt="Opotřebovaná dýka" style="max-width: 80%; filter: grayscale(30%) brightness(0.8);">
]
</div>
<div style="margin-top: 15px;">$message</div>
](else:)[
<img src="https://files.catbox.moe/5tkzw4.png" alt="Dýka" style="max-width: 60%; max-height: 60%; object-fit: contain; filter: drop-shadow(0 0 10px rgba(255, 136, 0, 0.6));">
]
]
</div>
</div>
</div>
](else:)[
[[Podívat se co má lapka na sobě|7]]
]
(display: "InventoryHUD")
<style>
/* Particle efekty */
.success-particle {
background: radial-gradient(circle, #ffd700, #ff8800);
box-shadow: 0 0 15px #ffd700;
}
.scene-card {
position: relative;
width: 100%;
min-height: 250px;
overflow: hidden;
z-index: 1;
border: 3px solid rgba(139, 69, 19, 0.8);
border-radius: 2px;
}
/* Combat box styling */
.combat-box {
border: 3px solid rgba(139, 69, 19, 0.8);
border-radius: 2px;
padding: 20px;
margin: 20px 0;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.5);
}
.dice-section {
text-align: center;
padding: 15px;
}
/* Dice container a animace */
.dice-container {
display: flex;
justify-content: center;
align-items: center;
min-height: 200px;
}
.dice-player-box {
position: relative;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 20px;
min-width: 200px;
}
.dice-image {
width: 100px;
height: 100px;
margin: 10px auto;
display: block;
}
.dice-rolling {
animation: shake 0.08s infinite;
}
.dice-fall {
animation: fall 0.6s ease-out, spin 0.6s linear, shake 0.08s infinite;
transform-origin: center;
}
@keyframes fall {
0% {
transform: translateY(-200px);
opacity: 0;
}
100% {
transform: translateY(0);
opacity: 1;
}
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(720deg); }
}
@keyframes shake {
0%, 100% { transform: translateX(0) translateY(0); }
25% { transform: translateX(-3px) translateY(3px); }
50% { transform: translateX(3px) translateY(-3px); }
75% { transform: translateX(-3px) translateY(-3px); }
}
@keyframes glow {
0%, 100% {
filter: drop-shadow(0 0 15px rgba(100, 150, 200, 0.9));
}
50% {
filter: drop-shadow(0 0 25px rgba(100, 150, 200, 1));
}
}
.dice-number-white-small {
color: #ffd700;
font-size: 1.5em;
font-weight: bold;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);
margin-top: 10px;
}
/* Particle efekty */
.particle {
position: absolute;
width: 10px;
height: 10px;
border-radius: 50%;
pointer-events: none;
animation: particleRise 1s ease-out forwards;
z-index: 100;
}
@keyframes particleRise {
0% {
bottom: 50%;
opacity: 1;
transform: translateY(0) scale(1);
}
100% {
bottom: 100%;
opacity: 0;
transform: translateY(-60px) scale(0.2);
}
}
/* Combat zprávy */
.combat-victory {
color: #5cb85c;
font-weight: bold;
text-shadow: 0 0 10px rgba(92, 184, 92, 0.8);
}
.combat-defeat {
color: #d9534f;
font-weight: bold;
text-shadow: 0 0 10px rgba(217, 83, 79, 0.8);
}
/* Responsive */
@media (max-width: 768px) {
.dice-image {
width: 80px;
height: 80px;
}
.combat-box {
padding: 15px;
}
}
</style>
}{
<div class="napoveda-card-wrapper">
<div class="napoveda-link-overlay">
(link-repeat: " ")[<script>
setTimeout(function() {
var overlayHTML = '<div class="napoveda-fullscreen-overlay"></div>';
overlayHTML += '<img src="https://files.catbox.moe/uxvfgc.jpg" class="napoveda-fullscreen-image napoveda-img-1" id="napoveda-img-1">';
overlayHTML += '<img src="https://files.catbox.moe/f07p8y.png" class="napoveda-fullscreen-image napoveda-img-2" id="napoveda-img-2" style="display: none;">';
overlayHTML += '<div class="napoveda-close-hint" id="napoveda-hint-1">Klikni pro další</div>';
overlayHTML += '<div class="napoveda-close-hint" id="napoveda-hint-2" style="display: none;">Klikni pro zavření</div>';
document.body.insertAdjacentHTML('beforeend', overlayHTML);
var overlay = document.querySelector('.napoveda-fullscreen-overlay');
var img1 = document.getElementById('napoveda-img-1');
var img2 = document.getElementById('napoveda-img-2');
var hint1 = document.getElementById('napoveda-hint-1');
var hint2 = document.getElementById('napoveda-hint-2');
var currentImage = 1;
function handleClick() {
if (currentImage === 1) {
if (img1) {
img1.classList.add('flying');
setTimeout(function() { img1.style.display = 'none'; }, 400);
}
if (hint1) hint1.style.display = 'none';
setTimeout(function() {
if (img2) {
img2.style.display = 'block';
img2.classList.remove('flying');
}
if (hint2) hint2.style.display = 'block';
}, 200);
currentImage = 2;
} else {
if (img2 && !img2.classList.contains('flying')) {
overlay.classList.add('closing');
img2.classList.add('flying');
setTimeout(function() {
if (overlay) overlay.remove();
if (img1) img1.remove();
if (img2) img2.remove();
if (hint1) hint1.remove();
if (hint2) hint2.remove();
}, 600);
}
}
}
if (img1) img1.addEventListener('click', handleClick);
if (img2) img2.addEventListener('click', handleClick);
if (overlay) overlay.addEventListener('click', handleClick);
}, 100);
</script>]
</div>
<div class="napoveda-card-visual">
<img src="https://files.catbox.moe/w39eul.jpg" alt="Nápověda">
<div class="napoveda-card-text">Zobrazit<br>Nápovědu</div>
</div>
</div>
<style>
/* 🛠 OPRAVENÝ HITBOX */
.napoveda-card-wrapper {
position: fixed;
bottom: 45px;
right: 40px;
width: 100px;
height: 150px;
z-index: 10000;
transition: all 0.4s ease;
opacity: 0.8;
pointer-events: none; /* Ignoruje myš mimo kartu */
}
.napoveda-link-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%; /* Hitbox sedí přesně na 150px */
z-index: 30;
pointer-events: auto; /* Pouze karta reaguje na myš */
}
.napoveda-link-overlay tw-link {
display: block !important;
width: 100% !important;
height: 100% !important;
opacity: 0;
cursor: pointer;
}
/* Vizuál */
.napoveda-card-visual {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border: 2px solid rgba(139, 105, 20, 0.6);
border-radius: 3px;
overflow: hidden;
box-shadow: 0 8px 15px rgba(0,0,0,0.6);
background: #1a0f08;
z-index: 10;
}
.napoveda-card-text {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -30%);
width: 90%;
text-align: center;
color: #d1cba1;
font-family: 'Cinzel', serif;
font-size: 13px;
font-weight: bold;
text-shadow: 2px 2px 4px rgba(0,0,0,1);
z-index: 20;
pointer-events: none;
opacity: 0;
transition: all 0.4s ease;
}
.napoveda-card-wrapper:hover {
transform: translateY(-8px) scale(1.05);
opacity: 1;
}
.napoveda-card-wrapper:hover .napoveda-card-text {
opacity: 1;
transform: translate(-50%, -50%);
}
.napoveda-card-wrapper:hover img {
filter: brightness(0.3) blur(2px);
}
.napoveda-card-visual img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}
/* Fullscreen a Animace */
.napoveda-fullscreen-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 20, 0.85);
z-index: 99998;
transition: opacity 0.6s ease;
cursor: pointer;
}
.napoveda-fullscreen-image {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
max-width: 90%;
max-height: 80vh;
border-radius: 8px;
box-shadow: 0 0 50px rgba(255, 215, 0, 0.5);
border: 3px solid #8b6914;
z-index: 99999;
cursor: pointer;
transition: all 0.6s cubic-bezier(0.4, 0, 0.2, 1);
}
.napoveda-fullscreen-overlay.closing { opacity: 0; }
.napoveda-fullscreen-image.flying { opacity: 0; transform: translate(-50%, -50%) scale(0.3); }
.napoveda-close-hint {
position: fixed;
bottom: 30px;
left: 50%;
transform: translateX(-50%);
color: #d1cba1;
font-size: 16px;
z-index: 100000;
}
</style>}https://imagitool.com/reduce-image-in-kb (na redukci dat obrázku)
https://www.krea.ai/enhancer (na kreativní enchance)
https://jules.google.com (na lepší kodovani)
(poměr karet Xx480 mensi v 310x380px velikosti)
karta která utočí na více protivníků
animované pozadí a ksichty
vlk dagger nefunguje
kryty utok +2 obrana kdyz mas zbran vylozenou a rychly uder dodat vlastnosti
(dm:
"name", "Drtihlavka",
"defense", 0,
"cost", 2,
"type", "weapon",
"image", "https://files.catbox.moe/4p7cwe.jpg",
"levels", (a:
(dm: "minAttack", 9, "maxAttack", 9),
(dm: "minAttack", 9, "maxAttack", 9),
(dm: "minAttack", 15, "maxAttack", 19)
)
)
))
skullcrusher nesmi byt v addcards jako karta kterou lze přidat, ale musí být viditelná, zobrazitelná pokud se rozklikne karta drtihlavka ideálně by drtihůavka měla ještě pod sebou jakoby znovu kopii obrázku ofsetlou o kousek doprava a natočenou o malý uhel doprava
rozlišení postav, napřiklad lovec bude mít jiné dialogy, ostatní zase zamknuté, zašelé,
pasaze mohou osahovat karty rozhodovaní
minihra s kartama
https://files.catbox.moe/h0nv84.jpeg (rub karty)
karta counter nefunguje spravne, nedava damage nepriteli. když ji zahraju asi odebere dmg nepřítele na mě ale nedává žádný dmg nepříteli.
log zlobi pozice
púozice level ikon zlobí,
ukazatel kol bude ruka ukazovat na strany
karta nepřítele pokud zamícham karty se zmeni a ukaze co nepritel hraje. zapojit na funkci pocitani kol.
naanimovat karticky, 3 až 8
balíček s váhou max 20 balíček musí dojít
balíček si hráč sám vytvoří
nektere karty lzue přidat vícekrát (váhy karet)
grafika rozmisteni na podpurne a utocne karty
zamichani karet staminou lze ale v ruce krty nedojdou leda počtem v decku
karta zbrane muze být jen jedna
kola se střídají, začíná hráč, poté nepřítel apotom proměna, začíná nepřítel vykládat
tapovací karty, lze vyložit podpurne karty, pouze zbrane
karty osudu by mohli být ovlivneny svitkem zvrácení osudu, tím by se dala ještě jedna možnot otočit kartu osudu ale svitek by se zpotřeboval
sexuální system
<!--Comment Text-->
nadabovat hru
<!--Comment Text-->
Název URL
Kožené brnění https://files.catbox.moe/6bdqid.png
Kroužková zbroj https://files.catbox.moe/bownbh.png
Plátová zbroj https://files.catbox.moe/4c49c7.png
Štíty
Název URL
Dřevěný štít https://files.catbox.moe/9cgxs9.png
Železný štít https://files.catbox.moe/fg8ccm.png
Věžový štít https://files.catbox.moe/y8q8tv.png
Zbraně
Název URL
Dýka https://files.catbox.moe/sk5n4x.png
Kvalitní dýka https://files.catbox.moe/2olwuv.png
Meč https://files.catbox.moe/l90kma.png
Mistrovský meč https://files.catbox.moe/h2pl87.png
Sekera https://files.catbox.moe/8ryt3d.png
Válečná sekera https://files.catbox.moe/hm88l5.png
Obouruční meč https://files.catbox.moe/s2v3y5.png
Zvlněný meč https://files.catbox.moe/vf3p07.png
Lektvar léčení https://files.catbox.moe/y1rymu.png
Obvaz https://files.catbox.moe/i1mcha.png
Klíč https://files.catbox.moe/1rhk43.png
Mapa https://files.catbox.moe/dg5k0s.png
mace", "https://files.catbox.moe/pbbmii.png",
morningstar", "https://files.catbox.moe/sk5n4x.png",
spear", "https://files.catbox.moe/c5u2x3.png",
halberd", "https://files.catbox.moe/8ryt3d.png",
warhammer", "https://files.catbox.moe/sk5n4x.png",
battleaxe", "https://files.catbox.moe/hm88l5.png",
scimitar", "https://files.catbox.moe/l90kma.png",
nordický", "https://files.catbox.moe/f3ijtv.png",
sekáček", "https://files.catbox.moe/h2pl87.png",
claymore", "https://files.catbox.moe/s2v3y5.png",
lance", "https://files.catbox.moe/c5u2x3.png",
vrhací sekera", "https://files.catbox.moe/sk5n4x.png",
elite longbow", "https://files.catbox.moe/eattgi.png",
bow", "https://files.catbox.moe/7qak07.png",
crossbow", "https://files.catbox.moe/2olwuv.png",
dragonslayer", "https://files.catbox.moe/vf3p07.png",
excalibur", "https://files.catbox.moe/vf3p07.png",
shadowblade", "https://files.catbox.moe/f3ijtv.png",
soulreaper", "https://files.catbox.moe/s2v3y5.png",
stormbringer", "https://files.catbox.moe/hm88l5.png",
<!--Comment Text-->
obrazky
https://deepai.org/machine-learning-model/supernatural-character-generator
prompt hrace je
rough painted style, muted earthy colors, heavy brush strokes, dramatic lighting, very unfinished and abstract, Not recognizable, impossible to identify, dramatic, sun light rays
ye newe
fast
"01
<!--zvuky nastavení -->
Zvuk Hlasitost Smyčka Zpoždění (start)
wind 0.3 (30 %) Ano 0 ms (hned)
footsteps 0.4 (40 %) Ne 1000 ms (1 s)
heartbeat 0.25 (25 %) Ano 500 ms (0,5 s
script staci vlozit do sceny
<script>
(function() {
// Přehrání ambientních zvuků
window.sceneSounds.play('wind', 0.3, true, 0);
window.sceneSounds.play('footsteps', 0.4, false, 1000);
window.sceneSounds.play('heartbeat', 0.25, true, 500);
// Odstranění celého containeru po dokončení animace
setTimeout(function() {
var container = document.getElementById('introContainer');
if (container) container.remove();
}, 8200);
})();
</script>
<!--Comment Text-->
karty
ZBRANĚ
Karta ATK DEF Cost Extra
Dýka 4 0 0 –
Kvalitní dýka 5 1 1 –
Starý meč 4 2 1 –
Meč 6 2 2 –
Mistrovský meč 8 3 3 –
Sekera 7 1 2 –
Válečná sekera 10 2 4 –
Obouruční meč 11 1 4 –
Legendární meč 15 3 5 EXTRA: pokud ho máš v balíku 2×, dmg +1
ŠTÍTY
Karta ATK DEF Cost Extra
Dřevěný štít 1 4 1 –
Železný štít 2 6 2 –
Věžový štít 2 9 3 –
BRNĚNÍ – AKCE
Karta Text
Kožené brnění Získej 3 obrany.
Kroužková zbroj Získej 5 obrany.
Plátová zbroj Získej 8 obrany.
Bez cost-triků, jen čistá obrana.
ZÁKLAD
Karta ATK DEF Cost
Pěst 2 0 0
Nakopnutí 3 1 1
Lehký kryt 0 2 0
Kryt 0 4 1
Odpočinek Získej 3 staminy
Nadechnout se Získej 4 staminy
BOJOVÉ KARTY
Karta ATK DEF Cost Extra
Úhyb – – 1 Neguje veškerý enemy útok
Protiútok 5 2 3 Funguje jen pokud enemy útočí
Finta 4 0 1 Pokud enemy brání, dmg +3
Silový úder 9 0 4 –
Dvojitý sek 6 1 3 –
Zuřivost 12 0 5 Další kolo nemůžeš bránit
Přesný úder 7 1 3 Ignoruje obranu
Poprava 14 0 5 Jen pokud má enemy <30 % HP
Železná vůle 0 7 3 –
Odražení 3 6 3 Pokud enemy útočí, vrátíš 3 dmg
Posílení 0 4 2 Příští útok +2
Parírování 2 8 4 Jen proti útoku
Rychlý úder 4 1 1 –
Krytý útok 5 3 3 –
Taktický úder 6 2 3 Pokud enemy brání, cost -1
Adrenalin žílotrh – – 0 Další karta je zdarma
chyba? – 8 0 ještě jedna kolo -4 dmg
Poslední vzdor 10 2 4 Pokud máš <30 % HP, dmg +4
Druhý dech – – 0 Heal 3
HEAL
Karta Text Extra
Kořalka Heal 5 Pokud máš 2 kořalky, heal +2
LEGENDÁRNÍ EXTRA – JEN PÁR KARET
Hráč cítí:
„Teď jsem to trefil správně“
nebo
„Zahrál jsem to jak idiot a umřel“{(display: "SettingsHUD")
(display: "TorchAnimation")
(display: "HodHUD")
<h3>Prolog</h3>
<div class="text-divider divider-rpg"></div>
<div id="intro-text" style="background: linear-gradient(135deg, rgba(42,24,16,0.2) 0%, rgba(26,15,8,0.2) 100%); border: 3px solid rgba(139,105,20,0.2); border-radius: 2px; padding: 30px; margin: 30px auto; max-width: 700px; box-shadow: 0 8px 20px rgba(0,0,0,0.2);">
Zdejší krajina je drsná a chudá, vydávají se sem povětšinou jen chamtivý kupci s vidinou získání levného materiálu od místních chudáků. Co budeš dělat dál? Získat nějaké🌙//(hřivny)// a pokusit se změnit svůj doposud mizerný osud?
<br><br>
//(text-colour:#574f4f)[...Tato hra používá karty osudu, jaké je tvé štěstí?...]//
</div>
(display: "KartyOsudu")
}(display: "ShopWeapons"){<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- CARDBOARD BATTLE SYSTEM - DOKUMENTACE PROMĚNNÝCH -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- I. SYSTÉMOVÉ PROMĚNNÉ (BATTLE FLOW) -->
<!-- ═══════════════════════════════════════════════════════════════ -->
$battleInitialized - (bool) Zajišťuje, že inicializace proběhne jen jednou
$battlePhase - (string) Aktuální fáze souboje:
• "selecting" = hráč vybírá kartu
• "enemy_waiting" = nepřítel zahrál první, čeká na hráče
• "resolving" = vyhodnocování kola
• "meditation_selecting" = výběr druhé karty po meditaci
$combatLog - (array) Historie všech zpráv z boje (pro zobrazení v logu)
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- II. TURN ORDER SYSTÉM (Kdo hraje první) -->
<!-- ═══════════════════════════════════════════════════════════════ -->
$turnCounter - (int) Počítadlo kol (lichá = hráč první, sudá = nepřítel první)
$isEnemyFirstThisTurn - (bool) TRUE = nepřítel hraje první TOTO kolo
$currentTurnStarter - (string) "player" nebo "enemy" - kdo začíná aktuální kolo
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- III. ZDRAVÍ & STAMINA (HRÁČ) -->
<!-- ═══════════════════════════════════════════════════════════════ -->
$hp - (int) Aktuální zdraví hráče
$maxHp - (int) Maximální zdraví hráče
$tempHP - (int) Dočasné HP ze štítů/brnění (MAX 6)
$stamina - (int) Aktuální stamina/kondice hráče (pro hraní karet)
$maxStamina - (int) Maximální stamina hráče
$effectiveMaxStamina - (int) Efektivní maximum staminy (může být ovlivněno traity)
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- IV. ZDRAVÍ (NEPŘÍTEL) -->
<!-- ═══════════════════════════════════════════════════════════════ -->
$enemyHP - (int) Aktuální zdraví nepřítele
$enemyMaxHP - (int) Maximální zdraví nepřítele
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- V. KARTY V RUCE & BALÍČKY -->
<!-- ═══════════════════════════════════════════════════════════════ -->
$playerHand - (array) Karty aktuálně v ruce hráče (max 4)
$enemyHand - (array) Karty v ruce nepřítele
$allAvailableCards - (array) Všechny dostupné karty pro losování (dynamicky se zmenšuje)
$originalDeck - (array) Záložní kopie celého balíčku (pro shuffle)
$maxHandSize - (int) Maximální počet karet v ruce (4)
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- VI. ZAHRANÉ KARTY (Aktuální kolo) -->
<!-- ═══════════════════════════════════════════════════════════════ -->
$chosenPlayerCard - (datamap) Karta, kterou hráč zahrál TOTO kolo
$chosenEnemyCard - (datamap) Karta, kterou nepřítel zahrál (nebo 0 pokud ještě nehrál)
$playerCard - (datamap) Alias pro $chosenPlayerCard (používá se v resolve sekci)
$enemyCard - (datamap) Karta nepřítele po výběru z ruky
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- VII. ÚTOK & OBRANA (Vypočítané hodnoty) -->
<!-- ═══════════════════════════════════════════════════════════════ -->
$playerAttack - (int) Celkový útok hráče (karta + zbraň + traity)
$enemyAttack - (int) Celkový útok nepřítele (karta + zbraň)
$damageToEnemy - (int) Finální damage na nepřítele (útok - obrana)
$damageToPlayer - (int) Finální damage na hráče (útok - obrana)
$originalDamage - (int) Damage PŘED aplikací štítů (pro log)
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- VIII. SYSTÉM ZBRANÍ (HRÁČ) -->
<!-- ═══════════════════════════════════════════════════════════════ -->
$weaponImageURL - (string) URL obrázku aktivní zbraně hráče
$weaponName - (string) Název aktivní zbraně
$weaponDamage - (int) Aktuální damage zbraně (rollnuto z rozsahu)
$weaponMinAttack - (int) Minimální damage zbraně
$weaponMaxAttack - (int) Maximální damage zbraně
$weaponLevel - (int) Úroveň zbraně (kolikrát byla zahraná)
$currentWeaponName - (string) Název poslední zahrané zbraně (pro detekci upgradu)
$weaponLevels - (datamap) Slovník: {"nazev_zbrane": uroven, ...}
$isFirstWeaponPlay - (bool) TRUE = první vyložení této zbraně (nedává bonus)
$currentMissChance - (int) % šance na minutí (pro luky)
$playerMissed - (bool) TRUE = hráč minul tento útok (pro luky)
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- IX. SYSTÉM ZBRANÍ (NEPŘÍTEL) -->
<!-- ═══════════════════════════════════════════════════════════════ -->
$enemyWeaponImageURL - (string) URL obrázku aktivní zbraně nepřítele
$enemyWeaponName - (string) Název aktivní zbraně nepřítele
$enemyWeaponDamage - (int) Aktuální damage zbraně nepřítele
$enemyWeaponMinAttack - (int) Minimální damage zbraně nepřítele
$enemyWeaponMaxAttack - (int) Maximální damage zbraně nepřítele
$enemyWeaponLevel - (int) Úroveň zbraně nepřítele
$currentEnemyWeaponName - (string) Název poslední zahrané zbraně nepřítele
$enemyWeaponLevels - (datamap) Slovník: {"nazev_zbrane": uroven, ...}
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- X. SPECIÁLNÍ KARTY & HANDLERY -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- MEDITATION (Meditace) -->
$meditationActive - (bool) TRUE = meditace byla zahraná
$nextCardFree - (bool) TRUE = další karta stojí 0 staminy
$meditationBonusAttack - (int) Bonus útok z meditace
$meditationBonusDefense - (int) Bonus obrana z meditace
$skipNormalResolve - (bool) TRUE = přeskoč normální resolve (jen u meditace)
<!-- COUNTER (Protiútok) -->
$counterCardActive - (bool) TRUE = counter byl úspěšně použitý
$counterMsg - (string) Zpráva o counter efektu (pro log)
<!-- TACTICAL (Taktický úder) -->
$tacticalCardActive - (bool) TRUE = tactical byl úspěšně použitý
$tacticalMsg - (string) Zpráva o tactical efektu (pro log)
<!-- ARMOR (Brnění) -->
$armorPlayedThisTurn - (bool) TRUE = hráč zahrál armor kartu
$lastArmorDistribution - (string) Text o rozdělení armor HP (pro log)
<!-- HEALING (Léčení) -->
$healAmount - (int) Množství vyléčeného HP
$healMessage - (string) Zpráva o léčení (pro log)
<!-- KORALKA (Speciální consumable) -->
$koralkaCount - (int) Počet zbývajících kořalek
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- XI. ANIMACE & VIZUÁLNÍ EFEKTY -->
<!-- ═══════════════════════════════════════════════════════════════ -->
$playerHitCounter - (int) Počet zásahů hráče (pro animaci třesení)
$enemyHitCounter - (int) Počet zásahů nepřítele (pro animaci třesení)
$whoGotHit - (string) Kdo dostal damage: "player", "enemy", "both", "none"
$cardAnimationTriggered - (bool) TRUE = animace karty byla spuštěná
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- XII. TRAITY & BONUSY -->
<!-- ═══════════════════════════════════════════════════════════════ -->
$umeni - (int) Trait "Umění boje" (1 = aktivní, přidává +1 útok)
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- XIII. ŠTÍTY (Z EQUIPOVÁNÍ) -->
<!-- ═══════════════════════════════════════════════════════════════ -->
$shieldHead - (int) Štít na hlavě
$shieldChest - (int) Štít na hrudi
$shieldLimbs - (int) Štít na končetinách
<!-- Součet těchto 3 = $tempHP na začátku boje -->
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- XIV. TEST MODE -->
<!-- ═══════════════════════════════════════════════════════════════ -->
$testModeEnabled - (bool) TRUE = testovací režim (nepřítel má 200/300 HP)
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- XV. POMOCNÉ PROMĚNNÉ (Temporary) -->
<!-- ═══════════════════════════════════════════════════════════════ -->
$playableEnemyCards - (array) Dočasný seznam karet, které nepřítel může zahrát
$tempAvailable - (array) Dočasný seznam pro odebírání karet z balíčku
$tempPool - (array) Zamíchaný pool karet pro losování
$isInHand - (bool) Kontrola, zda karta už je v ruce (anti-duplicate)
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- XVI. LOG ZPRÁVY (Temporary) -->
<!-- ═══════════════════════════════════════════════════════════════ -->
$vysledek - (string) Hlavní zpráva o výsledku kola
$hlaska - (string) Náhodná motivační/flair zpráva
$hlasky - (array) Seznam možných hlášek pro random výběr
$rozdil - (int) Rozdíl v damage mezi hráčem a nepřítelem
$weaponInitMsg - (string) Zpráva o aktivaci zbraně
$maxLevelMsg - (string) Zpráva o dosažení max levelu zbraně
$missMsg - (string) Zpráva o minutí (luky)
<!-- ═══════════════════════════════════════════════════════════════ -->
<!-- KONEC DOKUMENTACE -->
<!-- ═══════════════════════════════════════════════════════════════ -->}📜 Svitky (poměr karet 228x280)
Svitek ohnivé koule (ATK: 12, DEF: 0, COST: 0)
Svitek léčení (HEAL: 8, COST: 0)
Svitek ochrany (ATK: 0, DEF: 10, COST: 0)
Svitek blesku (ATK: 10, DEF: 0, COST: 0)
Svitek mrazu (ATK: 8, DEF: 0, COST: 0)
Svitek teleportace (ATK: 0, DEF: 8, COST: 0)
Svitek zmrtvýchvstání (HEAL: 15, COST: 0)
Počet v kategorii: 7
🧪 Lektvary
Malý lektvar zdraví (HEAL: 5, COST: 0)
Střední lektvar zdraví (HEAL: 10, COST: 0)
Velký lektvar zdraví (HEAL: 20, COST: 0)
Lektvar síly (ATK: 5, DEF: 0, COST: -2)
Lektvar obrany (ATK: 0, DEF: 6, COST: 0)
Lektvar rychlosti (ATK: 3, DEF: 3, COST: -3)
Lektvar nesmrtelnosti (ATK: 0, DEF: 15, COST: 0)
Počet v kategorii: 7
💣 Ostatní spotřební předměty
Kouřová bomba (ATK: 0, DEF: 7, COST: 0)
Svatá voda (ATK: 8, DEF: 0, COST: 0)
Ohnivá bomba (ATK: 14, DEF: 0, COST: 0)
Jedový nůž (ATK: 6, DEF: 0, COST: 1)
Hromový kámen (ATK: 10, DEF: 0, COST: 0)
Amulet ochrany (HEAL: 12, COST: 0)
Počet v kategorii: 6
🪄 Magické střelné zbraně
Hůl ohnivé koule (ATK: 9, DEF: 1, COST: 4)
Hůlka blesku (ATK: 7, DEF: 2, COST: 3)
Ledová sféra (ATK: 6, DEF: 3, COST: 3)
Arkánový vrhač (ATK: 10, DEF: 0, COST: 5)
Žezlo prázdnoty (ATK: 12, DEF: 1, COST: 5)
Prut slunečního paprsku (ATK: 8, DEF: 2, COST: 4)
Stínový šíp (ATK: 7, DEF: 1, COST: 3)
Chaotická koule (ATK: 11, DEF: 0, COST: 5)
Hvězdný pád (ATK: 13, DEF: 2, COST: 6)
Mystická střela (ATK: 5, DEF: 4, COST: 3)
Počet v kategorii: 10
🏹 Luky a kuše
Kompozitní luk (ATK: 7, DEF: 1, COST: 3)
Reflexní luk (ATK: 8, DEF: 0, COST: 4)
Těžká kuše (ATK: 9, DEF: 2, COST: 4)
Opakující kuše (ATK: 6, DEF: 1, COST: 3)
Válečný luk (ATK: 10, DEF: 1, COST: 5)
Odstřelovačská kuše (ATK: 11, DEF: 0, COST: 5)
Lovecký luk (ATK: 7, DEF: 2, COST: 3)
Elfský luk (ATK: 9, DEF: 3, COST: 4)
Dračí kuše (ATK: 12, DEF: 2, COST: 6)
Luk větru (ATK: 8, DEF: 3, COST: 4)
Počet v kategorii: 10
⚔️ Běžné zbraně
Dýka (ATK: 4, DEF: 0, COST: 1)
Starý a rezavý meč (ATK: 3, DEF: 1, COST: 2)
Kvalitní dýka (ATK: 5, DEF: 2, COST: 3)
Meč (ATK: 5, DEF: 2, COST: 3)
Mistrovský meč (ATK: 8, DEF: 3, COST: 4)
Sekera (ATK: 7, DEF: 1, COST: 4)
Válečná sekera (ATK: 11, DEF: 2, COST: 5)
Obouruční meč (ATK: 10, DEF: 2, COST: 5)
Zvlněný meč (ATK: 15, DEF: 4, COST: 6)
Palcát (ATK: 5, DEF: 2, COST: 3)
Jitřenka (ATK: 7, DEF: 1, COST: 4)
Kopí (ATK: 6, DEF: 3, COST: 3)
Halapartna (ATK: 9, DEF: 2, COST: 5)
Válečné kladivo (ATK: 10, DEF: 1, COST: 5)
Bojová sekera (ATK: 8, DEF: 2, COST: 4)
Šavle (ATK: 6, DEF: 3, COST: 3)
Rapír (ATK: 5, DEF: 4, COST: 3)
Katana (ATK: 9, DEF: 3, COST: 4)
Claymore (ATK: 11, DEF: 2, COST: 5)
Jezdecké kopí (ATK: 8, DEF: 1, COST: 4)
Cep (ATK: 7, DEF: 0, COST: 4)
Krátký meč (ATK: 4, DEF: 2, COST: 2)
Dlouhý luk (ATK: 6, DEF: 0, COST: 3)
Kuše (ATK: 7, DEF: 1, COST: 3)
Počet v kategorii: 24
🌟 Legendární zbraně
Drakobijec (ATK: 18, DEF: 5, COST: 7)
Excalibur (ATK: 16, DEF: 6, COST: 6)
Stínové ostří (ATK: 14, DEF: 5, COST: 6)
Žnec duší (ATK: 17, DEF: 3, COST: 7)
Přivolávač bouří (ATK: 15, DEF: 4, COST: 6)
Počet v kategorii: 5
🛡️ Štíty
Dřevěný štít (ATK: 1, DEF: 4, COST: 2)
Železný štít (ATK: 2, DEF: 6, COST: 3)
Věžový štít (ATK: 3, DEF: 9, COST: 4)
Počet v kategorii: 3
🛡️ Akce brnění
Schovat se za kožené brnění (ATK: 0, DEF: 3, COST: -3)
Schovat se za kroužkovou zbroj (ATK: 0, DEF: 5, COST: -4)
Schovat se za plátovou zbroj (ATK: 0, DEF: 8, COST: -5)
Počet v kategorii: 3
👊 Základní karty
Odpočinek (ATK: 0, DEF: 0, COST: -4)
Pěstí (ATK: 2, DEF: 0, COST: 0)
Nadechnout se (ATK: 0, DEF: 0, COST: -5)
Lehký kryt (ATK: 0, DEF: 2, COST: 0)
Kryt (ATK: 0, DEF: 3, COST: 1)
Nakopnutí (ATK: 2, DEF: 1, COST: 1)
Počet v kategorii: 6
⚡ Speciální bojové karty
Kořalka (HEAL: 5, COST: 0)
Úhyb (ATK: 0, DEF: 5, COST: 1)
Protiútok (ATK: 4, DEF: 3, COST: 3)
Finta (ATK: 3, DEF: 1, COST: 1)
Silový úder (ATK: 8, DEF: 0, COST: 4)
Dvojitý sek (ATK: 6, DEF: 1, COST: 3)
Zuřivost (ATK: 12, DEF: 0, COST: 5)
Přesný úder (ATK: 7, DEF: 1, COST: 3)
Poprava (ATK: 14, DEF: 0, COST: 6)
Železná vůle (ATK: 0, DEF: 7, COST: 3)
Odražení (ATK: 2, DEF: 6, COST: 3)
Posílení (ATK: 0, DEF: 4, COST: 2)
Parírování (ATK: 1, DEF: 8, COST: 4)
Rychlý úder (ATK: 4, DEF: 2, COST: 2)
Krytý útok (ATK: 5, DEF: 4, COST: 3)
Taktický úder (ATK: 6, DEF: 3, COST: 3)
Adrenalin (ATK: 3, DEF: 0, COST: -3)
Meditace (ATK: 0, DEF: 2, COST: -6)
Poslední vzdor (ATK: 10, DEF: 2, COST: 4)
Druhý dech (HEAL: 3, ATK: 0, DEF: 3, COST: -4)
Počet v kategorii: 20
Celkový počet všech definovaných karet: 101{(display: "TorchAnimation")
(display: "InventoryHUD")
(set: $hasWoodenSword to true)
<div class="scroll-wrapper">
<div style="background: linear-gradient(135deg, rgba(42,24,16,0.2) 0%, rgba(26,15,8,0.2) 100%); border: 3px solid rgba(139,105,20,0.2); border-radius: 2px; padding: 30px; margin: 30px auto; max-width: 700px; box-shadow: 0 8px 20px rgba(0,0,0,0.2);">
Pořád nemůžeš uvěřit tomu, že jsi se konečeně rozhodl vydat z té díry do neznáma. Byla celkem náhoda, že jsi popadl starý meč. Patřil zřejmě pánu usedlosti. Stejně se k tobě nechoval dobře, navíc tam ten meč vysel nevyužitý už moc dlouho.<br> Při odchodu jsi ani nemyslel na to kam se vydat, chtěl jsi porstě pryč a automaticky jsi zamířil na cestu, která vede do vedlejší vesnice. Chceš tam opravdu jít? nebo projít lesem do neznámých končin?</div><br>
(align:"=><=")[ <div class="tooltip-container">
<h5 class="burning"><div style="text-align: center;"> (text-colour:#103102)[[[Pokračovat po cestě|Prolog]]]</div></h5>
<span class="tooltip-bubble">Cesty bývají nebezpečné</span>
</div>
<br>
<div class="tooltip-container">
<h5 class="burning"><div style="text-align: center;"> (text-colour:#103102)[[[jít lesem|Prolog1]]]</div></h5>
<span class="tooltip-bubble">Lesy jsou nevyzpytatelné</span>
</div>]
<div class="tutorial-pointer-inline" id="inventory-pointer" style="top: 20px; right: 60px;">
<div class="tutorial-pointer-text">(text-style:"bold","italic")[věci v inventáři]</div>
<img src="https://files.catbox.moe/9iog7u.png" alt="pointer" style="width: 85px; height: 100px;">
</div>
</div>
(align:"=><=")+(box:"X")[//(text-colour:#574f4f)[...Tip. v horním rohu obrazovky je tvůj inventář..] //]
<style>
/* --- ČÁSTICE --- */
.particle {
position: absolute;
pointer-events: none;
animation: particleRise 0.8s ease-out forwards;
z-index: 10001;
}
.lightning-particle {
background: radial-gradient(circle, #ADD8E6, #87CEEB);
box-shadow: 0 0 15px 5px rgba(173, 216, 230, 0.7), 0 0 30px 10px rgba(135, 206, 235, 0.5);
border-radius: 2px;
width: 4px;
height: 12px;
}
@keyframes particleRise {
0% { opacity: 1; transform: translateY(0) scale(1) rotate(0deg); }
100% { opacity: 0; transform: translateY(-30px) scale(0.3) rotate(360deg); }
}
/* --- ROTUJÍCÍ PAPRSKY POD KARTOU --- */
.ray-container {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 200px;
height: 200px;
z-index: 9997;
animation: rotateRays 4s linear infinite;
}
.ray {
position: absolute;
top: 50%;
left: 50%;
width: 4px;
height: 100px;
background: linear-gradient(to bottom,
rgba(135, 206, 235, 0.9),
rgba(173, 216, 230, 0.4),
transparent);
transform-origin: center top;
box-shadow: 0 0 10px rgba(135, 206, 235, 0.8),
0 0 20px rgba(173, 216, 230, 0.6),
0 0 30px rgba(135, 206, 235, 0.4);
filter: blur(1px);
}
@keyframes rotateRays {
0% { transform: translate(-50%, -50%) rotate(0deg); }
100% { transform: translate(-50%, -50%) rotate(360deg); }
}
/* --- KARTA --- */
.card-reveal {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 300px;
height: 450px;
z-index: 9999;
cursor: pointer;
transition: all 0.6s cubic-bezier(0.4, 0, 0.2, 1);
animation: cardFloat 3s ease-in-out infinite;
}
@keyframes cardFloat {
0%, 100% { transform: translate(-50%, -50%) translateY(0px); }
50% { transform: translate(-50%, -50%) translateY(-15px); }
}
.card-reveal.flying {
top: 20px;
left: calc(100% - 80px);
transform: translate(0, 0) scale(0.2);
opacity: 0;
animation: none;
}
.card-img {
width: 100%;
height: 100%;
object-fit: contain;
filter: drop-shadow(0 0 25px rgba(135, 206, 235, 0.6))
drop-shadow(0 0 40px rgba(173, 216, 230, 0.4));
}
.card-reveal-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 20, 0.85);
z-index: 9998;
transition: opacity 0.6s ease;
}
.card-reveal-overlay.closing { opacity: 0; pointer-events: none; }
</style>
<script>
$(document).ready(function() {
// 1. Vytvoření paprsků
let raysHTML = '<div class="ray-container" id="ray-wheel">';
for (let i = 0; i < 16; i++) {
const angle = (360 / 16) * i;
raysHTML += `<div class="ray" style="transform: translate(-50%, 0) rotate(${angle}deg);"></div>`;
}
raysHTML += '</div>';
// 2. Vložení HTML karty + paprsků
const cardRevealHTML = `
<div class="card-reveal-overlay"></div>
${raysHTML}
<div class="card-reveal" id="sword-card">
<img src="https://files.catbox.moe/eattgi.png" class="card-img">
<div id="card-particle-container" style="position:absolute; top:0; left:0; width:100%; height:100%; pointer-events:none;"></div>
</div>`;
$('body').append(cardRevealHTML);
const $card = $('#sword-card');
const $overlay = $('.card-reveal-overlay');
const $rays = $('#ray-wheel');
// 3. Funkce pro odlet karty
function dismissCard() {
if ($card.hasClass('flying')) return;
$overlay.addClass('closing');
$card.addClass('flying');
$rays.fadeOut(600);
setTimeout(() => {
$card.remove();
$overlay.remove();
$rays.remove();
}, 600);
}
// 4. Funkce pro blesky na kartě
function spawnSwordParticles() {
const container = document.getElementById('card-particle-container');
if (!container) return;
for (let i = 0; i < 25; i++) {
const p = document.createElement('div');
p.className = 'particle lightning-particle';
p.style.left = Math.random() * 100 + '%';
p.style.top = Math.random() * 100 + '%';
p.style.animationDelay = (Math.random() * 0.5) + 's';
container.appendChild(p);
setTimeout(() => p.remove(), 1000);
}
}
// Spustit částice
setTimeout(spawnSwordParticles, 200);
// 5. Události (Kliknutí vs Automatika)
$card.on('click', dismissCard);
$overlay.on('click', dismissCard);
// Automatické zmizení po 3 sekundách
setTimeout(dismissCard, 3000);
// 6. Logika pointeru v textu
const inventoryPointer = document.getElementById('inventory-pointer');
if (inventoryPointer) {
setTimeout(() => {
inventoryPointer.style.opacity = '0';
inventoryPointer.style.transition = 'opacity 0.5s ease-out';
setTimeout(() => inventoryPointer.remove(), 500);
}, 3000);
}
});
</script>
}{{
<!-- ============================================ -->
<!-- ZÁKLADNÍ NASTAVENÍ POSTAVY RON -->
<!-- ============================================ -->
(set: $vybranaPostava to "RON")
<!-- SPOTŘEBNÍ PŘEDMĚTY -->
(set: $hasPotion to 1)
(set: $hasObvaz to 1)
(set: $hasKoralka to true)
(set: $koralkaCount to $koralkaCount + 1)
<!-- VLASTNICTVÍ ZBRANÍ -->
<!-- STATISTIKY -->
(set: $maxHp to 28)
(set: $hp to 28)
(set: $hracHP to 28)
(set: $body to 0)
(set: $hracATK to 0)
(set: $umeni to 0)
(set: $rychlost to 3)
(set: $experience to 1)
<!-- ============================================ -->
<!-- COMBAT KARTY - RON DOSTANE TYTO KARTY -->
<!-- ============================================ -->
<!-- VLASTNICTVÍ KARET -->
(set: $hasRest to true)
(set: $hasFist to true)
(set: $hasBreath to false)
<!-- EQUIPOVÁNÍ KARET -->
(set: $equippedRest to true)
(set: $equippedFist to true)
(set: $equippedKoralka to true)
<!-- ============================================ -->
(after: 5s)[(goto: "predmet")]
}
<style>
/* === ANIMACE KARET === */
/* === ANIMACE KARET === */
.card-reveal-overlay {
position: fixed;
top: 0; left: 0; width: 100%; height: 100%;
background: rgba(0, 0, 0, 0.4);
z-index: 9998;
opacity: 0;
animation: fadeInOverlay 0.3s ease-out forwards;
transition: opacity 0.4s ease-out;
}
.card-reveal-overlay.closing { opacity: 0; pointer-events: none; }
@keyframes fadeInOverlay {
0% { opacity: 0; }
100% { opacity: 1; }
}
.card-reveal {
position: fixed;
top: 50%; left: 50%;
transform: translate(-50%, -50%) scale(0.8);
width: 300px; height: 450px;
z-index: 9999;
opacity: 0;
animation: fadeInCard 0.4s ease-out forwards;
transition: all 0.4s ease-out;
}
@keyframes fadeInCard {
0% { opacity: 0; transform: translate(-50%, -50%) scale(0.8); }
100% { opacity: 1; transform: translate(-50%, -50%) scale(1); }
}
.card-reveal.flying {
top: 20px;
left: calc(100% - 80px);
transform: translate(0, 0) scale(0.2);
opacity: 0;
}
.card-img {
width: 100%; height: 100%;
object-fit: contain;
filter: drop-shadow(0 0 20px rgba(0, 150, 255, 0.5));
}
.particle {
position: absolute; pointer-events: none;
animation: particleRise 0.7s ease-out forwards;
z-index: 100;
}
@keyframes particleRise {
0% { opacity: 1; transform: translateY(0) scale(1); }
100% { opacity: 0; transform: translateY(-30px) scale(0.3); }
}
.lightning-particle {
background: radial-gradient(circle, #ADD8E6, #87CEEB);
box-shadow: 0 0 10px #87CEEB;
width: 4px; height: 10px;
}
.white-particle {
background: radial-gradient(circle, #ffffff, #e0e0e0);
box-shadow: 0 0 10px #ffffff;
width: 4px; height: 10px;
}
.ray {
position: absolute;
top: 30%; left: 50%;
width: 2px;
height: 15px;
background: linear-gradient(to top, rgba(255,255,255,0), rgba(255,255,255,0.8));
transform-origin: bottom center;
animation: rayPulse 0.8s ease-out;
}
@keyframes rayPulse {
0% { opacity: 0; height: 0; }
1% { opacity: 1; height: 80px; }
2% { opacity: 0; height: 60px; }
}
</style>
<script>
$(document).ready(function() {
const cards = [
{ image: 'https://files.catbox.moe/i1mcha.png', type: 'lightning' }, // Obvaz
{ image: 'https://files.catbox.moe/y1rymu.png', type: 'lightning' }, // Lektvar
{ image: 'https://files.catbox.moe/pbbmii.png', type: 'lightning' }, // Pěstí
{ image: 'https://files.catbox.moe/jpbtij.png', type: 'white' } // Odpočinek
];
function showNext(index) {
if (index >= cards.length) return;
const card = cards[index];
const html = `
<div class="card-reveal-overlay"></div>
<div class="card-reveal">
<img src="${card.image}" class="card-img">
<div class="particles-container"></div>
</div>`;
const $el = $(html).appendTo('body');
const $container = $el.find('.particles-container');
// Paprsky
for(let i=0; i<8; i++) {
$container.append(`<div class="ray" style="transform: translate(-50%,-50%) rotate(${i*45}deg); animation-delay: ${i*0.05}s;"></div>`);
}
// Částice
for(let i=0; i<25; i++) {
const p = $('<div class="particle"></div>').addClass(card.type + '-particle');
p.css({
left: Math.random() * 250 + 'px',
top: Math.random() * 400 + 'px',
animationDelay: (Math.random() * 0.2) + 's'
});
$el.filter('.card-reveal').append(p);
}
// Automatický odlet po 0.9 sekundě
setTimeout(() => {
$el.filter('.card-reveal-overlay').addClass('closing');
$el.filter('.card-reveal').addClass('flying');
setTimeout(() => {
$el.remove();
showNext(index + 1);
}, 300);
}, 900);
}
showNext(0);
});
</script>}{{
<!-- ============================================ -->
<!-- ZÁKLADNÍ NASTAVENÍ POSTAVY DALEK -->
<!-- ============================================ -->
(set: $vybranaPostava to "DALEK")
<!-- SPOTŘEBNÍ PŘEDMĚTY -->
(set: $hasPotion to 0)
(set: $hasObvaz to 1)
(set: $hasKoralka to true)
(set: $koralkaCount to $koralkaCount + 1)
<!-- VLASTNICTVÍ ZBRANÍ -->
(set: $hasDagger to true)
(set: $equippedWeapon to "dagger")
<!-- STATISTIKY -->
(set: $experience to 3)
(set: $rychlost to 1)
(set: $maxHp to 23)
(set: $hp to 23)
(set: $hracHP to 23)
(set: $body to 0)
(set: $hasSword to false)
(set: $hracATK to 0)
(set: $umeni to 0)
<!-- ============================================ -->
<!-- COMBAT KARTY - DALEK DOSTANE TYTO KARTY -->
<!-- ============================================ -->
<!-- VLASTNICTVÍ KARET -->
(set: $hasBreath to true)
(set: $hasKick to true)
<!-- EQUIPOVÁNÍ KARET -->
(set: $equippedBreathe to true)
(set: $equippedKick to true)
(set: $equippedKoralka to true)
<!-- ============================================ -->
(after: 5s)[(goto: "predmet")]
}
<style>
/* === ANIMACE KARET === */
.card-reveal-overlay {
position: fixed;
top: 0; left: 0; width: 100%; height: 100%;
background: rgba(0, 0, 0, 0.4);
z-index: 9998;
opacity: 0;
animation: fadeInOverlay 0.3s ease-out forwards;
transition: opacity 0.4s ease-out;
}
.card-reveal-overlay.closing { opacity: 0; pointer-events: none; }
@keyframes fadeInOverlay {
0% { opacity: 0; }
100% { opacity: 1; }
}
.card-reveal {
position: fixed;
top: 50%; left: 50%;
transform: translate(-50%, -50%) scale(0.8);
width: 300px; height: 450px;
z-index: 9999;
opacity: 0;
animation: fadeInCard 0.4s ease-out forwards;
transition: all 0.4s ease-out;
}
@keyframes fadeInCard {
0% { opacity: 0; transform: translate(-50%, -50%) scale(0.8); }
100% { opacity: 1; transform: translate(-50%, -50%) scale(1); }
}
.card-reveal.flying {
top: 20px;
left: calc(100% - 80px);
transform: translate(0, 0) scale(0.2);
opacity: 0;
}
.card-img {
width: 100%; height: 100%;
object-fit: contain;
filter: drop-shadow(0 0 20px rgba(192, 192, 192, 0.5));
}
.particle {
position: absolute; pointer-events: none;
animation: particleRise 0.7s ease-out forwards;
z-index: 100;
}
@keyframes particleRise {
0% { opacity: 1; transform: translateY(0) scale(1); }
100% { opacity: 0; transform: translateY(-30px) scale(0.3); }
}
.silver-particle {
background: radial-gradient(circle, #c0c0c0, #a8a8a8);
box-shadow: 0 0 10px #c0c0c0;
width: 4px; height: 10px;
}
.white-particle {
background: radial-gradient(circle, #ffffff, #e0e0e0);
box-shadow: 0 0 10px #ffffff;
width: 4px; height: 10px;
}
.ray {
position: absolute;
top: 30%; left: 50%;
width: 2px;
height: 15px;
background: linear-gradient(to top, rgba(255,255,255,0), rgba(255,255,255,0.8));
transform-origin: bottom center;
animation: rayPulse 0.8s ease-out;
}
@keyframes rayPulse {
0% { opacity: 0; height: 0; }
1% { opacity: 1; height: 80px; }
2% { opacity: 0; height: 60px; }
}
</style>
<script>
$(document).ready(function() {
const cards = [
{ image: 'https://files.catbox.moe/i1mcha.png', type: 'white' }, // Obvaz
{ image: 'https://files.catbox.moe/c5u2x3.png', type: 'white' }, // Nakopnutí
{ image: 'https://files.catbox.moe/7qak07.png', type: 'white' }, // Nadechnout se
{ image: 'https://files.catbox.moe/f3ijtv.png', type: 'silver' } // Kvalitní dýka
];
function showNext(index) {
if (index >= cards.length) return;
const card = cards[index];
const html = `
<div class="card-reveal-overlay"></div>
<div class="card-reveal">
<img src="${card.image}" class="card-img">
<div class="particles-container"></div>
</div>`;
const $el = $(html).appendTo('body');
const $container = $el.find('.particles-container');
// Paprsky
for(let i=0; i<8; i++) {
$container.append(`<div class="ray" style="transform: translate(-50%,-50%) rotate(${i*45}deg); animation-delay: ${i*0.05}s;"></div>`);
}
// Částice
for(let i=0; i<25; i++) {
const p = $('<div class="particle"></div>').addClass(card.type + '-particle');
p.css({
left: Math.random() * 250 + 'px',
top: Math.random() * 400 + 'px',
animationDelay: (Math.random() * 0.2) + 's'
});
$el.filter('.card-reveal').append(p);
}
// Automatický odlet po 0.9 sekundě
setTimeout(() => {
$el.filter('.card-reveal-overlay').addClass('closing');
$el.filter('.card-reveal').addClass('flying');
setTimeout(() => {
$el.remove();
showNext(index + 1);
}, 300);
}, 900);
}
showNext(0);
});
</script>}{{
<!-- ============================================ -->
<!-- ZÁKLADNÍ NASTAVENÍ POSTAVY DALEK -->
<!-- ============================================ -->
(set: $vybranaPostava to "DALEK")
<!-- SPOTŘEBNÍ PŘEDMĚTY -->
(set: $hasPotion to 0)
(set: $hasObvaz to 1)
(set: $hasKoralka to true)
(set: $koralkaCount to $koralkaCount + 1)
<!-- VLASTNICTVÍ ZBRANÍ -->
(set: $hasDagger to true)
(set: $equippedWeapon to "dagger")
<!-- STATISTIKY -->
(set: $experience to 3)
(set: $rychlost to 1)
(set: $maxHp to 23)
(set: $hp to 23)
(set: $hracHP to 23)
(set: $body to 0)
(set: $hasSword to false)
(set: $hracATK to 0)
(set: $umeni to 0)
<!-- ============================================ -->
<!-- COMBAT KARTY - DALEK DOSTANE TYTO KARTY -->
<!-- ============================================ -->
<!-- VLASTNICTVÍ KARET -->
(set: $hasBreath to true)
(set: $hasKick to true)
<!-- EQUIPOVÁNÍ KARET -->
(set: $equippedBreathe to true)
(set: $equippedKick to true)
(set: $equippedKoralka to true)
<!-- ============================================ -->
(after: 5s)[(goto: "predmet")]
}
<style>
/* === ANIMACE KARET === */
.card-reveal-overlay {
position: fixed;
top: 0; left: 0; width: 100%; height: 100%;
background: rgba(0, 0, 0, 0.4);
z-index: 9998;
opacity: 0;
animation: fadeInOverlay 0.3s ease-out forwards;
transition: opacity 0.4s ease-out;
}
.card-reveal-overlay.closing { opacity: 0; pointer-events: none; }
@keyframes fadeInOverlay {
0% { opacity: 0; }
100% { opacity: 1; }
}
.card-reveal {
position: fixed;
top: 50%; left: 50%;
transform: translate(-50%, -50%) scale(0.8);
width: 300px; height: 450px;
z-index: 9999;
opacity: 0;
animation: fadeInCard 0.4s ease-out forwards;
transition: all 0.4s ease-out;
}
@keyframes fadeInCard {
0% { opacity: 0; transform: translate(-50%, -50%) scale(0.8); }
100% { opacity: 1; transform: translate(-50%, -50%) scale(1); }
}
.card-reveal.flying {
top: 20px;
left: calc(100% - 80px);
transform: translate(0, 0) scale(0.2);
opacity: 0;
}
.card-img {
width: 100%; height: 100%;
object-fit: contain;
filter: drop-shadow(0 0 20px rgba(192, 192, 192, 0.5));
}
.particle {
position: absolute; pointer-events: none;
animation: particleRise 0.7s ease-out forwards;
z-index: 100;
}
@keyframes particleRise {
0% { opacity: 1; transform: translateY(0) scale(1); }
100% { opacity: 0; transform: translateY(-30px) scale(0.3); }
}
.silver-particle {
background: radial-gradient(circle, #c0c0c0, #a8a8a8);
box-shadow: 0 0 10px #c0c0c0;
width: 4px; height: 10px;
}
.white-particle {
background: radial-gradient(circle, #ffffff, #e0e0e0);
box-shadow: 0 0 10px #ffffff;
width: 4px; height: 10px;
}
.ray {
position: absolute;
top: 30%; left: 50%;
width: 2px;
height: 15px;
background: linear-gradient(to top, rgba(255,255,255,0), rgba(255,255,255,0.8));
transform-origin: bottom center;
animation: rayPulse 0.8s ease-out;
}
@keyframes rayPulse {
0% { opacity: 0; height: 0; }
1% { opacity: 1; height: 80px; }
2% { opacity: 0; height: 60px; }
}
</style>
<script>
$(document).ready(function() {
const cards = [
{ image: 'https://files.catbox.moe/i1mcha.png', type: 'white' }, // Obvaz
{ image: 'https://files.catbox.moe/c5u2x3.png', type: 'white' }, // Nakopnutí
{ image: 'https://files.catbox.moe/7qak07.png', type: 'white' }, // Nadechnout se
{ image: 'https://files.catbox.moe/f3ijtv.png', type: 'silver' } // Kvalitní dýka
];
function showNext(index) {
if (index >= cards.length) return;
const card = cards[index];
const html = `
<div class="card-reveal-overlay"></div>
<div class="card-reveal">
<img src="${card.image}" class="card-img">
<div class="particles-container"></div>
</div>`;
const $el = $(html).appendTo('body');
const $container = $el.find('.particles-container');
// Paprsky
for(let i=0; i<8; i++) {
$container.append(`<div class="ray" style="transform: translate(-50%,-50%) rotate(${i*45}deg); animation-delay: ${i*0.05}s;"></div>`);
}
// Částice
for(let i=0; i<25; i++) {
const p = $('<div class="particle"></div>').addClass(card.type + '-particle');
p.css({
left: Math.random() * 250 + 'px',
top: Math.random() * 400 + 'px',
animationDelay: (Math.random() * 0.2) + 's'
});
$el.filter('.card-reveal').append(p);
}
// Automatický odlet po 0.9 sekundě
setTimeout(() => {
$el.filter('.card-reveal-overlay').addClass('closing');
$el.filter('.card-reveal').addClass('flying');
setTimeout(() => {
$el.remove();
showNext(index + 1);
}, 300);
}, 900);
}
showNext(0);
});
</script>}<div class="scroll-wrapper">
(print: $scrollText)
</div>
<style>
.scroll-wrapper {
max-height: 70vh; /* Výška boxu - přizpůsobí se obrazovce */
overflow-y: auto; /* Aktivuje kolečko myši a posuvník */
padding-right: 15px;
padding-bottom: 10px;
scrollbar-width: thin; /* Pro Firefox */
scrollbar-color: rgba(255, 215, 0, 0.3) rgba(0, 0, 0, 0.1);
}
/* --- Stylování scrollbaru pro Chrome/Edge/Safari --- */
.scroll-wrapper::-webkit-scrollbar {
width: 6px;
}
.scroll-wrapper::-webkit-scrollbar-track {
background: rgba(0, 0, 0, 0.1);
border-radius: 10px;
}
.scroll-wrapper::-webkit-scrollbar-thumb {
background: rgba(255, 215, 0, 0.3); /* Zlatavá barva */
border-radius: 5px;
}
.scroll-wrapper::-webkit-scrollbar-thumb:hover {
background: rgba(255, 215, 0, 0.6); /* Při najetí myší ztmavne */
}
</style>(display: "InventoryHUD")Padl jsi v boji proti lapkovi. Tvá cesta ochránce zde končí...
<div class="scene-card"><div class="dice-container"><div class="dice-player-box"></div><div class="dice-enemy-box"></div></div></div><div style="background: rgba(255,215,0,0.1); padding: 5px; border-radius: 2px; margin: 5px 0; text-align: center;"></div>
(text-style:"italic")[Konec hry]
[(text-colour:black)[Restartovat hru]]<restart|(click: ?restart)[(reload
(display: "DeathSnowAnimation")(set: $barvy to (a: "Červená", "Modrá", "Zelená", "Žlutá"))
(set: $index to 1)
Vyber si barvu:
{
|vyber>[ (print: $barvy's ($index)) ]
}
(link-repeat: "⬅️")[(if: $index > 1)[(set: $index to it - 1)(replace: ?vyber)[(print: $barvy's ($index))]]]
(link-repeat: "➡️")[(if: $index < $barvy's length)[(set: $index to it + 1)(replace: ?vyber)[(print: $barvy's ($index))]]]
<style>
tw-link {
border: 2px solid white;
padding: 5px 10px;
border-radius: 5px;
text-decoration: none;
background-color: #333;
}
tw-link:hover {
background-color: #555;
border-color: yellow;
}
</style>
(set: $pocet to 0)
|displej>[$pocet]
(link-repeat: "➡️ Přidat")[(set: $pocet to it + 1)(replace: ?displej)[$pocet]][[ zpět na test začátek |test prechodu mezi pasazemi]]
testování obrázku
Lapkova dýka je ve výsledku vcelku kvalitní.
//(text-colour:#37291a)[přidáno do inventáře]//
<div class="scene-card">
<div class="dice-container">
<div class="dice-player-box" id="item-acquired-box" style="min-height: 100px;">
<img src="https://files.catbox.moe/2olwuv.png" alt="Kvalitní dýka" style="max-width: 80%; filter: drop-shadow(0 0 15px rgba(100, 150, 200, 0.9)); animation: glow 2s ease-in-out infinite;">
</div>
</div>
<div class="tutorial-pointer-inline" id="inventory-pointer" style="top: 20px; right: 60px;">
<div class="tutorial-pointer-text">(text-style:"bold","italic")[věci v inventáři]</div>
<img src="https://files.catbox.moe/9iog7u.png" alt="pointer" style="width: 85px; height: 100px;">
</div>
</div>
[[Podívat se co má lapka na sobě|7]]
(display: "InventoryHUD")
<style>
/* --- CSS pro scene-card --- */
.scene-card {
position: relative;
min-height: 200px;
border: 3px solid rgba(139, 69, 19, 0.8);
border-radius: 2px;
overflow: hidden;
}
.dice-container {
display: flex;
justify-content: center;
align-items: center;
min-height: 200px;
}
.dice-player-box {
position: relative;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 20px;
}
/* --- ZLATÉ ČÁSTICE PRO KVALITNÍ PŘEDMĚT --- */
.success-particle {
background: radial-gradient(circle, #ffd700, #ff8800);
box-shadow: 0 0 15px #ffd700;
}
.particle {
position: absolute;
width: 10px;
height: 10px;
border-radius: 50%;
pointer-events: none;
animation: particleRise 0.8s ease-out forwards;
z-index: 100;
}
@keyframes particleRise {
0% {
opacity: 1;
transform: translateY(0) scale(1);
}
100% {
opacity: 0;
transform: translateY(-50px) scale(0.3);
}
}
@keyframes glow {
0%, 100% {
filter: drop-shadow(0 0 15px rgba(100, 150, 200, 0.9));
}
50% {
filter: drop-shadow(0 0 25px rgba(100, 150, 200, 1));
}
}
</style>
<script>
// =========================================================
// FUNKCE PRO ZLATÉ ČÁSTICE
// =========================================================
function spawnAcquisitionParticles() {
const particleTarget = document.querySelector('.scene-card');
if (particleTarget) {
const width = particleTarget.offsetWidth;
const height = particleTarget.offsetHeight;
for (let i = 0; i < 30; i++) {
const particle = document.createElement('div');
particle.className = 'particle success-particle'; // ZLATÉ ČÁSTICE
const randomX = Math.random() * width;
const randomY = Math.random() * height;
particle.style.left = randomX + 'px';
particle.style.top = randomY + 'px';
particle.style.animationDelay = (Math.random() * 0.4) + 's';
particleTarget.appendChild(particle);
setTimeout(() => { particle.remove(); }, 1200);
}
}
}
// =========================================================
// VOLÁNÍ FUNKCÍ A LOGIKA ZMIZENÍ POINTERU
// =========================================================
// 1. Spustíme efekt zlatých částic (po 300ms)
setTimeout(spawnAcquisitionParticles, 300);
// 2. Logika pro zobrazení a zmizení inventory pointeru
const inventoryPointer = document.getElementById('inventory-pointer');
if (inventoryPointer) {
// Pointer je viditelný hned od začátku
// Skryjeme ho po 3 sekundách
setTimeout(() => {
inventoryPointer.style.opacity = '0';
inventoryPointer.style.transition = 'opacity 0.5s ease-out';
// Po dokončení fade-outu element úplně odstraníme
setTimeout(() => {
inventoryPointer.remove();
}, 500);
}, 3000);
}
</script>[[další|test prechodu meti pasazemi 2]]
tetsování textu{
(align:"=><=")+(box:"X")[//(text-colour:#574f4f)[...pro vyléčení negativního postihu vyber v inventáři obvaz nebo klikni přímo na postih.....<img src="https://files.catbox.moe/ub9joh.png" class="dice-icon">] //<br>
"máš obvaz? radši si to zavaž." Řekll a otočil se k odchodu pryč.
(display: "InventoryHUD")
(display: "SnowAnimation")
[["tak ti teda děkuji za radu"|tutorialLeceni]]
<br>
[[Mlčet|NovaUroven]]
]
}
<style>
.dice-icon {
width: 35px; /* Nastav si libovolnou velikost */
height: auto;
}
</style>(set: $hasObvaz to $hasObvaz + 1)(set: $sekundy to 0)(text-style:"sway")[Tvá ruka je pevně obvázaná, již necítíš žádný negativní efekt.
//Zmizela ti vlastnost Pohmožděnina a z věcí inventáře se ti odstranil tvůj obvaz//
<div class="scene-card">
<div class="dice-container">
<div class="dice-player-box"></div>
<div class="dice-enemy-box"></div>
</div>
</div>
<div style="background: rgba(255,215,0,0.1); padding: 5px; border-radius: 2px; margin: 5px 0; text-align: center;">
</div>]
[[Rozumím!|NovaUroven]]
</div>(display: "InventoryHUD")
(display: "SnowAnimation")zde bude teprve obsah
[[Zpět|mapavenku]]<script>
setTimeout(function() {
// Vlastní plynulý scroll s kontrolou rychlosti
const targetPosition = 400;
const startPosition = window.pageYOffset;
const distance = targetPosition - startPosition;
const duration = 2000; // 3000ms = 3 sekundy (čím víc, tím pomalejší)
let startTime = null;
function animation(currentTime) {
if (startTime === null) startTime = currentTime;
const timeElapsed = currentTime - startTime;
const progress = Math.min(timeElapsed / duration, 1);
// Easing funkce pro plynulejší pohyb (ease-in-out)
const ease = progress < 0.5
? 2 * progress * progress
: 1 - Math.pow(-2 * progress + 2, 2) / 2;
window.scrollTo(0, startPosition + distance * ease);
if (timeElapsed < duration) {
requestAnimationFrame(animation);
} } requestAnimationFrame(animation);
}, 300);
</script>
<h3>Došel jsi na rozcestí, Kam se vydáš ?</h3>
(if:visits is 1)[<!--Zmizí po kliknutí a po 5sekundach-->
<div class="tutorial-pointer-inline" id="itemNotification" style="top: 25px; right: 60px; cursor: pointer;">
<div class="tutorial-pointer-text">(text-style:"bold","italic")[$vybranaPostava má v inventáři novou věc]</div>
<img src="https://files.catbox.moe/9iog7u.png" alt="pointer" style="width: 85px; height: 100px;">
</div>
<script>
$(document).ready(function() {
// Zmizí po 5 sekundách
setTimeout(function() {
$('#itemNotification').fadeOut(1000);
}, 5000);
// NEBO zmizí při kliknutí (co nastane dřív)
$('#itemNotification').click(function() {
$(this).fadeOut(500);
});
});
</script>]
(display: "lokaceHUDtrhy")
(display: "InventoryHUD")
(display: "SnowAnimation")
<!--[[pokracuje!|Trh]]-->
<!--[[pokracuje!|Vesnice]]-->
<!--[[pokracuje!|Les]]-->
<!--[[pokracuje!|Hrad]]--><script>
setTimeout(function() {
window.scrollTo({
top: 400, // scroll dolu změňte číslo podle potřeby
behavior: 'smooth'
});
}, 1000);
</script>
{
<h3>Došel jsi na rozcestí, Kam se vydáš ?</h3>
(if:visits is 1)[<!--Zmizí po kliknutí a po 5sekundach-->
<div class="tutorial-pointer-inline" id="itemNotification" style="top: 25px; right: 60px; cursor: pointer;">
<div class="tutorial-pointer-text">(text-style:"bold","italic")[$vybranaPostava má v inventáři novou věc]</div>
<img src="https://files.catbox.moe/9iog7u.png" alt="pointer" style="width: 85px; height: 100px;">
</div>
<script>
$(document).ready(function() {
// Zmizí po 5 sekundách
setTimeout(function() {
$('#itemNotification').fadeOut(1000);
}, 5000);
// NEBO zmizí při kliknutí (co nastane dřív)
$('#itemNotification').click(function() {
$(this).fadeOut(500);
});
});
</script>]
(display: "lokaceHUD")
(display: "InventoryHUD")}<div class="shuffle-card-wrapper">
<div class="shuffle-link-overlay">
(link-repeat: " ")[
(if: $stamina >= 2)[
(set: $stamina to $stamina - 2)
(if: $originalDeck is 0 or $originalDeck's length is 0)[
(set: $originalDeck to $allAvailableCards)
]
(set: $allAvailableCards to (a: ...$originalDeck))
(if: $koralkaCount <= 0)[
(set: $tempFilteredDeck to (a:))
(for: each _card, ...$allAvailableCards)[
(if: _card's name is not "Kořalka")[
(set: $tempFilteredDeck to $tempFilteredDeck + (a: _card))
]
]
(set: $allAvailableCards to $tempFilteredDeck)
]
(set: $playerHand to (a:))
(set: $tempPool to (shuffled: ...$allAvailableCards))
(set: $maxHandSize to 4)
(for: each _card, ...$tempPool)[
(if: $playerHand's length < $maxHandSize)[
(set: $playerHand to $playerHand + (a: _card))
]
]
(print: "<script>
if(window.combatSounds && window.combatSounds.playCardSound){
combatSounds.playCardSound('shuffle');
}
localStorage.setItem('shufflePressed', 'true');
</script>")
(set: $vysledek to "<span class='combat-stamina'>**Příprava na delší boj tě stojí úsilí, kondice!** -**2** staminy</span>")
(set: $combatLog to $combatLog + (a: $vysledek))
(set: $battlePhase to "selecting")
(go-to: "CardBattle")
]
(else:)[
(print: "<script>
/* Funkce pro 'tvrdý restart' animace */
function triggerShake(selector, animClass) {
var el = document.querySelector(selector);
if(el) {
// 1. Odebereme animaci
el.style.animation = 'none';
el.classList.remove(animClass);
// 2. FORCE REFLOW - Magický řádek: donutí prohlížeč přepočítat layout
void el.offsetWidth;
// 3. Vrátíme animaci zpět
el.style.animation = ''; // Vyčistí inline styl
if(animClass === 'error-shake') {
el.style.animation = 'error-shake 0.3s ease-in-out';
} else {
el.classList.add(animClass);
}
}
}
// Zatřes kartou
triggerShake('.shuffle-card-wrapper', 'error-shake');
// Zatřes ukazatelem staminy
triggerShake('#playerStaminaBox', 'box-shake');
// Automatické odstranění classu z boxu po chvilce (úklid)
setTimeout(function(){
var sb = document.getElementById('playerStaminaBox');
if(sb) sb.classList.remove('box-shake');
}, 400);
</script>")
]
]
</div>
<div class="shuffle-card-visual">
<img src="https://files.catbox.moe/29dd6m.png" alt="Karta Zamíchat">
<div class="shuffle-card-text">Promyslet útok
(text-colour:#709440)[kondice] </div>
<div class="shuffle-cost">-2</div>
</div>
</div>
<style>
/* --- POZICE A VELIKOST KARTY --- */
.shuffle-card-wrapper {
position: fixed;
bottom: 175px;
right: 175px;
width: 200px;
height: 200px;
z-index: 10000;
transition: transform 0.2s ease; /* Plynulost pro hover, ne pro shake */
opacity: 1.0;
}
/* --- OBLAST KLIKÁNÍ (LINK) --- */
.shuffle-link-overlay {
position: absolute;
bottom: -85px;
left: 0;
width: 100%;
height: 100%;
z-index: 50; /* Musí být nejvýš */
}
/* Oprava Harlowe odkazu, aby byl přes celou plochu a neviditelný */
.shuffle-link-overlay tw-link {
display: block !important;
width: 100% !important;
height: 100% !important;
color: transparent !important;
background: transparent !important;
border: none !important;
cursor: pointer;
}
.shuffle-link-overlay tw-link:hover {
color: transparent !important; /* Pojistka proti změně barvy při hoveru */
}
/* --- VIZUÁL --- */
.shuffle-card-visual {
position: relative;
width: 100%;
height: 100%;
z-index: 10;
pointer-events: none; /* Kliknutí propadnou na overlay */
}
.shuffle-card-visual img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
transition: filter 0.4s ease;
}
/* Texty */
.shuffle-card-text {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 90%;
text-align: center;
color: #d1cba1;
font-family: 'Cinzel', serif;
font-size: 16px;
font-weight: bold;
text-shadow: 2px 2px 4px rgba(0,0,0,1);
z-index: 20;
opacity: 0;
transition: all 0.4s ease;
}
.shuffle-cost {
position: absolute;
bottom: 40px;
left: 50%;
transform: translateX(-50%);
color: #709440;
font-family: 'Cinzel', serif;
font-size: 20px;
font-weight: bold;
z-index: 20;
opacity: 0;
transition: all 0.4s ease;
}
/* --- HOVER EFEKTY --- */
/* Zobrazit texty jen když se netřese (volitelné, ale hezčí) */
.shuffle-card-wrapper:hover:not([style*="animation"]) {
transform: translateY(-8px) scale(1.05);
}
.shuffle-card-wrapper:hover .shuffle-card-text,
.shuffle-card-wrapper:hover .shuffle-cost {
opacity: 1;
}
.shuffle-card-wrapper:hover img {
filter: brightness(0.3) blur(2px);
box-shadow: 0 0 20px rgba(255, 215, 0, 0.5);
}
/* --- ANIMACE CHYBY (TŘESENÍ) --- */
@keyframes error-shake {
0% { transform: translateX(0); }
25% { transform: translateX(-8px) rotate(-2deg); }
50% { transform: translateX(8px) rotate(2deg); }
75% { transform: translateX(-8px) rotate(-2deg); }
100% { transform: translateX(0); }
}
/* Animace pro baňku staminy (pokud ji nemáš jinde) */
@keyframes box-shake {
0% { transform: scale(1); }
20% { transform: scale(1.1) rotate(5deg); }
40% { transform: scale(1.1) rotate(-5deg); }
60% { transform: scale(1.1) rotate(5deg); }
80% { transform: scale(1.1) rotate(-5deg); }
100% { transform: scale(1); }
}
/* Třída, kterou JavaScript přidává na baňku */
.box-shake {
animation: box-shake 0.4s ease-in-out;
filter: drop-shadow(0 0 8px red) !important; /* Červená záře chyby */
}
</style><!-- Proměnná pro stav zobrazení test UI (přidej na začátek příběhu, například do Start passage) -->
(if: $testUIVisible is 0)[(set: $testUIVisible to true)]
(if: $testModeEnabled is true)[
<!-- Test UI tlačítka - zobrazí se jen když $testUIVisible je true -->
(if: $testUIVisible is true)[
<div style="position: fixed; top: 10px; left: 20px; z-index: 100; display: flex; gap: 10px; flex-wrap: wrap; max-width: 800px;">
<div style="padding: 8px 15px; background: rgba(255, 165, 0, 0.8); color: white; border-radius: 5px; box-shadow: 0 0 10px rgba(255, 165, 0, 0.5); cursor: pointer; font-family: 'Cinzel', serif;">
(link: "⬅ Zpět (TEST)")[(go-to: (history:)'s last)]
</div>
<div style="padding: 8px 15px; background: rgba(220, 20, 60, 0.8); color: white; border-radius: 5px; box-shadow: 0 0 10px rgba(220, 20, 60, 0.5); cursor: pointer; font-family: 'Cinzel', serif;">
(link: "💔 -86 HP")[
(set: $hp to it - 86)
(if: $hp < 0)[(set: $hp to 0)]
(go-to: (passage:)'s name)
]
</div>
<div style="padding: 8px 15px; background: rgba(50, 205, 50, 0.8); color: white; border-radius: 5px; box-shadow: 0 0 10px rgba(50, 205, 50, 0.5); cursor: pointer; font-family: 'Cinzel', serif;">
(link: "💚 +200 HP")[
(set: $hp to it + 200)
(if: $hp > $maxHp)[(set: $hp to $maxHp)]
(go-to: (passage:)'s name)
]
</div>
<div style="padding: 8px 15px; background: rgba(30, 144, 255, 0.8); color: white; border-radius: 5px; box-shadow: 0 0 10px rgba(30, 144, 255, 0.5); cursor: pointer; font-family: 'Cinzel', serif;">
(link: "⚡ -1000 kondice")[
(set: $stamina to it - 1000)
(if: $stamina < 0)[(set: $stamina to 0)]
(go-to: (passage:)'s name)
]
</div>
<div style="padding: 8px 15px; background: rgba(0, 191, 255, 0.8); color: white; border-radius: 5px; box-shadow: 0 0 10px rgba(0, 191, 255, 0.5); cursor: pointer; font-family: 'Cinzel', serif;">
(link: "🔹 +20 kondice")[
(set: $stamina to it + 20)
(if: $stamina > $maxStamina)[(set: $stamina to $maxStamina)]
(go-to: (passage:)'s name)
]
</div>
<div style="padding: 8px 15px; background: rgba(178, 34, 34, 0.8); color: white; border-radius: 5px; box-shadow: 0 0 10px rgba(178, 34, 34, 0.5); cursor: pointer; font-family: 'Cinzel', serif;">
(link: "👹 Enemy +300 HP")[
(set: $enemyHP to it + 300)
(go-to: (passage:)'s name)
]
</div>
<!-- Tlačítko pro skrytí Test UI -->
<div style="padding: 8px 15px; background: rgba(128, 128, 128, 0.8); color: white; border-radius: 5px; box-shadow: 0 0 10px rgba(128, 128, 128, 0.5); cursor: pointer; font-family: 'Cinzel', serif;">
(link: "👁️ Schovat Test UI")[
(set: $testUIVisible to false)
(go-to: (passage:)'s name)
]
</div>
</div>
]
<!-- Tlačítko pro zobrazení Test UI v levém dolním rohu -->
(if: $testUIVisible is false)[
<div style="position: fixed; bottom: 20px; left: 20px; z-index: 100;">
<div style="padding: 10px 20px; background: rgba(128, 128, 128, 0.9); color: white; border-radius: 5px; box-shadow: 0 0 15px rgba(128, 128, 128, 0.7); cursor: pointer; font-family: 'Cinzel', serif; font-weight: bold;">
(link: "👁️ Zobrazit Test UI")[
(set: $testUIVisible to true)
(go-to: (passage:)'s name)
]
</div>
</div>
]
]<!-- KOMENT: musíme nachávat všechno ve složených závorkých aby se pasáž načetla plynule -->
{
<!-- KOMENT: nadpis h1 je největší a máme až h6 ale to je fatk mrňavý -->
<h4>Název scény</h4>
<!-- KOMENT: <br> je enter, odsazení mezi názvenm scény a · · ─────── ·𖥸· ─────── · ·∙: dividerm -->
<br>
<!-- KOMENT: · · ─────── ·𖥸· ─────── · ·∙divider, rozdělovací grafický prvek, ukázky všech v další pasáži, -->
<div class="text-divider divider-classic"></div>
<!-- KOMENT: text v rámečku díky container stylu -->
<div class="gamebook-container" id="container">
<div class="gamebook-box">
<br>
Zde napište váš příběh. Můžete psát více odstavců. (lorem ipsum, lorem impsum, leremoipsum, loremipsum, lorem ipsum, lorem ipsum)
<br> <!-- KOMENT: br musíme používat , když chceme entery protože u nás bohužel klaický enter...
.......
.......
...nefunguje -->
Toto je druhý odstavec.
</div>
</div>
<br>
<div class="tooltip-wrapper">
Najeďte myší na tento text a zobrazí se informace. potřebuje opravu, ale funguje to
<span class="tooltip-content">
<strong>Název informace</strong><br>
Zde napište detailní popis, který se zobrazí po najetí myší.
</span>
</div>
<br>
<!-- KOMENT: KOMENT: tlačítka jsou ve stylu h5 nadpisů dokud se <h5> neukončí pomocí </h5> -->
<h5>
<!-- KOMENT: br musíme používat i na odsun tlačítek na další řádek -->
[[Pokračovat|DalšíPasáž]]
<br>
<!-- KOMENT: nové tlačítko s rukama kostry -->
(t8n-depart: "dissolve") + (t8n-arrive: "dissolve")[<span class="burning">(text-colour:#1a1f13)[[[Pokračovat|DalšíPasáž]]]</span>]
<br>
<!-- KOMENT: extra tlačítko s rukama kostry a informací -->
<div class="tooltip-container">
(t8n-depart: "dissolve") + (t8n-arrive: "dissolve")[<span class="burning">(text-colour:#1a1f13)[[[Pokračovat|DalšíPasáž]]]</span>]
<span class="tooltip-bubble">vážně chceš pokračovat?</span>
</div>
<!--KOMENT: platí pro všechna talačítka až potud-->
</h5>
<!-- KOMENT: nové tlačítko s rukama kostry na které h5 už neplatí -->
(t8n-depart: "dissolve") + (t8n-arrive: "dissolve")[<span class="burning">(text-colour:#1a1f13)[[[Pokračovat|DalšíPasáž]]]</span>]
}