File size: 5,718 Bytes
7e0a9d1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b585bfd
 
 
 
 
 
 
 
 
 
 
 
 
 
7e0a9d1
 
b585bfd
7e0a9d1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
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 = `
            <i data-feather="${results.icon}" class="w-12 h-12 mr-4"></i>
            <div>
                <h3 class="text-xl font-semibold">${results.itemName}</h3>
                <p class="text-gray-600">${results.description}</p>
            </div>
        `;
        resultContent.appendChild(header);
        
        // Display all effects
        for (const [key, value] of Object.entries(results)) {
            if (key === 'itemName' || key === 'description' || key === 'icon') continue;
            
            const effectDiv = document.createElement('div');
            effectDiv.className = 'result-card mb-4';
            
            const label = key.replace(/([A-Z])/g, ' $1').replace(/^./, str => str.toUpperCase());
            const percentage = key.includes('Chance') || key.includes('Multiplier') || key.includes('Reduction');
            
            effectDiv.innerHTML = `
                <h3>${label}</h3>
                <div class="flex items-center mt-2">
                    <div class="progress-bar mr-4">
                        <div class="progress-fill" style="width: ${Math.min(value, 100)}%"></div>
                    </div>
                    <span class="font-medium">${value}${percentage ? '%' : ''}</span>
                </div>
            `;
            
            resultContent.appendChild(effectDiv);
        }
        
        // Re-render feather icons
        feather.replace();
    }
});