Página 10 de 37

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Publicado: Sab, 01 Mar 2014, 13:09
por Nightwolf
¡Muchas gracias Na_th_an.

Permíteme que te corrija por si alguno quiere hacer lo mismo, sería :)

items [flags [FLAG_SLOT_SELECTED]]

Esto funciona muy bien cuando pulso la tecla Z:

$this->bbcode_second_pass_code('', '#ifdef MODE_128K
wyz_play_sound (0);
#else
peta_el_beeper (2);
#endif
flags [FLAG_SLOT_SELECTED] = (flags [FLAG_SLOT_SELECTED] + 1) % MSC_MAXITEMS;
display_items ();
//print_str (10, 10, 7, " "&flags [ITEM_SLOT_SELECTED-1]);

if (items [flags [FLAG_SLOT_SELECTED]] == 0) {
print_str (10, 10, 7, "NADA");
}
if (items [flags [FLAG_SLOT_SELECTED]] == 23) {
print_str (10, 10, 7, "BELLOTA NORMAL");
}

}
key_z_pressed = 1;
} else {
key_z_pressed = 0;
}
#endif ')

Pero me gustaría que cada vez que se lanza la función, actualice el texto:

display_items (void)

Veo que debería ponerlo en este archivo: msc.bas, ya que genera el archivo msc-config.h

Pero todo cambio que hago a msc.bas no vuelca :S ¿Dónde estoy metiendo la pata?

Imagino que sería meterle aquí el código en printf, algo tal que así:

$this->bbcode_second_pass_code('', ' ' Generate display_items
If itemSetOr = 0 Then
' Horizontal
print #f, "void display_items (void) {"
print #f, " its_p = " & itemSetX & ";"
print #f, " for (its_it = 0; its_it < MSC_MAXITEMS; its_it ++) {"
print #f, " draw_coloured_tile (its_p, " & itemSetY & ", items [its_it]);"
print #f, " if (its_it != flags [FLAG_SLOT_SELECTED]) {"
print #f, " sp_PrintAtInv (" & (itemSetY + 2) & ", its_p, 0, 0);"
print #f, " sp_PrintAtInv (" & (itemSetY + 2) & ", its_p + 1, 0, 0);"
print #f, " } else {"
print #f, " sp_PrintAtInv (" & (itemSetY + 2) & ", its_p, " & itemSelectClr & ", " & itemSelectC1 & ");"
print #f, " sp_PrintAtInv (" & (itemSetY + 2) & ", its_p + 1, " & itemSelectClr & ", " & itemSelectC2 & ");"
print #f, " }"
print #f, " its_p += " & itemSetStep & ";"
print #f, " }"
print #f, "if (items [flags [FLAG_SLOT_SELECTED]] == 23) {"
print #f, "print_str (10, 10, 7, "BELLOTA NORMAL");"
print #f, "}"
print #f, "}"')

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Publicado: Sab, 01 Mar 2014, 13:57
por na_th_an
Hay que recompilar el compilador de scripts. El archivo .bas es el código fuente de msc.exe, que es el compresor. Para compilarlo necesitas freeBasic.

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Publicado: Dom, 09 Mar 2014, 12:51
por Nightwolf
buenas :)

Una preguntilla, ¿sería posible que ON_TIMER_OFF se pueda indicar una pantalla, de tal forma que lo que se describa solo sea aplicable a esa pantalla?

De esa forma se pueden hacer un timer de cosas que sucedan solo en esa pantalla y ¡poner condiciones! :)

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Publicado: Dom, 09 Mar 2014, 13:45
por son_link
$this->bbcode_second_pass_quote('Nightwolf', 'b')uenas :)

Una preguntilla, ¿sería posible que ON_TIMER_OFF se pueda indicar una pantalla, de tal forma que lo que se describa solo sea aplicable a esa pantalla?

De esa forma se pueden hacer un timer de cosas que sucedan solo en esa pantalla y ¡poner condiciones! :)

O activar una cuenta atrás, en plan que la base va a explotar, como por ejemplo pasa en algunos Metroid

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Publicado: Dom, 09 Mar 2014, 13:52
por na_th_an
$this->bbcode_second_pass_quote('Nightwolf', 'b')uenas :)

Una preguntilla, ¿sería posible que ON_TIMER_OFF se pueda indicar una pantalla, de tal forma que lo que se describa solo sea aplicable a esa pantalla?

De esa forma se pueden hacer un timer de cosas que sucedan solo en esa pantalla y ¡poner condiciones! :)


No, para eso habría que cambiar profundamente la estructura de los scripts. De todos modos, dentro de ON_TIMER_OFF siempre puedes usar IF NPANT n para hacer cosas específicas del número de pantalla.

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Publicado: Dom, 09 Mar 2014, 13:53
por na_th_an
$this->bbcode_second_pass_quote('son_link', '')$this->bbcode_second_pass_quote('Nightwolf', 'b')uenas :)

Una preguntilla, ¿sería posible que ON_TIMER_OFF se pueda indicar una pantalla, de tal forma que lo que se describa solo sea aplicable a esa pantalla?

De esa forma se pueden hacer un timer de cosas que sucedan solo en esa pantalla y ¡poner condiciones! :)

O activar una cuenta atrás, en plan que la base va a explotar, como por ejemplo pasa en algunos Metroid


Eso se puede hacer desde la versión 3.99.2. Estas son las condiciones y acciones que se pueden hacer sobre el temporizador.

$this->bbcode_second_pass_code('', '* IF TIMER >= x
Descripción: el timer >= x
Opcode: 70 x

* IF TIMER <= x
Opcode: 71 x

* SET_TIMER a, b
Descripción: Timer = a, rate = b
Opcode: 70 a b

* TIMER_START
Descripción: enciende el temporizador
Opcode: 71

* TIMER_STOP
Descripción: apaga el temporizador
Opcode: 72')

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Publicado: Dom, 09 Mar 2014, 14:06
por Nightwolf
Gracias Nathan.

Sí, la cosa era poder tener condiciones.

Por ejemplo, para hacer pequeñas animaciones.

Porque cuando eltiempo llega a 0 miramos con IF NPANT n donde estamos, incrementamos el flag 1 por ejemplo. Y ahora tenemos que comprobar si el flag es 1, pintamos un tile, si el flag es 2, pintamos otro y reseteamos el flag para que empiece de 0. Sería estupendo poder usar algo así... ¿Habría alguna forma de simularlo?

Otra cosa, lo malo de la comprobación del IF TIMER >= x, solo vale cuando hay un "disparador" ¿verdad? ¿Cómo podría hacerse contínuamente comprobar ese tiempo?

Por cierto son_link, lo que comentas, ¡es algo que ya se puede hacer! ;)

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Publicado: Dom, 09 Mar 2014, 14:31
por na_th_an
$this->bbcode_second_pass_quote('Nightwolf', 'G')racias Nathan.

Sí, la cosa era poder tener condiciones.

Por ejemplo, para hacer pequeñas animaciones.

Porque cuando eltiempo llega a 0 miramos con IF NPANT n donde estamos, incrementamos el flag 1 por ejemplo. Y ahora tenemos que comprobar si el flag es 1, pintamos un tile, si el flag es 2, pintamos otro y reseteamos el flag para que empiece de 0. Sería estupendo poder usar algo así... ¿Habría alguna forma de simularlo?


Ya lo puedes usar, con IF NPANT n puedes saber en qué pantalla estás para hacer algo o no.

$this->bbcode_second_pass_code('', 'ON_TIMER_OFF
IF NPANT 3
THEN
INC FLAG 1, 1
END

IF NPANT 3
IF FLAG 1 = 1
THEN
...
END

IF NPANT 3
IF FLAG 1 = 2
THEN
...
END

...
END')

$this->bbcode_second_pass_quote('Nightwolf', 'O')tra cosa, lo malo de la comprobación del IF TIMER >= x, solo vale cuando hay un "disparador" ¿verdad? ¿Cómo podría hacerse contínuamente comprobar ese tiempo?


No se puede ejecutar el script continuamente, o el juego iría a 1 frame por segundo.

No sé qué quieres hacer realmente, pero creo que con lo que ya hay se puede hacer casi cualquier cosa.

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Publicado: Dom, 09 Mar 2014, 23:51
por Nightwolf
Justo eso Nathan :) Que muchas veces pensamos en más complicado de lo que puede ser.

Con esto es perfecto y así podrían hacerse pequeñas animaciones en lugares puntuales ;)

$this->bbcode_second_pass_code('', 'ON_TIMER_OFF
IF NPANT 3
THEN
INC FLAG 1, 1
END

IF NPANT 3
IF FLAG 1 = 1
THEN
...
END

IF NPANT 3
IF FLAG 1 = 2
THEN
...
END

...
END')

Lo del timer es por lo de hacer la comparación, al ser solo en los disparadores, queda un poco complicado su uso. Por ejemplo, si el timer es igual a 100 que pase algo. Pero eso solo se comprobará si en ese momento hay justo un disparador. Pero vamos, teniendo el ON_TIMER_OFF sirve muy bien para cualquier cosa :)

Otra preguntilla, ¿poder cambiar el color de un tile específico es muy complejo de hacer en C? Por ejemplo, un objeto quiero que parpadee en un momento determinado, o el ejemplo más habitual:
Un objeto está debajo del agua, con lo que queda feo la parte negra, lo suyo es que fuese azul, pero luego si lo tienes en el inventario, queda feo que se vea ese azul, y lo suyo sería cambiarlo por negro.

Hubo algo así en el juego de Jarlaxe, ¿verdad? Lo del parpadeo de los totems cuando habían sido recogidos...

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Publicado: Lun, 10 Mar 2014, 07:54
por na_th_an
Para resolver lo de debajo del agua/inventario yo usaría dos versiones del mismo tile, y emplearía la primera de fondo azul para pintar en el mapa y la segunda de fondo negro para meter en el inventario y las comprobaciones.

No se puede imprimir un tile de otro color desde scripting. Lo del tile parpadeante de Dogmole (o cualquier otro juego que use ONLY_ONE_OBJECT) es, por otro lado, como se comporta el motor para mostrar que llevas un objeto encima. No es algo que se pueda controlar desde scripting ni nada.

De todos modos, para imprimir un tile se hace esto:

$this->bbcode_second_pass_code('', ' t = 64 + (t << 2);
gen_pt = tileset + 2048 + t;
sp_PrintAtInv (y, x, *gen_pt ++, t ++);
sp_PrintAtInv (y, x + 1, *gen_pt ++, t ++);
sp_PrintAtInv (y + 1, x, *gen_pt ++, t ++);
sp_PrintAtInv (y + 1, x + 1, *gen_pt, t);')

Donde t inicialmente contiene el número de tile. gen_pt apunta adonde están los atributos del tile. Luego se hacen cuatro llamadas para imprimir los cuatro caracteres que lo componen, que están colocados de forma correlativa. sp_PrintAtInv toma los parámetros (y, x, color, caracter).