Creo que ésta es una sección interesante que puede dejarse caer por aquí de vez en cuando. El objetivo sería mostrar juegos que considero interesantes por cualquier motivo aleatorio. Puede ser simplemente por ser una idea original ó por ser la primera vez que se usó alguna técnica ó por ser la cosa más horrible que un z80 ha ejecutado.
Nuestro invitado de hoy, es "Laser Squad", las presentaciones se las dejamos al Chema que él si que sabe, jejeje.
En este caso aparece porque últimamente hemos estado hablando de él en las redes sociales. Con respecto a la versión de nuestra máquina, siempre me deja una sensación extraña, porque por un lado se nota que se intentó hacer una versión de CPC más cuidada, pero al mismo tiempo se dejaron muchos detalles sin "mejorar", como siempre debió de ser porque el plazo de tiempo se terminaba y muchas de las cosas se tuvieron que dejar en el estado en que se encontraban.
Una cosa bien divertida es que la versión de cinta tiene una pantalla de carga en mode 0 y la de disco una en mode 1 (en mi crack la pantalla de presentación será una al azar en función del tiempo que lleve el CPC encendido).
Voy a mencionar algunos de esos detalles que demuestran que en este juego en concreto se quiso mimar un poco más de lo acostumbrado en estas conversiones. Podemos comenzar porque relocalizaron todo el código para hacer un mejor uso del mapa de memoria del CPC, de hecho, excepto por algunos huecos, se está usando los 64 KBs de memoria prácticamente por completo (desde $0040-$FFFF). Además, el juego funciona con las interrupciones desactivadas todo el tiempo (aunque ésto hoy en día sería un delito, ya que pierdes la posibilidad de añadir música entre otras cosas).
Un efecto interesante de esto que comentamos, es que no es fácil hacer un crack a disco que sea amigable con el firmware (lo cual es vital para poder usarlo en los nuevos dispositivos de almacenamiento masivo). El juego en si se divide en dos partes, una primera parte que llega hasta $6366 y que sería el "motor" del juego; y una segunda parte que estará ocupada por las diferentes misiones, las cuales son cargadas desde $6367 hasta $BFFF (después de eso vienen los textos en francés, los cuales pueden ser reemplazados por otros idiomas, aunque hay que tener mucho cuidado aquí, ya que el espacio es limitado... a no ser que te curres una forma de relocalizar todos los datos de las misiones).
En resumen, el juego cubre toda la zona de memoria donde vivirían las variables y rutinas de salto del firmware. Por lo que la única opción que tenemos es reiniciar el firmware, hacer nuestra carga de datos y volver a desactivar el firmware. En un principio no parece una tarea compleja, sobre todo si los ficheros de las misiones están bien comprimidos, ya que caben perfectamente sobre la memoria de pantalla y de allí pueden ser descomprimidos a su destino.
El problema lo encontraremos cuando intentemos cargar ó guardar las partidas, ya que estos datos son imposibles de cargar con el firmware vivo, ya que se comen toda la zona de memoria ocupada por él. Así que la única opción de hacer un crack compatible con el firmware es cargar esos datos en la memoria extra de los 6128 (ó copiarlos primero allí cuando vayamos a guardar la partida).
Eso es algo que ya hace mi crack y que además, añade los niveles extras que fueron publicados posteriormente:
Continuando con los detalles de calidad, quizás el más frustrante son los gráficos, ya que se tomaron la molestia de convertirlos a mode 1, pero no de retocarlos para hacer un mejor uso de la paleta. Hace unos años MacDeath recoloreó los gráficos con bastante buen gusto y no sería difícil usar ellos con su permiso.
Porqué esto es un detalle de calidad, pues porque este juego al no ser un árcade, no precisaba de ello, y ya sabemos que la mejor optimización es la que no tienes que hacer. Por lo que podía haber sido como se hace normalmente con los gráficos de las conversiones directas; dejarlos en el formato de la calculadora (yo prefiero llamarlos de gráficos en mode 2, ya que es idéntico a ese formato) y convertirlos en tiempo real a la hora de imprimirlos. Reduciendo muchísimo la velocidad de pintado; uno de los mejores ejemplos de esto que comento, es el Pacmania, un juego insufriblemente lento por culpa de esa falta de cuidado.
Hasta aquí está todo correcto, pero una vez que empiezas a mirar por dentro, es cuando se ven las prisas por terminar esta conversión. Por ejemplo, uno de las cosas típicas que tienen las conversiones mal hechas, es que el personal deja por medio cosas como rutinas para acceder al joystick kempston; ó te encuentras que usan el modo 2 de interrupciones del Z80, algo totalmente innecesario ya que el modo 1 funciona bien (y en un principio no tenemos nada en el bus perturbandonos) y la tabla de 257 bytes necesaria es una forma estúpida de desperdiciar memoria en nuestro sistema. O como en el caso del Laser Squad, tenemos código que accede al puerto de la ULA de la calculadora, mediante el consabido "OUT ($FE),A". Afortunadamente el acceso a ese puerto en el CPC no suele hacer nada; en otros sistemas, como esos juguetes de los chinos, puedes bloquearlos, ya que ese dirección corresponde a uno de los registros de paginación de memoria.
Por lo que lo mejor es eliminar siempre esos accesos, ya que normalmente se usan para cambiar los colores del borde ó para producir sonido por medio del beeper. Y eso mismo es lo que ocurre en la versión de CPC del Laser Squad. Solo a modo de aclaración final, generar sonido con el beeper consiste en enviar 0s ó 1s al altavoz con esperas intercaladas para poder simular frecuencias diferentes. Esas esperas son algo totalmente innecesario en el CPC, ya que en nuestro caso escribimos la información en el PSG y que él se apañe. Por lo que eliminando ese código, estamos ahorrando trabajo a la cpu, lo cual siempre es bienvenido.
Bueno pues hasta aquí hemos llegado por hoy, si todo sale bien, muy pronto alguien publicará una novedad de lo más interesante sobre este juego. Así que atentos a... ¡los foros!... nunca va a ocurrir, porque todos sabemos lo que Monkey Patching puede producir: All retards are belong to us!!!