jojobear13 / shinpokered

Mostly-vanilla hack of Pokémon Red/Blue focused on bugfixes and trainer ai
205 stars 40 forks source link

Allow for true randomization of wild encounters and starters #309

Closed gotdapower closed 7 months ago

gotdapower commented 9 months ago

Is your feature request related to bug or a functional problem? No

Is your feature Within-Scope of the project? Given that pokemon randomization is already included, I would say yes.

Is your feature request related to a game-play problem? I ran into this trying runs with Nuzlocke mode and random encounters, and noticed I was really only seeing the same 30-40 pokemon in the wild for most encounters and as starters. Catching pokemon in the C tier requires an insane amount of luck to enounter, and isn't even possible for some - for example Magmar, or whatever pokemon is randomized into that slot, since I don't think it's available on L1 of the Mansion and you can't get to the right level without encountering something else. Whether this is a "gameplay problem" is a matter of taste but it certainly impacts the gameplay.

Describe the feature you would like Instead of the A, B and C tiers currently used in randomizing, treat it as more of a true randomization where all 146 non-legendary pokemon can be caught in the wild (and appear as starters) when "true random" mode is on.

Describe alternatives you've considered I could see arguments for 151 pokemon being encounterable, 149 (excluding Mew and Mewtwo), 146 without the birds, and I guess lower if you think about pokemon available only through special interactions like Eevee, Snorlax or Porygon, but 146 made the most sense to me given the general approach of the project.

Instead of using base stats, the randomization could also be split based on unevolved/middle evolution/fully evolved or just unevolved/at least 1 evolution. This would make the full list potential starters but mostly would probably be pretty similar to the tiers approach.

Another option would be to randomize separately for each area, so instead of horsea replacing pidgey in every single location, horsea replaces pidgey on route 2 but growlithe replaces pidgey on route 3. But that seems a lot more complicated and would still leave most Tier C pokemon mostly unavailable if you are playing Nuzlocke + randomizer.

Additional context None.

gotdapower commented 9 months ago

Just occurred to me yesterday... having 146 pokemon possible as starters would mean you could get Charizard or Golem or something as a starter, having all non-evolved pokemon possible as starters is really what I was picturing. Again, could be implemented in different ways, just another thought.

gotdapower commented 8 months ago

Hi, just checking to see if you had any thoughts on this or if it was likely to be implemented.

jojobear13 commented 8 months ago

This is a bit complicated. The A, B, and C tiers are being reworked a bit, but I'll take a look at true randomization once I have a better view of things.

The main thing that I want to preserve with randomizing pokemon availability is keeping all 151 pokemon available. This gets tricky when replacing encounter/prize slots. For example, say Tauros gets replaced with Charizard. Getting a Charizard is always possible by evolving up a Charmander, but now there is no way to get Tauros. Trying to maintain 151 availability on a map-by-map basis increases this problem by +1 exponent, and I don't have enough ram to make that work.

Basic rules that need to be followed:

A more "True Random" solution could throw everything together into one list, but the in-game wild randomizer loads each tier list onto a limited section of the stack. I have to make sure this wouldn't cause a stack overflow.

gotdapower commented 8 months ago

Thanks for the super detailed answer, I really appreciate it! Everything you said makes sense, although I personally wouldn't be opposed to an abra/jigglypuff/magikarp as a starter, you can always pick another one if you don't want that challenge (unless you get really unlucky and have all 3 to pick from). You've added so many pokemon that were uncatchable in red to the master branch (all the blue exclusives plus Lapras, Jynx, etc. as wild encounters) that there will still be a huge variety even with the constraints you're describing.

jojobear13 commented 8 months ago

Here's the current breakdown from my audit and tier tweaking:

I was able to eliminate using the stack as a buffer and instead use the sprite buffer that's in the save ram (the thing that traditionally makes missingno mess up your hall of fame). This gives much more space and will allow for randomizing all 108 species if desired.

jojobear13 commented 8 months ago

added in commit 1a61c3a14

gotdapower commented 8 months ago

Awesome! Very excited to give it a try 👍