mirror of
https://github.com/isledecomp/isle.pizza.git
synced 2026-01-10 02:01:16 +00:00
Add debug menu
This commit is contained in:
parent
d3e395a63d
commit
572219f703
85
app.js
85
app.js
@ -37,6 +37,78 @@ document.addEventListener('DOMContentLoaded', function () {
|
||||
const widescreenBgs = document.getElementById('check-widescreen-bgs');
|
||||
const outroFmv = document.getElementById('check-outro');
|
||||
const badEnding = document.getElementById('check-ending');
|
||||
const logo = document.getElementById('island-logo-img');
|
||||
|
||||
// --- Debug Mode Activation (5 taps on logo) ---
|
||||
let debugTapCount = 0;
|
||||
let debugTapTimeout = null;
|
||||
let debugEnabled = false;
|
||||
|
||||
// Pizza celebration animation for OGEL mode
|
||||
function celebratePizza(originElement) {
|
||||
const rect = originElement.getBoundingClientRect();
|
||||
const centerX = rect.left + rect.width / 2;
|
||||
const centerY = rect.top + rect.height / 2;
|
||||
const sliceCount = 12;
|
||||
|
||||
for (let i = 0; i < sliceCount; i++) {
|
||||
const slice = document.createElement('div');
|
||||
slice.className = 'pizza-slice';
|
||||
slice.textContent = '🍕';
|
||||
|
||||
// Calculate direction for this slice
|
||||
const angle = (i / sliceCount) * Math.PI * 2;
|
||||
const distance = 150 + Math.random() * 100;
|
||||
const tx = Math.cos(angle) * distance;
|
||||
const ty = Math.sin(angle) * distance;
|
||||
const rotation = (Math.random() - 0.5) * 720;
|
||||
|
||||
slice.style.left = centerX + 'px';
|
||||
slice.style.top = centerY + 'px';
|
||||
slice.style.setProperty('--tx', tx + 'px');
|
||||
slice.style.setProperty('--ty', ty + 'px');
|
||||
slice.style.setProperty('--rot', rotation + 'deg');
|
||||
slice.style.animationDelay = (Math.random() * 0.2) + 's';
|
||||
|
||||
document.body.appendChild(slice);
|
||||
|
||||
// Remove after animation completes
|
||||
setTimeout(function() {
|
||||
slice.remove();
|
||||
}, 1700);
|
||||
}
|
||||
}
|
||||
|
||||
logo.addEventListener('click', function() {
|
||||
if (debugEnabled) {
|
||||
// Replay pizza animation on subsequent clicks
|
||||
celebratePizza(logo);
|
||||
return;
|
||||
}
|
||||
|
||||
debugTapCount++;
|
||||
clearTimeout(debugTapTimeout);
|
||||
|
||||
if (debugTapCount >= 5) {
|
||||
// Enable debug mode
|
||||
debugEnabled = true;
|
||||
logo.src = 'ogel.webp';
|
||||
logo.alt = 'OGEL Mode Enabled';
|
||||
|
||||
// Celebrate with pizza!
|
||||
celebratePizza(logo);
|
||||
|
||||
// Dynamically load debug.js
|
||||
const script = document.createElement('script');
|
||||
script.src = 'debug.js';
|
||||
document.body.appendChild(script);
|
||||
} else {
|
||||
// Reset tap count after 1 second of no taps
|
||||
debugTapTimeout = setTimeout(function() {
|
||||
debugTapCount = 0;
|
||||
}, 1000);
|
||||
}
|
||||
});
|
||||
|
||||
// --- Sound Toggle ---
|
||||
function updateSoundEmojiState() {
|
||||
@ -96,11 +168,24 @@ document.addEventListener('DOMContentLoaded', function () {
|
||||
});
|
||||
|
||||
let progressUpdates = 0;
|
||||
const debugUI = document.getElementById('debug-ui');
|
||||
let debugUIVisible = false;
|
||||
|
||||
// MutationObserver to prevent Emscripten from hiding the debug UI
|
||||
const debugUIObserver = new MutationObserver(function(mutations) {
|
||||
if (debugUIVisible && debugUI.style.display === 'none') {
|
||||
debugUI.style.setProperty('display', 'block', 'important');
|
||||
}
|
||||
});
|
||||
debugUIObserver.observe(debugUI, { attributes: true, attributeFilter: ['style'] });
|
||||
|
||||
emscriptenCanvas.addEventListener('presenterProgress', function (event) {
|
||||
// Intro animation is ready
|
||||
if (event.detail.objectName == 'Lego_Smk' && event.detail.tickleState == 1) {
|
||||
loadingGifOverlay.style.display = 'none';
|
||||
emscriptenCanvas.style.setProperty('display', 'block', 'important');
|
||||
debugUIVisible = true;
|
||||
debugUI.style.setProperty('display', 'block', 'important');
|
||||
}
|
||||
else if (progressUpdates < 1003) {
|
||||
progressUpdates++;
|
||||
|
||||
533
debug.html
Normal file
533
debug.html
Normal file
@ -0,0 +1,533 @@
|
||||
<button id="debug-toggle" title="Debug Options">⚙</button>
|
||||
<div id="debug-panel">
|
||||
<div class="debug-header">Debug Options</div>
|
||||
<div class="debug-section">
|
||||
<div class="debug-section-title">General</div>
|
||||
<button data-keys="Pause">Pause/Resume</button>
|
||||
<button data-keys="Escape">Return to Infocenter</button>
|
||||
<button data-keys=" ">Skip Animation</button>
|
||||
<button data-keys="F12">Save Game</button>
|
||||
</div>
|
||||
<div class="debug-section">
|
||||
<div class="debug-section-title">Debug Mode (OGEL)</div>
|
||||
<button data-keys="ogel" class="debug-password">Enter Debug Mode</button>
|
||||
<button data-keys="Tab" class="requires-debug">Toggle FPS</button>
|
||||
<button data-keys="s" class="requires-debug">Toggle Music</button>
|
||||
<button data-keys="p" class="requires-debug">Reset/Load Plants</button>
|
||||
</div>
|
||||
<div class="debug-section">
|
||||
<div class="debug-section-title">Camera/View</div>
|
||||
<button data-keys="u" class="requires-debug">Move Up</button>
|
||||
<button data-keys="d" class="requires-debug">Move Down</button>
|
||||
</div>
|
||||
<div class="debug-section">
|
||||
<div class="debug-section-title">LOD (Level of Detail)</div>
|
||||
<button data-keys="f" class="requires-debug">LOD 0.0 (Lowest)</button>
|
||||
<button data-keys="x" class="requires-debug">LOD 3.6 (Default)</button>
|
||||
<button data-keys="h" class="requires-debug">LOD 5.0 (Highest)</button>
|
||||
</div>
|
||||
<div class="debug-section">
|
||||
<div class="debug-section-title">Misc</div>
|
||||
<button data-keys="z">Make Plants Dance</button>
|
||||
</div>
|
||||
<div class="debug-section">
|
||||
<div class="debug-section-title">Switch Act</div>
|
||||
<button data-keys="g2" class="requires-debug">Act 2</button>
|
||||
<button data-keys="g3" class="requires-debug">Act 3</button>
|
||||
<button data-keys="g4" class="requires-debug">Good Ending</button>
|
||||
<button data-keys="g5" class="requires-debug">Bad Ending</button>
|
||||
</div>
|
||||
<div class="debug-section">
|
||||
<div class="debug-section-title">Locations</div>
|
||||
<select id="debug-location-select">
|
||||
<option value="">-- Select Location --</option>
|
||||
<option value="c01">LCAMBA1 (01)</option>
|
||||
<option value="c02">LCAMBA2 (02)</option>
|
||||
<option value="c03">LCAMBA3 (03)</option>
|
||||
<option value="c04">LCAMBA4 (04)</option>
|
||||
<option value="c05">LCAMCA1 (05)</option>
|
||||
<option value="c06">LCAMCA2 (06)</option>
|
||||
<option value="c07">LCAMCA3 (07)</option>
|
||||
<option value="c08">LCAMGS1 (08)</option>
|
||||
<option value="c09">LCAMGS2 (09)</option>
|
||||
<option value="c10">LCAMGS3 (10)</option>
|
||||
<option value="c11">LCAMHO1 (11)</option>
|
||||
<option value="c12">LCAMHO2 (12)</option>
|
||||
<option value="c13">LCAMHO3 (13)</option>
|
||||
<option value="c14">LCAMIS1 (14)</option>
|
||||
<option value="c15">LCAMIS2 (15)</option>
|
||||
<option value="c16">LCAMIS3 (16)</option>
|
||||
<option value="c17">LCAMIS4 (17)</option>
|
||||
<option value="c18">LCAMIS5 (18)</option>
|
||||
<option value="c19">LCAMJA1 (19)</option>
|
||||
<option value="c20">LCAMJA2 (20)</option>
|
||||
<option value="c21">LCAMPO1 (21)</option>
|
||||
<option value="c22">LCAMPO2 (22)</option>
|
||||
<option value="c23">LCAMPO3 (23)</option>
|
||||
<option value="c24">LCAMPZ1 (24)</option>
|
||||
<option value="c25">LCAMPZ2 (25)</option>
|
||||
<option value="c26">LCAMRA1 (26)</option>
|
||||
<option value="c27">LCAMRA2 (27)</option>
|
||||
<option value="c28">LCAMRA3 (28)</option>
|
||||
<option value="c29">LCAMRA4 (29)</option>
|
||||
<option value="c30">LCAMRT1 (30)</option>
|
||||
<option value="c31">LCAMRT2 (31)</option>
|
||||
<option value="c32">LCAMRT3 (32)</option>
|
||||
<option value="c33">LCAMRT4 (33)</option>
|
||||
<option value="c34">LCAMRT5 (34)</option>
|
||||
<option value="c35">LCAMRT6 (35)</option>
|
||||
<option value="c36">LCAMRT7 (36)</option>
|
||||
<option value="c37">LCAMRT8 (37)</option>
|
||||
<option value="c38">LCAMRT9 (38)</option>
|
||||
<option value="c39">LCAMRT10 (39)</option>
|
||||
<option value="c40">LCAMRT11 (40)</option>
|
||||
<option value="c41">LCAMRT12 (41)</option>
|
||||
<option value="c42">LCAMRT13 (42)</option>
|
||||
<option value="c43">LCAMRT14 (43)</option>
|
||||
<option value="c44">LCAMRT15 (44)</option>
|
||||
<option value="c45">LCAMRT16 (45)</option>
|
||||
<option value="c46">LCAMRT17 (46)</option>
|
||||
<option value="c47">LCAMRT18 (47)</option>
|
||||
<option value="c48">LCAMRT19 (48)</option>
|
||||
<option value="c49">LCAMRT20 (49)</option>
|
||||
<option value="c50">LCAMRT21 (50)</option>
|
||||
<option value="c51">LCAMRT22 (51)</option>
|
||||
<option value="c52">LCAMRT23 (52)</option>
|
||||
<option value="c53">LCAMRT24 (53)</option>
|
||||
<option value="c54">LCAMRT25 (54)</option>
|
||||
<option value="c55">LCAMRT26 (55)</option>
|
||||
<option value="c56">LCAMRT27 (56)</option>
|
||||
<option value="c57">LCAMRT28 (57)</option>
|
||||
<option value="c58">LCAMRT29 (58)</option>
|
||||
<option value="c59">LCAMRT30 (59)</option>
|
||||
<option value="c60">LCAMRT31 (60)</option>
|
||||
<option value="c61">LCAMRT32 (61)</option>
|
||||
<option value="c62">LCAMRT33 (62)</option>
|
||||
<option value="c63">LCAMRT34 (63)</option>
|
||||
<option value="c64">LCAMRT35 (64)</option>
|
||||
<option value="c65">LCAMRT36 (65)</option>
|
||||
<option value="c66">LCAMRT37 (66)</option>
|
||||
<option value="c67">LCAMRT38 (67)</option>
|
||||
<option value="c68">LCAMRT39 (68)</option>
|
||||
<option value="c69">LCAMRT40 (69)</option>
|
||||
</select>
|
||||
<button id="debug-goto-location" class="requires-debug">Go to Location</button>
|
||||
</div>
|
||||
<div class="debug-section">
|
||||
<div class="debug-section-title">Animations</div>
|
||||
<button data-keys="va" class="requires-debug">Play <b>all</b> cam animations</button>
|
||||
<select id="debug-animation-select">
|
||||
<option value="">-- Select Animation --</option>
|
||||
<optgroup label="400-429">
|
||||
<option value="400">wns050p1 (400)</option>
|
||||
<option value="401">wns049p1 (401)</option>
|
||||
<option value="402">wns048p1 (402)</option>
|
||||
<option value="403">wns057rd (403)</option>
|
||||
<option value="404">pns123pr (404)</option>
|
||||
<option value="405">wns045di (405)</option>
|
||||
<option value="406">wns053pr (406)</option>
|
||||
<option value="407">wns046mg (407)</option>
|
||||
<option value="408">wns051bd (408)</option>
|
||||
<option value="409">pnsx48pr (409)</option>
|
||||
<option value="410">pnsx69pr (410)</option>
|
||||
<option value="411">pns125ni (411)</option>
|
||||
<option value="412">pns122pr (412)</option>
|
||||
<option value="413">pns050p1 (413)</option>
|
||||
<option value="414">pns069pr (414)</option>
|
||||
<option value="415">pns066db (415)</option>
|
||||
<option value="416">pns065rd (416)</option>
|
||||
<option value="417">pns067gd (417)</option>
|
||||
<option value="418">pns099pr (418)</option>
|
||||
<option value="419">pns098pr (419)</option>
|
||||
<option value="420">pns097pr (420)</option>
|
||||
<option value="421">pns096pr (421)</option>
|
||||
<option value="422">pns042bm (422)</option>
|
||||
<option value="423">pns045p1 (423)</option>
|
||||
<option value="424">pns048pr (424)</option>
|
||||
<option value="425">pns043en (425)</option>
|
||||
<option value="426">pns022pr (426)</option>
|
||||
<option value="427">pns018rd (427)</option>
|
||||
<option value="428">pns019pr (428)</option>
|
||||
<option value="429">pns021dl (429)</option>
|
||||
</optgroup>
|
||||
<optgroup label="500-599">
|
||||
<option value="500">sba001bu (500)</option>
|
||||
<option value="501">sba002bu (501)</option>
|
||||
<option value="502">sba003bu (502)</option>
|
||||
<option value="503">bns146rd (503)</option>
|
||||
<option value="504">bns144rd (504)</option>
|
||||
<option value="505">fns017la (505)</option>
|
||||
<option value="506">bns005p1 (506)</option>
|
||||
<option value="507">bns147rd (507)</option>
|
||||
<option value="508">igs001na (508)</option>
|
||||
<option value="509">sns003nu (509)</option>
|
||||
<option value="510">sgs001na (510)</option>
|
||||
<option value="511">sns001nu (511)</option>
|
||||
<option value="512">sns002nu (512)</option>
|
||||
<option value="513">sgs002na (513)</option>
|
||||
<option value="514">sgs003na (514)</option>
|
||||
<option value="515">fns001re (515)</option>
|
||||
<option value="516">fns0x1re (516)</option>
|
||||
<option value="517">fns007re (517)</option>
|
||||
<option value="518">fns011re (518)</option>
|
||||
<option value="519">sns001cl (519)</option>
|
||||
<option value="520">sns002cl (520)</option>
|
||||
<option value="521">sns003cl (521)</option>
|
||||
<option value="522">bns191en (522)</option>
|
||||
<option value="523">bho142en (523)</option>
|
||||
<option value="524">bic143sy (524)</option>
|
||||
<option value="525">sja004br (525)</option>
|
||||
<option value="526">sja005br (526)</option>
|
||||
<option value="527">sja006br (527)</option>
|
||||
<option value="528">sja007br (528)</option>
|
||||
<option value="529">sja008br (529)</option>
|
||||
<option value="530">sja009br (530)</option>
|
||||
<option value="531">sja010br (531)</option>
|
||||
<option value="532">sja011br (532)</option>
|
||||
<option value="533">sja012br (533)</option>
|
||||
<option value="534">sja013br (534)</option>
|
||||
<option value="535">sja014br (535)</option>
|
||||
<option value="536">sja015br (536)</option>
|
||||
<option value="537">sja016br (537)</option>
|
||||
<option value="538">sja017br (538)</option>
|
||||
<option value="539">sja018br (539)</option>
|
||||
<option value="540">sja001br (540)</option>
|
||||
<option value="541">sja002br (541)</option>
|
||||
<option value="542">sja003br (542)</option>
|
||||
<option value="543">ijs001sn (543)</option>
|
||||
<option value="544">fjs148gd (544)</option>
|
||||
<option value="545">fjs149va (545)</option>
|
||||
<option value="546">sjs001va (546)</option>
|
||||
<option value="547">sjs002va (547)</option>
|
||||
<option value="548">sjs003va (548)</option>
|
||||
<option value="549">sjs004va (549)</option>
|
||||
<option value="550">fjs019rd (550)</option>
|
||||
<option value="551">bjs009gd (551)</option>
|
||||
<option value="552">sjs001sn (552)</option>
|
||||
<option value="553">sjs002sn (553)</option>
|
||||
<option value="554">sjs003sn (554)</option>
|
||||
<option value="555">sjs004sn (555)</option>
|
||||
<option value="556">sjs005sn (556)</option>
|
||||
<option value="557">snsx31sh (557)</option>
|
||||
<option value="558">bns007gd (558)</option>
|
||||
<option value="559">fns001l1 (559)</option>
|
||||
<option value="560">fns001l2 (560)</option>
|
||||
<option value="561">fra157bm (561)</option>
|
||||
<option value="562">bns145rd (562)</option>
|
||||
<option value="563">ips001ro (563)</option>
|
||||
<option value="564">sns010ni (564)</option>
|
||||
<option value="565">sns003la (565)</option>
|
||||
<option value="566">fps181ni (566)</option>
|
||||
<option value="567">ipz001rd (567)</option>
|
||||
<option value="568">spz004ma (568)</option>
|
||||
<option value="569">spz005ma (569)</option>
|
||||
<option value="570">spz006ma (570)</option>
|
||||
<option value="571">spz004pa (571)</option>
|
||||
<option value="572">spz013ma (572)</option>
|
||||
<option value="573">spz006pa (573)</option>
|
||||
<option value="574">spz014ma (574)</option>
|
||||
<option value="575">spz005pa (575)</option>
|
||||
<option value="576">spz015ma (576)</option>
|
||||
<option value="577">spz007ma (577)</option>
|
||||
<option value="578">spz013pa (578)</option>
|
||||
<option value="579">spz008ma (579)</option>
|
||||
<option value="580">spz014pa (580)</option>
|
||||
<option value="581">spz009ma (581)</option>
|
||||
<option value="582">spz015pa (582)</option>
|
||||
<option value="583">spz007pa (583)</option>
|
||||
<option value="584">spz011pe (584)</option>
|
||||
<option value="585">spz008pa (585)</option>
|
||||
<option value="586">spz009pa (586)</option>
|
||||
<option value="587">spz010ma (587)</option>
|
||||
<option value="588">spz010pa (588)</option>
|
||||
<option value="589">spz011ma (589)</option>
|
||||
<option value="590">spz011pa (590)</option>
|
||||
<option value="591">spz012pa (591)</option>
|
||||
<option value="592">spz001ma (592)</option>
|
||||
<option value="593">spz002ma (593)</option>
|
||||
<option value="594">spz003ma (594)</option>
|
||||
<option value="595">spz003pa (595)</option>
|
||||
<option value="596">fpz166p1 (596)</option>
|
||||
<option value="597">fpz172rd (597)</option>
|
||||
<option value="598">spz001pa (598)</option>
|
||||
<option value="599">spz002pa (599)</option>
|
||||
</optgroup>
|
||||
<optgroup label="600-699">
|
||||
<option value="600">ppz086bs (600)</option>
|
||||
<option value="601">ppz008rd (601)</option>
|
||||
<option value="602">ppz009pg (602)</option>
|
||||
<option value="603">ivo918in (603)</option>
|
||||
<option value="604">spz004pe (604)</option>
|
||||
<option value="605">spz005pe (605)</option>
|
||||
<option value="606">srp006pe (606)</option>
|
||||
<option value="607">spz013pe (607)</option>
|
||||
<option value="608">sns001pe (608)</option>
|
||||
<option value="609">fra192pe (609)</option>
|
||||
<option value="610">fra163mg (610)</option>
|
||||
<option value="611">fns185gd (611)</option>
|
||||
<option value="612">irt001in (612)</option>
|
||||
<option value="613">irtx01sl (613)</option>
|
||||
<option value="614">frt135df (614)</option>
|
||||
<option value="615">frt137df (615)</option>
|
||||
<option value="616">frt139df (616)</option>
|
||||
<option value="617">frt025rd (617)</option>
|
||||
<option value="618">frt132rd (618)</option>
|
||||
<option value="619">srt001rd (619)</option>
|
||||
<option value="620">srt003bd (620)</option>
|
||||
<option value="621">sst001mg (621)</option>
|
||||
<option value="622">sns004la (622)</option>
|
||||
<option value="623">sns005la (623)</option>
|
||||
<option value="624">sns006la (624)</option>
|
||||
<option value="625">sps004ni (625)</option>
|
||||
<option value="626">sps005ni (626)</option>
|
||||
<option value="627">sps006ni (627)</option>
|
||||
<option value="628">sns007la (628)</option>
|
||||
<option value="629">sns008la (629)</option>
|
||||
<option value="630">sns009la (630)</option>
|
||||
<option value="631">sns007ni (631)</option>
|
||||
<option value="632">sns008ni (632)</option>
|
||||
<option value="633">sns009ni (633)</option>
|
||||
<option value="634">pns017ml (634)</option>
|
||||
<option value="635">sns010la (635)</option>
|
||||
<option value="636">sns010pe (636)</option>
|
||||
<option value="637">sns011la (637)</option>
|
||||
<option value="638">sns012la (638)</option>
|
||||
<option value="639">sns007pe (639)</option>
|
||||
<option value="640">sns008pe (640)</option>
|
||||
<option value="641">sns013la (641)</option>
|
||||
<option value="642">sns013ni (642)</option>
|
||||
<option value="643">sns014la (643)</option>
|
||||
<option value="644">sns014ni (644)</option>
|
||||
<option value="645">sns015la (645)</option>
|
||||
<option value="646">sns015ni (646)</option>
|
||||
<option value="647">sns011ni (647)</option>
|
||||
<option value="648">sns012ni (648)</option>
|
||||
<option value="649">sns014pe (649)</option>
|
||||
<option value="650">sns015pe (650)</option>
|
||||
<option value="651">sns003pe (651)</option>
|
||||
<option value="652">sns017ni (652)</option>
|
||||
<option value="653">sps001ni (653)</option>
|
||||
<option value="654">sps002ni (654)</option>
|
||||
<option value="655">sps003ni (655)</option>
|
||||
<option value="656">sns017la (656)</option>
|
||||
<option value="657">sps001la (657)</option>
|
||||
<option value="658">sps002la (658)</option>
|
||||
<option value="659">bns005pg (659)</option>
|
||||
<option value="660">sns001ml (660)</option>
|
||||
<option value="661">sns002mg (661)</option>
|
||||
<option value="662">sns002ml (662)</option>
|
||||
<option value="663">sns002pe (663)</option>
|
||||
<option value="664">sns003mg (664)</option>
|
||||
<option value="665">sns004mg (665)</option>
|
||||
<option value="666">sns004rd (666)</option>
|
||||
<option value="667">sns006bd (667)</option>
|
||||
<option value="668">sns006ro (668)</option>
|
||||
<option value="669">sns011in (669)</option>
|
||||
<option value="670">sps001ro (670)</option>
|
||||
<option value="671">sps002ro (671)</option>
|
||||
<option value="672">sps003ro (672)</option>
|
||||
<option value="673">sps004ro (673)</option>
|
||||
<option value="674">srt005pg (674)</option>
|
||||
<option value="675">pns100ml (675)</option>
|
||||
<option value="676">ppz029rd (676)</option>
|
||||
<option value="677">sns007sy (677)</option>
|
||||
<option value="678">cnsx12la (678)</option>
|
||||
<option value="679">cnsx12ni (679)</option>
|
||||
<option value="680">ijs006sn (680)</option>
|
||||
<option value="681">igs008na (681)</option>
|
||||
<option value="682">irt007in (682)</option>
|
||||
<option value="683">ips002ro (683)</option>
|
||||
<option value="684">hho142cl (684)</option>
|
||||
<option value="685">hho143cl (685)</option>
|
||||
<option value="686">hho144cl (686)</option>
|
||||
<option value="687">hho027en (687)</option>
|
||||
<option value="688">hps116bd (688)</option>
|
||||
<option value="689">hps117bd (689)</option>
|
||||
<option value="690">hps118re (690)</option>
|
||||
<option value="691">hps120en (691)</option>
|
||||
<option value="692">hps122en (692)</option>
|
||||
<option value="693">hpz047pe (693)</option>
|
||||
<option value="694">hpz048pe (694)</option>
|
||||
<option value="695">hpz049bd (695)</option>
|
||||
<option value="696">hpz050bd (696)</option>
|
||||
<option value="697">hpz052ma (697)</option>
|
||||
<option value="698">hpz053pa (698)</option>
|
||||
<option value="699">hpz055pa (699)</option>
|
||||
</optgroup>
|
||||
<optgroup label="700-799">
|
||||
<option value="700">hpz057ma (700)</option>
|
||||
<option value="701">hpza51gd (701)</option>
|
||||
<option value="702">hpzb51gd (702)</option>
|
||||
<option value="703">hpzc51gd (703)</option>
|
||||
<option value="704">hpzf51gd (704)</option>
|
||||
<option value="705">hpzw51gd (705)</option>
|
||||
<option value="706">hpzx51gd (706)</option>
|
||||
<option value="707">hpzy51gd (707)</option>
|
||||
<option value="708">hpzz51gd (708)</option>
|
||||
<option value="709">nic002pr (709)</option>
|
||||
<option value="710">nic003pr (710)</option>
|
||||
<option value="711">nic004pr (711)</option>
|
||||
<option value="712">pps025ni (712)</option>
|
||||
<option value="713">pps026ni (713)</option>
|
||||
<option value="714">pps027ni (714)</option>
|
||||
<option value="715">ppz001pe (715)</option>
|
||||
<option value="716">ppz006pa (716)</option>
|
||||
<option value="717">ppz007pa (717)</option>
|
||||
<option value="718">ppz010pa (718)</option>
|
||||
<option value="719">ppz011pa (719)</option>
|
||||
<option value="720">ppz013pa (720)</option>
|
||||
<option value="721">ppz014pe (721)</option>
|
||||
<option value="722">ppz015pe (722)</option>
|
||||
<option value="723">ppz016pe (723)</option>
|
||||
<option value="724">pgs050nu (724)</option>
|
||||
<option value="725">pgs051nu (725)</option>
|
||||
<option value="726">pgs052nu (726)</option>
|
||||
<option value="727">ppz031ma (727)</option>
|
||||
<option value="728">ppz035pa (728)</option>
|
||||
<option value="729">ppz036pa (729)</option>
|
||||
<option value="730">ppz037ma (730)</option>
|
||||
<option value="731">ppz038ma (731)</option>
|
||||
<option value="732">ppz054ma (732)</option>
|
||||
<option value="733">ppz055ma (733)</option>
|
||||
<option value="734">ppz056ma (734)</option>
|
||||
<option value="735">ppz059ma (735)</option>
|
||||
<option value="736">ppz060ma (736)</option>
|
||||
<option value="737">ppz061ma (737)</option>
|
||||
<option value="738">ppz064ma (738)</option>
|
||||
<option value="739">prt072sl (739)</option>
|
||||
<option value="740">prt073sl (740)</option>
|
||||
<option value="741">prt074sl (741)</option>
|
||||
<option value="742">pho104re (742)</option>
|
||||
<option value="743">pho105re (743)</option>
|
||||
<option value="744">pho106re (744)</option>
|
||||
<option value="745">ppz075pa (745)</option>
|
||||
<option value="746">ppz082pa (746)</option>
|
||||
<option value="747">ppz084pa (747)</option>
|
||||
<option value="748">ppz088ma (748)</option>
|
||||
<option value="749">ppz089ma (749)</option>
|
||||
<option value="750">ppz090ma (750)</option>
|
||||
<option value="751">ppz093pe (751)</option>
|
||||
<option value="752">ppz094pe (752)</option>
|
||||
<option value="753">ppz095pe (753)</option>
|
||||
<option value="754">prp101pr (754)</option>
|
||||
<option value="755">pja126br (755)</option>
|
||||
<option value="756">pja127br (756)</option>
|
||||
<option value="757">pja129br (757)</option>
|
||||
<option value="758">pja130br (758)</option>
|
||||
<option value="759">pja131br (759)</option>
|
||||
<option value="760">pja132br (760)</option>
|
||||
<option value="761">ppz107ma (761)</option>
|
||||
<option value="762">ppz114pa (762)</option>
|
||||
<option value="763">ppz117ma (763)</option>
|
||||
<option value="764">ppz118ma (764)</option>
|
||||
<option value="765">ppz119ma (765)</option>
|
||||
<option value="766">ppz120pa (766)</option>
|
||||
<option value="767">wgs083nu (767)</option>
|
||||
<option value="768">wgs085nu (768)</option>
|
||||
<option value="769">wgs086nu (769)</option>
|
||||
<option value="770">wgs087nu (770)</option>
|
||||
<option value="771">wgs088nu (771)</option>
|
||||
<option value="772">wgs089nu (772)</option>
|
||||
<option value="773">wgs090nu (773)</option>
|
||||
<option value="774">wgs091nu (774)</option>
|
||||
<option value="775">wgs092nu (775)</option>
|
||||
<option value="776">wgs093nu (776)</option>
|
||||
<option value="777">wgs094nu (777)</option>
|
||||
<option value="778">wgs095nu (778)</option>
|
||||
<option value="779">wgs096nu (779)</option>
|
||||
<option value="780">wgs097nu (780)</option>
|
||||
<option value="781">wgs098nu (781)</option>
|
||||
<option value="782">wgs099nu (782)</option>
|
||||
<option value="783">wgs100nu (783)</option>
|
||||
<option value="784">wgs101nu (784)</option>
|
||||
<option value="785">wgs102nu (785)</option>
|
||||
<option value="786">wgs103nu (786)</option>
|
||||
<option value="787">wrt060bm (787)</option>
|
||||
<option value="788">wrt074sl (788)</option>
|
||||
<option value="789">wrt075rh (789)</option>
|
||||
<option value="790">wrt076df (790)</option>
|
||||
<option value="791">wrt078ni (791)</option>
|
||||
<option value="792">wrt079bm (792)</option>
|
||||
<option value="793">npz001bd (793)</option>
|
||||
<option value="794">npz002bd (794)</option>
|
||||
<option value="795">npz003bd (795)</option>
|
||||
<option value="796">npz004bd (796)</option>
|
||||
<option value="797">npz005bd (797)</option>
|
||||
<option value="798">npz006bd (798)</option>
|
||||
<option value="799">npz007bd (799)</option>
|
||||
</optgroup>
|
||||
<optgroup label="800-868">
|
||||
<option value="800">nca001ca (800)</option>
|
||||
<option value="801">nca002sk (801)</option>
|
||||
<option value="802">nca003gh (802)</option>
|
||||
<option value="803">nla001ha (803)</option>
|
||||
<option value="804">nla002sd (804)</option>
|
||||
<option value="805">npa001ns (805)</option>
|
||||
<option value="806">npa002ns (806)</option>
|
||||
<option value="807">npa003ns (807)</option>
|
||||
<option value="808">npa004ns (808)</option>
|
||||
<option value="809">npa005dl (809)</option>
|
||||
<option value="810">npa007dl (810)</option>
|
||||
<option value="811">npa009dl (811)</option>
|
||||
<option value="812">npa010db (812)</option>
|
||||
<option value="813">npa012db (813)</option>
|
||||
<option value="814">npa014db (814)</option>
|
||||
<option value="815">npa015ca (815)</option>
|
||||
<option value="816">npa017ca (816)</option>
|
||||
<option value="817">npa019ca (817)</option>
|
||||
<option value="818">npa020p1 (818)</option>
|
||||
<option value="819">npa022p1 (819)</option>
|
||||
<option value="820">npa024p1 (820)</option>
|
||||
<option value="821">npa025sh (821)</option>
|
||||
<option value="822">npa027sh (822)</option>
|
||||
<option value="823">npa029sh (823)</option>
|
||||
<option value="824">npa030fl (824)</option>
|
||||
<option value="825">npa031fl (825)</option>
|
||||
<option value="826">npa032fl (826)</option>
|
||||
<option value="827">npa034bh (827)</option>
|
||||
<option value="828">npa035bh (828)</option>
|
||||
<option value="829">npa036bh (829)</option>
|
||||
<option value="830">npa038pn (830)</option>
|
||||
<option value="831">npa039pn (831)</option>
|
||||
<option value="832">npa040pn (832)</option>
|
||||
<option value="833">npa042pm (833)</option>
|
||||
<option value="834">npa043pm (834)</option>
|
||||
<option value="835">npa044pm (835)</option>
|
||||
<option value="836">npa046sr (836)</option>
|
||||
<option value="837">npa047sr (837)</option>
|
||||
<option value="838">npa048sr (838)</option>
|
||||
<option value="839">npa050ba (839)</option>
|
||||
<option value="840">npa051ba (840)</option>
|
||||
<option value="841">npa052ba (841)</option>
|
||||
<option value="842">npa054po (842)</option>
|
||||
<option value="843">npa055po (843)</option>
|
||||
<option value="844">npa056po (844)</option>
|
||||
<option value="845">npa058r1 (845)</option>
|
||||
<option value="846">npa059r1 (846)</option>
|
||||
<option value="847">npa060r1 (847)</option>
|
||||
<option value="848">npa061r3 (848)</option>
|
||||
<option value="849">npa062r2 (849)</option>
|
||||
<option value="850">npa062r3 (850)</option>
|
||||
<option value="851">npa063r2 (851)</option>
|
||||
<option value="852">npa063r3 (852)</option>
|
||||
<option value="853">npa065r2 (853)</option>
|
||||
<option value="854">nja001pr (854)</option>
|
||||
<option value="855">nja002pr (855)</option>
|
||||
<option value="856">sjs007in (856)</option>
|
||||
<option value="857">sns005in (857)</option>
|
||||
<option value="858">sns006in (858)</option>
|
||||
<option value="859">sns008in (859)</option>
|
||||
<option value="860">sjs012in (860)</option>
|
||||
<option value="861">sjs013in (861)</option>
|
||||
<option value="862">sjs014in (862)</option>
|
||||
<option value="863">sjs015in (863)</option>
|
||||
<option value="864">srt001in (864)</option>
|
||||
<option value="865">srt002in (865)</option>
|
||||
<option value="866">srt003in (866)</option>
|
||||
<option value="867">srt004in (867)</option>
|
||||
<option value="868">nrtflag0 (868)</option>
|
||||
</optgroup>
|
||||
</select>
|
||||
<button id="debug-play-animation" class="requires-debug">Play Animation</button>
|
||||
</div>
|
||||
</div>
|
||||
214
debug.js
Normal file
214
debug.js
Normal file
@ -0,0 +1,214 @@
|
||||
(async function() {
|
||||
const debugUI = document.getElementById('debug-ui');
|
||||
const canvas = document.getElementById('canvas');
|
||||
|
||||
// Fetch and inject debug panel HTML
|
||||
try {
|
||||
const response = await fetch('debug.html');
|
||||
const html = await response.text();
|
||||
debugUI.innerHTML = html;
|
||||
} catch (error) {
|
||||
console.error('Failed to load debug panel:', error);
|
||||
return;
|
||||
}
|
||||
|
||||
// Now get references to elements after they've been injected
|
||||
const debugToggle = document.getElementById('debug-toggle');
|
||||
const debugPanel = document.getElementById('debug-panel');
|
||||
const debugPasswordBtn = document.querySelector('.debug-password');
|
||||
const requiresDebugBtns = document.querySelectorAll('.requires-debug');
|
||||
|
||||
let debugModeActive = false;
|
||||
|
||||
// Key code mapping for special keys
|
||||
const keyCodeMap = {
|
||||
'Pause': { key: 'Pause', code: 'Pause', keyCode: 19 },
|
||||
'Escape': { key: 'Escape', code: 'Escape', keyCode: 27 },
|
||||
' ': { key: ' ', code: 'Space', keyCode: 32 },
|
||||
'Tab': { key: 'Tab', code: 'Tab', keyCode: 9 },
|
||||
'F11': { key: 'F11', code: 'F11', keyCode: 122 },
|
||||
'F12': { key: 'F12', code: 'F12', keyCode: 123 },
|
||||
'+': { key: '+', code: 'NumpadAdd', keyCode: 107 },
|
||||
'-kp': { key: '-', code: 'NumpadSubtract', keyCode: 109 },
|
||||
'*': { key: '*', code: 'NumpadMultiply', keyCode: 106 },
|
||||
'/': { key: '/', code: 'NumpadDivide', keyCode: 111 },
|
||||
// Digit keys
|
||||
'0': { key: '0', code: 'Digit0', keyCode: 48 },
|
||||
'1': { key: '1', code: 'Digit1', keyCode: 49 },
|
||||
'2': { key: '2', code: 'Digit2', keyCode: 50 },
|
||||
'3': { key: '3', code: 'Digit3', keyCode: 51 },
|
||||
'4': { key: '4', code: 'Digit4', keyCode: 52 },
|
||||
'5': { key: '5', code: 'Digit5', keyCode: 53 },
|
||||
'6': { key: '6', code: 'Digit6', keyCode: 54 },
|
||||
'7': { key: '7', code: 'Digit7', keyCode: 55 },
|
||||
'8': { key: '8', code: 'Digit8', keyCode: 56 },
|
||||
'9': { key: '9', code: 'Digit9', keyCode: 57 },
|
||||
};
|
||||
|
||||
// Toggle debug panel
|
||||
debugToggle.addEventListener('click', function(e) {
|
||||
e.stopPropagation();
|
||||
debugPanel.classList.toggle('open');
|
||||
debugToggle.classList.toggle('active');
|
||||
});
|
||||
|
||||
// Dispatch a keyboard event to the canvas
|
||||
function sendKey(key) {
|
||||
let keyInfo = keyCodeMap[key];
|
||||
|
||||
if (!keyInfo) {
|
||||
// Regular character key (letters)
|
||||
const char = key.toLowerCase();
|
||||
const charCode = char.charCodeAt(0);
|
||||
keyInfo = {
|
||||
key: char,
|
||||
code: 'Key' + char.toUpperCase(),
|
||||
keyCode: charCode >= 97 && charCode <= 122 ? charCode - 32 : charCode
|
||||
};
|
||||
}
|
||||
|
||||
const eventInit = {
|
||||
key: keyInfo.key,
|
||||
code: keyInfo.code,
|
||||
keyCode: keyInfo.keyCode,
|
||||
which: keyInfo.keyCode,
|
||||
bubbles: true,
|
||||
cancelable: true
|
||||
};
|
||||
|
||||
canvas.dispatchEvent(new KeyboardEvent('keydown', eventInit));
|
||||
canvas.dispatchEvent(new KeyboardEvent('keyup', eventInit));
|
||||
}
|
||||
|
||||
// Send a sequence of keys with delay (longer delay for multi-stage commands)
|
||||
function sendKeySequence(keys, delay = 100) {
|
||||
let index = 0;
|
||||
function sendNext() {
|
||||
if (index < keys.length) {
|
||||
sendKey(keys[index]);
|
||||
index++;
|
||||
setTimeout(sendNext, delay);
|
||||
} else {
|
||||
canvas.focus();
|
||||
}
|
||||
}
|
||||
sendNext();
|
||||
}
|
||||
|
||||
// Update button states based on debug mode
|
||||
function updateDebugModeUI() {
|
||||
if (debugModeActive) {
|
||||
debugPasswordBtn.classList.add('active');
|
||||
debugPasswordBtn.textContent = 'Debug Mode Active';
|
||||
requiresDebugBtns.forEach(btn => btn.classList.add('enabled'));
|
||||
} else {
|
||||
debugPasswordBtn.classList.remove('active');
|
||||
debugPasswordBtn.textContent = 'Enter Debug Mode';
|
||||
requiresDebugBtns.forEach(btn => btn.classList.remove('enabled'));
|
||||
}
|
||||
}
|
||||
|
||||
// Handle button clicks
|
||||
debugPanel.addEventListener('click', function(e) {
|
||||
const btn = e.target.closest('button');
|
||||
if (!btn || btn === debugToggle) return;
|
||||
|
||||
const keys = btn.dataset.keys;
|
||||
if (!keys) return;
|
||||
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
// Handle special cases
|
||||
if (keys === 'ogel') {
|
||||
// Enter debug password
|
||||
sendKeySequence(['o', 'g', 'e', 'l']);
|
||||
debugModeActive = true;
|
||||
updateDebugModeUI();
|
||||
return;
|
||||
}
|
||||
|
||||
// For requires-debug buttons, ensure debug mode is active
|
||||
if (btn.classList.contains('requires-debug') && !debugModeActive) {
|
||||
// Auto-enter debug mode first
|
||||
sendKeySequence(['o', 'g', 'e', 'l']);
|
||||
debugModeActive = true;
|
||||
updateDebugModeUI();
|
||||
// Then send the actual keys after a delay
|
||||
setTimeout(() => {
|
||||
sendKeySequence(keys.split(''));
|
||||
}, 500);
|
||||
return;
|
||||
}
|
||||
|
||||
// Handle multi-key sequences (like 'g1' for act switch or 'c00' for locations)
|
||||
if (keys.length > 1 && !keyCodeMap[keys]) {
|
||||
sendKeySequence(keys.split(''));
|
||||
} else {
|
||||
sendKey(keys);
|
||||
canvas.focus();
|
||||
}
|
||||
});
|
||||
|
||||
// Handle location teleport
|
||||
const locationSelect = document.getElementById('debug-location-select');
|
||||
const gotoLocationBtn = document.getElementById('debug-goto-location');
|
||||
|
||||
gotoLocationBtn.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
const locationValue = locationSelect.value;
|
||||
if (!locationValue) return;
|
||||
|
||||
// Ensure debug mode is active
|
||||
if (!debugModeActive) {
|
||||
sendKeySequence(['o', 'g', 'e', 'l']);
|
||||
debugModeActive = true;
|
||||
updateDebugModeUI();
|
||||
// Then send location keys after a delay
|
||||
setTimeout(() => {
|
||||
sendKeySequence(locationValue.split(''));
|
||||
}, 500);
|
||||
return;
|
||||
}
|
||||
|
||||
sendKeySequence(locationValue.split(''));
|
||||
});
|
||||
|
||||
// Handle animation playback
|
||||
const animationSelect = document.getElementById('debug-animation-select');
|
||||
const playAnimationBtn = document.getElementById('debug-play-animation');
|
||||
|
||||
playAnimationBtn.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
const animationId = animationSelect.value;
|
||||
if (!animationId) return;
|
||||
|
||||
// Ensure debug mode is active
|
||||
if (!debugModeActive) {
|
||||
sendKeySequence(['o', 'g', 'e', 'l']);
|
||||
debugModeActive = true;
|
||||
updateDebugModeUI();
|
||||
// Then send animation keys after a delay
|
||||
setTimeout(() => {
|
||||
playAnimation(animationId);
|
||||
}, 500);
|
||||
return;
|
||||
}
|
||||
|
||||
playAnimation(animationId);
|
||||
});
|
||||
|
||||
function playAnimation(animationId) {
|
||||
// Animation command: 'v' + 3 digits (padded with leading zeros)
|
||||
const paddedId = animationId.toString().padStart(3, '0');
|
||||
const keys = ['v', ...paddedId.split('')];
|
||||
sendKeySequence(keys);
|
||||
}
|
||||
|
||||
// Initialize UI
|
||||
updateDebugModeUI();
|
||||
})();
|
||||
11
index.html
11
index.html
@ -155,6 +155,12 @@
|
||||
|
||||
<div class="changelog-section">
|
||||
<h2>Changelog</h2>
|
||||
<details>
|
||||
<summary>January 2026</summary>
|
||||
<ul>
|
||||
<li><strong>New:</strong> Debug menu for developers and power users. Tap the LEGO Island logo 5 times to unlock OGEL mode and access debug features like teleporting to locations, switching acts, and playing animations</li>
|
||||
</ul>
|
||||
</details>
|
||||
<details>
|
||||
<summary>December 2025</summary>
|
||||
<ul>
|
||||
@ -727,7 +733,7 @@
|
||||
</div>
|
||||
|
||||
<div class="app-footer">
|
||||
<p>Last updated: <span id="app-version">2025-12-31 21:31:41 UTC</span></p>
|
||||
<p>Last updated: <span id="app-version">2026-01-01 16:29:53 UTC</span></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -751,6 +757,9 @@
|
||||
<canvas id="canvas" oncontextmenu="event.preventDefault()" tabindex="-1"></canvas>
|
||||
</div>
|
||||
|
||||
<!-- Debug UI Panel (content loaded from debug.html when enabled) -->
|
||||
<div id="debug-ui"></div>
|
||||
|
||||
<script src="app.js" defer></script>
|
||||
<script src="isle.js" defer></script>
|
||||
</body>
|
||||
|
||||
227
style.css
227
style.css
@ -909,4 +909,231 @@ select {
|
||||
grid-template-columns: 1fr;
|
||||
gap: 25px;
|
||||
}
|
||||
}
|
||||
|
||||
/* Debug UI Panel */
|
||||
#debug-ui {
|
||||
display: none;
|
||||
position: fixed;
|
||||
top: 10px;
|
||||
right: 10px;
|
||||
z-index: 1000;
|
||||
font-family: Arial, sans-serif;
|
||||
}
|
||||
|
||||
#debug-toggle {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
border-radius: 50%;
|
||||
background-color: rgba(0, 0, 0, 0.7);
|
||||
border: 2px solid #FFD700;
|
||||
color: #FFD700;
|
||||
font-size: 20px;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
transition: all 0.2s ease;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
#debug-toggle:hover {
|
||||
background-color: rgba(255, 215, 0, 0.2);
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
|
||||
#debug-toggle.active {
|
||||
background-color: #FFD700;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
#debug-panel {
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 50px;
|
||||
right: 0;
|
||||
width: 280px;
|
||||
max-height: calc(100dvh - 70px);
|
||||
overflow-y: auto;
|
||||
background-color: rgba(24, 24, 24, 0.95);
|
||||
border: 1px solid #444;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
#debug-panel.open {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.debug-header {
|
||||
padding: 12px 15px;
|
||||
background-color: #FFD700;
|
||||
color: #000;
|
||||
font-weight: bold;
|
||||
font-size: 14px;
|
||||
border-radius: 7px 7px 0 0;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.debug-section {
|
||||
padding: 10px 12px;
|
||||
border-bottom: 1px solid #333;
|
||||
}
|
||||
|
||||
.debug-section:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.debug-section-title {
|
||||
color: #FFD700;
|
||||
font-size: 11px;
|
||||
font-weight: bold;
|
||||
text-transform: uppercase;
|
||||
margin-bottom: 8px;
|
||||
letter-spacing: 0.5px;
|
||||
}
|
||||
|
||||
#debug-panel button {
|
||||
display: block;
|
||||
width: 100%;
|
||||
padding: 8px 10px;
|
||||
margin-bottom: 4px;
|
||||
background-color: #2a2a2a;
|
||||
border: 1px solid #444;
|
||||
border-radius: 4px;
|
||||
color: #e0e0e0;
|
||||
font-size: 12px;
|
||||
cursor: pointer;
|
||||
text-align: left;
|
||||
transition: all 0.15s ease;
|
||||
}
|
||||
|
||||
#debug-panel button:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
#debug-panel button:hover {
|
||||
background-color: #3a3a3a;
|
||||
border-color: #FFD700;
|
||||
}
|
||||
|
||||
#debug-panel button:active {
|
||||
background-color: #FFD700;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
#debug-panel button.debug-password {
|
||||
background-color: #3d2a00;
|
||||
border-color: #FFD700;
|
||||
color: #FFD700;
|
||||
}
|
||||
|
||||
#debug-panel button.debug-password:hover {
|
||||
background-color: #FFD700;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
#debug-panel button.debug-password.active {
|
||||
background-color: #00aa00;
|
||||
border-color: #00ff00;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
#debug-panel button.requires-debug {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
#debug-panel button.requires-debug.enabled {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.debug-location-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(5, 1fr);
|
||||
gap: 4px;
|
||||
}
|
||||
|
||||
.debug-location-grid button {
|
||||
text-align: center;
|
||||
padding: 6px 4px;
|
||||
font-size: 11px;
|
||||
font-family: 'Consolas', 'Menlo', monospace;
|
||||
}
|
||||
|
||||
/* Scrollbar styling for debug panel */
|
||||
#debug-panel::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
}
|
||||
|
||||
#debug-panel::-webkit-scrollbar-track {
|
||||
background: #1a1a1a;
|
||||
}
|
||||
|
||||
#debug-panel::-webkit-scrollbar-thumb {
|
||||
background: #555;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
#debug-panel::-webkit-scrollbar-thumb:hover {
|
||||
background: #FFD700;
|
||||
}
|
||||
|
||||
#debug-animation-select,
|
||||
#debug-location-select {
|
||||
width: 100%;
|
||||
padding: 8px 10px;
|
||||
margin-bottom: 8px;
|
||||
background-color: #2a2a2a;
|
||||
border: 1px solid #444;
|
||||
border-radius: 4px;
|
||||
color: #e0e0e0;
|
||||
font-size: 12px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#debug-animation-select:hover,
|
||||
#debug-location-select:hover {
|
||||
border-color: #FFD700;
|
||||
}
|
||||
|
||||
#debug-animation-select:focus,
|
||||
#debug-location-select:focus {
|
||||
outline: none;
|
||||
border-color: #FFD700;
|
||||
}
|
||||
|
||||
#debug-animation-select optgroup,
|
||||
#debug-location-select optgroup {
|
||||
background-color: #1a1a1a;
|
||||
color: #FFD700;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#debug-animation-select option,
|
||||
#debug-location-select option {
|
||||
background-color: #2a2a2a;
|
||||
color: #e0e0e0;
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
/* Pizza celebration animation for OGEL mode */
|
||||
.pizza-slice {
|
||||
position: fixed;
|
||||
font-size: 32px;
|
||||
pointer-events: none;
|
||||
z-index: 10000;
|
||||
animation: pizza-fly 1.5s ease-out forwards;
|
||||
}
|
||||
|
||||
@keyframes pizza-fly {
|
||||
0% {
|
||||
opacity: 1;
|
||||
transform: translate(0, 0) rotate(0deg) scale(1);
|
||||
}
|
||||
100% {
|
||||
opacity: 0;
|
||||
transform: translate(var(--tx), var(--ty)) rotate(var(--rot)) scale(0.5);
|
||||
}
|
||||
}
|
||||
2
sw.js
2
sw.js
@ -10,7 +10,7 @@ const { Strategy } = workbox.strategies;
|
||||
const { CacheableResponsePlugin } = workbox.cacheableResponse;
|
||||
const { RangeRequestsPlugin } = workbox.rangeRequests;
|
||||
|
||||
precacheAndRoute([{"revision":"1941a2dd1683d34e6503354fa9002d99","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":"92952ef8f080c355aec499e669214840","url":"isle.js"},{"revision":"4fb9dbeadeb5781c3a069b5acb1d5f45","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":"b21ea085712e7a731dd721578b46186b","url":"app.js"},{"revision":"2898f0ebd4847281c7020d48f43812d9","url":"style.css"},{"revision":"060210979e13e305510de6285e085db1","url":"manifest.json"},{"revision":"4f0172bc7007d34cebf681cc233ab57f","url":"install.webp"},{"revision":"6a70d35dadf51d2ec6e38a6202d7fb0b","url":"install.mp3"},{"revision":"eac041a0b8835bfea706d997b0b7b224","url":"downloader.js"}]);
|
||||
precacheAndRoute([{"revision":"413569e7f8f884133ea6c1d2c9a9cb99","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":"b4754844f694858c2c08307a197c5434","url":"isle.js"},{"revision":"e66ee40529da22100b5f3d55d9aa1850","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":"bc17c7c6ecae6a5258cf2d0d89962e7e","url":"app.js"},{"revision":"ceeab6ec27aba25418c3ded77ebd4517","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"}]);
|
||||
|
||||
const gameFiles = [
|
||||
"/LEGO/Scripts/CREDITS.SI", "/LEGO/Scripts/INTRO.SI", "/LEGO/Scripts/NOCD.SI", "/LEGO/Scripts/SNDANIM.SI",
|
||||
|
||||
@ -7,7 +7,7 @@ module.exports = {
|
||||
'island.webp', 'isle.js', 'isle.wasm', 'poster.pdf', 'read_me_off.webp',
|
||||
'read_me_on.webp', 'run_game_off.webp', 'run_game_on.webp', 'shark.webp',
|
||||
'uninstall_off.webp', 'uninstall_on.webp', 'app.js', 'style.css', 'manifest.json',
|
||||
'install.webp', 'install.mp3', 'downloader.js'
|
||||
'install.webp', 'install.mp3', 'downloader.js', 'debug.js', 'debug.html', 'ogel.webp'
|
||||
],
|
||||
swSrc: 'src/sw.js',
|
||||
swDest: 'sw.js',
|
||||
|
||||
Loading…
Reference in New Issue
Block a user