TWO WAYS TO HELP
Play and record, or work with an AI.
The project rebuilds Mega Man X and compares every frame of our game with the original. To check a situation, the original game has to show it at least once. You can help without writing code.
No AI needed: play and record
Play the original game in an emulator with recording on. No coding needed, and you do not have to play well.
For people who like to play →With an AI agent
Give your AI a ready-made task, review its answer and send it in for checking.
For people who use Codex, Claude or a chat →Code, art, audio and testing
Guides for the public code, research, sprites, audio and bug reports.
Other ways to help →What the project needs right now.
- Recordings of rare situations in X1Each weapon on each boss with the life bar going down, deaths at specific moments, sub-bosses and glitches you know. This is exactly what is missing: the project's automatic search could not reach these situations.
- Full playthroughs of X2 and X3Play normally, from the start to the credits, with one recording per stage. They are the comparison material for the next games.
- Small tasks with AIThere are ready-made tasks for your AI, with a kit, a prompt and a report template.
PATH A · NO AI
Play and record.
For people who enjoy playing Mega Man X. No coding needed, and you do not have to play well.
CURRENT LIST
What to record, request by request
See on the site every recording still missing in X1, X2 and X3, what has arrived and what is done. You can mark what you have already recorded.
Open the recording list →Do you only want what is open right now, with what to do in each request? See the open requests →
A recording is not a video. The Mesen emulator saves only the buttons you press, frame by frame, in a small file (.mmo). The project then replays that file and the game happens again, identically. That lets us compare our game with the original on the same play.
What you need
- A Windows computer.
- Your own ROM, in the exact version: Mega Man X USA version 1.1 (also called Rev 1); X2 and X3 USA versions. The project does not provide ROMs.
- The Mesen 2.1.1 emulator for Windows, which is not in the pack: download Mesen 2.1.1 for Windows from its release page ↗ The emulator's current website offers a newer version, which the project has not tested yet: use 2.1.1.
- A controller (recommended) or the keyboard.
ZIP · 27 KB · instructions, recording list, ROM checker and Mesen settings. No emulator and no ROM.
Choose what to record
Start with the requested recordings list here on the site, in order: it goes from what helps most to what helps least. The pack has the same requests as text. If you like, write to David first to agree on what is most missing and avoid repeating what already exists.
Set up the pack
Unzip the pack into a folder. Unzip Mesen 2.1.1 so that Mesen.exe sits inside the pack's Mesen folder, without deleting settings.json. Put your ROM in 1-PUT-YOUR-ROM-HERE and run 2-CHECK-THE-ROM.bat: it must show OK in green. Open Mesen with 3-PLAY-AND-RECORD.bat, set up your controller in Settings > Input and open the ROM with File > Open.
Reach the starting point without recording
Go to the boss door, or just before the enemy, and save a save state there. Before you start recording, loading a save state is fine, as often as you like.
Record your attempt
Menu Tools > Movies > Record. Save the file in the pack's recordings folder, with the name the list gives. Under Record from, choose Current state. Use Power on only when the list asks for it.
Stop and check
Menu Tools > Movies > Stop. Check that the .mmo file is in the folder. Did it not go as planned? Load the save state and record again with the same name plus -b at the end (then -c, -d). Do not delete the earlier ones: a failed attempt is useful too.
Send the recordings
Zip the recordings folder and email it to davidluky@davidluky.com, the website's contact. You can send them a little at a time, after each session. Do not send the ROM.
The golden rules
While recording, you may: die, lose lives, get a Game Over and continue; pause for as long as you like; type a password on the game's password screen; save a save state.
While recording, never: load a save state (that breaks the recording); reset the game, open another ROM or change the settings; close Mesen before doing Stop.
Broke one of these? No problem: do Stop, load the save state and record again with -b in the name.
Mesen shortcuts used here:
Shift+F1 … Shift+F7saves a save state in slot 1 to 7 (allowed, even while recording)F1 … F7loads a save state (only when not recording)Escpauses and unpauses the emulator
What to record first in X1
- Bosses and sub-bosses with each weapon, normal and charged shots. A hit only counts when the boss's life bar goes down. Most of it needs a complete X, with all 8 weapons and the arm part: use passwords freely.
- Dying on purpose: to a sub-boss, coming back from the checkpoint to fight again; at the moment the game takes control away from X (picking up an item, entering a boss door, in a cutscene); crushed by something that pushes.
- Switching weapons while holding a charged shot, standing, walking and in the air.
- Enemies, stage by stage: make one appear, touch it, scroll away and back, then destroy it.
- Glitches and tricks you know. Our game has to repeat even the bugs of the original. Add one sentence explaining what happens.
In X2 and X3: play normally, from power-on to the credits, with one recording per stage. Use each new weapon in the following stages, with normal and charged shots.
No need to record: shots that do not take the boss's life, or a polished run. Mistakes and deaths are useful too.
Technical details
To check your ROM version: the SHA-256 of the file, without the 512-byte header if there is one, must be one of these.
- Mega Man X (USA) 1.1
b8f70a6e7fb93819f79693578887e2c11e196bdf1ac6ddc7cb924b1ad0be2d32 - Mega Man X2 (USA)
f3246755f608a1e1dc9c848b61da3b824c7853b29b3be40df6fc7f2793a887ed - Mega Man X3 (USA)
65b03268afac296330e8ff8d60dd0825879e13ed658b37713c034a3bd074f1d7
The USA 1.0 version of X1 has a different value and does not work.
Questions about recordings.
Is it a video?
No. Mesen records only the buttons you press, frame by frame. The project replays the file and the game happens again, the same way.
Do I have to play well?
No. Dying is useful too; sometimes it is exactly what we ask for. Many short recordings are worth more than one long, perfect one.
Which ROM version?
Mega Man X: USA version 1.1, also called Rev 1; USA 1.0 does not work. X2 and X3: USA version. Japanese, European or modified versions do not work, because the recording will not replay on our side. Use your own ROM and do not send it: send only the recordings.
How big are the files?
Small. The file stores only the buttons, with no picture or sound: the recordings the project has today are under 400 KB each.
Can I use save states and passwords?
Yes. Before recording, load save states as much as you like. While recording, saving is fine and loading never is. You can type a password on the password screen even while recording: use it to start with weapons, armour, Heart Tanks and Sub Tanks.
PATH B · WITH AI
Work with an AI agent.
For people who use Codex, Claude Code or an AI chat and want to deliver a small task that can be checked.
Inside the project, AI work runs like this:
One card per session
Each AI session gets one card: a complete request with the files, the commands and the number that proves it worked, set before the work starts.
Coordinator and executor
A coordinator writes and orders the cards and checks every delivery against the repository. An executor runs one card at a time, exactly as written.
The proof is the original game
A behaviour is accepted when our game's state is equal to the original's on the same recordings. The checklist only goes up with verified parts. Players' recordings are the material for that comparison.
Stopping is a result too
A card that cannot finish is parked with the numbers seen and the command to resume. That counts as a good outcome.
How you take part
The translated cartridge code lives in a private repository. Access is decided case by case, after a conversation: write to David about what you would like to do.
Without that access, you can already help through the With AI page: download the public kit, choose a task, paste the prompt into your AI, review the answer and send the report.
Choosing a task does not reserve it, and the AI can still make mistakes: read the answer before you send it.
OTHER WAYS
Other ways to help.
The guides below cover the public code, research, sprites, audio and testing.
The public code on GitHub is the previous engine and does not include the translated cartridge code.
Programming
Movement, attacks, collisions, and regressions.
C++ and Python →Research
Turn observations into reproducible references.
Video and measurements →Sprites
Correct frames, palettes, and character alignment.
Pixel art →Audio
Smooth loops, effects, and the right timing to play them.
Music and SFX →Tests
Find the first error and help reproduce it.
Without programming →Before the first mission.
- Choose a concrete gapOpen an entry in the enemy catalog and see the next task. You can also report a control, stage, or audio problem.
- Check the task on GitHubRead the issues and describe the scope you want to take on. This helps avoid two people fixing the same problem.
- Deliver it with a way to verify itA small change, the reference used, and steps to verify the result are a great start.
GUIDE 01
Programming
For contributors who want to improve the public source and contracts.
The first public package provides C++17 source, a buildable core and 15 asset-independent contracts. Start with a small logic, test, documentation or portability task.
Step by step: set up the environment on Windows
Install Git and MSYS2. Use the MINGW64 package family below.
pacman -S --needed mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake mingw-w64-x86_64-ninja mingw-w64-x86_64-raylib mingw-w64-x86_64-nlohmann-jsonFork the repository on GitHub to submit changes. Anyone can clone the public source to start reading and testing:
git clone https://github.com/davidluky/megaman-x-engine.git
cd megaman-x-engine
$env:PATH = "C:\msys64\mingw64\bin;C:\msys64\usr\bin;" + $env:PATH
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build -j 8
ctest --test-dir build --output-on-failureThe PowerShell example assumes MSYS2 is installed at C:\msys64. The default build compiles the core and runs contracts without a ROM, window or assets. The full executable requires separate data and is not the starting point.
Find the module your change belongs to
Start with README.md ↗, follow CONTRIBUTING.md ↗ and consult the architecture map ↗. The guides explain who owns input, state and each frame update. Check existing contracts before adding another.
Find the code that applies the rule
enemy.cpp ↗ contains enemy behavior; kb_fsm.cpp ↗ is the state machine interpreter. Reference definitions and captures are not included with the public source. Identify the required data before proposing new values.
Reproduce with a small input
Use data created in memory or temporary files. Input bindings contract ↗ is an example; PublicTests.cmake ↗ lists the public selection. The test should demonstrate a real failure or a rule that is not covered yet.
Submit a reviewable pull request
Create a branch in your fork, inspect the diff and submit the change with the test command and result. Human review decides whether to merge. If the case needs missing material, submit the investigation and the exact requirement.
Expected deliverable
A small change or verifiable investigation, the files consulted, the tests actually run and the limits. A passing contract does not prove a complete stage or fidelity to the original.
GUIDE 02
Research and references
Help turn an observation into a rule that can be checked.
A useful measurement answers a small question: which side the projectile starts from, what event starts an attack, or on which frame the enemy changes state.
Define the question and control
Choose the entry, stage, and a reproducible situation. For shot direction, for example, compare X on the left and right while keeping the same attack situation. A video already helps locate the problem.
Identify the reference
Record the game version, initial state, and commands used. For advanced research, the project uses Mesen and Lua with a compatible local reference. Ask for guidance about the fixture: it is an emulator reference state, not a file interchangeable between arbitrary configurations.
Record the first deviation
Count frames, describe the position, and record the enemy state when possible. Distinguish world, camera, and image coordinates: the same number in different coordinate bases can look like a correction and introduce an error.
Deliver reduced data
A short table with frame, action, position, speed, HP, and event is usually more useful than a huge package. Include the capture recipe and examples that confirm or reject your hypothesis.
Advanced tutorial: validate a fixture and start a trace
These commands belong to the private research environment and are not included in the public source. They require a configured Mesen installation and compatible local materials. Validate the reference state before measuring:
./build/venv/Scripts/python.exe tools/oracle/check_recordings.py --brief
./build/venv/Scripts/python.exe tools/oracle/validate_fixture.py tools/oracle/fixtures/stage_select_thispc.mssThe example below uses the existing Intro Highway probe. It has specific targets described in Lua; it does not automatically apply to every enemy.
$traceDir = Join-Path 'build/contributor' ('intro-enemy-trace-' + [guid]::NewGuid().ToString('N'))
./build/venv/Scripts/python.exe tools/oracle/run_mesen.py --game mmx1 --script tools/oracle/lua/enemy_behavior_trace.lua --savestate tools/oracle/fixtures/stage_select_thispc.mss --out $traceDir --timeout 120Use a new output folder for each attempt and check the fields actually emitted. Before expanding the capture, review the probe private materials and the fixture guide private materials.
Expected deliverable
Investigated question, identified reference, reproducible steps, short table, and a conclusion with limits. You do not need to attach the ROM or raw dumps to the report.
GUIDE 03
Sprites and pixel art
Small pose, color, and alignment adjustments can fix very visible defects.
You can help recover an incorrect frame, identify a palette, or find out why the character appears to “jump” between poses. The entry indicates when the art has already been verified and the problem lies elsewhere.
Choose a frame, not the whole sheet
Report the character, animation, frame index, and visual reference. Separate an incorrect drawing from a correct frame used at the wrong time.
Preserve the anchor point
Compare the feet, body center, and projectile origin at the same position. Keep the cell dimensions, transparency, frame order, and alignment. Changing the crop can alter the appearance even when the drawing is identical.
Check the palette and both directions
Use the reference colors and also check the damage or shooting frames. Some sheets have a separate flash version. Do not mirror a character just by convention: Axe Max, for example, has its own documented orientation.
Deliver a clear comparison
Include before/after at the same scale, the changed cell, the editable file, and the material source. If the art is correct and the sequence is wrong, the adjustment may belong in the animation definition.
Example: prepare a candidate Met sheet
The packer aligns frames by their base. With the build folder created during environment setup, the output below can be reviewed before replacing a game sheet.
./build/venv/Scripts/python.exe tools/pack_enemy_sprite.py --src content/x1/sprites/enemies/mmm-mmxmetoll.gif --dst build/met-candidate.png --cell-width 32 --cell-height 32The command provides the dimensions and a configuration example. Check the packer private materials and the sprite convention private materials. This workflow must not regenerate sheets with their own contract, such as axemax_sheet.png.
Expected deliverable
Identified frame, art source, editable file, and a comparison with alignment and palette preserved. For original art or a visual variant, present the proposal before replacing project material.
GUIDE 04
Music and effects
Precision in the loop, the file, and when the event plays.
There is work both in listening and implementation: locating an audible restart, measuring the loop, identifying a missing effect, or checking when the sound should play.
Identify the track or event
Report the stage and situation. For an effect, record the action that should produce it. For music, separate the intro, repeat, and any pause caused by another game event.
Mark the loop boundary
Record the sample rate and the start/end positions in audio frames. These are PCM samples per channel, not game frames. The intro should play once and the selected section should repeat without an audible cut.
Use the engine's format and map
Music without a configured loop region may use OGG; effects use WAV. When the track has
loopa configured loop, as Flame Mammoth does, the current path requires 16-bit PCM WAV with compatible channels and sample rate. An OGG alone does not prepare this case. bgm.json private materials connects stages to tracks. The loop reference for Flame Mammoth private materials shows the fieldsstart_frame,end_frame,sample_rateand the measurement source.Listen to the transition, then check it in the game
Play several loops and compare the seam. For SFX, also check the timing of the attack or presentation. Replacing a sample does not fix an event triggered on the wrong frame.
Example: validate the loop region
After preparing the build, the contract below checks bounds, sample rate, and invalid data. It complements listening and the stage test.
ctest --test-dir build -R audio-loop --output-on-failureRead the loop test private materials and the audio manager ↗. The common importer produces BGM in OGG; a track with a loop also needs compatible PCM WAV prepared for this path. The scripts use specific local materials; coordinate the source with the maintainer before running them or replacing tracks.
Expected deliverable
Identified track/event, authorized source, sample rate, loop region or effect timing, and an audio comparison. If you compose, send a proposal for original music or a variant with clear authorship and usage conditions.
GUIDE 05
Test and report
You do not need to know how to program to help improve the project.
You can contribute without writing code. A report that allows the problem to be reproduced saves time and helps verify that the fix really solved the case.
Shorten the path to the error
Record the stage, section, commands, and whether you reached it through the menu, a respawn, or the test map. Say whether there was a dash, charged shot, wall, or change of direction.
Show the first strange moment
A short video is great for animation and audio. For collision, explain where the shot or body should make contact. If it only happens sometimes, report the attempts that worked and those that failed.
Identify the tested version
Include the commit or package you received. If you have access to the build, the log is
logs/megaman-x.login the executable's folder. Send only the relevant excerpt after checking its contents.Check again after the fix
Repeat the same steps and also a nearby case: the other side of the enemy, a shot at another height, or returning after dying. This distinguishes a robust fix from an adjustment that works in only one situation.
Report template to copy
Character / problem:
Stage and section:
Project version or commit:
System / Windows version:
Command, test profile, or menu path:
Fixture, initial position, and seed (if applicable):
Compiler / toolchain (if you compiled):
Steps to reproduce:
1.
2.
3.
What I expected:
What happened:
Does it happen every time or sometimes?
First incorrect moment in the video:
Link to short video / capture / log:Expected deliverable
Clear steps, identified version, expected versus observed, and a small example. The maintainer should be able to reproduce the problem without guessing the path you took.
Questions from newcomers.
Can I help without code access?
Yes. You can choose a public task, offer research, review art or audio, or report a test with a package you have received. The source is now public: make a fork and propose a change through a pull request.
Is an enemy with a sprite already complete?
Not necessarily. The entry separates what exists, verified fixes, and what still needs to be measured or integrated. A thumbnail only shows visual identity; it does not prove movement, attacks, or complete fidelity.
How do I avoid duplicating someone else's work?
Before starting, send the entry link and describe the scope you intend to take on. The catalog is a reviewed snapshot of the project; task availability must be coordinated with the maintainer.
Can I send the ROM or a package of game files?
It is not necessary. Share the identified reference, recipe, reduced tables, and agreed contribution files. ROMs and local emulation materials are not part of the public deliverable.
How does a task become considered verified?
When the reference is identified, the change is integrated, and the appropriate verification passes. Video, automated tests, and comparison with the original answer different questions; the entry must say which part each one proves.