Difference between revisions of "Castlevania III:RAM map"

From Data Crystal
Jump to navigation Jump to search
(Added audio engine mappings for AkuDen. Some bytes still missing or incorrect, in all honesty. Better than nothing!)
(Sypha freeze and parallax fog variables)
(7 intermediate revisions by the same user not shown)
Line 4: Line 4:
 
  $0017              Repeat Counter
 
  $0017              Repeat Counter
 
  $0018              System State
 
  $0018              System State
                             00 = Title; 02 = New Game; 03 = In-game Transition; 04 = In-Game;
+
                             ''00 = Title; 02 = New Game; 03 = In-game Transition; 04 = In-Game;''
                             05 = Game Over Transition; 06 = Game Over; 07 = Stage Select Debug;
+
                             ''05 = Game Over Transition; 06 = Game Over; 07 = Stage Select Debug;''
                             08 = Map Screen; 09 = Prayer Scene; 0a = Name Entry; 0b = Password Entry;
+
                             ''08 = Map Screen; 09 = Prayer Scene; 0a = Name Entry; 0b = Password Entry;''
                             0c = Epilogue; 0d = Credit Roll; 0e = Respawn; 0f = Sound Test Debug
+
                             ''0c = Epilogue; 0d = Credit Roll; 0e = Respawn; 0f = Sound Test Debug''
 
  $0019              System Substate
 
  $0019              System Substate
 
  $001A              Step Counter
 
  $001A              Step Counter
 
  $001C              Blackout Delay
 
  $001C              Blackout Delay
 +
$001D              X Register Backup
 
  $001F              Randomizer
 
  $001F              Randomizer
 +
$0020              OAM Batch
 +
$0021              Current PROM Bank
 +
$0022              Previous PROM Bank
 +
$0023              PROM Bank Backup ''(used by some functions)''
 +
$0024              Bank Changed ''(for debugging probably)''
 +
$0025              Nametable Mapping
 
  $0026      #02    Controller Buttons Pressed
 
  $0026      #02    Controller Buttons Pressed
                             01 = right; 02 = left; 04 = down; 08 = up;
+
                             ''01 = right; 02 = left; 04 = down; 08 = up;
                             10 = start; 20 = select; 40 = B; 80 = A
+
                             ''10 = start; 20 = select; 40 = B; 80 = A''
 
  $0028      #02    Controller Buttons Held
 
  $0028      #02    Controller Buttons Held
  $002A              Game State
+
  $002A              Game State ''(set $006B to 00 before changing)''
  $002B              User Paused (toggled by Start button)
+
                            ''00 = initialize room; 01 = initialize nametables; 02 = load horizontal room;
 +
                            ''03 = horizontal gameplay; 04 = load vertical room; 05 = vertical gameplay;
 +
                            ''06 = stair transition start; 07 = stair transition fade; 08 = door transition;
 +
                            ''09 = initialize fog; 0a = fog parallax; 0b = horizontal partner swap;
 +
                            ''0c = vertical partner swap; 0d/0e = <CUT CONTENT>; 0f = detect automatic stairs;
 +
                            ''10 = automatic stair transition; 11 = tally score; 12 = <UNUSED>;
 +
                            ''13 = flee Aquarius; 14 = initialize flooding; 15 = load flood room;
 +
                            ''16 = flood room gameplay; 17 = map transition; 18 = autowalk to door;
 +
                            ''19 = powering up; 1a = freeze water; 1b = thaw ice; 1c = Bone King escape;
 +
                            ''1d = Aquarius ruptured; 1e = initialize map transition; 1f = map transition exit
 +
  $002B              User Paused ''(toggled by Start button)
 
  $002C              Boss Defeated
 
  $002C              Boss Defeated
 
  $002E              Checkpoint
 
  $002E              Checkpoint
Line 28: Line 45:
 
  $0036      #03    Score   
 
  $0036      #03    Score   
 
  $003A              Partner   
 
  $003A              Partner   
                             00 = Trevor; 01 = Syfa; 02 = Grant; 03 = Alucard; ff = None
+
                             ''00 = Trevor; 01 = Syfa; 02 = Grant; 03 = Alucard; ff = None
 
  $003B              Partner Active  
 
  $003B              Partner Active  
 
  $003C              Player's Health
 
  $003C              Player's Health
                             40 = full
+
                             ''40 = full
 
  $003D              Boss Health  
 
  $003D              Boss Health  
  $003E              Score Target (for extra life)
+
  $003E              Score Target ''(for extra life)
  $003F              Default Drawing State (write to $006D)
+
  $003F              Default Drawing State ''(write to $006D)
 +
$0040              Scanline IRQ
 +
$0041              Scanline Target
 +
$0043              Scanline Next Target
 +
$0044      #02    Draw State Address
 
  $0046      #08    CHR Banks
 
  $0046      #08    CHR Banks
  $004E              Hard Mode CHR Bank (overwrites $0049)
+
  $004E              Hard Mode CHR Bank ''(overwrites $0049)
  $0056      #02    View Position (little endian)  
+
$0050      #02    Tile Assembly Starting Address
 +
$0052      #02    Tile Assembly Left Address
 +
$0054      #02    Tile Assembly Right Address
 +
  $0056      #02    View Position ''(little endian)  
 
  $0058              View Subpixel Position
 
  $0058              View Subpixel Position
 
  $0059              Left Spawn Area
 
  $0059              Left Spawn Area
 
  $005A              Right Spawn Area
 
  $005A              Right Spawn Area
  $005C              Tile Assembly Row Iterator
+
$005B              Tile Assembly Count Left
 +
  $005C              Tile Assembly Count Right
 
  $005D      #02    Tile Assembly Pointer
 
  $005D      #02    Tile Assembly Pointer
 
  $005F      #02    Pallet Map Pointer
 
  $005F      #02    Pallet Map Pointer
Line 48: Line 73:
 
  $0064              Transition Timer
 
  $0064              Transition Timer
 
  $0065              Scroll Direction
 
  $0065              Scroll Direction
                             00 = left; 01 = right; 02 = unchanged
+
                             ''00 = left; 01 = right; 02 = unchanged
 
  $0066              View Refreshed Position
 
  $0066              View Refreshed Position
 
  $0067              Update View
 
  $0067              Update View
 
  $0068              Room Orientation
 
  $0068              Room Orientation
                             00 = horizontal; 80 or 81 = vertical; 82 = scroll up;
+
                             ''00 = horizontal; 80 or 81 = vertical; 82 = scroll up;
                             83 = scroll down; 84 = collapse up; 85 = collapse down
+
                             ''83 = scroll down; 84 = collapse up; 85 = collapse down
 
  $0069      #02    Stair Map Address
 
  $0069      #02    Stair Map Address
  $006B              Player Animation State (for transitions)
+
  $006B              Game Substate
 
                     and menu selections
 
                     and menu selections
  $006C              Current Instance (saves X register)
+
  $006C              Current Instance ''(saves X register)
 
  $006D              Drawing State
 
  $006D              Drawing State
 
  $006E              View Speed
 
  $006E              View Speed
Line 63: Line 88:
 
  $0071              Room Size
 
  $0071              Room Size
 
  $0072              CHR Write Mode
 
  $0072              CHR Write Mode
                             00 or 03 = all CHR banks; 01 = status bar banks;  02 = clear NPC banks
+
                             ''00 or 03 = all CHR banks; 01 = status bar banks;  02 = clear NPC banks
 
  $0073              Previous Room Orientation
 
  $0073              Previous Room Orientation
 
  $0074              Music Loaded
 
  $0074              Music Loaded
  $0075              Transition Nametable (nametable to use after door closes)
+
  $0075              Transition Nametable ''(nametable to use after door closes)''
 
  $0076              Horizontal Spawner Block
 
  $0076              Horizontal Spawner Block
 
  $0077              First Spawner Block
 
  $0077              First Spawner Block
Line 74: Line 99:
 
  $007B              Spawner Count
 
  $007B              Spawner Count
 
  $007D              Room Type
 
  $007D              Room Type
                             10 = Stormclouds; 20 = Autowalk; 30 = River; 40 = Clockwork;
+
                             ''10 = Stormclouds; 20 = Autowalk; 30 = River; 40 = Clockwork;
                             50 and 60 = Watery Grave; 70 = Flood Zone; 80 = Collapsing Bridge
+
                             ''50 and 60 = Watery Grave; 70 = Flood Zone; 80 = Collapsing Bridge
                             Note: lower 4 bits alter behavior
+
                             ''Note: lower 4 bits alter behavior
 
  $007E      #02    Time
 
  $007E      #02    Time
  $0080              Wounded Timer (invincibility frames)
+
  $0080              Wounded Timer ''(invincibility frames)
  $0081              Damage Received
+
  $0081              Damage Received/Effect on Player
 
  $0082              PC Height
 
  $0082              PC Height
                             00 = Trevor standing; 01 = Syfa standing; 02 = Grant standing; 03 = Alucard standing;
+
                             ''00 = Trevor standing; 01 = Syfa standing; 02 = Grant standing; 03 = Alucard standing;
                             04 = Trevor duck; 05 = Syfa duck; 06 = Grant duck; 07 = Alucard duck; 08 = Bat
+
                             ''04 = Trevor duck; 05 = Syfa duck; 06 = Grant duck; 07 = Alucard duck; 08 = Bat
 
  $0084              Hearts
 
  $0084              Hearts
 
  $0085              Trevor Subweapon
 
  $0085              Trevor Subweapon
                             00 = none; 01 = axe; 02 = boomerang; 03 = knife/book; 04 = holy water; 05 = fireball;  
+
                             ''00 = none; 01 = axe; 02 = boomerang; 03 = knife/book; 04 = holy water; 05 = fireball;  
                             06 = freeze; 07 = orb; 08 = axe; 09 = boomerang; 0a = knife/book ;0b = clock
+
                             ''06 = freeze; 07 = orb; 08 = axe; 09 = boomerang; 0a = knife/book ;0b = clock
 
  $0086              Partner Subweapon
 
  $0086              Partner Subweapon
  $0087              Trevor Subweapon Multiplier  00 = none; 01 = [II]; 02 = [III]
+
  $0087              Trevor Subweapon Multiplier   
 +
                            ''00 = none; 01 = [II]; 02 = [III]
 
  $0088              Partner Subweapon Multiplier
 
  $0088              Partner Subweapon Multiplier
 +
$0089              Scanline Start
 
  $008B              Conveyance
 
  $008B              Conveyance
                             01 = Elevator/Frozen enemy; 02 = Scroll-locked right; 05 = Teeter-totter;
+
                             ''01 = Elevator/Frozen enemy; 02 = Scroll-locked right; 05 = Teeter-totter;
                             06 = Cogwheel; 07 = Mud; 08 = Waterfall; 09 = Waterfall w/current;
+
                             ''06 = Cogwheel; 07 = Mud; 08 = Waterfall; 09 = Waterfall w/current;
                             0a = Conveyor left; 0b = Conveyor right; 0d = Petrified; 0e = Auto-walk
+
                             ''0a = Conveyor left; 0b = Conveyor right; 0d = Petrified; 0e = Auto-walk
 
  $008C              Whip Spark Timer
 
  $008C              Whip Spark Timer
 
  $008D              Room Initialized
 
  $008D              Room Initialized
 
  $008E              Trevor Weapon Level   
 
  $008E              Trevor Weapon Level   
                             00 = short; 01 = medium; 02 = long
+
                             ''00 = short; 01 = medium; 02 = long
 
  $008F              Partner Weapon Level
 
  $008F              Partner Weapon Level
                             00 = one orb; 01 = two orbs; 03 = three orbs
+
                             ''00 = one orb; 01 = two orbs; 03 = three orbs
 
  $0090              Knockback Direction
 
  $0090              Knockback Direction
                             00 = left; 01 = right
+
                             ''00 = left; 01 = right
  $0091              Conveyor (see $008B)
+
  $0091              Conveyor ''(see $008B)
 
  $0093              Cog Proximity
 
  $0093              Cog Proximity
                             00 = none; 01 = right OR below; 02 = right AND below
+
                             ''00 = none; 01 = right OR below; 02 = right AND below
 
  $0094              Cog ID
 
  $0094              Cog ID
 
  $0095              Cogwheel Size
 
  $0095              Cogwheel Size
                             00 = small; 01 = large
+
                             ''00 = small; 01 = large
  $009C              Subweapon Kill Count (affects multiplier drops)
+
  $009C              Subweapon Kill Count ''(affects multiplier drops)
  $009D              Variable Jump (for Grant)
+
  $009D              Variable Jump ''(for Grant)
 
  $009E              Subweapon Iterator
 
  $009E              Subweapon Iterator
 
  $009F              Previous Game State
 
  $009F              Previous Game State
  $00A0              Recent Player Direction (copy of $009E)
+
  $00A0              Recent Player Direction ''(copy of $009E)
  $00A1              Previous Player Direction (copy of $0062)
+
  $00A1              Previous Player Direction ''(copy of $0062)
  $00A3              Game Step Counter (only increments while game not paused)
+
  $00A3              Game Step Counter ''(only increments while game not paused)
 +
$00A4              Map Transition Checkpoint
 
  $00A5              Check Right Tile
 
  $00A5              Check Right Tile
 
  $00AB              Stopwatch Active
 
  $00AB              Stopwatch Active
 
  $00AC              Stopwatch Timer
 
  $00AC              Stopwatch Timer
 
  $00AD              Invincibility Potion Timer
 
  $00AD              Invincibility Potion Timer
  $00AE              Alucard Bat Timer (drains 1 heart when decreased to 0)
+
  $00AE              Alucard Bat Timer ''(drains 1 heart when decreased to 0)
  $00AF              Landing Delay (prevents walking between elevators)
+
  $00AF              Landing Delay ''(prevents walking between elevators)
  $00B0              Load Doppelganger Sprites (forces CHR updates)
+
  $00B0              Load Doppelganger Sprites ''(forces CHR updates)
  $00B1              Current Instance (backup for X register)
+
  $00B1              Current Instance ''(backup for X register)
  $00B8              Current Platform (ID of elevator or frozen enemy)
+
$00B2              Rosary Flash Timer
  $00B9              Crash Timer (stuns Player after falling too far)
+
$00B6              Tile Assembly Count Vertical ''(only for vertical rooms)''
 +
$00B7              Power Up ''(used for weapon upgrade)''
 +
  $00B8              Current Platform ''(ID of elevator or frozen enemy)
 +
  $00B9              Crash Timer ''(stuns Player after falling too far)
 
  $00BA              Boss Fight
 
  $00BA              Boss Fight
  $00BF              Faint Pause (pauses game when killed or time runs out)
+
  $00BF              Faint Pause ''(pauses game when killed or time runs out)
  $00C8              Horizontal Scroll Lock (used by crumbling bridge)
+
$00C7              Thaw Timer ''(for frozen water)''
 +
  $00C8              Horizontal Scroll Lock ''(used by crumbling bridge)
 
  $00CA              Flood Height
 
  $00CA              Flood Height
  $00CE              Weapon Kill Count (affects item drops)
+
  $00CE              Weapon Kill Count ''(affects item drops)
  $00CF              Previous Conveyance (backup of $0088)
+
  $00CF              Previous Conveyance ''(backup of $0088)
  $00D0              Vertical Ceiling (lowest y-coordinate in vertical room)
+
  $00D0              Vertical Ceiling ''(lowest y-coordinate in vertical room)
  $00EF              Audio Sample
+
$00D2              Cogwheel ID Copy
  $00F0      #04    Candle Status (32-bit mask)
+
$00D4              Cogwheel ID
 +
$00E0      #02    Audio Current Note Address
 +
$00E2      #02    Audio Redirect Address
 +
  $00E2              Audio Data Temporary Variable
 +
$00E4      #02    Audio Data 16-bit Variable
 +
$00E6      #02    Audio Track Base Address
 +
$00E8      #02    Audio Track Address
 +
$00EA              Audio Channels to Load
 +
$00EB              Audio Routine PROM Bank
 +
$00EC      #02    Audio Current Period ''(i.e., pitch)
 +
$00EE              Audio Current Channel
 +
  $00EF              Audio Track ID
 +
  $00F0      #04    Candle Status ''(32-bit mask)
 
  $00F4      #04    Breakable Wall Status
 
  $00F4      #04    Breakable Wall Status
                             00 = unused/unbroken; ff = broken
+
                             ''00 = unused/unbroken; ff = broken
 
  $00F8      #02    Previous Controller Buttons Pressed
 
  $00F8      #02    Previous Controller Buttons Pressed
 
  $00FA      #02    Previous Controller Buttons Held
 
  $00FA      #02    Previous Controller Buttons Held
 
  $00FC      #02    PPU Scroll
 
  $00FC      #02    PPU Scroll
  $00FE              PPU Mask (for hue shifts and greyscale)
+
  $00FE              PPU Mask ''(for hue shifts and greyscale)
 
  $00FF              PPU Control  
 
  $00FF              PPU Control  
 +
        '''''Audio channels:''' (grouped by 3, 5, or 7)''
 +
            ''00 = BGM Square 1; 021 = BGM Square 2; 02 = BGM Triangle;''
 +
            ''03 = SFX Square 1; 04 = SFX Square 2;''
 +
            ''05 = Drums (DCM & Noise); 06 = Noise''
 +
$0100      #07    Audio Channel Note Duration
 +
$0107      #07    Audio Channel Song ID
 +
$010E      #07    Audio Channel Next Note Duration
 +
$0115      #07    Audio Channel Behavior
 +
                              ''bit 0 = SFX (ignore ritenuto); bits 1-2 = init/decay/sustain/release;''
 +
                              ''bit 3 = Al segno loop; bit 5 = coda loop; bit 6 = ignore envelope;''
 +
$011C      #07    Audio Channel Loop Count
 +
$0123      #07    Audio Channel Note Address Low Byte
 +
$012A      #07    Audio Channel Note Address High Byte
 +
$0131      #07    Audio Channel Al Segno Address Low Byte
 +
$0138      #07    Audio Channel Al Segno Address High Byte
 +
$013F      #07    Audio Channel Coda Address Low Byte
 +
$0146      #07    Audio Channel Coda Address High Byte
 +
$014D      #07    Audio Channel Previous Period High Byte
 +
  $0152              Audio Global Dampening ''(lowers volume for all channels)''
 +
$0154      #07    Audio Channel Volume
 +
  $0159              Audio Global Fade Timer ''(decreases $017C after 2b steps)''
 +
$015B      #07    Audio Channel Next Control Value / Channel Dampening Placeholder
 +
  $0160              Audio Global Fade Delay
 +
$0162      #07    Audio Channel Default Duty Cycle
 +
  $0167              Audio Global Mute for Pause
 +
$0169      #05    Audio Channel Dampening ''(lowers volume for specific channel)''
 +
$016E      #05    Audio Channel Attributes
 +
                              ''bit 4 = use waveform; bit 5 = alternate duty; bit 7 = disabled'' '''needs more info'''
 +
$0173      #05    Audio Channel Pitch Bend Amount
 +
$0178      #05    Audio Channel Period Low Byte Backup ''(useless?)
 +
$017D      #03    Audio Channel Octave (''raises octave by 5-n)''
 +
$0180      #03    Audio Channel Note Offset
 +
                              ''(adds signed value to note ID to look up period)''
 +
$0183      #03    Audio Channel Period Low
 +
$0186      #03    Audio Channel Period High
 +
$0189      #03    Audio Channel Volume Envelope
 +
                              ''(if bit 7 set, fade out instead based on bits 0-3)''
 +
$018C              Audio SFX Register Offset
 +
$018D              Audio Global Ritenuto Delay ''(counts up to $018E)''
 +
$018E              Audio Global Ritenuto Cutoff ''(frames until $018F set)''
 +
$018F              Audio Global Ritenuto ''(prolongs BGM note duration when set)''
 +
$0190      #02    Audio SFX Square Sweep
 +
$0192              Audio Current DPCM
 +
$0193              Audio Triangle Staccato Timer
 +
$0194              Audio Triangle Linear Counter ''(only used with $193)''
 +
$0195      #07    Audio Channel PROM Bank
 +
$019C              Audio SFX Square 1 Sweep ''(write to $4001)''
 
  $0200      #100    OAM Data
 
  $0200      #100    OAM Data
 
  $0300      #a0    Tile Data
 
  $0300      #a0    Tile Data
 +
$03C0      #03    Audio Channel Volume Envelope Duration
 +
$03C3      #03    Audio Channel Volume Envelope Position
 +
$03C6      #03    Audio Channel Volume Envelope Loop Count
 +
$03C9      #03    Audio Channel Volume Envelope Loop Point
 +
$03CC      #03    Audio Channel Fadeout Point ''(fades out when equal to $100,X)''
 +
$03CF      #03    Audio Channel Volume Envelope
 +
                              ''(bits 0-3 = value; $03CC = duration*value >> 4)''
 +
$03D2      #03    Audio Channel Next Fade Duration
 +
$03D5      #03    Audio Channel Fade Duration
 +
$03D8      #03    Audio Channel Alternate Duty Cycle
 +
$03DB      #03    Audio Channel Next Pitchbend Duration
 +
$03DE      #03    Audio Channel Pitchbend Duration
 +
$03E1      #03    Audio Channel Sweep Rate
 
  $0400      #1c    Sprite Frame Index
 
  $0400      #1c    Sprite Frame Index
 
  $041C      #1c    Y-Coordinate
 
  $041C      #1c    Y-Coordinate
Line 148: Line 252:
 
  $0454      #1c    Pallet Offset
 
  $0454      #1c    Pallet Offset
 
  $0470      #1c    Attributes
 
  $0470      #1c    Attributes
                             01 = destroyed; 02 = frozen; 04 = unknown; 08 = flicker;
+
                             ''01 = destroyed; 02 = frozen; 04 = unknown; 08 = flicker;
                             10 = illusory; 20 = inanimate; 40 = moving; 80 = invisible
+
                             ''10 = illusory; 20 = inanimate; 40 = moving; 80 = invisible
  $048C      #1c    Animation Batch (even numbers)
+
  $048C      #1c    Animation Batch ''(even numbers)
                             00-06 = Player; 08-12 = NPCs; 14 = Epilogue; 16-1C = Doppelganger
+
                             ''00-06 = Player; 08-12 = NPCs; 14 = Epilogue; 16-1C = Doppelganger
 
  $04A8      #1C    Sprite Mirrored
 
  $04A8      #1C    Sprite Mirrored
 
  $04C4      #17    X-Coordinate Subpixel
 
  $04C4      #17    X-Coordinate Subpixel
Line 165: Line 269:
 
  $0579      #03    Subweapon State
 
  $0579      #03    Subweapon State
 
  $057C      #17    Animation Timer
 
  $057C      #17    Animation Timer
  $0593      #17    Sprite Frame (used to calculate $0400,X)
+
  $0593      #17    Sprite Frame ''(used to calculate $0400,X)
 
  $05AA      #17    Sprite Index
 
  $05AA      #17    Sprite Index
 
  $05C1              Moving Down
 
  $05C1              Moving Down
Line 172: Line 276:
 
  $05D5      #03    Subweapon Throw Delay
 
  $05D5      #03    Subweapon Throw Delay
 
  $05D8              Player Jump State
 
  $05D8              Player Jump State
                               00-1D = Trevor/Syfa/Alucard; 1E-39 = Grant
+
                               ''00-1D = Trevor/Syfa/Alucard; 1E-39 = Grant
 
  $05D9      #0c    Boss Use
 
  $05D9      #0c    Boss Use
 
  $05E5      #06    Candle Drop
 
  $05E5      #06    Candle Drop
                               83 = Axe; 84 = Cross; 85 = Dagger; 86 = Holy Water; 87 = Stopwatch;
+
                               ''83 = Axe; 84 = Cross; 85 = Dagger; 86 = Holy Water; 87 = Stopwatch;
                               88 = Syfa Fire; 89 = Syfa Ice; 8a = Syfa Water; 8b = Grant Dagger;
+
                               ''88 = Syfa Fire; 89 = Syfa Ice; 8a = Syfa Water; 8b = Grant Dagger;
                               8c Grant Axe; 8d-8f = Upgrades (8f removed); 90 = Wall Meat;  
+
                               ''8c Grant Axe; 8d-8f = Upgrades (8f removed); 90 = Wall Meat;  
                              91 = Invincibility Potion; 92 = Rosary; 93-9b = Coins; 9c = 1UP;  
+
                            '' 91 = Invincibility Potion; 92 = Rosary; 93-9b = Coins; 9c = 1UP;  
                              9d = Big Heart; 9e = Small Heart; 9f-a0 = Multipliers
+
                            '' 9d = Big Heart; 9e = Small Heart; 9f-a0 = Multipliers
 
  $05EB              Stair Stun Timer
 
  $05EB              Stair Stun Timer
 
  $05EF              Stair Direction
 
  $05EF              Stair Direction
                     Grant Jump State Fraction (functions like speed variables)
+
                     Grant Jump State Fraction ''(functions like speed variables)
  $05F0      #12    AI Class (determines behavior)
+
  $05F0      #12    AI Class ''(determines behavior)
  $0602              Stair Stun (decreases $05EB)
+
  $0602              Stair Stun ''(decreases $05EB)
  $0606              Grant Gravity Subpixel (increases $05EF for Grant)
+
  $0606              Grant Gravity Subpixel ''(increases $05EF for Grant)
  $0607      #12    State Timer (time between state changes for most NPCs)
+
  $0607      #12    State Timer ''(time between state changes for most NPCs)
 
                     Sinusoid Center Axis
 
                     Sinusoid Center Axis
 
  $0619              Ally Swap Y-Coordinate
 
  $0619              Ally Swap Y-Coordinate
  $061A      #03    Subweapon Damage
+
  $061A      #03    Subweapon Damage and Multikill Count
  $061D              Stair Timer (time to climb one step)
+
  $061D              Stair Timer ''(time to climb one step)
                     Grant Gravity (increases $05D8 for Grant)
+
                     Grant Gravity ''(increases $05D8 for Grant)
  $061E      #12    Miscellaneous Ticker (usually timer or counter for NPCs)
+
  $061E      #12    Miscellaneous Ticker ''(usually timer or counter for NPCs)
 
  $0630              Weapon Damage
 
  $0630              Weapon Damage
  $0631      #03    Subweapon Deflection (copy of $0658,X on Cross hit)
+
  $0631      #03    Subweapon Deflection ''(copy of $0658,X on Cross hit)
  $0634      #17    Miscellaneous Use (used by a couple NPCs)
+
  $0634      #17    Miscellaneous Use ''(used by a couple NPCs)
 
  $0646      #12    Spawner Index
 
  $0646      #12    Spawner Index
 
  $0658      #0d    NPC Damage
 
  $0658      #0d    NPC Damage
 
  $0664      #06    Candle Active
 
  $0664      #06    Candle Active
  $066A      #12    Applied Effect (copy of $061A,X on subweapon hit)
+
  $066A      #12    Applied Effect ''(copy of $061A,X on subweapon hit)
 
  $067B      #12    NPC Hitpoints
 
  $067B      #12    NPC Hitpoints
 
  $068E      #12    Weapons Impact
 
  $068E      #12    Weapons Impact
                               01 = weapon; 02 = subweapon 1; 04 = subweapon 2; 08 = subweapon 3
+
                               ''01 = weapon; 02 = subweapon 1; 04 = subweapon 2; 08 = subweapon 3
  $06DC              Music Paused
+
  $06A0      #03    Audio Channel Pitch Envelope Loop Start
  $06DD             Boss Scream Cutoff
+
$06A3      #03    Audio Channel Pitch Envelope ID
 +
$06A6      #03    Audio Channel Pitch Envelope Position
 +
$06A9      #03    Audio Channel Pitch Envelope Loop Count
 +
$06AC      #03    Audio Channel Sustain State ''(80 = disabled)''
 +
$06AF      #03    Audio Channel Sustain Position ''(from 0 to 3)''
 +
$06B2      #03    Audio Channel Sustain Dampen
 +
$06B5      #04    Audio BGM Square 1 Sustain Period Low Bytes
 +
$06B9      #04    Audio BGM Square 2 Sustain Period Low Bytes
 +
$06BD      #04    Audio BGM Square 1 Sustain Period High Bytes
 +
$06C1      #04    Audio BGM Square 2 Sustain Period High Bytes
 +
  $06C8             Boss Scream Time ''(stops DPCM at f0)''
 +
$06C9              Music Paused
 
  $06E0      #90    Collision Map
 
  $06E0      #90    Collision Map
 +
                              ''00 = empty; 01 = mud; 02 = convey right; 03 = convey left;
 +
                              ''04 = fragile; 05 = ceiling spike; 06 = solid; 07 = floor spike;
 +
                              ''08 = ice; 0c-0f = cracking''
 
  $0770      #08    CHR5 Solid Definitions
 
  $0770      #08    CHR5 Solid Definitions
                               Byte 0 = empty; Byte 1 = mud; Byte 2 = convey right; Byte 3 = convey left;
+
                               ''Byte 0 = empty; Byte 1 = mud; Byte 2 = convey right; Byte 3 = convey left;''
                               Byte 4 = crumbling; Byte 5 = ceiling spike; Byte 6 = solid; Byte 7 = floor spike
+
                               ''Byte 4 = fragile; Byte 5 = ceiling spike; Byte 6 = solid; Byte 7 = floor spike''
 
  $0778      #08    CHR6 Solid Definitions  
 
  $0778      #08    CHR6 Solid Definitions  
 
  $0780              Background Animation Frame
 
  $0780              Background Animation Frame
$0780             Entry Selector Column
+
  $0780           Entry Selector Column
$0780             Map Clipping
+
  $0780           Map Clipping
                               00 = To Grant; 01 = To Syfa; 02 = From Alucard
+
                               ''00 = To Grant; 01 = To Syfa; 02 = From Alucard
 
  $0781              Background Animation Timer
 
  $0781              Background Animation Timer
$0781             Entry Selector Row
+
  $0781           Entry Selector Row
$0781             Map Fade-out Value
+
  $0781           Map Fade-out Value
  $0782             Previous Selector Column
+
  $0782       #40    Fog Parallax Positions
$0782             Map Timer
+
                              ''32 rows of parallax with 2 bytes per row:''
$0782             Epilogue Ally
+
                              ''Byte 0 = subpixel offset; Byte 1 = pixel offset''
 +
  $0782            Previous Selector Column
 +
  $0782           Map Timer
 +
  $0782           Epilogue Ally
 +
  $0782            Sypha's Frozen Tile Column
 
  $0783              Previous Selector Row
 
  $0783              Previous Selector Row
$0783             Map Horizontal Speed Subpixel
+
  $0783           Map Horizontal Speed Subpixel
$0783             Epilogue State
+
  $0783           Epilogue State
 +
  $0783            Sypha's Frozen Tile Row
 
  $0784              Name Cursor Position
 
  $0784              Name Cursor Position
$0784             Map Horizontal Speed
+
  $0784           Map Horizontal Speed
$0784             Castle Shake Direction
+
  $0784           Castle Shake Direction
 +
  $0784            Leftmost Frozen Tile Column
 
  $0785              Map Vertical Speed Subpixel
 
  $0785              Map Vertical Speed Subpixel
$0785             Epilogue Text Page
+
  $0785           Epilogue Text Page
 +
  $0785            Leftmost Frozen Tile Row
 
  $0786              Password Icon
 
  $0786              Password Icon
$0786             Map Vertical Speed
+
  $0786           Map Vertical Speed
 +
  $0786            Rightmost Frozen Tile Column
 
  $0787              Previous Password Icon
 
  $0787              Previous Password Icon
$0787             Map Scroll Timer
+
  $0787           Map Scroll Timer
 +
  $0787            Rightmost Frozen Tile Row
 
  $0788      #02    Password Decryption Dump
 
  $0788      #02    Password Decryption Dump
$0788             Map X-coordinate Subpixel
+
  $0788           Map X-coordinate Subpixel
$0788             Epilogue Scroll Timer
+
  $0788           Epilogue Scroll Timer
 +
  $0788            Water Freeze Counter
 
  $0789              Map Y-coordinate Subpixel
 
  $0789              Map Y-coordinate Subpixel
 +
  $0789            Frozen Water Room Type
 
  $078A              Epilogue Timer
 
  $078A              Epilogue Timer
 
  $078A              Map Path PPU Scroll
 
  $078A              Map Path PPU Scroll
  $078B              Password Errors (used for debugging)
+
  $078B              Map Path PPU Control
$088B              Map Path PPU Control
+
  $078B            Password Errors ''(used for debugging)
 
  $078C      #02    Map Path PPU Address
 
  $078C      #02    Map Path PPU Address
 
  $078C              Update Selector
 
  $078C              Update Selector
 
  $0790      #10    Entered Password
 
  $0790      #10    Entered Password
                               00 = empty; 01 = whip; 02 = cross; 03 = heart
+
                               ''00 = empty; 01 = whip; 02 = cross; 03 = heart
 
  $0790              Map Screen Platform
 
  $0790              Map Screen Platform
                               00 = full; 01 = short west; 02 = bottom east;
+
                               ''00 = full; 01 = short west; 02 = bottom east;
                               03 = top west; 04 = middle west; 05 = bottom west
+
                               ''03 = top west; 04 = middle west; 05 = bottom west
 
  $07A0      #0a    Generated Password
 
  $07A0      #0a    Generated Password
 
  $07B1      #02    Stacked Breakable Wall
 
  $07B1      #02    Stacked Breakable Wall
 
  $07B3      #02    Lower Block Broken
 
  $07B3      #02    Lower Block Broken
 
  $07B5      #02    Upper Block Broken
 
  $07B5      #02    Upper Block Broken
  $07B7      #02    Wall ID (points to $00F4,X)
+
  $07B7      #02    Wall ID ''(points to $00F4,X)
 
  $07C2      #06    Spawner Type
 
  $07C2      #06    Spawner Type
 
  $07C8      #06    Spawner State
 
  $07C8      #06    Spawner State
Line 259: Line 388:
 
  $07E0      #06    Spawner Offscreen
 
  $07E0      #06    Spawner Offscreen
 
  $07E6      #06    Spawner NPC Object
 
  $07E6      #06    Spawner NPC Object
  $07EC      #06    Bone Dragon King Frames (two ribs per byte)
+
  $07EC      #06    Bone Dragon King Frames ''(two ribs per byte)
 
  $07EC              Cyclops Lightning State
 
  $07EC              Cyclops Lightning State
 
                     Bone Dragon Cycle
 
                     Bone Dragon Cycle
 
                     Giant Bat Leader
 
                     Giant Bat Leader
 
                     Dracula Phase
 
                     Dracula Phase
                               00 = Dracula; 01 = demon; 02 = Pazuzu
+
                               ''00 = Dracula; 01 = demon; 02 = Pazuzu
 
  $07ED              Victory State
 
  $07ED              Victory State
 
                     Bone Dragon Mirrored
 
                     Bone Dragon Mirrored
Line 273: Line 402:
 
  $07EF              Bone Dragon Attacking
 
  $07EF              Bone Dragon Attacking
 
  $07F3              Boss Phase
 
  $07F3              Boss Phase
                               00 = boss fight; 01 = boss defeat; 02 = crystal drop;
+
                               ''00 = boss fight; 01 = boss defeat; 02 = crystal drop;
                               03 = battle over; 80 = boss waiting
+
                               ''03 = battle over; 80 = boss waiting
 
                     Victory Delay (timer after battle over)
 
                     Victory Delay (timer after battle over)
 
  $07F6              Hard Mode
 
  $07F6              Hard Mode
Line 292: Line 421:
 
  $001D              Blackout Delay
 
  $001D              Blackout Delay
 
  $0020              Randomizer
 
  $0020              Randomizer
  $0021              PPU Bank (write to $B003)
+
  $0021              PPU Bank ''(write to $B003)
 +
$0022              OAM Batch
 +
$0023              Current PROM Bank
 +
$0024              Previous PROM Bank
 +
$0025              PROM Bank Backup ''(used by some functions)''
 +
$0026              Bank Changed ''(for debugging probably)''
 
  $0028      #02    Controller Buttons Pressed
 
  $0028      #02    Controller Buttons Pressed
 
                             ''01 = right; 02 = left; 04 = down; 08 = up;''
 
                             ''01 = right; 02 = left; 04 = down; 08 = up;''
 
                             ''10 = start; 20 = select; 40 = B; 80 = A''
 
                             ''10 = start; 20 = select; 40 = B; 80 = A''
 
  $002A      #02    Controller Buttons Held
 
  $002A      #02    Controller Buttons Held
  $002C              Game State
+
  $002C              Game State ''(set $0068 to 00 before changing)''
  $002D              User Paused (toggled by Start button)
+
                            ''00 = initialize room; 01 = initialize nametables; 02 = load horizontal room;
 +
                            ''03 = horizontal gameplay; 04 = load vertical room; 05 = vertical gameplay;
 +
                            ''06 = stair transition start; 07 = stair transition fade; 08 = door transition;
 +
                            ''09 = initialize fog; 0a = fog parallax; 0b = horizontal partner swap;
 +
                            ''0c = vertical partner swap; 0d/0e = <CUT CONTENT>; 0f = detect automatic stairs;
 +
                            ''10 = automatic stair transition; 11 = tally score; 12 = <UNUSED>;
 +
                            ''13 = flee Aquarius; 14 = initialize flooding; 15 = load flood room;
 +
                            ''16 = flood room gameplay; 17 = map transition; 18 = autowalk to door;
 +
                            ''19 = powering up; 1a = freeze water; 1b = thaw ice; 1c = Bone King escape;
 +
                            ''1d = Aquarius ruptured; 1e = initialize map transition; 1f = map transition exit
 +
  $002D              User Paused ''(toggled by Start button)
 
  $002E              Boss Defeated  
 
  $002E              Boss Defeated  
  $0030              Checkpoint (used for Password Entry)
+
  $0030              Checkpoint ''(used for Password Entry)
 
  $0031              Grant Defeated  
 
  $0031              Grant Defeated  
 
  $0032      #02    System Effect Timer
 
  $0032      #02    System Effect Timer
Line 310: Line 454:
 
  $0040              IRQ Control
 
  $0040              IRQ Control
 
  $0041      #02    IRQ Latch
 
  $0041      #02    IRQ Latch
  $0043              Default Drawing State (write to $006A)
+
  $0043              Default Drawing State ''(write to $006A)
 
  $0044      #03    Score
 
  $0044      #03    Score
 
  $0048              Partner   
 
  $0048              Partner   
Line 318: Line 462:
 
                             ''40 = full''
 
                             ''40 = full''
 
  $004B              Boss Health  
 
  $004B              Boss Health  
  $004C              Score Target (for extra life)
+
  $004C              Score Target ''(for extra life)
 +
$004D      #02    Tile Assembly Room Address
 +
$004F      #02    Tile Assembly Left Address
 +
$0051      #02    Tile Assembly Right Address
 
  $0053      #02    View Position  
 
  $0053      #02    View Position  
 
  $0055              View Subpixel Position
 
  $0055              View Subpixel Position
 
  $0056              Left Spawn Area
 
  $0056              Left Spawn Area
 
  $0057              Right Spawn Area
 
  $0057              Right Spawn Area
 +
$0058              Tile Assembly Count Left
 +
$0059              Tile Assembly Count Right
 
  $005A      #02    Tile Assembly Pointer
 
  $005A      #02    Tile Assembly Pointer
 
  $005C      #02    Pallet Map Pointer
 
  $005C      #02    Pallet Map Pointer
Line 336: Line 485:
 
                             ''83 = scroll down; 84 = collapse up; 85 = collapse down''
 
                             ''83 = scroll down; 84 = collapse up; 85 = collapse down''
 
  $0066      #02    Stair Map Address
 
  $0066      #02    Stair Map Address
  $0068              Player Animation State (for transitions)
+
  $0068              Game Substate
  $0069              Current Instance (saves X register)
+
  $0069              Current Instance ''(saves X register)
 
  $006A              Drawing State
 
  $006A              Drawing State
 
  $006B              View Speed
 
  $006B              View Speed
Line 346: Line 495:
 
  $0070              Previous Room Orientation
 
  $0070              Previous Room Orientation
 
  $0071              Music Loaded
 
  $0071              Music Loaded
  $0072              Transition Nametable (nametable to use after door closes)
+
  $0072              Transition Nametable ''(nametable to use after door closes)
 
  $0073              Horizontal Spawner Block
 
  $0073              Horizontal Spawner Block
 
  $0074              First Spawner Block
 
  $0074              First Spawner Block
Line 358: Line 507:
 
                             ''Note: lower 4 bits alter behavior''
 
                             ''Note: lower 4 bits alter behavior''
 
  $007B      #02    Time  
 
  $007B      #02    Time  
  $007D              Wounded Timer (invincibility frames)
+
  $007D              Wounded Timer ''(invincibility frames)
  $007E              Damage Received
+
  $007E              Damage Received/Effect On Player
 
  $007F              PC Height
 
  $007F              PC Height
 
                             ''00 = Trevor standing; 01 = Syfa standing; 02 = Grant standing; 03 = Alucard standing;''
 
                             ''00 = Trevor standing; 01 = Syfa standing; 02 = Grant standing; 03 = Alucard standing;''
Line 383: Line 532:
 
  $008D              Knockback Direction
 
  $008D              Knockback Direction
 
                             ''00 = left; 01 = right''
 
                             ''00 = left; 01 = right''
  $008E              Conveyor (see $0088)
+
  $008E              Conveyor ''(see $0088)
 
  $0090              Cog Proximity
 
  $0090              Cog Proximity
 
                             ''00 = none; 01 = right OR below; 02 = right AND below''
 
                             ''00 = none; 01 = right OR below; 02 = right AND below''
Line 389: Line 538:
 
  $0092              Cogwheel Size
 
  $0092              Cogwheel Size
 
                             ''00 = small; 01 = large''
 
                             ''00 = small; 01 = large''
  $0099              Subweapon Kill Count (affects multiplier drops)
+
  $0099              Subweapon Kill Count ''(affects multiplier drops)
  $009A              Variable Jump (for Grant)
+
  $009A              Variable Jump ''(for Grant)
 
  $009B              Subweapon Iterator
 
  $009B              Subweapon Iterator
 
  $009C              Previous Game State
 
  $009C              Previous Game State
  $009D              Recent Player Direction (copy of $009E)
+
  $009D              Recent Player Direction ''(copy of $009E)
  $009E              Previous Player Direction (copy of $0062)
+
  $009E              Previous Player Direction ''(copy of $0062)
  $00A0              Game Step Counter (only increments while game not paused)
+
  $00A0              Game Step Counter ''(only increments while game not paused)
 +
$00A1              Map Transition Checkpoint
 
  $00A2              Check Right Tile
 
  $00A2              Check Right Tile
 
  $00A8              Stopwatch Active
 
  $00A8              Stopwatch Active
 
  $00A9              Stopwatch Timer
 
  $00A9              Stopwatch Timer
 
  $00AA              Invincibility Potion Timer
 
  $00AA              Invincibility Potion Timer
  $00AB              Alucard Bat Timer (drains 1 heart when decreased to 0)
+
  $00AB              Alucard Bat Timer ''(drains 1 heart when decreased to 0)
  $00AC              Landing Delay (prevents walking between elevators)
+
  $00AC              Landing Delay ''(prevents walking between elevators)
  $00AD              Load Doppelganger Sprites (forces CHR updates)
+
  $00AD              Load Doppelganger Sprites ''(forces CHR updates)
  $00AE              Current Instance (backup for X register)
+
  $00AE              Current Instance ''(backup for X register)
  $00B5              Current Platform (ID of elevator or frozen enemy)
+
$00AF              Rosary Flash Timer
  $00B6              Crash Timer (stuns Player after falling too far)
+
$00B3              Tile Assembly Count Vertical ''(only for vertical rooms)''
 +
$00B4              Power Up ''(used for weapon upgrade)''
 +
  $00B5              Current Platform ''(ID of elevator or frozen enemy)
 +
  $00B6              Crash Timer ''(stuns Player after falling too far)
 
  $00B7              Boss Fight
 
  $00B7              Boss Fight
  $00BC              Faint Pause (pauses game when killed or time runs out)
+
  $00BC              Faint Pause ''(pauses game when killed or time runs out)
  $00C5              Horizontal Scroll Lock (used by crumbling bridge)
+
$00C4              Thaw Timer ''(for frozen waters)''
 +
  $00C5              Horizontal Scroll Lock ''(used by crumbling bridge)
 
  $00C7              Flood Height
 
  $00C7              Flood Height
  $00CB              Weapon Kill Count (affects item drops)
+
  $00CB              Weapon Kill Count ''(affects item drops)
  $00CC              Previous Conveyance (backup of $0088)
+
  $00CC              Previous Conveyance ''(backup of $0088)
  $00CD              Vertical Ceiling (lowest y-coordinate in vertical room)
+
  $00CD              Vertical Ceiling ''(lowest y-coordinate in vertical room)
 +
$00CF              Cogwheel ID Copy
 +
$00D1              Cogwheel ID
 
  $00E0      #02    Audio Current Note Address
 
  $00E0      #02    Audio Current Note Address
 
  $00E2      #02    Audio Redirect Address
 
  $00E2      #02    Audio Redirect Address
 
   $00E2              Audio Data Temporary Variable
 
   $00E2              Audio Data Temporary Variable
 
  $00E4      #02    Audio Data 16-bit Variable
 
  $00E4      #02    Audio Data 16-bit Variable
  $00E6      #02    Audio Song Base Address
+
  $00E6      #02    Audio Track Base Address
  $00E8      #02    Audio Song Address
+
  $00E8      #02    Audio Track Address
 
  $00EA              Audio Channels to Load
 
  $00EA              Audio Channels to Load
 
  $00EB              Audio Routine PROM Bank
 
  $00EB              Audio Routine PROM Bank
  $00EC      #02    Audio Current Period (i.e., pitch)
+
  $00EC      #02    Audio Current Period ''(i.e., pitch)
 
  $00EE              Audio Current Channel
 
  $00EE              Audio Current Channel
  $00EF              Audio Song ID
+
  $00EF              Audio Track ID
  $00F0      #04    Candle Status (32-bit mask)
+
  $00F0      #04    Candle Status ''(32-bit mask)
 
  $00F4      #04    Breakable Wall Status
 
  $00F4      #04    Breakable Wall Status
 
                             ''00 = unused/unbroken; ff = broken''
 
                             ''00 = unused/unbroken; ff = broken''
Line 430: Line 586:
 
  $00FA      #02    Previous Controller Buttons Held
 
  $00FA      #02    Previous Controller Buttons Held
 
  $00FC      #02    PPU Scroll
 
  $00FC      #02    PPU Scroll
  $00FE              PPU Mask (for hue shifts and greyscale)
+
  $00FE              PPU Mask ''(for hue shifts and greyscale)
 
  $00FF              PPU Control
 
  $00FF              PPU Control
 
         '''''Audio channels:''' (grouped by 5, 7, or 9)''
 
         '''''Audio channels:''' (grouped by 5, 7, or 9)''
Line 440: Line 596:
 
  $0112      #09    Audio Channel Next Note Duration
 
  $0112      #09    Audio Channel Next Note Duration
 
  $011B      #09    Audio Channel Behavior
 
  $011B      #09    Audio Channel Behavior
                               ''bit 0 = SFX (ignore $01BF); bits 1-2 = playback state; bit 3 = pattern loop;''
+
                               ''bit 0 = SFX (ignore ritenuto); bits 1-2 = init/decay/sustain/release;''  
                               ''bit 6 = ignore envelope;'' '''needs more info'''
+
                               ''bit 3 = Al segno loop; bit 5 = coda loop; bit 6 = ignore envelope;''
 
  $0124      #09    Audio Channel Loop Count
 
  $0124      #09    Audio Channel Loop Count
 
  $012D      #09    Audio Channel Note Address Low Byte
 
  $012D      #09    Audio Channel Note Address Low Byte
 
  $0136      #09    Audio Channel Note Address High Byte
 
  $0136      #09    Audio Channel Note Address High Byte
  $013F      #09    Audio Channel Pattern Loop Address Low Byte
+
  $013F      #09    Audio Channel Al Segno Address Low Byte
  $0148      #09    Audio Channel Pattern Loop Address High Byte
+
  $0148      #09    Audio Channel Al Segno Address High Byte
  $0151      #09    Audio Channel Repeat Address Low Byte
+
  $0151      #09    Audio Channel Coda Address Low Byte
  $015A      #09    Audio Channel Repeat Address High Byte
+
  $015A      #09    Audio Channel Coda Address High Byte
 
  $0163      #09    Audio Channel Previous Period High Byte
 
  $0163      #09    Audio Channel Previous Period High Byte
 
   $016A              Audio Global Dampening ''(lowers volume for all channels)''
 
   $016A              Audio Global Dampening ''(lowers volume for all channels)''
 
  $016C      #09    Audio Channel Volume
 
  $016C      #09    Audio Channel Volume
 
   $0173              Audio Global Fade Timer ''(decreases $017C after 2b steps)''
 
   $0173              Audio Global Fade Timer ''(decreases $017C after 2b steps)''
  $0175      #09    Audio Channel Next Volume
+
  $0175      #09    Audio Channel Next Control Value / Channel Dampening Placeholder
 
   $017C              Audio Global Fade Delay
 
   $017C              Audio Global Fade Delay
 
  $017E      #09    Audio Channel Default Duty Cycle
 
  $017E      #09    Audio Channel Default Duty Cycle
Line 461: Line 617:
 
                               ''bit 4 = use waveform; bit 5 = alternate duty; bit 7 = disabled'' '''needs more info'''
 
                               ''bit 4 = use waveform; bit 5 = alternate duty; bit 7 = disabled'' '''needs more info'''
 
  $0195      #07    Audio Channel Pitch Bend Amount
 
  $0195      #07    Audio Channel Pitch Bend Amount
  $019C             Audio SFX Square 1 Sweep ''(write to $4001)''
+
  $019C       #02    Audio SFX Square Sweep
 
  $019E              Audio DPCM ID
 
  $019E              Audio DPCM ID
 
  $019F      #02    Audio Square Period Low Byte ''(write to $4002/$4006)''
 
  $019F      #02    Audio Square Period Low Byte ''(write to $4002/$4006)''
  $01A3      #05    Audio Channel Downshift ''(doubles period of default note '''n''' times)''
+
  $01A3      #05    Audio Channel Octave ''(raises octave by 5-n)''
 
  $01A8      #05    Audio Channel Note Offset
 
  $01A8      #05    Audio Channel Note Offset
 
                               ''(adds signed value to note ID to look up period)''
 
                               ''(adds signed value to note ID to look up period)''
  $01AD      #05    Audio Channel Period Low ''(usually write to each channel's period register)''
+
  $01AD      #05    Audio Channel Period Low  
  $01B2      #05    Audio Channel Period High ''(usually write to each channel's period register)''
+
  $01B2      #05    Audio Channel Period High  
 
  $01B7      #05    Audio Channel Volume Envelope
 
  $01B7      #05    Audio Channel Volume Envelope
 
                               ''(if bit 7 set, fade out instead based on bits 0-3)''
 
                               ''(if bit 7 set, fade out instead based on bits 0-3)''
Line 475: Line 631:
 
  $01BE              Audio Global Ritenuto Cutoff ''(frames until $01BF set)''
 
  $01BE              Audio Global Ritenuto Cutoff ''(frames until $01BF set)''
 
  $01BF              Audio Global Ritenuto ''(prolongs BGM note duration when set)''
 
  $01BF              Audio Global Ritenuto ''(prolongs BGM note duration when set)''
$01C0      #40    The Stack
 
 
  $0200      #100    OAM Data
 
  $0200      #100    OAM Data
 
  $0300      #a0    Tile Data
 
  $0300      #a0    Tile Data
  $03C0      #05    Audio Channel Volume Duration
+
  $03C0      #05    Audio Channel Volume Envelope Duration
  $03C5      #05    Audio Channel Fade Duration
+
  $03C5      #05    Audio Channel Volume Envelope Position
  $03D4      #05    Audio Channel Fade Out Point ''(fades out when equal to $100,X)''
+
$03CA      #05    Audio Channel Volume Envelope Loop Count
 +
$03CF      #05    Audio Channel Volume Envelope Loop Point
 +
  $03D4      #05    Audio Channel Fadeout Point ''(fades out when equal to $100,X)''
 
  $03D9      #05    Audio Channel Volume Envelope  
 
  $03D9      #05    Audio Channel Volume Envelope  
 
                               ''(bits 0-3 = value; $03D4 = duration*value >> 4)''
 
                               ''(bits 0-3 = value; $03D4 = duration*value >> 4)''
  $03DE      #05    Audio Channel Next Fade Delay
+
  $03DE      #05    Audio Channel Next Fade Duration
  $03E3      #05    Audio Channel Fade Delay
+
  $03E3      #05    Audio Channel Fade Duration
 
  $03E8      #05    Audio Channel Alternate Duty Cycle
 
  $03E8      #05    Audio Channel Alternate Duty Cycle
  $03ED      #05    Audio Channel Next Envelope Duration
+
  $03ED      #05    Audio Channel Next Pitchbend Duration
  $03F2      #05    Audio Channel Envelope Duration
+
  $03F2      #05    Audio Channel Pitchbend Duration
 
  $03F7      #05    Audio Channel Sweep Rate
 
  $03F7      #05    Audio Channel Sweep Rate
 
  $0400      #1c    Sprite Frame Index
 
  $0400      #1c    Sprite Frame Index
Line 511: Line 668:
 
  $0579      #03    Subweapon State
 
  $0579      #03    Subweapon State
 
  $057C      #17    Animation Timer
 
  $057C      #17    Animation Timer
  $0593      #17    Sprite Frame (used to calculate $0400,X)
+
  $0593      #17    Sprite Frame ''(used to calculate $0400,X)
 
  $05AA      #17    Sprite Index
 
  $05AA      #17    Sprite Index
 
  $05C1              Moving Down
 
  $05C1              Moving Down
Line 528: Line 685:
 
  $05EB              Stair Stun Timer
 
  $05EB              Stair Stun Timer
 
  $05EF              Stair Direction
 
  $05EF              Stair Direction
                     Grant Jump State Fraction (functions like speed variables)
+
                     Grant Jump State Fraction ''(functions like speed variables)
  $05F0      #12    AI Class (determines behavior)
+
  $05F0      #12    AI Class ''(determines behavior)
  $0602              Stair Stun (decreases $05EB)
+
  $0602              Stair Stun ''(decreases $05EB)
  $0606              Grant Gravity Subpixel (increases $05EF for Grant)
+
                    Freezing Rivers
  $0607      #12    State Timer (time between state changes for most NPCs)
+
                    Turning Into Bat
 +
  $0606              Grant Gravity Subpixel ''(increases $05EF for Grant)
 +
  $0607      #12    State Timer ''(time between state changes for most NPCs)
 
                     Sinusoid Center Axis
 
                     Sinusoid Center Axis
 
  $0619              Ally Swap Y-Coordinate
 
  $0619              Ally Swap Y-Coordinate
  $061A      #03    Subweapon Damage
+
  $061A      #03    Subweapon Damage and Multikill Count
  $061D              Stair Timer (time to climb one step)
+
  $061D              Stair Timer ''(time to climb one step)
                     Grant Gravity (increases $05D8 for Grant)
+
                     Grant Gravity ''(increases $05D8 for Grant)
  $061E      #12    Miscellaneous Ticker (usually timer or counter for NPCs)
+
  $061E      #12    Miscellaneous Ticker ''(usually timer or counter for NPCs)
 
  $0630              Weapon Damage
 
  $0630              Weapon Damage
  $0631      #03    Subweapon Deflection (copy of $0658,X on Cross hit)
+
  $0631      #03    Subweapon Deflection ''(copy of $0658,X on Cross hit)
  $0634      #17    Miscellaneous Use (used by a couple NPCs)
+
  $0634      #17    Miscellaneous Use ''(used by a couple NPCs)
 
  $0646      #12    Spawner Index
 
  $0646      #12    Spawner Index
 
  $0658      #0d    NPC Damage
 
  $0658      #0d    NPC Damage
 
  $0664      #06    Candle Active
 
  $0664      #06    Candle Active
  $066A      #12    Applied Effect (copy of $061A,X on subweapon hit)
+
  $066A      #12    Applied Effect ''(copy of $061A,X on subweapon hit)
 
  $067B      #12    NPC Hitpoints
 
  $067B      #12    NPC Hitpoints
 
  $068E      #12    Weapons Impact
 
  $068E      #12    Weapons Impact
 
                               ''01 = weapon; 02 = subweapon 1; 04 = subweapon 2; 08 = subweapon 3''
 
                               ''01 = weapon; 02 = subweapon 1; 04 = subweapon 2; 08 = subweapon 3''
  $06A0      #05    Audio Channel Pitch Envelope Loop  
+
  $06A0      #05    Audio Channel Pitch Envelope Loop Start
  $06A5      #05    Audio Channel Pitch Envelope
+
  $06A5      #05    Audio Channel Pitch Envelope ID
 
  $06AA      #05    Audio Channel Pitch Envelope Position
 
  $06AA      #05    Audio Channel Pitch Envelope Position
 
  $06AF      #05    Audio Channel Pitch Envelope Loop Count
 
  $06AF      #05    Audio Channel Pitch Envelope Loop Count
  $06B4      #05    Audio Channel Pitch Envelope State
+
  $06B4      #05    Audio Channel Sustain State
  $06B9      #05    Audio Channel Arpeggio Position
+
  $06B9      #05    Audio Channel Sustain Position ''(from 0 to 3)''
  $06C3      #04    Audio BGM Square 1 Arpeggio Low Bytes
+
$06BE      #05    Audio Channel Sustain Dampen
  $06C7      #04    Audio BGM Square 2 Arpeggio Low Bytes
+
  $06C3      #04    Audio BGM Square 1 Sustain Period Low Bytes
  $06CB      #04    Audio BGM Square 1 Arpeggio High Bytes
+
  $06C7      #04    Audio BGM Square 2 Sustain Period Low Bytes
  $06CF      #04    Audio BGM Square 2 Apreggio High Bytes
+
  $06CB      #04    Audio BGM Square 1 Sustain Period High Bytes
 +
  $06CF      #04    Audio BGM Square 2 Sustain Period High Bytes
 
  $06D3      #09    Audio Channel PROM Bank
 
  $06D3      #09    Audio Channel PROM Bank
 
  $06DC              Music Paused
 
  $06DC              Music Paused
  $06DD              Boss Scream Cutoff
+
  $06DD              Boss Scream Duration ''stops DPCM playback''
 
  $06E0      #90    Collision Map
 
  $06E0      #90    Collision Map
 +
                              ''00 = empty; 01 = mud; 02 = convey right; 03 = convey left;
 +
                              ''04 = fragile; 05 = ceiling spike; 06 = solid; 07 = floor spike;
 +
                              ''08 = ice; 0c-0f = cracking''
 
  $0770      #08    CHR5 Solid Definitions
 
  $0770      #08    CHR5 Solid Definitions
 
                               ''Byte 0 = empty; Byte 1 = mud; Byte 2 = convey right; Byte 3 = convey left;''
 
                               ''Byte 0 = empty; Byte 1 = mud; Byte 2 = convey right; Byte 3 = convey left;''
                               ''Byte 4 = crumbling; Byte 5 = ceiling spike; Byte 6 = solid; Byte 7 = floor spike''
+
                               ''Byte 4 = fragile; Byte 5 = ceiling spike; Byte 6 = solid; Byte 7 = floor spike''
 
  $0778      #08    CHR6 Solid Definitions
 
  $0778      #08    CHR6 Solid Definitions
 
  $0780              Background Animation Frame
 
  $0780              Background Animation Frame
Line 574: Line 737:
 
  $0785              Epilogue Text Page
 
  $0785              Epilogue Text Page
 
  $0780              Entry Selector Column
 
  $0780              Entry Selector Column
$0780             Entry Selector Column
+
  $0780           Entry Selector Column
$0780             Map Clipping
+
  $0780           Map Clipping
 
                               ''00 = To Grant; 01 = To Syfa; 02 = From Alucard''
 
                               ''00 = To Grant; 01 = To Syfa; 02 = From Alucard''
 
  $0781              Background Animation Timer
 
  $0781              Background Animation Timer
$0781             Entry Selector Row
+
  $0781           Entry Selector Row
$0781             Map Fade-out Value
+
  $0781           Map Fade-out Value
  $0782             Previous Selector Column
+
  $0782       #40    Fog Parallax Positions
$0782             Map Timer
+
                              ''32 rows of parallax with 2 bytes per row:''
$0782             Epilogue Ally
+
                              ''Byte 0 = subpixel offset; Byte 1 = pixel offset''
 +
  $0782            Previous Selector Column
 +
  $0782           Map Timer
 +
  $0782           Epilogue Ally
 +
  $0782            Sypha's Frozen Tile Column
 
  $0783              Previous Selector Row
 
  $0783              Previous Selector Row
$0783             Map Horizontal Speed Subpixel
+
  $0783           Map Horizontal Speed Subpixel
$0783             Epilogue State
+
  $0783           Epilogue State
 +
  $0783            Sypha's Frozen Tile Row
 
  $0784              Name Cursor Position
 
  $0784              Name Cursor Position
$0784             Map Horizontal Speed
+
  $0784           Map Horizontal Speed
$0784             Castle Shake Direction
+
  $0784           Castle Shake Direction
 +
  $0784            Leftmost Frozen Tile Column
 
  $0785              Map Vertical Speed Subpixel
 
  $0785              Map Vertical Speed Subpixel
$0785             Epilogue Text Page
+
  $0785           Epilogue Text Page
 +
  $0785            Leftmost Frozen Tile Row
 
  $0786              Password Icon
 
  $0786              Password Icon
$0786             Map Vertical Speed
+
  $0786           Map Vertical Speed
 +
  $0786            Rightmost Frozen Tile Column
 
  $0787              Previous Password Icon
 
  $0787              Previous Password Icon
$0787             Map Scroll Timer
+
  $0787           Map Scroll Timer
 +
  $0787            Rightmost Frozen Tile Row
 
  $0788      #02    Password Decryption Dump
 
  $0788      #02    Password Decryption Dump
$0788             Map X-coordinate Subpixel
+
  $0788           Map X-coordinate Subpixel
$0788             Epilogue Scroll Timer
+
  $0788           Epilogue Scroll Timer
 +
  $0788            Water Freeze Counter
 
  $0789              Map Y-coordinate Subpixel
 
  $0789              Map Y-coordinate Subpixel
 +
  $0789            Frozen Water Room Type
 
  $078A              Epilogue Timer
 
  $078A              Epilogue Timer
$078A             Map Path PPU Scroll
+
  $078A           Map Path PPU Scroll
  $078B              Password Errors (used for debugging)
+
  $078B              Map Path PPU Control
$088B              Map Path PPU Control
+
  $078B            Password Errors ''(used for debugging)
 
  $078C      #02    Map Path PPU Address
 
  $078C      #02    Map Path PPU Address
 
  $078C              Update Selector
 
  $078C              Update Selector
Line 614: Line 788:
 
  $07B3      #02    Lower Block Broken
 
  $07B3      #02    Lower Block Broken
 
  $07B5      #02    Upper Block Broken
 
  $07B5      #02    Upper Block Broken
  $07B7      #02    Wall ID (points to $00F4,X)
+
  $07B7      #02    Wall ID ''(points to $00F4,X)
 
  $07C2      #06    Spawner Type
 
  $07C2      #06    Spawner Type
 
  $07C8      #06    Spawner State
 
  $07C8      #06    Spawner State
Line 622: Line 796:
 
  $07E0      #06    Spawner Offscreen
 
  $07E0      #06    Spawner Offscreen
 
  $07E6      #06    Spawner NPC Object
 
  $07E6      #06    Spawner NPC Object
  $07EC      #06    Bone Dragon King Frames (two ribs per byte)
+
  $07EC      #06    Bone Dragon King Frames ''(two ribs per byte)
 
  $07EC              Cyclops Lightning State
 
  $07EC              Cyclops Lightning State
 
                     Bone Dragon Cycle
 
                     Bone Dragon Cycle

Revision as of 14:39, 13 September 2022

Address    Size    Description
--------   ----    -----------
$0017              Repeat Counter
$0018              System State
                            00 = Title; 02 = New Game; 03 = In-game Transition; 04 = In-Game;
                            05 = Game Over Transition; 06 = Game Over; 07 = Stage Select Debug;
                            08 = Map Screen; 09 = Prayer Scene; 0a = Name Entry; 0b = Password Entry;
                            0c = Epilogue; 0d = Credit Roll; 0e = Respawn; 0f = Sound Test Debug
$0019              System Substate
$001A              Step Counter
$001C              Blackout Delay
$001D              X Register Backup
$001F              Randomizer
$0020              OAM Batch
$0021              Current PROM Bank 
$0022              Previous PROM Bank
$0023              PROM Bank Backup (used by some functions)
$0024              Bank Changed (for debugging probably)
$0025              Nametable Mapping
$0026       #02    Controller Buttons Pressed
                            01 = right; 02 = left; 04 = down; 08 = up;
                            10 = start; 20 = select; 40 = B; 80 = A
$0028       #02    Controller Buttons Held
$002A              Game State (set $006B to 00 before changing)
                            00 = initialize room; 01 = initialize nametables; 02 = load horizontal room;
                            03 = horizontal gameplay; 04 = load vertical room; 05 = vertical gameplay;
                            06 = stair transition start; 07 = stair transition fade; 08 = door transition;
                            09 = initialize fog; 0a = fog parallax; 0b = horizontal partner swap;
                            0c = vertical partner swap; 0d/0e = <CUT CONTENT>; 0f = detect automatic stairs;
                            10 = automatic stair transition; 11 = tally score; 12 = <UNUSED>;
                            13 = flee Aquarius; 14 = initialize flooding; 15 = load flood room;
                            16 = flood room gameplay; 17 = map transition; 18 = autowalk to door;
                            19 = powering up; 1a = freeze water; 1b = thaw ice; 1c = Bone King escape;
                            1d = Aquarius ruptured; 1e = initialize map transition; 1f = map transition exit
$002B              User Paused (toggled by Start button)
$002C              Boss Defeated
$002E              Checkpoint
$002F              Grant Defeated
$0030       #02    System Effect Timer
$0032              Stage
$0033              Block
$0034              Room
$0035              Lives   
$0036       #03    Score  
$003A              Partner   
                            00 = Trevor; 01 = Syfa; 02 = Grant; 03 = Alucard; ff = None
$003B              Partner Active 
$003C              Player's Health
                            40 = full
$003D              Boss Health 
$003E              Score Target (for extra life)
$003F              Default Drawing State (write to $006D)
$0040              Scanline IRQ
$0041              Scanline Target
$0043              Scanline Next Target
$0044       #02    Draw State Address
$0046       #08    CHR Banks
$004E              Hard Mode CHR Bank (overwrites $0049)
$0050       #02    Tile Assembly Starting Address
$0052       #02    Tile Assembly Left Address
$0054       #02    Tile Assembly Right Address
$0056       #02    View Position (little endian) 
$0058              View Subpixel Position
$0059              Left Spawn Area
$005A              Right Spawn Area
$005B              Tile Assembly Count Left
$005C              Tile Assembly Count Right
$005D       #02    Tile Assembly Pointer
$005F       #02    Pallet Map Pointer
$0061       #02    Nametable Write Address
$0063              Tile Assembly ID
$0064              Transition Timer
$0065              Scroll Direction
                            00 = left; 01 = right; 02 = unchanged
$0066              View Refreshed Position
$0067              Update View
$0068              Room Orientation
                            00 = horizontal; 80 or 81 = vertical; 82 = scroll up;
                            83 = scroll down; 84 = collapse up; 85 = collapse down
$0069       #02    Stair Map Address
$006B              Game Substate
                   and menu selections
$006C              Current Instance (saves X register)
$006D              Drawing State
$006E              View Speed
$006F       #02    PPU Scroll 
$0071              Room Size
$0072              CHR Write Mode
                            00 or 03 = all CHR banks; 01 = status bar banks;  02 = clear NPC banks
$0073              Previous Room Orientation
$0074              Music Loaded
$0075              Transition Nametable (nametable to use after door closes)
$0076              Horizontal Spawner Block
$0077              First Spawner Block
$0078              Boss Scroll Lock
$0079              Vertical Spawner Block
$007A              Vertical Spawner Previous (?)
$007B              Spawner Count
$007D              Room Type
                            10 = Stormclouds; 20 = Autowalk; 30 = River; 40 = Clockwork;
                            50 and 60 = Watery Grave; 70 = Flood Zone; 80 = Collapsing Bridge
                            Note: lower 4 bits alter behavior
$007E       #02    Time
$0080              Wounded Timer (invincibility frames)
$0081              Damage Received/Effect on Player
$0082              PC Height
                            00 = Trevor standing; 01 = Syfa standing; 02 = Grant standing; 03 = Alucard standing;
                            04 = Trevor duck; 05 = Syfa duck; 06 = Grant duck; 07 = Alucard duck; 08 = Bat
$0084              Hearts
$0085              Trevor Subweapon
                            00 = none; 01 = axe; 02 = boomerang; 03 = knife/book; 04 = holy water; 05 = fireball; 
                            06 = freeze; 07 = orb; 08 = axe; 09 = boomerang; 0a = knife/book ;0b = clock
$0086              Partner Subweapon
$0087              Trevor Subweapon Multiplier   
                            00 = none; 01 = [II]; 02 = [III]
$0088              Partner Subweapon Multiplier
$0089              Scanline Start
$008B              Conveyance
                            01 = Elevator/Frozen enemy; 02 = Scroll-locked right; 05 = Teeter-totter;
                            06 = Cogwheel; 07 = Mud; 08 = Waterfall; 09 = Waterfall w/current;
                            0a = Conveyor left; 0b = Conveyor right; 0d = Petrified; 0e = Auto-walk
$008C              Whip Spark Timer
$008D              Room Initialized
$008E              Trevor Weapon Level   
                            00 = short; 01 = medium; 02 = long
$008F              Partner Weapon Level
                            00 = one orb; 01 = two orbs; 03 = three orbs
$0090              Knockback Direction
                            00 = left; 01 = right
$0091              Conveyor (see $008B)
$0093              Cog Proximity
                            00 = none; 01 = right OR below; 02 = right AND below
$0094              Cog ID
$0095              Cogwheel Size
                            00 = small; 01 = large
$009C              Subweapon Kill Count (affects multiplier drops)
$009D              Variable Jump (for Grant)
$009E              Subweapon Iterator
$009F              Previous Game State
$00A0              Recent Player Direction (copy of $009E)
$00A1              Previous Player Direction (copy of $0062)
$00A3              Game Step Counter (only increments while game not paused)
$00A4              Map Transition Checkpoint
$00A5              Check Right Tile
$00AB              Stopwatch Active
$00AC              Stopwatch Timer
$00AD              Invincibility Potion Timer
$00AE              Alucard Bat Timer (drains 1 heart when decreased to 0)
$00AF              Landing Delay (prevents walking between elevators)
$00B0              Load Doppelganger Sprites (forces CHR updates)
$00B1              Current Instance (backup for X register)
$00B2              Rosary Flash Timer
$00B6              Tile Assembly Count Vertical (only for vertical rooms)
$00B7              Power Up (used for weapon upgrade)
$00B8              Current Platform (ID of elevator or frozen enemy)
$00B9              Crash Timer (stuns Player after falling too far)
$00BA              Boss Fight
$00BF              Faint Pause (pauses game when killed or time runs out)
$00C7              Thaw Timer (for frozen water)
$00C8              Horizontal Scroll Lock (used by crumbling bridge)
$00CA              Flood Height
$00CE              Weapon Kill Count (affects item drops)
$00CF              Previous Conveyance (backup of $0088)
$00D0              Vertical Ceiling (lowest y-coordinate in vertical room)
$00D2              Cogwheel ID Copy
$00D4              Cogwheel ID
$00E0       #02    Audio Current Note Address
$00E2       #02    Audio Redirect Address
  $00E2              Audio Data Temporary Variable
$00E4       #02    Audio Data 16-bit Variable
$00E6       #02    Audio Track Base Address
$00E8       #02    Audio Track Address
$00EA              Audio Channels to Load
$00EB              Audio Routine PROM Bank
$00EC       #02    Audio Current Period (i.e., pitch)
$00EE              Audio Current Channel
$00EF              Audio Track ID
$00F0       #04    Candle Status (32-bit mask)
$00F4       #04    Breakable Wall Status
                            00 = unused/unbroken; ff = broken
$00F8       #02    Previous Controller Buttons Pressed
$00FA       #02    Previous Controller Buttons Held
$00FC       #02    PPU Scroll
$00FE              PPU Mask (for hue shifts and greyscale)
$00FF              PPU Control 
       Audio channels: (grouped by 3, 5, or 7)
           00 = BGM Square 1; 021 = BGM Square 2; 02 = BGM Triangle;
           03 = SFX Square 1; 04 = SFX Square 2;
           05 = Drums (DCM & Noise); 06 = Noise
$0100       #07    Audio Channel Note Duration
$0107       #07    Audio Channel Song ID
$010E       #07    Audio Channel Next Note Duration
$0115       #07    Audio Channel Behavior
                             bit 0 = SFX (ignore ritenuto); bits 1-2 = init/decay/sustain/release; 
                             bit 3 = Al segno loop; bit 5 = coda loop; bit 6 = ignore envelope;
$011C       #07    Audio Channel Loop Count
$0123       #07    Audio Channel Note Address Low Byte
$012A       #07    Audio Channel Note Address High Byte
$0131       #07    Audio Channel Al Segno Address Low Byte
$0138       #07    Audio Channel Al Segno Address High Byte
$013F       #07    Audio Channel Coda Address Low Byte
$0146       #07    Audio Channel Coda Address High Byte
$014D       #07    Audio Channel Previous Period High Byte
  $0152              Audio Global Dampening (lowers volume for all channels)
$0154       #07    Audio Channel Volume
  $0159              Audio Global Fade Timer (decreases $017C after 2b steps)
$015B       #07    Audio Channel Next Control Value / Channel Dampening Placeholder
  $0160              Audio Global Fade Delay
$0162       #07    Audio Channel Default Duty Cycle
  $0167              Audio Global Mute for Pause
$0169       #05    Audio Channel Dampening (lowers volume for specific channel)
$016E       #05    Audio Channel Attributes
                             bit 4 = use waveform; bit 5 = alternate duty; bit 7 = disabled needs more info
$0173       #05    Audio Channel Pitch Bend Amount
$0178       #05    Audio Channel Period Low Byte Backup (useless?)
$017D       #03    Audio Channel Octave (raises octave by 5-n)
$0180       #03    Audio Channel Note Offset
                             (adds signed value to note ID to look up period)
$0183       #03    Audio Channel Period Low 
$0186       #03    Audio Channel Period High 
$0189       #03    Audio Channel Volume Envelope
                             (if bit 7 set, fade out instead based on bits 0-3)
$018C              Audio SFX Register Offset
$018D              Audio Global Ritenuto Delay (counts up to $018E)
$018E              Audio Global Ritenuto Cutoff (frames until $018F set)
$018F              Audio Global Ritenuto (prolongs BGM note duration when set)
$0190       #02    Audio SFX Square Sweep
$0192              Audio Current DPCM
$0193              Audio Triangle Staccato Timer
$0194              Audio Triangle Linear Counter (only used with $193)
$0195       #07    Audio Channel PROM Bank
$019C              Audio SFX Square 1 Sweep (write to $4001)
$0200      #100    OAM Data
$0300       #a0    Tile Data
$03C0       #03    Audio Channel Volume Envelope Duration
$03C3       #03    Audio Channel Volume Envelope Position
$03C6       #03    Audio Channel Volume Envelope Loop Count
$03C9       #03    Audio Channel Volume Envelope Loop Point
$03CC       #03    Audio Channel Fadeout Point (fades out when equal to $100,X)
$03CF       #03    Audio Channel Volume Envelope 
                             (bits 0-3 = value; $03CC = duration*value >> 4)
$03D2       #03    Audio Channel Next Fade Duration
$03D5       #03    Audio Channel Fade Duration
$03D8       #03    Audio Channel Alternate Duty Cycle
$03DB       #03    Audio Channel Next Pitchbend Duration
$03DE       #03    Audio Channel Pitchbend Duration
$03E1       #03    Audio Channel Sweep Rate
$0400       #1c    Sprite Frame Index
$041C       #1c    Y-Coordinate
$0438       #1c    X-Coordinate 
$0454       #1c    Pallet Offset
$0470       #1c    Attributes
                            01 = destroyed; 02 = frozen; 04 = unknown; 08 = flicker;
                            10 = illusory; 20 = inanimate; 40 = moving; 80 = invisible
$048C       #1c    Animation Batch (even numbers)
                            00-06 = Player; 08-12 = NPCs; 14 = Epilogue; 16-1C = Doppelganger
$04A8       #1C    Sprite Mirrored
$04C4       #17    X-Coordinate Subpixel
$04DB       #17    Y-Coordinate Subpixel
$04F2       #17    Horizontal Speed
$0509       #17    Horizontal Speed Subpixel
$0520       #17    Vertical Speed
$0537       #17    Vertical Speed Subpixel
$054E       #17    Object Index
$0565              Player State
$0566       #11    Stun Timer
$0578              Weapon State
$0579       #03    Subweapon State
$057C       #17    Animation Timer
$0593       #17    Sprite Frame (used to calculate $0400,X)
$05AA       #17    Sprite Index
$05C1              Moving Down
$05C2       #12    NPC State
$05D4              Player Stunned State
$05D5       #03    Subweapon Throw Delay
$05D8              Player Jump State
                             00-1D = Trevor/Syfa/Alucard; 1E-39 = Grant
$05D9       #0c    Boss Use
$05E5       #06    Candle Drop
                             83 = Axe; 84 = Cross; 85 = Dagger; 86 = Holy Water; 87 = Stopwatch;
                             88 = Syfa Fire; 89 = Syfa Ice; 8a = Syfa Water; 8b = Grant Dagger;
                             8c Grant Axe; 8d-8f = Upgrades (8f removed); 90 = Wall Meat; 
                             91 = Invincibility Potion; 92 = Rosary; 93-9b = Coins; 9c = 1UP; 
                             9d = Big Heart; 9e = Small Heart; 9f-a0 = Multipliers
$05EB              Stair Stun Timer
$05EF              Stair Direction
                   Grant Jump State Fraction (functions like speed variables)
$05F0       #12    AI Class (determines behavior)
$0602              Stair Stun (decreases $05EB)
$0606              Grant Gravity Subpixel (increases $05EF for Grant)
$0607       #12    State Timer (time between state changes for most NPCs)
                   Sinusoid Center Axis
$0619              Ally Swap Y-Coordinate
$061A       #03    Subweapon Damage and Multikill Count
$061D              Stair Timer (time to climb one step)
                   Grant Gravity (increases $05D8 for Grant)
$061E       #12    Miscellaneous Ticker (usually timer or counter for NPCs)
$0630              Weapon Damage
$0631       #03    Subweapon Deflection (copy of $0658,X on Cross hit)
$0634       #17    Miscellaneous Use (used by a couple NPCs)
$0646       #12    Spawner Index
$0658       #0d    NPC Damage
$0664       #06    Candle Active
$066A       #12    Applied Effect (copy of $061A,X on subweapon hit)
$067B       #12    NPC Hitpoints
$068E       #12    Weapons Impact
                             01 = weapon; 02 = subweapon 1; 04 = subweapon 2; 08 = subweapon 3
$06A0       #03    Audio Channel Pitch Envelope Loop Start
$06A3       #03    Audio Channel Pitch Envelope ID
$06A6       #03    Audio Channel Pitch Envelope Position
$06A9       #03    Audio Channel Pitch Envelope Loop Count
$06AC       #03    Audio Channel Sustain State (80 = disabled)
$06AF       #03    Audio Channel Sustain Position (from 0 to 3)
$06B2       #03    Audio Channel Sustain Dampen
$06B5       #04    Audio BGM Square 1 Sustain Period Low Bytes
$06B9       #04    Audio BGM Square 2 Sustain Period Low Bytes
$06BD       #04    Audio BGM Square 1 Sustain Period High Bytes
$06C1       #04    Audio BGM Square 2 Sustain Period High Bytes
$06C8              Boss Scream Time (stops DPCM at f0)
$06C9              Music Paused
$06E0       #90    Collision Map
                             00 = empty; 01 = mud; 02 = convey right; 03 = convey left;
                             04 = fragile; 05 = ceiling spike; 06 = solid; 07 = floor spike;
                             08 = ice; 0c-0f = cracking
$0770       #08    CHR5 Solid Definitions
                             Byte 0 = empty; Byte 1 = mud; Byte 2 = convey right; Byte 3 = convey left;
                             Byte 4 = fragile; Byte 5 = ceiling spike; Byte 6 = solid; Byte 7 = floor spike
$0778       #08    CHR6 Solid Definitions 
$0780              Background Animation Frame
  $0780            Entry Selector Column
  $0780            Map Clipping
                             00 = To Grant; 01 = To Syfa; 02 = From Alucard
$0781              Background Animation Timer
  $0781            Entry Selector Row
  $0781            Map Fade-out Value
$0782       #40    Fog Parallax Positions
                             32 rows of parallax with 2 bytes per row:
                             Byte 0 = subpixel offset; Byte 1 = pixel offset
  $0782            Previous Selector Column
  $0782            Map Timer
  $0782            Epilogue Ally
  $0782            Sypha's Frozen Tile Column
$0783              Previous Selector Row
  $0783            Map Horizontal Speed Subpixel
  $0783            Epilogue State
  $0783            Sypha's Frozen Tile Row
$0784              Name Cursor Position
  $0784            Map Horizontal Speed
  $0784            Castle Shake Direction
  $0784            Leftmost Frozen Tile Column
$0785              Map Vertical Speed Subpixel
  $0785            Epilogue Text Page
  $0785            Leftmost Frozen Tile Row
$0786              Password Icon
  $0786            Map Vertical Speed
  $0786            Rightmost Frozen Tile Column
$0787              Previous Password Icon
  $0787            Map Scroll Timer
  $0787            Rightmost Frozen Tile Row
$0788       #02    Password Decryption Dump
  $0788            Map X-coordinate Subpixel
  $0788            Epilogue Scroll Timer
  $0788            Water Freeze Counter
$0789              Map Y-coordinate Subpixel
  $0789            Frozen Water Room Type
$078A              Epilogue Timer
$078A              Map Path PPU Scroll
$078B              Map Path PPU Control
  $078B            Password Errors (used for debugging)
$078C       #02    Map Path PPU Address
$078C              Update Selector
$0790       #10    Entered Password
                             00 = empty; 01 = whip; 02 = cross; 03 = heart
$0790              Map Screen Platform
                             00 = full; 01 = short west; 02 = bottom east;
                             03 = top west; 04 = middle west; 05 = bottom west
$07A0       #0a    Generated Password
$07B1       #02    Stacked Breakable Wall
$07B3       #02    Lower Block Broken
$07B5       #02    Upper Block Broken
$07B7       #02    Wall ID (points to $00F4,X)
$07C2       #06    Spawner Type
$07C8       #06    Spawner State
$07CE       #06    Spawner Timer
$07D4       #06    Spawner Y-Coordinate
$07DA       #06    Spawner x-Coordinate
$07E0       #06    Spawner Offscreen
$07E6       #06    Spawner NPC Object
$07EC       #06    Bone Dragon King Frames (two ribs per byte)
$07EC              Cyclops Lightning State
                   Bone Dragon Cycle
                   Giant Bat Leader
                   Dracula Phase
                             00 = Dracula; 01 = demon; 02 = Pazuzu
$07ED              Victory State
                   Bone Dragon Mirrored
                   Collapsing Bridge Length
                   Giant Bat State
$07EE              Bone Dragon Fireball Timer
                   Death Scythe Count
$07EF              Bone Dragon Attacking
$07F3              Boss Phase
                             00 = boss fight; 01 = boss defeat; 02 = crystal drop;
                             03 = battle over; 80 = boss waiting
                   Victory Delay (timer after battle over)
$07F6              Hard Mode
$07F8       #08    Player Name


Address    Size    Description
--------   ----    -----------
$0018              System State
                            00 = Title; 02 = New Game; 03 = In-game Transition; 04 = In-Game;
                            05 = Game Over Transition; 06 = Game Over; 07 = Stage Select Debug;
                            08 = Map Screen; 09 = Prayer Scene; 0a = Name Entry; 0b = Password Entry;
                            0c = Epilogue; 0d = Credit Roll; 0e = Respawn; 0f = Sound Test Debug
$0019              System Substate
$001B              System Step Counter
$001D              Blackout Delay
$0020              Randomizer
$0021              PPU Bank (write to $B003)
$0022              OAM Batch
$0023              Current PROM Bank
$0024              Previous PROM Bank
$0025              PROM Bank Backup (used by some functions)
$0026              Bank Changed (for debugging probably)
$0028       #02    Controller Buttons Pressed
                            01 = right; 02 = left; 04 = down; 08 = up;
                            10 = start; 20 = select; 40 = B; 80 = A
$002A       #02    Controller Buttons Held
$002C              Game State (set $0068 to 00 before changing)
                            00 = initialize room; 01 = initialize nametables; 02 = load horizontal room;
                            03 = horizontal gameplay; 04 = load vertical room; 05 = vertical gameplay;
                            06 = stair transition start; 07 = stair transition fade; 08 = door transition;
                            09 = initialize fog; 0a = fog parallax; 0b = horizontal partner swap;
                            0c = vertical partner swap; 0d/0e = <CUT CONTENT>; 0f = detect automatic stairs;
                            10 = automatic stair transition; 11 = tally score; 12 = <UNUSED>;
                            13 = flee Aquarius; 14 = initialize flooding; 15 = load flood room;
                            16 = flood room gameplay; 17 = map transition; 18 = autowalk to door;
                            19 = powering up; 1a = freeze water; 1b = thaw ice; 1c = Bone King escape;
                            1d = Aquarius ruptured; 1e = initialize map transition; 1f = map transition exit
$002D              User Paused (toggled by Start button)
$002E              Boss Defeated 
$0030              Checkpoint (used for Password Entry)
$0031              Grant Defeated 
$0032       #02    System Effect Timer
$0034              Stage
$0035              Block
$0036              Room
$0037              Lives
$0038       #08    CHR Banks
$0040              IRQ Control
$0041       #02    IRQ Latch
$0043              Default Drawing State (write to $006A)
$0044       #03    Score
$0048              Partner   
                            00 = Trevor; 01 = Syfa; 02 = Grant; 03 = Alucard; ff = None
$0049              Partner Active
$004A              Player's Health
                            40 = full
$004B              Boss Health 
$004C              Score Target (for extra life)
$004D       #02    Tile Assembly Room Address
$004F       #02    Tile Assembly Left Address
$0051       #02    Tile Assembly Right Address
$0053       #02    View Position 
$0055              View Subpixel Position
$0056              Left Spawn Area
$0057              Right Spawn Area
$0058              Tile Assembly Count Left
$0059              Tile Assembly Count Right
$005A       #02    Tile Assembly Pointer
$005C       #02    Pallet Map Pointer
$005E       #02    Nametable Write Address
$0060              Tile Assembly ID
$0061              Transition Timer
$0062              Scroll Direction
                            00 = left; 01 = right; 02 = unchanged
$0063              View Refreshed Position
$0064              Update View
$0065              Room Orientation
                            00 = horizontal; 80 or 81 = vertical; 82 = scroll up;
                            83 = scroll down; 84 = collapse up; 85 = collapse down
$0066       #02    Stair Map Address
$0068              Game Substate
$0069              Current Instance (saves X register)
$006A              Drawing State
$006B              View Speed
$006C       #02    PPU Write Position
$006E              Room Size
$006F              CHR Write Mode
                            00 or 03 = all CHR banks; 01 = status bar banks;  02 = clear NPC banks
$0070              Previous Room Orientation
$0071              Music Loaded
$0072              Transition Nametable (nametable to use after door closes)
$0073              Horizontal Spawner Block
$0074              First Spawner Block
$0075              Boss Scroll Lock
$0076              Vertical Spawner Block
$0077              Vertical Spawner Previous (?)
$0078              Spawner Count
$007A              Room Type
                            10 = Stormclouds; 20 = Autowalk; 30 = River; 40 = Clockwork;
                            50 and 60 = Watery Grave; 70 = Flood Zone; 80 = Collapsing Bridge
                            Note: lower 4 bits alter behavior
$007B       #02    Time 
$007D              Wounded Timer (invincibility frames)
$007E              Damage Received/Effect On Player
$007F              PC Height
                            00 = Trevor standing; 01 = Syfa standing; 02 = Grant standing; 03 = Alucard standing;
                            04 = Trevor duck; 05 = Syfa duck; 06 = Grant duck; 07 = Alucard duck; 08 = Bat
$0081              Hearts
$0082              Trevor Subweapon
                            00 = none; 01 = axe; 02 = boomerang; 03 = knife/book; 04 = holy water; 05 = fireball; 
                            06 = freeze; 07 = orb; 08 = axe; 09 = boomerang; 0a = knife/book ;0b = clock
$0083              Partner Subweapon
$0084              Trevor Subweapon Multiplier   
                            00 = none; 01 = [II]; 02 = [III]
$0085              Partner Subweapon Multiplier
$0088              Conveyance
                            01 = Elevator/Frozen enemy; 02 = Scroll-locked right; 05 = Teeter-totter;
                            06 = Cogwheel; 07 = Mud; 08 = Waterfall; 09 = Waterfall w/current;
                            0a = Conveyor left; 0b = Conveyor right; 0d = Petrified; 0e = Auto-walk
$0089              Whip Spark Timer
$008A              Room Initialized
$008B              Trevor Weapon Level   
                            00 = short; 01 = medium; 02 = long
$008C              Partner Weapon Level
                            00 = one orb; 01 = two orbs; 03 = three orbs
$008D              Knockback Direction
                            00 = left; 01 = right
$008E              Conveyor (see $0088)
$0090              Cog Proximity
                            00 = none; 01 = right OR below; 02 = right AND below
$0091              Cog ID
$0092              Cogwheel Size
                            00 = small; 01 = large
$0099              Subweapon Kill Count (affects multiplier drops)
$009A              Variable Jump (for Grant)
$009B              Subweapon Iterator
$009C              Previous Game State
$009D              Recent Player Direction (copy of $009E)
$009E              Previous Player Direction (copy of $0062)
$00A0              Game Step Counter (only increments while game not paused)
$00A1              Map Transition Checkpoint
$00A2              Check Right Tile
$00A8              Stopwatch Active
$00A9              Stopwatch Timer
$00AA              Invincibility Potion Timer
$00AB              Alucard Bat Timer (drains 1 heart when decreased to 0)
$00AC              Landing Delay (prevents walking between elevators)
$00AD              Load Doppelganger Sprites (forces CHR updates)
$00AE              Current Instance (backup for X register)
$00AF              Rosary Flash Timer
$00B3              Tile Assembly Count Vertical (only for vertical rooms)
$00B4              Power Up (used for weapon upgrade)
$00B5              Current Platform (ID of elevator or frozen enemy)
$00B6              Crash Timer (stuns Player after falling too far)
$00B7              Boss Fight
$00BC              Faint Pause (pauses game when killed or time runs out)
$00C4              Thaw Timer (for frozen waters)
$00C5              Horizontal Scroll Lock (used by crumbling bridge)
$00C7              Flood Height
$00CB              Weapon Kill Count (affects item drops)
$00CC              Previous Conveyance (backup of $0088)
$00CD              Vertical Ceiling (lowest y-coordinate in vertical room)
$00CF              Cogwheel ID Copy
$00D1              Cogwheel ID
$00E0       #02    Audio Current Note Address
$00E2       #02    Audio Redirect Address
  $00E2              Audio Data Temporary Variable
$00E4       #02    Audio Data 16-bit Variable
$00E6       #02    Audio Track Base Address
$00E8       #02    Audio Track Address
$00EA              Audio Channels to Load
$00EB              Audio Routine PROM Bank
$00EC       #02    Audio Current Period (i.e., pitch)
$00EE              Audio Current Channel
$00EF              Audio Track ID
$00F0       #04    Candle Status (32-bit mask)
$00F4       #04    Breakable Wall Status
                            00 = unused/unbroken; ff = broken
$00F8       #02    Previous Controller Buttons Pressed
$00FA       #02    Previous Controller Buttons Held
$00FC       #02    PPU Scroll
$00FE              PPU Mask (for hue shifts and greyscale)
$00FF              PPU Control
       Audio channels: (grouped by 5, 7, or 9)
           00 = Pulse 1; 01 = Pulse 2; 02 = Sawtooth; 03 = BGM Square 1; 04 = BGM Square 2
           05 = SFX Square 1; 06 = SFX Square 2;
           07 = Drums (DCM & Noise); 08 = Noise
$0100       #09    Audio Channel Note Duration
$0109       #09    Audio Channel Song ID
$0112       #09    Audio Channel Next Note Duration
$011B       #09    Audio Channel Behavior
                             bit 0 = SFX (ignore ritenuto); bits 1-2 = init/decay/sustain/release; 
                             bit 3 = Al segno loop; bit 5 = coda loop; bit 6 = ignore envelope;
$0124       #09    Audio Channel Loop Count
$012D       #09    Audio Channel Note Address Low Byte
$0136       #09    Audio Channel Note Address High Byte
$013F       #09    Audio Channel Al Segno Address Low Byte
$0148       #09    Audio Channel Al Segno Address High Byte
$0151       #09    Audio Channel Coda Address Low Byte
$015A       #09    Audio Channel Coda Address High Byte
$0163       #09    Audio Channel Previous Period High Byte
  $016A              Audio Global Dampening (lowers volume for all channels)
$016C       #09    Audio Channel Volume
  $0173              Audio Global Fade Timer (decreases $017C after 2b steps)
$0175       #09    Audio Channel Next Control Value / Channel Dampening Placeholder
  $017C              Audio Global Fade Delay
$017E       #09    Audio Channel Default Duty Cycle
  $0185              Audio Global Mute for Pause
$0187       #07    Audio Channel Dampening (lowers volume for specific channel)
$018E       #07    Audio Channel Attributes
                             bit 4 = use waveform; bit 5 = alternate duty; bit 7 = disabled needs more info
$0195       #07    Audio Channel Pitch Bend Amount
$019C       #02    Audio SFX Square Sweep
$019E              Audio DPCM ID
$019F       #02    Audio Square Period Low Byte (write to $4002/$4006)
$01A3       #05    Audio Channel Octave (raises octave by 5-n)
$01A8       #05    Audio Channel Note Offset
                             (adds signed value to note ID to look up period)
$01AD       #05    Audio Channel Period Low 
$01B2       #05    Audio Channel Period High 
$01B7       #05    Audio Channel Volume Envelope
                             (if bit 7 set, fade out instead based on bits 0-3)
$01BC              Audio SFX Square Register Offset
$01BD              Audio Global Ritenuto Delay (counts up to $01BE)
$01BE              Audio Global Ritenuto Cutoff (frames until $01BF set)
$01BF              Audio Global Ritenuto (prolongs BGM note duration when set)
$0200      #100    OAM Data
$0300       #a0    Tile Data
$03C0       #05    Audio Channel Volume Envelope Duration
$03C5       #05    Audio Channel Volume Envelope Position
$03CA       #05    Audio Channel Volume Envelope Loop Count
$03CF       #05    Audio Channel Volume Envelope Loop Point
$03D4       #05    Audio Channel Fadeout Point (fades out when equal to $100,X)
$03D9       #05    Audio Channel Volume Envelope 
                             (bits 0-3 = value; $03D4 = duration*value >> 4)
$03DE       #05    Audio Channel Next Fade Duration
$03E3       #05    Audio Channel Fade Duration
$03E8       #05    Audio Channel Alternate Duty Cycle
$03ED       #05    Audio Channel Next Pitchbend Duration
$03F2       #05    Audio Channel Pitchbend Duration
$03F7       #05    Audio Channel Sweep Rate
$0400       #1c    Sprite Frame Index
$041C       #1c    Y-Coordinate
$0438       #1c    X-Coordinate 
$0454       #1c    Pallet Offset
$0470       #1c    Attributes
                             01 = destroyed; 02 = frozen; 04 = unknown; 08 = flicker;
                             10 = illusory; 20 = inanimate; 40 = moving; 80 = invisible
$048C       #1c    Animation Batch (even numbers)
                             00-06 = Player; 08-12 = NPCs; 14 = Epilogue; 16-1C = Doppelganger
$04A8       #1C    Sprite Mirrored
$04C4       #17    X-Coordinate Subpixel
$04DB       #17    Y-Coordinate Subpixel
$04F2       #17    Horizontal Speed
$0509       #17    Horizontal Speed Subpixel
$0520       #17    Vertical Speed
$0537       #17    Vertical Speed Subpixel
$054E       #17    Object Index
$0565              Player State
$0566       #11    Stun Timer
$0578              Weapon State
$0579       #03    Subweapon State
$057C       #17    Animation Timer
$0593       #17    Sprite Frame (used to calculate $0400,X)
$05AA       #17    Sprite Index
$05C1              Moving Down
$05C2       #12    NPC State
$05D4              Player Stunned State
$05D5       #03    Subweapon Throw Delay
$05D8              Player Jump State
                             00-1D = Trevor/Syfa/Alucard; 1E-39 = Grant
$05D9       #0c    Boss Use
$05E5       #06    Candle Drop
                             83 = Axe; 84 = Cross; 85 = Dagger; 86 = Holy Water; 87 = Stopwatch;
                             88 = Syfa Fire; 89 = Syfa Ice; 8a = Syfa Water; 8b = Grant Dagger;
                             8c Grant Axe; 8d-8f = Upgrades (8f removed); 90 = Wall Meat; 
                             91 = Invincibility Potion; 92 = Rosary; 93-9b = Coins; 9c = 1UP; 
                             9d = Big Heart; 9e = Small Heart; 9f-a0 = Multipliers
$05EB              Stair Stun Timer
$05EF              Stair Direction
                   Grant Jump State Fraction (functions like speed variables)
$05F0       #12    AI Class (determines behavior)
$0602              Stair Stun (decreases $05EB)
                   Freezing Rivers
                   Turning Into Bat
$0606              Grant Gravity Subpixel (increases $05EF for Grant)
$0607       #12    State Timer (time between state changes for most NPCs)
                   Sinusoid Center Axis
$0619              Ally Swap Y-Coordinate
$061A       #03    Subweapon Damage and Multikill Count
$061D              Stair Timer (time to climb one step)
                   Grant Gravity (increases $05D8 for Grant)
$061E       #12    Miscellaneous Ticker (usually timer or counter for NPCs)
$0630              Weapon Damage
$0631       #03    Subweapon Deflection (copy of $0658,X on Cross hit)
$0634       #17    Miscellaneous Use (used by a couple NPCs)
$0646       #12    Spawner Index
$0658       #0d    NPC Damage
$0664       #06    Candle Active
$066A       #12    Applied Effect (copy of $061A,X on subweapon hit)
$067B       #12    NPC Hitpoints
$068E       #12    Weapons Impact
                             01 = weapon; 02 = subweapon 1; 04 = subweapon 2; 08 = subweapon 3
$06A0       #05    Audio Channel Pitch Envelope Loop Start
$06A5       #05    Audio Channel Pitch Envelope ID
$06AA       #05    Audio Channel Pitch Envelope Position
$06AF       #05    Audio Channel Pitch Envelope Loop Count
$06B4       #05    Audio Channel Sustain State
$06B9       #05    Audio Channel Sustain Position (from 0 to 3)
$06BE       #05    Audio Channel Sustain Dampen
$06C3       #04    Audio BGM Square 1 Sustain Period Low Bytes
$06C7       #04    Audio BGM Square 2 Sustain Period Low Bytes
$06CB       #04    Audio BGM Square 1 Sustain Period High Bytes
$06CF       #04    Audio BGM Square 2 Sustain Period High Bytes
$06D3       #09    Audio Channel PROM Bank
$06DC              Music Paused
$06DD              Boss Scream Duration stops DPCM playback
$06E0       #90    Collision Map
                             00 = empty; 01 = mud; 02 = convey right; 03 = convey left;
                             04 = fragile; 05 = ceiling spike; 06 = solid; 07 = floor spike;
                             08 = ice; 0c-0f = cracking
$0770       #08    CHR5 Solid Definitions
                             Byte 0 = empty; Byte 1 = mud; Byte 2 = convey right; Byte 3 = convey left;
                             Byte 4 = fragile; Byte 5 = ceiling spike; Byte 6 = solid; Byte 7 = floor spike
$0778       #08    CHR6 Solid Definitions
$0780              Background Animation Frame
$0781              Background Animation Timer
$0782              Epilogue Ally
$0783              Epilogue State
$0784              Castle Shake
$0785              Epilogue Text Page
$0780              Entry Selector Column
  $0780            Entry Selector Column
  $0780            Map Clipping
                             00 = To Grant; 01 = To Syfa; 02 = From Alucard
$0781              Background Animation Timer
  $0781            Entry Selector Row
  $0781            Map Fade-out Value
$0782       #40    Fog Parallax Positions
                             32 rows of parallax with 2 bytes per row:
                             Byte 0 = subpixel offset; Byte 1 = pixel offset
  $0782            Previous Selector Column
  $0782            Map Timer
  $0782            Epilogue Ally
  $0782            Sypha's Frozen Tile Column
$0783              Previous Selector Row
  $0783            Map Horizontal Speed Subpixel
  $0783            Epilogue State
  $0783            Sypha's Frozen Tile Row
$0784              Name Cursor Position
  $0784            Map Horizontal Speed
  $0784            Castle Shake Direction
  $0784            Leftmost Frozen Tile Column
$0785              Map Vertical Speed Subpixel
  $0785            Epilogue Text Page
  $0785            Leftmost Frozen Tile Row
$0786              Password Icon
  $0786            Map Vertical Speed
  $0786            Rightmost Frozen Tile Column
$0787              Previous Password Icon
  $0787            Map Scroll Timer
  $0787            Rightmost Frozen Tile Row
$0788       #02    Password Decryption Dump
  $0788            Map X-coordinate Subpixel
  $0788            Epilogue Scroll Timer
  $0788            Water Freeze Counter
$0789              Map Y-coordinate Subpixel
  $0789            Frozen Water Room Type
$078A              Epilogue Timer
  $078A            Map Path PPU Scroll
$078B              Map Path PPU Control
  $078B            Password Errors (used for debugging)
$078C       #02    Map Path PPU Address
$078C              Update Selector
$0790       #10    Entered Password
                             00 = empty; 01 = whip; 02 = cross; 03 = heart
$0790              Map Screen Platform
                             00 = full; 01 = short west; 02 = bottom east;
                             03 = top west; 04 = middle west; 05 = bottom west
$07A0       #0a    Generated Password
$07B1       #02    Stacked Breakable Wall
$07B3       #02    Lower Block Broken
$07B5       #02    Upper Block Broken
$07B7       #02    Wall ID (points to $00F4,X)
$07C2       #06    Spawner Type
$07C8       #06    Spawner State
$07CE       #06    Spawner Timer
$07D4       #06    Spawner Y-Coordinate
$07DA       #06    Spawner x-Coordinate
$07E0       #06    Spawner Offscreen
$07E6       #06    Spawner NPC Object
$07EC       #06    Bone Dragon King Frames (two ribs per byte)
$07EC              Cyclops Lightning State
                   Bone Dragon Cycle
                   Giant Bat Leader
                   Dracula Phase
                             00 = Dracula; 01 = demon; 02 = Pazuzu
$07ED              Victory State
                   Bone Dragon Mirrored
                   Collapsing Bridge Length
                   Giant Bat State
$07EE              Bone Dragon Fireball Timer
                   Death Scythe Count
$07EF              Bone Dragon Attacking
$07F3              Boss Phase
                             00 = boss fight; 01 = boss defeat; 02 = crystal drop;
                             03 = battle over; 80 = boss waiting
                   Victory Delay (timer after battle over)
$07F6              Hard Mode
$07F8       #08    Player Name


Internal Data for Castlevania III

ROM MapRAM MapText TableNotesTutorials