Red de conocimiento informático - Material del sitio web - ¿Cómo hacer un juego de GBA o HACK GBA?

¿Cómo hacer un juego de GBA o HACK GBA?

GBAS es la abreviatura de GameBoy Advance development System. Su función principal es transferir juegos y datos de GameBoy Advance. Los usuarios pueden escribir su propio GameBoy Advance. El software se transfiere a la tarjeta de sobrescritura GBAS 64M o GBS 128M. la grabadora GBAS y luego se inserta en el host de GameBoy Advance para su ejecución. Es decir, si también puedes desarrollar juegos de GBA tú mismo (se dice que no es difícil para los buenos programadores), entonces no necesitas la autorización de Nintendo en absoluto y puedes jugar los juegos de GBA que desarrollaste directamente en GBA a través de el sistema GBAS. Además de la función de grabadora GBAS, que es responsable de transferir el software de GameBoy Advance a la tarjeta de sobrescritura, también puede hacer una copia de seguridad del casete original de GameBoy Advance en la computadora y guardarlo como un archivo de computadora *.GBA, o copiar el casete original de GameBoy Advance y GBAS. Sobrescribe la memoria de la tarjeta y haz una copia de seguridad en un archivo de computadora *.SAV. Estos archivos de copia de seguridad se pueden ejecutar con varios emuladores de computadora GameBoy Advance. Y esto significa que puede usar este sistema para copiar libremente las ROM de juegos GBA en Internet directamente al cartucho GBAS dedicado a través del quemador GBAS. Piense en la cantidad de ROM de juegos GBA que se pueden ejecutar en Internet. ¿Es un poco confuso? Hay que decir que GBAS es un sistema bastante completo, aunque este sistema acaba de ser desarrollado, ya es bastante excelente en cuanto a funciones, veamos qué características tiene ahora. 1. Compatibilidad con memoria especial EEPROM: este GBAS es actualmente la única herramienta de desarrollo GBA que admite el formato de memoria EEPROM, y también es la única herramienta de desarrollo que actualmente admite Super Mario Advance (Japón/EE. UU.). Jaja, debes saber que la versión americana de Super MARIO Adventure aún no ha sido lanzada, y en Internet la ROM de este juego ya está disponible desde hace mucho tiempo, por lo que puedes ver que el juego GBA ejecutado en la imagen es la versión americana. de Súper MARIO Aventura. 2. Memoria de batería súper grande: la memoria de batería súper grande de 1 M admite todas las memorias del juego (incluida la memoria de batería súper grande de la quinta generación de Yu-Gi-Oh!). Esta característica es bastante buena y se acerca más a las características de los jugadores. En términos generales, al usar esto, no habrá problemas con la grabación de ningún juego. No hay necesidad de que los jugadores se preocupen por la falta de espacio en la memoria del GBAS. 3. Función de combinación de tarjetas: GBAS admite combinación de tarjetas y la versión de 64 M puede admitir dos tarjetas de juego de 32 M. De esta manera, los jugadores pueden grabar dos juegos de 32M a la vez, haciendo de GBAS una tarjeta combinada. Si el jugador tiene una tarjeta de sobrescritura de 128M, entonces puede convertir su GBAS en una tarjeta 4 en 1, lo que, por supuesto, ahorra dinero. , el tiempo que lleva grabar y copiar el juego es mucho mayor para una tarjeta de 128M. 4. Interfaz de operación: la nueva interfaz de grabación de ventanas (incluidas las funciones de carga, descarga y carga y descarga de archivos de registro de juegos) ha corregido recientemente el problema de transmisión del juego, es más rápida y precisa, admite la plataforma operativa Windows 9X y es fácil de instalar. y uso, y es fácil de usar. No se preocupe si algo sale mal.

Sistema de producción y grabación de software de GBA - Introducción simple a GBAS - 1. Kit de desarrollo de GBA - DevKitAdv Introducción DevKitAdv incluye principalmente dos partes, una es el compilador GCC ++ y la otra es la biblioteca GBA. Las funciones del compilador GCC ++ son similares a las de. nuestro VC de uso común, excepto Sin embargo, falta un editor de texto para editar el código fuente (al menos no lo encontré, uso EditPlus, también se puede usar UltraEdit) y no hay soporte para clases (clase ), lo cual es realmente un dolor de cabeza, solo puedes usar struct. Reemplazo. Su función es compilar el código que escribimos en un archivo ejecutable binario. Por supuesto, este archivo ejecutable es relativo a GBA y al emulador de GBA. que los archivos EXE en Windows no se pueden usar en máquinas Mac; La biblioteca GBA proporciona una serie de funciones para imagen, control y sonido, que se usan junto con GCC ++ Dirección de descarga: mand) 3. El programa GBA más simple (t1) //. main.c// Algunos tipos de datos básicos typedef unsigned char u8 ;typedef unsigned short u16;typedef unsigned long u32;#define REG_DISPCNT *(u16*)0x04000000 // Mostrar dirección de registro #define VRAM 0x06000000 // Dirección de búfer de imagen #define M5_VRAM 0x0600A000 // Dirección del búfer M5 #define BACKBUFFER 0x010 // Dirección del búfer doble/búfer de respaldo #define PALETTE 0x5000000 // Dirección de la paleta #define MODE_3 0x03 // 240*160 15 bits/búfer único #define MODE_4 0x04 // 240*160 8 bits/ double buffer #define MODE_5 0x05 // 160*128 15bits/double buffer#define BG2_ENABLE 0x0400 // BG_2#define SetMode(Mode) REG_DISPCNT=(Mode) // Definición de macro para configurar el modo de visualización // ------- ---- Programa principal ------------int main(){//Establece el modo de pantalla, aquí usa MODE_4SetMode (MODE_4 | BG2_ENABLE);} 1. MODE_5 y MODE_3 son ambos de 16 bits, pero MODE_3 solo tiene un búfer para hacer animaciones. El efecto definitivamente no es tan bueno como el doble búfer, por lo que MODE_3; MODE_4 tiene 8 bits, en teoría, 256 colores son suficientes para una máquina portátil. Aunque nadie quiere resistirse a la tentación. Color verdadero de 16 bits, MODE_5 solo tiene 160*128. En aplicaciones prácticas, se recomienda usar MODE_4. De hecho, ahora necesita usar GCC para compilarlo: gcc -lm -o main.elf main.cobjcopy -. v -O binario main.elf main.bin Verá más en el directorio que creé "main.bin", que es un archivo binario que se puede ejecutar en el emulador GBA. En el tutorial, el directorio t1-t10 es. el directorio del programa fuente, y hay un make.bat en él. Después de modificar el código, ejecútelo directamente para compilar, pero tenga en cuenta que mi devkitadv está instalado en D :. Si lo instala en otro disco, debe cambiarlo. el parámetro de ruta de make.bat 4. El programa GBA (t2) que dibuja una imagen en la capa de fondo MODE_4 dibuja una imagen en MODE_4 de GBA. La imagen debe pasar por 3 pasos: 1. Convertir el archivo de imagen original de 256 colores. en un archivo de datos *.h/*.c Usamos . Aquí tomamos "image.bmp" como ejemplo. Después de la conversión, obtuvimos un archivo "image.h"; h" al inicio del programa, para que pueda ser incluido en el programa

Utilice la paleta y los datos de imagen definidos por "image.h"; 3. Escriba la paleta y los datos de imagen definidos por "image.h" en la paleta y el búfer de imagen de la capa de fondo MODE_4 en el programa. una capa de objeto especialmente configurada para sprites. Su uso es el mismo que el de la capa de fondo, pero su función es ligeramente diferente. La dirección es 0x06000000. No entraré en detalles sobre su uso aquí. Puede enviar directamente los datos del sprite. el búfer de objetos. Eso es todo. Aquí está el programa fuente:... ...//Archivo de encabezado que contiene la paleta de imágenes y los datos #include "gfx/image.h"// ----------- Variables globales --------// Paleta del sistema u16* paleta_mem=(u16*)PALETTE;// Búfer de imagen u16* video_buffer=(u16*)VRAM;// --------- - - Definición de función---------// Función de dibujo MODE_4 void Draw(u16* src_palette,u16* src_data,u16* dst_palette,u16* dst_data);// ---------- - Programa principal------------int main(){//Establezca el modo de pantalla, aquí use MODE_4SetMode (MODE_4 | BG2_ENABLE);//Dibuje en la capa de fondo, la paleta y los datos están en "imagen . h" paleta definida y nombre de matriz de datos de imagen Draw(Palette,Data,palette_mem,video_buffer);}//MODE_4 función de dibujo void Draw(u16* src_palette,u16* src_data,u16* dst_palette,u16* dst_data){int loop, x,y;//Escribe la paleta de destino para(loop = 0; loop < 256; loop++)dst_palette[loop] = src_palette[loop];//Escribe el búfer de imagen para(x = 0; x < 120; Obtener principal .bin, y luego ejecútelo en el emulador GBA, puede obtener este resultado: 5. Programa GBA (t3) para dibujar imágenes en MODE_5 Dibujar una imagen en GBA MODE_5 también requiere 3 pasos similares, pero no se requieren datos de paleta: 1. Convierta el archivo de imagen en color verdadero original en un archivo de datos *.h / *.c. Usamos . Aquí tomamos "image.bmp" (240*160), vaya al directorio Targa2GBA. la ventana de DOS e ingrese "t2g mode5 image.bmp image.h". Después de la conversión, obtendremos un archivo "image.h" 2. #incluya "image.h" al comienzo del programa, para que use; datos de imagen definidos por "image.h" en el programa 3. Escriba los datos de imagen definidos por "image.h" en el búfer de imágenes del programa. El siguiente es el archivo de encabezado del programa fuente: // que contiene datos de imagen #include. "gfx/image.h"// ----------- Variables globales--------// Búfer de imagen u16* video_buffer=(u16*)VRAM;// --- - ------- Definición de función---------// Función de dibujo MODE_5 void Draw(int x, int y, int w, int h, u16 *src_data, u16 *dst_data); --------- Proceso principal

Secuencia------------int main(){//Establece el modo de pantalla, aquí usa MODE_5SetMode (MODE_5 | BG2_ENABL);//Dibuja en la capa de fondo, la imagen se define en "image.h " Nombre de la matriz de datos de imagen Draw(0,0,240,160,image,video_buffer);}//MODE_5 función de dibujo void Draw(int x,int y,int w,int h,u16 *src_data,u16 *dst_data){int i,o , idst;// Copie los datos de la imagen de origen en el lugar especificado en el búfer de imágenes idst =(y*160)+x;for (i=0;i>4)+(1>. >10);ioreg[0x10]=0;ioreg[0x11]=256;ioreg[0x12]=128;ioreg[0x13 ]=0;}int main(){//Establece el modo de pantalla, aquí usa MODE_5SetMode (MODE_5 | BG2_ENABLE);// Cambiar modo SetFlipMode(0);// Dibujar en la capa de fondo, la imagen se define en "image.h" El nombre de la matriz de datos de la imagen Draw(0,0,240,160,image,video_buffer GBA double); visualización del búfer (t5) Cuando ejecute el programa MODEL_5 anterior, definitivamente encontrará que la imagen parpadea (240*160 en la Sección 6 La imagen MM está rota...), pero es relativamente estable en MODEL_4; esto se debe a MODEL_5 tiene que procesar imágenes de 16 bits (en realidad, 15 bits), y la cantidad de datos es mucho mayor que los 8 bits del MODEL_4. Si no se utiliza En el caso de doble almacenamiento en búfer, se producirá un parpadeo cuando se llene la imagen, por lo que MODELO_3 abandonado... El principio también es muy simple. Una vez que la imagen se llena en el búfer posterior, se envía directamente al búfer frontal para su visualización. Aquí hay un proceso de "espera de sincronización -> intercambio de búfer": ... ...// ----------- Variables globales--------// Búfer de imagen u16* video_buffer=(u16*)M5_VRAM;// ---- ------- Definición de función ---------... ...// Esperar la sincronización de datos del búfer void WaitSync () ;//Intercambiar el contenido del búfer void SwapScreen ();// -- --------- Programa principal ----------int main(){// Establecer el modo de pantalla, aquí se usa MODE_5SetMode (MODE_5 | BG2_ENABLE) while(1){// Draw; en la capa de fondo, la imagen es el nombre de la matriz de datos de la imagen definida en "image.h" Draw(0,0,240,160,image,video_bu

ffer);WaitSync();SwapScreen();}}// Esperar la sincronización de datos del búfer void WaitSync (){ while (*(volatile u16*)0x4000006<160) {};}// Intercambiar búfer void SwapScreen () : {if (REG_DISPCNT & BACKBUFFER){REG_DISPCNT &= ~BACKBUFFER;video_buffer = (u16*) M5_VRAM;}else{REG_DISPCNT |= BACKBUFFER;video_buffer = (u16*) VRAM;}} 8. Entrada de clave GBA (t6) I' He estado hablando de gráficos durante mucho tiempo. Aunque está dirigido a MM, todos deben estar un poco molestos. Cambiemos de dirección ahora y echemos un vistazo a los controles de GBA.... // Control clave #define KEY_A 1#define. KEY_B 2#definir KEY_SELECT 4#definir KEY_START 8#definir KEY_RIGHT 16#definir KEY_LEFT 32#definir KEY_UP 64#definir KEY_DOWN 128#definir KEY_R 256#definir KEY_L 512volatile u32* KEYS = (volatile u32*)0x04000130 ;// Contiene tono de imagen Archivos de encabezado para paletas de colores y datos #include "gfx/image.h"// ----------- Variables globales--------// Búfer de imagen u16* video_buffer=(u16 * )M5_VRAM;// Coordenadas de visualización de imagen int img_x,img_y;// ----------- Definición de función---------// Control de clave void KeyAction();... . ..// ----------- Programa principal ------------int main(){// Establece el modo de pantalla, aquí usa MODE_5SetMode (MODE_5 | BG2_ENABLE); while(1){//Manejar evento clave KeyAction();//Dibujar en la capa de fondo, la imagen es el nombre de la matriz de datos de la imagen definida en "image.h" Draw(img_x,img_y,96,64,image,video_buffer) ; WaitSync();SwapScreen();}}//Manejar eventos clave void KeyAction(){//Tecla de flecha hacia arriba if(! ( (*KEYS) & KEY_UP) ){img_y+=5;}// Tecla de flecha hacia abajo if ( ! ( (*KEYS) & KEY_DOWN) ){img_y-=5;}}eturn(0);9. Salida de sonido simple (t7) Lo simple es lo mejor, aquí usamos un módulo de sonido listo para usar (Troff Player, por Vova & Serge). Aquí también se utiliza una herramienta de conversión < MOD2GBA > para convertir archivos de música MOD en archivos de datos de sonido GBA *.c / *.h. El MOD es similar al MIDI, pero admite un efecto más potente. por konvertor, un potente software // Archivo de datos MOD #include "song_data.h" // MOD: Archivo de función de reproducción #include "modplayer.h" // ----- ------Programa principal-- ----------int main(){//Establece el modo de pantalla, aquí usa MODE_4SetMode (MODE_4 | B

G2_ENABLE);//Inicializar sonido (número de canales, volumen)InitSound(2, 7);//Inicializar música (ritmo, bucle)InitSong(20000, 0); while(1){//Actualizar estado de reproducción de músicaUpdateSong( ) ;}}OK, eso es todo EZ 10. Utilice mosaicos para crear un fondo desplazable/ampliable/giratorio (t8) Esta sección trata principalmente sobre comentarios en el programa fuente, por lo que no lo explicaré en detalle aquí." gba. h "Contiene definiciones de macros básicas, "maths.h" es la matriz de valores de sen/cos multiplicada por 256, "main.h" incluye funciones para que podamos definir la estructura del fondo y operar el fondo. El fondo del mapa en el programa es hechos del mismo mosaico. Estos mosaicos se colocan uniformemente uno al lado del otro en un archivo de imagen, de modo que cada mosaico tendrá un número de índice. La información del mapa solo necesita registrar cuántas unidades (mosaicos) hay en el mapa y cuántas; unidades (mosaicos) que hay en cada mapa. El número de índice de mosaicos correspondiente a la unidad está bien. En el ejemplo, "gfx/tiles.h" es el campamento base de mosaicos y "gfx/level1.h" es la disposición del índice de mosaicos. table La herramienta de mapa es "editor de mapas beta" 4". El desplazamiento/escalado/rotación del fondo se logra mediante una serie de cálculos matemáticos simples y modificando algunos atributos de fondo proporcionados por el sistema GBA. Porque la operación en segundo plano se completa con hardware (MODE_1), es muy rápido. También hay una rutina para modificar directamente la posición del píxel para completar la rotación en MODE_5. Puedes compararla más adelante.