Skip to content

v1.6.2

Choose a tag to compare

@github-actions github-actions released this 30 Sep 04:50
· 4 commits to main since this release
2bd6f34

Choose Your Destiny 1.6.2

Todos los cambios desde la 1.4.0.

En resumen:

  • Juegos más pequeños y más rápidos: los textos se comprimen mejor y se imprimen antes, y el intérprete ejecuta la lógica más deprisa.
  • Nuevas formas de encontrar errores: comprobar el guion en un segundo, avisos de los descuidos más habituales y errores de ejecución que dicen en qué línea ocurrieron.
  • Sprites con máscara: dos librerías nuevas.
  • Herramientas más fiables: una GUI renovada, scripts de compilación que por fin lanzan el emulador en todos los formatos y manuales en PDF dentro del paquete.

Descargas: https://github.com/cronomantic/ChooseYourDestiny/releases/tag/v1.6.2

  • ChooseYourDestiny_Win_x64_v1_6_2.zip: Windows, con Python incluido y sin necesidad de instalar nada.
  • ChooseYourDestiny_Linux_x64_v1_6_2.zip: Linux y macOS. Necesita Python 3.11 o superior, y SjASMPlus se compila aparte, como hasta ahora.
  • Los manuales y los tutoriales, en español y en inglés, en PDF.

Cada juego lleva su propio intérprete. Para que un juego ya publicado aproveche las mejoras, basta con volver a compilarlo. El lenguaje no cambia, así que los guiones de la 1.4 compilan igual. Lo único que puede ocurrir es que aparezcan avisos nuevos; más abajo se explica cómo desactivarlos.


Textos: más comprimidos y más rápidos

  • Abreviaturas anidadas. Una abreviatura puede contener otras. El compilador prueba el formato de siempre y el anidado, y se queda con el que ocupa menos (--token-format auto, la opción por defecto). Tamaños medidos:
    • Delerict: de 17.385 a 17.258 bytes.
    • ETPA: de 15.109 a 14.726 bytes.
    • Un texto en castellano de 61 KB, en 128K: de 43.346 a 41.251 bytes.
  • Mejor reparto de abreviaturas. Cada texto se codifica con la combinación óptima de abreviaturas. Las que dejan de compensar se descartan.
  • Impresión más rápida. Las abreviaturas más usadas van al principio de la tabla, y encontrar una cuesta de media unas 3.400 T-states en vez de 11.600. Además, el dibujo de cada carácter es un 11 % más rápido.
  • Compilación más rápida. La búsqueda de abreviaturas usa todos los núcleos del procesador: de 3 a 4 veces más rápida en un equipo de 4 núcleos.

El intérprete

  • Más rápido. La lógica corre un 5 % más deprisa y el texto un 4 % más, por la forma de guardar las instrucciones. Además, las comparaciones ya no usan saltos.
  • Más pequeño. Las tres variantes de CHOOSE comparten el movimiento por el menú: el intérprete ocupa entre 91 y 482 bytes menos, según cuántas se usen.
  • CALL como valor. Una rutina en código máquina puede devolver un byte en el registro A y usarse dentro de una expresión: SET x TO CALL rutina, IF CALL rutina = 1 THEN ....
  • Correcciones:
    • Un GOSUB hecho desde CHOOSE IF WAIT, ya sea la opción elegida o el de fin de tiempo, reiniciaba el Spectrum al llegar a su RETURN. Ahora vuelve tras el CHOOSE.
    • Una palabra de más de 255 píxeles de ancho empezaba en mitad de la línea. Ahora pasa a la siguiente.
    • El menú ya no borra la viñeta cuando no hay sitio adonde moverse.

Encontrar errores

  • --check: comprobar sin compilar. Busca errores en el guion en un segundo, sin ensamblar y sin necesidad de SjASMPlus. En la GUI es el botón Comprobar.
  • Mensajes que dicen dónde. Todos los errores del compilador indican fichero y línea (juego.cyd:12), también dentro de los INCLUDE. Antes, muchos solo decían qué estaba mal.
  • Todos los mensajes en español. Por un fallo, 173 mensajes del compilador salían siempre en inglés, incluso los que ya estaban traducidos. Ahora están todos en español.
  • Avisos nuevos. Todos se pueden desactivar:
    • Etiquetas, variables y arrays declarados que nunca se usan. Se desactiva con --no-warn-unused.
    • RETURN que pueden ejecutarse sin un GOSUB pendiente, y subrutinas que pueden terminar sin RETURN. Se desactiva con --no-warn-gosub.
    • Una variable de una librería que el juego pisa desde otro fichero, con otro nombre o por su número. Reutilizar variables sigue siendo posible. Se desactiva con --no-warn-shared-vars.
  • Depuración en el propio juego. Estas opciones son para las pruebas: no las dejes en la versión final. Sin ellas, el intérprete no cambia en nada.
    • --debug-stack: comprueba la pila de GOSUB mientras corre el juego. Si la pila se descuadra, el juego se para con el error de sistema 9 o 10 en vez de colgarse.
    • --debug-errors: los errores de sistema dicen dónde ocurrieron (SYSTEM ERROR No:7 at 0:42582). El compilador escribe junto al juego un fichero .map que convierte esa posición en fichero y línea. En la GUI basta con pegar el mensaje en el campo Error del juego: explica el error con palabras, muestra la línea del guion con la sentencia exacta marcada (también cuando hay varias en la misma línea) y abre el fichero en ella. Cuesta 3 bytes por cada instrucción que pueda fallar y no hace el juego más lento.

Librerías y ejemplos

  • lib/sprites.cyd: sprites con máscara. Dibujan sobre la pantalla sin borrar el fondo.
    • sprDraw dibuja el sprite y, si se pide, sus colores.
    • sprXor dibuja con XOR; al dibujar otra vez, se borra.
    • sprSave y sprRestore guardan y reponen lo que hay debajo, en 4 huecos para mover varios sprites a la vez.
    • La posición vertical puede ser al píxel.
    • Ocupa unos 550 bytes, más el espacio para guardar el fondo, y solo si se usa.
  • lib/sprites_px.cyd: la misma librería con la X también al píxel, para movimientos horizontales suaves.
    • Ocupa unos 490 bytes más que la anterior.
    • Un sprite de 2×3 caracteres que no cae en un borde de carácter tarda medio frame en vez de 0,2.
    • Por eso es una librería aparte: usa la que necesites.
  • Ejemplos nuevos: sprites (un personaje que camina y una pelota que rebota) y sprites_px (el personaje caminando píxel a píxel).
  • Los 20 ejemplos traen su .tap, listo para cargarlo en un emulador como demostración. El de include_demo estaba roto y ya funciona.

La GUI (make_adventure_gui)

  • El cambio de idioma ya no la rompe, y el compilador escribe en el idioma de la GUI.
  • El registro se ve mientras se compila, no al final:
    • los errores salen en rojo y los avisos en naranja;
    • cada compilación termina con un resumen de errores y avisos;
    • un doble clic sobre fichero.cyd:12 abre el fichero en esa línea.
  • Botones nuevos:
    • Comprobar revisa el guion sin compilarlo.
    • Ejecutar lanza el último juego compilado sin volver a compilar.
    • Abrir carpeta abre la carpeta de salida.
  • Campo Error del juego: pega el mensaje de un error de sistema y dice qué significa y en qué línea del guion ocurrió, con la sentencia marcada y el fichero abierto en ella. No muestra nada interno del intérprete.
  • Opciones del compilador agrupadas en Optimización, Avisos, Depuración y Compatibilidad. Cada una explica qué hace al dejar el ratón encima.
  • Emulador interno (ZEsarUX):
    • se encuentra en tools/ZEsarUX-<versión>/ o en el PATH, y funciona también con +3 y esxdos;
    • la GUI encuentra el juego aunque el compilador haya acortado su nombre.
  • Los seis formatos caben en la ventana.

Scripts make_adv.cmd y make_adv.sh

  • make_adv.cmd se cortaba después de cada compilación con ... was unexpected at this time, antes de la copia de seguridad y del emulador. Ya funciona.
  • El emulador interno (RUN_EMULATOR=internal) funciona en todos los formatos:
    • busca ZEsarUX en tools/ o en el PATH, o donde diga la nueva variable ZESARUX_PATH;
    • arranca el +3 con la máquina correcta; antes pedía una que ZEsarUX no conoce;
    • encuentra el juego aunque su nombre se haya acortado;
    • arranca esxdos con la carpeta del juego como tarjeta SD.

Documentación y paquetes

  • Manual y tutorial en PDF, en español y en inglés, dentro de los dos paquetes y como descargas sueltas. El tutorial incluye las secciones de sprites con máscara y de los avisos de GOSUB/RETURN.
  • Los paquetes de la 1.4 no podían compilar para esxdos: les faltaba un fichero del intérprete. Corregido. Además, una prueba automática comprueba ahora que la copia del compilador que va en el paquete está completa y al día.
  • Otras correcciones:
    • RANDOMIZE sin argumento generaba un juego erróneo.
    • Una ruta de entrada con carpeta (cydc 48k juego/main.cyd) daba «Include file not found».
    • Las líneas que siguen a un INCLUDE de un fichero sin salto de línea final se numeraban una línea antes.

Lista completa de cambios: 1.4.0 → 1.6.2