Saludos desde una lejana galaxia! XD

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

Avatar de Usuario
D_Skywalk
Mensajes: 352
Registrado: Mar, 01 Oct 2013, 13:36

Re: Saludos desde una lejana galaxia! XD

Mensajepor D_Skywalk » Vie, 11 Oct 2013, 10:39

A ver hay cosas muy sencillas como por ejemplo en printer:

Código: Seleccionar todo

//optimized print_str
void print_str (unsigned char x, unsigned char y, unsigned char c, unsigned char *s, unsigned char border) {
   while (*s)   {
       if(border){
            sp_PrintAtInv (y - 1, x, c, 0); //SPACE CHR is 0 (32 - 32)
            sp_PrintAtInv (y + 1, x, c, 0);
      }
        sp_PrintAtInv (y, x ++, c, (*s ++) - 32);
   }
}

De esta forma no hay que hacer algo como:

Código: Seleccionar todo

   print_str (10, 11, 79, "            ");
   print_str (10, 12, 79, " GAME OVER! ");
   print_str (10, 13, 79, "            ");

Y se queda en un sencillo:

Código: Seleccionar todo

   print_str (10, 12, 79, " GAME OVER! ", TRUE);

Que como tengas mas de un texto te ahorras unos 100bytes por frase ^^_

Un Saludo!
David Skywalker
Weblog: http://david.dantoine.org
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Saludos desde una lejana galaxia! XD

Mensajepor na_th_an » Vie, 11 Oct 2013, 10:40

Vaya, eso mola :)
Como diría Rorshach: "Urm..."
Avatar de Usuario
D_Skywalk
Mensajes: 352
Registrado: Mar, 01 Oct 2013, 13:36

Re: Saludos desde una lejana galaxia! XD

Mensajepor D_Skywalk » Vie, 11 Oct 2013, 11:53

:mrgreen: :mrgreen:

¿Tienes idea de por que esta optimización no funcionaba?

Código: Seleccionar todo

void game_over (void) {
...      
   gpit = 4;
   while (gpit--)
      peta_el_beeper (7);
   peta_el_beeper (9);
   
...
}


Empieza a dar vueltas sin parar, aunque sea unsigned llega a 0... :?

Luego hay un bug en el sistema de scripts si la pantalla es 0, se ejecutan todos los scripts. Yo añadí esto para que no la liara XD

Código: Seleccionar todo

   if(n_pant) { // sky - bug si pantalla es 0, se ejecutan todos los scripts - reportar
       script = e_scripts [n_pant];
       run_script ();
   }

Ej:

Código: Seleccionar todo

ENTERING SCREEN 13 ; Pantalla final, Win Game condition!
   IF TRUE
   THEN
       WIN GAME
   END
END


También añadí un parámetro de configuración mas que tienes encima, no siempre necesitas ejecutar en los juegos los scripts generales, pero vamos esto es una optimización que hice yo por que si no no me cabía, quizás sea ya demasiado...

Luego poder hacer frames estáticos, aunque quizás tambien sea complicar un poco...

Código: Seleccionar todo

         // sprites with greater count are static
         if( en_an [gpit].count <= 4 ) {
         // Animate
             en_an [gpit].count ++;
             if (en_an [gpit].count == 4) {
                en_an [gpit].count = 0;
                en_an [gpit].frame = !en_an [gpit].frame;
                en_an [gpit].next_frame = enem_frames [en_an [gpit].base_frame + en_an [gpit].frame];
             }
         }

Cualquier cosa con el count mayor de 4 se considera ya estático (yo la tengo inicializada a 0xFF para la plataforma XD)

De memoria esto es lo que recuerdo XD

Un Saludo! :corchoneta:
David Skywalker
Weblog: http://david.dantoine.org
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Saludos desde una lejana galaxia! XD

Mensajepor na_th_an » Vie, 11 Oct 2013, 12:05

Estoy super liao, te contesto rápido y mal.

D_Skywalk escribió::mrgreen: :mrgreen:

¿Tienes idea de por que esta optimización no funcionaba?

Código: Seleccionar todo

void game_over (void) {
...      
   gpit = 4;
   while (gpit--)
      peta_el_beeper (7);
   peta_el_beeper (9);
   
...
}


Empieza a dar vueltas sin parar, aunque sea unsigned llega a 0... :?


Puede ser por cualquier paranoia del compilador. Sé que tiene algunos problemas. Prueba --gpit a ver, no vaya a ser por paranoias de orden de evaluación y precedencia.

D_Skywalk escribió:Luego hay un bug en el sistema de scripts si la pantalla es 0, se ejecutan todos los scripts. Yo añadí esto para que no la liara XD

Código: Seleccionar todo

   if(n_pant) { // sky - bug si pantalla es 0, se ejecutan todos los scripts - reportar
       script = e_scripts [n_pant];
       run_script ();
   }

Ej:

Código: Seleccionar todo

ENTERING SCREEN 13 ; Pantalla final, Win Game condition!
   IF TRUE
   THEN
       WIN GAME
   END
END



Esto lo tengo que mirar más despacio, porque no tiene sentido que ejecute todos los scripts (sobre tengo juegos en los que pasan cosas en la pantalla 0 y no he visto ningún problema). ¿Será un efecto colateral? Tengo que mirar eso porque no sé cuál puede ser el problema. Se ejecuta el script que diga el puntero metido en un array, y ninguno más. Voy a comprobar bien las banderas de los bucles.

También voy a mirar tu msc.h, porque a lo mejor es una paranoia del compilador de scripts.

D_Skywalk escribió:También añadí un parámetro de configuración mas que tienes encima, no siempre necesitas ejecutar en los juegos los scripts generales, pero vamos esto es una optimización que hice yo por que si no no me cabía, quizás sea ya demasiado...


Bueno, ahorrar siempre está bien :)

D_Skywalk escribió:Luego poder hacer frames estáticos, aunque quizás tambien sea complicar un poco...

Código: Seleccionar todo

         // sprites with greater count are static
         if( en_an [gpit].count <= 4 ) {
         // Animate
             en_an [gpit].count ++;
             if (en_an [gpit].count == 4) {
                en_an [gpit].count = 0;
                en_an [gpit].frame = !en_an [gpit].frame;
                en_an [gpit].next_frame = enem_frames [en_an [gpit].base_frame + en_an [gpit].frame];
             }
         }

Cualquier cosa con el count mayor de 4 se considera ya estático (yo la tengo inicializada a 0xFF para la plataforma XD)

De memoria esto es lo que recuerdo XD

Un Saludo! :corchoneta:


Esto es que veo que requiere demasiada customización y embrolla aún más si cabe el tema de la gestión de sprites (que es algo que tengo que BORRAR y REESCRIBIR, pero que no he hecho aún porque soy el tonto de la compatibilidad hacia atrás). Quizá documentarlo y proponerlo como "modificación sencilla" estaría bien.

Luego te digo más, que ando liao.
Como diría Rorshach: "Urm..."
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Saludos desde una lejana galaxia! XD

Mensajepor na_th_an » Vie, 11 Oct 2013, 12:13

Mirando rápidamente tu msc.h veo que el msc ha generado un putero para el entering 0 que no debería haber generado, así que el bug tiene que estar en el compilador:

Código: Seleccionar todo

unsigned char *e_scripts [] = {
    mscce_9, 0, 0, mscce_0, mscce_0, 0, 0, mscce_1, 0, mscce_4, 0, mscce_6, mscce_2, mscce_9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, mscce_8, 0, 0, 0, 0, 0, 0, 0, 0, mscce_3, 0, mscce_5, mscce_7, 0, 0, 0, 0, 0, 0
};


Si te fijas para e_scripts [0] se apunta al mismo sitio que para e_scripts [13], por alguna razón. Cacanut. Voy a mirar bien el msc.

De hecho, no es el único desbarajuste. Algo muy chungo he tenido que hacer con la última versión XD
Como diría Rorshach: "Urm..."
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Saludos desde una lejana galaxia! XD

Mensajepor na_th_an » Vie, 11 Oct 2013, 12:19

Vaya, ya sé por qué es XD

Es porque el parser es muy "vago" y no comprueba errores, y las construcciones así se permiten y toman en cuenta:

Código: Seleccionar todo

ENTERING SCREEN 4, 5, 6


para definir algo común para las pantallas 4, 5 y 6. El parser es muy vago, ya te digo, y lo único que hace es interpretar todas las palabras que no sean "comas" después del "SCREEN".

El problema viene aquí:

Código: Seleccionar todo

ENTERING SCREEN 13 ; Pantalla final, Win Game condition!


El compilador interpreta como "números" el ";", "Pantalla", "Final", "Win", "Game" y "condition!" que, como no son números, freeBasic evalúa a 0 :lol:

Más pifostio es esto:

Código: Seleccionar todo

ENTERING SCREEN 3 ; Entramos en la pantalla 4


Que ha añadido esas clausulas a las pantallas 3, y 4. También a la 0, pero eso fue sobrescrito por el de la 13 posteriormente.

Mueve los comentarios a una linea vacía y todo funcionará correctamente. Vale, me tengo que acordar de decir en el tutorial que no hay que poner comentarios pegados en las lineas XD
Como diría Rorshach: "Urm..."
Avatar de Usuario
D_Skywalk
Mensajes: 352
Registrado: Mar, 01 Oct 2013, 13:36

Re: Saludos desde una lejana galaxia! XD

Mensajepor D_Skywalk » Vie, 11 Oct 2013, 12:30

Ostias no me digas eso y sólo pasa en el entering o en todas? XD

Joder, eso hay que arreglarlo porque es muy útil poder documentar por que haces cada cosa :?
Yo al día siguiente no me acuerdo de nada XD

Y ya te comenté que si pudieramos nombrar a las FLAGS sería como la apoteosis XD

Algo como

Código: Seleccionar todo

SET NAMEFLAG 5 = PETARDO
IF FLAG PETARDO = 1 ; IMPLOSION! XD


Un Saludo y viste el barril caer? XDDDD
Pd: deberíamos montar un github :dalefran:
David Skywalker
Weblog: http://david.dantoine.org
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Saludos desde una lejana galaxia! XD

Mensajepor na_th_an » Vie, 11 Oct 2013, 12:37

Pasará en todas las etiquetas que marquen el principio de una sección. Puedes seguir comentando, yo mismo lo hago, pero en la linea de arriba o en la de abajo. Funcionará bien:

Código: Seleccionar todo

# Pantalla del final
ENTERING SCREEN 3
# en esta pantalla se acaba todo


No te preocupes, arreglaré el msc para que sólo detecte números, o definiré bien un caracter para marcar los comentarios e ignoraré todo lo que viene después. Pero hasta la próxima versión...

Ten en cuenta que, en un principio, esto lo hicimos para nosotros, así que tampoco nos hemos esforzado en dejarlo muy "user friendly".

Lo de las etiquetas lo tengo apuntado también, don't worry.
Como diría Rorshach: "Urm..."
Avatar de Usuario
D_Skywalk
Mensajes: 352
Registrado: Mar, 01 Oct 2013, 13:36

Re: Saludos desde una lejana galaxia! XD

Mensajepor D_Skywalk » Vie, 11 Oct 2013, 12:52

Perfe: así se quedan los bucles super optimizados y funcionan perfecto (THX!)

Código: Seleccionar todo

void game_over (void) {

   print_str (10, 12, 79, " GAME OVER! ", TRUE);
   sp_UpdateNow ();
      
   gpit = 4;
   do{
      peta_el_beeper (7);
   }while (--gpit);
   peta_el_beeper (9);
   
   espera_activa (500);
}

+20 bytes

Un Saludo y un poquito de.. :corchoneta:
David Skywalker
Weblog: http://david.dantoine.org
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Saludos desde una lejana galaxia! XD

Mensajepor na_th_an » Vie, 11 Oct 2013, 13:01

Apuntado :)
Como diría Rorshach: "Urm..."

Volver a “General”

¿Quién está conectado?

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