//////////////////////////CALENDARIO////////////////////////////////////////////////////
(Ok)	Dic'18 - Cargador dinámica de tableros/pantallas de carga e idioma
(Ok) 	Ene'19 - Menú principal 
(Ok)	Ene'19 - Marcador: Dado, tiempo; fichas y mover (colores comunes a las 3 paletas)
(Ok)	Feb'19 - Pantallas de carga, hacer 3 (una a cada modo) y que cargue una diferente según el mapa descargado
(Ok)	Feb'19 - Oráculo, misiones y armas
(Ok)	Feb'19 - cpctelera v1.5 
(Ok)	Feb'19 - Viaje entre mundos
(Ok)	Mar'19 - Tercer Jugador
(Ok)	Mar'19 - Modificar build.sh para crear la cdt automáticamente
(Ok)	Jun'19 - Desafíos
(Ok)	Jul'19 - Músicas 
(Ok)	Sep'19 - Betatesting, documentación, manual, autoría ...


LÍMITE COMPILACIÓN: 0xA6FA (no incluido) 
/////////////////////////////LOG//////////////////////////////////////////
26-feb: 
- Procedimiento General para pintar > cuando hay menú (#9387 => #91BB)
- Reproducir la música de la intro sólo una vez => Descartado porque si no hay música se desconfigura el split screen a otros valores
- Usar cpct_clearScreen_f64 (COL) en vez de borrarPantalla pues no puedo usar los spare bytes de la memoria de vídeo al descomprimir los tableros directamente a C000 => borrar pantalla sigue siendo más corto (23 bytes en vez de 55)
- Textos en castellano (=> data2.bin)
- Si no se ha ido aún a oráculo, poner "go to 9" si la tirada mandaría mas allá (#91BA)

27-feb:
- player 3 muestra misiones de player 2 => no había txtMision3_1, 3_2, .... Hay que añadirlos y modificar data1.bin y data2.bin. No cabe con la organización de memoria alta diseñada, por lo que se reorganiza a:
#define ADDR_VARIABLES 0xA700 //Hasta 256 (0xA7FF)
#define ADDR_TEXTOS 0xA800 //Hasta 2047 (0xAFFF)
#define TOTAL_TEXTOS 787 //Máximo 2047 (tb música o gráficos)
#define ADDR_GRAFICOS 0xB000 //Hasta 3328 (0xBCFF)
#define TOTAL_GRAFICOS 3328 //Máximo 3328 
#define ADDR_MUSICA 0xBD00 //Hasta 512 (0xBEFF)
#define TOTAL_MUSICA 512
Hay que modificar los loader.bas porque el byte donde dejar info de idioma y dispositivo de carga cambia. Hay demasiado para texto seguramente, por lo que el área de gráficos podrá retrasarse para cogerle memoria (#9245)
- Movimiento de la ficha que se mueva casilla a casilla, guardando antes el fondo en un buffer (#9406)
- Proc borrarPantalla.s se puede simplificar para que ponga a 0 todo el rango C000-FFCF sin saltar los spare bytes (#93F0)
- Sprite calavera para indicar vidas perdidas (#9478)

01-mar:
- Desafío camino oculto (#97CE)
- Incluir en txtSelecMenu llamadas a leer Teclado y pausa Teclado libre, pues se usaba cuando se llamaba a este procedimiento (#978E)

04-mar:
- Juntar procedimiento llamador Desafío y Viaje pues comparten inicio y fin. Que desafío lleve un parámetro más 0=final; 1:viaje; 2=otros (#97BD)
- Pos x,y por jugador para procedimiento general de movimiento (#9989) => Rollback
- Desafío final (#997E)
- Añadir ID de player en estructura para optimizar código que hace if ((u16) jugador == (u16) player2)) (#995D)

06-mar:
- Mensaje que va a cargar datos extra al principio (LOADING EXTRA BYTES). Uso drawStringM1 porque tiene que ser en modo 1 y en cpctelera v1.5 se ha optimizado mucho el procedimiento (#99FF)
- Cambiar Pausa a sin parámetro pues siempre es con un segundo (#99D5)
- Desafío Repetir Patrón (#9C2F)
- Musica como jukebox, un procedimiento general con respecto a la variable musica (#9C4D)
- Optimización procedimientos desafíos (#9BB9)
- Añadir FXs y músicas principales (#9C0E) <= Aumenta poco del total porque aprovecho los huecos que quedaban entre memoria reservada para la música y código.

11-mar:
- Sprite diferente para cada jugador en desafíos/viaje, cada uno basado en el mundo donde procede y cambiar colores de fichas de players y fonts para que sean acordes al sprite de desafío (#9CF7)
- Viaje entre mundos. Fallaba pintado para las piedras de abajo por no dar tiempo a pintarlas antes de llegar el CRCT (#9C8B) => No termina de ir fino en algunos casos
- Añadir música principal (coger una de prueba) y cargarla al final de Gráficos (0xBE20) para ver si colisiona con SP (#9CB2)
- Posibilidad de quitar música de juego (byte musica_off) en el menú inicial y mensaje tras cargar (#9D1F)

13-mar:
- Reparaciones y Proc general para dibujar fondo de un color para el área de juego (#9E25)
- Desafío Evasión (#A29E)

14-mar:
- Correcciones (#A400)
- Animación final (#A6FB)
- Quitar Práctica, no tiene sentido con sólo 3 desafíos (#A661)
- Mensaje Final si es en modo fácil (#A696)
- Seleccionar idioma al cargar juego en vez de BASIC, para que la carga sea del tirón (#6AC2)

15-mar:
- Versión 0.2 final:
#A6C2 compilación normal
#A2A9 compilación 200k nodos (10mins) => No mostraba menú en inglés ¿?
#A240 compilación 2M nodos (35mins)
- cambiar paletaM0[4] a un azul no tan oscuro para que se vea mejor la bandera de UK, afecta al fondo del desafío final
/////OPTIMIZACIONES////
- GameOverPlayer() y marcadorJugador() => #A69A
- macro cpctm_screenPtr en vez de cpct_getScreenPtr cuando los 3 parámetros son constantes => #A528
- resplandor animación final => #A51B

16-mar:
- Desafío Parar Tiempo (#A61F)

18-mar:
/////OPTIMIZACIONES////
- Agrupar los desafíos normales en un único procedimiento y usar directamente return 1 cuando se completa desafío en vez de usar variable exito (#A571)
- Proceso pintarPersonaje para limitar el paso de parámetros a cpct_drawSpriteMasked de frame1 y 2 pues el tamaño es igual (#A530)
- Desafío Parar Sprite (#A621)

19-mar:
- Desafío sumar colores y build con max-alloc-nodes a 2M

20-mar:
- Cambiar modo de funcionamiento de Viaje entre mundos, cuando se activa el menú
- Cambiar proceso de pintado en Viaje, priorizar pintado de piedras sobre sprite jugador (también se prescinde de varios sprites para piedras emergentes)
- Añadir Pájaros en Viaje, y que sea opcional si salen, así como el sol (Si no sale sol, no se oscurece)
- Pasar num_turno a un total de 32 (más que suficientes para terminar el juego)
- Crear procedimiento cpct_mygetScreenPtr([CPCT_VMEM_START,]x,y) propio que no haga uso del primer parámetro pues siempre es 0xC000 => Ahorro de 83 Bytes
- Usar tabla locales en vez de cuadrilla para calaveras en desafío supervivencia => Ahorro de 418 Bytes [Cuando hay mucho acceso a variables que sólo tienen valor dentro del proceso, es preferible que sean locales que globales. El compilador hará uso de la pila en vez de ir mirando y cargando de la memoria]

21-mar:
- Corregir Visualización Reloj de Arena, se había roto con el cambio de num_turno
- Suena musica desafío en Com al tirar dado
- Cuando se da desafío por bueno por numero de intentos, pinta dos veces el tablero y queda raro
v0.4

22-mar:
- Música prinicipal (para desafíos)
- Dibujar estrellas aleatorias en desafío final
- Cambiar texto inicial para quitar música
v0.5

25-mar:
- Cuando un jugador lo haya completado todo, saltar game over. No dejar turnos para los otros players hasta completar todo el ciclo. Si no, podría haber empates y no hay memoria para solventarlo. El player1 juega con ventaja, pues.
- No parece pintar correctamente los distintos estados del reloj de arena (faltaba un paso y se iba al else; lo cambio todo a if's)
- Probar con más pausa tras terminar turno (iteración 5 pausa();)
- cuando se pierda por time out, pintar reloj
- Refrescar datos del menú del jugador al finalizar turno por si ha pasado por oráculo, cogido objeto o completado misión
- Si se acaba temporizador en desafío parar tiempo, perder vida
- Desafío parar tiempo, objetivo no puede ser 00
- Desafío final, si fallas al siguiente turno no vuelve a desafío final, sino vuelve a desafío normal y tirar dado (Requiere cambiar prepararDesafio())
- Desafío Suma, quitar lo del + i
- Desafío Suma, probar con ops con aleatoriedad, 0, 1 y 2
- Desafío final, jugador y Cobra parecen estar por encima del suelo, flotando (NO se había ajustado a que ahora el marcador del jugador empieza en 152 en vez de 150)
- música oráculo, suena por sólo un canal mono, ponerlo en canal B (stereo) (#A6A6)

26-mar:
- Dos objetos en una misma casilla (inicialmente sí se hacía esa comprobación, pero luego al mezclar sí podían acabar en la misma casilla; por lo que en la inicialización no se permiten dos armas en una misma casilla independientemente del mundo que estén)
- Desafío Suma Colores, los colores pueden tener valor de 3..9 y usuarse 1..2 (originalmente 1..9 y 1..2)
- Modo dificil por defecto
- Corregido BUG 2 objetos en misma casilla (cuando detectaba misma casilla el código para corregir estaba mal armas_casilla[i] == 8;		 en vez de armas_casilla[i] = 8;		)
- BUG a veces sonaba música antes del menú (porque no se inicializaba var musica y podría tener un valor aleatorio por la carga y firmware)
- Botones colores, tener en cuenta monocromo, ponerles también un entramado. (#A68E)

27-mar:
- usar pintarEstrellas() en viaje entre mundos cuando oscurezca y no haya pájaros (#A6DA) 

1-abr:
- Redactar documento Making-of

2-abr:
- Probar la creación de apk, no está preparado para cygwin Windows, por lo que hay que cambiar la asignación de las variables ANDROID_PATH Y ZIPALIGN, además es necesario java 8 u101 o superior

3-abr:
VERSION 0.1 (#A6F6) 
- Añadir Key Copy como tecla de disparo
- Redactar manual de juego
- Añadir versión del juego en menú inicial 


4-abr:
VERSION 0.2 (#A6F0) 
- Tras recoger un arma, si vuelve a pasar sobre esa casilla vuelve a sonar el FX
- Pintó estrellas en viaje entre mundos cuando todavía era de día (tras morir). Cuando hay pájaros, pinta estrellas
- Quitar pausa tras mensaje de quitar música, se escribe como teletipo
- En Menú Inicial estaba todavía preparado para seleccionar Práctica (se tuvo que desechar por falta de memoria)
- Aprovechar primer texto (txtMusica) para inicializar f_teletipo a 0
- Poner una pausa general al terminar turno, en vez de si había cambiado algo o no
- Optimizar if/else de misión 1 o 2 en bucle comprobar si ha recogido arma o completado misión
- Quitar pausa de selección IA de COM, era redundante. Ya se hace pausa al tirar dado
- Como por defecto la selección es avanzar, no hace falta en IA tener en cuenta que avance cuando no haya visitado oráculo
- Calcular distancia, si el objetivo está en otro mundo no sumar 1 casilla extra, pues el viaje es inmediato
- Quitar Enter como botón de disparo
- Optimizar funciones de pressedXXX, no usar if/else sino directamente return
- Optimización if/else en modificarMision()
- Antes de cada turno, indicar a qué jugador le toca

5-abr:
VERSION 0.3 (#A6F3)
- Si se completa la segunda misión, va directamente a desafío final (probar qué pasa si se falla el primer intento)
- Optimización if/else en IA()
- Optimización if/else en avanzar/retroceder de turno()
- pintarTablero, calcular paleta a usar por offset en vez de indicar en cada if
- Pintar con la paleta estándar el marco que muestra el turno del jugador 
- Establecer la paletaM0 en prepararDesafio en vez de cada una de los 3 procedimientos de desafío
- meter SetBorder/SetColourPal(BLACK) en borrarPantalla pues el borde siempre es negro y se llama tras borrar la pantalla
- Reorganizar llamadas pintarTablero
- Llamar a Desafío Final en el turno que completamos la segunda misión
- Quitar pulsar tecla para parar dado, se podía juntar con el posterior avance/retrocede. El dado siempre será aleatorio y tardará un tiempo en mostrarse el valor
- Incluir txtMenu en pintarTablero, supone cambiar el parámetro a TJugador

6-abr:
VERSION 0.4 (#A6EB)
- Llamar también a IA cuando sea jugador humano para que ya le preseleccione la opción idónea a elegir. Así el juego se puede volver más asistido para vagos y puedo depurar mejor la función.
- Cambiar el carácter de la M ligeramente

7-abr:
VERSION 0.5 (#A6DA)
-Volver a pasar poner paletaM0 en desafíos (final, viaje y normales), debe costar menos que todo lo que estoy incluyendo para cuando no debe cambiarse (p.e. tras 2 intentos fallados no debe cambiar paleta, pues se lo cambiaría al tablero pintado)
- No pintar ficha jugador si está desactivado
- Fin de juego por time out muestra el reloj con arena, no llegaba al último paso de actualización
- Quitar cambio paleta en animación final, ya está cambiada del desafío final y no se cambia después.
- Optimización menú inicial configuración de los players

8-abr:
VERSION 0.6 (#A6E6)
- Suena música de menú principal tras desafío de patrones => estaba así en el código ¿¿??
- borrarPantalla antes de reproducir patrón para destacar más que se inicia la secuencia
- centrar en altura marco que indica jugador-turno
- Había quitado el cambio de paleta para desafío suerte
- Sigue sin salir el reloj de arena vacío cuando se acaba el tiempo => No estaba definido el sprite final

12-abr:
VERSION 0.7 (#A6F4)
- Si quitaba la música, al volver al menú tras acabar la primera partida ya no se podía restaurar la música
- Si te dan las 2 calaveras a la vez en desafío supervivencia, quitan 2 vidas a la vez

29-abr:
VERSION 0.8 (#A6F4)
- Cambiar función colisión de Viaje entre mundos por una que busque la no colisión por ser más óptimo y ver si mejora el flickering

8-may:
VERSION 1.0 (#A6F4)
- versión final tras realizar todas las pruebas con buen resultado, sólo se cambia que haya 2 patrones en el desafío "SIMON" en vez de 3
- Modifico build.sh, para esta compilación me encuentro con el problema que tras ejecutar el script de creación, si justo vuelvo a ejecutar make entiende que el proyecto ha sido actualizado y vuelve a generar el cdt y dsk quedando éste incompleto al no incluirse los ficheros extra. Y necesito volver a ejecutar make tras el script de creación para hacer el apk.
Por lo que modifico el script build.sh para que me borre los archivos conflictivos (./src/tableros/*.h.s) que además no uso pues son ficheros cabecera si se programa en ensamblador
Esto es porque el .sna (snapshot) que genera el proyecto no es válido por las características del proyecto que no carga la totalidad de los datos en memoria con la carga inicial. Por lo que hay que hacer un volcado (.sna) manual y luego añadirlo al proyecto (sobreescribiendo el existente) y ejecutar make apk

29-jul:
VERSION 1.1 (#A6F9)
- Intercambiar los colores de la cobra cuando lo acaba Hyrca, estaban al revés
- Añadir guiño AMC, poner texto "Gronf  Gronf" al perder vida en supervivencia (era el mensaje que aparecía cuando la planta escondida del AMC te comía) con la misma fuente de texto
- Optimización de código para lo anterior, para ello voy cambiando multiplicaciones que no aportan mucho por asignaciones directas. Las multiplicaciones tienen un coste en ASM de longitud de código (se reconvierten a sumas), si sólo son para un par de valores es mejor hacer asignaciones directas con if:
	* Comentar y=68 en pintarBoton pues es el valor por defecto, no hace falta volverlo a asignar 
	* Reescribir borrar camino del desafío Camino Oculto para que no haga operaciones de multiplicación ni las repita
	* Reescribir pintarCamino para también quitar la multiplicación. Queda más legible en el código pero ocupa más bytes
	* Suma de Colores, quitar la multiplicación a la hora de inicializar tiempo por asignaciones directas
	* Alto de marco cenefa y bucle de pintado
	* 33% de piedra oculta independiente de modo dificultad
	* variable color_negro para las 4 veces que se llama a solid box en desafíos
	* quitar fonts que se usen poco o nada para los de AMC: 52 (&) y 49 (full)
	* resplandor animación final, quitar operaciones matemáticas
	* txtMenuDado, poner valores por defecto en vez de if/else y simplificar condición if (quitar operación /)

1-ago:
VERSION 1.1 (#A703)
- En pantalla de elegir idioma, que cualquier otra tecla sirva para seleccionar el inglés. Esto es para sistemas de auto lanzado con sólo joystick, para que se pueda jugar totalmente al juego con sólo joystick y sin que interactúe el teclado.

30-sep:
VERSION 1.2 (#A690)
- Efecto CRTC de reducir filas y columnas para destacar el cambio de turno de jugador (efecto pliegue/despliegue)
- FX de vida perdida cuando COM "falla" un desafío
- Quitar desafío de suerte (parar sprite del jugador en pantalla)

1-oct:
VERSION 1.3 (#A609)
- Restablecer desafío de suerte
- Dejar un sólo modo de juego (quitar dificultad)
- Reposicionar y redimensionar marco del menú inicial al haber una opción menos
- cambiar a paleta del jugador antes de hacer el repliegue (antes usaba la paleta común)
- Dificultad intermedia para desafío final. Pasar de 99 ciclos de reloj a 70


7-oct:
VERSION 1.4 (#A6F8)
- Retocar aspectos relativos a la jugabilidad y dificultad.
- Cambiar ficheros cargador BASIC a .bas ASCII en vez de binarios. Así me es fácil editarlos
- Pintar borde verde si se ha superado el desafío (tirar dados) o rojo si no se ha superado.
- Borde multicolor si se ha cogido un arma o completado misión
- Quitar cursores como entrada teclado para ahorrar memoria para esta última versión con los tableros originales
- Cambiar método de mostrar "Gronf Gronf" para que se vea más rápido y fluido sin flickering. En vez de ser como un texto, hacerlo como un 
sprite que se pinta dos veces.
- Aprovechar caracteres de texto que ya no se usan para liberar memoria (implica recodificar texto)
- Guardado de la porción del jugador sobre tablero con cpct_getScreenToSprite() en vez de manualmente para ahorrar memoria. (No conocía esta utilidad de cpctelera mucho más óptima que la mía)
- Añadir modo dificil pero sólo implica tener una vida en los desafíos
- Suma, perder Vida al haber usado todas las opciones y no dar con el resultado, para no tener que esperar a que se acabe el tiempo

12-oct:
VERSION 1.5 (#A837) (sobran 317 Bytes)
- Tableros rediseñados manualmente por Ricardo Oyón, optimizados sin ruido de importación y un aspecto visual mucho mejor
TAMAÑO TABLEROS ORIGINALES REDISEÑADOS (BYTES)
khytya_size_z   9583		6710
vendha_size_z  	9082		7741
hyrca_size_z   	5032		5868
- Volver a poner control por cursores y ENTER
- Laberinto, mostrar camino al morir y empezar de nuevo
- Nuevos desafíos: Lluvia ácida, Tiro al arco
- Dado con números más grandes y giro más lento
- Reloj de Arena más estilizado, cambiar la actualización por algo más intuitivo y usar animación de caída de arena en desafío de parar tiempo
- Afinar tiro al arco (probar)
- Quitar modo dificil y activarlo por nº de turno
- Nuevo desafío: saltar lanzas
- Dotar de algún escenario básico a los desafíos
- Añadir splash screen antes de pantalla de carga
- Función de escalado para dado

19-oct:
VERSION 1.6 (#A6F0)
- Tableros definitivos
TAMAÑO TABLEROS (BYTES)
khytya_size_z  	6718
vendha_size_z  	7040
hyrca_size_z   	5814
- Cambiar jugabilidad de algunos desafíos, hacerlos más breves
- Cambios en textos
- Desafíos aleatorios => tabla shuffle para que no se repitan hasta verse todos, en vez de una función aleatorios
- Arreglar 'flickering' de la parte de viaje entre mundos
- No había actualizado cómo mostrar el reloj de Arena si se acaba la partida por time out, estaba con el sistema antiguo de cambiar bytes
- Destacar cuando se coge un arma mediante parpadeo en el menú 


Configuraciones de juego a testear:
- ENG // 0 usr     // 3 com    	// WinApe  	// DISCO	OK
- ESP // 1 usr (v) // 2 com     // WinApe  	// CINTA	OK
- ENG // 1 usr (h) // 2 com     // WinApe  	// CINTA	OK
- ESP // 1 usr (k) // 1 com (v) // RVM  	// DISCO	OK
- ENG // 1 usr (k) // 0 com     // RVM		// DISCO	OK
- ESP // 1 usr (k) // 0 com     // RVM		// CINTA	OK
- ENG // 0 usr     // 1 com (k) // RVM		// CINTA	OK
- ESP // 0 usr     // 1 com (k) // CPCE  	// CINTA	OK
- ENG // 1 usr (k) // 2 com     // CPCE  	// CINTA	OK
- ESP // 3 usr     // 0 com     // RVM  	// DISCO	OK