Terminare mi juego churrero? ;)

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

Moderador: na_th_an

Avatar de Usuario
elborra
Mensajes: 209
Registrado: Dom, 12 Ene 2014, 14:37

Re: Terminare mi juego churrero? ;)

Mensajepor elborra » Mié, 08 Jul 2015, 20:32

Buenas fupinet,

1. La musica en 128K puedes pararla con wyz_stop_sound (); y no, no hay un comando ya definido en el motor de clausulas. Pero como bien dices con meter al principio de ese EXTERN la función que te he puesto lo tendrás perfecto.

2. Como dices hay muchas formas, la más sencilla que se me ocurre es crear un offset y precalcular n (en extern.h y la funcion do_extern_action (unsigned char n) antes de hacer el switch dependiendo del idima; pero incluso antes de esto primero tendrías que decidir donde va a ir la selección de idioma: al principio antes del menu, en el propio menu, durante el juego...
Si necesitas que te diga como hacerlo necesitaría saber que estas "implementando" en el extern. ¿puede ser que las "intros" y los textos exclusivamente?. Si me pasas el extern.h siempre puedo ver facilmente como lo tienes distribuido y ponerte el código que necesitarias. ¿español e inglés? ¿no? ¿o planeas poner más?


fupinet escribió:Pues la verdad no lo habia pensado muchas gracias por el consejo. Dejaré un intro de 2 imágenes como mucho. O le dare una buena pensada.
dos cosillas..
1) Al final del juego, sale unas letras con el extern disparado desde el script, no pega mucho que la musica del juego siga sonando. He intentado pararla en el mismo sitio desde se ejecuta el extern (que es al matar todos los enemigos) con SOUND_STOP(me lo invento xD) pero no funciona jajajajaj no se si existe un comando en el script para eso :D
2) ya que tengo lo del "language" me he preguntado como puedo poner los textos de extern en el idioma que corresponda. Creo que se puede de varias formas..una poniendo un if que dependiendo del valor de language carge extern_es o extern_en o otra forma supongo que poner todos los extern juntos en un archivo y llamarlos dependiendo del idioma...alguna idea de como hacer esto?

Mucha caña hoy no se como agradecertelo te debo un cafe...que coño unas pocas de cervezas! ajajajaj

Muchas gracias
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Terminare mi juego churrero? ;)

Mensajepor na_th_an » Jue, 09 Jul 2015, 07:55

Básicamente eso. La Churrera admite pasar a Extern un valor de 0 a 127. Supongo que la mayoría de esos números los tendrás libres. Puedes ampliar la funcionalidad del script todo lo que necesites, por ejemplo para parar la música con un EXTERN n, con n un número que no estés usando.

Sobre lo otro, el módulo de intro que te pasé tiene definidas X cadenas para el juego. Lo que hicimos en Goku Mal para tener los dos idiomas es poner después las X cadenas de nuevo en el otro idioma. Cuando le pides la cadena "N", dependiendo del idioma, mostrará N o X+N. Si quieres poner más idiomas, tendrás que modificarlo para que al pedir N, muestre N, X+N, 2*X+N, 3*X+N... Si en la variable de idioma le das los valores 0, 1, 2, 3... ya lo tienes hecho y apenas tendrás que modificar, sólo añadir los mismos textos una y otra vez en el mismo orden de forma secuencial, en los distintos idiomas. Sólo poner un menú que asigne a la variable de idioma el valor correcto.
Como diría Rorshach: "Urm..."
fupinet
Mensajes: 112
Registrado: Vie, 05 Jun 2015, 12:55

Re: Terminare mi juego churrero? ;)

Mensajepor fupinet » Jue, 09 Jul 2015, 12:58

Holaaa esa gente buena ahi!!!! ...siento mucho si os molesto pero es que os echado de menos!
el codigo que me ha funcionado es este no se si era eso... :cheer: :

Código: Seleccionar todo

void do_extern_action (unsigned char n) {
   unsigned char text_offs = 6 * language;
   saca_a_todo_el_mundo_de_aqui ();
   draw_rectangle (4, BOX_Y, 26, BOX_Y + 1 + *(cads [n - 1]), 32);
   draw_texts (4, 7, 32, cads [n - 1 + text_offs], 24);
   espera_activa (1000);


Ahora lo otro me da vergüenza decirlo pero no lo pillo....
he puesto wyz_stop_sound (); en el script asi..

Código: Seleccionar todo

ENTERING ANY
   IF ENEMIES_KILLED_EQUALS 24
   IF FLAG 4 = 0
   THEN
      SET FLAG 4 = 1
         wyz_stop_sound ();
     EXTERN 5
      WARP_TO 23, 2, 8
   END
END

y no logicamente no va xD
he probado en poner

Código: Seleccionar todo

ENTERING ANY
   IF ENEMIES_KILLED_EQUALS 24
   IF FLAG 4 = 0
   THEN
      SET FLAG 4 = 1
         EXTERN 99
     EXTERN 5
      WARP_TO 23, 2, 8
   END


extern 99 como me dijiste...poner un numero que no tenga el extern creado y lo que hace es que se para el juego un tiempo y salta el siguiente extern...pero la musica sigue sonando.

Un saludo y gracias!!!
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Terminare mi juego churrero? ;)

Mensajepor na_th_an » Jue, 09 Jul 2015, 13:30

Pero en tu función extern tienes que tener código que detecte el 99 y pare el sonido. Si no, el EXTERN 99 no va a hacer nada. Tú ahora tienes esto:

Código: Seleccionar todo

void do_extern_action (unsigned char n) {
   saca_a_todo_el_mundo_de_aqui ();
   draw_rectangle (4, BOX_Y, 26, BOX_Y + 1 + *(cads [n - 1]), 15);
   draw_texts (4, 7, 15, cads [n - 1], 24);
   espera_activa (1000);
}


Ese código lo que hace es mostrar el texto según "n" (ahora mismo te estaría mostrando el texto 99... tienes suerte de que no se te cuelgue :D). Puedes hacer esto:

Código: Seleccionar todo

void do_extern_action (unsigned char n) {
   if (n == 99) {
      wyz_stop_sound ();
   } else {
      saca_a_todo_el_mundo_de_aqui ();
      draw_rectangle (4, BOX_Y, 26, BOX_Y + 1 + *(cads [n - 1]), 15);
      draw_texts (4, 7, 15, cads [n - 1], 24);
      espera_activa (1000);
   }
}
Como diría Rorshach: "Urm..."
fupinet
Mensajes: 112
Registrado: Vie, 05 Jun 2015, 12:55

Re: Terminare mi juego churrero? ;)

Mensajepor fupinet » Jue, 09 Jul 2015, 16:16

:picha:
terminado gracias a vosotros!
Ahora me toca componer musica ...
na_th_an una pregunta que te hice antes....cuando el personaje salta sobre un espejo hay ahora en la version de 128K un pequeño rebote...es posible dejarlo como estaba en la version de 48k..sin rebote..
GRACIAS !!
Un saludo.
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Terminare mi juego churrero? ;)

Mensajepor na_th_an » Jue, 09 Jul 2015, 23:39

Sí, claro, mañana te lo miro. Pero te advierto: el rebote se puso cuando jarlaxe pasó a 128K sus nuevas aventuras de Dogmole. La razón fue que en 48K, al parar el sonido la ejecución (porque es la CPU quien lo genera y no puede hacer nada mientras), quedaba bien... pero en 128K, al no parar el sonido la ejecución, quedaba un poco raro.

De todos modos mañana lo miro y te digo qué quitar.
Como diría Rorshach: "Urm..."
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Terminare mi juego churrero? ;)

Mensajepor na_th_an » Vie, 10 Jul 2015, 11:40

En engine.h, a partir de la linea 1925, tenemos:

Código: Seleccionar todo

#ifdef MODE_128K
               wyz_play_sound (6);                              
               en_an [gpit].state = GENERAL_DYING;
               en_an [gpit].count = 12;
               en_an [gpit].next_frame = sprite_17_a;
               malotes [enoffsmasi].t |= 16;         // Mark as dead
               player.killed ++;
               player.vy = -256;
               
#else
               en_an [gpit].next_frame = sprite_17_a;
               sp_MoveSprAbs (sp_moviles [gpit], spritesClip, en_an [gpit].next_frame - en_an [gpit].current_frame, VIEWPORT_Y + (gpen_cy >> 3), VIEWPORT_X + (gpen_cx >> 3), gpen_cx & 7, gpen_cy & 7);
               en_an [gpit].current_frame = en_an [gpit].next_frame;
               sp_UpdateNow ();

               peta_el_beeper (5);
               en_an [gpit].next_frame = sprite_18_a;
               malotes [enoffsmasi].t |= 16;         // Mark as dead
               
               player.killed ++;
#endif               


El #ifdef controla qué porción de código se compila al pisar el enemigo, dependiendo del modo 128 o 48K. Para dejarlo como en el modo 48, sólo hay que comentar algunas lineas, así:

Código: Seleccionar todo

/*#ifdef MODE_128K
               wyz_play_sound (6);                              
               en_an [gpit].state = GENERAL_DYING;
               en_an [gpit].count = 12;
               en_an [gpit].next_frame = sprite_17_a;
               malotes [enoffsmasi].t |= 16;         // Mark as dead
               player.killed ++;
               player.vy = -256;
               
#else*/
               en_an [gpit].next_frame = sprite_17_a;
               sp_MoveSprAbs (sp_moviles [gpit], spritesClip, en_an [gpit].next_frame - en_an [gpit].current_frame, VIEWPORT_Y + (gpen_cy >> 3), VIEWPORT_X + (gpen_cx >> 3), gpen_cx & 7, gpen_cy & 7);
               en_an [gpit].current_frame = en_an [gpit].next_frame;
               sp_UpdateNow ();

               peta_el_beeper (5);
               en_an [gpit].next_frame = sprite_18_a;
               malotes [enoffsmasi].t |= 16;         // Mark as dead
               
               player.killed ++;
//#endif               


El problema es el que te comenté, por eso se puso un comportamiento específico para 128K.
Como diría Rorshach: "Urm..."
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Terminare mi juego churrero? ;)

Mensajepor na_th_an » Vie, 10 Jul 2015, 11:41

También puedes hacer esto, creo que puede ser mejor solución: sólo comentar la linea donde se produce el saltito:

Código: Seleccionar todo

#ifdef MODE_128K
               wyz_play_sound (6);                              
               en_an [gpit].state = GENERAL_DYING;
               en_an [gpit].count = 12;
               en_an [gpit].next_frame = sprite_17_a;
               malotes [enoffsmasi].t |= 16;         // Mark as dead
               player.killed ++;
               //player.vy = -256;
               
#else
               en_an [gpit].next_frame = sprite_17_a;
               sp_MoveSprAbs (sp_moviles [gpit], spritesClip, en_an [gpit].next_frame - en_an [gpit].current_frame, VIEWPORT_Y + (gpen_cy >> 3), VIEWPORT_X + (gpen_cx >> 3), gpen_cx & 7, gpen_cy & 7);
               en_an [gpit].current_frame = en_an [gpit].next_frame;
               sp_UpdateNow ();

               peta_el_beeper (5);
               en_an [gpit].next_frame = sprite_18_a;
               malotes [enoffsmasi].t |= 16;         // Mark as dead
               
               player.killed ++;
#endif               
Como diría Rorshach: "Urm..."
fupinet
Mensajes: 112
Registrado: Vie, 05 Jun 2015, 12:55

Re: Terminare mi juego churrero? ;)

Mensajepor fupinet » Vie, 10 Jul 2015, 22:05

Ok he comentado solo esa linea y he tocao un poco un parametro para que no se vea durante tanto tiempo el sprite de la muerte.
Me gusta mucho el rebote que tenia pero no para este juego. El rebote me recuerda a juegos como el mario bros. aunque un poco mas alto y puede ir rebontando mientras saltas sobre varios enemigos..
Una pregunta por curiosidad....ese mismo rebote no se le puede aplicar a la version de 48k?

Una vez mas Muchas Gracias !!!!!! :picha:
Última edición por fupinet el Vie, 10 Jul 2015, 22:09, editado 1 vez en total.
fupinet
Mensajes: 112
Registrado: Vie, 05 Jun 2015, 12:55

Re: Terminare mi juego churrero? ;)

Mensajepor fupinet » Vie, 10 Jul 2015, 22:07

Ok he comentado solo esa linea y he tocao un poco un parametro para que no se vea durante tanto tiempo el sprite de la muerte.
Me gusta mucho el rebote que tenia pero no para este juego. El rebote me recuerda a juegos como el mario bros. aunque un poco mas alto y puede ir rebotando mientras saltas sobre varios enemigos..
Una pregunta por curiosidad....ese mismo rebote no se le puede aplicar a la version de 48k?

Una vez mas Muchas Gracias !!!!!! :picha:

Volver a “La Churrera”

¿Quién está conectado?

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