[PC] Codigo fuente de Guitarfun 2.0

UPDATE: version 2.3

Hola.

Ayer hice publica la conversion de mi juego de PS2 a PC, tanto los ejecutables como el codigo fuente y he pensado que sería util remarcarlo aqui, debido a que el codigo está pensado para permitir portarlo a diferentes plataformas.


El codigo fuente está aqui:

http://mods.elotrolado.net/~hermes/guitarfun/guitarfun_2.3_source.zip


Y aqui la release oficial, por si quereis catarlo:

http://www.elotrolado.net/hilo_-JUEGO--Guitarfun-PC-2-0--homebrew-_948414

EDITADO:

Aqui podeis ver los diferentes Bitmaps que utiliza el juego, por si alguien quiere modificarlos o añadir otros:

http://mods.elotrolado.net/~hermes/guitarfun/guitarfun_bmp_resources.rar

Saludos.
tengo ganas de hecharles un vistazo y viene el fin de semana!!! que bien! :D a ver si lo puedo compilar para pc

( si consigo que me funcione el pc... que tengo la fuente o la caja rota-un corto-).
Un trabajo estupendo
una ayuda totalmente desinteresada
un juego genial

que mas se puede pedir.

Saludos
riky2 escribió:Un trabajo estupendo
una ayuda totalmente desinteresada
un juego genial

que mas se puede pedir.

Saludos



Yo solo pediría una cosa: que ya que hice este port y he publicado el codigo fuente pensando en que sería util para la comunidad, que no se apagara la mecha y llegada a ser conocido por aquellos a los que les pueda interesar... fuera y dentro de estas cuatro paredes.

Sería muy triste que alguien descubriese la existencia de este programa mucho tiempo despues de ser publicado debido a que no se dio a conocer suficientemente, pero yo no voy a mover un dedo en ningun sentido: quizá es hora de que mis manos se queden quietas.
Muchas gracias por liberar el source tio, suerte que es un buen juego, veremos si se puede hacer algo para que rule en DC. Un saludo y muchas gracias.
aunque tienes malas experiencias sobre liberar tus codigos fuente (vuestro reproductor de peliculas y mp3) demuestras que te importa más la gente que los susodichos personajes que modifican el codigo y ponen su nombre sin respetar tus derechos.

Te has portado Hermes, un saludo



Pd: ya que estamos podias mirarte un poco la scene de Ps3 que estamos estancados X-D (es broma)
Hermes,eres mi dios.No solo por hacer el juego,sino por liberar el source,pues muchos en tu lugar,seguramente,lo habrian incluso vendido...
Saludos!
Ehi!! felicidades hermes si lo has hecho publico es que funciona al 100%

Ahora toca desarrollar algun juego de plataformas que teniamos pendiente xD.

Estaba pensando en un juego plataformero estilo wonder boy...
como me jode que se me haya roto mi pc y estar con el portatil :(.

offtopic
en realidad he contestado para que darkangelus mire mi firma xD
jajaja que mal que estas xD

Pues tienes que alegrarte pocos tienen el de kefka y más de uno vendería su alma xD

Pues yo en la encuesta me lleve una alegría saber que soy igual a cloud xD, lo que no se es que opinas tu de kefka xD
pues la verdad es que no podría estar mas contento con nadie que con kefka :) aunque parezca raro los que más me gustan son kefka y edgar :S
Bueno, ya podeis tirar el fuente anterior y los binarios: ya hay nueva release, la 2.2


Entre los cambios,programacion manual de los botones/ejes, y he metido el codigo necesario para programar el segundo mando (no me pregunteis porque faltaba esa parte XD)
A ver si alguien se anima a hacer un port para OSX. Yo si no es muy dificil me animaria. Pero no tengo ni idea.
en principio no tiene que ser muy dificil as:i que podrias animarte >D
Creo conveniente decir lo que voy a decir en publico, en parte como muestra de respeto y agradecimiento a Hermes (siento no haberte respondido, tuve problemas y lo deje de lado...)

Bien: como ya le comente a el, yo tambien estoy haciendome mi propia version de Guitar Hero, solo que en este caso claramente orientado para la XBox aunque intentando que sea lo mas portable posible (y por el momento ya me funciona en MacOS X, Windows XP y Ubuntu... [sati] ). ¿Porque no lo he publicado todavia? Por el sincronismo de audio y video. Si, me dijistes que mirara el tema de usar los samples como unidad de medida, pero no me aclaraba. Por suerte he descubierto a causa de una practica de la universidad una nueva funcion llamada gettimeofday() ubicada en , distinto del de toda la vida y que ofrece la precision que quiero, asi que cuando tenga tiempo me pondre con ello.

¿Mi version? Bueno, esta basada en Frets on Fire pero solventando todos los problemas y bugs que tiene, aparte de que la estoy haciendo en C++ en lugar de en Python con lo que tiene un rendimiento mayor, y aunque la interfaz la he hecho en SDL por el asunto de la XBox esta implementada en una clase abstracta (clsOutputSDL, la cual hereda de la clase abstracta clsOutput), con lo que solo es implementar el nuevo sistema grafico y ya tienes nuevas prestaciones (OpenGL, Direct3D...) y ademas le he metido algunas cositas como soporte de caratulas y demas (y la clase para leer los archivos de configuracion me ha quedado chulisima :D ), y solo queria decir que el codigo de Hermes me va a servir para las cosas que me fallen un poco como por ejemplo el asunto del sincronismo si es que lo del gettimeofday() sigue sin funcionar.

¿Y porque digo todo esto? Bueno... pues porque a pesar de que me quedan como minimo 3 años para acabar la carrera todos los profesores me proponen que presente el puto juego como proyecto de fin de carrera, y creo que es etico que se sepa publicamente (aunque indicaria que fragmentos son compartidos). Sin embargo el principal motivo es para hacer una proposicion publica de colaboracion entre ambas partes para hacer que este mas integrado todo. Veo que son 5 megas de codigo, o sea, te lo has currado bastante, pero no se hasta que punto estara pensada la portabilidad, asi que creo que podriamos obtener beneficio los dos... ¿como lo ves?

Y bueno, que eso, que ya esta bien de enrollarme :D Quien quiera una copia que lo diga, o si quereis mirare de subirlo aqui. Y por supuesto... GPL [looco]

Ah... y de requisitos, me rula como la seda en mi MacBook Intel Core2Duo a 2.16GHz. Si, es un puto maquinon pero no he podido ejecutarlo en nada mas pequeño (vamos, que todavia no lo he probado en el Pentium III de sobremesa pero fijo que funciona bien), pero aparte de que funciona muy bien sin ponerse los cores demasiado locos a pesar de tener la grafica compartida... como tengo pensado que sea para la XBox y esta solo tiene 64 megas de Ram, pues ya os podeis imaginar cuales son sus requisitos... [666] Lo digo porque acabo de ver lo de los 512 megas de GuitarFun y me he quedado asi [flipa]
Hola.

Sobre colaboracion... pues no se que sentido tiene, cuando mi programa ya es un producto terminado e independiente y funciona bien: se pueden mejorar detalles, pero para eso no es necesario que yo colabore mas: para eso, está el codigo fuente disponible.

El unico papel que puedo tener, es que si alguien aporta graficos nuevos, los puedo añadir, asi como resolucion de bugs u orientar a otras personas que tengan dudas a la hora de mejorar este proyecto (e incluso estoy aportando detalles para que otros podais hacer vuestros propios programa de este palo)

Quitando esos detalles, no tiene sentido que yo deba avanzar en otras direcciones, pero cualquiera puede disponer del codigo fuente de Guitarfun para usarlo en su proyecto, siempre que se respete su licencia (GPL v3) y se haga constar su autor original (o sea, yo) .

Sobre los requisitos de memoria, este programa está pensado para funcionar en una maquina de solo 32 MB de memoria... y con solo 4MB de VRAM: otra cosa, es que Windows sea un devora recursos y la gente tenga otras aplicaciones funcionando a la vez, junto con el juego.

Mi ordenador tiene 512MB y las caracteristicas especificadas, son a modo de orientacion (vamos, la maquina que yo tengo)

Lo que si es verdad, es que se necesita una potencia de proceso mayor, debido a que los calculos vectoriales se hacer con la CPU, asi como todo el mezclado de audio, pero eso es mas un consecuencia de hacer un codigo portable que un defecto del programa en si (si no se aprovechan caracteristicas del hardware, se tendra que emular por software, como es logico)

Saludos
Hermes escribió:El unico papel que puedo tener, es que si alguien aporta graficos nuevos, los puedo añadir, asi como resolucion de bugs u orientar a otras personas que tengan dudas a la hora de mejorar este proyecto (e incluso estoy aportando detalles para que otros podais hacer vuestros propios programa de este palo)


Bueno, eso tambien es colaboracion... :D Lo mejor de todo es que con un par de lineas ahora si he conseguido enterarme como era el asunto de los samples de audio, cosa que la otra vez no pude con un parrafo de media pagina... :P

Hermes escribió:Quitando esos detalles, no tiene sentido que yo deba avanzar en otras direcciones, pero cualquiera puede disponer del codigo fuente de Guitarfun para usarlo en su proyecto, siempre que se respete su licencia (GPL v3) y se haga constar su autor original (o sea, yo) .


Ni lo dudes: si uso codigo tuyo te lo dire, y seras de los primeros que tendra una copia funcional cuando lo termine :)

Hermes escribió:Sobre los requisitos de memoria, este programa está pensado para funcionar en una maquina de solo 32 MB de memoria... y con solo 4MB de VRAM: otra cosa, es que Windows sea un devora recursos y la gente tenga otras aplicaciones funcionando a la vez, junto con el juego.


Cierto, llevo demasiado tiempo mal acostumbrado a lo bueno... :P

Hermes escribió:Lo que si es verdad, es que se necesita una potencia de proceso mayor, debido a que los calculos vectoriales se hacer con la CPU, asi como todo el mezclado de audio, pero eso es mas un consecuencia de hacer un codigo portable que un defecto del programa en si (si no se aprovechan caracteristicas del hardware, se tendra que emular por software, como es logico)


No he mirado el codigo como esta, pero si es minimamente portable si que se puede aprovechar un poco el tema, y mas si usas OpenGL y DirectX que son librerias estandar. Mismamente con OpenGL te puedes definir tus propias matrices de funciones, con lo que ya el calculo lo estaria haciendo la GPU... Mirare el codigo, a lo mejor se puede desarrollar una interfaz 3D comun para aumentar la portabilidad...
El Piraña escribió:No he mirado el codigo como esta, pero si es minimamente portable si que se puede aprovechar un poco el tema, y mas si usas OpenGL y DirectX que son librerias estandar. Mismamente con OpenGL te puedes definir tus propias matrices de funciones, con lo que ya el calculo lo estaria haciendo la GPU... Mirare el codigo, a lo mejor se puede desarrollar una interfaz 3D comun para aumentar la portabilidad...



Bueno, te comento este cacho, para que entiendas por donde el va el problema de calculo vectorial: La PS2, no tiene una GPU, si entendemos como GPU la posibilidad de realizar calculos vectoriales y transformaciones.

Para ello, utilizo VU0 que me multiplica los vectores por la matriiz divinamente, pero luego, la proyeccion es un poco particular, por varios motivos.

Uno de ellos ,es que el programa posiciona en distintas zonas de la pantalla los graficos e incluso la generacion del mastil utiliza una forma especial para crear el segundo mastil en forma de espejo.

Tambien en PS2, tengo que invertir la Z debido a que yo uso un sistema donde 0 seria justo enfrente de la camara y 65535 el punto mas alejado (y en la PS2 seria al reves)

Por otro lado, justo antes de proyectar, ajusto una variable que hace de Offset Z (algo asi como alejar acercar la camara un poco), para evitar ciertos problemas de solapamiento debido a que el buffer Z es de solo 16 bits.

Podria haber tratado de modificar eso, tirando de matrices, pero por un lado.. ¿para que? No lo necesito, ya que los PC son suficientemente potentes hoy en dia para mover eso sin despeinarse y tambien hay graficos que no hacen uso de ese sistema de proyeccion (y tambien hubiera complicado el uso de Direct3D, junto con OpenGL, al requerir otro tipo de tratamiento).

Por otro lado, se usan unas funciones 3D muy similares a las de PS2 (libito) que encapsulan OpenGL o Direct3D.

Tampoco me merecia la pena deformar el codigo sin una necesidad real: Otra cosa es que me pudiera plantear en un momento dado, optimizar el codigo mejor para la siguiente version, desvinculandolo de ciertos usos que precisa el codigo para PS2.

Pero ahora, no era el momento: de hecho, si busco optimizacion, deberia prescindir de SDL y usar DirectSound y DirectInput, como dios manda (aparte de Direct3D), pero eso rompería el tema de la portabilidad y cerraría el codigo hacia una plataforma, con unos requisitos bien definidos (DirectX 9.0)
Hermes escribió:Pero ahora, no era el momento: de hecho, si busco optimizacion, deberia prescindir de SDL y usar DirectSound y DirectInput, como dios manda (aparte de Direct3D), pero eso rompería el tema de la portabilidad y cerraría el codigo hacia una plataforma, con unos requisitos bien definidos (DirectX 9.0)


No si lo hubieras hecho con algun tipo indirecto, como librerias independientes o como hice yo con la clase abstracta :D Tengo mañana examen y no he estudiado, y estare con examenes hasta el dia 12, pero te pasare el codigo para que veas como cambiando solo el codigo presente en las funciones de un unico archivo y linkando desde otro a la nueva libreria tienes portabilidad y optimizacion. Es cierto que es bastante complejo el como lo has hecho para la PS2, pero nadie ha dicho que haya que tirarlo todo, simplemente encapsularlo y usarlo solamente cuando se decida compilar para la PS2, nada mas... ¿Quieres Linux? Usar OpenGL. ¿Quieres Windows? Usas DirectX. ¿Quieres PS2? Usas SDL, asi de claro. Asi es como lo tengo pensado hacer yo y excepto la indireccion que provoca el usar clases abstractas te aseguro que el rendimiento es muy bueno...

¿Ves como si puede haber colaboracion? ;)
El Piraña escribió:
No si lo hubieras hecho con algun tipo indirecto, como librerias independientes o como hice yo con la clase abstracta :D Tengo mañana examen y no he estudiado, y estare con examenes hasta el dia 12, pero te pasare el codigo para que veas como cambiando solo el codigo presente en las funciones de un unico archivo y linkando desde otro a la nueva libreria tienes portabilidad y optimizacion. Es cierto que es bastante complejo el como lo has hecho para la PS2, pero nadie ha dicho que haya que tirarlo todo, simplemente encapsularlo y usarlo solamente cuando se decida compilar para la PS2, nada mas... ¿Quieres Linux? Usar OpenGL. ¿Quieres Windows? Usas DirectX. ¿Quieres PS2? Usas SDL, asi de claro. Asi es como lo tengo pensado hacer yo y excepto la indireccion que provoca el usar clases abstractas te aseguro que el rendimiento es muy bueno...

¿Ves como si puede haber colaboracion? ;)


¿Librerias independientes?¿Estas de coña?

Permiteme que te diga un par de cosas:

1) En PS2, las librerias son un tanto particulares: yo hice la mejor libreria de sonido para juegos de PS2, y no se parecen en nada a librerias que puedas tener en cualquier otra maquina, porque de hecho, usan un mecanismo que no se parece en nada a cualquier cosa que hayas visto en maquina alguna. Ademas, en PS2 hay problemas de estabilidad de codigo, por lo que renunciar a algo que funciona de puta madre, para ir a la 'moda' no es tan sencillo

2) utilizar SDL , OpenGL o cualquier otro tipo de libreria de ese estilo, en una consola, es un GRAVE error, sobre todo cuando no se soporta de forma nativa algo equivalente y la potencia, memoria, etc, es bastante limitada. En ese caso, son un lastre del copón.

Mi Guitarfun lo mueve la PS2 perfectamente, sin ninguna ralentizacion o problema de otro tipo, incluso a dos jugadores, teniendo en cuenta que tiene un procesador a 300Mhz, que trabaja a saco con floats para mostrar las notas , que la unidad vectorial trabaja a 150Mhz, la misma velocidad que tiene el bus de datos y cuento solo con 4MB de VRAM (la pantalla gasta 640x512x6 bytes)

En cambio en PC, se necesita mucha mas maquina y cuesta un cojon sincronizar sin tirones y hay problemas de todo tipo y esas librerias independientes, lo unico que hacen, es joder: ni siquiera puedes estar seguro de que funcionaran correctamente, como por ejemplo, le pasa a Dimitri que le desaparecen las texturas de 128x64 pixeles y le aparece el Guitarrista en su lugar ¬_¬ (es el unico que me ha comentado ese problema y desde luego, no es cosa del programa, si no de drivers , con seguridad ¿como arreglo yo dicho problema?)

Y si, uso unas funciones de por medio que encapsulan las funciones de PS2, pero al mismo tiempo, tengo que "emular" el funcionamiento de esas funciones, luego afecta al rendimiento.

En PS2, con mi AudioLIB, puedo programar 48 voces con efectos, comprimidas en formato VAG (ocupa 1/3 que en PCM) con accion retardada y una duraccion determinada, en pasos de 10 ms sin que el procesador central se ralentice un apice (usa IOP, un subprocesador que se encarga de todos los perifericos y que trabaja a 37 Mhz)

En PC uso PCM de 8 bits y la CPU tiene que convertir el sample en frecuencia y ajustar el volumen, para luego cachear en RAM esos samples y emular el funcionamiento, que se acaba traduciendo en un mezclado de tan solo 8 voces por software (que le tocará los eggs al procesador, a dos manos)

No, encapsular los procedimientos con funciones genericas, no es una buena idea desde el punto de vista del rendimiento: por razones de portabilidad, si, pero por esas mismas razones, usas SDL con solo un canal PCM stereo, pese a que podrias usar 32 o mas voces por hardware desde Windows, con relativa facilidad e indudable eficacia en el rendimiento.

La diferencia, es que mi codigo está adaptado para funcionar en la maquina MENOS potente, por lo que al pasarlo a una maquina muy superior, aguanta el tipo, a pesar de que tengo que añadir codigo que "emula" las funciones de PS2 y que dicha emulacion depende de librerias estandar y un SO que no puedo controlar en absoluto (por ejemplo, no puedo controlar que siendo mi aplicacion un proceso en tiempo real , una aplicacion con menor prioridad fuerce el uso de la memoria virtual y pueda joder el rendimiento de mi aplicacion)

En fin, que no son horas para soltar estos tochos, pero yo te recomendaría que ajustases tu programa para Xbox y no para PC, pues obviamente, si el PC va sobrado y lo portas a una maquina equivalente (un mac o bajo un SO como Linux) lo logico es que no tengas muchos problemas, pero en una maquina inferior, las SDL, OpenGL, etc, podrian ser mas un lastre que otra cosa, al igual que tu encapsulamiento de compatibilidad.

Eso si: Xbox tiene el doble de RAM, una GPU del carajo y un procesador mas potente que PS2 y lo mismo no es tan grave la cosa, pero yo te aseguro que el Guitafun de PS2, te mueve una partida a dobles con una fluided tremenda, pero que le metes dos gilipolleces mas y el programa va a pedos, porque la PS2 va al limite de proceso.

PD: Que mas quisiera yo poder usar el driver de teclado que tengo en PS2, que me permite utilizar dos teclados por separado y que para leer las teclas de los trastes, solo tengo que refrescar la cache de una porcion de memoria, pues el IOP refresca ese area via DMA de forma automatica
Hermes escribió:
¿Librerias independientes?¿Estas de coña?

Permiteme que te diga un par de cosas:

1) En PS2, las librerias son un tanto particulares: yo hice la mejor libreria de sonido para juegos de PS2, y no se parecen en nada a librerias que puedas tener en cualquier otra maquina, porque de hecho, usan un mecanismo que no se parece en nada a cualquier cosa que hayas visto en maquina alguna. Ademas, en PS2 hay problemas de estabilidad de codigo, por lo que renunciar a algo que funciona de puta madre, para ir a la 'moda' no es tan sencillo


Acabo de echar un vistazo a tu codigo y ya puedo criticarlo un poquito mas ;) Impresionante todo lo que tienes ahi metido, aunque lo tienes un poco mazacote y cuesta encontrar las cosas... Al decir independientes me referia a que no fuese todo tan monolitico, sino que fuese un poco mas modular. Nadie ha dicho que haya que prescindir de tu libreria de audio, simplemente hacer de algun modo que esa libreria solo se necesite en la PS2, y no haya que andar "emulando" una PS2 en el PC sino usar librerias propias.

Hermes escribió:2) utilizar SDL , OpenGL o cualquier otro tipo de libreria de ese estilo, en una consola, es un GRAVE error, sobre todo cuando no se soporta de forma nativa algo equivalente y la potencia, memoria, etc, es bastante limitada. En ese caso, son un lastre del copón.


Dije SDL porque es bastante portable y no se como se llama el SDK de la PS2 (si es que existe...). Precisamente esa es una ventaja de hacerlo modular como yo digo: si hay algo mejor, solo hay que implementar esa parte, no tirarlo todo abajo :D

Hermes escribió:En cambio en PC, se necesita mucha mas maquina y cuesta un cojon sincronizar sin tirones y hay problemas de todo tipo y esas librerias independientes, lo unico que hacen, es joder: ni siquiera puedes estar seguro de que funcionaran correctamente, como por ejemplo, le pasa a Dimitri que le desaparecen las texturas de 128x64 pixeles y le aparece el Guitarrista en su lugar ¬_¬ (es el unico que me ha comentado ese problema y desde luego, no es cosa del programa, si no de drivers , con seguridad ¿como arreglo yo dicho problema?)


La verdad que el problema de las texturas tambien me dejo un poco KO... Podria ser un problema de rutas, pero deberia pasarle a alguien mas tambien...

Hermes escribió:(usa IOP, un subprocesador que se encarga de todos los perifericos y que trabaja a 37 Mhz)


Conozco el bicho, me hizo gracia cuando me entere de que la PS2 tenia dentro medio escondida una PSX solo para manejar los keypad... :P

Hermes escribió:En PC uso PCM de 8 bits y la CPU tiene que convertir el sample en frecuencia y ajustar el volumen, para luego cachear en RAM esos samples y emular el funcionamiento, que se acaba traduciendo en un mezclado de tan solo 8 voces por software (que le tocará los eggs al procesador, a dos manos)

No, encapsular los procedimientos con funciones genericas, no es una buena idea desde el punto de vista del rendimiento: por razones de portabilidad, si, pero por esas mismas razones, usas SDL con solo un canal PCM stereo, pese a que podrias usar 32 o mas voces por hardware desde Windows, con relativa facilidad e indudable eficacia en el rendimiento.


Yo lo que hago con el SDL es tener la musica reproduciendose por el fondo como banda sonora y olvidarme de ella y cargar las guitarras como efectos de sonido a los que les subo o les bajo el volumen, mas o menos como hace el Frets on Fire... Con eso le puedo meter todos los canales que quiera. Elegante no sera, pero oye, funciona :D

Hermes escribió:En fin, que no son horas para soltar estos tochos, pero yo te recomendaría que ajustases tu programa para Xbox y no para PC, pues obviamente, si el PC va sobrado y lo portas a una maquina equivalente (un mac o bajo un SO como Linux) lo logico es que no tengas muchos problemas, pero en una maquina inferior, las SDL, OpenGL, etc, podrian ser mas un lastre que otra cosa, al igual que tu encapsulamiento de compatibilidad.

Eso si: Xbox tiene el doble de RAM, una GPU del carajo y un procesador mas potente que PS2 y lo mismo no es tan grave la cosa, pero yo te aseguro que el Guitafun de PS2, te mueve una partida a dobles con una fluided tremenda, pero que le metes dos gilipolleces mas y el programa va a pedos, porque la PS2 va al limite de proceso.


Si nos ponemos asi, incluso el usar C++ en lugar de C podria afectarle... :D Se que el usar una clase abstracta va a afectarle al rendimiento, pero todo es jugar con el codigo. Esta claro que el mio para la PS2 no va a funcionar, porque si me ha costado hacer que baje la ram a 64 no te digo a 32. En ese aspecto la optimizacion y el diseñar pensando en una plataforma es fundamental, pero eso no tiene que limitar el que se use en otras... Sino mira el kernel de Linux: es un unico kernel con partes comunes pero luego tiene un monton de arboles distintos para las cosas que son especificas de cada plataforma. Pues asi deberia ser todo...

Hermes escribió:PD: Que mas quisiera yo poder usar el driver de teclado que tengo en PS2, que me permite utilizar dos teclados por separado y que para leer las teclas de los trastes, solo tengo que refrescar la cache de una porcion de memoria, pues el IOP refresca ese area via DMA de forma automatica


Buen truco, si señor... Hombre, con USB puedes usar varios teclados por separado, asi que a lo mejor eso te puede dar una pista... Yo ese problema tambien lo tendre cuando le meta multijugador... :-/
El Piraña escribió:
Acabo de echar un vistazo a tu codigo y ya puedo criticarlo un poquito mas ;) Impresionante todo lo que tienes ahi metido, aunque lo tienes un poco mazacote y cuesta encontrar las cosas...


Tenias que haberlo visto cuando estaba todo junto X-D

Los programas crecen de forma exponencial y luego cuesta modularizar las cosas, pues hay muchos variables que se cruzan y muchas dependencias por todas partes.

Verás, tu estas estudiando la carrera de informatica... yo soy un yesero que programa y soy mucho mas salvaje y desordenado X-D .

Eso si, llevo 23 años programando como aficionado y lo que a ti te parece un codigo desordenado y denso, yo lo entiendo perfectamente y estoy acostumbrado a ver codigos tan o mas enmarañados que este y en poco rato, dominarlos.

Como es evidente, yo no programo indicando todas las calles en el mapa... entre otras cosas, porque uno parte de cero y tiene que averiguar cual es el camino que conduce al exito y a veces, cosas que funcionan, no sirven y en mi caso, cuando mi mente está creando codigo no puede perderse en "tonterias" pues cualquier distraccion te lleva a cometer un error que luego puede costar mucho encontrar de donde viene el problema.

Lo de programar usando C++, yo soy muy contrario de la utilizacion de dicho lenguaje en consola (y mas cuando en PS2, un simple malloc, no funciona como debiera y con un free te puedes cargar todo el monticulo de memoria, porque las librerias son una mierda, como para tener que ir creando objetos XD). Y ya no digamos la que se puede liar en multihilo con estas librerias de juguete XD

Esto es una guerra a muerte: estas tu solo y debes averiguar un camino para lograr tu objetivo y vencer todos los obstaculos practicos, asi como los bugs de las librerias que no hiciste (pues TODOS tenemos fallos programando), ampliarlas (el truco del teclado que uso, es una ampliacion del driver USB de teclado para PS2) e incluso crear librerias propias que ayuden a aprovechar el hardware en estas situaciones.

Ah! Y conseguir tu objetivo, antes que el desanimo, factor tiempo, o lo que sea, de al traste con ello (y encontrar los problemas/bugs "a pelo", sin ayuda de alguna herramienta, no es algo que todo el mundo domine).

En mi caso, el ritmo de trabajo suele ser alto y por ejemplo, pasé de no conocer como se inicializaba la libreria Direct3D 9.0 a tenerlo
completamente implementado el soporte, en menos de medio dia, sin planificacion alguna (con OpenGL fue algo similar, aunque algo mas escalonado y la decisión de usar tablas para convertir los parametros de pantalla, fue automatica. no tuve ni que plantearmelo)

Si no lo hiciera así, no podría hacer programas porque es una barbaridad de trabajo para una persona sola y si no subes el potencial de la ' chispa' creadora, se apaga brutalmente XD

Otra cosa, si siempre te limitas a escurrir el bulto, usando librerias que hacen otros pero sin entender el codigo que hay por debajo, si las cosas funcionan, bien, pero como haya un problema, la has cagado porque no sabes como solucionarlo (eso le pasa a cantidad de gente con la SDL, cuando se hacen adaptaciones y algo no va bien)

PD: Me preguntó jiXo si liberaría el codigo particular de PS2: le dije que no, porque aparte de que yo tengo cuentas pendientes con dicha 'scene' ¿de que sirve un codigo que utiliza unas librerias antiquisimas (aunque retocadas) y unos compiladores antiquisimos que nadie tiene y que nadie va a poder compilar?

Ahora pensareis "joder Hermes, podias haber actualizado un poco y blah, blah", pero es que mis programas funcionan, mis librerias estan arregladas para que funcionen y las otras, te puedes volver loco para averiguar un fallo que no es tuyo y que si no es nuevo, se arrastra desde la version tan antigua que uso yo o mas lejos X-D

PD2: Espero que este tochaco sea de utilidad XD: Solo pretendo que veais mi enfoque de situacion desarrollando homebrew de forma individual.
Hermes escribió:
Tenias que haberlo visto cuando estaba todo junto X-D


Prefiero no hacerlo... ;)

Hermes escribió:Los programas crecen de forma exponencial y luego cuesta modularizar las cosas, pues hay muchos variables que se cruzan y muchas dependencias por todas partes.


Entonces eres de los mios, porque lo de programar "linealmente" tampoco me mola: una linea aqui, una funciona alla... Vamos, que soy de los que opinan que la programacion es un arte, como escribir poesia (y el simil es bueno... ;) )

Hermes escribió:Verás, tu estas estudiando la carrera de informatica... yo soy un yesero que programa y soy mucho mas salvaje y desordenado X-D .

Eso si, llevo 23 años programando como aficionado y lo que a ti te parece un codigo desordenado y denso, yo lo entiendo perfectamente y estoy acostumbrado a ver codigos tan o mas enmarañados que este y en poco rato, dominarlos.


Y yo que creia que lo del yesero era una forma de hablar... Tio, te me has convertido en mi idolo [buenazo] . Si, estoy en la carrera, pero ya te digo, tampoco sigo muy bien las formas y me voy adaptando "poquito a poco" cogiendo lo que me interesa. Yo tambien escribia codigo spaguetti al principio porque los entendia sin problemas hasta que empece a hacer programas mas grandes... Ahora me he amariconado y en cuanto no veo un codigo bien indentado con tabuladores de 4 espacios, llaves de apertura y cierre en lineas separadas a las de las declaraciones y en un editor con coloreado de sintaxis y a ser posible con ocultacion del arbol de codigo no soy persona... :P

Hermes escribió:Como es evidente, yo no programo indicando todas las calles en el mapa... entre otras cosas, porque uno parte de cero y tiene que averiguar cual es el camino que conduce al exito y a veces, cosas que funcionan, no sirven y en mi caso, cuando mi mente está creando codigo no puede perderse en "tonterias" pues cualquier distraccion te lleva a cometer un error que luego puede costar mucho encontrar de donde viene el problema.


Completamente de acuerdo. Precisamente por eso me gusta python, porque es el unico lenguaje que me ha permitido hacer todo tipo de locuras y barrabasadas sin ponerme impedimentos de ningun tipo... ¿Ejemplos? Unir varias cadenas de texto para crear el nombre de una funcion y despues ejecutarla directamente a pelo :D

Hermes escribió:Lo de programar usando C++, yo soy muy contrario de la utilizacion de dicho lenguaje en consola (y mas cuando en PS2, un simple malloc, no funciona como debiera y con un free te puedes cargar todo el monticulo de memoria, porque las librerias son una mierda, como para tener que ir creando objetos XD). Y ya no digamos la que se puede liar en multihilo con estas librerias de juguete XD


Te veo muy disconforme con dicha consola... ¿has oido hablar de cierta consola de Microsoft llamada XBox? Dicen que es tan facil de programar como un PC X-D Joer, no sabia que estaba tan mal el tema con la PS2, no me explico entonces como ha tenido tanto exito si los primeros que tienen que apoyarla son los programadores... Lo del C++ es cierto, se pierde rendimiento con los objetos, pero oye, es mas claro de cara al programador ya que es mucho mas real y natural tratar con objetos ya que estamos usandolos continuamente desde que nos levantamos. Yo desde que entendi como funcionaba la POO y en concreto C++ no quiero otra cosa (ODIO JAVA A MUERTE!!!!!)

Hermes escribió:(pues TODOS tenemos fallos programando)

Ah! Y conseguir tu objetivo, antes que el desanimo, factor tiempo, o lo que sea, de al traste con ello (y encontrar los problemas/bugs "a pelo", sin ayuda de alguna herramienta, no es algo que todo el mundo domine).


Ya te digo...

Hermes escribió:Si no lo hiciera así, no podría hacer programas porque es una barbaridad de trabajo para una persona sola y si no subes el potencial de la ' chispa' creadora, se apaga brutalmente XD


Esta me la apunto.

Hermes escribió:Otra cosa, si siempre te limitas a escurrir el bulto, usando librerias que hacen otros pero sin entender el codigo que hay por debajo, si las cosas funcionan, bien, pero como haya un problema, la has cagado porque no sabes como solucionarlo (eso le pasa a cantidad de gente con la SDL, cuando se hacen adaptaciones y algo no va bien)


Eh, quieto parao y no acuses, que mi principal problema es que soy demasiado JuanPalomo. El codigo que hay debajo intento entenderlo, simplemente que si hay algo ya hecho que me vale y esta probado mejor usarlo que hacerlo de nuevo y asi justamente puedes dedicar mas tiempo a crear. Esa es una de las muchas razones por las que odio Java, porque como tienes codigo para todo, pues ya no sabes que programar y tu cerebro se seca. Sin embargo con C++ te es casi mas rapido añadir un puntero a una clase para asi hacerte una lista de punteros que poner el #include a la stdlib a pesar de que esta es mucho mejor, pero si ya la estas usando pues la aprovechas, no como en Java que te obligan a usar las librerias ya existentes aunque no tengas ni pajolera idea de que coño hacen...

Ah, y SDL esta de puta madre: si no es por el y por lo sencillo que es de manejar (y de Guitar Xero por haberme servido para aprender a manejarla... :-P ) no me habria podido hacer un motor de traza de rayos para Informatica Grafica como parte practica de una exposicion teorica y dejar a toda la clase con la boca abierta... X-D

Hermes escribió:PD: Me preguntó jiXo si liberaría el codigo particular de PS2: le dije que no, porque aparte de que yo tengo cuentas pendientes con dicha 'scene' ¿de que sirve un codigo que utiliza unas librerias antiquisimas (aunque retocadas) y unos compiladores antiquisimos que nadie tiene y que nadie va a poder compilar?

Ahora pensareis "joder Hermes, podias haber actualizado un poco y blah, blah", pero es que mis programas funcionan, mis librerias estan arregladas para que funcionen y las otras, te puedes volver loco para averiguar un fallo que no es tuyo y que si no es nuevo, se arrastra desde la version tan antigua que uso yo o mas lejos X-D


Tienes toda la razon: si se han aprovechado de ti tienes derecho a no poner el codigo, o al menos publicamente. Y por supuesto esta el asunto de los compiladores antiguos, lo cual casi es para matar a la Sony...

(por curiosidad... ¿un mini-tuto de como se compila para la PS2? Ya me encontre el como hacerlo para la PSP... :P )

Hermes escribió:PD2: Espero que este tochaco sea de utilidad XD: Solo pretendo que veais mi enfoque de situacion desarrollando homebrew de forma individual.


Lo es, muy educativo y muy razonadas tus explicaciones, y encima demuestra que la fama que te precede es con razon. Yo porque no estoy nada metido en los temas de scene y demas (de hecho no me gustaban las videoconsolas y apenas jugaba hasta que me enseñaron tooooodo lo que se podia hacer con una XBox crackeada y un disco duro de varios cientos de gigas... la mejor compra que he hecho en mi vida :D ) pero se nota que pilotas y encima estas dispuesto a enseñar, y eso se agradece.

Y a modo de OffTopic y autobombo... con el temita del GuitarFun me he puesto en el metro a mirar lo que tenia pendiente del gettimeofdate() en el Guitar Xero... ¡¡¡y ahora ya me funciona perfectamente sincronizado el audio y el video!!! :D Noto un pequeño desajuste cuando la cancion ya va por mas de la mitad de quizas un frame o dos, pero a lo mejor es perfeccionismo mio o vista cansada de fijarme tanto o cancion mal editada o vete a saber. En cualquier caso en cuanto pille un hueco pruebo que me funcione en Windows y Linux (debo de ser uno de los pocos programadores de videojuegos que usa Mac como entorno de desarrollo, al menos aqui en España...) subo todo el codigo y ya me contais que tal :) ¿Abro un nuevo hilo o seria intentar hacerle sombra a Hermes?
Excelente trabajo.

Yo también soy desordenado con el código, pero intento remediarlo antes de que sea imposible XDXD.

El Piraña escribió: Completamente de acuerdo. Precisamente por eso me gusta python, porque es el unico lenguaje que me ha permitido hacer todo tipo de locuras y barrabasadas sin ponerme impedimentos de ningun tipo... ¿Ejemplos? Unir varias cadenas de texto para crear el nombre de una funcion y despues ejecutarla directamente a pelo :D


[boing] Dios, que chulada.
El Piraña escribió:¿Abro un nuevo hilo o seria intentar hacerle sombra a Hermes?


Abre nuevo hilo, a mi la sombra no me molesta, me molesta mas la ausencia de sombra.

Si te fijas, en el tiempo de vida de este foro, mi trabajo ha tenido bastante peso, incluso siendo portada en ocasiones.

El problema es que yo soy un programador aficionado: hago lo que quiero por que me gusta, pero tambien pienso que si la vida no fuera tan burlona, quiza ahora podria estar trabajando profesionalmente en ello (o quiza no y estaria diseñando circuitos electronicos)

Muchos de vosotros, estais en plena formacion y estos tema de scene, son como hacer un master, que os prepara mentalmente para la resolucion de problemas de programacion (sobre todo cuando te metes a programar para consolas, con librerias homebrew y compiladores experimentales)

En PS2, las librerias no las proporciona SONY: son reversadas.

Yo por ejemplo, he reversado bastante codigo en PS2 y he trabajado bastante duro en ella (por que lo que aparte de reversar he inventado lo que hubiera que inventar), lo que me permitió por ejemplo, desarrollar el nucleo del PS2Reality Mediaplayer en PS2 y otro buen puñado de cosas

Por cierto, que el sistema de temporizacion mediante los samples.... ya lo utilizaba en el Mediaplayer , pues es la forma logica de hacerlo: los temporizadores, no son precisos: siempre tienen una desviacion que no se va a corresponder con los samples.

Es mas: no puedes garantizar nunca que tu hilo grafico no supere el tiempo limite o que no vayas a sufrir un atasco a la hora de leer o descodificar el audio: cualquier minimo desfase del audio con respecto a un timer absoluto, provocara que todo vaya mal.

En fin, en vuestra mano está animaros a hacer cosas locas de estas: yo ya hace tiempo que estoy de vuelta y un dia cualquiera, colgaré el compilador definitivamente :p

Saludos y al tajo.
Hermes escribió:
Abre nuevo hilo, a mi la sombra no me molesta, me molesta mas la ausencia de sombra.

Si te fijas, en el tiempo de vida de este foro, mi trabajo ha tenido bastante peso, incluso siendo portada en ocasiones.

El problema es que yo soy un programador aficionado: hago lo que quiero por que me gusta, pero tambien pienso que si la vida no fuera tan burlona, quiza ahora podria estar trabajando profesionalmente en ello (o quiza no y estaria diseñando circuitos electronicos)

Muchos de vosotros, estais en plena formacion y estos tema de scene, son como hacer un master, que os prepara mentalmente para la resolucion de problemas de programacion (sobre todo cuando te metes a programar para consolas, con librerias homebrew y compiladores experimentales)

En PS2, las librerias no las proporciona SONY: son reversadas.

Yo por ejemplo, he reversado bastante codigo en PS2 y he trabajado bastante duro en ella (por que lo que aparte de reversar he inventado lo que hubiera que inventar), lo que me permitió por ejemplo, desarrollar el nucleo del PS2Reality Mediaplayer en PS2 y otro buen puñado de cosas

Por cierto, que el sistema de temporizacion mediante los samples.... ya lo utilizaba en el Mediaplayer , pues es la forma logica de hacerlo: los temporizadores, no son precisos: siempre tienen una desviacion que no se va a corresponder con los samples.

Es mas: no puedes garantizar nunca que tu hilo grafico no supere el tiempo limite o que no vayas a sufrir un atasco a la hora de leer o descodificar el audio: cualquier minimo desfase del audio con respecto a un timer absoluto, provocara que todo vaya mal.

En fin, en vuestra mano está animaros a hacer cosas locas de estas: yo ya hace tiempo que estoy de vuelta y un dia cualquiera, colgaré el compilador definitivamente :p

Saludos y al tajo.



Si la verdad es increible que gente con carreras y estudios no desarrollen nada o muy poco y un aficionado como hermes sea portada del foro cada dos por tres.

¿Circuitos electronicos?, yo te veo capaz despues de tu gran aporte en Prodigy. Sacate los estudios que tu te los sacas con la punta de la minga hombre!
Hola.

Acabo de publicar una nueva version del juego Guitarfun (2.3) y por tanto he actualizado el codigo.

Entre las novedades en el codigo:


- Carga de bitmaps para el fondo y el mastil con reescalado de tamaño.

- Implementacion con instrucciones SSE para la multiplicacion de vertices por una matriz.

- Implementacion mediante instrucciones MMX del mezclado de voces (se mezcla en tandas de 8+8 samples).

Queda por actualizar los recursos graficos.

Saludos.
Buenas Hermes, en primer lugar, felicidades por el esfuerzo que es hacer un programa/juego como este, debo admitir que está muy currado.

He estado probando la guitarra de PS3 y sorprendentemente es reconocida a la perfección tanto por el Sistema Operativo como por el Guitarfun.

Muchas gracias por todo.
Enhorabuena por el programa. Siento no tener conocimientos en programación pero si alguien se anima a portarlo a XBOX (la antigua) estaría de PM!!
Hay adaptadores de PS2 a XBOX para enchufarle la guitarra :)
Antikton escribió:Enhorabuena por el programa. Siento no tener conocimientos en programación pero si alguien se anima a portarlo a XBOX (la antigua) estaría de PM!!
Hay adaptadores de PS2 a XBOX para enchufarle la guitarra :)



Hola.

El codigo fuente está ahi para quien lo quiera utilizar: yo no me voy a ocupar de hacer el port a Xbox, entre otras cosas, porque no tiene sentido para mi (tengo Xbox, pero no adaptador para la guitarra y ya tengo el programa funcionando en PS2 y PC: prefiero hacer otras cosas).

El Piraña está haciendo un juego propio para esa plataforma, asi que supongo que si no se desanima o se cansa del tema, lo acabará por sacar.

Saludos.
Hermes escribió:El Piraña está haciendo un juego propio para esa plataforma, asi que supongo que si no se desanima o se cansa del tema, lo acabará por sacar.


Desanimado no estoy, lo que pasa es que no tengo tiempo por la universidad y la beca de trabajo y el poco que me queda prefiero hacer otras cosas relacionadas lo menos posible con la informatica... [666] Y lo poco que queda, lo dedico a responder el correo y ver foros tan mierdosos como este (es una broma... ;-) )

Pero si, pienso sacarlo adelante. Por el momento ya arregle el asunto del sincronismo pero solo bajo MacOS X y bajo Linux (Windows no tiene la funcion getTimeofDate() en sys/time.h a no ser que lo compile bajo cygwin en lugar de con mingw y Dev-C++, y como que paso...) y tambien he completado el area de configuracion y me cambia la resolucion y el modo a pantalla completa en tiempo real, asi que... [sonrisa]
30 respuestas