document.addEventListener('DOMContentLoaded', function() { // Item selection const itemCards = document.querySelectorAll('.item-card'); let selectedItem = null; itemCards.forEach(card => { card.addEventListener('click', function() { itemCards.forEach(c => c.classList.remove('selected')); this.classList.add('selected'); selectedItem = this.dataset.item; }); }); // Form submission const statsForm = document.getElementById('stats-form'); const resultsSection = document.getElementById('results'); const resultContent = document.getElementById('result-content'); statsForm.addEventListener('submit', function(e) { e.preventDefault(); if (!selectedItem) { alert('Please select an item first'); return; } const attack = parseInt(document.getElementById('attack').value) || 0; const defense = parseInt(document.getElementById('defense').value) || 0; const luck = parseInt(document.getElementById('luck').value) || 0; if (attack < 1 || defense < 1 || luck < 1) { alert('Please enter valid stats (minimum 1)'); return; } // Simulate effects const results = simulateEffects(selectedItem, attack, defense, luck); displayResults(results); // Store in history const history = JSON.parse(localStorage.getItem('simulationHistory')) || []; history.push({ date: new Date().toISOString().split('T')[0], item: selectedItem, stats: { attack: parseInt(document.getElementById('attack').value), defense: parseInt(document.getElementById('defense').value), luck: parseInt(document.getElementById('luck').value) }, effects: results }); localStorage.setItem('simulationHistory', JSON.stringify(history)); resultsSection.classList.remove('hidden'); resultsSection.scrollIntoView({ behavior: 'smooth' }); }); function simulateEffects(item, attack, defense, luck) { // Deterministic rules with some randomness const seed = attack + defense + luck; const randomFactor = (Math.sin(seed) + 1) / 2; // Pseudo-random based on stats let effects = {}; switch(item) { case 'sword': effects.damageBoost = Math.round((attack * 0.5 + luck * 0.2) * (0.8 + randomFactor * 0.4)); effects.criticalChance = Math.round((luck * 0.3 + attack * 0.1) * (0.5 + randomFactor * 0.5)); effects.description = "Your attacks become more powerful, with increased chance to land critical hits."; break; case 'shield': effects.damageReduction = Math.round((defense * 0.6 + luck * 0.1) * (0.7 + randomFactor * 0.3)); effects.blockChance = Math.round((defense * 0.4 + attack * 0.05) * (0.6 + randomFactor * 0.4)); effects.description = "Your defenses are strengthened, allowing you to mitigate more damage and block attacks."; break; case 'star': effects.luckMultiplier = Math.round((luck * 0.8 + attack * 0.1 + defense * 0.1) * (0.5 + randomFactor * 0.5)); effects.itemFindChance = Math.round((luck * 0.5) * (0.6 + randomFactor * 0.4)); effects.description = "Fortune smiles upon you, increasing your chances for favorable outcomes."; break; } effects.itemName = getItemName(item); effects.icon = item; return effects; } function getItemName(item) { switch(item) { case 'sword': return 'Blade of Might'; case 'shield': return 'Aegis Barrier'; case 'star': return 'Talisman of Fortune'; default: return 'Mysterious Artifact'; } } function displayResults(results) { resultContent.innerHTML = ''; // Header with item info const header = document.createElement('div'); header.className = 'flex items-center mb-6'; header.innerHTML = `
${results.description}