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: Buñuelera

Mensajepor antoniovillena » Mar, 07 Ene 2014, 19:01

Ya está, ya he terminado la demo tal cual estaba, incluyendo el manejo del personaje por la pantalla con las teclas OPQA. Los archivos cambiados son main.c, bunuelera.h y loader.asm.

No tengo mucha idea en el manejo de este compilador, y no sé cómo decirle los registros que va a machacar la rutina FRAME, por eso me daba fallos. De momento lo he solventado salvando IX y BC, pero no es una solución definitiva.

Para los curiosos que no tengan ganas de meterse en el repositorio, este es el main.c:

Código: Seleccionar todo

#include  "bunuelera.h"

const unsigned char data[32]= {
  0x00, 0x42, 0x11, 0,
  0x08, 0x60, 0x60, 2,
  0x09, 0xa8, 0x48, 3,
  0x0a, 0x22, 0x02, 1,
  0x0b, 0xd0, 0x6e, 2,
  0x0c, 0xb6, 0x34, 3,
  0x0d, 0x32, 0x32, 1,
  0x04, 0x52, 0x5e, 0};

int main(){

  // variables
  int i, x= 0, y= 0;

  // pasar personajes a sprites
  for ( i = 0; i < 32; i++ )
    sprites[i>>2][i&3]= data[i];

  // inicializar engine
  INIT;

  // mostrar la primera pantalla al comienzo
  screen= 0;

  while(1){

    // esto hace que el engine procese un frame generando el escenario
    FRAME;

    // movimiento de los enemigos
    for ( i = 1; i < 8; i++ ){
      if( sprites[i][3]&1 )
        if( sprites[i][2] )
          sprites[i][2]--;
        else
          sprites[i][3]^= 1;
      else
        if( sprites[i][2]<0x90 )
          sprites[i][2]++;
        else
          sprites[i][3]^= 1;
      if( sprites[i][3]&2 )
        if( sprites[i][1]>0x08 )
          sprites[i][1]--;
        else
          sprites[i][3]^= 2;
      else
        if( sprites[i][1]<0xe8 )
          sprites[i][1]++;
        else
          sprites[i][3]^= 2;
    }

    // movimiento del protagonista
    if( ~KeybYUIOP & 0x01 ){ // P
      if( sprites[0][1]<0xee )
        sprites[0][1]++;
      else if( x < 11 )
        sprites[0][1]= 0x02,
        screen= y*12 + ++x;
    }
    else if( ~KeybYUIOP & 0x02 ){ // O
      if( sprites[0][1]>0x02 )
        sprites[0][1]--;
      else if( x )
        sprites[0][1]= 0xee,
        screen= y*12 + --x;
    }
    if( ~KeybGFDSA & 0x01 ){ // A
      if( sprites[0][2]<0xa0 )
        sprites[0][2]++;
      else if( y < 1 )
        sprites[0][2]= 0x01,
        screen= ++y*12 + x;
    }
    else if( ~KeybTREWQ & 0x01 ){ // Q
      if( sprites[0][2]>0x01 )
        sprites[0][2]--;
      else if( y )
        sprites[0][2]= 0xa0,
        screen= --y*12 + x;
    }
  }
}
Avatar de Usuario
D_Skywalk
Mensajes: 352
Registrado: Mar, 01 Oct 2013, 13:36

Re: Buñuelera

Mensajepor D_Skywalk » Mar, 07 Ene 2014, 23:01

Si lo de FAES era solo por hacer la coña XD

FASE, mola mucho ^^_

Voy revisando archivos :)
David Skywalker
Weblog: http://david.dantoine.org
antoniovillena
Mensajes: 494
Registrado: Jue, 24 Oct 2013, 15:52

FASE (Fucking Awesome Spectrum Engine)

Mensajepor antoniovillena » Mar, 07 Ene 2014, 23:23

Entonces decidido, se llamará así.

He escrito un mensaje al foro de ZX Basic para ver si nos pueden echar una mano con la demo, de momento espera aprobación, cuando lo aprueben os paso el link.

El interfaz SDCC está cogido con pinzas, por ejemplo sprites[2][1] quedaría más claro como sprites[2].x y la forma en que se lee el teclado no es muy adecuada. Espero que tengas más suerte con Z88DK.
antoniovillena
Mensajes: 494
Registrado: Jue, 24 Oct 2013, 15:52

Re: FASE (Fucking Awesome Spectrum Engine)

Mensajepor antoniovillena » Mar, 07 Ene 2014, 23:37

Ya que estoy voy a explicar cómo funcionan los tiles. Del procesado de los mismos se encarga GfxBu, nosotros le indicamos en un parámetro (el cuarto) qué modo utilizar. Independientemente del modo que hayamos escogido, GfxBu nos mostrará cuánto ocupan los tiles en los 4 modos disponibles: no index, index bitmap, index attr y full index con códigos 0, 1, 2 y 3 respectivamente. Mientras más indexado sea el modo más tardará la rutina de pintado, aunque no hay mucha diferencia de velocidad, por lo que es preferible escoger el modo que ocupe menos bytes, así dejaremos más memoria libre para nuestro juego.

Los tiles indexados producen mapeados más redundantes gráficamente, pero ocupan mucho menos. Esto quiere decir que a igualdad de tamaño, los tiles indexados permiten mapas con mayor número de tiles distintos, por tanto más variados que si se usaran tiles no indexados, por eso es una característica que conviene explotar.
antoniovillena
Mensajes: 494
Registrado: Jue, 24 Oct 2013, 15:52

Re: FASE (Fucking Awesome Spectrum Engine)

Mensajepor antoniovillena » Mar, 07 Ene 2014, 23:57

Ya me han respondido en el foro de ZX Basic

http://www.boriel.com/forum/zx-basic-co ... -t899.html
Avatar de Usuario
D_Skywalk
Mensajes: 352
Registrado: Mar, 01 Oct 2013, 13:36

Re: FASE (Fucking Awesome Spectrum Engine)

Mensajepor D_Skywalk » Mié, 08 Ene 2014, 02:01

Hay ya cosas a mejorar del engine en C propuesto, yo estoy metiendo defines y bueno del teclado, es curioso cuanto menos... A ver como podemos simplificarlo. De todas formas se entiende perfectamente ;)

Quizás lo menos C de todo lo que has preparado para SDCC son las macros INIT y FRAME. Pero ya digo todo es dejarlo que coja forma, pintaza tiene ya :D

Un Saludo! :corchoneta:
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 » Jue, 09 Ene 2014, 02:31

He simplificado todo lo que he podido el engine, cambiando los nombres de los archivos, agrupando los parámetros importantes en un archivo de configuración y reduciendo el número de líneas del .bat para que quede todo claro. También he creado un readme.txt donde explico en inglés lo justo y necesario para hacerlo funcionar.

A partir de ahora no incluyo código fuente en dicho paquete, salvo los imprescindibles engine.asm y loader.asm. Habría que recurrir al repositorio para obtener los demás.
Adjuntos
FASE.0.11.zip
(581.95 KiB) Descargado 405 veces
Avatar de Usuario
radastan
Mensajes: 692
Registrado: Vie, 20 Ago 2010, 12:54
Contactar:

Re: FASE (Fucking Awesome Spectrum Engine)

Mensajepor radastan » Jue, 09 Ene 2014, 09:11

Uf, tendré que mirarlo de arriba a abajo para poder adaptarlo a Z88DK, paso del SDCC (y menos ahora que Z88DK va a tenerlo en sus tripas también). Es más, deberíais aseguraros que será compatible con la próxima versión de Z88DK, más que nada porque los proyectos SDCC y Z88DK van destinados a ser uno desde esa versión.
antoniovillena
Mensajes: 494
Registrado: Jue, 24 Oct 2013, 15:52

Re: FASE (Fucking Awesome Spectrum Engine)

Mensajepor antoniovillena » Jue, 09 Ene 2014, 09:58

Ahora mismo sólo hay demos escritas en SDCC y en el ZX Basic de Boriel. No te puedo decir cual será el compilador C preferente porque esta decisión depende de D_Skywalk, es el que se encarga de escribir la parte C del engine.
Avatar de Usuario
radastan
Mensajes: 692
Registrado: Vie, 20 Ago 2010, 12:54
Contactar:

Re: FASE (Fucking Awesome Spectrum Engine)

Mensajepor radastan » Jue, 09 Ene 2014, 21:24

Sin problemas, a las malas me hago yo cuatro funciones para manejar esto como el mecanismo de un chupete desde Z88DK.

No lo veo complicado de usar.

Volver a “General”

¿Quién está conectado?

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