De un grano de arena, una MontañaHermes escribió el 05-11-2007 a las 00:36:
Hola.
Espero que no te moleste que te aborde via MP (weno, si te molesta, te jodes que para eso están los amigos
) pero...
resulta que el otro día, me bajé un pack de canciones para usarlo con mi programa Guitar fun, y tuve un problema.
Al parecer, el formato MIDI de las canciones tiene una variación que no estaba prevista en mi programa y eso hacia que se saltara muchas notas. Pues bien, me puse a mirar que era lo que fallaba y ahí comienza ésta historia.
Después de un tiempo hurgando las tripas del mi interprete MIDI, encontré el problema y lo arreglé, peeero, entonces recordé que en PSXLOADER utilizaba un modulo USB mas compatible con las pendrives y me dió por meterlo.
Luego recordé que el modulo VFAT a veces se hace la picha un lio con los nombres un poco raros y me dió por arreglarlo y cuando hube acabado, pensé que puesto que tengo un buen numero de canciones procedentes de los Guitar Hero y estas vienen con la pista de bajo, ya era hora de que habilitara la posibilidad de tocar el bajo, ademas de la guitarra.
Entonces se me ocurrió la locura mas grande que se me podía haber ocurrido: puesto que ya podía tocar el bajo y la guitarra ¿Que tal hacer modo Multijugador?
Hacerlo no era tarea facil, puesto que primero tendría que modificar el interprete MIDI para generar dos tablas de notas, pero luego tendría que modificar un codigo pensado para un unico jugador, para que pudiera actuar en dos "mastiles" completamente diferentes.
Al arduo trabajo se unía el hecho de que tecnicamente, yo sabía que la PS2 no podria con todo eso tal como estaba, por falta de potencia.
En efecto, mis primeras pruebas, fueron concluyentes: en cuanto hubo un buen numero de notas que visualizar, se produjeron molestos parones
Pues nada, a optimizar código toca!
El problema, es que en mi juego se construyen todas las piezas que componen las notas, en tiempo real, utilizando operaciones en punto flotante y entre ellas, unas funciones seno y coseno optimizadas para crear los objetos torno. Asi que la solucion estaba
en crear unas tablas de datos que se actualizaban periodicamente, pero que aligeraba el tema de los calculos una barbaridad, sobre todo porque la mayor parte de ellos se calculan en el EE y no en la unidad vectorial.
Ahora tocaba el tema de gestionar las "guitarras". En principio, se puede utilizar PAD's, Guitarras y teclado. Pero claro, el driver de teclado solo soporta un teclado (en realidad, soporta dos teclados, pero los dos actuan como un unico teclado)
Asi que tocaba modificar el driver para que soportara dos teclados de forma independiente, sobre todo para el truco via DMA que utilizo para leer el teclado en el juego (que para no enrollarme mucho, consiste en enviar un paquete de datos desde el IOP con un mapa de pulsaciones de la teclas)
Arreglado pues, dicho problema, junto con otro que muy raro que tenía el driver, que hacia que se bloqueara el teclado cuando se producian unas cuantas miles de pulsaciones, debido a un fallo en la lógica de quien diseñó el driver originalmente...
, pues ya tenemos soporte para poder usar dos teclados, dos pads o dos guitarras o cualquier combinacion de esos elementos.
Asi pues, tenemos que el juego ahora va mas fino que antes, pero permitiendo poder tocar la guitarra o el bajo, en modo individual o batallar con otro por ver quien es mejor con la guitarra o colaborar entre ambos, uno tocando el bajo y otro la guitarra.
Aun me quedan que ultimar algunos detalles, que supongo que puliré durante ésta semana, pero es curioso: si alguien me dice hace una semana que iba a hacer tantos cambios en éste programa, no le hubiera creído (tambien he retocado graficos y corregido una serie de bugs que he encontrado por el camino)
De hecho, estaba trabajando a ratos en mi programa de creacion de modelos 3D y ni por asomo se me hubiera ocurrido que con un granito de arena, acabaría formando una montaña