Dev console: money, items, upgrades, free build, speed (t66)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-27 14:30:37 -04:00
co-authored by Claude Opus 5.5
parent 02e338a46f
commit dd8068dfe6
19 changed files with 400 additions and 23 deletions
+42
View File
@@ -0,0 +1,42 @@
// Bottom panel; command dispatch and state live in sim/devconsole.js.
function closeDevConsole() {
$('dev-console').hidden = true;
$('dev-input').blur();
}
function showDevConsole() {
$('dev-console').hidden = false;
if (!$('dev-output').children.length) devPrint(['Type help to list commands. Backtick or Escape closes this panel.']);
$('dev-input').focus();
}
function toggleDevConsole() {
if (!GAME.running || GAME.loading) return;
if (!$('dev-console').hidden) { closeDevConsole(); return; }
if (devWorld) { showDevConsole(); return; }
dialog('Enable dev console?', '<p>This save will be permanently marked as a dev-console world. If achievements are added later, they will not unlock in this world.</p><p>You can change money, materials, upgrades and game speed. These commands are logged but cannot be undone.</p>', [
{ label: 'Cancel' },
{ label: 'Enable dev console', cls: 'primary', fn: () => {
enableDevConsole(); closeModal('m-dialog'); showDevConsole(); saveWorld('main'); return true;
} },
]);
}
function devPrint(lines) {
const log = $('dev-output');
for (const line of lines) { const row = document.createElement('div'); row.textContent = line; log.appendChild(row); }
while (log.children.length > 400) log.firstChild.remove();
log.scrollTop = log.scrollHeight;
}
function runDevCommand(text) {
devPrint(devCommand(text, GAME.aim));
hudDirty = true; lastBagKey = ''; lastBuildKey = '';
renderWallet();
if (!$('m-notebook').hidden) renderNotebook();
}
$('dev-close').onclick = closeDevConsole;
$('dev-input').onfocus = () => { keys.clear(); GAME.lmb = GAME.rmb = false; GAME.drag = null; GAME.replace = false; };
$('dev-input').onkeydown = e => {
if (e.key === 'Escape' || e.key === '`') { e.preventDefault(); e.stopPropagation(); closeDevConsole(); }
};
$('dev-form').onsubmit = e => {
e.preventDefault();
const input = $('dev-input'); runDevCommand(input.value); input.value = ''; input.focus();
};