jojobear13/shinpokered

Allow for true randomization of wild encounters and starters

Closed this issue · 7 comments

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.

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.

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

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:

  • Pokemon that are only available by event in the master branch must be excluded from randomization. These are pokemon like Mew, Mewtwo, Bird Trio, and the Fossil Trio. This prevents base stage pokemon from becoming unobtainable due to scripted events not being covered by randomization.
  • Pokemon that are only obtainable via evolution in the master branch must be excluded from randomization. These are pokemon like Golem, Pidgeot, Charizard, Blastoise, etc. This prevents base stage pokemon from becoming unobtainable due to being bumped out by a stage 1 or stage 2 evolution.
  • Of the pokemon remaining, only base stage pokemon with a damaging attack at level 5 can be starter pokemon. So Abra, Jigglypuff, and Magikarp are excluded. Prevents a lot of problems in general.

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.

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.

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

  • 108 total species that can be caught via random encounter.
  • 58 species in C tier.
  • 30 species in B tier.
  • 20 species in A tier.
  • 52 species from C tier are valid for randomized starters. This is out of the 79 base stage species in gen 1.

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.

added in commit 1a61c3a

Awesome! Very excited to give it a try 👍