Registrarse

[Decomp-GBA] Añadir mas entrenadores, es posible?¿

Estado
Cerrado para nuevas respuestas.

Mobius1

Usuario de bronce
Bueno pues eso tengo esta otra duda, estudiando dia tras dia cosas basicas, me e topado hoy con esto: es posible añadir mas entrenadores? algunos pensareis que ya hay suficientes y otros al igual no, pero yo para mi idea necesito los que hay y mas.

Al lio, editando estas lineas:

Código:
#define TRAINERS_COUNT                      855
#define MAX_TRAINERS_COUNT                  864
Todo parece ir bien....pero dentro del juego, ya no podia correr fuera ni en ningun lado....antes de eso leei estos comentarios pero aun no se muy bien a que se refiere, alguien podria explicarmelo con un ejemplo? hasta donde creo entender en resumidas cuentas es que el espacio es limitado y que añadir mas entrenadores se puede pero ocupando un cierto espacio adicional, pero no se muy bien a que espacio se refiere al de Guardado de la partida a otro?¿ .

Código:
// NOTE: Because each Trainer uses a flag to determine when they are defeated, there is only space for 9 additional trainers before trainer flag space overflows
//       More space can be made by shifting flags around in constants/flags.h or changing how trainer flags are handled
//       MAX_TRAINERS_COUNT can be increased but will take up additional saveblock space
Un saludete
 

Lunos

Enfrentando a La Organización
Miembro insignia
es posible añadir mas entrenadores?
Sí, siempre y cuando tengas espacio libre en tu saveblock para añadir nuevas flags.
pero yo para mi idea necesito los que hay y mas
¿Estás seguro de eso, o crees que sí?
Por defecto, hay varios entrenadores que tienen hasta 5 copias en total por el tema de las revanchas mediante el Match Call.
A muchisimos de esos los podés cortar de raiz y reusarlos. Eso hice yo en mi proyecto personal. ¿Quien necesita 5 copias de los 8 lideres de gimnasio?
Todo parece ir bien....pero dentro del juego, ya no podia correr fuera ni en ningun lado....
Eso me parece rarisimo. Esto no deberia interferir con las funciones que manejan el movimiento de los personajes en el juego.

¿Estás seguro de que empezaste una partida limpia para testearlo?
Naturalmente, cualquier proceso que involucra modificar los SaveBlocks rompe las partidas guardadas ya existentes.
pero no se muy bien a que espacio se refiere al de Guardado de la partida a otro?¿ .
Sí, al espacio en la partida guardada. Más especificamente, el espacio del SaveBlock1.
¿Por qué es eso? Porque cada entrenador nuevo necesita una flag que es lo que el juego usa para determinar si dicho entrenador fue derrotado, o no.
 

Mobius1

Usuario de bronce
Sí, siempre y cuando tengas espacio libre en tu saveblock para añadir nuevas flags.
Y eso como podria comprobarlo?

¿Estás seguro de eso, o crees que sí?
Por defecto, hay varios entrenadores que tienen hasta 5 copias en total por el tema de las revanchas mediante el Match Call.
A muchisimos de esos los podés cortar de raiz y reusarlos. Eso hice yo en mi proyecto personal. ¿Quien necesita 5 copias de los 8 lideres de gimnasio?
En un principio mi idea es usar lo que hay y mas, me gusta la idea de poder llevar mi idea sin limites, uno de ellos son los entrenadores disponibles y demas, quizas tengas razon pero me gustaria tener la opcion de ampliar sin limites no se si me explico, dentro de lo posible claro.
Eso me parece rarisimo. Esto no deberia interferir con las funciones que manejan el movimiento de los personajes en el juego.

¿Estás seguro de que empezaste una partida limpia para testearlo?
Naturalmente, cualquier proceso que involucra modificar los SaveBlocks rompe las partidas guardadas ya existentes.
Bien no sabia que tenia que probar eso con una partida nueva, algo que acabo de aprender y que espero que alguien mas le pueda ayudar en un futuro.

Sí, al espacio en la partida guardada. Más especificamente, el espacio del SaveBlock1.
¿Por qué es eso? Porque cada entrenador nuevo necesita una flag que es lo que el juego usa para determinar si dicho entrenador fue derrotado, o no.
No sabes lo que te agradezco lo que me has enseñado, hay informacion que o bien no esta en ningun lado o yo no e sabido encontrar, voy a testear con un Save nuevo y me pasare a decir que tal a ido, un saludo y muchisimas gracias por todo.
 

Mobius1

Usuario de bronce
Haciendo algo como esto.
EventScript_CheckSavefileSizes es un script de overworld, asi que lo puedes testear como se te antoje.
Por ejemplo, podés meter un goto EventScript_CheckSavefileSizes en InsideOfTruck_EventScript_MovingBox y revisar al minuto de empezada la partida.
Probe lo que me dijistes y me devuelve esto:

Código:
cd build/emerald && arm-none-eabi-ld -Map ../../pokeemerald.map -T ld_script.ld -o ../../pokeemerald.elf <objects> <lib>
arm-none-eabi-ld: data/event_scripts.o: in function `InsideOfTruck_EventScript_MovingBox':
(script_data+0x6098c): undefined reference to `EventScript_CheckSavefileSizes'
make: *** [Makefile:427: pokeemerald.elf] Error 1
Y yo puse lo que me dijistes de esta manera, lo probe en la posicion seguida de msgbox y esta:

Código:
InsideOfTruck_EventScript_MovingBox::
    goto EventScript_CheckSavefileSizes
    msgbox InsideOfTruck_Text_BoxPrintedWithMonLogo, MSGBOX_SIGN
    end
Un saludo y perdona la tardanza e estado liado.
 

Lunos

Enfrentando a La Organización
Miembro insignia
Probe lo que me dijistes y me devuelve esto:

Código:
cd build/emerald && arm-none-eabi-ld -Map ../../pokeemerald.map -T ld_script.ld -o ../../pokeemerald.elf <objects> <lib>
arm-none-eabi-ld: data/event_scripts.o: in function `InsideOfTruck_EventScript_MovingBox':
(script_data+0x6098c): undefined reference to `EventScript_CheckSavefileSizes'
make: *** [Makefile:427: pokeemerald.elf] Error 1
Y yo puse lo que me dijistes de esta manera, lo probe en la posicion seguida de msgbox y esta:

Código:
InsideOfTruck_EventScript_MovingBox::
    goto EventScript_CheckSavefileSizes
    msgbox InsideOfTruck_Text_BoxPrintedWithMonLogo, MSGBOX_SIGN
    end
Un saludo y perdona la tardanza e estado liado.
Eh... ¿pero si insertaste todo lo demas?
Si el script EventScript_CheckSavefileSizes no existe en tu proyecto (y no existe por defecto porque es algo que yo mismo lo creé, como se puede apreciar con absoluta claridad en el diff desde GitHub que enlacé ahi arriba), naturalmente no lo podrás usar.
 

Mobius1

Usuario de bronce
Eh... ¿pero si insertaste todo lo demas?
Si el script EventScript_CheckSavefileSizes no existe en tu proyecto (y no existe por defecto porque es algo que yo mismo lo creé, como se puede apreciar con absoluta claridad en el diff desde GitHub que enlacé ahi arriba), naturalmente no lo podrás usar.
Perdoname por este tremendo fallo, no vi el link hasta que me has dicho esto ultimo, estoy muy verde con todo y no puedo echarle todo el tiempo que me gustaria, volvere a probar y me pasare si sale algo nuevo, y te vuelvo a pedir disculpas otra vez suelo estar mas atento pero no me di cuenta, muchas gracias por tu tiempo, un saludo
 

Mobius1

Usuario de bronce
Haciendo algo como esto.
EventScript_CheckSavefileSizes es un script de overworld, asi que lo puedes testear como se te antoje.
Por ejemplo, podés meter un goto EventScript_CheckSavefileSizes en InsideOfTruck_EventScript_MovingBox y revisar al minuto de empezada la partida.
Bueno acabo de comprobar lo que me dejastes y estos son los resultados:

-SaveBlock1 size:15628/15872
-SaveBlock2 size:3884/3968
-pkmn Storage size: 33744/35712

No se muy bien si me queda mucho espacio o poco, y en lo referente a las flags pues tampoco se si se pueden crear mas ni como.
 

Lunos

Enfrentando a La Organización
Miembro insignia
Bueno acabo de comprobar lo que me dejastes y estos son los resultados:

-SaveBlock1 size:15628/15872
-SaveBlock2 size:3884/3968
-pkmn Storage size: 33744/35712

No se muy bien si me queda mucho espacio o poco, y en lo referente a las flags pues tampoco se si se pueden crear mas ni como.
Suena casi igual a las estadisticas del juego base. Vos usás un poco menos de tu SaveBlock1, pero por lo demas normal. Tenés espacio para un huevo de flags, y por extensión, entrenadores. Con esos 244 bytes libres en tu SaveBlock1 podés meter hasta 1952 flags, y si decidieses gastarlas todas en entrenadores, pues serian 1952 entrenadores nuevos.

Las flags se definen en include/constants/flags.h, es tan simple como eso. En el caso de las flags de los entrenadores, pero, los decomps lo manejan automaticamente por lo que vos no tenés que hacer nada.
Al definir nuevos entrenadores NPC vos tenés que actualizar el valor de MAX_TRAINERS_COUNT, y al hacerlo, TRAINER_FLAGS_END se encarga del resto.
 

Mobius1

Usuario de bronce
Suena casi igual a las estadisticas del juego base. Vos usás un poco menos de tu SaveBlock1, pero por lo demas normal. Tenés espacio para un huevo de flags, y por extensión, entrenadores. Con esos 244 bytes libres en tu SaveBlock1 podés meter hasta 1952 flags, y si decidieses gastarlas todas en entrenadores, pues serian 1952 entrenadores nuevos.

Las flags se definen en include/constants/flags.h, es tan simple como eso. En el caso de las flags de los entrenadores, pero, los decomps lo manejan automaticamente por lo que vos no tenés que hacer nada.
Al definir nuevos entrenadores NPC vos tenés que actualizar el valor de MAX_TRAINERS_COUNT, y al hacerlo, TRAINER_FLAGS_END se encarga del resto.
Muchisimas gracias por la informacion, pues si entendi bien cuando cambie MAX_TRAINERS_COUNT las nuevas flags deberian de salir en include/constants/flags.h y luego ya podre asignarlas a los nuevos entrenadores cierto?


Y bueno probe ya con la ampliacion de entrenadores y por probar doble casi los que vienen por defecto unos 750 mas, y todo ok de echo estos datos del saveblock son con ellos ya añadidos, asi que deberia de poder ampliar sin problemas, aun que con todo eso no creo que se necesario aun que es bueno saber mas o menos donde estan los limites.
 

Lunos

Enfrentando a La Organización
Miembro insignia
Muchisimas gracias por la informacion, pues si entendi bien cuando cambie MAX_TRAINERS_COUNT las nuevas flags deberian de salir en include/constants/flags.h y luego ya podre asignarlas a los nuevos entrenadores cierto?
Tú no tendrás que asignarlas. Repito, eso lo maneja automaticamente TRAINER_FLAGS_END.
 

kakarotto

Leyenda de WaH
Entonces lunos, entiendo que ampliando las flags podrás tener espacio hasta 1900 y algo entrenadores no?

Otra duda aunque suene un poco noob es que entiendo que dinámicamente si vas añadiendo mas datos a tu juego y al compilarlo ya no tiene el tipico tamaño de 16 mb si no más y que nunca debemos de pasarnos de 32 para que los emuladores vayan bien.
 

Lunos

Enfrentando a La Organización
Miembro insignia
Entonces lunos, entiendo que ampliando las flags podrás tener espacio hasta 1900 y algo entrenadores no?
Repito lo que ya dije, la cantidad de entrenadores que podés añadir depende directamente de la cantidad de espacio libre que hay en el SaveBlock1.
Como dije antes, con 244 bytes se pueden añadir 1952 entrenadores nuevos, 1 por cada flag que podés meter con 244 bytes de espacio.
Cada flag es 1 bit, y en un byte entran 8, 244*8=1952.

El espacio libre en el SaveBlock1 depende de cada quien y de los cambios que hayan hecho en su proyecto, y lo administran como se les cante.
Otra duda aunque suene un poco noob es que entiendo que dinámicamente si vas añadiendo mas datos a tu juego y al compilarlo ya no tiene el tipico tamaño de 16 mb si no más y que nunca debemos de pasarnos de 32 para que los emuladores vayan bien.
Aclaro: 32MB son el limite de un cartucho normal de GBA. Es un limite del hardware. No es cosa de los emuladores especificamente.
Datos introducidos por encima de los 32MB no los lee la GBA a menos de que hagas bank switching como los cartuchos "Game Boy Advance Video".
Cuando veas que tu ROM de Pokeemerald pesa unos 64 o 65 MB, preocupate.
 
Última edición:

Lunos

Enfrentando a La Organización
Miembro insignia
Entonces creo el entrenador y su script y listos¿?
Asumiendo que por "creo el entrenador" te refieres a definir tu nuevo entrenador en include/constants/opponents.h, actualizar TRAINERS_COUNT y MAX_TRAINERS_COUNT, darle datos de entrenador en src/data/trainers.h y darle datos de equipo en src/data/trainer_parties.h, sí.
 

Mobius1

Usuario de bronce
Asumiendo que por "creo el entrenador" te refieres a definir tu nuevo entrenador en include/constants/opponents.h, actualizar TRAINERS_COUNT y MAX_TRAINERS_COUNT, darle datos de entrenador en src/data/trainers.h y darle datos de equipo en src/data/trainer_parties.h, sí.
Si exactamente eso, ya tenia uno testeado, lo que no sabia es que la flag era automatica y que no hacia falta asignarle una, en include/constants/flags.h ya que ponia que hay muchas sin usar entendi que debia darle una yo al entrenador, pero si es automatico las dejo para eventos que me van a hacer mucha falta. Un saludo y mil gracias.
 
Estado
Cerrado para nuevas respuestas.
Arriba