rotobash / pokemon-ngc-rando

Randomize XD and Colosseum
GNU General Public License v2.0
15 stars 2 forks source link

[SUGGESTION] Allowing us to change the trainer levels of Pokemon in Colosseum #39

Closed SacredMiKeY closed 2 years ago

SacredMiKeY commented 2 years ago

Pretty much as the title says the box for it is darkened, not sure if there's a bug or something or maybe just an oversight, but wanted to know if that could be changed for Colosseum.

https://prnt.sc/vj18LiZgTNP_ Screenshot for clarity on what I mean, thanks in advance regardless of what happens, appreciate that you made this

rotobash commented 2 years ago

Hi there, thanks for the suggestion.

The reason it's disabled is because when I was adding Colosseum support, changing the level on Pokemon would corrupt them and cause weird glitches in game. It may have just been because of something else not working at the time, not sure. I'll take another look at it and see if thats still a problem. Cheers.

SacredMiKeY commented 2 years ago

That would be nice, if it can't be fixed then don't worry too much about it, thanks for the quick reply :)

rotobash commented 2 years ago

I took another look at this and remembered exactly what was happening. No glitches, but boosting the level seems to boost it a crazy amount (even though the logic is exactly the same for XD). For example, anything higher than a 10% boost will make Willie's two level 24 Zigzagoons into level 100. If you bump it down to a 5% boost it still makes them level 85.

No idea why this happens, it seems like it's an appropriate level when debugging and when logged (i.e., a 10% boost should make them level 26) but in game it ignores that value for some reason 🤔 and setting my own starters to be level 100 is ignored as well. Though the fact that it's not consistently making them level 100 makes me think the game does something behind the scenes.

I'll investigate more but might take a bit because I'll have to inspect the game files themselves.

rotobash commented 2 years ago

Hey again

Turns out this was a bug that affected more than I realized. The trainer structure is a bit unique in these games, Pokemon are "crafted" for a trainer. So there's a pool of trainers and a pool of trainer Pokemon, the trainer party references the Pokemon in that pool by id.

There are trainers that can't be encountered in-game (most likely cut in development) but use real in-game Pokemon in their party as placeholder values. The problem is the randomizer couldn't tell that these trainers were unused because they were valid and nothing to distinguish them from a used trainer. So it would randomize this unused trainer but in doing so it would randomize the Pokemon again and again. In the case of level-boosting, it would keep boosting their levels until it hit 100. There is evidence of this in the log, because the Pokemon it says a trainer had did not line up with what they actually had.

Anyway, this should be fixed now and I've enabled the option for Colosseum.