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.

What the project needs right now.

  1. 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.
  2. 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.
  3. 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.

WindowsMesen emulatorYour own ROMSmall files

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.

Play in MesenRecord the buttonsSend the fileCompare with the original

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.
Download the recording pack ↓

ZIP · 27 KB · instructions, recording list, ROM checker and Mesen settings. No emulator and no ROM.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

Write to David ↗

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+F7 saves a save state in slot 1 to 7 (allowed, even while recording)
  • F1 … F7 loads a save state (only when not recording)
  • Esc pauses and unpauses the emulator

What to record first in X1

  1. 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.
  2. 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.
  3. Switching weapons while holding a charged shot, standing, walking and in the air.
  4. Enemies, stage by stage: make one appear, touch it, scroll away and back, then destroy it.
  5. 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.

See each request and its status →

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.

Kit + promptNo API keyHuman review

Inside the project, AI work runs like this:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

Write to David ↗ Open the AI tasks →

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.

Before the first mission.

  1. 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.
  2. 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.
  3. 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.

C++17Tests without assetsFork + pull request

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.

MSYS2 MINGW64 terminal
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-json

Fork the repository on GitHub to submit changes. Anyone can clone the public source to start reading and testing:

PowerShell
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-failure

The 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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

Video is already helpfulMesen/Lua to go further

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.

ObserveMeasureCompareDocument
  1. 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.

  2. 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.

  3. 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.

  4. 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:

PowerShell
./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.mss

The example below uses the existing Intro Highway probe. It has specific targets described in Lua; it does not automatically apply to every enemy.

PowerShell
$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 120

Use 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.

PNG/GIFPixel art editorVisual reference

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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

PowerShell
./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 32

The 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.

OGG / WAVComparative listeningAudio editor

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.

  1. 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.

  2. 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.

  3. Use the engine's format and map

    Music without a configured loop region may use OGG; effects use WAV. When the track has loop a 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 fields start_frame, end_frame, sample_rate and the measurement source.

  4. 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.

PowerShell
ctest --test-dir build -R audio-loop --output-on-failure

Read 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.

Without programmingShort reproduction

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.

  1. 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.

  2. 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.

  3. Identify the tested version

    Include the commit or package you received. If you have access to the build, the log is logs/megaman-x.log in the executable's folder. Send only the relevant excerpt after checking its contents.

  4. 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
Bug report
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:
Send my report ↗

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.