A set of scripts and tools for Pokemon streamers.
Before you start, please consider using Pokelink (no affiliation with EverOddish), as it has more features and more resources behind it. https://twitter.com/PokelinkApp
If you're streaming a Pokemon game and like to display your current party on your layout, it can be tedious to modify which image files are displayed, while you are live. I've modified several existing tools (and created new ones) to detect when in-game party slots change, which can then copy sprite image files on your computer automatically. Your streaming software can be configured to watch these files for modification, and update the layout accordingly. There is also a "Soul Link" version that will update paired sprites at the same time.
If you're doing SOS chains in Sun/Moon or Ultra Sun/Ultra Moon, this tool will display the current chain length. It will also write the value to a text file that can be monitored by streaming software and displayed on stream layouts. Note: This requires a version of Citra that supports Python scripting.
- Windows operating system (in the case of VBA-RR or Desmume)
- An emulator with Lua scripting support (in the case of Gen 3-5)
- VBA-RR (for Gen 3 games)
- Desmume (for Gen 4/Gen 5 games)
- A version of Citra with Python scripting support (in the case of Gen 6-7), and Python 3
- Download the latest release of VBA-RR: https://github.com/TASVideos/vba-rerecording/releases
- Edit the first line of
auto_layout_gen3.lua
file from this repository with your favourite text editor (you can right-click the file and Open With > Notepad): Setgame=1
to 1 for Ruby/Sapphire, 2 for Emerald, 3 for FireRed/LeafGreen - Copy
auto_layout_gen3.lua
to the same directory that contains your sprite image files.- The script expects sprite files to be named as follows:
<pokemon_name>.png
(for example,pikachu.png
) - The script expects party slot image files (that are monitored by OBS) to be named as follows:
p<slot_number>.png
(for example,p1.png
) - The script expects a Pokeball image to be named
000.png
- The script expects sprite files to be named as follows:
- Copy
auto_layout_gen3_tables.lua
to the same directory- Note: The
auto_layout_gen3_tables.lua
file still needs to exist in the same directory, but you do not need to open it in VBA-RR
- Note: The
- Open VBA-RR and your Pokemon ROM, and load your save file
- In VBA-RR, open Tools > Lua Scripting > New Lua Script Window...
- Click Browse... and locate
auto_layout_gen3.lua
on your computer, open it, and click Run. If you see "script returned but is still running registered fuctions", this is normal and expected. - You should now be able to switch party slots, deposit/withdraw Pokemon from the PC, and catch Pokemon to see your party images update automatically!
- The Lua script output window should display all slot changes in text form. As a bonus, you can press "Q" to see Pokemon EV/IV values in your party
- Download the latest release of Desmume: http://desmume.org/download/
- Make note of whether you downloaded 32-bit (x86) or 64-bit (x86-64) Desmume
- Download the Lua DLL that matches your Desmume: https://sourceforge.net/projects/luabinaries/files/5.1.5/Windows%20Libraries/Dynamic/
lua-5.1.5_Win32_dll14_lib.zip
for x86 Desmumelua-5.1.5_Win64_dll14_lib.zip
for x86-64 Desmume
- Extract
lua5.1.dll
from the .zip file to the same folder where yourDeSmuME_0.9.11_x86.exe
orDeSmuME_0.9.11_x64.exe
is - Rename
lua5.1.dll
tolua51.dll
- Copy the correct script to the same directory that contains your sprite image files
auto_layout_gen4_gen5.lua
for regular automatic layout updateauto_layout_gen4_gen5_soul_link.lua
for Soul Link automatic layout update (paired sprites)- Copy
auto_layout_gen4_gen5_tables.lua
to the same directory - The script expects sprite files to be named as follows:
<pokemon_name>.png
(for example,pikachu.png
) - The script expects party slot image files (that are monitored by OBS) to be named as follows:
p<slot_number>.png
(for example,p1.png
) - The script expects a Pokeball image to be named
000.png
- The Soul Link version of the script expects
soul_links.txt
containing which Pokemon are linked (see example file)
- Edit the first line of the chosen
.lua
file from this repository with your favourite text editor (you can right-click the file and Open With > Notepad) and setgame
to the appropriate value, as described in the file - Open Desmume and your Pokemon ROM, and load your save file
- In Desmume, open Tools > Lua Scripting > New Lua Script Window...
- Click Browse... and locate
auto_layout_gen4_gen5.lua
(or other chosen version of the script) on your computer, open it, and click Run. If you see "script returned but is still running registered fuctions", this is normal and expected.- Note: The
auto_layout_gen4_gen5_tables.lua
file still needs to exist in the same directory, but you do not need to open it in Desmume
- Note: The
- You should now be able to switch party slots, deposit/withdraw Pokemon from the PC, and catch Pokemon to see your party images update automatically!
- The Lua script output window should display all slot changes in text form.
- If not already installed, install the latest release of Python 3: https://www.python.org/downloads/
- Download the latest release of Citra: https://citra-emu.org/download/
- Verify that the following file exists:
<your Citra directory>/scripting/citra.py
- Usually your Citra directory resides under
C:\Users\Name\AppData\Local\Citra\nightly-mingw
- Usually your Citra directory resides under
- Copy the correct script to
<your Citra directory>/scripting
auto_layout_gen6_gen7.py
for auto-layoutsos_counter.py
for SOS chain length counting
- If using auto-layout, copy the sprite files to
<your Citra directory>/scripting
- The script expects sprite files to be named as follows:
<pokemon_name>.png
(for example,pikachu.png
) OR<pokedex_number.png>
(for example,25.png
) - The script expects party slot image files (that are monitored by OBS) to be named as follows:
p<slot_number>.png
(for example,p1.png
) - The script expects a Pokeball image to be named
000.png
- The script expects sprite files to be named as follows:
- If using auto-layout, edit the first line of the
auto_layout_gen6_gen7.py
file from this repository with your favourite text editor (you can right-click the file and Open With > Notepad) and setcurrent_game
to the appropriate value, as described in the file - Open Citra and your Gen 6 or Gen 7 Pokemon ROM, and load your save file
- Double-click the
auto_layout_gen6_gen7.py
orsos_counter.py
file (or both!) to run the script(s) - If using auto-layout, you should now be able to deposit/withdraw Pokemon from the PC and catch Pokemon to see your party images update, whenever you re-run the script. The Python script output window should display all Pokemon party information in text form. To update the sprites again, just press Enter.
- If using the SOS Counter, you should see a running count in the script window, and a file in the
scripting
directory calledsos_count.txt
that contains the running count.
- Where can I find Pokemon sprite files?
- Can I resize the sprite files automatically?
- This is outside the scope of what the scripts can do. You can try using a mass-resizer tool like Flexxi.
- What about Gen 1 and Gen 2 games?
- These games are not supported
- What about Pokemon in the PC boxes?
- These are not supported
- Why am I seeing strange behaviour? (missing Pokemon, fast switching, not updating properly)
- Reading game memory directly is not always perfect. Try switching party members around, to see if the issue is corrected
- What if I'm on an operating system whose emulator does not support Lua scripting? (for example, Desmume on Linux)
- I'm sorry, you'll have to ask the maintainers of that emulator!
- Do these scripts work with ROM hacks, such as Drayano's Storm Silver, etc.?
- Yes! The scripts work on ROM hacks that have not been heavily modified.
- Do these work on fan-made games?
- No!
- Can you send me ROMs or a place to find ROMs?
- No! ROM sharing is illegal. Buy the game legally, and dump it to a file.
- If using Citra, instructions are here: https://github.com/citra-emu/citra/wiki/Dumping-Game-Cartridges
- What if my question isn't answered here?
- Tweet @EverOddish
- Please make every effort to follow the steps outlined above before contacting me for help. I have limited free time to spend troubleshooting.
- Thank you to FractalFusion and MKDasher of Pokemon Speed Runs for their initial Lua script work http://forums.pokemonspeedruns.com/viewtopic.php?t=314
- Thank you to the contributors at https://projectpokemon.org for their reverse engineering of Pokemon games
- Thank you to the developers of Citra for reviewing and accepting my contribution of adding scripting support to Citra
- Thank you to PokemonChallenges for helping me test all this! (Check him out at http://twitch.tv/PokemonChallenges)
- Thank you to Arochio for improvements to the Gen 6/7 scripts