GBC | [En proceso] 510 movimientos/ataques

Like Tree9Gracias
Respuesta
 
Herramientas Desplegado
  #11  
13/02/2015
Predeterminado Respuesta: GBC | [En proceso] 510 Movimientos/Ataques
Veo que sigues insistiendo en explicarme como las diferentes rutinas se manejan con ese noveno bit, que es lo mas superficial. Como actuar en función de ese noveno bit se puede enfocar de muchas maneras y me parece perfecto como lo has planteado.

Lo que vengo preguntando desde el principio es, como sabe "RutinaComun" o como quieras llamarla, si activar o no ese noveno bit? En que te basas para hacer saber a "RutinaComun" si debe poner a 0 o a 1 ese bit?

Tan solo quiero hacerte ver la necesidad de manejar cada caso de forma diferente. No puede existir una rutina común que pueda deducir cual debe ser el estado de ese noveno bit por si sola, sino que debe recibir esa información de la rutina llamante de la misma forma que recibe los 8 bits restantes. Es un problema muy trivial que te encontrarías nada mas empezar a trabajar. Es necesario estar mas o menos familiarizado con principalmente (parte del) engine de batalla -con el cual, afortunadamente, a diferencia de mí, ya deberías estar familiarizado en cierto grado debido a haber estado trabajando en implementar nuevos movimientos o habilidades- para poder aplicar los cambios precisos a todas las rutinas que tienen que ver con la gestión de movimientos para que "traduzcan" su forma de referenciar a un movimiento de 1 byte a 2 bytes (con ayuda de ese noveno bit).

La clave está en ver un movimiento como un número de 2 bytes. Ya que actualmente es un número de un byte, verás como el identificador de un movimiento generalmente se manejará con el registro a. Esa dirección RAM en la que almacenas el noveno bit debe servirte como extensión al regsitro a para identificar al ahora movimiento de 9 bits. De forma que cuando pases a GetMoveName, GetMoveAttr, GetMoveData, etc. el identificador del movimiento en el registro a (o cualquier otro registro de 1 byte), o en una dirección ram tal como wD265 (en donde se habrá cargado desde un registro de 1 byte), debes pasarle el bit 9 como si fuese parte de ese registro o dirección de ram, solo que la localización de ese bit mas significativo no será la misma que la de los otros 8.
  #12  
13/02/2015
Predeterminado Respuesta: GBC | [En proceso] 510 Movimientos/Ataques
Dicho por Crystal_ Ver mensaje
Lo que vengo preguntando desde el principio es, como sabe "RutinaComun" o como quieras llamarla, si activar o no ese noveno bit? En que te basas para hacer saber a "RutinaComun" si debe poner a 0 o a 1 ese bit?

Tan solo quiero hacerte ver la necesidad de manejar cada caso de forma diferente.
Y asi esta hecho

Despues de haberme sumergido en el mundo del sistema de batalla, lo comprendo a un 80% sin contar el AI. Esto me llevo a entender eso que mencionas desde hace tiempo: Cada caso especifico es diferente uno de otro y no se puede manejar con una o dos rutinas genericas.

Quizas lo burdo de mi explicacion en el post principal te llevo a entender eso, ya que solo digo "cambie X rutina para que identifique un 9no bit", pero la verdad es que detras de eso hay una red de rutinas que definen un unico valor almacenado en el registro a. Esto de la ampliacion de movimientos es exponensial, para llegar al byte que define el GetMoveName quizas antes se tuvo que pasar por una subrutina que se definia por 3 opciones en la ram, que a su vez cada una tuvo que pasar por otra subrutina igualmente definida por 3 variables, lo que nos da un lugar de un chequeo de 9 variables antes de llegar al resultado, en un ejemplo hipotetico. Es ahi donde yo tengo que intervenir 1,2,3 o n' rutinas antes de llegar a GetMoveName, por que el numero de variables ahora son 12 o mas.

Por ejemplo, para Predef MoveList solo lee 4 bytes en determinada RAM y los representa como una lista, de mi dependera que antes de cada llamada a MoveList poner una rutina que defina el 9no bit en base de si hablamos de un PartyMon, BattleMon o EnemyMon, por eso, todo lo que me has enseñado y todo lo que he aprendido a lo largo de mas de 6 meses intensivos de ASM es que las rutinas no son aisladas y siempre debes trabajarlas como una red, comunicandose unas con otras.

Este primer experimento posteado con una sola imagen es la menera mas simple de representar una semana de investigacion con resultados positivos en areas "importantes" de trabajar, como son el comportamiento en batalla del movimiento y la visualizacion del mismo en la stat box. Aun me queda mucho trabajo por delante, sobre todo planteando como es que el oponente va a hacer uso de ese 9no bit ya que nunca he visto que los oponentes usen PP por encima de lo normal.
  #13  
22/02/2015
Predeterminado Respuesta: GBC | [En proceso] 510 Movimientos/Ataques
@Crystal_ Necesito un consejo.

La parte de player ya casi la resuelvo al 100%, pero la cosa es diferente con el enemy.

En el caso de los WildMon y TrainerType1 (los mas simples) resolvi que el nivel en que el pokemon aprende cada ataque determina a que tabla pertenece dicho movimiento en funcion de si el nivel es non o par, hasta ahi todo bien. Ahora, para los TrainerType2 y 4 cuyos datos de los movimientos provienen del ROM no encuentro una manera facil de resolverlo.

La manera correcta que pense para resolverlo fue haciendo una tabla auxiliar referenciada segun el OtherTrainerClass y el OtherTrainerID donde un byte (mediante bits) determina que movimientos pertenecen a la primera tabla y cuales a la segunda. Esta solución me da pereza hacerla ya que implica hacer calculo de cada uno de los pokemon del entrenador, de todos los entrenadores.

Mi siguiente opción es que al momento de cargar los datos del trainer dependiendo de si el CurPartyLevel es par o non tomar solo dos caminos. Si el nivel es par, todos los movimientos pertenecen a la primer tabla y si es non solo los primeros dos movimientos pertenecen a la primer tabla mientras que los otros dos pertenecen a la segunda.

Como ves esta ultima solucion? la verdad es que apunto a cosas mas practicas que exactas.
  #14  
22/02/2015
Predeterminado Respuesta: GBC | [En proceso] 510 Movimientos/Ataques
La última opcion te limita bastante y no veo la razón por la que tenga que ser así.

En cualquier caso evitaría emplear la RAM si no es necesario. Amplia los datos de los 4 movimientos de cada pokemon de 4 a 5 bytes, y utiliza 4 bits de uno de ellos para determinar a que tabla pertenece. O si eso te va a suponer mas trabajo, utiliza una tabla aparte, preferiblemente por simplicidad en el mismo banco (0E).
  #15  
23/02/2015
Predeterminado Respuesta: GBC | [En proceso] 510 Movimientos/Ataques
Dicho por Crystal_ Ver mensaje
En cualquier caso evitaría emplear la RAM si no es necesario. Amplia los datos de los 4 movimientos de cada pokemon de 4 a 5 bytes, y utiliza 4 bits de uno de ellos para determinar a que tabla pertenece. O si eso te va a suponer mas trabajo, utiliza una tabla aparte, preferiblemente por simplicidad en el mismo banco (0E).
Como tu trabajas desde GitHub lo dices tan facil (?)

Ya sabes que los GS lovers tenemos "Herramientitis", asi que si amplio los datos de 4 a 5 bytes, adios tools.

Lo correcto seria también hacer una tabla aparte, aunque no dentro del mismo banco por que las herramientas lo borran (si lo se, apestan). Lo dejare para después a ver si me ilumino viendo otras rutinas. Se me ocurren muchas ideas de como colgarme de datos previos de la RAM, pero solo implica la personalizacion por trainerclass y no por pokemon.

Última edición por Chamber; 23/02/2015 a las 18:56
  #16  
26/03/2015
Predeterminado Respuesta: GBC | [En proceso] 510 movimientos/ataques
Dicho por Pum
Cómo se hará para diferenciar entre una tabla y otra a la hora de poner estos nuevos movimientos en movesets de Pokémon (Ya sea en equipos contrarios en un editor de entrenadores o para editar los movimientos que aprenderá el pokemon por nivel) o en TMs. O en general en la ROM.
@Pum Estoy planeando que este parche tenga compatibilidad con herramientas por eso esta es mi "solucion" para cada aspecto. En el caso de los Learnsets lo que define a que tabla pertenece cada movmientos es el nivel al que aprende el ataque, siendo que los pares se usan para -255 mientras que los nones para +256, asi sera mas "facil" la edicion para novatos mediante herramientas.

En el caso de las TM se tendrá que hacer mediante Hex, habrá una tabla de bits (8-bytes para las 57 TMHM) que definirá el tipo de tabla. En su momento compartiré una herramienta que hizo @javcdark para editar bits.

En el caso de los trainers es mas complicado ya que lo unico "editable" es el nivel, objeto y los movimientos y por ese lado no podria tocar el ultimo bit del nivel por que esta pensado para usarse en una posible ampliacion del pokedex. Los trainers en los que no se definen los ataques no hay problema por que toma el esquema non-par descrito anteriormente; para los que si definimos los ataques simplemente queria hacer que los primeros 2 movimientos fueran de la tabla 1 (-255) mientras que los ultimos dos fueran de la tabla 2 (+256) pero en la practica no se que tan bueno o malo sea esto.

Se aceptan sugerencias...
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 19:51.
Skin Afternoon por Sage