Página 1 de 20

FASE (Fucking Awesome Spectrum Engine)

Publicado: Lun, 06 Ene 2014, 18:18
por antoniovillena
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.

Re: Buñuelera

Publicado: Lun, 06 Ene 2014, 18:25
por na_th_an
A ver qué tal resulta. ¡Ánimo!

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

Re: Buñuelera

Publicado: Lun, 06 Ene 2014, 18:42
por antoniovillena
$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.

Re: Buñuelera

Publicado: Lun, 06 Ene 2014, 18:47
por angel
El Villenator! :lol:

Re: Buñuelera

Publicado: Lun, 06 Ene 2014, 18:55
por son_link
Joder, esto esta que o para :mrgreen:
A ver que tal os sale el experimento :cheer:

Re: Buñuelera

Publicado: Lun, 06 Ene 2014, 19:26
por antoniovillena
$this->bbcode_second_pass_quote('angel', 'E')l Villenator! :lol:


No vale porque somos 2.

Re: Buñuelera

Publicado: Lun, 06 Ene 2014, 19:55
por radastan
$this->bbcode_second_pass_quote('antoniovillena', '')$this->bbcode_second_pass_quote('angel', 'E')l Villenator! :lol:


No vale porque somos 2.


Return of the vengeance of the blood carnage epilogue of the first mutilation of the mutant zombie attack in ZX Spectrum bloodest memory routines library with exploding C languaje in a churrera style.

Suena que te cagas y las siglas dan muestra de ser algo grande.

Re: Buñuelera

Publicado: Lun, 06 Ene 2014, 20:17
por antoniovillena
:ymca:

Mola

Entonces lo llamaremos RotvotbceotfmotmzaiZSbmrlweCliacs para abreviar, y el que quiera (aunque sea algo obvio) que deduzca el nombre original.

Re: Buñuelera

Publicado: Lun, 06 Ene 2014, 21:33
por na_th_an
Va a molar poner

$this->bbcode_second_pass_code('', '#include "RotvotbceotfmotmzaiZSbmrlweCliacs.h"')

:lol:

Re: Buñuelera

Publicado: Lun, 06 Ene 2014, 22:34
por radastan
Esto va a ser épico.

:corchoneta: :corchoneta: :corchoneta: :corchoneta: :corchoneta:

Por cierto, deseando ver esa librería en C, la meteré de serie con el curso si o si. Ya tengo hasta un juego pensado para ella.