Soy malo para poner nombres, lo sé, pero hasta que no encuentre nada mejor éste será el nombre provisional. El motivo es porque será un engine inspirado en la Churrera. Como todavía está muy verde no sabría decir si se trata solo de inspiración o es un plagio como un tren, por eso quiero dejar las cosas claras desde el principio. De momento no hay nada escrito en C, de eso se va a encargar D_Skywalk, para lo cual le voy a dar unas cuantas indicaciones en este hilo sobre cómo funciona la parte en ensamblador.
Como hay un montón de código, vamos a empezar por cosas sencillas. La compilación se hace con makeBu.bat, al ejecutarlo se genera el archivo game.tap. Hasta aquí todo bien. La parte ensamblador está dividida en dos: por un lado está el engine propiamente dicho (engine.asm) y por otro el cargador c/m (loader.asm). La parte en C no está hecha (por ahora hay un main.asm sencillito en ensamblador), pero se trataría de generar un main.bin a partir de un main.c partiendo de la dirección $8000 y como tope de longitud o puntero de pila inicial $fe50-stasp (que es una constante generada en defload.asm).
La comunicación de la parte C (que genera main.bin) con el engine no es a través de llamadas a subrutinas, sino a través de estructuras en la memoria. Por ejemplo hay una estructura entre $FE00 y $FE40 que maneja los sprites, indicando su posición X, Y, si está activado o no y el número de sprite a pintar. Los tiles se manejan con las posiciones $5b00, $5b01..$5b96 y $5bfe..$5bff. En la primera posición le decimos al engine que queremos posicionarnos en la pantalla X, una escritura en dicho byte provoca que se pinte toda la pantalla y se carguen en el array $5b01..$5b96 los índices de los tiles. Ahora bien, si quieres modificar los tiles de la pantalla actual, ya sea para animarlos o para abrir un cerrojo, esto se hace escribiendo directamente en $5b01..$5b96 y especificando el rectángulo de tiles a actualizar en $5bfe..$5bff
Finalmente decir que hay ciertas directivas interesantes en engine.asm que nos permiten acortar el tamaño del mismo y por tanto disponer de más espacio para el juego. La primera es smooth, en caso de estar a 0 se almacenan la mitad de las rotaciones de los sprites (4 por sprite en lugar de 8 por sprite), con lo que se reduce drásticamente el tamaño que ocupan los mismos (más o menos de 10K a 5K). Si cambias la directiva smooth quita también la palabra dummy de la llamada a GfxBu (quinta línea de makeBu.bat), esta chapuza la quitaré más adelante. Luego tenemos las directivas clipup y clipdn que si están activadas permiten recortar los sprites por la parte alta y baja de la pantalla, y si están desactivadas nos ahorramos mucho código. Por último tenemos safeco, que es para asegurarnos de que no se cuelgue el engine bajo ninguna circustancia (si está desactivada hay ciertos valores ilegales de la posición Y del sprite que provocan un cuelgue).
No te asustes, D_Skywalk, por lo complicado que parece. Primero comprueba que puedes generar el game.tap funcional, luego tendrías que pasar el main.asm a main.c con el compilador que quieras y finalmente ya podrías empezar a escribir la parte del engine en C.
FASE (Fucking Awesome Spectrum Engine)
Moderador: na_th_an
-
- Mensajes: 494
- Registrado: Jue, 24 Oct 2013, 15:52
FASE (Fucking Awesome Spectrum Engine)
- Adjuntos
-
FASE.0.13.zip
- (604.76 KiB) Descargado 862 veces
-
buñuelera_alpha.zip
- (642.25 KiB) Descargado 949 veces
Última edición por antoniovillena el Mié, 15 Ene 2014, 02:27, editado 4 veces en total.
Re: Buñuelera
A ver qué tal resulta. ¡Ánimo!
Y ponedle un nombre más chulo, coñe![Muy Feliz :D](./images/smilies/icon_e_biggrin.gif)
Y ponedle un nombre más chulo, coñe
![Muy Feliz :D](./images/smilies/icon_e_biggrin.gif)
Como diría Rorshach: "Urm..."
-
- Mensajes: 494
- Registrado: Jue, 24 Oct 2013, 15:52
Re: Buñuelera
$this->bbcode_second_pass_quote('na_th_an', 'A') ver qué tal resulta. ¡Ánimo!
Y ponedle un nombre más chulo, coñe![Muy Feliz :D](./images/smilies/icon_e_biggrin.gif)
Y ponedle un nombre más chulo, coñe
![Muy Feliz :D](./images/smilies/icon_e_biggrin.gif)
Gracias. ¿Alguna sugerencia? En un principio mi intención era simplemente mejorar el motor de sprites de la Churrera pero poco a poco se ha ido transformando y tal como está resulta imposible.