Un RPG ASCII para terminal donde exploras una ciudad, recorres la pradera y escribes las reglas que usa tu personaje al combatir.
Versión actual: 0.2.0 — Reinos y exploración
El mundo corre sobre Bare, se dibuja con bare-tui y mantiene todo el arte dentro de una grilla ASCII estable. El personaje, los NPC y los monstruos se mueven sin borrar el terreno ni romper las líneas de la consola.
- El mundo ahora une los reinos rivales de RUNA y NOX mediante portones completos en los extremos de la pradera; el reino natal se elige al crear el personaje.
- NOX fue reconstruido desde cero como una capital exterior de
320x200, con la misma modalidad urbana de RUNA: avenidas, manzanas, plaza, jardines y edificios orientados hacia la calle. - La nueva cripta tiene tres niveles consecutivos, escaleras ASCII, slimes, cuatro clases de esqueletos y un Rey Esqueleto final.
- El Coloso Rúnico fue reubicado en un mapa independiente de ruinas volcánicas, lava y puentes, al que se entra por un portal monumental del yermo.
- El inventario incorpora mano izquierda, mano derecha, pecho, casco y botas. Armas, escudo y armaduras pueden equiparse simultáneamente y guardarse en el cofre del hogar.
- La plaza suma estatua con rankings de nivel y PvP, caballero de misiones, fuente animada y controles desplegables.
- El combate conserva el arma elegida —lanza, arco, ballesta, daga o martillo— y la ficha muestra coordenadas
X/Ypara ubicar cualquier punto del mundo.
- Ciudad de
320x200caracteres con barrios, iglesia, taberna, herrería, armería y un castillo explorable. - Dos reinos rivales, RUNA y NOX, con elección de origen y portones monumentales en extremos opuestos de la pradera.
- Salón del trono con rey, mobiliario real y una escalera propia hacia las ruinas.
- Portón funcional que transporta al jugador a la pradera.
- Pradera de
260x72con tres asentamientos bárbaros, una cripta de tres niveles, escalinatas ASCII monumentales y un portal al world boss. - Arena volcánica independiente con lava, ruinas y el Coloso Rúnico.
- NPC con arte y oficios diferenciados.
- Monstruos que patrullan el mapa sin detener el movimiento del mundo.
- Combate sobre la propia pradera, sin cambiar a una pantalla separada.
- Nueva partida con nombre personalizado e inicial visible en el pecho del héroe.
- Tres ranuras persistentes con carga y autoguardado de progreso.
- Botón permanente
[I INVENTARIO], depósito en el hogar y cinco ranuras de equipo independientes. - Botón
[? CONTROLES]y ayuda desplegable disponible desde el menú o la partida. - Estrategias de combate escritas en
script.txty recargadas mientras juegas. - Presencia opcional entre jugadores mediante Hyperswarm.
- Estatua de los héroes en la plaza con rankings por nivel y resultados PvP.
- Caballero de misiones en la plaza con objetivos persistentes y recompensas.
El menú principal separa claramente Continuar, Nueva partida, Cargar partida y Salir. Continuar abre la partida más reciente; Nueva partida usa la primera ranura vacía y Cargar partida abre el selector de tres ranuras. Si las tres están ocupadas, N permite elegir cuál reemplazar y la pantalla de nombre avisa qué personaje será sustituido.
La creación permite elegir con izquierda/derecha si el personaje nace en RUNA o en el reino enemigo de NOX. Cada origen tiene su propio punto de inicio y templo de reaparición. La frontera oriental de RUNA conecta con la frontera occidental de NOX, y se puede cruzar caminando en ambos sentidos.
NOX fue rehecho desde cero como una capital exterior de 320x200, igualando la modalidad del reino original sin copiar su decoración. Una avenida central, tres calles transversales y callejones laterales conectan el Palacio del Eclipse, el paseo lunar, el mercado nocturno, la plaza del eclipse, dos jardines y seis edificios de servicio. Las fachadas de 31x21 a 45x24 tienen la misma escala urbana legible de RUNA; el palacio de 96x42 domina el norte sin convertirse en un mapa interior. Santuario, hogar, posada, alquimia, forja y armería conservan puertas funcionales y arte oscuro propio. Seis habitantes explican la cultura y servicios del reino. Las decisiones visuales y sus fuentes de inspiración están documentadas.
El juego autoguarda después de cada acción y al salir. Conserva nombre, reino natal, nivel, vida, oro, experiencia, pociones, inventario, equipo, depósito del hogar y posición en la ciudad, NOX, el castillo, las ruinas, la pradera, la cripta o la arena volcánica. También conserva el progreso de la mazmorra y la vida del world boss. La ranura activa aparece en el pie de la pantalla como autoguardado R1, R2 o R3.
La primera letra alfanumérica se convierte en el emblema del pecho. Por ejemplo, Ayla aparece como A:
El personaje comienza sin armas ni escudo. Su dibujo cambia únicamente cuando equipa un objeto real:
sin equipo espada espada + escudo
O / O / O
/A\ /|A\ /|A\ [#]
/ \ / \ / \
RUNA usa una cámara desplazable sobre una capital de 320x200, pero sus edificios civiles tienen ahora una escala media de calle: entre 31x21 y 45x24 celdas. El castillo conserva la silueta dominante sin cubrir el distrito completo. La avenida de la corona une castillo, mercado del alba, plaza de los héroes y gran portón; calles transversales y callejones conectan iglesia, hogar, taberna, alquimia y barrio de oficios.
Cada fachada mantiene identidad propia sin parecer una fortaleza: campanario y rosetón para la iglesia, entramado y jarra colgante para la taberna, fragua abierta para la herrería y bastidores defensivos para la armería. El suelo caminable se renderiza limpio y solo conserva una textura dispersa —aproximadamente 5% de las celdas— para que edificios, monumentos y NPC no compitan contra un fondo de puntuación continua. Los jardines del alba y de la corona, el pregonero, la panadera, el cartógrafo, la herbolaria, el farolero, el escriba y la aprendiz hacen que RUNA funcione como capital habitada. La investigación y sus decisiones están documentadas en docs/runa-design.md.
Las puertas se activan al pisarlas. El gran portón del sur conecta con la pradera y la puerta principal del castillo abre el salón del trono. Dentro espera el rey Aldren sentado en su trono, rodeado por una tarima real, columnas, estandartes, bancos y braseros. La escalera lateral V baja desde allí a las ruinas.
La pradera ahora mide 260x72 y combina caminos, parcelas, setos, surcos, claros boscosos y zonas de distinta dificultad. Su textura de suelo es deliberadamente tenue y espaciada para que edificios, criaturas y entradas sean fáciles de leer; los caminos conservan el contraste principal. El camino real une los portones de RUNA y NOX y un cruce señalizado abre ramales hacia la cripta y el portal. Eira, guardabosques del camino, explica esas rutas al hablarle con E. Mosquitos, espectros y gólems tienen sprites compactos y se mueven por su cuenta sin invadir puestos, monumentos ni campamentos. El borde oeste contiene el portón completo de RUNA, cuyo paso < vuelve a la ciudad; en la punta opuesta, contra el borde este, el portón oscuro N entra al reino de NOX. Lejos de esa frontera, la entrada X abre una cripta de tres niveles y el portal O lleva a las ruinas volcánicas del Coloso Rúnico.
Tres empalizadas bárbaras aparecen en sectores separados de la pradera. La puerta J abre un mapa interior con casa del caudillo, tiendas, almacenes, corral, forja, fogata y patrullas de saqueadores, lanzadores y un jefe. Se puede abandonar por U, pero el asentamiento permanece si quedan enemigos. Al derrotarlos a todos y salir, se cobra un botín adicional de 45, 70 o 100 monedas y la entrada desaparece permanentemente. La estructura y sus referencias arqueológicas están documentadas.
La ficha muestra siempre la posición actual como X:n Y:n junto al mapa o zona. Las coordenadas cambian con cada paso y distinguen RUNA, NOX, castillo, ruinas, coliseo, pradera, yermo, cada nivel del dungeon y el mapa del world boss. Podés usar esa referencia para señalar un lugar concreto al reportar un problema o pedir un cambio.
La arena del world boss es un mapa independiente de ceniza, edificios destruidos y ríos de lava. La lava bloquea el paso: hay que cruzar por los puentes de piedra y conservar espacio para esquivar los poderes del Coloso. El mismo portal O permite volver al yermo.
Los espacios internos de todos los sprites son transparentes: el pasto y los caminos siguen visibles entre brazos, piernas y equipo.
Sir Cedric espera junto a la estatua de la plaza. Al hablarle con E entrega la misión de eliminar 20 mosquitos. Cada baja real actualiza el contador de la ficha y, al regresar con el objetivo completo, concede 100 de oro y 100 de experiencia. La recompensa solo puede cobrarse una vez y el progreso se conserva en la ranura activa.
El combate empieza cuando la hitbox del jugador toca la de un monstruo. Los dos personajes permanecen visibles sobre el terreno.
Cada pulsación de F, Espacio o una dirección contra el enemigo resuelve un intercambio. El arma elegida en I INVENTARIO permanece en la mano durante el combate: lanza, arco, ballesta, daga y martillo conservan su daño, alcance, velocidad y dibujo propios al golpear. La tecla solamente hace avanzar el turno visible.
El archivo script.txt se vuelve a leer durante el combate:
?hp < 8
use potion
La estrategia inicial no cambia armas por su cuenta. Si querés una estrategia que alterne equipo durante la pelea, podés añadir reglas equip, pero solo se aplican a objetos que el jugador realmente posee; una orden inválida nunca reemplaza el arma equipada desde el inventario.
Inventario y equipo no son lo mismo. Podés llevar simultáneamente un arma en la mano izquierda, un escudo en la derecha, armadura de pecho, casco y botas. Comprar un objeto lo añade a la mochila y lo equipa automáticamente en su ranura sin quitar objetos de las otras cuatro:
| Ranura | Objetos | Efecto |
|---|---|---|
| Mano izquierda | daga, espada, lanza, ballesta, martillo, arco largo | Ataque, alcance y velocidad de golpe |
| Mano derecha | escudo | Defensa sin quitar el arma |
| Pecho | cuero, cota de malla, placas | Defensa y movilidad |
| Casco | capucha de cuero, yelmo de hierro | Defensa de la cabeza |
| Botas | botas | Velocidad de movimiento |
En una tienda:
Entercompra o equipa el objeto seleccionado.Xlo quita sin venderlo ni eliminarlo del inventario.EscoEvuelve a la ciudad.
El escudo solo aparece junto al personaje cuando está equipado y reduce en 2 el daño de cada golpe, con un daño mínimo de 1.
El botón [I INVENTARIO] permanece visible en ciudad, pradera, dungeon y world boss. La tecla I abre una pantalla separada de equipo y mochila: muestra las cinco ranuras activas, ataque, defensa y alcance combinados, marca cada pieza equipada y detalla los atributos del objeto seleccionado. Enter equipa el arma o armadura seleccionada y X la quita. Al interactuar con C, el hogar abre un cofre personal: izquierda/derecha cambia entre mochila y depósito, y Enter deposita o retira. Depositar una pieza equipada la quita de su ranura de forma segura; el objeto y el contenido del cofre persisten en el autoguardado.
La daga y el cuero liviano cuestan 15 de oro cada uno, así que una partida nueva puede probar inmediatamente arma y pecho con sus 30 de oro iniciales. Las piezas posteriores intercambian alcance, daño, defensa y velocidad; no son mejoras lineales.
El botón CONTROLES del menú principal y el botón [? CONTROLES] del pie abren
la misma lista de ayuda. También puede abrirse directamente con ?; Esc, ?
o Enter la cierran y devuelven a la pantalla anterior.
| Contexto | Teclas | Acción |
|---|---|---|
| Menú principal | flechas / W / S |
Elegir una opción |
| Menú principal | Enter / Espacio |
Aceptar la opción |
| Menú principal | N |
Comenzar una partida nueva |
| Ranuras | flechas / W / S |
Elegir una ranura |
| Ranuras | Enter, N, Esc |
Cargar, reemplazar o volver |
| Nombre y reino | escribir, ←/→, Enter, Esc |
Editar, elegir origen o volver |
| Ciudad y pradera | WASD / flechas |
Moverse |
| Mundo | E / Enter / Espacio |
Hablar o interactuar |
| Pradera | E cerca de Eira |
Consultar las rutas del camino real |
| Jugador cercano | E |
Enviar un desafío PvP |
| Estatua central | E |
Abrir rankings de nivel y PvP |
| Rankings | izquierda/derecha / Tab |
Cambiar clasificación |
| Invitación PvP | Enter / N |
Aceptar o rechazar |
| Coliseo PvP | WASD, F, R |
Moverse, atacar o rendirse |
| Ciudad | V |
Abrir Wallet y PvP |
| Wallet | A / Enter, X, Esc |
Vincular, desvincular o volver |
| Pradera | T |
Volver a la ciudad fuera de combate |
| Bordes pradera | caminar sobre < / N |
Entrar a RUNA o al reino de NOX |
| Asentamientos | caminar sobre J / U |
Entrar o salir del campamento |
| Combate | F / Espacio / Enter |
Resolver un intercambio |
| Tienda | flechas, Enter, X, Esc |
Elegir, equipar, quitar o salir |
| Inventario | I, flechas, Enter, X |
Abrir, elegir, equipar o quitar |
Hogar C |
E, ←/→, Enter, X, Esc |
Depositar, retirar o equipar |
| Juego | R |
Recargar script.txt |
| Juego | ? |
Abrir o cerrar la lista de controles |
| Juego | Q / Ctrl+C |
Salir |
La terminal mínima es de 64x16. Para apreciar el mapa y la ficha lateral se recomienda 120x34 o más.
La pantalla de wallet acepta únicamente una dirección pública Stellar G... y
la guarda con la ranura. No acepta ni almacena seeds secretas S.... Vincular
una dirección identifica al jugador, pero las apuestas on-chain seguirán
marcadas como pendientes hasta configurar el contrato desplegado y un firmante
externo. Consulta docs/wallet.md.
Requiere Node.js y npm para instalar las dependencias. El juego se ejecuta con el runtime Bare incluido en el proyecto.
git clone https://github.com/Bitcoindefi/runa.git
cd runa
npm install
npm start -- --soloPara habilitar la presencia entre jugadores, inicia sin --solo:
npm startTambién puedes elegir un nombre inicial desde la línea de comandos; aparecerá precargado en la pantalla de nueva partida:
npm start -- --solo --name Aylanpm test
npm run lint
npx bare test/map.smoke.jsEstado revisado de esta versión:
140/140pruebas correctas.1309/1309aserciones correctas.- Formato y lint limpios.
- RUNA, NOX, fronteras, puertas, portón, pradera y dungeon validados por el smoke test.
- Capturas inspeccionadas y recortadas al borde exacto de la terminal.
Las imágenes de este README no son maquetas escritas a mano. El script scripts/readme-screens.js construye cada estado usando Runa, Field, Dungeon, BossZone y el render real del juego, y genera HTML con los colores ANSI listo para capturar.
npx bare scripts/readme-screens.js .readme-screensEsto evita documentar una ciudad, un héroe o un combate que ya no coincidan con el código.
| Archivo | Responsabilidad |
|---|---|
lib/game.js |
Menús, entrada, transiciones y coordinación general |
lib/map.js |
Ciudad, castillo, colisiones, puertas y NPC |
lib/field.js |
Pradera, cámara, patrullaje y encuentros |
lib/dungeon.js |
Tres niveles de mazmorra, rutas y encuentros |
lib/boss-zone.js |
Ruinas volcánicas y combate del world boss |
lib/world.js |
Simulación de combate y estadísticas derivadas |
lib/shop.js |
Economía, inventario, equipo, guardados y migraciones |
lib/saves.js |
Tres ranuras, archivos persistentes y carga segura |
lib/render.js |
Composición estable de cada cuadro de terminal |
lib/sprites.js |
Arte ASCII del héroe, NPC y referencias maestras |
lib/synchronized-renderer.js |
Publicación atómica de cuadros en Windows Terminal |
Los enemigos, objetos, tiendas y mapas son datos. Esto permite ampliar el contenido sin duplicar lógica de combate o de renderizado.
- Bare ejecuta el juego y sus pruebas sin depender de las APIs internas de Node.
- bare-tui proporciona el ciclo de actualización, teclado y render de terminal.
- Pear permite distribuir builds y actualizaciones entre pares.
- Hyperswarm ofrece presencia opcional sin convertir el estado del jugador en una dependencia de red.
La partida funciona completamente en modo solitario cuando la red no está disponible.
Los diseños compactos fueron adaptados a la escala del mapa a partir de referencias ASCII clásicas. El caballero maestro conserva la firma hjw en el código.
El interior de la cripta parte de fuentes arquitectónicas y criterios de exploración documentados en docs/dungeon-design.md.
Apache-2.0.













