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

Re: FASE (Fucking Awesome Spectrum Engine)

Mensajepor antoniovillena » Lun, 16 Jun 2014, 00:54

D_Skywalk escribió:Lo 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
Avatar de Usuario
D_Skywalk
Mensajes: 352
Registrado: Mar, 01 Oct 2013, 13:36

Re: FASE (Fucking Awesome Spectrum Engine)

Mensajepor D_Skywalk » Lun, 16 Jun 2014, 13:30

¿Que binario debo usar para saber cuanta memoria me queda? Con el final comprimido con z7 ese? :cafe:
David Skywalker
Weblog: http://david.dantoine.org
antoniovillena
Mensajes: 494
Registrado: Jue, 24 Oct 2013, 15:52

Re: FASE (Fucking Awesome Spectrum Engine)

Mensajepor antoniovillena » Lun, 16 Jun 2014, 14:13

Yo lo muestro en loader.asm, sí en el propio código fuente con la directiva DISPLAY:

Código: Seleccionar todo

        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
Avatar de Usuario
D_Skywalk
Mensajes: 352
Registrado: Mar, 01 Oct 2013, 13:36

Re: FASE (Fucking Awesome Spectrum Engine)

Mensajepor D_Skywalk » Mar, 17 Jun 2014, 13:21

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:
Adjuntos
fase-test_sky-0.1.zip
fase-test en C (linur!)
(3.3 MiB) Descargado 120 veces
David Skywalker
Weblog: http://david.dantoine.org
Avatar de Usuario
D_Skywalk
Mensajes: 352
Registrado: Mar, 01 Oct 2013, 13:36

Re: FASE (Fucking Awesome Spectrum Engine)

Mensajepor D_Skywalk » Mar, 17 Jun 2014, 13:29

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

Código: Seleccionar todo

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:
David Skywalker
Weblog: http://david.dantoine.org
antoniovillena
Mensajes: 494
Registrado: Jue, 24 Oct 2013, 15:52

Re: FASE (Fucking Awesome Spectrum Engine)

Mensajepor antoniovillena » Mar, 17 Jun 2014, 14:02

Le echaré un vistazo luego y te comentaré.

D_Skywalk escribió: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.

D_Skywalk escribió:Otra como poner texto?

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

Código: Seleccionar todo

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.
antoniovillena
Mensajes: 494
Registrado: Jue, 24 Oct 2013, 15:52

Re: FASE (Fucking Awesome Spectrum Engine)

Mensajepor antoniovillena » Mar, 17 Jun 2014, 14:11

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í:

  • Los 8 primeros sprites (del 0 al 7) definen al protagonista.
  • En juegos con vista cenital se emplean 2 frames de animación, uno por cada dirección: arriba, abajo, izquierda y derecha.
  • En juegos con vista lateral tenemos del 0 al 3 para andar hacia la derecha y del 4 al 7 hacia la izquierda. La secuencia de animación es 0,1,2,1,0,1,2,1... para andar y 3 para saltar hacia la derecha. Para la izquierda es 4,5,6,5,4,5,6,5... para andar y 7 para saltar.
antoniovillena
Mensajes: 494
Registrado: Jue, 24 Oct 2013, 15:52

Re: FASE (Fucking Awesome Spectrum Engine)

Mensajepor antoniovillena » Mar, 17 Jun 2014, 14:40

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.
Avatar de Usuario
D_Skywalk
Mensajes: 352
Registrado: Mar, 01 Oct 2013, 13:36

Re: FASE (Fucking Awesome Spectrum Engine)

Mensajepor D_Skywalk » Mar, 17 Jun 2014, 15:47

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?

Código: Seleccionar todo

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:
David Skywalker
Weblog: http://david.dantoine.org
antoniovillena
Mensajes: 494
Registrado: Jue, 24 Oct 2013, 15:52

Re: FASE (Fucking Awesome Spectrum Engine)

Mensajepor antoniovillena » Mar, 17 Jun 2014, 16:32

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?

Volver a “General”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado