Página 7 de 9

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 11 Oct 2013, 10:39
por D_Skywalk
A ver hay cosas muy sencillas como por ejemplo en printer:
$this->bbcode_second_pass_code('', '//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:
$this->bbcode_second_pass_code('', '
print_str (10, 11, 79, " ");
print_str (10, 12, 79, " GAME OVER! ");
print_str (10, 13, 79, " ");
')
Y se queda en un sencillo:
$this->bbcode_second_pass_code('', '
print_str (10, 12, 79, " GAME OVER! ", TRUE);
')
Que como tengas mas de un texto te ahorras unos 100bytes por frase ^^_

Un Saludo!

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 11 Oct 2013, 10:40
por na_th_an
Vaya, eso mola :)

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 11 Oct 2013, 11:53
por D_Skywalk
:mrgreen: :mrgreen:

¿Tienes idea de por que esta optimización no funcionaba?
$this->bbcode_second_pass_code('', '
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
$this->bbcode_second_pass_code('', ' if(n_pant) { // sky - bug si pantalla es 0, se ejecutan todos los scripts - reportar
script = e_scripts [n_pant];
run_script ();
}
')
Ej:
$this->bbcode_second_pass_code('', '
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...
$this->bbcode_second_pass_code('', ' // 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:

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 11 Oct 2013, 12:05
por na_th_an
Estoy super liao, te contesto rápido y mal.

$this->bbcode_second_pass_quote('D_Skywalk', ':')mrgreen: :mrgreen:

¿Tienes idea de por que esta optimización no funcionaba?
$this->bbcode_second_pass_code('', '
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.

$this->bbcode_second_pass_quote('D_Skywalk', '
')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
$this->bbcode_second_pass_code('', ' if(n_pant) { // sky - bug si pantalla es 0, se ejecutan todos los scripts - reportar
script = e_scripts [n_pant];
run_script ();
}
')
Ej:
$this->bbcode_second_pass_code('', '
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.

$this->bbcode_second_pass_quote('D_Skywalk', 'T')ambié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 :)

$this->bbcode_second_pass_quote('D_Skywalk', 'L')uego poder hacer frames estáticos, aunque quizás tambien sea complicar un poco...
$this->bbcode_second_pass_code('', ' // 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.

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 11 Oct 2013, 12:13
por na_th_an
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:

$this->bbcode_second_pass_code('', '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

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 11 Oct 2013, 12:19
por na_th_an
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:

$this->bbcode_second_pass_code('', '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í:

$this->bbcode_second_pass_code('', '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:

$this->bbcode_second_pass_code('', '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

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 11 Oct 2013, 12:30
por D_Skywalk
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
$this->bbcode_second_pass_code('', '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:

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 11 Oct 2013, 12:37
por na_th_an
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:

$this->bbcode_second_pass_code('', '# 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.

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 11 Oct 2013, 12:52
por D_Skywalk
Perfe: así se quedan los bucles super optimizados y funcionan perfecto (THX!)
$this->bbcode_second_pass_code('', '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:

Re: Saludos desde una lejana galaxia! XD

Publicado: Vie, 11 Oct 2013, 13:01
por na_th_an
Apuntado :)