Gen 3 assisted scriptcalling (new method to catch darkrai/shaymin)
Posted by: RETIRE
Date: 2018-05-22 14:50:11
By migrating 6 pokemon and getting to the pal park map via the void, the game will make all wild encounters in any map (indoors/outdoors)
into the 6 migrated pokemon. Once you 'catch' all 6, it calls 3rd script in runtime, which under normal circumstances should be:
Map 251 (pal park):
[size=8pt] Script 3:
Fanfare 1500
Lockall
Fanfare 1521
Setvarhero 0
Message 5 "Ding-dong!
Congratulations!
\v0103\z0000 has successfully
caught the stocked Pokémon!"
PlaySound 1002
Soundfr 1158
Fadedef
CloseMsgOnKeyPress
Releaseall
Setvar 16627 1
Goto func_1
End [/size]
We were already able to get grasstiles in a 'black sinnoh', which is basicly just a part of the void which has the same maps as sinnoh, 30 maps at the left/right from the real one, because of how you traverse through RAM. All we had to do is catch 5 pokemon in this area, then if we ever found grass somewhere else we could use that to catch the 6th and call the 3rd script in runtime.
I revisited this subject about 2 weeks ago and made quite a big breakthrough, by refreshing graphics in certain maps with certain patterns/ combinations, you can actually write ANY tile in any part of the void. These tiles include everything from water, grass, snow, mud, sand to bins, town maps and more. Because in the void this data is repeated, the tiles reapear every 30-ish steps. What we want to do is catch 5 pokemon in black sinnoh (to save on time) and then catch the 6th pokemon after having written a pattern of grasstiles. Because the tiles loop, you can get them into any map as long as you don't refresh to remove them, get an encounter and the script will be called.
[img]https://i.imgur.com/c3WHAN1.png[/img]
It seems like the tiles are written depending on what gfx set you currently have.
The first consistent way of doing this I found is using an extremely easy refresh pattern of:
Hall of origin (510)
Jubilife market (4, or any market)
After I figured this out, I wrote a route which I'll explain below.
I make use of the portion of ram where mapdata is stored, so everytime I enter a specific map
I write new maps around me in RAM, then carefully chain all this data to get the maps I need.
Here I show the entire process off (for darkrai's script) https://youtu.be/OKMKF0a2KhE?t=357
Migrate 6 pokemon that can be caught in the 'field' area.
—————–
1 S
17 W
14 N
574 W
Save reset
—————–
2097 S
19 W
288 S
51 E (above mapdata)
352 S (go through map 2, write map 392)
33 W (go through map 392, write map 393)
Save Reset
1 E
77 S
128 E
19 S (go through map 393, write map 251)
63 E (64 if you have been already)
177 N (enter map 251 / pal park map)
32 N
—————
211 W
618 N
19 E
1253 N
14 E (go to grass in black sinnoh)
1 W/ 1 E until captured 5 of the 6 pokémon
————-
14 W
1345 S
19 W
————-
288 S
51 E (above mapdata)
352 S (go through map 2, write map 392)
33 W (go through map 392, write map 306)
1 E
64 S
128 E (go through map 306, write map 45)
19 N
————-
256 E
32 N (go through map 45, write map 316, go through map 316, write 510)
147 W
64 N
96 W
32 N
96 W
64 N
96 W
95 N
243 E graphic reload (map 510/hall of origin)
————-
64 E graphic reload (map 4, jubilife market)
26 E
1 S (grass tile appears)
————-
[img]https://i.imgur.com/QNEXgjy.png[/img]
From here on you just write your route to any map you'd like to and encounter the pokemon in the grasstile.
But what exactly can we do with this third script in runtime?
I thought I'd list some of the most important ones I found so far by checking a dump of scripts and functions by Ganix.
Map 321:
Darkrai encounter
[img]https://i.imgur.com/jqbOlyG.png[/img] [img]https://i.imgur.com/mdVIN4m.png[/img]
map 274:
Shaymin encounter
[img]https://i.imgur.com/8CwCgK8.png[/img] [img]https://i.imgur.com/EHJx7Om.png[/img]
Map 316:
Azelf encounter
[img]https://i.imgur.com/oenxqHJ.png[/img]
Map 319:
Uxie encounter
[img]https://i.imgur.com/Yn5DCO5.png[/img]
If you are very sharp, you might have noticed that the darkrai encounter is on water, and the other ones also aren't on grass anymore.
This is because the tile was overwritten once we encountered the 6th pokemon, and refreshed the graphics.
This could ofcourse be used for more than just this, but I couldn't list everything and have only looked for the scripts I thought would be interesting to use. If I find other uses I will certainly make an update, maybe even a couple of update videos!
[size=8pt]Edit: I added an extra save, this resets the grasspatterns and makes it easier for future routing[/size]