Página 16 de 20

Re: FASE (Fucking Awesome Spectrum Engine)

Publicado: Lun, 16 Jun 2014, 00:54
por antoniovillena
$this->bbcode_second_pass_quote('D_Skywalk', 'L')o que no funcionaría sería el BAT de windows, por eso te digo, yo es que no tengo windows donde mirar :?


Por eso no te preocupes. Haz que funcione el make.sh que yo portaré los cambios al make.bat

Re: FASE (Fucking Awesome Spectrum Engine)

Publicado: Lun, 16 Jun 2014, 13:30
por D_Skywalk
¿Que binario debo usar para saber cuanta memoria me queda? Con el final comprimido con z7 ese? :cafe:

Re: FASE (Fucking Awesome Spectrum Engine)

Publicado: Lun, 16 Jun 2014, 14:13
por antoniovillena
Yo lo muestro en loader.asm, sí en el propio código fuente con la directiva DISPLAY:

$this->bbcode_second_pass_code('', '
display "----------------------------"
display /A,0x8000-tmpbuf-stasp-mainrw, " bytes free"
display "____________________________"
')

Pero puedes generarlo antes si quieres, por ejemplo en step2.c. Todas las variables (tmpbuf, stasp y mainrw) se encuentran en ndefload.asm

Re: FASE (Fucking Awesome Spectrum Engine)

Publicado: Mar, 17 Jun 2014, 13:21
por D_Skywalk
He reescrito la demo y toda la base para que sea más C.

Hay muchas cosas que aun no termino de comprender como, activar las animaciones y cosas así pero por el momento te quiero compartir lo que llevo y si te parece bien lo subes ahora tu a git o la semana que viene ya lo subo yo, después de la JAM :)

los makefiles ahora genera los ficheros de una forma, creo que más clara. hay una lib, con sus binarios y he intentado no mezclar assets con código, al menos todo lo que he podido. Por que las utilidades del engine generan código ASM+BIN y sin entenderlo completamente es un poco complejo de estructurar...

Lo dicho lo subo aquí y así le echas un ojo tio :porro:
Ps. no cobran por poner {} XD
Ps2. no sabía que se podían usar comas en C :chiton:

Re: FASE (Fucking Awesome Spectrum Engine)

Publicado: Mar, 17 Jun 2014, 13:29
por D_Skywalk
Y ahora un post de dudas.


Estoy intentando animar al gatete y entre otras cosas no se explica en ningún lugar que significan:
sprites[].n o sprites[].f

El nombre no me da mucha pista y el código, que está muy optimizado, tampoco XD :adore:

-----------
Otra como poner texto?

Es que updatescore, no da mucha pista... que yo entienda XD

$this->bbcode_second_pass_code('', 'void update_scoreboard(){
unsigned int scr, dst;
char count;
scr= 0x3d80+killed*8;
dst= 0x50de|*shadow<<8;
for ( count= 0; count<8; count++ )
zxmem[dst]= zxmem[scr++]^0xff,
dst+= 0x100;
}')

thx! :boots:

Re: FASE (Fucking Awesome Spectrum Engine)

Publicado: Mar, 17 Jun 2014, 14:02
por antoniovillena
Le echaré un vistazo luego y te comentaré.

$this->bbcode_second_pass_quote('D_Skywalk', 'Y') ahora un post de dudas.
Estoy intentando animar al gatete y entre otras cosas no se explica en ningún lugar que significan:
sprites[].n o sprites[].f

El nombre no me da mucha pista y el código, que está muy optimizado, tampoco XD :adore:


sprites[].n es para decirle al engine qué sprite queremos mostrar en dicha entrada, en readme.html viene esta ayuda:

You have 16 different sprites so you must specify what sprite you want to show. Put the high bit to 1 if you want to disable the sprite (or to hide it)

sprites[].f es el cuarto byte de la entrada, no sirve para nada porque nada más se usan 3 bytes. Pero el array está alineado a 4 bytes para que sea más eficiente calcular los índices. En la demo lo uso a modo de variable para almacenar la dirección de movimiento de los enemigos. Quizás habría quedado más claro almacenar esta información en otro array.

$this->bbcode_second_pass_quote('D_Skywalk', '
')Otra como poner texto?

Es que updatescore, no da mucha pista... que yo entienda XD

$this->bbcode_second_pass_code('', 'void update_scoreboard(){
unsigned int scr, dst;
char count;
scr= 0x3d80+killed*8;
dst= 0x50de|*shadow<<8;
for ( count= 0; count<8; count++ )
zxmem[dst]= zxmem[scr++]^0xff,
dst+= 0x100;
}')

thx! :boots:


Es que update_scoreboard es una función en C a bajo nivel que escribe el numerito de abajo/derecha (cuántos enemigos llevas matados). Como sólo hay que mostrar un carácter lo que hago es pasar los 8 bytes que definen el carácter numérico desde la ROM a memoria de video. El '0' empieza en $3d80, así que dependiendo de la variable killed a mostrar, empiezo en $3d80, $3d88, etc...

El destino (dst) es la memoria de video. Ojo, para que funcione bien tengo que tener en cuenta la variable shadow, por lo que el byte de partida puede ser $50de (página 5) o bien $d0de (página 7). Lo último es un bucle que copia los 8 bytes a memoria de video. Como la memoria de video no es lineal, lo que hago aumentar el puntero dst en $100 en lugar de uno.

Re: FASE (Fucking Awesome Spectrum Engine)

Publicado: Mar, 17 Jun 2014, 14:11
por antoniovillena
Para animar el gatete tienes que usar sprites[].n a los frames que tengas animados. Si lo haces de la misma forma que la Churrera, sería así:


Re: FASE (Fucking Awesome Spectrum Engine)

Publicado: Mar, 17 Jun 2014, 14:40
por antoniovillena
Ok. Ya le he echado un ojo. Me parece bien como lo estás estructurando. El único pequeño cambio que haría es meter el mapa en la misma carpeta que gfx (si quieres le cambias el nombre). La razón es porque map sólo tendría un fichero y sobre todo porque a la hora de distribuir tu mapa es mucho más fácil tenerlo todo en una carpeta (para abrir un mapa con Tiled se necesitan los .pngs).

En cuanto a la omisión de las llaves al principio te puede resultar chocante, pero créeme, a la larga aumenta la legibilidad (la edición se empeora un poco por lo de las comas). Lo importante es que esté todo perfectamente indentado.

Los parámetros configurables los he concentrado todos en config.def (sobre todo los más importantes). Lo he hecho así para facilitarle la vida al usuario, sino tendría que ir cambiando parámetros en varios archivos. Se hacen 2 pasadas, step1 y step2. En cada pasada se procesan unos archivos y se crean otros. Algunos de los que se crean contienen parámetros para que los lea el ensamblador o el main.c. Algunos ejemplos son el define.asm que crea step1, y el defmap.asm, defload.asm y define.h que crea step2.

Archivos en ensamblador hay 2: engine.asm y loader.asm. El primero se ensambla 3 veces (con engine0.asm, engine1.asm y engine2.asm para las 3 posibles máquinas) y el segundo genera el cargador. El cargador es un poco lioso porque todo viene comprimido y se tiene que montar el mapa de memoria que viene en readme.html.

Esto es lo más importante, si necesitas que te explique algo más, pregunta.

Re: FASE (Fucking Awesome Spectrum Engine)

Publicado: Mar, 17 Jun 2014, 15:47
por D_Skywalk
Vale, ya entiendo para que vale n y f, muchas gracias :)

Ya tengo una animación básica andando! :jias:

Pero necesito ayuda con las fuentes, que no me han quedado muy claras. Si además quisiera cambiar las que vienen por defecto, tengo que cambiar el numbers4map, no?

algo así valdria para escribir un carácter?
$this->bbcode_second_pass_code('', '
void print_char(char character)
{
unsigned int scr, dst;

// aqui calculo la posicion de la letra, esto no funcionaria pero es para mostrarlo
character = character - 24;

scr= 0x3d80+character*8;
dst= 0x50de|*shadow<<8;
zxmem[dst] = zxmem[scr++] ^ 0xff;
// esto hara falta para el bucle supongo
// dst+= 0x100;
}
')

Gracias! :cafe:

Re: FASE (Fucking Awesome Spectrum Engine)

Publicado: Mar, 17 Jun 2014, 16:32
por antoniovillena
No. Los archivos numbers4map son para numerar los niveles de la herramienta GenTmx. Prueba a descomentar la línea del GenTmx que hay en el fase.bat (en tu caso make.sh) y observa el map.tmx con Tiled y te darás cuenta. El archivo number4map.c genera el archivo numbers4map.h a partir de numbers4map.png. GenTmx.c sólo tiene el include de numbers4map.h. Ni main.c ni ningún otro archivo relacionado con la demo hace uso de numbers4map.

En la demo se lee el caracter 8x8 del mapa de caracteres de la ROM, que empieza a partir de la dirección $3D00 de la misma. En $3D00 está el caracter ascii 32 (espacio), en $3D08 el 33 (admiración) y así sucesivamente hasta $3D80 que es donde comienzan los dígitos del 0 al 9 que son los que nos interesan.

Te recomiendo que uses las fuentes del spectrum para disponer de más RAM para tu juego. No obstante si decides usar tus propias fuentes, cuenta conmigo para hacer la herramienta generadora (a partir del .png) y una rutina printchar en ensamblador. Si lo ves muy necesario podemos incluirlo en el engine, aunque desactivable mediante directiva en config.def por si la gente quiere aprovechar RAM usando la fuente del spectrum. ¿Qué opinas?