Escaping from Ordiman

um MUD retro, sombrio e demorado — desperte no metal.
arquivo: index.html • local
/* ====== EXPANSÃO AUTOMÁTICA DO MUNDO ====== Comando: expandworld Permite criar novas salas, itens, enigmas e NPCs automaticamente. */ function expandWorld() { const baseId = Math.max(...Object.keys(WORLD).map(Number)) + 1; const newRooms = { [baseId]:{ title:'Estação de Ventilação', x: 9, y: 6, exits:{w:30}, desc:`Um corredor estreito com hélices antigas girando lentamente. O ar vibra.`, }, [baseId+1]:{ title:'Arco das Vozes Perdidas', x: 9, y: 7, exits:{n:baseId}, desc:`Um arco feito de placas metálicas dobradas. Sussurros passam pelas fendas.`, puzzle:'vozes-perdidas' }, [baseId+2]:{ title:'Sala da Geometria Quebrada', x: 10, y: 7, exits:{w:baseId+1}, desc:`Linhas no chão formam ângulos impossíveis. A sala parece mudar enquanto você olha.`, item:'prisma-quebrado' }, [baseId+3]:{ title:'Oficina dos Autômatos', x: 10, y: 6, exits:{s:baseId+2}, desc:`Autômatos desmontados, engrenagens flutuando como se estivessem vivas.`, npc:'tecnico' } }; /* adiciona novas salas */ Object.assign(WORLD, newRooms); /* adiciona novo item */ ITEMS['prisma-quebrado'] = { name:'prisma quebrado', desc:'Fragmento triangular que refrata a luz em padrões incomuns.' }; ROOM_ITEMS[baseId+2] = ['prisma-quebrado']; /* adiciona novo NPC */ NPC['tecnico'] = { name:'Técnico Enferrujado', loc: baseId+3, intro:'"As máquinas falharam… mas você talvez não falhe."', lines:[ '"Eu posso ajustar seu caminho… se você ajustar o meu."', '"Tudo aqui era perfeito antes do núcleo rachar."' ] }; /* adiciona novo puzzle */ PUZZLES['vozes-perdidas'] = { room: baseId+1, type:'riddle', question:'"Falo sem boca, ouço sem ouvido, existo no silêncio absoluto. O que sou?"', answer:'pensamento', solved:false, onSolve:()=>{ print('\nO arco brilha — uma passagem se abre ao leste!'); unlockExit(baseId+1,'e',baseId+2); } }; print(`\n📦 O mundo foi expandido! Novas áreas adicionadas: - ${newRooms[baseId].title} - ${newRooms[baseId+1].title} - ${newRooms[baseId+2].title} - ${newRooms[baseId+3].title}`); } /* adiciona comando ao parser */ const oldPerform = performCommand; performCommand = function(raw){ const t = raw.trim().toLowerCase(); if(t === 'expandworld'){ print('\nExpandindo o mundo...'); expandWorld(); return; } oldPerform(raw); };