v1.6.2
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
CHOOSEcomparten el movimiento por el menú: el intérprete ocupa entre 91 y 482 bytes menos, según cuántas se usen. CALLcomo 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
GOSUBhecho desdeCHOOSE IF WAIT, ya sea la opción elegida o el de fin de tiempo, reiniciaba el Spectrum al llegar a suRETURN. Ahora vuelve tras elCHOOSE. - 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.
- Un
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 losINCLUDE. 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. RETURNque pueden ejecutarse sin unGOSUBpendiente, y subrutinas que pueden terminar sinRETURN. 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.
- Etiquetas, variables y arrays declarados que nunca se usan. Se desactiva con
- 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 deGOSUBmientras 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.mapque 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.sprDrawdibuja el sprite y, si se pide, sus colores.sprXordibuja con XOR; al dibujar otra vez, se borra.sprSaveysprRestoreguardan 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) ysprites_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 deinclude_demoestaba 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:12abre 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.
- se encuentra en
- Los seis formatos caben en la ventana.
Scripts make_adv.cmd y make_adv.sh
make_adv.cmdse 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 variableZESARUX_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.
- busca ZEsarUX en
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:
RANDOMIZEsin 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
INCLUDEde un fichero sin salto de línea final se numeraban una línea antes.
Lista completa de cambios: 1.4.0 → 1.6.2