BTW. Looking at all these notes so far it looks like converting the game back the CV1 game play wouldn't be too terribly hard. I'd just have to create a hand full of new objects.
The whip is controlled by a single byte, so it's easy to just increment it's value when it touches a certain object. I'd have to make it switch back to the leather whip when you die, but even that isn't difficult at all. And it seems like there's tons of space to work with.
If you guys want to see something funny set $0434 in RAM to $05. It actually works as an attack, but you have to be very close to enemies to land any hits. On the other hand, using this "whip" is very fast. ^_^
Anyways, here's a preliminary RAM map for the game based on all the data that was posted:
Code:
RAM Address Description
----------- -----------
$0004 Controller #1 full status
$0005 Controller #2 full status
$0013 Whip damage???
$001A NMI_Flag (If set, NMI exits right away.)
$0022 X Screen pointer during PPU write ops
#VRAM_BW_Index#
$0030 Type of Area (controls object set)
$00=Town
$01=Mansion (Including entrance screen)
$02=Overworld
$03=Unknown/Unused?
$04=Unknown/Unused?
$05=Unknown/Unused?
Higher values seem to be junk.
$0031 Lives
$0034 Dead status boolean
| $00=Alive
| $01=Dead (any value greater than $00 works)
+-------------->[could be useful for making new statuses?]
$0046 Experience low byte (decimal, 10s & 1s)
$0047 Experience high byte (decimal, 1000s & 100s)
$0048 Hearts low byte (decimal, 10s & 1s)
$0049 Hearts high byte (decimal, 1000s & 100s)
$004A Sub-weapons:
%0000 0000 $00=none
%0000 0001 $01=Dagger
%0000 0010 $02=Silver Dagger
%0000 0100 $04=Golden Knife
%0000 1000 $08=Holy Water
%0001 0000 $10=Rebound Crystal
%0010 0000 $20=Sacred Flame
%0100 0000 $40=Oak Stake
%1000 0000 $80=Unused?
$004C Current amount of Laurels (must set enable bit @ $92)
$004D Current amount of Garlics (must set enable bit of $92)
$004F Currently selected relic
$00=none
$01=Dracula's Rib
$02=Dracula's Heart
$03=Dracula's Eye
$04=Dracula's Claw
$05=Dracula's Ring
$06=Crytals
$07=Unknown/Unused? (The selection cursor will appear in the blank spot at the end,
but it is unknown if selecting this item has an effect. Higher values seem to have no
effect.)
$0050 area # (within type, see $30) (controls map#)
$0053 ??? Position Fine X
$0054 ??? Current Map Screen X
$0056 ??? Position Fine Y
$0057 ??? Current Map Screen Y
$0080 Simon's Current Health
$0081 Simon's Max Health
$0082 Time of Day
$00=day
$01=night
$0083 Days (dec)
$0084 Seconds (hex)
$0085 Minutes (dec)
$0086 Hours (dec)
$0087 Counter ($30, $20, $10, $F0, $10, $20, $30)
$008A Experience Level
$0090 Currently selected sub-Weapon
$00=none
$01=Dagger
$02=Silver Dagger
$03=Golden Knife
$04=Holy Water
$05=Rebound Crystal
$06=Sacred Flame
$07=Oak Stake
$08=Laurels
$09=Garlic (Higher values seem to crash game.)
$0091 Relics:
%0000 0000 $00=none
%0000 0001 $01=Dracula's Rib
%0000 0010 $02=Dracula's Heart
%0000 0100 $04=Dracula's Eye
%0000 1000 $08=Dracula's Claw
%0001 0000 $10=Dracula's Ring
%0010 0000 $20=White Crystal
%0100 0000 $40=Blue Crystal
%1000 0000 $80=Red Crystal
$0092 Misc:
%0000 0000 $00=none
%0000 0001 $01=Silk Bag
%0000 0010 $02=Magic Cross
%0000 0100 $04=Laurels
%0000 1000 $08=Garlic
%0001 0000 $10=unused?
%0010 0000 $20=unused?
%0100 0000 $40=unused?
%1000 0000 $80=unused?
$0093 Used in number-to-gfx operations
$00F1 Current input
$00=null
$01=right
$02=left
$04=down
$08=up
$10=start
$20=select
$40=B
$80=A
$00FC PPU vertical Scrolling
$00FD PPU horizontal Scrolling
$00FE PPU MASK $2001
$00FF PPU CTRL $2002
$0100 MMC1, Register #1
$0101 MMC1, Register #2
$0102 MMC1, Register #3
$0103 MMC1, Bank
$0197 Laurel effect boolean
$0200/FF Sprite data for DMA transfers
$0324 Simon's Y pos
$032A Screen's Y pos
$0348 Simon's X pos
$034E Screen's X pos
$034X Enemies' X location
$0434 Currently equiped whip
| $00=Leather Whip
| $01=Thorn Whip
| $02=Chain Whip
| $03=Morning Star
| $04=Flame Whip
| $05=Bare Fist (works with any value greater than $04)
+-------------->[might be fun to make a quick hard mode hack with value $05!!]
$04CX Enemies's HP
$04C8 Grim Reaper's current health
$0700/FF On screen data (BG), #VRAM_Bulk_Writes#
$2000 #PPU_ControlRegister1#
$2001 #PPU_ControlRegister2#
$2002 #PPU_StatusRegister#
$2003 #SPR_AddressRegister#
$2004 #SPR_InputOutput#
$2005 #PPU_Scrolling#
$2006 #PPU_Address#
$2007 #PPU_InputOutput#
$4014 #PPU_SpriteDMA#
$4016 #Joypad1#
$4017 #Joypad2#
$8000 #MMC1_Conf0#
$BFFF #MMC1_Conf1#
$C000 #MMC1_Conf2#
$FFFF #MMC1_Bank#
$C895/01 #BGPalettes_PtrTbl#
$C82E #LoadPalette_Init#Initializes VRAM Bulk write buffer. Parameters: A = palette index
$C046 #NMI#Non-maskable interrupt
$C0D8 #ResetPPU#
$C183 #MMC1_LoadBank#Parameters: A = bank #
$C140 #MMC1_Setup#
$C0B8 #VRAM_Setup_NameTable0#
$C7FD #LoadAreaPalettes#Series of calls that load several palettes,
corresponding to a new area.
$C88C #Write_to_VRAM_BW#Parameters: A = value
$C839 #LoadPalette_NoInit#Parameters: A = palette index
$C453 #ReadControllers#
$CB69 #VRAM_BulkWrite#Writes data to VRAM using the following format:
\\[PPU-Reg1 Settings] [VRAM Address] [DATA] [#FF]
\\[#FF] [#00] indicates end of stream.
\\The data is read from $700-$7FF
----------- -----------
$0004 Controller #1 full status
$0005 Controller #2 full status
$0013 Whip damage???
$001A NMI_Flag (If set, NMI exits right away.)
$0022 X Screen pointer during PPU write ops
#VRAM_BW_Index#
$0030 Type of Area (controls object set)
$00=Town
$01=Mansion (Including entrance screen)
$02=Overworld
$03=Unknown/Unused?
$04=Unknown/Unused?
$05=Unknown/Unused?
Higher values seem to be junk.
$0031 Lives
$0034 Dead status boolean
| $00=Alive
| $01=Dead (any value greater than $00 works)
+-------------->[could be useful for making new statuses?]
$0046 Experience low byte (decimal, 10s & 1s)
$0047 Experience high byte (decimal, 1000s & 100s)
$0048 Hearts low byte (decimal, 10s & 1s)
$0049 Hearts high byte (decimal, 1000s & 100s)
$004A Sub-weapons:
%0000 0000 $00=none
%0000 0001 $01=Dagger
%0000 0010 $02=Silver Dagger
%0000 0100 $04=Golden Knife
%0000 1000 $08=Holy Water
%0001 0000 $10=Rebound Crystal
%0010 0000 $20=Sacred Flame
%0100 0000 $40=Oak Stake
%1000 0000 $80=Unused?
$004C Current amount of Laurels (must set enable bit @ $92)
$004D Current amount of Garlics (must set enable bit of $92)
$004F Currently selected relic
$00=none
$01=Dracula's Rib
$02=Dracula's Heart
$03=Dracula's Eye
$04=Dracula's Claw
$05=Dracula's Ring
$06=Crytals
$07=Unknown/Unused? (The selection cursor will appear in the blank spot at the end,
but it is unknown if selecting this item has an effect. Higher values seem to have no
effect.)
$0050 area # (within type, see $30) (controls map#)
$0053 ??? Position Fine X
$0054 ??? Current Map Screen X
$0056 ??? Position Fine Y
$0057 ??? Current Map Screen Y
$0080 Simon's Current Health
$0081 Simon's Max Health
$0082 Time of Day
$00=day
$01=night
$0083 Days (dec)
$0084 Seconds (hex)
$0085 Minutes (dec)
$0086 Hours (dec)
$0087 Counter ($30, $20, $10, $F0, $10, $20, $30)
$008A Experience Level
$0090 Currently selected sub-Weapon
$00=none
$01=Dagger
$02=Silver Dagger
$03=Golden Knife
$04=Holy Water
$05=Rebound Crystal
$06=Sacred Flame
$07=Oak Stake
$08=Laurels
$09=Garlic (Higher values seem to crash game.)
$0091 Relics:
%0000 0000 $00=none
%0000 0001 $01=Dracula's Rib
%0000 0010 $02=Dracula's Heart
%0000 0100 $04=Dracula's Eye
%0000 1000 $08=Dracula's Claw
%0001 0000 $10=Dracula's Ring
%0010 0000 $20=White Crystal
%0100 0000 $40=Blue Crystal
%1000 0000 $80=Red Crystal
$0092 Misc:
%0000 0000 $00=none
%0000 0001 $01=Silk Bag
%0000 0010 $02=Magic Cross
%0000 0100 $04=Laurels
%0000 1000 $08=Garlic
%0001 0000 $10=unused?
%0010 0000 $20=unused?
%0100 0000 $40=unused?
%1000 0000 $80=unused?
$0093 Used in number-to-gfx operations
$00F1 Current input
$00=null
$01=right
$02=left
$04=down
$08=up
$10=start
$20=select
$40=B
$80=A
$00FC PPU vertical Scrolling
$00FD PPU horizontal Scrolling
$00FE PPU MASK $2001
$00FF PPU CTRL $2002
$0100 MMC1, Register #1
$0101 MMC1, Register #2
$0102 MMC1, Register #3
$0103 MMC1, Bank
$0197 Laurel effect boolean
$0200/FF Sprite data for DMA transfers
$0324 Simon's Y pos
$032A Screen's Y pos
$0348 Simon's X pos
$034E Screen's X pos
$034X Enemies' X location
$0434 Currently equiped whip
| $00=Leather Whip
| $01=Thorn Whip
| $02=Chain Whip
| $03=Morning Star
| $04=Flame Whip
| $05=Bare Fist (works with any value greater than $04)
+-------------->[might be fun to make a quick hard mode hack with value $05!!]
$04CX Enemies's HP
$04C8 Grim Reaper's current health
$0700/FF On screen data (BG), #VRAM_Bulk_Writes#
$2000 #PPU_ControlRegister1#
$2001 #PPU_ControlRegister2#
$2002 #PPU_StatusRegister#
$2003 #SPR_AddressRegister#
$2004 #SPR_InputOutput#
$2005 #PPU_Scrolling#
$2006 #PPU_Address#
$2007 #PPU_InputOutput#
$4014 #PPU_SpriteDMA#
$4016 #Joypad1#
$4017 #Joypad2#
$8000 #MMC1_Conf0#
$BFFF #MMC1_Conf1#
$C000 #MMC1_Conf2#
$FFFF #MMC1_Bank#
$C895/01 #BGPalettes_PtrTbl#
$C82E #LoadPalette_Init#Initializes VRAM Bulk write buffer. Parameters: A = palette index
$C046 #NMI#Non-maskable interrupt
$C0D8 #ResetPPU#
$C183 #MMC1_LoadBank#Parameters: A = bank #
$C140 #MMC1_Setup#
$C0B8 #VRAM_Setup_NameTable0#
$C7FD #LoadAreaPalettes#Series of calls that load several palettes,
corresponding to a new area.
$C88C #Write_to_VRAM_BW#Parameters: A = value
$C839 #LoadPalette_NoInit#Parameters: A = palette index
$C453 #ReadControllers#
$CB69 #VRAM_BulkWrite#Writes data to VRAM using the following format:
\\[PPU-Reg1 Settings] [VRAM Address] [DATA] [#FF]
\\[#FF] [#00] indicates end of stream.
\\The data is read from $700-$7FF