mirror of
https://github.com/isledecomp/isle.pizza.git
synced 2026-01-10 18:21:15 +00:00
Update config page
This commit is contained in:
parent
57a8cb17d9
commit
e96ba299b7
110
app.js
110
app.js
@ -271,6 +271,113 @@ document.addEventListener('DOMContentLoaded', function () {
|
||||
});
|
||||
});
|
||||
|
||||
// --- Configure Tabs ---
|
||||
const configTabButtons = document.querySelectorAll('.config-tab-btn');
|
||||
const configTabPanels = document.querySelectorAll('.config-tab-panel');
|
||||
|
||||
configTabButtons.forEach(button => {
|
||||
button.addEventListener('click', () => {
|
||||
const targetTab = button.dataset.configTab;
|
||||
configTabButtons.forEach(btn => btn.classList.remove('active'));
|
||||
button.classList.add('active');
|
||||
configTabPanels.forEach(panel => {
|
||||
panel.classList.remove('active');
|
||||
if (panel.id === 'config-tab-' + targetTab) {
|
||||
panel.classList.add('active');
|
||||
// Open first section, close others
|
||||
const sections = panel.querySelectorAll('.config-section-card');
|
||||
sections.forEach((section, index) => {
|
||||
section.open = (index === 0);
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// --- Accordion behavior for config sections ---
|
||||
const configSections = document.querySelectorAll('.config-section-card');
|
||||
configSections.forEach(section => {
|
||||
const summary = section.querySelector('summary');
|
||||
if (summary) {
|
||||
summary.addEventListener('click', (e) => {
|
||||
// If this section is closed and about to open, close others first
|
||||
if (!section.open) {
|
||||
configSections.forEach(other => {
|
||||
if (other !== section && other.open) {
|
||||
other.open = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// --- Preset Buttons ---
|
||||
const presetClassic = document.getElementById('preset-classic');
|
||||
const presetModern = document.getElementById('preset-modern');
|
||||
|
||||
function applyPreset(preset) {
|
||||
if (preset === 'classic') {
|
||||
// Game section defaults
|
||||
document.getElementById('language-select').value = 'en';
|
||||
document.getElementById('window-windowed').checked = true;
|
||||
document.getElementById('aspect-original').checked = true;
|
||||
document.getElementById('resolution-original').checked = true;
|
||||
// Detail section defaults
|
||||
document.getElementById('gfx-high').checked = true;
|
||||
document.getElementById('tex-high').checked = true;
|
||||
document.getElementById('max-lod').value = '3.6';
|
||||
document.getElementById('max-allowed-extras').value = '20';
|
||||
// Disable all extensions
|
||||
document.getElementById('check-hd-textures').checked = false;
|
||||
document.getElementById('check-hd-music').checked = false;
|
||||
document.getElementById('check-widescreen-bgs').checked = false;
|
||||
document.getElementById('check-outro').checked = false;
|
||||
document.getElementById('check-ending').checked = false;
|
||||
} else if (preset === 'modern') {
|
||||
document.getElementById('aspect-wide').checked = true;
|
||||
document.getElementById('resolution-wide').checked = true;
|
||||
document.getElementById('gfx-high').checked = true;
|
||||
document.getElementById('tex-high').checked = true;
|
||||
document.getElementById('max-lod').value = '6';
|
||||
document.getElementById('max-allowed-extras').value = '40';
|
||||
// Enable HD extensions
|
||||
document.getElementById('check-hd-textures').checked = true;
|
||||
document.getElementById('check-hd-music').checked = true;
|
||||
document.getElementById('check-widescreen-bgs').checked = true;
|
||||
}
|
||||
// Trigger change event to save config
|
||||
const configForm = document.getElementById('config-form');
|
||||
if (configForm) {
|
||||
configForm.dispatchEvent(new Event('change'));
|
||||
}
|
||||
// Refresh Offline Play button state
|
||||
if (typeof checkInitialCacheStatus === 'function') {
|
||||
checkInitialCacheStatus();
|
||||
}
|
||||
}
|
||||
|
||||
if (presetClassic) {
|
||||
presetClassic.addEventListener('click', () => applyPreset('classic'));
|
||||
}
|
||||
if (presetModern) {
|
||||
presetModern.addEventListener('click', () => applyPreset('modern'));
|
||||
}
|
||||
|
||||
// --- Config Toast ---
|
||||
const configToast = document.getElementById('config-toast');
|
||||
let toastTimeout = null;
|
||||
|
||||
function showConfigToast() {
|
||||
if (configToast) {
|
||||
configToast.classList.add('show');
|
||||
if (toastTimeout) clearTimeout(toastTimeout);
|
||||
toastTimeout = setTimeout(() => {
|
||||
configToast.classList.remove('show');
|
||||
}, 2000);
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener('popstate', (e) => {
|
||||
if (e.state && e.state.page && e.state.page !== 'main') {
|
||||
showPage(e.state.page, false);
|
||||
@ -402,6 +509,9 @@ document.addEventListener('DOMContentLoaded', function () {
|
||||
console.log(e.data.message);
|
||||
URL.revokeObjectURL(workerUrl); // Clean up the temporary URL
|
||||
worker.terminate();
|
||||
if (e.data.status === 'success') {
|
||||
showConfigToast();
|
||||
}
|
||||
};
|
||||
|
||||
worker.onerror = (e) => {
|
||||
|
||||
643
index.html
643
index.html
@ -424,364 +424,311 @@
|
||||
<p>OPFS is disabled in this browser. Default configuration will apply. If you are using a Firefox
|
||||
Private window, please change to a regular window instead to change configuration.</p>
|
||||
</blockquote>
|
||||
<div class="page-inner-content">
|
||||
<div class="page-inner-content config-layout">
|
||||
<div class="config-art-panel">
|
||||
<img src="shark.webp" alt="LEGO Island Shark and Brickster">
|
||||
</div>
|
||||
<form id="config-form" class="config-form">
|
||||
<div class="config-section">
|
||||
<h3 class="config-legend">Game</h3>
|
||||
<div class="form-grid">
|
||||
<div class="form-group">
|
||||
<label class="form-group-label">Version</label>
|
||||
<div class="select-wrapper">
|
||||
<select id="language-select" name="Language">
|
||||
<option value="da">Danish</option>
|
||||
<option value="el">English (1.0)</option>
|
||||
<option value="en" selected>English (1.1)</option>
|
||||
<option value="fr">French</option>
|
||||
<option value="de">German</option>
|
||||
<option value="it">Italian</option>
|
||||
<option value="jp">Japanese</option>
|
||||
<option value="ko">Korean</option>
|
||||
<option value="pt">Portuguese</option>
|
||||
<option value="ru">Russian</option>
|
||||
<option value="es">Spanish</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group" id="window-form">
|
||||
<label class="form-group-label">Window</label>
|
||||
<div class="radio-group option-list">
|
||||
<div class="option-item">
|
||||
<input type="radio" id="window-windowed" name="window" data-not-ini="true"
|
||||
checked>
|
||||
<label for="window-windowed">Windowed</label>
|
||||
</div>
|
||||
<div class="option-item">
|
||||
<input type="radio" id="window-fullscreen" name="window" data-not-ini="true">
|
||||
<label for="window-fullscreen">Full Screen</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-group-label">
|
||||
Aspect Ratio
|
||||
<span class="tooltip-trigger">?
|
||||
<span class="tooltip-content">Choose Original (4:3) to preserve the classic
|
||||
aspect ratio with black bars, or select Widescreen to stretch the image to
|
||||
fit your display.</span>
|
||||
</label>
|
||||
<div class="radio-group option-list">
|
||||
<div class="option-item">
|
||||
<input type="radio" id="aspect-original" value="1" name="Original Aspect Ratio"
|
||||
checked>
|
||||
<label for="aspect-original">Original (4:3)</label>
|
||||
</div>
|
||||
<div class="option-item">
|
||||
<input type="radio" id="aspect-wide" value="0" name="Original Aspect Ratio">
|
||||
<label for="aspect-wide">Widescreen</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-group-label">
|
||||
Resolution
|
||||
<span class="tooltip-trigger">?
|
||||
<span class="tooltip-content">Choose Original (640 x 480) to preserve the
|
||||
classic resolution, or select Maximum to render in the highest
|
||||
quality.</span>
|
||||
</label>
|
||||
<div class="radio-group option-list">
|
||||
<div class="option-item">
|
||||
<input type="radio" id="resolution-original" value="1"
|
||||
name="Original Resolution" checked>
|
||||
<label for="resolution-original">Original (640 x 480)</label>
|
||||
</div>
|
||||
<div class="option-item">
|
||||
<input type="radio" id="resolution-wide" value="0" name="Original Resolution">
|
||||
<label for="resolution-wide">Maximum</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="config-main">
|
||||
<div class="config-presets">
|
||||
<button type="button" class="preset-btn" id="preset-classic">Classic Mode</button>
|
||||
<button type="button" class="preset-btn" id="preset-modern">Modern Mode</button>
|
||||
</div>
|
||||
<div class="config-section">
|
||||
<h3 class="config-legend">Input</h3>
|
||||
<div class="form-grid">
|
||||
<div class="form-group" id="touch-section">
|
||||
<label class="form-group-label">
|
||||
Touch Control Scheme
|
||||
<span class="tooltip-trigger">?
|
||||
<span class="tooltip-content">
|
||||
<div><strong>Virtual Gamepad (Recommended):</strong> Slide your finger to
|
||||
move and turn.</div><br>
|
||||
<div><strong>Virtual Arrow Keys:</strong> Tap screen areas to move. The top
|
||||
moves forward, the bottom turns or moves back.</div><br>
|
||||
<div><strong>Virtual Mouse:</strong> Emulates classic mouse controls with
|
||||
touch.</div>
|
||||
</span>
|
||||
</label>
|
||||
<div class="select-wrapper">
|
||||
<select id="touch-type-select" name="Touch Scheme">
|
||||
<option value="0">Virtual Mouse</option>
|
||||
<option value="1">Virtual Arrow Keys</option>
|
||||
<option value="2" selected>Virtual Gamepad</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-group-label">
|
||||
Options
|
||||
<span class="tooltip-trigger">?
|
||||
<span class="tooltip-content">
|
||||
<div><strong>Haptic feedback:</strong> On supported devices and browsers,
|
||||
this provides physical feedback, like a vibration, while you play the
|
||||
game.</div><br>
|
||||
<div><strong>Use WASD for navigation:</strong> Use the WASD keys instead
|
||||
of the arrow keys to control the game, much akin to a modern PC game.
|
||||
</div><br>
|
||||
<div><strong>Active in background:</strong> Keeps the game running even
|
||||
when it's in the background.
|
||||
<div class="config-tabs">
|
||||
<div class="config-tab-buttons">
|
||||
<button class="config-tab-btn active" data-config-tab="display">Display</button>
|
||||
<button class="config-tab-btn" data-config-tab="controls">Controls</button>
|
||||
<button class="config-tab-btn" data-config-tab="audio">Audio</button>
|
||||
<button class="config-tab-btn" data-config-tab="extras">Extras</button>
|
||||
</div>
|
||||
<form id="config-form" class="config-form">
|
||||
<div class="config-tab-panel active" id="config-tab-display">
|
||||
<details class="config-section-card" open>
|
||||
<summary class="config-card-header">Game</summary>
|
||||
<div class="config-card-content">
|
||||
<div class="form-grid">
|
||||
<div class="form-group">
|
||||
<label class="form-group-label">Version</label>
|
||||
<div class="select-wrapper">
|
||||
<select id="language-select" name="Language">
|
||||
<option value="da">Danish</option>
|
||||
<option value="el">English (1.0)</option>
|
||||
<option value="en" selected>English (1.1)</option>
|
||||
<option value="fr">French</option>
|
||||
<option value="de">German</option>
|
||||
<option value="it">Italian</option>
|
||||
<option value="jp">Japanese</option>
|
||||
<option value="ko">Korean</option>
|
||||
<option value="pt">Portuguese</option>
|
||||
<option value="ru">Russian</option>
|
||||
<option value="es">Spanish</option>
|
||||
</select>
|
||||
</div>
|
||||
</span>
|
||||
</label>
|
||||
<div class="checkbox-group option-list">
|
||||
<div class="option-item">
|
||||
<input type="checkbox" id="check-haptic" name="Haptic" checked>
|
||||
<label for="check-haptic">Haptic feedback</label>
|
||||
</div>
|
||||
<div class="form-group" id="window-form">
|
||||
<label class="form-group-label">Window</label>
|
||||
<div class="radio-group option-list">
|
||||
<div class="option-item">
|
||||
<input type="radio" id="window-windowed" name="window" data-not-ini="true" checked>
|
||||
<label for="window-windowed">Windowed</label>
|
||||
</div>
|
||||
<div class="option-item">
|
||||
<input type="radio" id="window-fullscreen" name="window" data-not-ini="true">
|
||||
<label for="window-fullscreen">Full Screen</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-group-label">
|
||||
Aspect Ratio
|
||||
<span class="tooltip-trigger">?
|
||||
<span class="tooltip-content">Choose Original (4:3) to preserve the classic aspect ratio with black bars, or select Widescreen to stretch the image to fit your display.</span>
|
||||
</span>
|
||||
</label>
|
||||
<div class="radio-group option-list">
|
||||
<div class="option-item">
|
||||
<input type="radio" id="aspect-original" value="1" name="Original Aspect Ratio" checked>
|
||||
<label for="aspect-original">Original (4:3)</label>
|
||||
</div>
|
||||
<div class="option-item">
|
||||
<input type="radio" id="aspect-wide" value="0" name="Original Aspect Ratio">
|
||||
<label for="aspect-wide">Widescreen</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-group-label">
|
||||
Resolution
|
||||
<span class="tooltip-trigger">?
|
||||
<span class="tooltip-content">Choose Original (640 x 480) to preserve the classic resolution, or select Maximum to render in the highest quality.</span>
|
||||
</span>
|
||||
</label>
|
||||
<div class="radio-group option-list">
|
||||
<div class="option-item">
|
||||
<input type="radio" id="resolution-original" value="1" name="Original Resolution" checked>
|
||||
<label for="resolution-original">Original (640 x 480)</label>
|
||||
</div>
|
||||
<div class="option-item">
|
||||
<input type="radio" id="resolution-wide" value="0" name="Original Resolution">
|
||||
<label for="resolution-wide">Maximum</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="option-item">
|
||||
<input type="checkbox" id="check-wasd" name="WASD">
|
||||
<label for="check-wasd">Use WASD for navigation</label>
|
||||
</details>
|
||||
<details class="config-section-card">
|
||||
<summary class="config-card-header">Detail</summary>
|
||||
<div class="config-card-content">
|
||||
<div class="form-grid">
|
||||
<div class="form-group">
|
||||
<label class="form-group-label">
|
||||
Island Model Quality
|
||||
<span class="tooltip-trigger">?
|
||||
<span class="tooltip-content">Note: using the "Low" setting will cause the island to disappear. This is not a bug, but the same behavior as present in the original game.</span>
|
||||
</span>
|
||||
</label>
|
||||
<div class="radio-group option-list">
|
||||
<div class="option-item">
|
||||
<input type="radio" id="gfx-low" name="Island Quality" value="0">
|
||||
<label for="gfx-low">Low</label>
|
||||
</div>
|
||||
<div class="option-item">
|
||||
<input type="radio" id="gfx-med" name="Island Quality" value="1">
|
||||
<label for="gfx-med">Medium</label>
|
||||
</div>
|
||||
<div class="option-item">
|
||||
<input type="radio" id="gfx-high" name="Island Quality" value="2" checked>
|
||||
<label for="gfx-high">High</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-group-label">Island Texture Quality</label>
|
||||
<div class="radio-group option-list">
|
||||
<div class="option-item">
|
||||
<input type="radio" id="tex-low" name="Island Texture" value="0">
|
||||
<label for="tex-low">Low</label>
|
||||
</div>
|
||||
<div class="option-item">
|
||||
<input type="radio" id="tex-high" name="Island Texture" value="1" checked>
|
||||
<label for="tex-high">High</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-group-label" for="max-lod">
|
||||
Maximum LOD
|
||||
<span class="tooltip-trigger">?
|
||||
<span class="tooltip-content">Maximum Level of Detail (LOD). A higher setting will cause higher quality textures to be drawn regardless of distance.</span>
|
||||
</span>
|
||||
</label>
|
||||
<input type="range" id="max-lod" name="Max LOD" min="0" max="6" step="0.1" value="3.6">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-group-label" for="max-allowed-extras">
|
||||
Maximum actors (5..40)
|
||||
<span class="tooltip-trigger">?
|
||||
<span class="tooltip-content">Maximum number of LEGO actors to exist in the world at a time. The game will gradually increase the number of actors until this maximum is reached and while performance is acceptable.</span>
|
||||
</span>
|
||||
</label>
|
||||
<input type="range" id="max-allowed-extras" name="Max Allowed Extras" min="5" max="40" value="20">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="option-item">
|
||||
<input type="checkbox" id="check-active-in-bg" name="Active in Background">
|
||||
<label for="check-active-in-bg">Active in background</label>
|
||||
</details>
|
||||
<details class="config-section-card">
|
||||
<summary class="config-card-header">Graphics</summary>
|
||||
<div class="config-card-content">
|
||||
<div class="form-grid">
|
||||
<div class="form-group">
|
||||
<label class="form-group-label">Renderer</label>
|
||||
<div class="select-wrapper">
|
||||
<select id="renderer-select" name="3D Device ID">
|
||||
<option value="0 0x682656f3 0x0 0x0 0x2000000">Software</option>
|
||||
<option value="0 0x682656f3 0x0 0x0 0x4000000" selected>WebGL</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-group-label">Transition Type</label>
|
||||
<div class="select-wrapper">
|
||||
<select id="transition-type-select" name="Transition Type">
|
||||
<option value="1">No Animation</option>
|
||||
<option value="2">Dissolve</option>
|
||||
<option value="3" selected>Mosaic</option>
|
||||
<option value="4">Wipe Down</option>
|
||||
<option value="5">Windows</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-group-label">Anti-aliasing</label>
|
||||
<div class="select-wrapper">
|
||||
<select id="msaa-select" name="MSAA"></select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-group-label">Anisotropic filtering</label>
|
||||
<div class="select-wrapper">
|
||||
<select id="anisotropic-select" name="Anisotropic"></select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</details>
|
||||
</div>
|
||||
</div>
|
||||
<div class="config-tab-panel" id="config-tab-controls">
|
||||
<details class="config-section-card" open>
|
||||
<summary class="config-card-header">Input</summary>
|
||||
<div class="config-card-content">
|
||||
<div class="form-grid">
|
||||
<div class="form-group" id="touch-section">
|
||||
<label class="form-group-label">
|
||||
Touch Control Scheme
|
||||
<span class="tooltip-trigger">?
|
||||
<span class="tooltip-content">
|
||||
<div><strong>Virtual Gamepad (Recommended):</strong> Slide your finger to move and turn.</div><br>
|
||||
<div><strong>Virtual Arrow Keys:</strong> Tap screen areas to move. The top moves forward, the bottom turns or moves back.</div><br>
|
||||
<div><strong>Virtual Mouse:</strong> Emulates classic mouse controls with touch.</div>
|
||||
</span>
|
||||
</span>
|
||||
</label>
|
||||
<div class="select-wrapper">
|
||||
<select id="touch-type-select" name="Touch Scheme">
|
||||
<option value="0">Virtual Mouse</option>
|
||||
<option value="1">Virtual Arrow Keys</option>
|
||||
<option value="2" selected>Virtual Gamepad</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="toggle-group">
|
||||
<div class="toggle-switch">
|
||||
<label><input type="checkbox" id="check-haptic" name="Haptic" checked><span class="toggle-slider"></span><span class="toggle-label">Haptic feedback</span></label>
|
||||
<span class="tooltip-trigger">?<span class="tooltip-content">On supported devices and browsers, this provides physical feedback, like a vibration, while you play the game.</span></span>
|
||||
</div>
|
||||
<div class="toggle-switch">
|
||||
<label><input type="checkbox" id="check-wasd" name="WASD"><span class="toggle-slider"></span><span class="toggle-label">Use WASD for navigation</span></label>
|
||||
<span class="tooltip-trigger">?<span class="tooltip-content">Use the WASD keys instead of the arrow keys to control the game, much akin to a modern PC game.</span></span>
|
||||
</div>
|
||||
<div class="toggle-switch">
|
||||
<label><input type="checkbox" id="check-active-in-bg" name="Active in Background"><span class="toggle-slider"></span><span class="toggle-label">Active in background</span></label>
|
||||
<span class="tooltip-trigger">?<span class="tooltip-content">Keeps the game running even when it's in the background.</span></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</details>
|
||||
</div>
|
||||
<div class="config-tab-panel" id="config-tab-audio">
|
||||
<details class="config-section-card" open>
|
||||
<summary class="config-card-header">Sound</summary>
|
||||
<div class="config-card-content">
|
||||
<div class="toggle-group">
|
||||
<label class="toggle-switch">
|
||||
<input type="checkbox" id="check-music" name="Music" checked>
|
||||
<span class="toggle-slider"></span>
|
||||
<span class="toggle-label">Music</span>
|
||||
</label>
|
||||
<label class="toggle-switch">
|
||||
<input type="checkbox" id="check-3d-sound" name="3DSound" checked>
|
||||
<span class="toggle-slider"></span>
|
||||
<span class="toggle-label">3D Sound</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</details>
|
||||
</div>
|
||||
<div class="config-tab-panel" id="config-tab-extras">
|
||||
<details class="config-section-card" open>
|
||||
<summary class="config-card-header">Extensions</summary>
|
||||
<div class="config-card-content">
|
||||
<div class="toggle-group">
|
||||
<div class="toggle-switch">
|
||||
<label><input type="checkbox" id="check-hd-textures" name="Texture Loader" data-not-ini="true"><span class="toggle-slider"></span><span class="toggle-label">HD Textures <span class="toggle-badge">+25MB</span></span></label>
|
||||
<span class="tooltip-trigger">?<span class="tooltip-content">Enhance the game's visuals with high-definition textures.</span></span>
|
||||
</div>
|
||||
<div class="toggle-switch">
|
||||
<label><input type="checkbox" id="check-hd-music" name="HD Music" data-not-ini="true"><span class="toggle-slider"></span><span class="toggle-label">HD Music <span class="toggle-badge">+450MB</span></span></label>
|
||||
<span class="tooltip-trigger">?<span class="tooltip-content">Improve the game's music with high-definition audio.</span></span>
|
||||
</div>
|
||||
<div class="toggle-switch">
|
||||
<label><input type="checkbox" id="check-widescreen-bgs" name="Widescreen Backgrounds" data-not-ini="true"><span class="toggle-slider"></span><span class="toggle-label">Widescreen Backgrounds <span class="toggle-badge">WIP</span></span></label>
|
||||
<span class="tooltip-trigger">?<span class="tooltip-content">Adapts the game's background art for modern widescreen monitors, eliminating unwanted 3D backgrounds on the sides of the screen.</span></span>
|
||||
</div>
|
||||
<div class="toggle-switch">
|
||||
<label><input type="checkbox" id="check-outro" name="Outro FMV" data-not-ini="true"><span class="toggle-slider"></span><span class="toggle-label">Outro FMV</span></label>
|
||||
<span class="tooltip-trigger">?<span class="tooltip-content">Plays the unused Outro animation upon exiting the game.</span></span>
|
||||
</div>
|
||||
<div class="toggle-switch">
|
||||
<label><input type="checkbox" id="check-ending" name="Extended Bad Ending FMV" data-not-ini="true"><span class="toggle-slider"></span><span class="toggle-label">Extended Bad Ending FMV <span class="toggle-badge">+20MB</span></span></label>
|
||||
<span class="tooltip-trigger">?<span class="tooltip-content">Plays the extended / "uncut" Bad Ending animation as found in beta versions of the game upon failing to catch the Brickster.</span></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</details>
|
||||
<details class="config-section-card">
|
||||
<summary class="config-card-header">Offline Play</summary>
|
||||
<div class="config-card-content">
|
||||
<div class="offline-play-grid">
|
||||
<div class="offline-play-text">
|
||||
<p>Install the game for offline access. This will download all necessary files to your device (about 550MB).</p>
|
||||
<p class="offline-note">Note: browsers enforce strict storage quotas, especially in private/incognito windows.</p>
|
||||
</div>
|
||||
<div class="offline-play-controls">
|
||||
<img class="control-img" id="install-btn" src="install_off.webp" alt="Install Game" data-off="install_off.webp" data-on="install_on.webp" style="display: block;">
|
||||
<img class="control-img" id="uninstall-btn" src="uninstall_off.webp" alt="Uninstall Game" data-off="uninstall_off.webp" data-on="uninstall_on.webp" style="display: none;">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</details>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="config-section">
|
||||
<h3 class="config-legend">Detail</h3>
|
||||
<div class="form-grid">
|
||||
<div class="form-group">
|
||||
<label class="form-group-label">
|
||||
Island Model Quality
|
||||
<span class="tooltip-trigger">?
|
||||
<span class="tooltip-content">Note: using the "Low" setting will cause the
|
||||
island to disappear. This is not a bug, but the same behavior as present in
|
||||
the original game.</span>
|
||||
</span>
|
||||
</label>
|
||||
<div class="radio-group option-list">
|
||||
<div class="option-item">
|
||||
<input type="radio" id="gfx-low" name="Island Quality" value="0">
|
||||
<label for="gfx-low">Low</label>
|
||||
</div>
|
||||
<div class="option-item">
|
||||
<input type="radio" id="gfx-med" name="Island Quality" value="1">
|
||||
<label for="gfx-med">Medium</label>
|
||||
</div>
|
||||
<div class="option-item">
|
||||
<input type="radio" id="gfx-high" name="Island Quality" value="2" checked>
|
||||
<label for="gfx-high">High</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-group-label">Island Texture Quality</label>
|
||||
<div class="radio-group option-list">
|
||||
<div class="option-item">
|
||||
<input type="radio" id="tex-low" name="Island Texture" value="0">
|
||||
<label for="tex-low">Low</label>
|
||||
</div>
|
||||
<div class="option-item">
|
||||
<input type="radio" id="tex-high" name="Island Texture" value="1" checked>
|
||||
<label for="tex-high">High</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-group-label" for="max-lod">
|
||||
Maximum LOD
|
||||
<span class="tooltip-trigger">?
|
||||
<span class="tooltip-content">Maximum Level of Detail (LOD). A higher setting
|
||||
will cause higher quality textures to be drawn regardless of
|
||||
distance.</span>
|
||||
</span>
|
||||
</label>
|
||||
<input type="range" id="max-lod" name="Max LOD" min="0" max="6" step="0.1" value="3.6">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-group-label" for="max-allowed-extras">
|
||||
Maximum actors (5..40)
|
||||
<span class="tooltip-trigger">?
|
||||
<span class="tooltip-content">Maximum number of LEGO actors to exist in the
|
||||
world at a time. The game will gradually increase the number of actors until
|
||||
this maximum is reached and while performance is acceptable.</span>
|
||||
</span>
|
||||
</label>
|
||||
<input type="range" id="max-allowed-extras" name="Max Allowed Extras" min="5" max="40"
|
||||
value="20">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="config-section">
|
||||
<h3 class="config-legend">Graphics</h3>
|
||||
<div class="form-grid">
|
||||
<div class="form-group">
|
||||
<label class="form-group-label">Renderer</label>
|
||||
<div class="select-wrapper">
|
||||
<select id="renderer-select" name="3D Device ID">
|
||||
<option value="0 0x682656f3 0x0 0x0 0x2000000">Software</option>
|
||||
<option value="0 0x682656f3 0x0 0x0 0x4000000" selected>WebGL</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-group-label">Transition Type</label>
|
||||
<div class="select-wrapper">
|
||||
<select id="transition-type-select" name="Transition Type">
|
||||
<option value="1">No Animation</option>
|
||||
<option value="2">Dissolve</option>
|
||||
<option value="3" selected>Mosaic</option>
|
||||
<option value="4">Wipe Down</option>
|
||||
<option value="5">Windows</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-group-label">Anti-aliasing</label>
|
||||
<div class="select-wrapper">
|
||||
<select id="msaa-select" name="MSAA">
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="form-group-label">Anisotropic filtering</label>
|
||||
<div class="select-wrapper">
|
||||
<select id="anisotropic-select" name="Anisotropic">
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="config-section">
|
||||
<h3 class="config-legend">Sound</h3>
|
||||
<div class="form-grid">
|
||||
<div class="form-group">
|
||||
<label class="form-group-label">Options</label>
|
||||
<div class="checkbox-group option-list">
|
||||
<div class="option-item">
|
||||
<input type="checkbox" id="check-music" name="Music" checked>
|
||||
<label for="check-music">Music</label>
|
||||
</div>
|
||||
<div class="option-item">
|
||||
<input type="checkbox" id="check-3d-sound" name="3DSound" checked>
|
||||
<label for="check-3d-sound">3D Sound</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="config-section">
|
||||
<h3 class="config-legend">
|
||||
Extensions
|
||||
<span class="tooltip-trigger">?
|
||||
<span class="tooltip-content">
|
||||
Expands the game with new content and modifications created by the community.
|
||||
</span>
|
||||
</span>
|
||||
</h3>
|
||||
<div class="form-grid">
|
||||
<div class="form-group">
|
||||
<label class="form-group-label">
|
||||
Options
|
||||
<span class="tooltip-trigger">?
|
||||
<span class="tooltip-content">
|
||||
<strong>HD Textures:</strong> Enhance the game's visuals with
|
||||
high-definition textures. An extra 25MB download is
|
||||
required when this is enabled.<br><br>
|
||||
<strong>HD Music:</strong> Improve the game's music with
|
||||
high-definition audio. An extra 450MB download is
|
||||
required when this is enabled.<br><br>
|
||||
<strong>Widescreen Backgrounds (work-in-progress):</strong> Adapts the game's background art
|
||||
for modern widescreen monitors, eliminating unwanted 3D backgrounds on the
|
||||
sides of the screen. An extra 5MB download is
|
||||
required when this is enabled.<br><br>
|
||||
<strong>Outro FMV:</strong> Plays the unused Outro animation upon exiting the game.<br><br>
|
||||
<strong>Extended Bad Ending FMV:</strong> Plays the extended / "uncut" Bad Ending animation
|
||||
as found in beta versions of the game upon failing to catch the Brickster. An extra 20MB download is
|
||||
required when this is enabled.
|
||||
</span>
|
||||
</span>
|
||||
</label>
|
||||
<div class="checkbox-group option-list">
|
||||
<div class="option-item">
|
||||
<input type="checkbox" id="check-hd-textures" name="Texture Loader"
|
||||
data-not-ini="true">
|
||||
<label for="check-hd-textures">
|
||||
HD Textures
|
||||
</label>
|
||||
</div>
|
||||
<div class="option-item">
|
||||
<input type="checkbox" id="check-hd-music" name="HD Music"
|
||||
data-not-ini="true">
|
||||
<label for="check-hd-music">
|
||||
HD Music
|
||||
</label>
|
||||
</div>
|
||||
<div class="option-item">
|
||||
<input type="checkbox" id="check-widescreen-bgs" name="Widescreen Backgrounds"
|
||||
data-not-ini="true">
|
||||
<label for="check-widescreen-bgs">
|
||||
Widescreen Backgrounds
|
||||
</label>
|
||||
</div>
|
||||
<div class="option-item">
|
||||
<input type="checkbox" id="check-outro" name="Outro FMV"
|
||||
data-not-ini="true">
|
||||
<label for="check-outro">
|
||||
Outro FMV
|
||||
</label>
|
||||
</div>
|
||||
<div class="option-item">
|
||||
<input type="checkbox" id="check-ending" name="Extended Bad Ending FMV"
|
||||
data-not-ini="true">
|
||||
<label for="check-ending">
|
||||
Extended Bad Ending FMV
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="config-section">
|
||||
<h3 class="config-legend">Offline Play</h3>
|
||||
<div class="offline-play-grid">
|
||||
<div class="offline-play-text">
|
||||
<h4>Install for Offline Access</h4>
|
||||
<p>By installing, the game will be available to play even when you are not connected to
|
||||
the internet. This will download all necessary files to your device (about 550MB in
|
||||
size).</p>
|
||||
<p style="font-size:0.7em;">Note: browsers enforce strict storage and memory quotas,
|
||||
especially when using private/incognito windows. If you encounter an error during
|
||||
installation, please use a regular window and make sure you have enough disk space
|
||||
available on your device.</p>
|
||||
</div>
|
||||
<div class="offline-play-controls">
|
||||
<img class="control-img" id="install-btn" src="install_off.webp" alt="Install Game"
|
||||
data-off="install_off.webp" data-on="install_on.webp" style="display: block;">
|
||||
<img class="control-img" id="uninstall-btn" src="uninstall_off.webp"
|
||||
alt="Uninstall Game" data-off="uninstall_off.webp" data-on="uninstall_on.webp"
|
||||
style="display: none;">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div id="config-toast" class="config-toast">Settings saved</div>
|
||||
</div>
|
||||
|
||||
<div id="free-stuff-page" class="page-content">
|
||||
@ -898,7 +845,7 @@
|
||||
</div>
|
||||
|
||||
<div class="app-footer">
|
||||
<p>Last updated: <span id="app-version">2026-01-04 21:38:40 UTC</span></p>
|
||||
<p>Last updated: <span id="app-version">2026-01-04 22:31:11 UTC</span></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
287
style.css
287
style.css
@ -338,7 +338,7 @@ body {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
#configure-page .page-inner-content {
|
||||
#configure-page .page-inner-content.config-layout {
|
||||
display: flex;
|
||||
background-color: #181818;
|
||||
border: 1px solid #303030;
|
||||
@ -346,8 +346,9 @@ body {
|
||||
}
|
||||
|
||||
.config-art-panel {
|
||||
flex: 0 0 180px;
|
||||
flex: 0 0 200px;
|
||||
border-radius: 8px 0 0 8px;
|
||||
min-height: 420px;
|
||||
}
|
||||
|
||||
.config-art-panel img {
|
||||
@ -358,26 +359,258 @@ body {
|
||||
border-radius: 8px 0 0 8px;
|
||||
}
|
||||
|
||||
.config-main {
|
||||
flex-grow: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 20px;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.config-form {
|
||||
flex-grow: 1;
|
||||
padding: 25px;
|
||||
}
|
||||
|
||||
.config-section {
|
||||
margin-bottom: 25px;
|
||||
/* Preset buttons */
|
||||
.config-presets {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.config-section:last-child {
|
||||
.preset-btn {
|
||||
padding: 8px 16px;
|
||||
background: linear-gradient(135deg, #2a2a2a 0%, #1a1a1a 100%);
|
||||
border: 1px solid #444;
|
||||
border-radius: 6px;
|
||||
color: #c0c0c0;
|
||||
font-size: 0.85em;
|
||||
font-weight: bold;
|
||||
cursor: pointer;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
.preset-btn:hover {
|
||||
border-color: #FFD700;
|
||||
color: #FFD700;
|
||||
background: linear-gradient(135deg, #333 0%, #222 100%);
|
||||
}
|
||||
|
||||
.preset-btn:active {
|
||||
transform: scale(0.98);
|
||||
}
|
||||
|
||||
/* Config tabs */
|
||||
.config-tabs {
|
||||
flex-grow: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.config-tab-buttons {
|
||||
display: flex;
|
||||
gap: 5px;
|
||||
border-bottom: 1px solid #333;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.config-tab-btn {
|
||||
padding: 10px 18px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
border-bottom: 2px solid transparent;
|
||||
color: #888;
|
||||
font-size: 0.9em;
|
||||
font-weight: bold;
|
||||
cursor: pointer;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
.config-tab-btn:hover {
|
||||
color: #c0c0c0;
|
||||
}
|
||||
|
||||
.config-tab-btn.active {
|
||||
color: #FFD700;
|
||||
border-bottom-color: #FFD700;
|
||||
}
|
||||
|
||||
.config-tab-panel {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.config-tab-panel.active {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* Collapsible section cards */
|
||||
.config-section-card {
|
||||
background: linear-gradient(135deg, #1e1e1e 0%, #161616 100%);
|
||||
border: 1px solid #2a2a2a;
|
||||
border-radius: 8px;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.config-section-card:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.config-legend {
|
||||
.config-card-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
padding: 12px 16px;
|
||||
color: #FFD700;
|
||||
font-size: 1.1em;
|
||||
font-size: 1em;
|
||||
font-weight: bold;
|
||||
margin: 0 0 15px 0;
|
||||
padding-bottom: 10px;
|
||||
border-bottom: 1px solid #444;
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.config-card-header::-webkit-details-marker {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.config-card-header::after {
|
||||
content: '+';
|
||||
font-size: 1.2em;
|
||||
color: #666;
|
||||
transition: transform 0.2s ease;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.config-section-card[open] .config-card-header::after {
|
||||
content: '−';
|
||||
}
|
||||
|
||||
.config-card-content {
|
||||
padding: 0 16px 16px 16px;
|
||||
}
|
||||
|
||||
/* Toggle switches */
|
||||
.toggle-group {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.toggle-switch {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
user-select: none;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.toggle-switch label {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.toggle-switch input {
|
||||
position: absolute;
|
||||
opacity: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
.toggle-slider {
|
||||
position: relative;
|
||||
width: 44px;
|
||||
height: 24px;
|
||||
background-color: #333;
|
||||
border-radius: 24px;
|
||||
margin-right: 12px;
|
||||
transition: background-color 0.2s ease;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.toggle-slider::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 3px;
|
||||
left: 3px;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
background-color: #888;
|
||||
border-radius: 50%;
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
.toggle-switch input:checked + .toggle-slider {
|
||||
background-color: #3a5f3a;
|
||||
}
|
||||
|
||||
.toggle-switch input:checked + .toggle-slider::after {
|
||||
left: 23px;
|
||||
background-color: #FFD700;
|
||||
}
|
||||
|
||||
.toggle-label {
|
||||
color: #c0c0c0;
|
||||
font-size: 0.9em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.toggle-label {
|
||||
white-space: normal;
|
||||
}
|
||||
}
|
||||
|
||||
.toggle-switch .tooltip-trigger {
|
||||
margin-left: 8px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.toggle-badge {
|
||||
display: inline-block;
|
||||
padding: 2px 6px;
|
||||
margin-left: 8px;
|
||||
background-color: #333;
|
||||
border-radius: 4px;
|
||||
font-size: 0.75em;
|
||||
color: #888;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.toggle-badge {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* Config toast notification */
|
||||
.config-toast {
|
||||
position: fixed;
|
||||
bottom: 20px;
|
||||
left: 50%;
|
||||
transform: translateX(-50%) translateY(100px);
|
||||
background: linear-gradient(135deg, #2a2a2a 0%, #1a1a1a 100%);
|
||||
border: 1px solid #FFD700;
|
||||
border-radius: 8px;
|
||||
padding: 12px 24px;
|
||||
color: #f0f0f0;
|
||||
font-size: 0.9em;
|
||||
font-weight: bold;
|
||||
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.4);
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
transition: all 0.3s ease;
|
||||
z-index: 10000;
|
||||
}
|
||||
|
||||
.config-toast.show {
|
||||
transform: translateX(-50%) translateY(0);
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
/* Offline play adjustments */
|
||||
.offline-note {
|
||||
font-size: 0.75em;
|
||||
color: #666;
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
.form-grid {
|
||||
@ -428,7 +661,7 @@ body {
|
||||
line-height: 1.4;
|
||||
text-align: left;
|
||||
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5);
|
||||
z-index: 20;
|
||||
z-index: 10000;
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
transition: opacity 0.2s, visibility 0.2s;
|
||||
@ -1020,16 +1253,42 @@ select {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#configure-page .page-inner-content {
|
||||
#configure-page .page-inner-content.config-layout {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.config-form {
|
||||
.config-main {
|
||||
background-color: #181818;
|
||||
border: 1px solid #303030;
|
||||
border-radius: 8px;
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
.config-presets {
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.preset-btn {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.config-tab-buttons {
|
||||
flex-wrap: wrap;
|
||||
gap: 0;
|
||||
}
|
||||
|
||||
.config-tab-btn {
|
||||
flex: 1 1 auto;
|
||||
padding: 8px 12px;
|
||||
font-size: 0.8em;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.form-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.offline-play-grid {
|
||||
|
||||
2
sw.js
2
sw.js
@ -10,7 +10,7 @@ const { Strategy } = workbox.strategies;
|
||||
const { CacheableResponsePlugin } = workbox.cacheableResponse;
|
||||
const { RangeRequestsPlugin } = workbox.rangeRequests;
|
||||
|
||||
precacheAndRoute([{"revision":"483fcf29a509ff4578512ce6fd42194d","url":"index.html"},{"revision":"013ceb7d67293d532e979dde0347f3af","url":"cancel_off.webp"},{"revision":"bfc1563be018d82685716c6130529129","url":"cancel_on.webp"},{"revision":"d282c260fd35522036936bb6faf8ad21","url":"cdspin.gif"},{"revision":"3d820bf72b19bd4e437a61e75f317b83","url":"configure_off.webp"},{"revision":"e2c0c5e6aa1f7703c385a433a2d2a519","url":"configure_on.webp"},{"revision":"88e1e81c930d8e6c24dfdc7af274e812","url":"favicon.png"},{"revision":"d16b293eca457e2fb1e7ef2caca8c904","url":"favicon.svg"},{"revision":"d2b9c2e128ef1e5e4265c603b0bc3305","url":"free_stuff_off.webp"},{"revision":"cbc6a6779897f932c3a3c8dceb329804","url":"free_stuff_on.webp"},{"revision":"05fba4ef1884cbbd6afe09ea3325efc0","url":"install_off.webp"},{"revision":"11247e92082ba3d978a2e3785b0acf51","url":"install_on.webp"},{"revision":"d23ea8243c18eb217ef08fe607097824","url":"island.webp"},{"revision":"c97d78e159b8bff44d41e56d0aa20220","url":"isle.js"},{"revision":"5f174d45de1e3c5e0abdbccfd64567b6","url":"isle.wasm"},{"revision":"6d4248f1a08c218943e582673179b7be","url":"poster.pdf"},{"revision":"a6fcac24a24996545c039a1755af33ea","url":"read_me_off.webp"},{"revision":"aae783d064996b4322e23b092d97ea4a","url":"read_me_on.webp"},{"revision":"766a9e6e6d890f24cef252e81753b29d","url":"run_game_off.webp"},{"revision":"70208e00e9ea641e4c98699f74100db3","url":"run_game_on.webp"},{"revision":"0a65c71d9983c9bb1bc6a5f405fd6fd9","url":"shark.webp"},{"revision":"88c1fd032e6fc16814690712a26c1ede","url":"uninstall_off.webp"},{"revision":"0118a4aca04c5fb0a525bf00b001844e","url":"uninstall_on.webp"},{"revision":"008f544b125d0d595af8fffc2d86103d","url":"app.js"},{"revision":"8f37e9eaff5601153c160f0c8a9ab00e","url":"style.css"},{"revision":"060210979e13e305510de6285e085db1","url":"manifest.json"},{"revision":"4f0172bc7007d34cebf681cc233ab57f","url":"install.webp"},{"revision":"6a70d35dadf51d2ec6e38a6202d7fb0b","url":"install.mp3"},{"revision":"eac041a0b8835bfea706d997b0b7b224","url":"downloader.js"},{"revision":"6899f72755d4e84c707b93ac54a8fb06","url":"debug.js"},{"revision":"7817b36ddda9f07797c05a0ff6cacb21","url":"debug.html"},{"revision":"4ea2aac9446188b8a588811bc593919e","url":"ogel.webp"},{"revision":"c57d24598537443c5b8276c8dd5dbdc9","url":"bonus.webp"},{"revision":"d11c8c893d5525c8842555dc2861c393","url":"callfail.webp"},{"revision":"be9a89fb567b632cf8d4661cbf8afd9e","url":"getinfo.webp"},{"revision":"fe986681f41e96631f39f3288b23e538","url":"sysinfo.webp"},{"revision":"4ec902e0b0ce60ffd9dd565c9ddf40a1","url":"send.webp"},{"revision":"81f3c8fc38b876dc2fcfeefaadad1d1b","url":"congrats.webp"},{"revision":"f906318cb87e09a819e5916676caab2e","url":"register.webp"},{"revision":"c633a7500e6f30162bf1cf4ec4e95a6d","url":"later.webp"},{"revision":"d149d5709ac00fd5e2967ab4f3d74886","url":"comic.pdf"}]);
|
||||
precacheAndRoute([{"revision":"77b36b116ba5ac49b416513c7d8e3a0c","url":"index.html"},{"revision":"013ceb7d67293d532e979dde0347f3af","url":"cancel_off.webp"},{"revision":"bfc1563be018d82685716c6130529129","url":"cancel_on.webp"},{"revision":"d282c260fd35522036936bb6faf8ad21","url":"cdspin.gif"},{"revision":"3d820bf72b19bd4e437a61e75f317b83","url":"configure_off.webp"},{"revision":"e2c0c5e6aa1f7703c385a433a2d2a519","url":"configure_on.webp"},{"revision":"88e1e81c930d8e6c24dfdc7af274e812","url":"favicon.png"},{"revision":"d16b293eca457e2fb1e7ef2caca8c904","url":"favicon.svg"},{"revision":"d2b9c2e128ef1e5e4265c603b0bc3305","url":"free_stuff_off.webp"},{"revision":"cbc6a6779897f932c3a3c8dceb329804","url":"free_stuff_on.webp"},{"revision":"05fba4ef1884cbbd6afe09ea3325efc0","url":"install_off.webp"},{"revision":"11247e92082ba3d978a2e3785b0acf51","url":"install_on.webp"},{"revision":"d23ea8243c18eb217ef08fe607097824","url":"island.webp"},{"revision":"c97d78e159b8bff44d41e56d0aa20220","url":"isle.js"},{"revision":"5f174d45de1e3c5e0abdbccfd64567b6","url":"isle.wasm"},{"revision":"6d4248f1a08c218943e582673179b7be","url":"poster.pdf"},{"revision":"a6fcac24a24996545c039a1755af33ea","url":"read_me_off.webp"},{"revision":"aae783d064996b4322e23b092d97ea4a","url":"read_me_on.webp"},{"revision":"766a9e6e6d890f24cef252e81753b29d","url":"run_game_off.webp"},{"revision":"70208e00e9ea641e4c98699f74100db3","url":"run_game_on.webp"},{"revision":"0a65c71d9983c9bb1bc6a5f405fd6fd9","url":"shark.webp"},{"revision":"88c1fd032e6fc16814690712a26c1ede","url":"uninstall_off.webp"},{"revision":"0118a4aca04c5fb0a525bf00b001844e","url":"uninstall_on.webp"},{"revision":"e8a8dd113d9bbfa2a1b81bbafa7b673d","url":"app.js"},{"revision":"debda137e612dedce0d0e7f7b545588f","url":"style.css"},{"revision":"060210979e13e305510de6285e085db1","url":"manifest.json"},{"revision":"4f0172bc7007d34cebf681cc233ab57f","url":"install.webp"},{"revision":"6a70d35dadf51d2ec6e38a6202d7fb0b","url":"install.mp3"},{"revision":"eac041a0b8835bfea706d997b0b7b224","url":"downloader.js"},{"revision":"6899f72755d4e84c707b93ac54a8fb06","url":"debug.js"},{"revision":"7817b36ddda9f07797c05a0ff6cacb21","url":"debug.html"},{"revision":"4ea2aac9446188b8a588811bc593919e","url":"ogel.webp"},{"revision":"c57d24598537443c5b8276c8dd5dbdc9","url":"bonus.webp"},{"revision":"d11c8c893d5525c8842555dc2861c393","url":"callfail.webp"},{"revision":"be9a89fb567b632cf8d4661cbf8afd9e","url":"getinfo.webp"},{"revision":"fe986681f41e96631f39f3288b23e538","url":"sysinfo.webp"},{"revision":"4ec902e0b0ce60ffd9dd565c9ddf40a1","url":"send.webp"},{"revision":"81f3c8fc38b876dc2fcfeefaadad1d1b","url":"congrats.webp"},{"revision":"f906318cb87e09a819e5916676caab2e","url":"register.webp"},{"revision":"c633a7500e6f30162bf1cf4ec4e95a6d","url":"later.webp"},{"revision":"d149d5709ac00fd5e2967ab4f3d74886","url":"comic.pdf"}]);
|
||||
|
||||
const gameFiles = [
|
||||
"/LEGO/Scripts/CREDITS.SI", "/LEGO/Scripts/INTRO.SI", "/LEGO/Scripts/NOCD.SI", "/LEGO/Scripts/SNDANIM.SI",
|
||||
|
||||
Loading…
Reference in New Issue
Block a user