[JUEGO] Guitarfun PC 3.5 Online (homebrew)

1, 2, 3, 4, 5
Buenas, impresionante el port, espero que podamos verlo pronto en Wii (jeje) y en futuras consolas, porque este juego siempre será igual de bueno y entretenido.

Además gracias a ser de pc, POR FIN podemos jugar con 2 guitarras aunque no sean de la misma consola (son unos sacaperras los cabrones del guitar hero, que hay 3 o 4 guitarras diferentes...).

Solo encuentro una pega, aunque es probable que sea culpa de mi adaptador para la guitarra de ps2, y es que no me pilla el eje del trémolo :S

Creo que debe ser que los drivers, al ser para le mando de psx, la cuestion es que por mucho que toque el tremolo no observo ningun cambio en la herramienta de testeo de windows.

Alguien sabe como puedo instalar unos drivers que me pillen el eje de la palanca del tremolo?

ByR escribió:Alguno lo ha jugado con la guitarra de wii? esque por este juego me compraría un cacharro de esos para bluetooth, pero quiero saber que rula bien.


Deberia rular perfectamente, pk el mando lo hace y la guitarra hace tiempo que esta soportada por algun program de estos que hay para interactuar con el pc, asi que deberías poder usarla en el juego sin problemas.
yamo100 escribió:oki, pues guay. dejare de jugar con el teclado y me pondre el pad xD

salu2.
Anda tio vete al pedo xDDDD
Anda que no mola usar el teclado como la guitarra xDDD

Asi se pierde todo el encanto, por diossss. (A falta de poder coger la guitarra de la xbox360 en el pc, que aunque se pueda no tengo los medios para ello)
suloku escribió:Buenas, impresionante el port, espero que podamos verlo pronto en Wii (jeje) y en futuras consolas, porque este juego siempre será igual de bueno y entretenido.

Además gracias a ser de pc, POR FIN podemos jugar con 2 guitarras aunque no sean de la misma consola (son unos sacaperras los cabrones del guitar hero, que hay 3 o 4 guitarras diferentes...).

Solo encuentro una pega, aunque es probable que sea culpa de mi adaptador para la guitarra de ps2, y es que no me pilla el eje del trémolo :S

Creo que debe ser que los drivers, al ser para le mando de psx, la cuestion es que por mucho que toque el tremolo no observo ningun cambio en la herramienta de testeo de windows.

Alguien sabe como puedo instalar unos drivers que me pillen el eje de la palanca del tremolo?



Hola,

Tu problema es que necesitas cambiar de modo la guitarra.

Me explico:

En modo normal, la guitarra se comporta como el PAD digital de PSX y no como Dual Shock.

El mando necesita recibir un comando, para cambiar a modo Dual Shock, cosa que tambien puedes hacer desde un Dual Shock presionando el pulsador ANALOG.

Desgraciadamente, la Guitarra carece de dicho pulsador, luego no puedes conmutarla de forma manual (y no se si la electronica d ela guitarra permite hacer una ñapa de añadirle un pulsador para tal cuestion)

Puedes probar a enchufar un Dual Shock 2 y encender el piloto y luego cambiarlo por la Guitarra (a lo mejor te funciona)

Yo por ese problema, me pille el adaptador Ardistel que menciono, pues pasa a Dual Shock 2 de forma automatica.
Sly_Marbo135 escribió:Anda tio vete al pedo xDDDD
Anda que no mola usar el teclado como la guitarra xDDD

Asi se pierde todo el encanto, por diossss. (A falta de poder coger la guitarra de la xbox360 en el pc, que aunque se pueda no tengo los medios para ello)

jejeje xDD, si es que a sido probar la demo del guitar3 en la 360, y ya me he afianzado a jugar por el pad xDD

salu2.
Aunque ya te lo dije por MP quiero dejar constancia en el hilo oficial del juego: enhorabuena por el estupendo trabajo que has hecho y gracias por compartirlo con nosotros :)
Hermes escribió:Tu problema es que necesitas cambiar de modo la guitarra.


Vaia hombre, tambien es mala suerte.

Es muy descabellada la idea de usar el emu de ps2 para ejecutar algun juego de los que activan el analogico automaticamente a ver si funciona?

Aunque bueno, eso mejor lo compruebo con un mando...y pensandolo bien es bastante absurdo pensar que funcionara.
Probado y ya funciona a la perfeccion con la guitarra de la 360.
Muchas gracias, he notado un pequeño fallo si es que es un fallo: cuando fallas varias notas seguidas y la siguiente la has pulsado bien en su momento es como si no se acompasara al ritmo y tambien la fallas, es raro de explicar pero si tocais una cancion con muchas notas seguidas en el mismo traste y falles un par de ellas, luego tienes que adaptarte para corregir bien el ritmo. Esto por ejemplo en el guitar hero de la 360 no pasa.
Es como si se descompensara la cancion con las notas....

Lo comento como buscapegas.... porque el programa es la leche..
jdeacon escribió:Probado y ya funciona a la perfeccion con la guitarra de la 360.
Muchas gracias, he notado un pequeño fallo si es que es un fallo: cuando fallas varias notas seguidas y la siguiente la has pulsado bien en su momento es como si no se acompasara al ritmo y tambien la fallas, es raro de explicar pero si tocais una cancion con muchas notas seguidas en el mismo traste y falles un par de ellas, luego tienes que adaptarte para corregir bien el ritmo. Esto por ejemplo en el guitar hero de la 360 no pasa.
Es como si se descompensara la cancion con las notas....

Lo comento como buscapegas.... porque el programa es la leche..


Bueno, te puedo decir que no se desfasa, lo que ocurre, es que cuando fallas una nota, aparte de fallarla, se te pira por abajo, por lo que te cuenta OTRA vez como fallo.

Eso hace que te cancele la nota actual, aunque la estes tocando bien (no es que te cuente esa nota como mala, si no que deja de sumarte puntos y pasa a estado de reposo, pues el fallo se produce en ese mismo momento), pero tambien puede dar la casualidad que te cancele JUSTO cuando tocarias una nota corta (lo que se traduciría en fallo)

Eso está bien pensado para que no juegues a ir por las notas mas largas (creo que el GH II hace lo mismo) y te centres en tocar bien toda la cancion (yo he visto algun video en Youtube de gente que toca en nivel Hard con un porcentaje bastante alto de fallos... eso es hacer trampas, hay que tocar la cancion lo mejor posible
[jaja] ), pero tambien piensa que tiene que ser asi: los fallos no te restan puntos y de alguna forma, hay que castigar que se queden notas sin tocar.
Despues de escoger una cancion y su nivel de dificultad me aparece una pantalla negra que dice loading y enseguida me saca del juego, a que se debera esto?
es un vicio el game este xD

salu2.
ssux escribió:¿seria muy difícil llevarlo a la xbox? la original. Con la scene que tiene esa consola tendría mucha repercusión.


Llevo desde el verano trabajando en una version nativa hecha desde cero por mi para la XBox aunque tambien multiplataforma. Todavia no he probado el codigo en la negra (me da miedo que despues de todo el esfuerzo no haya servido de nada) pero deberia funcionar por como lo estoy haciendo y al menos ya funciona en Mac, Windows y Linux a falta de arreglar el sincronismo de audio/video y continuar con los detalles.

http://www.elotrolado.net/post_-PC--Codigo-fuente-de-Guitarfun-2-0_1710771505#post1710771505
El Piraña, eso que dices suena bien y lo que comentas en el enlace también. Me vas a hacer de buscar un adaptador de la guitarra para la Xbox original :P

Hermes, dos cosas te comento, una que me va mal con la guitarra, no se porque pero da tirones que lo hacen injugable y es una pena porque con el teclado va perfecto.
Dos, estoy redibujando los gráficos pero quiero que veas una muestra antes de seguir.

Por cierto que tienes el otro mástil en Nuestros dibujos. Espero que te guste al menos un poco XD

Saludos.
Dimitri escribió:El Piraña, eso que dices suena bien y lo que comentas en el enlace también. Me vas a hacer de buscar un adaptador de la guitarra para la Xbox original :P


La putada que no hay guitarras para la XBox Classic... :P Me estoy haciendo una con un mando antiguo poniendole un conector DB-25 (el de la impresora antigua, y lo mejor de todo... ¡¡¡tengo los pines justos para todas las señales del mando!!! :D ), pero me equivoque al mapear los cables y ahora tengo que mapearlos de nuevo y ademas el cable del mastil lo corte antes de tiempo... :-/ Pero vamos, que con un teclado USB valdria junto con el adaptador, y en principio un mando de PS2 con adaptador tambien.

Prometo que en cuanto acabe los examenes intentare pillar tiempo para darle un pequeño empujon al Guitar Xero y publicarlo, al menos el codigo para PC (entre otras cosas, no se cualos son los flags del gcc para la XBox... Para Mac es __APPLE__, para Linux es __LINUX__, para Windows es __Win32__... ¿pero y para XBox? :( ).
Hombre, yo de programación estoy pez pero hay montones de programas en la scene y supongo que mirando el código te puede servir de ayuda.
Prueba con Beats of Rage que tiene código opensource.
Dimitri escribió:Hombre, yo de programación estoy pez pero hay montones de programas en la scene y supongo que mirando el código te puede servir de ayuda.
Prueba con Beats of Rage que tiene código opensource.


Portadito a unas cuantas plataformas, si señor... No creo que use gcc para la XBox (quiero hacer con OpenXDK... al menos de momento) pero bueno saber que existe algo tan portable...

Lo mejor de todo es que tienen el .xbe para libre descarga, asi que es probable que si este compilado usando el OpenXDK. Eso si, no me extrañaria nada que al tener distintos arboles de codigo no encuentre los putos flags que busco :(

Actualizado:

no me vale el codigo: le he estado echando un vistazo y tiene pinta de ser tan legal como una bolsa de maria en Puerta del Sol. ¿Motivo? Referencias constantes a librerias del XDK de mocosoft, asi que nada... Ademas, precisamente por eso no hacen falta los flags :( Pero oye, que se agradece el interes, al menos podre ver como es el codigo en el wild side... :D
Teniendo referencias a librerías propietarias no es trigo limpio por lo que leo.
Ya se un poquito más de programación :D

Pasate por Xbins en Effnet y pillate algún juego/aplicación de su server, quiero suponer que algo abrá que sea "puro"

Saludos.
Dimitri escribió:Teniendo referencias a librerías propietarias no es trigo limpio por lo que leo.
Ya se un poquito más de programación :D


"Oficialmente", el XDK solo lo pueden usar desarrolladores autorizados de Microsoft, ergo si hay algun homebrew que lo use es legal publicar el codigo (el codigo es del autor del hombrew) pero no el ejecutable compilado.

Aunque ahora que lo pienso... ¿hay algun hombrew para la XBox que no use el XDK aparte de la version que hicieron de Wolfenstein sin sonido ni red? :D

Dimitri escribió:Pasate por Xbins en Effnet y pillate algún juego/aplicación de su server, quiero suponer que algo abrá que sea "puro"

Saludos.


Los conozco, pero ya te digo... Chungo chungo. Hay homebrew hecha con el OpenXDK, pero vamos, las menos. Yo quiero ser uno de ellos :D
Despues de escoger una cancion y su nivel de dificultad me aparece una pantalla negra que dice loading y enseguida me saca del juego, a que se debera esto?
En primer lugar enhorabuena y muchas gracias a hermes por su magnífico trabajo.

Tengo pensado hacerme con el Guitar Hero 3 con la guitarra inalámbrica.

Mi pregunta es la siguiente. ¿Si me hago con el adaptador inalámbrico para PC no podré utilizar la guitarra inalámbrica del GHIII con el Guitarfun? ¿Alguien lo ha probado?
Con joystick2mouse puedes mapear cualquier tipo de hardware a teclas o botones de raton, asi que en todo caso siempre puedes utilizar ese programa para utiliza hasta un volante para jugar o lo que quieras.
Gracias.

ya esta descargado.

ahora a probar.

este tipo de juegos son basicos en cualquier consola, en especial cuando puedes personalizar las canciones.

en espera de nuevas actualizaciones.

-------------------------------------------------------------------------------------------
Probado ¡¡¡¡¡¡¡¡¡¡¡

esta increible ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡

lo unico q le hace falta es una pulida grafica.

en la respuesta de control y estabilidad esta al 1000.

algun sitio p descargar canciones?? ...

yngwiee, maiden, judas, manowar, etc.
Se puede conectar la guitarra de la wii??
Si es asi como??
Muchas gracias!!!
Para descargar canciones para el Frets on Fire o para El Guitar Fun o cualquiera compatible desde aquí se puede http://www.fofspain.com/

;).......Que pechada a darle a teclado con Jesu Cristo Garcia...jajaja..xD
Joder, que pasada tío..... mil gracias!!!
Increíble, lo estoy probando con la guitarra de la X360 y va como la seda. Muchas gracias, 5 estrellas te doy.
Buenisimo tio. Me estoy pegando una viciada del 15

Gracias por el juego [beer] [beer]
Hermes escribió:Hombre, el señor Talfi (joe, no hace años ni nada que me pasaba por tu pagina, por el tema de los emuladores)

Si se puede salir del modo de prueba... solo que cada periferico sale de una manera distinta:

- Si usas teclado, por defecto es Esc o la tecla que definas como Esc para salir al menu de pausa, pulsa Abajo y F1 para salir

- Si usas una Guitarra, Pulsa los trastes del 1 al 4 (verde a Azul) y luego el boton Start


Gracias por los consejos Hermes. Además he visto que está la versión 2.2... asi que haré lo que dices y lo probaré de nuevo.

P.D. Talfi.net en sus buenos tiempos... ¡Qué recuerdos! [decaio]
Bueno, mañana subiré la version 2.3 de programa.

Esta vez he contado con la ayuda de Dimitri como grafista:

Imagen


Caracteristicas

- Nuevos actores y mastil, como podeis ver en la imagen.

- Optimizacion en el calculo de vectores mediante instrucciones SSE

- Optimizacion en el mezclado de voces, mediante instrucciones MMX


- Otros cambios menores.

Saludos
Me he bajado el juego y está genial, muchas gracias Hermes por este estupendo juego, pero no lo puedo usar con mi guitarra de xbox 360. Me explico, a la hora de definir los trastes muy bien pero luego no me deja definir para tocar como si fuera la pua y el vibrato. Alguien sabe como se soluciona? Muchas gracias.
viviano escribió:Me he bajado el juego y está genial, muchas gracias Hermes por este estupendo juego, pero no lo puedo usar con mi guitarra de xbox 360. Me explico, a la hora de definir los trastes muy bien pero luego no me deja definir para tocar como si fuera la pua y el vibrato. Alguien sabe como se soluciona? Muchas gracias.


Me pasa igual :-(

En el FoF y el GH3 me va perfectamente.
Puede que sea por el driver, yo uso el de esta web:
http://xbcd360guide.50webs.com/

y aquí o dejo una cosa que comenté antes en el hilo:
http://www.elotrolado.net/hilo_-JUEGO--Guitarfun-PC-2-0--homebrew-_948414?pagenumber=8

Espero que os sirva.

Un saludo.
Que bien,este funcionara en cierto portatil con grafica integrada :)
Con la ayuda de Dimitri, se ha cambiado el aspecto grafico del juego

Imagen


Caracteristicas

- Nuevos actores y mastil, como podeis ver en la imagen (gracias a Dimitri).

- Optimizacion en el calculo de vectores mediante instrucciones SSE

- Optimizacion en el mezclado de voces, mediante instrucciones MMX

- Posibilidad de personalizar el bitmap de fondo en los menus (ver PDF, ultima pagina o el README.txt en el directorio /bitmaps/)

- Posibilidad de añadir mastiles personalizados al juego (ver PDF, ultima pagina o el README.txt en el directorio /bitmaps/)

- Otros cambios menores, correciones de pequeños bugs, etc

NOTA:Si tienes una guitarra de Xbox 360, define de forma manual los botones/ejes (pulsando UP/DOWN se cambia a dicho modo en la pantalla de definir) Ya lo he dicho unas cuantas veces...

Personalizando fondos:

Imagen


Personalizando el mastil:

Imagen

Descarga

En el primer post, como siempre.

Saludos
Al final lo has puesto, me parece genial la idea.

Con respecto al mando he vuelto al controlador oficial de microsoft y no he notado tantos tirones (de momento) en la versión anterior a esta que acabas de liberar.

Un saludo.
Dimitri escribió:Al final lo has puesto, me parece genial la idea.

Con respecto al mando he vuelto al controlador oficial de microsoft y no he notado tantos tirones (de momento) en la versión anterior a esta que acabas de liberar.

Un saludo.


Si, al final he metido soporte para cargar bitmaps de 24 bits, he metido una rutina que reescala los bitmaps y añadido el codigo necesariopara personalizar el fondo y los mastiles.

Eso si: al meter mastiles personalizados, se deshabilitan los internos y los externos no pueden se animados, pero asi matamos dos pajaros de un tiro y se abre un amplio abanico de posibilidades XD
Felicitaciones Hermes!!! le estoy sacando jugo al juego!!! Oooh, la pregunta es, ¿la mejoras gráficas las vas a portar a la versión de PS2? pq quedaron MUY BIEN!!
Gracias por el juego, un puntazo lo del multiplayer.

Sabeis de algun juego tipo guitar hero para pc que no sea ni el frets on fire ni este?

Simplemente por probarlos todos, xD.
Una pregunta para Hermes, ¿sabes de qué manera puedo cambiar el tempo en mitad de una canción?

Estoy grabando un nuevo tema que le prodría venir muy bien al juego, pero tiene un cambio de tempo al final, igualmente tengo otra canción que hice hace tiempo que no llegué a hacerla para el FoF porque no tenía muy claro cómo cambiar el tempo, ya que también tiene un cambio de tempo al final

Yo las canciones del FoF las hago con un editor MIDI externo, dime si sabes cómo podría hacerlo para ir probando...

Un Saludo de nuevo!!

...y para los que todavía no lo sepais, aquí teneis todas mis canciones hechas para el FoF, no temais por el copyright, que son composiciones mías y hago lo que me da la gana con ellas XD
karuritosu escribió:Una pregunta para Hermes, ¿sabes de qué manera puedo cambiar el tempo en mitad de una canción?

Estoy grabando un nuevo tema que le prodría venir muy bien al juego, pero tiene un cambio de tempo al final, igualmente tengo otra canción que hice hace tiempo que no llegué a hacerla para el FoF porque no tenía muy claro cómo cambiar el tempo, ya que también tiene un cambio de tempo al final



Pues mira, el tempo se fija normalmente por el comando 0xff 0x51
(por defecto serian 500000 microsegundos y supongo que tu solo tendras que cambiar el tempo a partir de un punto en tu editor)

De hecho, yo lo tengo en cuenta para controlar las luces del escenario (y creo que el FOF lo utiliza para alejar/acelerar las notas en el mastil)

Saludos.
Estoy intentando hacerlo funcionar en Linux. Que compile ha sido fácil, dos o tres "segmentation fault"s se han ido corrigiendo, pero ahora me encuentro con que se queda en bucle infinito en alguna parte cuando le doy a "Single Player" y sale la lista de canciones.
Pero sólo para asegurarme que no la he cagado... en la función itoLetter de video.c se hace "int pos[0][2];". Sinceramente, no me esperaba que el compilador se lo tragase... 0??????? Esto provocaba uno de los "segmentation fault". Como he visto que en el código sólo se hacia referencia a pos[0] y pos[1] lo he cambiado por "int pos[2][2];". He hecho bien? Que se supone que se hace al declararlo con un tamaño 0??
La verdad no sé que hace la función ni nada, tampoco soy programador. Así que voy un tanto a ciegas.
RedDwarf escribió:Estoy intentando hacerlo funcionar en Linux. Que compile ha sido fácil, dos o tres "segmentation fault"s se han ido corrigiendo, pero ahora me encuentro con que se queda en bucle infinito en alguna parte cuando le doy a "Single Player" y sale la lista de canciones.
Pero sólo para asegurarme que no la he cagado... en la función itoLetter de video.c se hace "int pos[0][2];". Sinceramente, no me esperaba que el compilador se lo tragase... 0??????? Esto provocaba uno de los "segmentation fault". Como he visto que en el código sólo se hacia referencia a pos[0] y pos[1] lo he cambiado por "int pos[2][2];". He hecho bien? Que se supone que se hace al declararlo con un tamaño 0??
La verdad no sé que hace la función ni nada, tampoco soy programador. Así que voy un tanto a ciegas.


Jaja, que bueno! Si, es un error, claramente: deberia haber sido int pos[2][2];

Y en efecto: el compilador se lo ha tragado el muy puto, sin protestar.

Si el cuelgue aparece cuando te lista las canciones y se pone a reproducir, el problema puede ser estas utilizando la libreria tremor.a que adjunto yo... porque esa librería ha sido compilada bajo Windows XD

Deberias borrar tremor.a y compilarlo de nuevo.

Si te diera algun problema porque el hilo no devuelve el control para las gestiones del SO, prueba a utilizar usleep(1000); en los bucles.

Por ejemplo, el reproduccion en los menu de seleccion de las canciones, seria:

Linea 8090:
while(!my_eof && !my_eof2 && !my_eof3){
    long ret;
   
   SDL_PollEvent(&event);


En teoria, ahi no debe haber cuelgue alguno porque la funcion PollEvent deberia despejar todos los eventos, pero a lo mejor le seria util meter un usleep(1000); o con un valor mayor antes o despues.

En principio, asegurate de compilar la libreria tremor.a bajo Linux y
mira si te sigue dando el mismo problema y si sigues igual, prueba a retornar de la funcion antes y despues de PCMInit() que hay unas lineas antes.

Si PCMInit falla, te devolvera como log "SDL OpenAudio failed" y si se cuelga dentro, es porque hay algun problema con los datos que le pasas a esa funcion (fallo de la libreria tremor o fallo de SDL al iniciar el audio)
Pues el problema es que estaba usando libvorbisfile en vez de tremor. Pensaba que tremor era exactamente equivalente, excepto por usar sólo enteros. Incluso enlazaba correctamente... pero por lo visto no son tan equivalentes como pensaba.
Usando libvorbisfile se quedaba en el bucle "while(!my_eof && !my_eof2 && !my_eof3)" ya que ov_read devolvía OV_EINVAL (-131). Y al no devolver nunca cero el valor de los my_eof nunca se modificaba.

Usando tremor ya funciona todo... excepto porque las canciones (he probado con dos de las que vienen por defecto con el Frets on Fire) se escuchan *muy* rápido. Vamos, que si no sabes como era la canción normalmente ni la reconoces. Mañana ya me lo miraré...
RedDwarf escribió:Pues el problema es que estaba usando libvorbisfile en vez de tremor. Pensaba que tremor era exactamente equivalente, excepto por usar sólo enteros. Incluso enlazaba correctamente... pero por lo visto no son tan equivalentes como pensaba.
Usando libvorbisfile se quedaba en el bucle "while(!my_eof && !my_eof2 && !my_eof3)" ya que ov_read devolvía OV_EINVAL (-131). Y al no devolver nunca cero el valor de los my_eof nunca se modificaba.

Usando tremor ya funciona todo... excepto porque las canciones (he probado con dos de las que vienen por defecto con el Frets on Fire) se escuchan *muy* rápido. Vamos, que si no sabes como era la canción normalmente ni la reconoces. Mañana ya me lo miraré...


La libreria Tremor tiene algunas diferencias y en ov_read puedes observar que uso /* */ para descartar los parametros que usaba al principio (cuando tiraba de la libreria Ogg, pero es que Tremor es mas rapida, pues usa enteros en vez de numeros flotantes y funciona a 44100/ 16bits de forma fija)

Si te va muy rapido, tal vez es porque el loop de audio no se fija al valor que yo uso: prueba a cambiar de Fast a Slow en las opciones de sonido del programa, a ver si se corrige asi.

Pudiera ser que bajo Linux necesitaras utilizar un loop mas amplio (por encima de 80 ms) o que no aceptase el valor de base 2 que le pasa el programa (y si el loop es mas corto, se descartarian los samples sobrantes en la funcion de mezclado y la cancion iria mas rapido, como a tropezones)

La ultima vez que puse Linux en mi ordena, mi ATI 9660 no se soportaba en 3D, si no fuera por eso, me hubiera ocupado yo mismo del tema.
Ahora empiezo a entender las historias de terror que se escuchan sobre ALSA.
El caso es que ejecutando el juego con la variable de entorno AUDIODEV con el valor "hw" el sonido funciona correctamente. Por defecto SDL usa "default", y el API no define ninguna función para elegir el dispositivo a usar, así que...
El motivo por el que funciona con hw y no con default no lo sé. Mednafen, un emulador de varias consolas dice esto en su documentación:
This is necessary because ALSA's "default" audio device has very poor buffering control capabilities.


En cualquier caso, aquí está el parche para que compile en Linux:
diff -u guitarfun/audio.c guitarfun3/audio.c
--- guitarfun/audio.c   2008-02-09 00:06:12.000000000 +0100
+++ guitarfun3/audio.c   2008-02-17 13:17:30.000000000 +0100
@@ -252,7 +252,7 @@
static short *out_s;
static long long zero[2]={0LL,0LL}; // trick: this contain 8 stereo samples to 0
#else
-static short zero[1]=0; // trick: this contain 1 stereo sample to 0
+static short zero[1]={0}; // trick: this contain 1 stereo sample to 0
register int sampl, sampr;
#endif
for(n=0;n<MAX_PCM_CHANS;n++)
Sólo en guitarfun3: guitar
Sólo en guitarfun: ito_d3d.c
diff -u guitarfun/main.c guitarfun3/main.c
--- guitarfun/main.c   2008-02-10 21:07:02.000000000 +0100
+++ guitarfun3/main.c   2008-02-17 13:25:43.000000000 +0100
@@ -118,6 +118,10 @@
#define AUDIO_LOOP_93MS 1
#define AUDIO_LOOP_46MS 2

+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
int current_audio_loop_divider=AUDIO_LOOP_46MS; // used when you playing game
 
char main_dir[FILENAME_MAX]="";
@@ -4900,7 +4904,7 @@
   level_init=7;
   
   
-  #ifndef WIN32
+/*  #ifndef WIN32
   memset(&sthread1, 0, sizeof(sthread1));
   memset(&sthread2, 0, sizeof(sthread2));
   // maybe you can use it under LINUX
@@ -4916,7 +4920,7 @@
     n=pthread_setschedparam(pthread_self(), SCHED_APP, &sthread2);
   
     
-  #endif
+  #endif*/
    SDL_SetTimer(MS_TICK,mytimer); 
   
    level_init=8;
@@ -5450,12 +5454,12 @@
         
         memset(&entries[nfiles],0,sizeof entries[0]);
         // directory
-        if(dd2 && (type & 1)==1) {memcpy(entries[nfiles].filename,direntp->d_name,direntp->d_namlen);
+        if(dd2 && (type & 1)==1) {memcpy(entries[nfiles].filename,direntp->d_name,strlen(direntp->d_name));
                 entries[nfiles].fileProperties=1;
                 nfiles++;
                 }
         // files
-        if(!dd2 && (type & 2)==2) {memcpy(entries[nfiles].filename,direntp->d_name,direntp->d_namlen);
+        if(!dd2 && (type & 2)==2) {memcpy(entries[nfiles].filename,direntp->d_name,strlen(direntp->d_name));
                 entries[nfiles].fileProperties=0;
                 nfiles++;
                 }
diff -u guitarfun/video.c guitarfun3/video.c
--- guitarfun/video.c   2008-02-02 20:58:24.000000000 +0100
+++ guitarfun3/video.c   2008-02-17 13:16:58.000000000 +0100
@@ -252,7 +252,7 @@
int n,m,l;
int display=0;
int mode=0;
-int pos[0][2];
+int pos[2][2];
int flag,flag2=0;

if(c<=32) return;

- Lo de audio.c y video.c son errores sin mas.
- Lo de O_BINARY es la "windowsada" ;-)
- Lo de "strlen(direntp->d_name)" es porque por lo visto POSIX no limita el número de elementos que puede tener la estructura dirent y en Linux resulta no tener d_namlen
- Y lo de pthread_setschedparam está comentado porque soy un perro. Pero tal cual no funciona.

Además si se define SSE_ASM el juego peta nada más arrancar.


Sobre la "ATI 9660". Imagino que hoy en día estará "bien" soportada por los drivers libres, y que los drivers binarios de AMD/ATI lo soportarán completamente. Aunque la experiencia que tuve hace años con los drivers binarios de ATI no fue muy buena, la verdad.
Ok

He añadido tus cambios al codigo.

Por cierto, ¿que procesador estas usando? Teoricamente, no deberias tener problemas con SSE_ASM(salvo que Linux no proteja el contenido de los registros al hacer cambios de tareas).

SSE se soporta desde los PIII, pero ese define tambien controla el codigo MMX: podrias probar a cambiar las partes de codigo para forzarlas a mano, a ver concretamente si falla en la rutina de audio (que tira de MMX) o en la rutina de multiplicacion de vertices (en 3d_engine .c)

Las tres causas que se me ocurren, es que Linux use esos registros para otra cosa y se corrompan, que tu compilador optimice esa parte y meta un registro como parametro a las rutinas y genere una instruccion invalida (despues de ver como se traga int pos[0][2], ya te esperas cualquier cosa XD) o un problema de alineaciones.

Lo que comentas de hw y default en el audio, supongo que hw se refiere a escritura directa en el buffer del hardware, mientras que por defecto, tal vez se utilice una cola que acepta el audio y lo transfiere en un segundo plano.

Eso es valido por ejemplo, si quieres reproducir un mp3 o ver una pelicula, que puedes ir acumulando audio para evitar que al darle acceso a otros procesos, se rompa la reproduccion, pero para un juego como Guitarfun, es VITAL trabajar el audio en tiempo real y es mejor que haya una interrupcion en el audio a que éste vaya a su bola y no sincronice con la imagen.


Con respecto a las funciones de prioridad, para usarlas, deberias tener permisos de root, segun leí: lo deje metido porque a lo mejor era necesario establecer la prioridad de los hilos

Por cierto, ¿como te va el juego? ¿te va fluido?

Otra cosa, ¿podrias pasarme el makefile adaptado que estes usando?. Eso junto con cualquier nota que quieras que incluya en el paquete para los usuarios Linux.

"Copyright (c) 2008 RedDwarf (SPAIN) (some errors fixed and Linux adaptation)"

¿Te parece bien que te añada así al copyright? (supongo que eres español, que si no lo corrijo [+risas])
Hermes escribió:Por cierto, ¿que procesador estas usando? Teoricamente, no deberias tener problemas con SSE_ASM(salvo que Linux no proteja el contenido de los registros al hacer cambios de tareas).

Un Intel Core2Duo E6420. Yo de ensamblador ya si que ni papa, así que ni idea de que podría ser.
Pero acabo de mirármelo otra vez y resulta que sólo peta si SDL usa ALSA con default. Si haces que use "hw" o directamente OSS funciona correctamente con SSE_ASM.

Hermes escribió:SSE se soporta desde los PIII, pero ese define tambien controla el codigo MMX: podrias probar a cambiar las partes de codigo para forzarlas a mano, a ver concretamente si falla en la rutina de audio (que tira de MMX) o en la rutina de multiplicacion de vertices (en 3d_engine .c)

La que provoca el cuelgue es la parte de audio.

Hermes escribió:Las tres causas que se me ocurren, es que Linux use esos registros para otra cosa y se corrompan, que tu compilador optimice esa parte y meta un registro como parametro a las rutinas y genere una instruccion invalida (despues de ver como se traga int pos[0][2], ya te esperas cualquier cosa XD) o un problema de alineaciones.

Compilé con -O0 y fallaba igualmente. Si quieres la salida de "gcc -S audio.c" te la puedo pasar, para mi bien podría ser chino. Aunque después de visto que sólo peta con ALSA/default...

Hermes escribió:Lo que comentas de hw y default en el audio, supongo que hw se refiere a escritura directa en el buffer del hardware, mientras que por defecto, tal vez se utilice una cola que acepta el audio y lo transfiere en un segundo plano.

Sigo sin saber los detalles. Pero por lo visto lo de hw sí que es algo más de bajo nivel. Tanto que si la tarjeta de sonido no hace mixing por hardware te quedas sin poder reproducir otros sonidos mientras usas el juego. Al usar default por lo visto el propio sistema de sonido se encarga de hacer el mezclado por software.
Para conseguir sonido fluido y no perder el sonido en el resto de programas lo mejor que he encontrado es ejecutarlo como "SDL_AUDIODRIVER=dsp aoss ./guitar".

Hermes escribió:Eso es valido por ejemplo, si quieres reproducir un mp3 o ver una pelicula, que puedes ir acumulando audio para evitar que al darle acceso a otros procesos, se rompa la reproduccion, pero para un juego como Guitarfun, es VITAL trabajar el audio en tiempo real y es mejor que haya una interrupcion en el audio a que éste vaya a su bola y no sincronice con la imagen.

Lo curioso es que si haces que SDL use el API de OSS a través de la emulación de ALSA el sonido va mejor que usando el API de ALSA directamente. Supongo que el problema está en que el driver de OSS de SDL es mejor que el driver de ALSA.

Hermes escribió:Por cierto, ¿como te va el juego? ¿te va fluido?

Pues mientras lo iba probando te hubiese dicho que excepto por el sonido iba perfecto. Pero ahora que he estado jugando un rato... de vez en cuando pega algún trompicón, tanto con Slow como Fast en Audio Loop.

Hermes escribió:Otra cosa, ¿podrias pasarme el makefile adaptado que estes usando?. Eso junto con cualquier nota que quieras que incluya en el paquete para los usuarios Linux.

No he comentado que soy un poco perro? Simplemente borro ito_d3d.c y ejecuto "gcc $CFLAGS -o guitar *.c ../tremor/.libs/libvorbisidec.a -lm -lSDL -lGL" ;-)

Pero así, apañado rápido a partir del de Windows:
# Project: Guitarfun

CC   = gcc
OBJ  = main.o mastil2_3_bmp.o mastil_1_bmp.o mastil_2_bmp.o mastil_3_bmp.o mastil_bmp.o publico1_bmp.o publico2_bmp.o guitarra_bmp.o mastil2_1_bmp.o mastil2_2_bmp.o bitmaps.o video.o letter.o 3d_engine.o ovacion_pcm.o abucheo_pcm.o aplauso_pcm.o clin2_pcm.o clin_pcm.o credits_txt.o effect_pcm.o guitar30_pcm.o guitar31_pcm.o guitar32_pcm.o licenses_txt.o out_pcm.o guitar_anim.o audio.o ito.o mastil3_2_bmp.o mastil3_1_bmp.o
LINKOBJ  = main.o mastil2_3_bmp.o mastil_1_bmp.o mastil_2_bmp.o mastil_3_bmp.o mastil_bmp.o publico1_bmp.o publico2_bmp.o guitarra_bmp.o mastil2_1_bmp.o mastil2_2_bmp.o bitmaps.o video.o letter.o 3d_engine.o ovacion_pcm.o abucheo_pcm.o aplauso_pcm.o clin2_pcm.o clin_pcm.o credits_txt.o effect_pcm.o guitar30_pcm.o guitar31_pcm.o guitar32_pcm.o licenses_txt.o out_pcm.o guitar_anim.o audio.o ito.o mastil3_2_bmp.o mastil3_1_bmp.o
LIBS =  -s ../tremor/.libs/libvorbisidec.a -lSDL -lGL
BIN  = Guitarfun
CFLAGS := $(CFLAGS) -DSSE_ASM -O2
RM = rm -f

.PHONY: all all-before all-after clean clean-custom

all: all-before Guitarfun all-after


clean: clean-custom
   ${RM} $(OBJ) $(BIN)

$(BIN): $(OBJ)
   $(CC) $(LINKOBJ) -o $(BIN) $(LIBS)

main.o: main.c
   $(CC) -c main.c -o main.o $(CFLAGS)

mastil2_3_bmp.o: mastil2_3_bmp.c
   $(CC) -c mastil2_3_bmp.c -o mastil2_3_bmp.o $(CFLAGS)

mastil_1_bmp.o: mastil_1_bmp.c
   $(CC) -c mastil_1_bmp.c -o mastil_1_bmp.o $(CFLAGS)

mastil_2_bmp.o: mastil_2_bmp.c
   $(CC) -c mastil_2_bmp.c -o mastil_2_bmp.o $(CFLAGS)

mastil_3_bmp.o: mastil_3_bmp.c
   $(CC) -c mastil_3_bmp.c -o mastil_3_bmp.o $(CFLAGS)

mastil_bmp.o: mastil_bmp.c
   $(CC) -c mastil_bmp.c -o mastil_bmp.o $(CFLAGS)

publico1_bmp.o: publico1_bmp.c
   $(CC) -c publico1_bmp.c -o publico1_bmp.o $(CFLAGS)

publico2_bmp.o: publico2_bmp.c
   $(CC) -c publico2_bmp.c -o publico2_bmp.o $(CFLAGS)

guitarra_bmp.o: guitarra_bmp.c
   $(CC) -c guitarra_bmp.c -o guitarra_bmp.o $(CFLAGS)

mastil2_1_bmp.o: mastil2_1_bmp.c
   $(CC) -c mastil2_1_bmp.c -o mastil2_1_bmp.o $(CFLAGS)

mastil2_2_bmp.o: mastil2_2_bmp.c
   $(CC) -c mastil2_2_bmp.c -o mastil2_2_bmp.o $(CFLAGS)

bitmaps.o: bitmaps.c
   $(CC) -c bitmaps.c -o bitmaps.o $(CFLAGS)

video.o: video.c
   $(CC) -c video.c -o video.o $(CFLAGS)

letter.o: letter.c
   $(CC) -c letter.c -o letter.o $(CFLAGS)

3d_engine.o: 3d_engine.c
   $(CC) -c 3d_engine.c -o 3d_engine.o $(CFLAGS)

ovacion_pcm.o: ovacion_pcm.c
   $(CC) -c ovacion_pcm.c -o ovacion_pcm.o $(CFLAGS)

abucheo_pcm.o: abucheo_pcm.c
   $(CC) -c abucheo_pcm.c -o abucheo_pcm.o $(CFLAGS)

aplauso_pcm.o: aplauso_pcm.c
   $(CC) -c aplauso_pcm.c -o aplauso_pcm.o $(CFLAGS)

clin2_pcm.o: clin2_pcm.c
   $(CC) -c clin2_pcm.c -o clin2_pcm.o $(CFLAGS)

clin_pcm.o: clin_pcm.c
   $(CC) -c clin_pcm.c -o clin_pcm.o $(CFLAGS)

credits_txt.o: credits_txt.c
   $(CC) -c credits_txt.c -o credits_txt.o $(CFLAGS)

effect_pcm.o: effect_pcm.c
   $(CC) -c effect_pcm.c -o effect_pcm.o $(CFLAGS)

guitar30_pcm.o: guitar30_pcm.c
   $(CC) -c guitar30_pcm.c -o guitar30_pcm.o $(CFLAGS)

guitar31_pcm.o: guitar31_pcm.c
   $(CC) -c guitar31_pcm.c -o guitar31_pcm.o $(CFLAGS)

guitar32_pcm.o: guitar32_pcm.c
   $(CC) -c guitar32_pcm.c -o guitar32_pcm.o $(CFLAGS)

licenses_txt.o: licenses_txt.c
   $(CC) -c licenses_txt.c -o licenses_txt.o $(CFLAGS)

out_pcm.o: out_pcm.c
   $(CC) -c out_pcm.c -o out_pcm.o $(CFLAGS)

guitar_anim.o: guitar_anim.c
   $(CC) -c guitar_anim.c -o guitar_anim.o $(CFLAGS)

audio.o: audio.c
   $(CC) -c audio.c -o audio.o $(CFLAGS)

ito.o: ito.c
   $(CC) -c ito.c -o ito.o $(CFLAGS)

mastil3_2_bmp.o: mastil3_2_bmp.c
   $(CC) -c mastil3_2_bmp.c -o mastil3_2_bmp.o $(CFLAGS)

mastil3_1_bmp.o: mastil3_1_bmp.c
   $(CC) -c mastil3_1_bmp.c -o mastil3_1_bmp.o $(CFLAGS)



Hermes escribió:"Copyright (c) 2008 RedDwarf (SPAIN) (some errors fixed and Linux adaptation)"

¿Te parece bien que te añada así al copyright? (supongo que eres español, que si no lo corrijo [+risas])

Sí, soy español ;-)
Entonces lo de las MMX tiene pinta de ser problema de alineacion (concretamente, se calculan 8+8 samples y se hacen accesos de 64 bits).

Lo de los tirones es un problema de prioridad, pero lo de fijar prioridad, ya has visto que falla (salvo que ejecutes desde root). En Windows se sube la prioridad del proceso a Tiempo Real y asi consigo que las otras aplicaciones no suelan molestar. Pero en Linux no se ni si valen los ajustes que uso.

No puedo ayudar ahí porque es un problema intrinseco de Linux y ni siquiera puedo hacer pruebas "emuladas" desde windows, porque pthread bajo Windows, va a su bola (de hecho, en un dual core palmaba el codigo porque supongo se hacia acceso simultaneo a las SDL_Pollevent y se le iba la pinza y lo mismo daba poner mas o mnos prioridad XD)

El problema es que aunque Guitarfun no usa excesivos recursos, la temporizacion tiene que ser muy precisa porque si no, se producen rectificaciones en forma de salto, que impiden la desincronizacion, pero no la molestia del tiron (es lo que mas me preocupaba a la hora de hacer el port, pues en PS2 el procesador puede estar trabajando al limite, pero la temporizacion es exacta y no la va a desviar otra inexistente aplicacion)

CONSEJO: Activa el codigo de transformacion de vertices con SSE, puesto que dices que funciona y todos los graficos de mastil, notas y escenario, tiran de ah, por lo menos, liberará CPU
Una buena noticia (para los demás...). Parece que mis problemas son de hardware/drivers.
He probado con un ordenador más antiguo, pero con una Sound Blaster Live!, y
a) El juego funciona perfectamente aunque SDL use ALSA
b) El juego funciona muy fluido.
yyy mega genial de volada a testear ia ke el guitar zero
no me funciono muy genial :P ;-)
Hola, lo primero de todo felicitar a Hermes con el gran curro que ha tenido, ya que lo he podido probar en Windows y es un programa genial, y enhorabuena a RedDwarf por portarlo a linux también.

Ahora la pregunta :P : Y funcionando en linux...no habría forma de hacer que funcionara en Mac OSX??.

Un saludo
208 respuestas
1, 2, 3, 4, 5