Claim set · data/claims/castlevania.yaml

Castlevania (USA) (Rev 1), read in the ROM and measured in Mesen

Game: Castlevania.

In Simon's standing state, the frame A goes down starts a jump, unless a block is over his head (ceiling-takeoff); the take-off code points his arc at a fixed table and copies the d-pad's Left and Right bits into his direction. castlevania/jump-start

About: Castlevania Jump

CodeCastlevania (USA) (Rev 1) · 0x19376-0x19391 — bank 6 $9366-$9381, the dispatch on Simon's state; state 0 (standing) runs $9380, state 1 (jumping) $9482Castlevania (USA) (Rev 1) · 0x19411-0x1944B — bank 6 $9401-$943B: A pressed this frame, a ceiling check, the table pointer from $9B8D, state 1, then direction = facing | (held Right/Left)Checked by claude, 2026-10-22 — disassembled bank 6 $9366-$943B in the pinned ROM; the probe's trace of a jump (state $046C 0 → 1 on the press frame) led to it; in probes/lab/castlevania-ceiling.mjs, Right and A at x 55 steps him to 56 on the press frame and jumps, with Y unchanged that frame

The press frame takes the standing state's walk step if Right or Left is held (takeoff-x), but no arc step; the jumping state takes its first step on the next frame (arc).

Cited by: Castlevania, Jump, Variable jump height

Simon's jump rises by a fixed table of per-frame steps, 5, 5, 3, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1, 1, 0, 1, 0, 0, 0, and 0 px, 36 px in all. castlevania/jump-table

About: Castlevania Jump

Value
[
 5,
 5,
 3,
 3,
 3,
 3,
 3,
 2,
 2,
 2,
 1,
 1,
 1,
 1,
 0,
 1,
 0,
 0,
 0,
 0
]
CodeCastlevania (USA) (Rev 1) · 0x19B9D-0x19BB4 — bank 6 $9B8D-$9BA4, the table's address, a $80 start marker, 20 signed steps ($FB = −5, up), and a $81 turn markerCastlevania (USA) (Rev 1) · 0x19B2E-0x19B9A — bank 6 $9B1E-$9B8A, the routine that adds one step to Simon's Y each frame and moves the table pointerChecked by claude, 2026-10-20 — read the table bytes and disassembled the routine in the pinned ROM; the probe's measured arc matches the steps frame for frame

Screen Y grows downward, so the bytes are negative; the statement gives the rises as positive pixels.

Cited by: Castlevania, Gravity, Jump, Variable jump height

At the table's turn marker the arc routine reverses and reads the same steps backward, negated, so Simon falls the way he rose. castlevania/table-turn

About: Castlevania Jump

CodeCastlevania (USA) (Rev 1) · 0x19B41-0x19B50 — bank 6 $9B31-$9B40: on $81, flip the direction flag ($0514), step the pointer back, and read againCastlevania (USA) (Rev 1) · 0x19B2E-0x19B9A — bank 6 $9B1E-$9B8A; with the flag set, each step is negated and the pointer moves backChecked by claude, 2026-10-20 — disassembled the arc routine in the pinned ROM

The turn frame steps back onto the last step, so each of the table's 4 closing zeros is read once each way, and Simon holds his 36 px top for 8 frames.

Cited by: Castlevania, Variable jump height

Once the reversed table runs out, the arc routine moves Simon down 8 px every frame until he lands, so a jump that ends below its take-off point falls at 8 px per frame. castlevania/table-end-fall

About: Castlevania Gravity

Value: 8 px/frame

VerifiedCastlevania (USA) (Rev 1) · 0x19B53-0x19B6E — bank 6 $9B43-$9B5E: on the $80 marker the step is $F8, negated while falling to +8, and the pointer stays putChecked by claude, 2026-10-22 — disassembled the arc routine in the pinned ROM; in the probe, a jump off a 64 px block built in the courtyard's collision map ends its table at take-off height and then falls 8 px a frame for 8 framesProbe: probes/jump-physics/castlevania-stage.mjs

Measured on ground built in the collision map; the courtyard itself is flat.

Cited by: Castlevania, Gravity

Measured in the game, Simon's standing jump is the same with A held 1, 2, 5, 10, 20, or 40 frames, 36 px high on frame 17 and back on the ground on frame 41. castlevania/apex-by-hold

About: Castlevania Variable jump height

Value
{
 "holds": [
  1,
  2,
  5,
  10,
  20,
  40
 ],
 "tap": {
  "apex": 36,
  "apexAt": 17,
  "airtime": 41
 },
 "full": {
  "apex": 36,
  "apexAt": 17,
  "airtime": 41
 }
}
VerifiedCastlevania (USA) (Rev 1) · 0x19B2E-0x19B9A — bank 6 $9B1E-$9B8A; the arc routine reads no buttonsCastlevania (USA) (Rev 1) · 0x194D5-0x194D9 — bank 6 $94C5-$94C9, where the jumping state runs the arc routine every frameChecked by claude, 2026-10-20 — ran the probe; it starts from power-on and jumps in the first courtyard with A held for each of the six lengths, and all six arcs are identical frame for frameProbe: probes/jump-physics/emu-jumps.mjs

Frame 1 is the press frame. Heights are Simon's Y ($3F) above the take-off row.

Cited by: Castlevania, Jump, Super Castlevania IV, Variable jump height

Measured frame by frame, Simon's standing jump follows the table exactly, from a motionless press frame to a landing 40 frames later. castlevania/arc

About: Castlevania Jump

Value
[
 0,
 0,
 5,
 10,
 13,
 16,
 19,
 22,
 25,
 27,
 29,
 31,
 32,
 33,
 34,
 35,
 35,
 36,
 36,
 36,
 36,
 36,
 36,
 36,
 36,
 36,
 35,
 35,
 34,
 33,
 32,
 31,
 29,
 27,
 25,
 22,
 19,
 16,
 13,
 10,
 5,
 0
]
VerifiedCastlevania (USA) (Rev 1) · 0x19B9D-0x19BB4 — the tableChecked by claude, 2026-10-20 — ran the probe; the heights after each frame from the press (frame 0 is before it) match the listProbe: probes/jump-physics/emu-jumps.mjs

Height above take-off after each frame, from frame 0 (before the press) to frame 41.

Cited by: Castlevania, Jump, Variable jump height

Measured in the game, a jump keeps the direction held at take-off, 1 px per frame that way or none, whatever the d-pad does in the air. castlevania/air-direction

About: Castlevania Air control

Value: 1 px/frame

VerifiedCastlevania (USA) (Rev 1) · 0x19411-0x1944B — bank 6 $9401-$943B; take-off copies the held Right/Left bits into Simon's directionCastlevania (USA) (Rev 1) · 0x19489-0x19491 — bank 6 $9479-$9481: horizontal speed $3D/$3E = 0/1, 1 px per frameCastlevania (USA) (Rev 1) · 0x1949E-0x194A6 — bank 6 $948E-$9496, where the jumping state sets that speed and moves Simon each frameChecked by claude, 2026-10-20 — ran the probe; a walking jump to the right moves 1 px every frame, a walking jump to the left keeps moving left after Right is pressed from frame 6, and a standing jump doesn't move after Right is pressed from frame 6Probe: probes/jump-physics/emu-jumps.mjs

The press frame already moves him, since the walking state runs before the jump starts.

Cited by: Air control, Castlevania, Variable jump height

Measured in the game, Simon walks 40 px in 40 frames, 1 px per frame. castlevania/walk-speed

About: Castlevania Running

Value: 1 px/frame

VerifiedCastlevania (USA) (Rev 1) · 0x198AA-0x1991A — bank 6 $989A-$990A, which adds the speed $3D/$3E to Simon's X in his directionCastlevania (USA) (Rev 1) · 0x193EE-0x193F3 — bank 6 $93DE-$93E3, the standing state's call to it (the jumping state makes the same call at $9491)Checked by claude, 2026-10-20 — ran the probe; 40 frames of Right from a standstill move him 40 pxProbe: probes/jump-physics/emu-jumps.mjs

Cited by: Castlevania

Simon has no acceleration; each frame on the ground his direction bits are set from the d-pad's held Left and Right, and the move routine shifts him by his speed bytes, 1 px/frame, in that direction or not at all. castlevania/walk-rule

About: Castlevania Running

Value
{
 "speed": 256
}
VerifiedCastlevania (USA) (Rev 1) · 0x193E9-0x193F3 — bank 6 $93D9-$93E3, the standing state: copy the held buttons ($F7) to $0584, then call the direction routine $9809 and the move routine $989ACastlevania (USA) (Rev 1) · 0x19825-0x1983E — bank 6 $9815-$982E: direction bits $3C = bit 2 kept | ($0584 AND 3), the held Right (1) and Left (2)Castlevania (USA) (Rev 1) · 0x198AA-0x1991A — bank 6 $989A-$990A: no direction bits, no move; else add or subtract $3E.$3D to his screen X or to the cameraCastlevania (USA) (Rev 1) · 0x1C9B5-0x1C9BC — bank 7 $C9A5-$C9AC, stage start sets $3D = 0 and $3E = 1Checked by claude, 2026-10-21 — disassembled the standing state and routines $9809 and $989A in the pinned ROM; in the probe, Right moves Simon 1 px on its first frame and every frame after, he stops on the first frame without it, and Left reverses him on its first frameProbe: probes/jump-physics/movement.mjs

$3E is whole pixels and $3D the fraction. Bit 2 of $3C chooses whether Simon moves on the screen ($038C, fraction $03A8) or the camera scrolls under him ($2D-$2F); his level X ($40/$41) is screen X plus camera either way. Stairs and moving platforms set other speeds (0.5 px/frame on stairs). Private notes: research/private/castlevania-movement.md.

Cited by: Castlevania, Running

While Left or Right is held, the crouching state, and the standing state on a frame that doesn't start a fall, a stair climb, a whip, a jump, or a crouch, set Simon's facing ($0450) from it, so he turns on the first frame, and crouching he can turn without moving. A frame that starts any of those keeps the facing he had. castlevania/facing

About: Castlevania Running

VerifiedCastlevania (USA) (Rev 1) · 0x19468-0x19472 — bank 6 $9458-$9462: held Left/Right shifted right one bit into $0450 (0 right, 1 left)Castlevania (USA) (Rev 1) · 0x19549-0x19594 — bank 6 $9539-$9584, the crouching state, which does the same at $9557-$955ECastlevania (USA) (Rev 1) · 0x19411-0x1944B — bank 6 $9401-$943B, the jump's take-off, which returns before $9458Castlevania (USA) (Rev 1) · 0x1945A-0x19467 — bank 6 $944A-$9457, the crouch's start, which returns through $9A69 before $9458Castlevania (USA) (Rev 1) · 0x193FD-0x19410 — bank 6 $93ED-$9400: Up or Down at a stair ($9C10) starts the climb and returns at $9400Castlevania (USA) (Rev 1) · 0x1944C-0x19459 — bank 6 $943C-$9449: a whip started ($9A2A, carry set) moves the state on and returnsCastlevania (USA) (Rev 1) · 0x193D5-0x193E8 — bank 6 $93C5-$93D8, the fall entry, which returns before the moveChecked by claude, 2026-10-21 — disassembled both states in the pinned ROM; in the probe `$0450` flips on the first frame of Left, walking and crouched. In probes/jump-physics/castlevania-stage.mjs, facing left, Right pressed with A or with Down keeps him facing left on that frame, and a jump keeps itProbe: probes/jump-physics/movement.mjs

The jump keeps the take-off direction instead (air-direction). The jump and crouch frames are measured; the fall, stair, and whip frames are read in the code only.

Cited by: Running

Down on the ground puts Simon in the crouching state 4 px lower, where the d-pad no longer moves him; letting go stands him back up, and that frame he doesn't move either. castlevania/crouch

About: Castlevania Running

VerifiedCastlevania (USA) (Rev 1) · 0x1945A-0x19467 — bank 6 $944A-$9457: Down held, state 3, then Y += 4 ($9A69)Castlevania (USA) (Rev 1) · 0x19549-0x19594 — bank 6 $9539-$9584: the crouching state writes $04 (Down alone) to $0584 before the move, so no direction bits; Down let go: Y −= 4 and state 0 ($9578)Checked by claude, 2026-10-21 — disassembled the standing state's Down branch and the crouching state in the pinned ROM; in the probe, Down with Right moves 1 px on its press frame (the standing state moves before it checks Down), Y goes 176 → 180, nothing moves while crouched, and the frame Down is let go moves 0Probe: probes/jump-physics/movement.mjs

The press frame still walks, since the standing state moves Simon before it reads Down.

Cited by: Running

The standing state moves Simon before it checks A, so the press frame walks at 1 px/frame; the take-off then fixes the jump's direction from the d-pad held on that frame, and the jumping state moves him 1 px/frame that way or not at all. castlevania/takeoff-x

About: Castlevania Jump

VerifiedCastlevania (USA) (Rev 1) · 0x193E9-0x193F3 — bank 6 $93D9-$93E3, the move before the jump checkCastlevania (USA) (Rev 1) · 0x19411-0x1944B — bank 6 $9401-$943B: the take-off writes held Left/Right into $3CCastlevania (USA) (Rev 1) · 0x19489-0x19491 — bank 6 $9479-$9481, the jumping state's speed, 1 px/frameChecked by claude, 2026-10-21 — disassembled the standing and jumping states in the pinned ROM; in the probe a walking jump moves 1 px on the press frame and every jumping frame, with or without the d-pad after the pressProbe: probes/jump-physics/movement.mjs

The jumping state never rewrites $0584, so the direction routine keeps reading the buttons held at take-off.

Cited by: Air control

A jump lands during the jumping state's frame, after that frame's move in the take-off direction; from the next frame the standing state takes the d-pad again, so Simon stops at once or walks at 1 px/frame. castlevania/landing

About: Castlevania Jump

VerifiedCastlevania (USA) (Rev 1) · 0x194EA-0x1950F — bank 6 $94DA-$94FF: on the floor, Y snapped to a multiple of 8 ($9A62), state 0 (or the standing whip if he was whipping)Checked by claude, 2026-10-21 — disassembled the jumping state's landing in the pinned ROM; in the probe, a jump to the right landed with the d-pad released moves 1 px on the landing frame and 0 after, and Right pressed only on the landing frame of a standing jump moves him from the next frameProbe: probes/jump-physics/movement.mjs

Nothing carries over horizontally; Simon has no momentum to keep.

Walking off a ledge puts Simon in a falling state that moves him on in his facing direction at 1 px/frame and down 8 px/frame; landing after 8 or more falling frames drops him into a crouch for 16 frames. castlevania/ledge-fall

About: Castlevania Jump

Value
{
 "dx": 1,
 "dy": 8,
 "hardAfter": 8,
 "crouchFrames": 16
}
VerifiedCastlevania (USA) (Rev 1) · 0x193D5-0x193E8 — bank 6 $93C5-$93D8: no floor under the standing state: fall counter $0143 = 0, $0584 = facing + 1 (the direction bits), state 7Castlevania (USA) (Rev 1) · 0x19767-0x197B6 — bank 6 $9757-$97A6: each frame count up, land on a floor, else move with $9809/$989A and Y += 8; landing with the count at 8 or more sets Y += 4, state 9, and a counter of 16Castlevania (USA) (Rev 1) · 0x19802-0x19818 — bank 6 $97F2-$9808: state 9 forces Down into the held buttons and runs the crouching state until the counter goes negative, then stands him upChecked by claude, 2026-10-22 — disassembled the fall entry, the falling state, and the landing crouch in the pinned ROM; in the probe, with ledges built in the first courtyard's collision map, Simon falls 1 px forward and 8 px down a frame, a 64 px fall lands with the counter at 9 in the crouch (Y 4 px lower) and he walks again 18 frames later, and a 32 px fall lands with it at 5 and walks on at onceProbe: probes/jump-physics/castlevania-stage.mjs

The landing frame counts as a falling frame. The 18 frames are the landing frame, 16 crouching frames, and a frame standing up. The jump's own fall (table-end-fall) is a different state.

Simon's floor is tested at x−4 and x+4, 16 px below his Y; walls at x+8 or x−8 at five heights from 9 px above to 15 px below it; and a jump needs clear space 19 px above at x−7, x, and x+7. castlevania/terrain-points

About: Castlevania Hitbox

Value
{
 "floor": {
  "x": [
   -4,
   4
  ],
  "y": 16
 },
 "wall": {
  "x": 8,
  "y": [
   -9,
   -4,
   0,
   8,
   15
  ],
  "yFalling": [
   -9,
   -4,
   0,
   8,
   16
  ]
 },
 "ceiling": {
  "x": [
   -7,
   0,
   7
  ],
  "y": -19
 }
}
CodeCastlevania (USA) (Rev 1) · 0x19E80-0x19EDA — bank 6 $9E70-$9ECA: the floor test at (x−4, y+16), then (x+4, y+16)Castlevania (USA) (Rev 1) · 0x19EDE-0x19F89 — bank 6 $9ECE-$9F79: the wall test at x+8 moving right or x−8 moving left, at y plus each of the table's $0F, $08, $00, $F7, $FC (or $10 for $0F while a jump falls)Castlevania (USA) (Rev 1) · 0x199A8-0x199FD — bank 6 $9998-$99ED: the take-off's ceiling test at y−19, x−7, x, and x+7Checked by claude, 2026-10-21 — disassembled the three routines and the offset table in the pinned ROM

X is $40/$41 and Y is $3F (screen Y, growing downward), both Simon's center; he stands with Y 16 px above the floor tile's top. Crouching moves Y down 4 px. His box against enemies is a separate routine, not read yet.

Cited by: Hitbox

Each frame, the standing and crouching states test Simon's floor points before they move him or read A; with no ground under either point, they put him in the falling state and end the frame there, so he doesn't move and A isn't read. The frame whose step carries his second floor point past an edge still reads A after the step, so a press on that frame jumps. castlevania/walk-off-order

About: Castlevania Coyote time

VerifiedCastlevania (USA) (Rev 1) · 0x193CB-0x19415 — bank 6 $93BB-$9405, the standing state: the floor test $9E70; no floor: fall entry ($93C5) and return; else the move ($9809, $989A), then A pressed this frame ($9401)Castlevania (USA) (Rev 1) · 0x19549-0x19559 — bank 6 $9539-$9549, the crouching state (and the landing crouch) runs the same floor test first and jumps to the fall entryChecked by claude, 2026-10-22 — disassembled the standing and crouching states in the pinned ROM; in the probe, walking right toward a pit cut into the courtyard's collision map at x 96, frame 50 takes him to x 100, frame 51 puts him in the falling state (7) without moving him, A on frame 50 jumps, and A on frame 51 or 52 doesn'tProbe: probes/jump-physics/castlevania-stage.mjs

Walking right off an edge at x = r, the floor points x−4 and x+4 have no ground once x reaches r + 4; the next frame starts the fall. Before the floor test the state also checks the moving platforms ($AC70), which aren't modeled.

Cited by: Coyote time

Simon has no coyote time. The falling state reads no buttons: A after he walks off doesn't jump, B doesn't whip, and the d-pad doesn't steer, since the direction routine reads the direction the fall's entry wrote from his facing. castlevania/no-coyote-time

About: Castlevania Coyote time

VerifiedCastlevania (USA) (Rev 1) · 0x19767-0x1978A — bank 6 $9757-$977A, the falling state: count, floor test, the direction and move routines, Y += 8; no read of the buttons ($F5, $F7)Castlevania (USA) (Rev 1) · 0x193D5-0x193E8 — bank 6 $93C5-$93D8, the fall entry: $0584 = facing + 1 (1 right, 2 left)Castlevania (USA) (Rev 1) · 0x19819-0x1983D — bank 6 $9809-$982D, the direction routine: direction bits from $0584, not the padChecked by claude, 2026-10-22 — disassembled the fall entry, the falling state, and the direction routine in the pinned ROM; in the probe, falling into a pit cut into the courtyard's collision map, A, B, or Left held while falling right leaves him in the falling state, moving right 1 px a frame and facing rightProbe: probes/jump-physics/castlevania-stage.mjs

The frame he walks off is lost too, since the standing state ends before its A check (walk-off-order).

Cited by: Castlevania, Coyote time

Above screen Y 208 and off moving platforms, each falling frame tests the floor at Simon's position before he moves: with ground under either floor point he lands that frame without moving, his Y snapped up to a multiple of 16; otherwise he moves 1 px and drops 8 px. From Y 208 on, the floor test finds no ground. castlevania/fall-order

About: Castlevania Gravity

VerifiedCastlevania (USA) (Rev 1) · 0x19767-0x1978A — bank 6 $9757-$977A: floor test ($9E70) first; the move and Y += 8 only without a floorCastlevania (USA) (Rev 1) · 0x19792-0x197B6 — bank 6 $9782-$97A6: Y AND $F0 unless the stage is $0A, then the landing-crouch checkCastlevania (USA) (Rev 1) · 0x19E80-0x19E85 — bank 6 $9E70-$9E75: Y at $D0 (208) or more skips the floor test and reports no groundCastlevania (USA) (Rev 1) · 0x1976F-0x19773 — bank 6 $975F-$9763, the moving-platform check ($AC70), which lands him tooChecked by claude, 2026-10-22 — disassembled the falling state and its landing in the pinned ROM; in the probe, the movement lab's model, which tests the floor before the move, matches every traced frame of 32 px and 64 px falls onto ground built in the courtyard's collision mapProbe: probes/jump-physics/castlevania-stage.mjs

Standing Y is a multiple of 16 and floors sit on 16 px rows, so an 8 px fall from a standing start meets a floor exactly; the snap doesn't move him. Read in the code only (T3): in stage $0A the landing doesn't snap Y to 16.

A wall stops Simon without pushing him out. Before each move, in the standing, jumping, and falling states, the direction routine tests the wall points on the side he's moving toward; if any is in solid ground it clears his direction bits, so he doesn't move that frame and nothing else changes. A jump keeps rising and falling, and moves on again once the points are clear. castlevania/wall-stop

About: Castlevania Hitbox

VerifiedCastlevania (USA) (Rev 1) · 0x1984E-0x19852 — bank 6 $983E-$9842, the direction routine calls the wall test ($9ECE) and on a hit branches to $97EBCastlevania (USA) (Rev 1) · 0x197FB-0x19801 — bank 6 $97EB-$97F1, which clears the two direction bits of $3CCastlevania (USA) (Rev 1) · 0x1949E-0x194E9 — bank 6 $948E-$94D9, the jumping state runs the direction and move routines before the arc stepCastlevania (USA) (Rev 1) · 0x193E9-0x193F3 — bank 6 $93D9-$93E3, the standing state's calls to the direction and move routinesCastlevania (USA) (Rev 1) · 0x19774-0x1977C — bank 6 $9764-$976C, the falling state's calls, after its floor testChecked by claude, 2026-10-22 — disassembled the direction routine, its wall branch, and the jumping state in the pinned ROM; in the probe, with blocks built in the courtyard's collision map, walking right into one whose left edge is x 96 stops him at x 88, walking left into one ending at x 24 stops him at x 31, a jump from against a block rises in place until his wall points clear its top, then moves on, and a fall into the side of a block whose left edge is x 112 stops at x 104 while he keeps dropping 8 px a frameProbe: probes/jump-physics/castlevania-stage.mjs

The direction bits are rebuilt each frame, from the pad on the ground or from the take-off or fall direction in the air. The wall test is skipped in states 4 and 6.

From the turn of its table on, the jumping state tests the floor after each frame's step, so a jump lands on any top its floor points meet on the way down, above or below take-off height; the landing snaps Y up to a multiple of 16. Each 8 px frame past the table's end counts in the fall counter the take-off zeroed, and landing with it at 8 or more starts the 16-frame landing crouch. This holds outside stage $0A and when he isn't whipping as he lands (see notes). castlevania/jump-landing

About: Castlevania Jump

VerifiedCastlevania (USA) (Rev 1) · 0x1949E-0x194E9 — bank 6 $948E-$94D9: the arc step, then the floor test only with the moving-down flag ($0514) setCastlevania (USA) (Rev 1) · 0x194EA-0x1950F — bank 6 $94DA-$94FF: Y AND $F8; whipping ($94DD-$94E4): state 2; else state 0 and on to $9782Castlevania (USA) (Rev 1) · 0x19792-0x197B6 — bank 6 $9782-$97A6: Y AND $F0 unless stage $0A; fall counter $0143 at 8 or more: Y += 4, state 9, 16 framesCastlevania (USA) (Rev 1) · 0x19B53-0x19B57 — bank 6 $9B43-$9B47, the arc routine's end marker gives an 8 px step and counts it in $0143Castlevania (USA) (Rev 1) · 0x19428-0x19430 — bank 6 $9418-$9420, the take-off zeroes the moving-down flag and $0143Checked by claude, 2026-10-22 — disassembled the jumping state, its landing, the arc routine's end marker, and the take-off in the pinned ROM; in the probe, with blocks built in the courtyard's collision map, jumps land on blocks 32 and 64 px above take-off, and a jump off the 64 px block lands on the floor with the counter at 8, in the crouchProbe: probes/jump-physics/castlevania-stage.mjs

The moving-down flag flips on the turn frame's step, so the floor test runs from that frame. The rises are at most 5 px a frame and the fall 8, so the snap puts his feet on the top he met. Read in the code only (T3), not measured: in stage $0A the landing snaps Y to a multiple of 8 but not 16, and a landing while whipping goes to the standing whip, with neither the 16 px snap nor the landing crouch.

Simon dies when his Y reaches 224 ($E0) in the falling state, before its 8 px drop, or 224 to 239 in the jumping state, at the start of its frame. castlevania/pit-death

About: Castlevania Gravity

Value: 224 px (screen Y)

CodeCastlevania (USA) (Rev 1) · 0x19492-0x1949D — bank 6 $9482-$948D: Y − $E0 below $10 kills himCastlevania (USA) (Rev 1) · 0x1977F-0x19784 — bank 6 $976F-$9774: Y at $E0 or more kills himChecked by claude, 2026-10-22 — disassembled both checks in the pinned ROM

Screen Y grows downward; standing on the first courtyard's floor, Y is 176.

Simon can't jump from under a block on his head. On the frame A goes down, after that frame's walk step, the standing state tests three points 19 px above his center, at x−7, x, and x+7; if any is solid (below screen Y 48), the press is dropped. That frame then runs as one with neither A nor Down: he turns to the d-pad but doesn't crouch or whip, and holding A out from under the block doesn't jump, since only a new press does. castlevania/ceiling-takeoff

About: Castlevania Jump

VerifiedCastlevania (USA) (Rev 1) · 0x19417-0x1941B — bank 6 $9407-$940B: the take-off calls the ceiling test ($9998) and, with carry clear, branches to $9458Castlevania (USA) (Rev 1) · 0x199A8-0x199FF — bank 6 $9998-$99EF: the collision lookup at (x−7, y−19), (x, y−19), (x+7, y−19); any solid cell returns carry clearCastlevania (USA) (Rev 1) · 0x19468-0x19488 — bank 6 $9458-$9478: the end of the standing state, past the B check that sets state 2, the whip ($943C), and the Down check ($944A): facing from the direction bits, the walk animationChecked by claude, 2026-10-22 — disassembled the take-off, the ceiling test, and the branch target in the pinned ROM; in the probe, with blocks written into the courtyard's collision map, A under a block whose underside is 32 px above his feet never jumps, alone or with Right, Left, Down, or B; a block under only x−7, x, or x+7 stops it and one a pixel past them doesn't; Right and A at x 55 steps to 56 and jumps, at x 56 steps to 57 and doesn't; and the movement lab's model matches every frame of all 19 casesProbe: probes/lab/castlevania-ceiling.mjs

Y is his center, 16 px above the floor's top, so the points sit 35 px above that top. The game's collision cells are 8 px squares: a block whose underside is 32 px above his feet fills the row the points read, and one 40 px up doesn't. The collision lookup ($F9A0) finds nothing above screen Y 48, so near the top of the screen nothing stops the take-off.

Once Simon is in the air, no ceiling is tested: a block over his head doesn't cut a jump short. The jumping state calls no ceiling test; it runs the direction and move routines, the arc step, and from the turn on the floor test. His head rises into the block on the same arc as in the open, and the block stops him moving sideways only where his wall points meet it. castlevania/ceiling-rise

About: Castlevania Jump

VerifiedCastlevania (USA) (Rev 1) · 0x1949E-0x194E9 — bank 6 $948E-$94D9: the direction and wall test ($9809), the move ($989A), the arc step ($9B1E), then the floor test only once moving downCastlevania (USA) (Rev 1) · 0x19B2E-0x19B9A — bank 6 $9B1E-$9B8A, the arc step: adds the table's step to Y; no collision callChecked by claude, 2026-10-22 — disassembled the jumping state and the arc step in the pinned ROM; in the probe, under a block 48 px above his feet a standing jump rises the full table to Y 140, and jumping right under it the rise is the table's step for step while his x stops at 58 as his wall points enter the block, then moves on as they leave it on the way down; the movement lab's model matches every frameProbe: probes/lab/castlevania-ceiling.mjs

It follows that on a 16 px grid a jump from below can't land inside a block: a block low enough for his feet to reach at the apex (36 px) is low enough for the take-off test, and from the side his wall points stop him before his feet get under it.

Under a block on his head, a hit doesn't knock Simon back. Outside state 4, whose hit sets only $47 and $5B, the routine that starts the knockback (state 5, a short arc away from what hit him) first runs the take-off's ceiling test; with a block there it puts him straight into the 16-frame crouch (state 9) that also ends a knockback's landing. castlevania/hurt-ceiling

About: Castlevania Knockback

CodeCastlevania (USA) (Rev 1) · 0x196D1-0x1970A — bank 6 $96C1-$96FA: in state 4, $47 = 16 and $5B = 48, then return; else the ceiling test ($9998); clear: the arc table at $9BA5, state 5, direction away from the object; blocked: to $96ADCastlevania (USA) (Rev 1) · 0x196B1-0x196D0 — bank 6 $96A1-$96C0: the knockback's landing: at 0 HP he dies; else $96AD sets state 9 with its counter ($054C) at 16Checked by claude, 2026-10-22 — disassembled the knockback's start and landing in the pinned ROM; not measured

Read in the code only (T3). State 4 isn't identified yet; its hit has no knockback either way. $96AD also sets $5B to 48, which reads as an invincibility timer but isn't confirmed.