Proyecto Churrero: AVORCHA - Pentacorn Quest 128K- RELEASED!

For all things Churrera. ¿Estás haciendo un juego? ¿quieres proponer un cambio? ¿tienes alguna duda? ¡Cuéntanoslo!

Moderador: na_th_an

Nightwolf
Mensajes: 215
Registrado: Sab, 15 Oct 2011, 11:24

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Mensajepor Nightwolf » Sab, 01 Mar 2014, 13:09

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

Código: Seleccionar todo

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

Código: Seleccionar todo

   ' 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, "}"
Avatar de Usuario
na_th_an
Mensajes: 26413
Registrado: Vie, 09 Ene 2009, 12:18

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Mensajepor na_th_an » Sab, 01 Mar 2014, 13:57

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.
Como diría Rorshach: "Urm..."
Nightwolf
Mensajes: 215
Registrado: Sab, 15 Oct 2011, 11:24

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Mensajepor Nightwolf » Dom, 09 Mar 2014, 12:51

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! :)
Avatar de Usuario
son_link
Mensajes: 467
Registrado: Mar, 01 Oct 2013, 11:49
Ubicación: Atlantis, Galaxia Pegaso
Contactar:

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Mensajepor son_link » Dom, 09 Mar 2014, 13:45

Nightwolf escribió: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! :)

O activar una cuenta atrás, en plan que la base va a explotar, como por ejemplo pasa en algunos Metroid
LOAD TAPE ERROR
Imagen
Avatar de Usuario
na_th_an
Mensajes: 26413
Registrado: Vie, 09 Ene 2009, 12:18

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Mensajepor na_th_an » Dom, 09 Mar 2014, 13:52

Nightwolf escribió: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! :)


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.
Como diría Rorshach: "Urm..."
Avatar de Usuario
na_th_an
Mensajes: 26413
Registrado: Vie, 09 Ene 2009, 12:18

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Mensajepor na_th_an » Dom, 09 Mar 2014, 13:53

son_link escribió:
Nightwolf escribió: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! :)

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.

Código: Seleccionar todo

* 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
Como diría Rorshach: "Urm..."
Nightwolf
Mensajes: 215
Registrado: Sab, 15 Oct 2011, 11:24

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Mensajepor Nightwolf » Dom, 09 Mar 2014, 14:06

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! ;)
Avatar de Usuario
na_th_an
Mensajes: 26413
Registrado: Vie, 09 Ene 2009, 12:18

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Mensajepor na_th_an » Dom, 09 Mar 2014, 14:31

Nightwolf escribió: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?


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

Código: Seleccionar todo

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


Nightwolf escribió: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?


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.
Como diría Rorshach: "Urm..."
Nightwolf
Mensajes: 215
Registrado: Sab, 15 Oct 2011, 11:24

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Mensajepor Nightwolf » Dom, 09 Mar 2014, 23:51

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 ;)

Código: Seleccionar todo

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...
Avatar de Usuario
na_th_an
Mensajes: 26413
Registrado: Vie, 09 Ene 2009, 12:18

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Mensajepor na_th_an » Lun, 10 Mar 2014, 07:54

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:

Código: Seleccionar todo

   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).
Como diría Rorshach: "Urm..."

Volver a “La Churrera”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 8 invitados