diff --git a/index.html b/index.html index ed01033..30c20cf 100644 --- a/index.html +++ b/index.html @@ -3063,6 +3063,27 @@ padding: 10px; `; + // Add difficulty selection + const difficultySelect = document.createElement('select'); + difficultySelect.style.cssText = ` + margin-bottom: 10px; + padding: 5px; + background: #444; + color: white; + border: 1px solid #666; + border-radius: 3px; + `; + const difficulties = ['Easy - Pins Visible', 'Hard - Audio Only']; + difficulties.forEach(diff => { + const option = document.createElement('option'); + option.value = diff; + option.textContent = diff; + difficultySelect.appendChild(option); + }); + + // Add audio feedback + const clickSound = new Audio('data:audio/wav;base64,UklGRnoGAABXQVZFZm10IBAAAAABAAEAQB8AAEAfAAABAAgAZGF0YQoGAACBhYqFbF1fdH2Dam9ycG5wdX2Dg4CBhIWCgX+Af4B/goCDgIJ/gn+BfoF/gn+CgIF/gn+Cf4F/g4CDgIJ/hIGFgoWBhYKGgoaCh4OIg4mEioWLhIyFjYaOhI+FkIaRhZKGk4eUhpWHloeXiJiImYiaiZuKnIqdi56LoIyhjaKOo4+kj6WQppGnkqiTqZSqlauWrJetmK6Zr5qwm7GcsZ2yn7OgtKG1oraitqO3pLiltqe4qLmpuqq7q7ysvq2/rsCwwbHCssOzxbTGtce2yLfJuMq5y7rMu827zrzPvdC+0b/SwdPC1MPVxNbF18bYx9nI2sjbydvK3Mvdy97M383gzuHP4tDj0eTT5dTm1efW6Nfp2Ora69vt3O7d797w3/Lh8+P05fXn9+j46Prs+/D89v77AQYHDA8VGh8lKi8zOD1CRkpPVFhbX2NobHBydHZ4enx+gIGCg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7vL2+v8DBwsPExcbHyMnKy8zNzs/Q0dLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vP09fb3+Pn6+/z9/v8AAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f4CBgoOEhYaHiImKi4yNjo+QkZKTlJWWl5iZmpucnZ6foKGio6SlpqeoqaqrrK2ur7CxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJysvMzc7P0NHS09TV1tfY2drb3N3e3+Dh4uPk5ebn6Onq6+zt7u/w8fLz9PX29/j5+vv8/f7/AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w=='); + // Add close button const closeButton = document.createElement('button'); closeButton.textContent = 'X'; @@ -3091,8 +3112,9 @@ // Track game state const gameState = { tensionApplied: false, - pinStates: Array(numPins).fill(0), // 0 = down, 1 = binding, 2 = set - currentBindingIndex: 0 + pinStates: Array(numPins).fill(0), + currentBindingIndex: 0, + hardMode: false }; // Create tension wrench toggle @@ -3138,10 +3160,12 @@ function updatePinVisual(index) { const pin = pinsContainer.children[index]; - switch (gameState.pinStates[index]) { - case 0: pin.style.background = '#555'; break; // Down - case 1: pin.style.background = '#00f'; break; // Binding - case 2: pin.style.background = '#0f0'; break; // Set + if (!gameState.hardMode) { + switch (gameState.pinStates[index]) { + case 0: pin.style.background = '#555'; break; // Down + case 1: pin.style.background = '#00f'; break; // Binding + case 2: pin.style.background = '#0f0'; break; // Set + } } } @@ -3171,15 +3195,21 @@ pin.appendChild(pinNumber); pin.onmousedown = () => { - if (!gameState.tensionApplied) return; // Pins only move with tension + if (!gameState.tensionApplied) return; const bindingPin = bindingOrder[gameState.currentBindingIndex]; if (i === bindingPin) { - gameState.pinStates[i] = 2; // Set + gameState.pinStates[i] = 2; gameState.currentBindingIndex++; - pin.style.background = '#0f0'; // Green for set - // Check win condition + // Play success click sound + clickSound.currentTime = 0; // Reset sound to start + clickSound.play().catch(e => console.log('Audio play failed:', e)); + + if (!gameState.hardMode) { + pin.style.background = '#0f0'; + } + if (gameState.currentBindingIndex >= numPins) { setTimeout(() => { unlockTarget(lockable, 'door', lockable.layer); @@ -3191,8 +3221,10 @@ }, 500); } } else { - gameState.pinStates[i] = 1; // Binding - pin.style.background = '#00f'; // Blue for binding + gameState.pinStates[i] = 1; + if (!gameState.hardMode) { + pin.style.background = '#00f'; + } } }; @@ -3206,7 +3238,16 @@ pinsContainer.appendChild(pin); } + difficultySelect.onchange = () => { + gameState.hardMode = difficultySelect.value.includes('Hard'); + // Update pin visibility + Array.from(pinsContainer.children).forEach(pin => { + pin.style.opacity = gameState.hardMode ? '0.1' : '1'; + }); + }; + // Add components to game container + gameContainer.appendChild(difficultySelect); gameContainer.appendChild(tensionWrench); gameContainer.appendChild(pinsContainer);