YGOFM-gamedata is a Java library that provides a fluent API for all of the game data in the PlayStation game Yu-Gi-Oh! Forbidden Memories as well as simulation capabilities.
- All data in the game is available and accessible: Cards, card information, duelists, drop pools, deck compositions, fusions, rituals, and more.
- Simulation suite and exact re-implementation of the game's RNG: Generating AI duelists' decks, determining card order after shuffle, and discovering RNG seed values based on card draws are all supported. See the
examplesfolder for how it's all done. - Extensive unit tests: Functionality is covered by unit tests, which include checking memory dumps generated by the game in an emulator and verifying that the library's behavior mimics game behavior exactly.
- JDK8 and above compatibility: Whether you're using the most modern JDK or the 10+ year-old JDK8, you'll have no issues running this library in your project.
- Pure Java implementation with zero dependencies: As can be seen in the
build.gradlefile, this library depends on no other projects to build and run. A few dependencies are used to run the unit-test framework, but these are neither required nor shipped with any of the Maven artifacts. - Cross-platform and cross-language: In addition to integrating with any JVM language, this library's bytecode can be compiled to machine code with LLVM or GraalVM to interface with other code natively.
- Extremely performant: All game data has been coded directly into Java source files, and no external files are loaded to build the database at start-up. Simulations run parallel on multiple threads to leverage modern CPUs' full potential.
- Complete and descriptive documentation: An extensive Javadoc covers all of the library's functionality to make working with it as hassle-free as possible.
FMDB db = FMDB.getInstance();
Card blueEyes = db.getCard(1);
System.out.println(blueEyes.getAttack());
// prints: 3000FMDB db = FMDB.getInstance();
Card boltPenguin = db.getCard(461);
Card babyDragon = db.getCard(4);
System.out.println(babyDragon.fuse(boltPenguin));
// prints: Thunder DragonFMDB db = FMDB.getInstance();
Duelist seto2 = FMDB.getDuelist(Duelist.Name.SETO_2);
System.out.println(seto2.getHandSize());
// prints: 18FMDB db = FMDB.getInstance();
Card raigeki = db.getCard(337);
Set<Duelist> duelists = db.getAllDuelists();
Set<Duelist> dropsRaigeki = new HashSet<>();
for (Duelist d : duelists) {
for(Pool.Type type : new Pool.Type[] {Pool.Type.SA_POW, Pool.Type.SA_TEC, Pool.Type.BCD}) {
Pool pool = d.getPool(type);
if(pool.getEntry(raigeki) != null) {
dropsRaigeki.add(d);
}
}
}
System.out.println(dropsRaigeki);
// prints: [Heishin, Shadi, Ocean Mage, Heishin 2nd, Seto 2nd, Seto, Seto 3rd]This example is too complicated to include here, but you can find it in SeedSearchExample.java in the examples directory. You can run it on Windows with:
cd examples
gradlew.bat seedSearchor on Linux with:
cd examples
./gradlew seedSearchBuilds of this project are published on GitHub Packages.
Use with Maven:
<dependency>
<groupId>moe.maika</groupId>
<artifactId>ygofm-gamedata</artifactId>
<version>1.1.0</version>
</dependency>Use with Gradle:
dependencies {
implementation 'moe.maika:ygofm-gamedata:1.1.0'
}This project uses SemVer versioning. Please use only versioned releases of this project, as the API stability of the SNAPSHOT/HEAD of this repository is not guaranteed.
If you'd prefer to use the raw game data instead of this library, you can find all of it inside either of the following convenient formats:
- As a SQLite database in
sqlite/fm-sqlite3.db - As JSON files inside the
sqlite/jsondirectory
These files are no longer used for this project, as their data has been converted to Java source code, but they are preserved in this repository for their usefulness.
This project is neither endorsed by nor affiliated with Konami. All Intellectual Property rights to the Yu-Gi-Oh! franchise and the Forbidden Memories game belong to Konami. None of the Forbidden Memories ROM is included in this repository.