FASE (Fucking Awesome Spectrum Engine)

Chit chat general. Habla con los MojonTwins y con los amigos de los MojonTwins. Reza a Vah-ka. Delinque. Aviso: está PROHIBIDO tirarse peos fuerte. Si les cortas el pescuezo, vale.

Moderador: na_th_an

antoniovillena
Mensajes: 494
Registrado: Jue, 24 Oct 2013, 15:52

FASE (Fucking Awesome Spectrum Engine)

Mensajepor antoniovillena » Lun, 06 Ene 2014, 18:18

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.
Adjuntos
FASE.0.13.zip
(604.76 KiB) Descargado 696 veces
buñuelera_alpha.zip
(642.25 KiB) Descargado 806 veces
Última edición por antoniovillena el Mié, 15 Ene 2014, 02:27, editado 4 veces en total.
Avatar de Usuario
na_th_an
Mensajes: 26413
Registrado: Vie, 09 Ene 2009, 12:18

Re: Buñuelera

Mensajepor na_th_an » Lun, 06 Ene 2014, 18:25

A ver qué tal resulta. ¡Ánimo!

Y ponedle un nombre más chulo, coñe :D
Como diría Rorshach: "Urm..."
antoniovillena
Mensajes: 494
Registrado: Jue, 24 Oct 2013, 15:52

Re: Buñuelera

Mensajepor antoniovillena » Lun, 06 Ene 2014, 18:42

$this->bbcode_second_pass_quote('na_th_an', 'A') ver qué tal resulta. ¡Ánimo!

Y ponedle un nombre más chulo, coñe :D


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.