On this page
  1. How it plays
  2. The edge-of-screen exit
  3. Boss rooms
  4. Randil’s run, stage by stage
  5. Related
  6. Mechanics
  7. References
  8. Sources

The atlas reads Felix the Cat’s US NES release in the ROM, which it disassembled with da65, and measures it in headless Mesen and FCEUX. Its reference run is Randil’s, TASVideos’ current publication for the game, 22:29.01 long1. The addresses in the claims are the atlas’s reading.

#How it plays

Felix walks right into a stage that scrolls with him. Holding Right in the first stage, his speed grows by 482/256 px a frame each frame to a top speed of 5332/256 px a frame2. Falling, he gains 453/256 px a frame of speed each frame, up to 6 px a frame3. Walking right, the camera settles with him 1364 px behind its scroll value, left of the screen’s middle4.

A stage ends at a line in it, not at the screen’s edge. Each frame the game compares Felix’s x with the stage’s bound, and once he is 2905 px past it the clear flag goes up. The first stage’s bound is x 38485,5. The camera stops 2484 px past the bound, so the line lies off the screen’s right edge4.

A three-digit timer drops by 1 every 60 frames while Felix is in a stage’s main area6. After a clear, the game counts the timer down a unit a frame, and the next stage starts 1627 frames after that count; Felix’s remaining power is counted first7. Felix’s power level runs from 0 to 3, and while it’s above 0 a count of 10 units drops one every 300 frames8. A hit above power level 0 takes a level away. At power 0, walking into the first stage’s first enemy costs a life, and the stage restarts from its start9.

#The edge-of-screen exit

Dragon Co.’s unlicensed Felix the Cat, a different game, ends a level when the player gets close to the screen’s right edge. KAGE-008 built a TASVideos submission around it, and the judge, Maru, reported a test file that saves 855 frames10 in level 110.

Hudson’s exit test reads Felix’s x and the stage’s bound, never the scroll. Moved to 6 px below the scroll value11 early in the first stage, near the screen’s right edge, Felix doesn’t clear the stage, and the camera catches up with him the next frame11.

#Boss rooms

Each world ends in a boss room, and the exit test runs there too. A boss room’s bound is 0, so its stage ends once Felix’s x reaches 2905. The test never asks about the boss: placed at that x with the boss still up, Felix clears the stage, and the next one loads12.

The line lies inside a wall. From x 224 on, each boss room’s map is solid from top to bottom, and Felix stops at x 21513,13. Each frame, after he moves, the game reads the map 8 px ahead of him at three heights, and where a tile blocks, it takes the move back14. Above the screen and below it, the map reads its top and bottom rows, so neither a jump nor a fall goes around15.

Getting into the wall takes a single step of more than 24 px, and Felix’s top speed is about 2 px a frame. A moving platform’s push survives the test, but in Randil’s run none came in a boss room16. The door Felix enters World 2’s boss room by leads back into the same room17, and only the boss’s defeat moves the fight on18. In Randil’s run the seven fights take 4,982 frames in all, from the first frame of play to the boss’s defeat19.

#Randil’s run, stage by stage

Replayed in FCEUX, Randil’s movie passes 23 stages in 9 worlds20. The table gives the frame play starts in each stage and the frame its clear flag goes up.

WorldStage indexPlay startsClear
120029520226520
1201272220467420
1202513120807620
220385782010,75020
220411,2942013,09120
220513,5552016,44120
320617,0022018,84520
320719,3092021,09920
320821,5642025,61820
420926,1122028,08020
4201028,5412032,47320
4201132,9512036,69120
5201237,2912038,86320
5201339,3332043,31320
5201443,8222046,91220
6201547,4212051,37220
6201651,8482055,74820
7201756,2962060,24420
7201860,7202064,31120
8201964,8612072,76120
9202073,1722075,14220
9202175,6012077,57420
9202278,10420movie ends, 81,07420

Mechanics

MechanicKindHow
Level enda stage ends when Felix's x passes the stage's bound plus 290, a line in the stage rather than on the screen
ScrollingFollowwalking right, the camera keeps Felix 136 px behind its scroll value and stops 248 px past the stage's bound
Time limitPer levela three-digit timer drops every 60 frames, and the clear counts what's left
Power-upa power level from 0 to 3 whose 10 units count down every 300 frames
LivesRestart pointin the first stage, a lost life restarts it from its start
Boss fighteach boss room runs the same exit test, from a bound of 0, behind a wall solid from top to bottom
Tile collisiona 512 px ring of 16 px tiles; a blocked step is taken back, but a platform's push isn't
Runningthe x speed builds by a step from RAM to a cap of 533/256 px a frame
Gravity45/256 px a frame per frame, to 6 px a frame
Object slotsFelix is slot 0 of tables of 22
Every claim about this game, by concept (23)
generalFelix's push $041D comes from one routine, in PRG bank 12: a platform whose x swings with the frame counter sets it, while Felix rides, to the change in its x that frame, and the object pass clears it again afterward. The mover adds it to Felix's x, and the wall test never takes it back (felix-the-cat/wall-test). In FCEUX's replay of the 1625M movie the push was 1 px either way, and it came only in the main areas of stage indices 1, 2, 7, 9, 10, 12, 18, and 22, never in a boss room.Code
TASVideos' current Felix the Cat (USA) publication, 1625, is Randil's 22:29.01 run from 2010, made in FCEU 0.98.28 and tagged "Takes intentional damage".Web
Boss fightThe exit test has no boss condition. Each of the seven boss rooms, stage indices 2, 5, 8, 11, 14, 16, and 18, has a bound of 0, so it ends at x 290, inside the room's wall (felix-the-cat/boss-wall). In Mesen, from power-on, with each boss stage cleared at its bound and $040C set to 3 where the stage's last door would set it, the game's room change loads the boss room; Felix placed there at x 290 with the boss up sets the clear flag the next frame, the fight's step $0411 still at 0, and the next stage loads.Verified
In each of the seven boss rooms, the map's columns 14 to 31, x 224 to 511 of its 512 px, are solid from top to bottom, and so is column 0. The wall test (felix-the-cat/wall-test) stops Felix at x 215, where the point 8 px ahead of him reaches the wall. In Mesen, moving right at his top speed of 533/256 px a frame from x 215, he stays at 215 at every height, from above the map to below it.Verified
$0411 is a boss stage's step: 0 in the fight, 1 once the boss is beaten, and 2 in the room after. Only two instructions add to it: $A20D in PRG bank 13, in the routine that runs when the boss is beaten, and $FA13, in the room change that $040C = 3 asks for. A door asks for it only in a main area (felix-the-cat/boss-room-door); in the boss room, bank 13's $A1B9 stores the 3. Every store to $0411 writes 0, or $FF that $FA13 lifts to 0 at once. In FCEUX's replay of the 1625M movie, in World 1, the step went from 0 to 1 at $A20D on frame 7,643; on frame 7,880 $A1B9 set $040C to 3, and $FA13 took the step to 2.Code
A door in a boss room leads back into the same room. Pressing Down on a door tile sends Felix down it, and the door's kind picks the room change. In a boss room ($040D = 8), $CABF gives every door kind 2 except in stage index 22, and kind 2 is a hop back up where he went down. Only kind 3 moves the boss step on (felix-the-cat/boss-step), and $CB90 gives it only to a door in a main area, with the step at 0. Stage index 5's boss room has a door tile where Felix comes in. In FCEUX, Down on it during the fight sends him down and back up at x 48, with the fight still on.Code
In Randil's 1625M movie, replayed in FCEUX, the seven boss fights last 627 to 733 frames from the first frame of play in the boss room to the frame the boss is beaten ($0411 reaches 1), 4,982 frames in all.Our research
GravityFalling, with $0616 below 3 and $03B1 clear, Felix's y speed grows by 45 (in 1/256 px, down positive) each frame up to a cap of 1,536, 6 px a frame, as measured at the first stage's start.Verified
Level end$33 is the stage index. A stage ends at $FA20, which adds 1 to it once the clear flag ($03B7) is up and the tally has run the timer down to 000. In the 1625M replay it reads 0 in the first stage and counts up to 22 in the last.Code
Three instructions in the ROM store to the clear flag $03B7. The stage load clears it; the exit test in the fixed bank sets it from Felix's x (felix-the-cat/exit-threshold); and a routine in PRG bank 12 sets it when a countdown at $042B reaches 0.Code
Every frame of play until the clear flag $03B7 is up, the game subtracts $32 and the stage's bound ($BB:$BD) from Felix's x and sets the flag when the result is at least $F0. A stage ends when Felix's x reaches its bound plus 290; in the first stage, whose bound is 3,848, that's x 4,138.Verified
The fixed bank's exit test reads Felix's x and the stage's bound, never the scroll. For example, walked a second into the first stage and placed 6 px below the scroll value, near the right edge of the screen, Felix doesn't clear the stage: the camera re-centers on him the next frame, and the clear flag stays at 0.Verified
KAGE-008's rejected TASVideos submission 6487 plays Dragon Co.'s unlicensed Felix the Cat, a different game from Hudson's, and ends levels "if the player is close to go off-screen to the right". The judge, Maru, adds that the player only has to jump "as much as possible to get to the right of the screen" and reports a test file saving 855 frames in level 1.Web
Replayed in FCEUX, Randil's 1625M movie passes 23 stages in 9 worlds of 3, 3, 3, 3, 3, 2, 2, 1, and 3 stages. For each stage the table gives the frame play starts (game mode $28 reaches 5) and the frame the clear flag goes up; the last stage runs to the movie's end at frame 81,074.Our research
LivesA hit at power level 0 ($03C6) sets $03CD to $FF and Felix's y speed to $F7:00, upward; above 0, it sets $03CD to $B4 and takes 1 from the power level instead. Walking right from the start of the first stage at power 0, the Mesen probe sees Felix hit at x 281, the lives digits ($03A5-$03A6) lose 1, and the stage restart with Felix at x 48.Verified
Object slotsThe atlas reads Felix as slot 0 of the game's object tables, and the tables as 22 slots each from the 22-byte spacing of the x and y tables. His x in the stage is $0658:$0642 with a fraction byte at $062C, and his y is $069A:$0684 with a fraction at $066E, growing downward. His x speed is $06C6:$06B0 and his y speed $06F2:$06DC, signed, in 1/256 px a frame; each frame the mover adds the x speed, plus a signed byte at $041D, to the x.Code
Power-up$03C6 holds Felix's power level, 0 to 3 in the 1625M run. While it's above 0, $03C0 counts down one unit every 300 frames (150 odd frames, counted at $03C1); each change of level in the run that left it above 0 set $03C0 back to 10.Code
RunningHolding Right from a standstill in the first stage at power level 0, with $0616 below 3, Felix's x speed grows by a step read from $03B3, 48 (in 1/256 px) there, each frame up to the cap of 533, about 2.08 px a frame, which it reaches on the twelfth frame.Verified
ScrollingThe playfield's scroll is $16:$14, which the raster split writes to $2005. In the Mesen probe, Felix's screen x is about x − scroll + 256: walking right, the camera settles with his x 136 px below the scroll value, and a sprite of his covers screen x 120. The scroll stops at the stage's bound plus 248.Verified
Tile collisionEach frame of play, after the mover adds Felix's x speed and push to his x, the fixed bank's $D05F checks him against the screen's edges or the map. With his x's high byte past the bound's, or equal to it with a low byte of $DB or more outside a boss fight (and a few other cases), the game walks him right (the auto-walk) and tests the map. Short of that, an x less than 8 or at least 240 past $B7:$B9 sets his x speed to 1 px a frame back inward, and the map isn't read that frame. Otherwise, moving right, it reads the map 8 px ahead of him, normally at y + 1, y − 8, and y + 13 (moving left, 8 px behind), and if a tile there blocks, it subtracts that frame's x speed from his x again. Then $D191 moves x 1 px toward 7 or 8 px into its 16 px column.Code
The map that Felix's tile tests read is 32 columns of 16 px by 24 rows of 16 px in cartridge RAM at $6000-$63FF, a ring that repeats every 512 px of x. A tile's type is the low nibble of its entry in a table at ($CA). Types 1, 14, and 15 block both ways; type 4 blocks only moving left, and type 5 only moving right. A point above the map reads the top row, and one 384 px down or more reads the bottom row, where any nonzero type counts as 1.Code
Time limitOnce the clear flag is up, the game counts the timer down one unit a frame, and the stage index moves on 162 frames after the timer's count, so the wait after a clear is the timer's reading plus 162 frames. With the power level above 0, the power's remaining units ($03C0) are counted first, about 15 frames each.Verified
The timer is three digit tiles at $03A9-$03AB (tile $10 is 0). During play in a stage's main area ($0411 = 0) it drops by 1 every 60 frames, counted at $03AC, and at 000 without a clear the game sets $03FA, time over.Code

References

  1. ^TASVideos' current Felix the Cat (USA) publication, 1625, is Randil's 22:29.01 run from 2010, made in FCEU 0.98.28 and tagged "Takes intentional damage".WebTASVideos publication 1625
    How we know
    NES Felix the Cat by Randil in 22:29.01 … Tags: Takes intentional damage … Emulator Replay: FCEU 0.98.28
    publication page · archived copy ↗

    Checked against the evidence by its author, an AI model, 2026-10-25.

    Checked by a second AI model, 2026-10-25.

    In the claim ledger

  2. ^ abcHolding Right from a standstill in the first stage at power level 0, with $0616 below 3, Felix's x speed grows by a step read from $03B3, 48 (in 1/256 px) there, each frame up to the cap of 533, about 2.08 px a frame, which it reaches on the twelfth frame.Verified“Felix the Cat (USA)”revised
    How we know

    In the cartridge (“Felix the Cat (USA)”): fixed bank $D68E-$D701: add $03B3 to the x speed (or $03B4, when the x speed is below $0421:$0420); with $0616,X below 3, cap it at $0215; with 3 or more, at $01AA unless $03BF is 7. We don't reproduce the bytes.

    Measured by a script in MesenCE 2.2.1 (build 4b8a196), on Felix the Cat (USA) (SHA-1 b57b1c6e6933…). It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-25.

    Revised after a check by a second AI model, 2026-10-25.

    In the claim ledger

  3. ^ abFalling, with $0616 below 3 and $03B1 clear, Felix's y speed grows by 45 (in 1/256 px, down positive) each frame up to a cap of 1,536, 6 px a frame, as measured at the first stage's start.Verified“Felix the Cat (USA)”revised
    How we know

    In the cartridge (“Felix the Cat (USA)”): fixed bank $D702-$D72C: unless $03B1 is set, and with $0616,X below 3, call $8917 with A = $2D and $3C = 6; bank 12 $8917-$8936 (mapped at $8000): add A to $06F2:$06DC; if the result isn't negative and its high byte is at least $3C, set it to $3C:00. We don't reproduce the bytes.

    Measured by a script in MesenCE 2.2.1 (build 4b8a196), on Felix the Cat (USA) (SHA-1 b57b1c6e6933…). It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-25.

    Revised after a check by a second AI model, 2026-10-25.

    In the claim ledger

  4. ^ abcdThe playfield's scroll is $16:$14, which the raster split writes to $2005. In the Mesen probe, Felix's screen x is about x − scroll + 256: walking right, the camera settles with his x 136 px below the scroll value, and a sprite of his covers screen x 120. The scroll stops at the stage's bound plus 248.Verified“Felix the Cat (USA)”revised
    How we know

    In the cartridge (“Felix the Cat (USA)”): fixed bank $C1FC-$C224, the raster split: for split $2A, $16,X and $1A,X bit 0 pick the nametable, then $14,X and $18,X go to $2005 as the X and Y scroll. We don't reproduce the bytes.

    Measured by a script in MesenCE 2.2.1 (build 4b8a196), on Felix the Cat (USA) (SHA-1 b57b1c6e6933…). It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-25.

    Revised after a check by a second AI model, 2026-10-25.

    In the claim ledger

  5. ^ abcdEvery frame of play until the clear flag $03B7 is up, the game subtracts $32 and the stage's bound ($BB:$BD) from Felix's x and sets the flag when the result is at least $F0. A stage ends when Felix's x reaches its bound plus 290; in the first stage, whose bound is 3,848, that's x 4,138.Verified“Felix the Cat (USA)”
    How we know

    In the cartridge (“Felix the Cat (USA)”): fixed bank $F7FF-$F840: with $03B7 at 0, ($0658:$0642 - $32) - $BB:$BD to $09:$08; if $09:$08 - $F0 isn't negative, set $03B7 to 1 and start two sounds. We don't reproduce the bytes.

    Measured by a script in MesenCE 2.2.1 (build 4b8a196), on Felix the Cat (USA) (SHA-1 b57b1c6e6933…). It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-25.

    Checked by a second AI model, 2026-10-25.

    In the claim ledger

  6. ^The timer is three digit tiles at $03A9-$03AB (tile $10 is 0). During play in a stage's main area ($0411 = 0) it drops by 1 every 60 frames, counted at $03AC, and at 000 without a clear the game sets $03FA, time over.Code“Felix the Cat (USA)”
    How we know

    In the cartridge (“Felix the Cat (USA)”): fixed bank $F7B2-$F7FC: skip unless $0411 is 0; INC $03AC; below $3C stop; else reset it and take 1 from $03AB, borrowing from $03AA and $03A9; fixed bank $F934-$F947: at 000 with $03B7 clear and $0411 at 0, $03FA = 1. We don't reproduce the bytes.

    Checked against the evidence by its author, an AI model, 2026-10-25.

    Checked by a second AI model, 2026-10-25.

    In the claim ledger

  7. ^ abOnce the clear flag is up, the game counts the timer down one unit a frame, and the stage index moves on 162 frames after the timer's count, so the wait after a clear is the timer's reading plus 162 frames. With the power level above 0, the power's remaining units ($03C0) are counted first, about 15 frames each.Verified“Felix the Cat (USA)” · 1625M, replayed in FCEUX
    How we know

    In the cartridge (“Felix the Cat (USA)”): fixed bank $F707-$F761: with $03B7 set and $03C6 and $03C0 above 0, step $03C1 down; at 0, add to the score, reload it with 15, and take 1 from $03C0; otherwise add to the score and go on to the timer; fixed bank $F7B2-$F7FC: in play, count $03AC to $3C before the timer step; the tally enters at $F7C6, the step itself, which takes 1 from the three digits with borrows. We don't reproduce the bytes.

    the 22 clears

    Measured by a script in MesenCE 2.2.1 (build 4b8a196), on Felix the Cat (USA) (SHA-1 b57b1c6e6933…). It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-25.

    Checked by a second AI model, 2026-10-25.

    In the claim ledger

  8. ^$03C6 holds Felix's power level, 0 to 3 in the 1625M run. While it's above 0, $03C0 counts down one unit every 300 frames (150 odd frames, counted at $03C1); each change of level in the run that left it above 0 set $03C0 back to 10.Code“Felix the Cat (USA)” · 1625M, replayed in FCEUX
    How we know

    In the cartridge (“Felix the Cat (USA)”): fixed bank $F787-$F7B0: with $03C6 above 0, on odd frames ($37 bit 0), DEC $03C1; at 0, reload $96 and DEC $03C0, floored at 0. We don't reproduce the bytes.

    every change of $03C6

    Checked against the evidence by its author, an AI model, 2026-10-25.

    Checked by a second AI model, 2026-10-25.

    In the claim ledger

  9. ^A hit at power level 0 ($03C6) sets $03CD to $FF and Felix's y speed to $F7:00, upward; above 0, it sets $03CD to $B4 and takes 1 from the power level instead. Walking right from the start of the first stage at power 0, the Mesen probe sees Felix hit at x 281, the lives digits ($03A5-$03A6) lose 1, and the stage restart with Felix at x 48.Verified“Felix the Cat (USA)”revised
    How we know

    In the cartridge (“Felix the Cat (USA)”): fixed bank $F98E-$F9E9: take 1 from the two lives digits $03A5-$03A6 with a borrow; when they run out, set $33 to $18; fixed bank $CCE2-$CD23: if $03C5 is 4 or $03C6 is 0, $03CD = $FF, $0616,X = $0F, $06F2:$06DC = $F7:00; otherwise go to $CD24; fixed bank $CD24-$CD3B: $03CD = $B4, then DEC $03C6. We don't reproduce the bytes.

    Measured by a script in MesenCE 2.2.1 (build 4b8a196), on Felix the Cat (USA) (SHA-1 b57b1c6e6933…). It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-25.

    Revised after a check by a second AI model, 2026-10-25.

    In the claim ledger

  10. ^ abKAGE-008's rejected TASVideos submission 6487 plays Dragon Co.'s unlicensed Felix the Cat, a different game from Hudson's, and ends levels "if the player is close to go off-screen to the right". The judge, Maru, adds that the player only has to jump "as much as possible to get to the right of the screen" and reports a test file saving 855 frames in level 1.WebTASVideos submission 6487
    How we know
    This method implies exploiting a glitch where if the player is close to go off-screen to the right, it'll autofinish the level. … While both are based on 'Felix the Cat' cartoon, both versions are completely different each other.
    submission text · archived copy ↗
    For reference, you just need to jump as much as possible to get to the right of the screen. I have a test file that saves 855 frames in level 1.
    judge's note · archived copy ↗

    Checked against the evidence by its author, an AI model, 2026-10-25.

    Checked by a second AI model, 2026-10-25.

    In the claim ledger

  11. ^ abThe fixed bank's exit test reads Felix's x and the stage's bound, never the scroll. For example, walked a second into the first stage and placed 6 px below the scroll value, near the right edge of the screen, Felix doesn't clear the stage: the camera re-centers on him the next frame, and the clear flag stays at 0.Verified“Felix the Cat (USA)”revised
    How we know

    In the cartridge (“Felix the Cat (USA)”): fixed bank $F7FF-$F840: the exit test reads Felix's x and the stage's bound, not the scroll ($14, $16). We don't reproduce the bytes.

    Measured by a script in MesenCE 2.2.1 (build 4b8a196), on Felix the Cat (USA) (SHA-1 b57b1c6e6933…). It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-25.

    Revised after a check by a second AI model, 2026-10-25.

    In the claim ledger

  12. ^The exit test has no boss condition. Each of the seven boss rooms, stage indices 2, 5, 8, 11, 14, 16, and 18, has a bound of 0, so it ends at x 290, inside the room's wall (felix-the-cat/boss-wall). In Mesen, from power-on, with each boss stage cleared at its bound and $040C set to 3 where the stage's last door would set it, the game's room change loads the boss room; Felix placed there at x 290 with the boss up sets the clear flag the next frame, the fight's step $0411 still at 0, and the next stage loads.Verified“Felix the Cat (USA)” · 1625M, replayed in FCEUXrevised
    How we know

    In the cartridge (“Felix the Cat (USA)”): fixed bank $F7FF-$F840: the test reads Felix's x, $32, and the bound; nothing about a boss; fixed bank $F841-$F856: with $040C at 3, jump to $FA07; with $040C or $040D odd, to $F9F7; otherwise the hop at $F857; fixed bank $FA07-$FA1F: unless $040D is 8, set $0411 to $FF; add 1 to $0411, set $040D to 8, and load the room. We don't reproduce the bytes.

    each boss fight

    Measured by a script in MesenCE 2.2.1 (build 4b8a196), on Felix the Cat (USA) (SHA-1 b57b1c6e6933…). It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-25.

    Revised after a check by a second AI model, 2026-10-25.

    Revised after a check by a second AI model, 2026-10-25.

    In the claim ledger

  13. ^ abIn each of the seven boss rooms, the map's columns 14 to 31, x 224 to 511 of its 512 px, are solid from top to bottom, and so is column 0. The wall test (felix-the-cat/wall-test) stops Felix at x 215, where the point 8 px ahead of him reaches the wall. In Mesen, moving right at his top speed of 533/256 px a frame from x 215, he stays at 215 at every height, from above the map to below it.Verified“Felix the Cat (USA)” · 1625M, replayed in FCEUXrevised
    How we know

    In the cartridge (“Felix the Cat (USA)”): fixed bank $F251-$F290: the map lookup the wall test uses (felix-the-cat/collision-map); fixed bank $D0EB-$D15F: moving right, test the tile at x + 8; if it blocks, subtract the x speed from x. We don't reproduce the bytes.

    each boss fight

    Measured by a script in MesenCE 2.2.1 (build 4b8a196), on Felix the Cat (USA) (SHA-1 b57b1c6e6933…). It fails if the result disagrees with the claim.

    The numbers come from the run; its author, an AI model, checked the script measures what the claim says, 2026-10-25.

    Revised after a check by a second AI model, 2026-10-25.

    In the claim ledger

  14. ^Each frame of play, after the mover adds Felix's x speed and push to his x, the fixed bank's $D05F checks him against the screen's edges or the map. With his x's high byte past the bound's, or equal to it with a low byte of $DB or more outside a boss fight (and a few other cases), the game walks him right (the auto-walk) and tests the map. Short of that, an x less than 8 or at least 240 past $B7:$B9 sets his x speed to 1 px a frame back inward, and the map isn't read that frame. Otherwise, moving right, it reads the map 8 px ahead of him, normally at y + 1, y − 8, and y + 13 (moving left, 8 px behind), and if a tile there blocks, it subtracts that frame's x speed from his x again. Then $D191 moves x 1 px toward 7 or 8 px into its 16 px column.Code“Felix the Cat (USA)”revised
    How we know

    In the cartridge (“Felix the Cat (USA)”): fixed bank $D023-$D02B, in Felix's update: JSR $D87E, JSR $D90F (the mover), JSR $D05F; fixed bank $D049-$D0EA: past the bound's page, or in it at x low byte $DB or more unless $040D is 1, $040D + $0411 is 8 (a boss fight), or the stage index is $17, hold Right and accelerate (the auto-walk), then the map test; otherwise x - $B7:$B9 below 8 sets the x speed to $0100, at $F0 or more to $FF00, and returns; fixed bank $D0EB-$D15F: with the x speed at 0, test both sides; positive, the tile at x + 8 (mask $FD); negative, x - 8 (mask $FB); on a hit, subtract the x speed from the fraction and x, then $D191; fixed bank $D191-$D1BD: fraction to $80; x's low nibble 7 or 8 stays, below 7 gains 1, above 8 loses 1; fixed bank $D1BE-$D213: the tile at y + 1; then y - 8 unless $03C3 is 7; then y + 13 unless $03B0 is set; nonzero when one blocks. We don't reproduce the bytes.

    Checked against the evidence by its author, an AI model, 2026-10-25.

    Revised after a check by a second AI model, 2026-10-25.

    In the claim ledger

  15. ^The map that Felix's tile tests read is 32 columns of 16 px by 24 rows of 16 px in cartridge RAM at $6000-$63FF, a ring that repeats every 512 px of x. A tile's type is the low nibble of its entry in a table at ($CA). Types 1, 14, and 15 block both ways; type 4 blocks only moving left, and type 5 only moving right. A point above the map reads the top row, and one 384 px down or more reads the bottom row, where any nonzero type counts as 1.Code“Felix the Cat (USA)”
    How we know

    In the cartridge (“Felix the Cat (USA)”): fixed bank $F251-$F290: row from y ($07:$06): negative, row 0; below 256, y / 16; 256-383, 16 + (y - 256) / 16; else row 23 with a nonzero type as 1; address $6000 + (x high bit 0) * $200 + (x low / 16) * $20 + row; type = ($CA),tile AND $0F; fixed bank $CF81-$CF90, the blocking bits by type: 00 01 00 00 02 04 00 00 00 00 00 00 00 00 01 01; moving right tests them with $FD, left with $FB. We don't reproduce the bytes.

    Checked against the evidence by its author, an AI model, 2026-10-25.

    Checked by a second AI model, 2026-10-25.

    In the claim ledger

  16. ^Felix's push $041D comes from one routine, in PRG bank 12: a platform whose x swings with the frame counter sets it, while Felix rides, to the change in its x that frame, and the object pass clears it again afterward. The mover adds it to Felix's x, and the wall test never takes it back (felix-the-cat/wall-test). In FCEUX's replay of the 1625M movie the push was 1 px either way, and it came only in the main areas of stage indices 1, 2, 7, 9, 10, 12, 18, and 22, never in a boss room.Code“Felix the Cat (USA)” · 1625M, replayed in FCEUX
    How we know

    In the cartridge (“Felix the Cat (USA)”): bank 12 $9165-$91B2: save the x low byte in $01; x = the base $06F2:$06DC + ($37 / 2, mirrored by $37 bit 6) AND $1F; with $0708 bit 4 set and x moved, $041D = x - $01; fixed bank $E12B-$E155: update slots 6 to 21, then 0 to 5, then zero $0420-$0423 and $041D; fixed bank $D90F-$D93D: the mover adds $06C6 + $041D to Felix's x. We don't reproduce the bytes.

    every nonzero write to $041D

    Checked against the evidence by its author, an AI model, 2026-10-25.

    Checked by a second AI model, 2026-10-25.

    In the claim ledger

  17. ^A door in a boss room leads back into the same room. Pressing Down on a door tile sends Felix down it, and the door's kind picks the room change. In a boss room ($040D = 8), $CABF gives every door kind 2 except in stage index 22, and kind 2 is a hop back up where he went down. Only kind 3 moves the boss step on (felix-the-cat/boss-step), and $CB90 gives it only to a door in a main area, with the step at 0. Stage index 5's boss room has a door tile where Felix comes in. In FCEUX, Down on it during the fight sends him down and back up at x 48, with the fight still on.Code“Felix the Cat (USA)” · 1625M, replayed in FCEUXrevised
    How we know

    In the cartridge (“Felix the Cat (USA)”): fixed bank $CABF-$CAC8: with $040D at 8, go to $CB9F; fixed bank $CB9F-$CBA4: unless the stage index is $16, go to $CB82; fixed bank $CB82-$CB86: kind 2 into $066E, then $CB0C, which puts Felix in state $0D (going down); fixed bank $F841-$F856: kind 3 goes to $FA07; kind 2 with $040D at 8 is even, so the hop at $F857. We don't reproduce the bytes.

    frame 15184, the movie stopped there

    Checked against the evidence by its author, an AI model, 2026-10-25.

    Revised after a check by a second AI model, 2026-10-25.

    In the claim ledger

  18. ^$0411 is a boss stage's step: 0 in the fight, 1 once the boss is beaten, and 2 in the room after. Only two instructions add to it: $A20D in PRG bank 13, in the routine that runs when the boss is beaten, and $FA13, in the room change that $040C = 3 asks for. A door asks for it only in a main area (felix-the-cat/boss-room-door); in the boss room, bank 13's $A1B9 stores the 3. Every store to $0411 writes 0, or $FF that $FA13 lifts to 0 at once. In FCEUX's replay of the 1625M movie, in World 1, the step went from 0 to 1 at $A20D on frame 7,643; on frame 7,880 $A1B9 set $040C to 3, and $FA13 took the step to 2.Code“Felix the Cat (USA)” · 1625M, replayed in FCEUXrevised
    How we know

    In the cartridge (“Felix the Cat (USA)”): bank 13 $A201-$A20F (mapped at $A000): with $0776,X bit 3 set, play sound $10 and INC $0411; bank 13 $A1B2-$A1BC: $0616,X = 0, $040C = 3; fixed bank $FA07-$FA1F: unless $040D is 8, $0411 = $FF; INC $0411; $040D = 8. We don't reproduce the bytes.

    frames 7500-7960, writes to $0411 and $040C

    Checked against the evidence by its author, an AI model, 2026-10-25.

    Revised after a check by a second AI model, 2026-10-25.

    In the claim ledger

  19. ^In Randil's 1625M movie, replayed in FCEUX, the seven boss fights last 627 to 733 frames from the first frame of play in the boss room to the frame the boss is beaten ($0411 reaches 1), 4,982 frames in all.Our research1625M, replayed in FCEUX
    How we know
    each boss fight

    Measured by a script. It fails if the result disagrees with the claim.

    Checked against the evidence by its author, an AI model, 2026-10-25.

    Checked by a second AI model, 2026-10-25.

    In the claim ledger

  20. ^ abcdefghijklmnopqrstuvwxyz2728293031323334353637383940414243444546474849505152535455565758596061626364656667686970Replayed in FCEUX, Randil's 1625M movie passes 23 stages in 9 worlds of 3, 3, 3, 3, 3, 2, 2, 1, and 3 stages. For each stage the table gives the frame play starts (game mode $28 reaches 5) and the frame the clear flag goes up; the last stage runs to the movie's end at frame 81,074.Our research1625M, replayed in FCEUX · TASVideos publication 1625
    How we know
    the whole movie
    NES Felix the Cat by Randil in 22:29.01
    publication page · archived copy ↗

    Measured by a script. It fails if the result disagrees with the claim.

    Checked against the evidence by its author, an AI model, 2026-10-25.

    Checked by a second AI model, 2026-10-25.

    In the claim ledger

Sources

Code

Primary

  • Advance, Frame. 2026. “Felix the Cat (USA): TASVideos 1625M replayed in FCEUX 2.6.6.” · licence, all uses

Secondary