GBC | [En proceso] 510 movimientos/ataques

Avisos

Like Tree9Gracias

Respuesta
 
Herramientas Desplegado
  #1  
11/02/2015
Predeterminado GBC | [En proceso] 510 movimientos/ataques


Hola Mundo!!

Aprovechando que GBC esta estrenando seccion de investigaciones les hablare de mi trabajo actual.

Como sabran (o no), en los cartuchos de I y II generacion, el numero total de "cosas" esta limitado a 255 y los Ataques no son la excepcion. Debido a que incluir nuevos pokemon o fakemons requere tambien de ampliar sus learnsets he decidido ampliar los movimientos por diversidad.



Teoria:

Asi como una vez KBC propuso usar un bit sin usar en los datos del Nivel de cada pokemon, yo propongo usar el ultimo BIT dentro de los PP de cada movimiento del pokemon en la party para diferenciar entre dos tipos de tablas (255 movimientos en cada una).



Practica:

Estas son algunas de las rutinas que he tenido que intervenir y una breve descripción de ellas:
  • PpUp: Se limita el uso de un PP UP a 1 por movimiento, similar al PP Max para evitar que altere los movimientos. El unico inconveniente es que este nuevo proceso aumenta el PP un 50%, a diferencia del 60% del PP Max de las nuevas generaciones.
  • UpdateMoveData: Rutina encargada de cargar los datos de cada movimiento a la RAM cada vez que entramos a un turno de batalla.
  • GetMoveName: Ahora tendra que leer 2 tablas para darnos el nombre.
  • GetMoveData: idem.
  • ListMoves: Una rutina un poco compleja. Carga todos los movimientos de nuestro pokemon en una caja de texto. Usada generalmente cuando se va a aprender un nuevo movimiento.
  • LearnMove: idem.
  • MoveInfoBox: Se encarga de definir los atributos de cada movimiento asi como su descripcion.



Resultados:
De momento he usado como segunda tabla los datos de los objetos, pero ya se puede observar que es funcional los cambios hechos en las rutinas. Datos de los movimientos de los pokemon:





Gracias: Drake Seawood, Pum y ~KOD3
  #2  
11/02/2015
Predeterminado Respuesta: GBC | [En proceso] 510 Movimientos/Ataques
Muy bien espero que esta investigación de frutos será util aunque yo no trabajo en gbc
Pero a los que si les gustara.
Gracias: Chamber
  #3  
11/02/2015
Predeterminado Respuesta: GBC | [En proceso] 510 Movimientos/Ataques
waao, ya prácticamente lo has logrado compa, felicidades x ello será bueno tener todos los ataques en una rom , lo único inconveniente es que a tantos ataques y pocos pokemon para usarlos, imagino que algunos no se usaran c tema de espacio, el punto es si se quiere ver a todos los ataques puestos en un pokemon seria bueno también poder ampliar el numero de pokemon a 512 como se menciono en una investigación iniciada por KBM y publicada ya hace tiempo en este foro por Gallego...
Ojala se pueda los de la ampliación de los pokemons, y suerte con esta investigación aunque veo que ya casi lo logras
Saludos compa...
Gracias: Chamber

  #4  
11/02/2015
Predeterminado Respuesta: GBC | [En proceso] 510 Movimientos/Ataques
No se.... será que estoy loco o no se, pero cada día me pareces mas el puto genio de GBC.

Decimos que @eing es el mejor hacker en cuanto a conocimiento de GBA de toda wah (Al menos eso es mi punto de vista)
Pero tu eres el mejor hacker de GBC por muchísimo de todos los que conozco.
Y eso que conozco a buenos hackers amigos mios de GBC (80C por ejemplo)

Es un avanza enorme el poder disponer de 510 movimientos en total, sin duda mejora enormemente las estrategias de combate y da lugar a nuevos entrenadores mas fuertes y mas duros.

Enhorabuena tío, esperemos que se complete pronto.
Gracias: Chamber
PRÓXIMAMENTE...
  #5  
11/02/2015
Predeterminado Respuesta: GBC | [En proceso] 510 Movimientos/Ataques
Sería posible incrementar la cantidad posible de TM's para meter nuevos movimientos a partir de esto?

Sería perfecto que esta investigación acabe dando sus frutos. Como hacker de GBC romper esta barrera sería muy bueno.

Última edición por Pum; 11/02/2015 a las 13:11
  #6  
11/02/2015
Predeterminado Respuesta: GBC | [En proceso] 510 Movimientos/Ataques
@WiZaRD : Ya lo comentamos por aqui pero seria bueno decirlo en publico. Los 510 movimientos no esta directamente relacionado con los 507 pokemons. Tener mas pokemon implica mas trabajo del que habia imaginado, asi que por el momento ya no estoy "molestando" a Crystal_ con eso.


@Master Brock : Gracias por tu apoyo y comentarios en mis temas. Siempre espero que con este tipo de investigaciones salga a la luz nueva gente que quiera unirse al bando GBC.

PD: Ya juego el Dragon Warrior Monster's 2.


@Pum : El primer problema que atraviesa esta investigacion hablando de las TM es que no es posible tener movimientos de la segunda tabla (256+) en las TM/HM de manera facil, sin embargo ya trabajo en un sistema para tener esa compatibilidad.

Ahora, incrementar la cantidad de TM/HM no lo veo factible por que eso implica ampliar el bolso de las TM, lo que si me resulta tedioso en comparacion a otras alternativas, como por ejemplo los tutores de movimientos. Pasate por la seccion de parches y mira mi recopilatorio de parches GBC, ahi encontraras el parche de tutores que amplia hasta 32 nuevos tutores.
Gracias: Master Brock
  #7  
12/02/2015
Predeterminado Respuesta: GBC | [En proceso] 510 Movimientos/Ataques
Como sabe GetMoveName (o cualquier de otra de esas rutinas que nombras) de que dirección tomar ese último bit? Podría haber hasta 48 direcciones ram que almacenen los PP de un movimiento (6 pokemon * 4 ataques * 2 entrenadores). Es mas, el movimiento del que GetMoveName quiere obtener el nombre (o del que GetMoveAttr quiere obtener un atributo, etc) no necesariamente tendría porque ser uno de esos 48 o estar relacionado con alguno de ellos.

Con esto quiero incidir en que te vas a encontrar con los mismos problemas que hablamos en lo de 2^9 Pokemon. No es suficiente con modificar esas rutinas, sino que hay que identificar todas las llamadas a esas rutinas e indagar sobre cual es la función que realizan para que la llamada a la rutina genérica (como GetMoveName) se lleve a cabo con los parametros precisos. Tener un noveno bit en ram de soporte te puede ayudar, pero no veo ninguna relación concreta entre los PP en la estructura de un Pokemon con algo tan genérico como "movimiento" que te pueda ser de ayuda. Terminaras llegando a la conclusión de que mantener ese noveno bit en cada direccion de PP no te aporta ninguna información adicional en comparación a si usas una única dirección ram que irás actualizando según sea necesario.

El engine de batalla se basa en la premisa de que ataques, pokemon y muchas otras variables se pueden referenciar con un solo byte. Todo se ha construido basado en eso. Modificarlo requiere realizar cambios desde muy abajo.
Gracias: Drake Seawood
  #8  
12/02/2015
Predeterminado Respuesta: GBC | [En proceso] 510 Movimientos/Ataques
@Crystal_ Me da gusto que apareciera alguien de tu calibre con todas estas incognitas asi que te planteo la teoria y de paso me ayudas con ella.

GetMoveName es una rutina muy generica tu lo has dicho y su modo (obvio) de funcionamiento es comprobando si el noveno bit esta activado. Como la rutina es solo una disyuntiva (solo tiene dos caminos) no pasa nada si el 9no bit no esta activado. A partir de ahi es donde entra un DECIMO bit en el caso de la batalla.

No lo he platicado con nadie por que tu eres el unico que me entenderia en terminos de ASM GBC, pero el sistema "fisico-especial" que usa el naturia es mucho mas complejo que el que en su momento me enseñaste a traducir, aquel de KBC. En este nuevo sistema se usa un byte auxiliar para CurMove, lo que define caracteristicas como si es fisico, de contacto, se activa la king's rock, etc., por lo que es ahi donde coloco el Decimo bit que solo es referenciado cuando hablamos de CurMove y similares.

Otro caso es cuando usamos LearnMove, antes de cada llamada yo uso una rutina auxiliar donde mediante un Byte (solo 4 bits enrealidad) determino el orden que tienen los 4 movimientos dentro de las 2 tablas de movimientos, asi tengo todo mejor organizado.

Por ultimo te agrego que las rutinas tienen un "candado" que evita que las propiedades de byte axuliar sean heredadas a otra rutina, por que como sabras, son muchas las rutinas que hacen llamada a un mismo movimiento a la vez. Del mismo modo el candado da seguridad a rutinas que en este momento no quiero tocar, como las de las TM.
Gracias: Pum
  #9  
12/02/2015
Predeterminado Respuesta: GBC | [En proceso] 510 Movimientos/Ataques
GetMoveName es una rutina muy generica tu lo has dicho y su modo (obvio) de funcionamiento es comprobando si el noveno bit esta activado. Como la rutina es solo una disyuntiva (solo tiene dos caminos) no pasa nada si el 9no bit no esta activado. A partir de ahi es donde entra un DECIMO bit en el caso de la batalla.
Independientemente de los bits que quieras utilizar, el problema viene de mas abajo. GetMoveName no entiende otra cosa que no sea un numero hexademinal que ella recibe en la direccion d265 e identifica como un movimiento que tiene que convertir en texto. La rutina no entiende de nada mas. Lo escribiré de otra forma, si por ejemplo [wd265] = 0x87, de que tabla lées el movimiento? Es decir, si [wd265] = 0x87, en que te basas para poner el noveno bit a 0 ó ponerlo a 1?

La solución no puede ofrecerse a nivel de GetMoveName ya que no es posible generalizar a todos los casos. Por tanto, debe proporcionarse a nivel de cada una de las rutinas que llaman a GetMoveName.

Ten en cuenta que con +256 movimientos ese noveno bit es parte de lo que define de que movimiento se trata. A fin de cuentas lo que llamamos noveno bit no deja de ser convertir el identificador de movimiento de un número de 1 byte a otro de 2 bytes. Es como pretender que tu llames a GetMoveName dándole solo un numero entre 0 y 63 y que esta rutina sea capaz de deducir por si sola los otros dos bits del movimiento en base a nada más.
  #10  
13/02/2015
Predeterminado Respuesta: GBC | [En proceso] 510 Movimientos/Ataques
Bueno te cuento como viene de atras.

No tengo el nombre preciso de la rutina ni los nombres de la ram por no estar en mi pc, pero el tipo de nombre se define por una tabla. GetMoveName lo que hace es llamar a GetName poniendo $02 en "RamX", entonces mi nuevo GetMoveName al leer el 9no bit cambia el $02 por $04 y asi define que GetName toma el nombre de la segunda tabla.

En general GetMoveName es la rutina mas dificil de adaptar por el nivel tan basico que maneja, de ahi en mas todo es un poco mas simple y todo se hace como dices:

RutinaBase solo distingue el 9no bit.
RutinaComun define la activacion del 9no bit.

En resumidas cuentas si trabajo a niveles mas basicos.
Respuesta

Herramientas
Desplegado

Permisos para publicar mensajes
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los BB code están Activado
Los Emoticones están Activado
El código [IMG] está Activado
El Código HTML está Desactivado
Trackbacks are Activado
Pingbacks are Activado
Refbacks are Desactivado



Extra
Estilo clásico
La franja horaria es GMT +1. Ahora son las 21:56.