Added a difficulty chooser, makes the pin mode hidden and adds a sound

This commit is contained in:
Damian-I
2025-02-25 13:39:58 +00:00
parent 39b1c6f19b
commit 9352cba127

View File

@@ -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);