qna_rh
Thread Id: 24492
Thread Name: [Duda-Teoria GBC] Ampliar el número de Ataques a 510.
#0
Chamber4315♪ 26330
Buen dia compañeros de Wah, abro este tema para discutir las posibilidades a aumentar el numero de ataques que hay en los juegos de segunda generación, que en total son 251 (0xFB).

Primero quiero aclarar que no tengo conocimientos de ASM, pero gracias a la ayuda de [MENTION=28012]Crystal_[/MENTION] he logrado entender un poco el funcionamiento del Z80.
Entrando en tema, platicando con otros usuarios del foro me han sugerido que la mejor manera de expandir los ataques es agregando un byte extra a la manera en que el juego lee los ataques, pero esto a mi me parece incorrecto. Por que? Por que moficar la estructura a 2 bytes implica que tengamos que mover gran cantidad de datos en el ROM y no se que tanto repercuta en la RAM esos 48 bytes extras (4 de cada pokemon). Incluso dudo mucho que los learnset de todos los pokemon quepan en un solo banco con estas modificaciones ya que estamos hablando de que la información de cada pokemon pesaria el doble.

Entonces que propongo?. Que usemos lo datos que actualmente no estan en uso dentro de la estructura de cada pokemon. Concretamente, dentro de los datos de cada pokemon existe espacio para registrar la compatibilidad de 64 TM, pero el juego solo tiene 57 TM/HM, eso nos deja 7 Bits (NO bytes) libres que podrían servir para manipular dos tablas de ataques para asi tener un total de 510 movimientos diferentes.

La idea es que se usen los últimos 4 bits para definir con un 0 o un 1 a que tabla pertenecen. Una rutina que al identificar el bit prendido o pagado nos haga un jump ya sea a la tabla original o a una segunda tabla. Esos 4 bits estarán en el orden que tienen los ataques, por lo que al mover un ataque de posición, debe haber una rutina que este actualizando los bits.

Algo similar se puede hacer con los learnset para que el juego sepa de que ataque estamos hablando cuando un pokemon sube de nivel. Basado en esta información podemos agregar una rutina que lea 16 bits (2 bytes) entre los datos de evolución y los datos de los movimientos, de esta manera cada bit indica a que tabla pertenece cada movimiento, con un máximo de 16 ataques por pokemon. Sinceramente no creo que se necesiten mas de 16 ataques por pokemon, además me parece un numero justo ya que 24 me resulta exagerado.

Pues estas son mis ideas hasta el momento, recordando de nueva cuenta que tengo casi nulo conocimiento de ASM y si hay mejores maneras de hacerlo me gustaría me ayudaran con esta labor.

Esta es una invitación para toda la comunidad, gracias por leerme :D
#1
Crystal_ 28012
Para serte sincero la verdad no entiendo muy bien lo que tu sugieres. Porque quieres usar espacio de los base stats data de los pokemon? Los ataques que aprenden vienen por separado, como tu has dicho, vienen del learnset/evolution data.

Se me ocurre una manera mucho mas secilla bajo mi punto de vista. Teniendo en cuenta que el nivel nunca pasa de 127 se puede tomar el bit menos significativo del nivel y de esta forma se pueden distinguir entre 511 movimientos. Simplemente se le aplicaria a la obtención del nivel un "and 01111111" para ignorar el primer bit.

Mas complicado resulta para el caso de asignar movesets a pokemon de entrenadores, o casos unicos como el odd egg o el dratini con extremespeed. En este caso solo tienes un byte de nivel por 4 bytes para movimientos, por lo que seguramente habria que modificar la estructura.