Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Main #2

Merged
merged 162 commits into from
May 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
162 commits
Select commit Hold shift + click to select a range
efa6b69
Restructuring emulators
SergioMartin86 Jan 27, 2024
7e647ee
Removing old scripts and examples
SergioMartin86 Jan 28, 2024
64ec81d
Adding QuickerNES as first emulator after the refactoring
SergioMartin86 Jan 28, 2024
eada695
Progress with tester
SergioMartin86 Jan 29, 2024
c3f95a7
Progress with tester
SergioMartin86 Jan 29, 2024
8b32ed8
Adding hashes for other NES memory blocks
SergioMartin86 Jan 30, 2024
1d486f1
Progress with game class
SergioMartin86 Jan 31, 2024
90d8acb
Adding game-specific storage and serialization functions
SergioMartin86 Jan 31, 2024
b8c2e6f
Adding custom actions
SergioMartin86 Jan 31, 2024
026e290
Progress parsing properties from the configuration file
SergioMartin86 Feb 1, 2024
71695cd
Evaluating rules with conditions and properties
SergioMartin86 Feb 1, 2024
3844242
Correctly evaluating property against property
SergioMartin86 Feb 1, 2024
ac72238
Evaluating reward
SergioMartin86 Feb 2, 2024
de8bc58
Simplifying game code
SergioMartin86 Feb 2, 2024
c152652
Adding game-specific storage
SergioMartin86 Feb 2, 2024
ae16a2c
Some restructuring
SergioMartin86 Feb 2, 2024
029ab2d
Adding runner2
SergioMartin86 Feb 2, 2024
6f63514
Making property set to a vector to preserve ordering
SergioMartin86 Feb 2, 2024
4157a9b
Adding input history storage
SergioMartin86 Feb 3, 2024
4c36416
Storing bit-compressed inputs based on allowed inputs
SergioMartin86 Feb 4, 2024
f2f849f
Adding hooks
SergioMartin86 Feb 4, 2024
66936ea
Correctly serializing and deserializing rule status as bit array
SergioMartin86 Feb 4, 2024
269d437
Adding race20 example
SergioMartin86 Feb 4, 2024
7b090f0
Differential compression working
SergioMartin86 Feb 4, 2024
a1540a9
Successfully implemented differential compression with a common API
SergioMartin86 Feb 8, 2024
cfc62e1
Using differential compression with serializer/deserializer
SergioMartin86 Feb 10, 2024
00c7e08
Adding playback and game-specific serialization
SergioMartin86 Feb 11, 2024
d956860
Playback now working
SergioMartin86 Feb 11, 2024
37bc25d
Adding reproduction option
SergioMartin86 Feb 11, 2024
4d4adc1
Adding loop playback
SergioMartin86 Feb 12, 2024
261b71e
Small fixes
SergioMartin86 Feb 12, 2024
15ab0ed
updating jaffarCommon
SergioMartin86 Feb 12, 2024
4da6977
Updating common tools
SergioMartin86 Feb 13, 2024
f679f76
Adding state database
SergioMartin86 Feb 13, 2024
8fd105d
allocating and first touch with state db
SergioMartin86 Feb 13, 2024
2a8f5d0
Progress with state database
SergioMartin86 Feb 17, 2024
51a4506
Progress with jaffar core
SergioMartin86 Feb 17, 2024
08e0735
Adding core engine
SergioMartin86 Feb 17, 2024
51fcf68
Adding hash db
SergioMartin86 Feb 18, 2024
6a223be
Engine now running
SergioMartin86 Feb 18, 2024
828e49e
Now using disabled state blocks
SergioMartin86 Feb 18, 2024
de580ab
Adding timing
SergioMartin86 Feb 19, 2024
a2a7fb8
Allowing multiple types of state db
SergioMartin86 Feb 19, 2024
1b904bb
small comment fix
SergioMartin86 Feb 19, 2024
fdb1760
Added numa-aware state db, did not help much
SergioMartin86 Feb 21, 2024
45621ab
Adding driver for running jaffar
SergioMartin86 Feb 25, 2024
e90c636
Improving driver
SergioMartin86 Feb 25, 2024
fd8d4dd
Adding sprilo and improvements to the engine
SergioMartin86 Feb 29, 2024
cb10918
simplifying state db
SergioMartin86 Feb 29, 2024
9f50116
Adding some timing and optimizations
SergioMartin86 Mar 1, 2024
9e05f01
Many improvements to the engine and progress with sprilo
SergioMartin86 Mar 2, 2024
072ce8c
Many improvements
SergioMartin86 Mar 2, 2024
8492c17
Updating engine to the new jaffar common library
SergioMartin86 Mar 6, 2024
836acfe
Updating jaffarCommon
SergioMartin86 Mar 7, 2024
d618fbf
Starting to add CI stuff
SergioMartin86 Mar 8, 2024
5d8fbb6
Adding libsdl2
SergioMartin86 Mar 8, 2024
f1082c5
Adding gcovr config
SergioMartin86 Mar 8, 2024
2b4b0ff
Adding automatic format checking
SergioMartin86 Mar 9, 2024
e05e349
Adding automatic format checking
SergioMartin86 Mar 9, 2024
fda7acd
Using automatic styling now
SergioMartin86 Mar 9, 2024
0342534
Updating styling
SergioMartin86 Mar 9, 2024
247aae4
Updating clang format
SergioMartin86 Mar 9, 2024
dbd12d7
Fixing headers
SergioMartin86 Mar 9, 2024
ec0d343
Fixing style
SergioMartin86 Mar 9, 2024
1aa5c0a
Starting to add tests
SergioMartin86 Mar 9, 2024
2f8bdd4
Progress with testing
SergioMartin86 Mar 9, 2024
f2e5e60
Moving all initialization after the constructor
SergioMartin86 Mar 10, 2024
ba94e57
Moving all initialization after the constructor
SergioMartin86 Mar 10, 2024
6f42366
Now moved all initialization out of the constructors
SergioMartin86 Mar 10, 2024
a44dcad
Adding script tester
SergioMartin86 Mar 10, 2024
36ccf4d
Fixing style
SergioMartin86 Mar 10, 2024
783b469
Fix reference to jaffar
SergioMartin86 Mar 10, 2024
ef1a498
Fixing numa node count check
SergioMartin86 Mar 10, 2024
0fc9d60
Disabling ncurses for CI
SergioMartin86 Mar 10, 2024
adda882
Adding badges
SergioMartin86 Mar 10, 2024
8f5f97c
Updating jaffarCommon
SergioMartin86 Mar 10, 2024
d1ec9b7
Adding tests
SergioMartin86 Mar 10, 2024
8b97911
Fixing style
SergioMartin86 Mar 10, 2024
d1642e0
Simplifying test and finix style
SergioMartin86 Mar 10, 2024
ca6d570
Adding reproduction test
SergioMartin86 Mar 10, 2024
de6ba9e
Adding missing file and fixing exception output in player
SergioMartin86 Mar 10, 2024
8330f21
Fixing style
SergioMartin86 Mar 10, 2024
4bef9c4
Improving differential compression (added a test) and style fixing
SergioMartin86 Mar 10, 2024
93981a4
Improving test robustnes
SergioMartin86 Mar 10, 2024
cb43aef
Fixing style
SergioMartin86 Mar 10, 2024
6a93e69
using proper inlining with used attribute
SergioMartin86 Mar 10, 2024
93a340a
Removing ncurses from jaffar engine, refactoring input runner
SergioMartin86 Mar 11, 2024
6e28fbb
Reusing base state data for the last input entry
SergioMartin86 Mar 12, 2024
fcece09
Re-fixing style
SergioMartin86 Mar 12, 2024
a675e43
Improving win state management
SergioMartin86 Mar 13, 2024
5607195
Now printinf success rate for numa-local state db
SergioMartin86 Mar 13, 2024
5ce6df6
Adding feature to detect candidate moves
SergioMartin86 Mar 14, 2024
6d5ff64
Updating input discovery
SergioMartin86 Mar 16, 2024
322f6e0
updating subprojects and meson file
SergioMartin86 Mar 19, 2024
a8b3bad
Adding SDLPoP
SergioMartin86 Mar 21, 2024
91bb43c
Progress with quickerSDLPoP
SergioMartin86 Mar 22, 2024
af1a63c
Updating playback for sdlpop
SergioMartin86 Mar 22, 2024
3f2d330
Progress with sdlpop
SergioMartin86 Mar 23, 2024
6fadc3c
Improving magnet management
SergioMartin86 Mar 23, 2024
7248d6b
Fixing tests
SergioMartin86 Mar 23, 2024
e567be4
Fixing magnets in sdlpop
SergioMartin86 Mar 23, 2024
b04c623
Adding sdlpop tests
SergioMartin86 Mar 23, 2024
28d753c
Fixing Style
SergioMartin86 Mar 23, 2024
5038eb3
Adding missing solutions
SergioMartin86 Mar 23, 2024
f5690a2
Adding missing solutions
SergioMartin86 Mar 23, 2024
2afb935
Updating README
SergioMartin86 Mar 23, 2024
539756a
Updating build systems and starting to add quickerSnes9x
SergioMartin86 Mar 26, 2024
14ae8d0
Adding christmas craze and fixed some visualization issues
SergioMartin86 Mar 27, 2024
fe0fdf6
Adding Snes9x test
SergioMartin86 Mar 27, 2024
115a6af
Fixing style
SergioMartin86 Mar 27, 2024
d6398c5
Adding missing rom
SergioMartin86 Mar 27, 2024
6752212
Fixing test script
SergioMartin86 Mar 27, 2024
ede269c
Fixing mem leak in playback
SergioMartin86 Mar 28, 2024
5295f57
Adding quickerGPGX
SergioMartin86 Apr 14, 2024
d725c8a
More progress with gpgx emulation
SergioMartin86 Apr 14, 2024
d952d79
Adding dinorunner and fixing a bug with gpgx deserialization
SergioMartin86 Apr 14, 2024
1bc6f52
Allowing playback to play movies with non registered inputs
SergioMartin86 Apr 14, 2024
dd68124
Dino runner working
SergioMartin86 Apr 19, 2024
f6d8ce3
Updates
SergioMartin86 Apr 19, 2024
660379b
Separating emulation compilation and testing
SergioMartin86 Apr 20, 2024
3bbfc71
Fixed style
SergioMartin86 Apr 20, 2024
8a44616
Fixing missing define
SergioMartin86 Apr 20, 2024
e01c4a2
Adding tests for genesis
SergioMartin86 Apr 20, 2024
8697dd9
Fixing quickerGPGX concurrency issue with disabled blocks
SergioMartin86 Apr 20, 2024
5bb4493
Removing unnecessary roms
SergioMartin86 Apr 21, 2024
26055d4
Adding stella
SergioMartin86 Apr 23, 2024
f50b326
A2600 hellway running
SergioMartin86 Apr 24, 2024
e304136
Adding stella tests
SergioMartin86 Apr 24, 2024
37490de
Adding stella tests
SergioMartin86 Apr 24, 2024
b62b02a
Fixing scripts
SergioMartin86 Apr 24, 2024
6a1579b
Fixing style
SergioMartin86 Apr 24, 2024
f7b7a4e
Fixing style
SergioMartin86 Apr 24, 2024
bbad5ea
Updating readme gile and quickerGPGX
SergioMartin86 Apr 26, 2024
6beb513
Small fixes
SergioMartin86 Apr 26, 2024
5766445
Botting with a2600hawk
SergioMartin86 Apr 28, 2024
717391c
Adding A2600Hawk
SergioMartin86 Apr 28, 2024
2f195dc
Fixing CI
SergioMartin86 Apr 28, 2024
b8cea22
Fixing style
SergioMartin86 Apr 28, 2024
a5031db
Updating readme
SergioMartin86 Apr 28, 2024
88aadf8
Updating readme
SergioMartin86 Apr 28, 2024
e2623db
Updating description
SergioMartin86 Apr 28, 2024
8a98305
Updating readme
SergioMartin86 Apr 29, 2024
ea7ff00
Continuing to add quickerSMBC
SergioMartin86 May 12, 2024
3960f3f
SMB working
SergioMartin86 May 12, 2024
f2689b8
Added tests for smbc
SergioMartin86 May 12, 2024
f2e5fea
Updating game detection
SergioMartin86 May 12, 2024
7b523d5
Fixed style
SergioMartin86 May 12, 2024
b052a84
Fix game detection
SergioMartin86 May 12, 2024
9bbd2ff
Fixing tests
SergioMartin86 May 12, 2024
0834bbf
Adding quickerRAW
SergioMartin86 May 15, 2024
d692ba9
Adding another world (game)
SergioMartin86 May 15, 2024
89530f8
First quickerRAW eaxmple
SergioMartin86 May 16, 2024
ab91f97
Updating quickerRAW
SergioMartin86 May 16, 2024
ca93da7
Adding tests and preventing crash on end
SergioMartin86 May 16, 2024
646b208
Fixing style
SergioMartin86 May 16, 2024
fda55c9
Adding quickerArkBot
SergioMartin86 May 20, 2024
995466e
Adding ark game
SergioMartin86 May 20, 2024
8379f3e
Finished adding arkbot
SergioMartin86 May 20, 2024
7bf4433
Fixing docs and tests
SergioMartin86 May 20, 2024
8ba8fa5
Added missing file
SergioMartin86 May 20, 2024
4fa4c96
Making game and emulator list configurable
SergioMartin86 May 21, 2024
4e146ea
Fixing README
SergioMartin86 May 21, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
4 changes: 4 additions & 0 deletions .fix-style.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
cp extern/jaffarCommon/.clang-format .
extern/jaffarCommon/.build-tools/check-style.sh fix source
extern/jaffarCommon/.build-tools/check-style.sh fix games
extern/jaffarCommon/.build-tools/check-style.sh fix emulators
222 changes: 222 additions & 0 deletions .github/workflows/make.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,222 @@
name: Build and Run Tests

on:
pull_request:
branches: [ "main" ]
push:
branches: [ "main" ]

jobs:

# Build documentation and checking proper style
docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Installing apt packages
run: sudo apt install clang-format doxygen graphviz
- name: Checking proper code styling
run: |
cp extern/jaffarCommon/.clang-format .
extern/jaffarCommon/.build-tools/check-style.sh check source
extern/jaffarCommon/.build-tools/check-style.sh check games
extern/jaffarCommon/.build-tools/check-style.sh check emulators

# Build and run tests (QuickerNES) + Coverage Tests
build-QuickerNES:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Create build directory
run: mkdir build
- name: Installing meson and ninja
run: python3 -m pip install meson ninja
- name: Installing apt packages
run: sudo apt install libgtest-dev gcovr libnuma-dev libtbb-dev libsdl2-dev libsdl2-image-dev
- name: Run meson configuration
run: meson setup build -Dbuildtype=release -Db_coverage=true -DuseNCurses=false -Demulators=QuickerNES
- name: Building project
run: ninja -C build
- name: Running tests
run: ninja test -C build
- name: Running coverage analysis
run: ninja coverage -C build
- name: Upload coverage reports to Codecov
uses: codecov/[email protected]
with:
token: ${{ secrets.CODECOV_TOKEN }}
slug: SergioMartin86/jaffarPlusPlus
fail_ci_if_error: true
files: build/meson-logs/coverage.xml
- uses: actions/upload-artifact@v4
if: always()
with:
name: meson-logs
path: build/meson-logs/


# Build and run tests (QuickerSDLPoP)
build-QuickerSDLPoP:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Create build directory
run: mkdir build
- name: Installing meson and ninja
run: python3 -m pip install meson ninja
- name: Installing apt packages
run: sudo apt install libgtest-dev gcovr libnuma-dev libtbb-dev libsdl2-dev libsdl2-image-dev
- name: Run meson configuration
run: meson setup build -Dbuildtype=release -DuseNCurses=false -Demulators=QuickerSDLPoP
- name: Building project
run: ninja -C build
- name: Running tests
run: ninja test -C build

# Build and run tests (QuickerSnes9x)
build-QuickerSnes9x:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Create build directory
run: mkdir build
- name: Installing meson and ninja
run: python3 -m pip install meson ninja
- name: Installing apt packages
run: sudo apt install libgtest-dev gcovr libnuma-dev libtbb-dev libsdl2-dev libsdl2-image-dev
- name: Run meson configuration
run: meson setup build -Dbuildtype=release -DuseNCurses=false -Demulators=QuickerSnes9x
- name: Building project
run: ninja -C build
- name: Running tests
run: ninja test -C build

# Build and run tests (QuickerGPGX)
build-QuickerGPGX:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Create build directory
run: mkdir build
- name: Installing meson and ninja
run: python3 -m pip install meson ninja
- name: Installing apt packages
run: sudo apt install libgtest-dev gcovr libnuma-dev libtbb-dev libsdl2-dev libsdl2-image-dev
- name: Run meson configuration
run: meson setup build -Dbuildtype=release -DuseNCurses=false -Demulators=QuickerGPGX
- name: Building project
run: ninja -C build
- name: Running tests
run: ninja test -C build

# Build and run tests (QuickerStella)
build-QuickerStella:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Create build directory
run: mkdir build
- name: Installing meson and ninja
run: python3 -m pip install meson ninja
- name: Installing apt packages
run: sudo apt install libgtest-dev gcovr libnuma-dev libtbb-dev libsdl2-dev libsdl2-image-dev
- name: Run meson configuration
run: meson setup build -Dbuildtype=release -DuseNCurses=false -Demulators=QuickerStella
- name: Building project
run: ninja -C build
# Disabling tests for stella because it does not run correctly in the CI
#- name: Running tests
# run: ninja test -C build

# Build and run tests (Atari2600Hawk)
build-Atari2600Hawk:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Create build directory
run: mkdir build
- name: Installing meson and ninja
run: python3 -m pip install meson ninja
- name: Installing apt packages
run: sudo apt install libgtest-dev gcovr libnuma-dev libtbb-dev libsdl2-dev libsdl2-image-dev
- name: Run meson configuration
run: meson setup build -Dbuildtype=release -DuseNCurses=false -Demulators=Atari2600Hawk
- name: Building project
run: ninja -C build
- name: Running tests
run: ninja test -C build

# Build and run tests (Atari2600Hawk)
build-QuickerSMBC:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Create build directory
run: mkdir build
- name: Installing meson and ninja
run: python3 -m pip install meson ninja
- name: Installing apt packages
run: sudo apt install libgtest-dev gcovr libnuma-dev libtbb-dev libsdl2-dev libsdl2-image-dev
- name: Run meson configuration
run: meson setup build -Dbuildtype=release -DuseNCurses=false -Demulators=QuickerSMBC
- name: Building project
run: ninja -C build
- name: Running tests
run: ninja test -C build

# Build and run tests (QuickerRAW)
build-QuickerRAW:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Create build directory
run: mkdir build
- name: Installing meson and ninja
run: python3 -m pip install meson ninja
- name: Installing apt packages
run: sudo apt install libgtest-dev gcovr libnuma-dev libtbb-dev libsdl2-dev libsdl2-image-dev
- name: Run meson configuration
run: meson setup build -Dbuildtype=release -DuseNCurses=false -Demulators=QuickerRAW
- name: Building project
run: ninja -C build
# Disabling tests for RAW because I cannot upload the game data files
#- name: Running tests
# run: ninja test -C build

# Build and run tests (QuickerArkBot)
build-QuickerArkBot:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Create build directory
run: mkdir build
- name: Installing meson and ninja
run: python3 -m pip install meson ninja
- name: Installing apt packages
run: sudo apt install libgtest-dev gcovr libnuma-dev libtbb-dev libsdl2-dev libsdl2-image-dev
- name: Run meson configuration
run: meson setup build -Dbuildtype=release -DuseNCurses=false -Demulators=QuickerArkBot
- name: Building project
run: ninja -C build
- name: Running tests
run: ninja test -C build
7 changes: 5 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
run-clang-format
.mono
.clang-format
*.bk
.vscode
*.a26
Expand Down Expand Up @@ -26,8 +29,8 @@ tools/llvm/
tools/run-clang-format/
*.p1r
*.log
*.sol

jaffar.best.sol
jaffar.worst.sol
# Prerequisites
*.d

Expand Down
33 changes: 30 additions & 3 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +1,30 @@
[submodule "extern/json"]
path = extern/json
url = https://github.com/nlohmann/json.git
[submodule "subprojects/quickerNES"]
path = extern/quickerNES
url = https://github.com/SergioMartin86/quickerNES.git
[submodule "extern/jaffarCommon"]
path = extern/jaffarCommon
url = https://github.com/SergioMartin86/jaffarCommon.git
[submodule "extern/quickerSDLPoP"]
path = extern/quickerSDLPoP
url = https://github.com/SergioMartin86/quickerSDLPoP.git
[submodule "extern/quickerSnes9x"]
path = extern/quickerSnes9x
url = https://github.com/SergioMartin86/quickerSnes9x.git
[submodule "extern/quickerGPGX"]
path = extern/quickerGPGX
url = https://github.com/SergioMartin86/quickerGPGX.git
[submodule "extern/quickerStella"]
path = extern/quickerStella
url = https://github.com/SergioMartin86/quickerStella.git
[submodule "extern/atari2600Hawk"]
path = extern/atari2600Hawk
url = https://github.com/SergioMartin86/libAtari2600HawkTester.git
[submodule "extern/quickerSMBC"]
path = extern/quickerSMBC
url = https://github.com/SergioMartin86/quickerSMBC.git
[submodule "extern/quickerRAW"]
path = extern/quickerRAW
url = https://github.com/SergioMartin86/QuickerRAW.git
[submodule "extern/quickerArkBot"]
path = extern/quickerArkBot
url = https://github.com/SergioMartin86/QuickerArkBot.git
14 changes: 0 additions & 14 deletions AUTHORS

This file was deleted.

55 changes: 50 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,41 @@

[![Build and Run Tests](https://github.com/SergioMartin86/jaffarPlusPlus/actions/workflows/make.yml/badge.svg)](https://github.com/SergioMartin86/jaffarPlusPlus/actions/workflows/make.yml) [![codecov](https://codecov.io/github/SergioMartin86/jaffarPlusPlus/graph/badge.svg?token=NF9W0XZ16h)](https://codecov.io/github/SergioMartin86/jaffarPlusPlus)

# JaffarPlus

![](jaffar.png)

High-performance bot for tool-assisted speedrunning, based on [Jaffar](https://github.com/SergioMartin86/jaffar), a solver for the original Prince of Persia (DOS). JaffarPlus is:
JaffarPlus is a high-performance general-purpose breath-first search optimizer. This project is specially tailored for the production tool-assisted speedruns (TAS). Its features are:

* High-Performance: Tailored for multi-core CPUs, especially for high core counts.
* Multi-Platform: Supports games from multiple consoles/plaftforms: NES, SNES, Genesis, SDLPoP.
* Multi-Platform: Supports games from multiple consoles/game emulators
* Extensible: Any new emulators or games that support load/save and advance step functions can be added to JaffarPlus via a common API

A list of TAS movies produced by eien86 using JaffarPlus can be found [here](https://tasvideos.org/Subs-List?user=eien86&statusfilter=6)
This work is based on [Jaffar](https://github.com/SergioMartin86/jaffar), a solver for the original Prince of Persia (DOS).

# Built-in Emulator Support

## Consoles

| Console | Core(s) | Target | Notes |
| -------- | ------- | ------ | ------ |
| Atari 2600 | [QuickerStella](https://github.com/SergioMartin86/quickerStella) | Bizhawk (dev) | Faster than Atari2600Hawk |
| Atari 2600 | [Atari2600Hawk](https://github.com/CasualPokePlayer/libAtari2600Hawk) | Bizhawk 2.9.2 | |
| NES | [QuickerNES](https://github.com/SergioMartin86/quickerNES) | Bizhawk 2.9.2 | |
| SNES | [QuickerSnes9x](https://github.com/SergioMartin86/quickerSnes9x) | Bizhawk 2.9.2 | |
| Sega Genesis | [QuickerGPGX](https://github.com/SergioMartin86/quickerGPGX) | Bizhawk 2.9.2 | |
| Sega CD | [QuickerGPGX](https://github.com/SergioMartin86/quickerGPGX) | Bizhawk 2.9.2 | |
| Sega SG-1000 | [QuickerGPGX](https://github.com/SergioMartin86/quickerGPGX) | Bizhawk 2.9.2 | |
| Sega Master System | [QuickerGPGX](https://github.com/SergioMartin86/quickerGPGX) | Bizhawk 2.9.2 | |

## Game-Specific

| Game | Core(s) | Target | Notes |
| -------- | ------- | ------ | ------ |
| Prince of Persia (DOS / Apple ][) | [QuickerSDLPoP](https://github.com/SergioMartin86/quickerSDLPoP) | LibTAS+PCem | |
| Another World | [QuickerRaw](https://github.com/SergioMartin86/QuickerRAW) | *many* | All ports of AW use the same engine |
| Super Mario Bros (NES) | [QuickerSMBC](https://github.com/SergioMartin86/quickerSMBC) | Bizhawk 2.9.2 | Inaccurate in transitions, but good for solving levels |
| Arkanoid (NES) | [QuickerArkbot](https://github.com/SergioMartin86/quickerArkBot) | Bizhawk 2.9.2 (NesHawk Core) | |

Author
=============
Expand All @@ -17,6 +44,24 @@ Author
+ Github: https://github.com/SergioMartin86
+ Twitch: https://www.twitch.tv/eien86
+ Youtube: https://www.youtube.com/channel/UCSXpK3d6vUq58fjgF5jFoKA

Contributions via pull requests are highly appreciated.
+ TASVideos: https://tasvideos.org/Users/Profile/eien86

- A list of TAS movies produced by eien86 using JaffarPlus can be found [here](https://tasvideos.org/Subs-List?user=eien86&statusfilter=6)

- Contributions via pull requests are highly appreciated.

- Thanks to:
+ TASVideos' staff (judges, encoders, admins, etc)
+ The Bizhawk development team (YoshiRulz, feos, Morilli, CasualPokePlayer, NattTheBear, Alyosha, feos, zeromus, and many others)
+ Dávid Nagy and all SDLPoP developers
+ Gregory Montoir and Fabien Sanglard (authors of Fabother World)
+ Eke-Eke and all Genesis Plus GX developers
+ Shay Green, Christopher Snowhill and all QuickNES developers
+ sbroger (a.k.a Chef Stef), developer of Arkbot
+ Mitchell Sternke, developer of SMB-C
+ Alexander Lyashuk (mooskagh, crem) for kickstarting the idea of creating a TASing bot.
+ The authors of the third party libraries used.

- JaffarPlus is distributed freely under the GPL3 license for any purpose and use, as long as:
+ The license and proper credits to its author are preserved
+ If you publish a TAS or any public work using this software, I'd appreciate you mention it and linking this repository in your description
10 changes: 10 additions & 0 deletions emulators/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
For emulators to be included in JaffarPlus, the following conditions must be met:

- They core needs to be developed in their own repository and included here as a submodule
- They need to implement Meson as build system so that they can easily be loaded as a subproject dependency
- They need to pass a CI pipeline with build and run tests.
- The run tests must include the reproduction of movies (preferably published at tasvideos.org) with the following conditions
+ The end state hash must be equal for a simple reproduction (only advance state) and a full re-record reproduction (save / advance / load / advance). This ensures to some extent that the solution that JaffarPlus produces through repeated re-recording can be reproduced later in a simple playback in the emulator.
+ If the emulator is an improved version of an original one, the original must be preserved in the repository and the test above must produce the exact same results for both of them.
- Must be fully thread-safe
- Must have no memory leaks in load/save/advance state routines
Loading
Loading