* Add support for other game localizations/languages
* Increase PokeMe64 version to v0.3
* Update README.md
* Slightly improve the text in docs/Why_I_Had_To_Give_Up_On_Batteryless_Repros.md
* Update libpokemegb submodule to commit 3d86aa8
* Add Japanese characters to the fonts
* Make validating Japanese save files work correctly
Turns out these Japanese cartridges are using an MBC1 controller. There's a notable difference between it and
MBC3: by default it is doing banking mode 0. But in this mode, you can't switch SRAM banks!
So in order to make japanese cartridges work, we must switch to mode 1.
* Update Arial font: add Japanese glyphs from Osaka Regular-Mono.ttf
In order to render japanese characters, we need to have a font which has japanese characters and make sure they
are added to the .font64 file with mkfont during compilation.
I wrote a small program before to figure out which Japanese characters are actually used in the Japanese gameboy
cartridges.
I only added those unicode ranges to the fonts to keep them small.
There was no easy way to have a font that has both latin and Japanese characters, especially not free. So I
used FontForge to merge the japanese glyphs from Osaka Regular-Mono into Arial.ttf
* Update libpokemegb to commit 0ef7a3a
* Update libpokemegb submodule
* Update libpokemegb submodule to commit d6f3423
* Various changes
- Upgrade libpokemegb to commit c47f8b3
- [Korean gen II games]: Make the UI show Trainer and Pokémon instead of the actual trainer name and pokémon name.
This is needed because our font does not include the necessary characters for the Korean games. And while I could attempt to add them, I don't sufficiently care to do so.
- Attempt to randomize random values. This is needed for random IVs and shininess chances.
It's not entirely clear to me whether the rand() function would actually return random values in previous versions of PokeMe64.
While libdragon does gather entropy at bootup and implements a getentropy() function, I don't see this function referenced anywhere.
That being said, it DOES look like libstdc++ would call a getentropy() function, so perhaps this is a way in which getentropy() from libdragon would get called.
But I'm not using libstdc++'s functionality to obtain random values, I'm using libc's rand() function. And I don't see any reference from libc (for rand()) to getentropy(), so...
At the very least we might need to use values from getentropy() to seed with srand(). But because I have trust issues with randomizing pseudo-random values in a system
that doesn't have a system clock, I also added trainerID, trainerName and the number of elapsed cpu cycles until we are going to the main menu to the seed. I might consider
adding the RTC values for gen II games to the seed as well later.
* Update README.md
* More README.md
* Update libpokemegb to commit 17232c4
- Add "Pikachu Bed" and "Tentacool Doll" decoration unlock options for
gen 2
- bugfix for unsafe behaviour
- attempt to make the RESET button work for cartridge switching. It
failed though. (not reliable). Therefore I just added a warning
message instead.
- Work on new ScrollWidget for Credits/About screen (Work In Progress)
This implements functionality to teach Pikachu Surf and/or Fly and
extends existing widgets to help provide this functionality.
When a gen1 game is inserted, the user gets the choice to teach Pikachu
these moves.
This commit also restructures some of the Data and Style structs.
It doesn't look like much, but it's functional ;-)
It can inject distribution pokémon into gen 1 and gen 2 original
cartridges and inject the GS ball in Pokémon Crystal.
That's it. But that was the minimal feature set I had in mind for the
project. In the Readme.md you can find the ideas I have for expanding
the project.
But the first priority is the UI, because it really looks bad right now.
(as I was mostly focused on building blocks and transfer pak
functionality. Not on making it looks good)