20662-Incluir_minijuego_tipo_Pac-Man_en_Ruby..._¿Es_posible\?
#4
cosarara97 12296
Iniciado por Dafting Qaqtus
Cierto. Aunque es muy potente, el ASM que se usa en GBA limita bastante...


Pardon? xD
Cuando haces un callasm estás enviando el procesador a tu rutina, de modo que tienes control total de la máquina. Y la GBA, amigos míos, es suficientemente potente para correr un pacman xD
A ver, volvamos a la duda principal. Con scripts, orientativamente... primero de todo necesitas un mapa para jugar. Hasta aquí todo fácil. El primer problema es que queremos que los fantasmas se muevan mientras tu te mueves. Para hacer algo así, lo que se me ocurre es mover al player con applymovements mientras leemos el input directamente de la memoria I/O (hay un tutorial por ahí que lo explica).
No se si funcionaría, poner un gatillo en cada casilla y applymovements sin waitmovement.
El siguiente problema que tienes es mover realmente los fantasmas - qué applymovements tienen que seguir. Para hacer esto, puedes crear 4 secuencias de movimientos para applymovements, cada uno con una de las 4 direcciones (en realidad ya las tendrás creadas para los movimientos del player). Una vez hecho esto, para que el script sepa hacia donde hay que mover cada mini, vas a necesitar:
- Un mapa en memoria del mapa de juego, ya sea directamente en el ROM y leyendo con comparevartofarbyte o parecido, o con un montón de variables.
- La posición del fantasma
Y para la IA:
- La posición del player
Algo básico sería primero conseguir que funcionara con un solo fantasma, y luego con los otros.
En pseudo código, la estructura sería algo así:

main:
while (el jugador aún no ha perdido) {
leer input
mover player respecto al input
(por cada fantasma)
calculo básico, hacia donde está el player, en los ejes x e y respecto al fantasma,
y a qué distancia
elegir si preferimos movernos horizontalmente o verticalmente, y en qué sentido
if (nos podemos mover hacia dicha dirección) {
hacerlo
} else {
movernos en la otra dirección (la que tiene prioridad 2, para entendernos)
}
comprobar si ya hemos pillado al player, y en ese caso salir
}


Oh, y si lo quisieras hacer con ASM, más que en ASM yo lo haría en C, pero la idea sería tomar prestada la pantalla un momento, montar el pacman independientemente de todo lo que hay en el juego de pokémon, y luego volver al juego de pokémon y refrescar la pantalla, todo esto usando RAM libre.