-
-
Save DRayX/d618ca7adc69065950a30425fae6eece to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3 | |
TILE_DATA = ( | |
(0x09,0x12),(0x0a,0x12),(0x0b,0x12),(0x0c,0x12),(0x0d,0x12),(0x0e,0x12),(0x0f,0x12),(0x10,0x12),(0x11,0x12),(0x12,0x12),(0x13,0x12),(0x14,0x12),(0x15,0x12),(0x16,0x12),(0x17,0x12),(0x18,0x12),(0x19,0x12),(0x1a,0x12), | |
(0x09,0x13),(0x0a,0x13),(0x0b,0x13),(0x0c,0x13),(0x0d,0x13),(0x0e,0x13),(0x0f,0x13),(0x10,0x13),(0x11,0x13),(0x12,0x13),(0x13,0x13),(0x14,0x13),(0x15,0x13),(0x16,0x13),(0x17,0x13),(0x18,0x13),(0x19,0x13),(0x1a,0x13), | |
(0x09,0x14),(0x0a,0x14),(0x0b,0x14),(0x0c,0x14),(0x0d,0x14),(0x0e,0x14),(0x0f,0x14),(0x10,0x14),(0x11,0x14),(0x12,0x14),(0x13,0x14),(0x14,0x14),(0x15,0x14),(0x16,0x14),(0x17,0x14), (0x19,0x14),(0x1a,0x14), | |
(0x09,0x15),(0x0a,0x15),(0x0b,0x15), (0x0d,0x15),(0x0e,0x15),(0x0f,0x15),(0x10,0x15),(0x11,0x15),(0x12,0x15),(0x13,0x15),(0x14,0x15),(0x15,0x15),(0x16,0x15),(0x17,0x15),(0x18,0x15),(0x19,0x15),(0x1a,0x15), | |
(0x09,0x16),(0x0a,0x16),(0x0b,0x16),(0x0c,0x16),(0x0d,0x16),(0x0e,0x16),(0x0f,0x16),(0x10,0x16),(0x11,0x16),(0x12,0x16),(0x13,0x16),(0x14,0x16),(0x15,0x16),(0x16,0x16),(0x17,0x16),(0x18,0x16),(0x19,0x16),(0x1a,0x16), | |
(0x09,0x17),(0x0a,0x17),(0x0b,0x17),(0x0c,0x17),(0x0d,0x17),(0x0e,0x17),(0x0f,0x17),(0x10,0x17),(0x11,0x17),(0x12,0x17),(0x13,0x17),(0x14,0x17),(0x15,0x17),(0x16,0x17),(0x17,0x17),(0x18,0x17),(0x19,0x17),(0x1a,0x17), | |
(0x09,0x18),(0x0a,0x18),(0x0b,0x18),(0x0c,0x18),(0x0d,0x18),(0x0e,0x18),(0x0f,0x18),(0x10,0x18),(0x11,0x18),(0x12,0x18),(0x13,0x18),(0x14,0x18),(0x15,0x18),(0x16,0x18),(0x17,0x18),(0x18,0x18),(0x19,0x18),(0x1a,0x18), | |
(0x09,0x19),(0x0a,0x19),(0x0b,0x19),(0x0c,0x19),(0x0d,0x19),(0x0e,0x19),(0x0f,0x19),(0x10,0x19),(0x11,0x19),(0x12,0x19),(0x13,0x19),(0x14,0x19),(0x15,0x19),(0x16,0x19),(0x17,0x19),(0x18,0x19),(0x19,0x19),(0x1a,0x19), | |
(0x09,0x1a),(0x0a,0x1a),(0x0b,0x1a),(0x0c,0x1a),(0x0d,0x1a),(0x0e,0x1a),(0x0f,0x1a),(0x10,0x1a),(0x11,0x1a),(0x12,0x1a),(0x13,0x1a),(0x14,0x1a),(0x15,0x1a),(0x16,0x1a),(0x17,0x1a),(0x18,0x1a),(0x19,0x1a),(0x1a,0x1a), | |
(0x09,0x1b),(0x0a,0x1b),(0x0b,0x1b),(0x0c,0x1b),(0x0d,0x1b),(0x0e,0x1b), (0x10,0x1b),(0x11,0x1b),(0x12,0x1b),(0x13,0x1b),(0x14,0x1b),(0x15,0x1b),(0x16,0x1b),(0x17,0x1b),(0x18,0x1b),(0x19,0x1b),(0x1a,0x1b), | |
(0x09,0x1c),(0x0a,0x1c),(0x0b,0x1c),(0x0c,0x1c),(0x0d,0x1c),(0x0e,0x1c),(0x0f,0x1c),(0x10,0x1c),(0x11,0x1c),(0x12,0x1c),(0x13,0x1c),(0x14,0x1c),(0x15,0x1c),(0x16,0x1c),(0x17,0x1c),(0x18,0x1c),(0x19,0x1c),(0x1a,0x1c), | |
(0x09,0x1d),(0x0a,0x1d),(0x0b,0x1d),(0x0c,0x1d),(0x0d,0x1d),(0x0e,0x1d),(0x0f,0x1d),(0x10,0x1d), (0x18,0x1d),(0x19,0x1d),(0x1a,0x1d), | |
(0x09,0x1e),(0x0a,0x1e),(0x0b,0x1e),(0x0c,0x1e),(0x0d,0x1e),(0x0e,0x1e),(0x0f,0x1e),(0x10,0x1e), (0x19,0x1e),(0x1a,0x1e), | |
(0x09,0x1f),(0x0a,0x1f),(0x0b,0x1f),(0x0c,0x1f),(0x0d,0x1f),(0x0e,0x1f),(0x0f,0x1f),(0x10,0x1f), (0x18,0x1f),(0x19,0x1f),(0x1a,0x1f), | |
(0x09,0x20),(0x0a,0x20), (0x0d,0x20),(0x0e,0x20),(0x0f,0x20),(0x10,0x20), (0x18,0x20),(0x19,0x20),(0x1a,0x20), | |
(0x09,0x21),(0x0a,0x21), (0x0d,0x21),(0x0e,0x21),(0x0f,0x21),(0x10,0x21), (0x18,0x21),(0x19,0x21),(0x1a,0x21), | |
(0x09,0x22),(0x0a,0x22),(0x0b,0x22),(0x0c,0x22),(0x0d,0x22),(0x0e,0x22),(0x0f,0x22),(0x10,0x22), (0x18,0x22),(0x19,0x22),(0x1a,0x22), | |
(0x09,0x23),(0x0a,0x23),(0x0b,0x23),(0x0c,0x23),(0x0d,0x23),(0x0e,0x23),(0x0f,0x23),(0x10,0x23), (0x18,0x23),(0x19,0x23),(0x1a,0x23), | |
(0x09,0x24),(0x0a,0x24),(0x0b,0x24),(0x0c,0x24),(0x0d,0x24),(0x0e,0x24),(0x0f,0x24),(0x10,0x24),(0x11,0x24),(0x12,0x24),(0x13,0x24),(0x14,0x24),(0x15,0x24),(0x16,0x24),(0x17,0x24),(0x18,0x24),(0x19,0x24),(0x1a,0x24), | |
(0x09,0x25),(0x0a,0x25),(0x0b,0x25),(0x0c,0x25),(0x0d,0x25),(0x0e,0x25),(0x0f,0x25),(0x10,0x25),(0x11,0x25),(0x12,0x25),(0x13,0x25),(0x14,0x25),(0x15,0x25),(0x16,0x25),(0x17,0x25),(0x18,0x25),(0x19,0x25),(0x1a,0x25), | |
(0x09,0x26),(0x0a,0x26),(0x0b,0x26),(0x0c,0x26),(0x0d,0x26),(0x0e,0x26),(0x0f,0x26),(0x10,0x26),(0x11,0x26),(0x12,0x26),(0x13,0x26),(0x14,0x26),(0x15,0x26),(0x16,0x26),(0x17,0x26),(0x18,0x26),(0x19,0x26),(0x1a,0x26), | |
(0x09,0x27),(0x0a,0x27),(0x0b,0x27),(0x0c,0x27),(0x0d,0x27),(0x0e,0x27),(0x0f,0x27),(0x10,0x27),(0x11,0x27),(0x12,0x27),(0x13,0x27),(0x14,0x27),(0x15,0x27),(0x16,0x27),(0x17,0x27),(0x18,0x27),(0x19,0x27),(0x1a,0x27), | |
(0x09,0x28),(0x0a,0x28),(0x0b,0x28),(0x0c,0x28),(0x0d,0x28),(0x0e,0x28),(0x0f,0x28),(0x10,0x28),(0x11,0x28),(0x12,0x28),(0x13,0x28),(0x14,0x28),(0x15,0x28), (0x19,0x28),(0x1a,0x28), | |
(0x09,0x29),(0x0a,0x29),(0x0b,0x29),(0x0c,0x29),(0x0d,0x29),(0x0e,0x29),(0x0f,0x29),(0x10,0x29),(0x11,0x29),(0x12,0x29),(0x13,0x29),(0x14,0x29),(0x15,0x29), (0x19,0x29),(0x1a,0x29), | |
(0x09,0x2a),(0x0a,0x2a),(0x0b,0x2a),(0x0c,0x2a),(0x0d,0x2a),(0x0e,0x2a),(0x0f,0x2a),(0x10,0x2a),(0x11,0x2a),(0x12,0x2a),(0x13,0x2a),(0x14,0x2a),(0x15,0x2a), (0x19,0x2a),(0x1a,0x2a), | |
(0x09,0x2b),(0x0a,0x2b),(0x0b,0x2b),(0x0c,0x2b),(0x0d,0x2b),(0x0e,0x2b),(0x0f,0x2b),(0x10,0x2b),(0x11,0x2b),(0x12,0x2b),(0x13,0x2b),(0x14,0x2b),(0x15,0x2b),(0x16,0x2b),(0x17,0x2b),(0x18,0x2b),(0x19,0x2b),(0x1a,0x2b), | |
(0x09,0x2c),(0x0a,0x2c),(0x0b,0x2c),(0x0c,0x2c),(0x0d,0x2c),(0x0e,0x2c),(0x0f,0x2c),(0x10,0x2c),(0x11,0x2c),(0x12,0x2c), (0x14,0x2c),(0x15,0x2c),(0x16,0x2c),(0x17,0x2c),(0x18,0x2c),(0x19,0x2c),(0x1a,0x2c), | |
(0x09,0x2d),(0x0a,0x2d),(0x0b,0x2d), (0x0f,0x2d),(0x10,0x2d),(0x11,0x2d),(0x12,0x2d),(0x13,0x2d),(0x14,0x2d),(0x15,0x2d),(0x16,0x2d),(0x17,0x2d),(0x18,0x2d),(0x19,0x2d),(0x1a,0x2d), | |
(0x09,0x2e),(0x0a,0x2e),(0x0b,0x2e), (0x0f,0x2e),(0x10,0x2e),(0x11,0x2e),(0x12,0x2e),(0x13,0x2e),(0x14,0x2e),(0x15,0x2e),(0x16,0x2e),(0x17,0x2e),(0x18,0x2e),(0x19,0x2e),(0x1a,0x2e), | |
(0x09,0x2f),(0x0a,0x2f),(0x0b,0x2f), (0x0f,0x2f),(0x10,0x2f),(0x11,0x2f),(0x12,0x2f),(0x13,0x2f),(0x14,0x2f), (0x17,0x2f),(0x18,0x2f),(0x19,0x2f),(0x1a,0x2f), | |
(0x09,0x30),(0x0a,0x30),(0x0b,0x30),(0x0c,0x30),(0x0d,0x30),(0x0e,0x30),(0x0f,0x30),(0x10,0x30),(0x11,0x30),(0x12,0x30),(0x13,0x30),(0x14,0x30), (0x17,0x30),(0x18,0x30),(0x19,0x30),(0x1a,0x30), | |
(0x09,0x31),(0x0a,0x31), (0x0c,0x31),(0x0d,0x31),(0x0e,0x31),(0x0f,0x31),(0x10,0x31),(0x11,0x31),(0x12,0x31),(0x13,0x31),(0x14,0x31),(0x15,0x31),(0x16,0x31),(0x17,0x31),(0x18,0x31),(0x19,0x31),(0x1a,0x31), | |
(0x09,0x32),(0x0a,0x32),(0x0b,0x32),(0x0c,0x32),(0x0d,0x32),(0x0e,0x32),(0x0f,0x32),(0x10,0x32),(0x11,0x32),(0x12,0x32),(0x13,0x32),(0x14,0x32),(0x15,0x32),(0x16,0x32),(0x17,0x32),(0x18,0x32),(0x19,0x32),(0x1a,0x32), | |
(0x09,0x33),(0x0a,0x33),(0x0b,0x33),(0x0c,0x33),(0x0d,0x33),(0x0e,0x33),(0x0f,0x33),(0x10,0x33),(0x11,0x33),(0x12,0x33),(0x13,0x33),(0x14,0x33),(0x15,0x33),(0x16,0x33),(0x17,0x33),(0x18,0x33),(0x19,0x33),(0x1a,0x33), | |
) | |
SPAWN_COUNT = 4 | |
def getDailyRandom(seed): | |
if seed & 0x80000000 != 0: | |
return 0x100000000 - seed | |
else: | |
return seed | |
def lotPoint(seed): | |
daily_split = [0] * SPAWN_COUNT | |
daily_rand = getDailyRandom(seed) | |
for i in range(SPAWN_COUNT): | |
daily_split[i] = daily_rand >> (8 * (SPAWN_COUNT - 1 - i)) & 0xff | |
total_tiles = len(TILE_DATA) | |
section_length = total_tiles // SPAWN_COUNT | |
add_extra = total_tiles % SPAWN_COUNT | |
result = [0] * SPAWN_COUNT | |
extra = 0 | |
for i in range(SPAWN_COUNT): | |
result[i] = extra + section_length * i + daily_split[i] % section_length | |
if i < add_extra: | |
extra += 1 | |
return result | |
if __name__ == '__main__': | |
import sys | |
lotto = int(sys.argv[1]) | |
seed_low = (lotto * 0xeeb9eb65 + 0xfc77a683) & 0xffff | |
print([TILE_DATA[x] for x in lotPoint(seed_low)[2:]]) | |
print([TILE_DATA[x] for x in lotPoint(seed_low | 0x80000000)[2:]]) |
Hi, could you make some video or something to explain the code. I'm intrested in how you find this out 💯
@XIAA25 , well it seems that TILE_DATA is actually the map in hexadecimal form with format [(Column, Row),(Column, Row)....]
After that, it comes the weird wizardy magic, (idk how he found the algorithm)
@metantonio Yeah I understander the first part, I was more searching towards the research of the algorithm
To be honest it's pretty awesome since the game is out like ten days ago and the RNG in the game is already searched at the point that now we already can find the seed and "manipulate" other part of the game. (by manipulating I mean more something like make predictions based on the seed we found) I'm wondering if it's possible with this method to maybe search to "manipulate" other RNG events, such as encountering Shiny, perfect IV...
It's just awesome and being so passionated about those things I just wanna see more of it
@XIAA25 right now, with check summary menu glitch, you can transform any pokemon (that can evolve in 1 level) into shiny, but you need 1 shiny pokemon at least in vault and 1 rare candy. As you can duplicate pokemons and objects with same glitch, it's very useful
@metantonio I'm maybe going to say something a little stupid, but I feel like that's cheating in some way.
Like if you now the RNG and how to use it, I mean, that's okay, but getting a shiny that way doesn't feel the same if you use the check summary glitch. But out of curiosity I will still do a little google search on this x)
Edit: just saw the video, It's just epic. Just a little sad it's only the pokemon that needs to evolve, but I'm pretty sure in two days they will find another glitch which can make any pokemon Shiny.
I can't use it... My loto number is 08413 but the page doesn't do a thing
I'm curious, do I have to stand ON the feebas tile or stand next to it and aim my rod at the tile? The calculator page could use a note clarifying this.
@Cashews54 if I'm not wrong it says the tile where feebas can appear. So to answer your question properly:
You need to stand next to the tile and aiming your rod on the tile to have a feebas (note that there's still only 50% chance feebas appear so you maybe want to try multiple times)
@Cashews54 My version of the calculator has some additional FAQ and a short explanation of how it works: https://drayx.github.io/feebas
This wasn't working for me as of 1.1.3 version. I was very very careful to be casting my rod into the correct tile. I will try again tomorrow with a new lotto number
I was also having troubles with 1.1.3 version on shining pearl. Luckily my gf hadn't updated yet and could confirm on 1.1.2 that it was working still
It’s currently not working with the new update :(
Agreed, it does not appear to be working on 1.1.3. Have tried twice now, verifying with a screenshot that I entered the correct lotto ID.
Hello,
First of all, thank you to all those involved in creating this algorithm, I'm sure this must have taken tons of time to figure out! Next, as of 12/23 even using two days of lotto tickets, none of the generated tiles green or red were feebas tiles (I fished like 10 times per tile to be sure), so I think I can confirm that this was patched in the 1.1.3 update. Finally, if you guys figure out how to get this working again in the future it would be awesome if you could notify me!
Thanks again!
Joey
+1
Not working on 1.1.3
What a pity...
For me it worked (Version 1.1.3). 🥳
I had 4 recommended tiles and I planned on trying every tile at least 3 times. I was successful on the 3rd try at the first tile already.
There is an old and a new version of the calculator. I used this one:
https://lincoln-lm.github.io/JS-Finder/Tools/BDSPFeebas.html
@TimHe95
With the 1.1.3 update there is a new version of this same calculator tool. But instead of just providing one Lotto ID number, the new tool requires at least 2 days-worth of Lotto IDs and Swarm info (which route there appears to be a lot of a specific Pokémon for a given day—you can find this by opening your menu and checking the ‘current objective’) in order to help narrow down your exact game seed…and thus accurately determine the four tiles that spawn Feebas on a given day.
What are the sold sphere/Drill sphere checks about and where can I find that info?
Does this work on the Nintendo DS version?
Can someone explain in detail what kind of informations we need to insert for the new algorithm? Why nobody has still done a video about it ? Thaaankss
thx buddy