diff options
-rw-r--r-- | constants.asm | 3 | ||||
-rw-r--r-- | constants/gfx_constants.asm | 9 | ||||
-rw-r--r-- | hram.asm | 526 | ||||
-rw-r--r-- | layout.link | 6 | ||||
-rwxr-xr-x | scripts/RocketHideoutB2F.asm | 4 | ||||
-rw-r--r-- | vram.asm | 44 | ||||
-rwxr-xr-x | wram.asm | 5 |
7 files changed, 329 insertions, 268 deletions
diff --git a/constants.asm b/constants.asm index f52af60d..3d428283 100644 --- a/constants.asm +++ b/constants.asm @@ -2,9 +2,6 @@ INCLUDE "charmap.asm" INCLUDE "macros.asm" -INCLUDE "hram.asm" -INCLUDE "vram.asm" - INCLUDE "constants/hardware_constants.asm" INCLUDE "constants/oam_constants.asm" INCLUDE "constants/misc_constants.asm" diff --git a/constants/gfx_constants.asm b/constants/gfx_constants.asm index 0cc0d98d..6446a51f 100644 --- a/constants/gfx_constants.asm +++ b/constants/gfx_constants.asm @@ -20,3 +20,12 @@ SPRITEBUFFERSIZE EQU 7 * 7 * LEN_1BPP_TILE HP_BAR_GREEN EQU 0 HP_BAR_YELLOW EQU 1 HP_BAR_RED EQU 2 + +; hAutoBGTransferEnabled +TRANSFERTOP EQU 0 +TRANSFERMIDDLE EQU 1 +TRANSFERBOTTOM EQU 2 + +; hRedrawRowOrColumnMode +REDRAW_COL EQU 1 +REDRAW_ROW EQU 2 @@ -1,370 +1,404 @@ -hDMARoutine EQU $FF80 +SECTION "HRAM", HRAM + +hDMARoutine:: ds 10 -hSoftReset EQU $FF8A ; Initialized to 16. ; Decremented each input iteration if the player ; presses the reset sequence (A+B+SEL+START). ; Soft reset when 0 is reached. +hSoftReset:: db -; base tile ID to which offsets are added -hBaseTileID EQU $FF8B - -; 3-byte BCD number -hItemPrice EQU $FF8B - -hDexWeight EQU $FF8B - -hWarpDestinationMap EQU $FF8B - -hOAMTile EQU $FF8B - -hROMBankTemp EQU $FF8B - -hPreviousTileset EQU $FF8B - -hEastWestConnectedMapWidth EQU $FF8B - -hSlideAmount EQU $FF8B +UNION +hBaseTileID:: ; base tile ID to which offsets are added +hDexWeight:: +hWarpDestinationMap:: +hOAMTile:: +hROMBankTemp:: +hPreviousTileset:: +hRLEByteValue:: + db -hRLEByteValue EQU $FF8B +hSpriteIndexOrTextID:: ; DisplayTextID's argument +hPartyMonIndex:: + db -hSpriteWidth EQU $FF8B ; in tiles -hSpriteInterlaceCounter EQU $FF8B -hSpriteHeight EQU $FF8C ; in tiles -hSpriteOffset EQU $FF8D +hVRAMSlot:: + db -; counters for blinking down arrow -hDownArrowBlinkCount1 EQU $FF8B -hDownArrowBlinkCount2 EQU $FF8C - -hSpriteDataOffset EQU $FF8B -hSpriteIndex EQU $FF8C - -hMapStride EQU $FF8B -hMapWidth EQU $FF8C +hFourTileSpriteCount:: +hHalveItemPrices:: + db -hNorthSouthConnectionStripWidth EQU $FF8B -hNorthSouthConnectedMapWidth EQU $FF8C +NEXTU +hItemPrice:: ds 3 ; BCD number -; DisplayTextID's argument -hSpriteIndexOrTextID EQU $FF8C - -hPartyMonIndex EQU $FF8C +NEXTU +hSlideAmount:: db ; the total number of tiles being shifted each time the pic slides by one tile -hSlidingRegionSize EQU $FF8C - -; 2 bytes -hEnemySpeed EQU $FF8D - -hVRAMSlot EQU $FF8D - -hFourTileSpriteCount EQU $FF8E +hSlidingRegionSize:: db ; -1 = left ; 0 = right -hSlideDirection EQU $FF8D - -hSpriteFacingDirection EQU $FF8D - -hSpriteMovementByte2 EQU $FF8D - -hSpriteImageIndex EQU $FF8D - -hLoadSpriteTemp1 EQU $FF8D -hLoadSpriteTemp2 EQU $FF8E - -hHalveItemPrices EQU $FF8E - -hSpriteOffset2 EQU $FF8F - -hOAMBufferOffset EQU $FF90 - -hSpriteScreenX EQU $FF91 -hSpriteScreenY EQU $FF92 - -hFF8F EQU $FF8F -hFF90 EQU $FF90 -hFF91 EQU $FF91 -hFF92 EQU $FF92 - -hTilePlayerStandingOn EQU $FF93 - -hSpritePriority EQU $FF94 - -; 2 bytes -hSignCoordPointer EQU $FF95 - -hNPCMovementDirections2Index EQU $FF95 - -hSwapItemID EQU $FF95 -hSwapItemQuantity EQU $FF96 - -; CalcPositionOfPlayerRelativeToNPC -hNPCSpriteOffset EQU $FF95 - -; temp value used when swapping bytes or words -hSwapTemp EQU $FF95 - -hExperience EQU $FF96 ; 3 bytes, big endian - -hMutateWY EQU $FF96 -hMutateWX EQU $FF97 - -; Multiplication and division variables are meant -; to overlap for back-to-back usage. Big endian. +hSlideDirection:: db -hMultiplicand EQU $FF96 ; 3 bytes -hMultiplier EQU $FF99 ; 1 byte -hProduct EQU $FF95 ; 4 bytes - -hDividend EQU $FF95 ; 4 bytes -hDivisor EQU $FF99 ; 1 byte -hQuotient EQU $FF95 ; 4 bytes -hRemainder EQU $FF99 ; 1 byte - -hDivideBuffer EQU $FF9A - -hMultiplyBuffer EQU $FF9B +NEXTU +hSpriteInterlaceCounter:: +hSpriteWidth:: db ; in tiles +hSpriteHeight:: db ; in tiles +hSpriteOffset:: db +NEXTU +; counters for blinking down arrow +hDownArrowBlinkCount1:: db +hDownArrowBlinkCount2:: db + +NEXTU +hMapStride:: +hEastWestConnectedMapWidth:: +hNorthSouthConnectionStripWidth:: + db +hMapWidth:: +hNorthSouthConnectedMapWidth:: + db + +NEXTU +hSpriteDataOffset:: db +hSpriteIndex:: db +hSpriteImageIndex:: +hSpriteFacingDirection:: +hSpriteMovementByte2:: + db + +NEXTU + ds 2 +hLoadSpriteTemp1:: db +hLoadSpriteTemp2:: db + +NEXTU + ds 2 +hEnemySpeed:: dw +ENDU + +UNION +hSpriteOffset2:: db +hOAMBufferOffset:: db +hSpriteScreenX:: db +hSpriteScreenY:: db + +NEXTU +hFF8F:: db +hFF90:: db +hFF91:: db +hFF92:: db +ENDU + +hTilePlayerStandingOn:: db + +hSpritePriority:: db + +UNION +;; Multiplication and division variables are meant +;; to overlap for back-to-back usage. Big endian. +UNION + ds 1 +hMultiplicand:: ds 3 +hMultiplier:: db + ds 1 +hMultiplyBuffer:: ds 4 +NEXTU +hProduct:: ds 4 +NEXTU +hDividend:: ds 4 +hDivisor:: db +hDivideBuffer:: ds 5 +NEXTU +hQuotient:: ds 4 +hRemainder:: db +ENDU + +NEXTU ; PrintNumber (big endian). -hPastLeadingZeros EQU $FF95 ; last char printed -hNumToPrint EQU $FF96 ; 3 bytes -hPowerOf10 EQU $FF99 ; 3 bytes -hSavedNumToPrint EQU $FF9C ; 3 bytes - +hPastLeadingZeros:: db ; last char printed +hNumToPrint:: ds 3 +hPowerOf10:: ds 3 +hSavedNumToPrint:: ds 3 + +NEXTU +hNPCMovementDirections2Index:: +hNPCSpriteOffset:: ; distance in steps between NPC and player -hNPCPlayerYDistance EQU $FF95 -hNPCPlayerXDistance EQU $FF96 - -hFindPathNumSteps EQU $FF97 - +hNPCPlayerYDistance:: + db +hNPCPlayerXDistance:: + db +hFindPathNumSteps:: db ; bit 0: set when the end of the path's Y coordinate matches the target's ; bit 1: set when the end of the path's X coordinate matches the target's ; When both bits are set, the end of the path is at the target's position ; (i.e. the path has been found). -hFindPathFlags EQU $FF98 - -hFindPathYProgress EQU $FF99 -hFindPathXProgress EQU $FF9A - +hFindPathFlags:: db +hFindPathYProgress:: db +hFindPathXProgress:: db ; 0 = from player to NPC ; 1 = from NPC to player -hNPCPlayerRelativePosPerspective EQU $FF9B - +hNPCPlayerRelativePosPerspective:: db + ds 1 ; bit 0: ; 0 = target is to the south or aligned ; 1 = target is to the north ; bit 1: ; 0 = target is to the east or aligned ; 1 = target is to the west -hNPCPlayerRelativePosFlags EQU $FF9D - -; some code zeroes this for no reason when writing a coin amount -hUnusedCoinsByte EQU $FF9F - -hMoney EQU $FF9F ; 3-byte BCD number -hCoins EQU $FFA0 ; 2-byte BCD number - -hDivideBCDDivisor EQU $FFA2 ; 3-byte BCD number -hDivideBCDQuotient EQU $FFA2 ; 3-byte BCD number -hDivideBCDBuffer EQU $FFA5 ; 3-byte BCD number +hNPCPlayerRelativePosFlags:: db -hSerialReceivedNewData EQU $FFA9 - -; $01 = using external clock -; $02 = using internal clock -; $ff = establishing connection -hSerialConnectionStatus EQU $FFAA +NEXTU +hSwapItemID:: db +hSwapItemQuantity:: db -hSerialIgnoringInitialData EQU $FFAB +NEXTU +hSignCoordPointer:: dw -hSerialSendData EQU $FFAC +NEXTU + ds 1 +hMutateWY:: db +hMutateWX:: db -hSerialReceiveData EQU $FFAD +NEXTU +; temp value used when swapping bytes or words +hSwapTemp:: db +hExperience:: ds 3 ; big endian +ENDU -; these values are copied to SCX, SCY, and WY during V-blank -hSCX EQU $FFAE -hSCY EQU $FFAF -hWY EQU $FFB0 +UNION +hMoney:: ds 3 ; BCD number +NEXTU +; some code zeroes this for no reason when writing a coin amount +hUnusedCoinsByte:: db +hCoins:: ds 2 ; BCD number +ENDU -hJoyLast EQU $FFB1 -hJoyReleased EQU $FFB2 -hJoyPressed EQU $FFB3 -hJoyHeld EQU $FFB4 -hJoy5 EQU $FFB5 -hJoy6 EQU $FFB6 -hJoy7 EQU $FFB7 +hDivideBCDDivisor:: +hDivideBCDQuotient:: + ds 3 ; BCD number +hDivideBCDBuffer:: + ds 3 ; BCD number -hLoadedROMBank EQU $FFB8 + ds 1 -hSavedROMBank EQU $FFB9 +hSerialReceivedNewData:: db +; $01 = using external clock +; $02 = using internal clock +; $ff = establishing connection +hSerialConnectionStatus:: db +hSerialIgnoringInitialData:: db +hSerialSendData:: db +hSerialReceiveData:: db + +; these values are copied to rSCX, rSCY, and rWY during V-blank +hSCX:: db +hSCY:: db +hWY:: db + +hJoyLast:: db +hJoyReleased:: db +hJoyPressed:: db +hJoyHeld:: db +hJoy5:: db +hJoy6:: db +hJoy7:: db + +hLoadedROMBank:: db +hSavedROMBank:: db ; is automatic background transfer during V-blank enabled? ; if nonzero, yes ; if zero, no -hAutoBGTransferEnabled EQU $FFBA - -TRANSFERTOP EQU 0 -TRANSFERMIDDLE EQU 1 -TRANSFERBOTTOM EQU 2 +hAutoBGTransferEnabled:: db ; 00 = top third of background ; 01 = middle third of background ; 02 = bottom third of background -hAutoBGTransferPortion EQU $FFBB +hAutoBGTransferPortion:: db ; the destination address of the automatic background transfer -hAutoBGTransferDest EQU $FFBC ; 2 bytes +hAutoBGTransferDest:: dw -hRedrawMapViewRowOffset EQU $FFBE +hRedrawMapViewRowOffset:: db ; temporary storage for stack pointer during memory transfers that use pop ; to increase speed -hSPTemp EQU $FFBF ; 2 bytes +hSPTemp:: dw ; source address for VBlankCopyBgMap function ; the first byte doubles as the byte that enabled the transfer. ; if it is 0, the transfer is disabled ; if it is not 0, the transfer is enabled ; this means that XX00 is not a valid source address -hVBlankCopyBGSource EQU $FFC1 ; 2 bytes +hVBlankCopyBGSource:: dw ; destination address for VBlankCopyBgMap function -hVBlankCopyBGDest EQU $FFC3 ; 2 bytes +hVBlankCopyBGDest:: dw ; number of rows for VBlankCopyBgMap to copy -hVBlankCopyBGNumRows EQU $FFC5 +hVBlankCopyBGNumRows:: db ; size of VBlankCopy transfer in 16-byte units -hVBlankCopySize EQU $FFC6 +hVBlankCopySize:: db ; source address for VBlankCopy function -hVBlankCopySource EQU $FFC7 +hVBlankCopySource:: dw ; destination address for VBlankCopy function -hVBlankCopyDest EQU $FFC9 +hVBlankCopyDest:: dw ; size of source data for VBlankCopyDouble in 8-byte units -hVBlankCopyDoubleSize EQU $FFCB +hVBlankCopyDoubleSize:: db ; source address for VBlankCopyDouble function -hVBlankCopyDoubleSource EQU $FFCC +hVBlankCopyDoubleSource:: dw ; destination address for VBlankCopyDouble function -hVBlankCopyDoubleDest EQU $FFCE +hVBlankCopyDoubleDest:: dw ; controls whether a row or column of 2x2 tile blocks is redrawn in V-blank ; 00 = no redraw ; 01 = redraw column ; 02 = redraw row -hRedrawRowOrColumnMode EQU $FFD0 - -REDRAW_COL EQU 1 -REDRAW_ROW EQU 2 +hRedrawRowOrColumnMode:: db -hRedrawRowOrColumnDest EQU $FFD1 +hRedrawRowOrColumnDest:: dw -hRandomAdd EQU $FFD3 -hRandomSub EQU $FFD4 +hRandomAdd:: db +hRandomSub:: db -hFrameCounter EQU $FFD5 ; decremented every V-blank (used for delays) +hFrameCounter:: db ; decremented every V-blank (used for delays) ; V-blank sets this to 0 each time it runs. ; So, by setting it to a nonzero value and waiting for it to become 0 again, ; you can detect that the V-blank handler has run since then. -hVBlankOccurred EQU $FFD6 +hVBlankOccurred:: db ; 00 = indoor ; 01 = cave ; 02 = outdoor ; this is often set to 00 in order to turn off water and flower BG tile animations -hTilesetType EQU $FFD7 +hTilesetType:: db -hMovingBGTilesCounter1 EQU $FFD8 +hMovingBGTilesCounter1:: db -hCurrentSpriteOffset EQU $FFDA ; multiple of $10 + ds 1 -hItemCounter EQU $FFDB +hCurrentSpriteOffset:: db ; multiple of $10 -hGymGateIndex EQU $FFDB -hGymGateAnswer EQU $FFDC +UNION +hPlayerFacing:: db +hPlayerYCoord:: db +hPlayerXCoord:: db -hGymTrashCanRandNumMask EQU $FFDB - -hDexRatingNumMonsSeen EQU $FFDB -hDexRatingNumMonsOwned EQU $FFDC +NEXTU ; $00 = bag full ; $01 = got item ; $80 = didn't meet required number of owned mons ; $FF = player cancelled -hOaksAideResult EQU $FFDB - -hSavedCoordIndex EQU $FFDB +hOaksAideResult:: +hOaksAideRequirement:: ; required number of owned mons + db +hOaksAideRewardItem:: db +hOaksAideNumMonsOwned:: db + +NEXTU +hVendingMachineItem:: db +hVendingMachinePrice:: ds 3 ; BCD number + +NEXTU +hGymGateIndex:: db +hGymGateAnswer:: db + +NEXTU +hDexRatingNumMonsSeen:: db +hDexRatingNumMonsOwned:: db + +NEXTU +hItemToRemoveID:: db +hItemToRemoveIndex:: db + +NEXTU +hItemCounter:: +hSavedCoordIndex:: +hMissableObjectIndex:: +hGymTrashCanRandNumMask:: + db + +NEXTU +hFFDB:: db +hFFDC:: db +ENDU + + ds 1 + +hBackupGymGateIndex:: +hUnlockedSilphCoDoors:: + db -hOaksAideRequirement EQU $FFDB ; required number of owned mons -hOaksAideRewardItem EQU $FFDC -hOaksAideNumMonsOwned EQU $FFDD - -hPlayerFacing EQU $FFDB -hPlayerYCoord EQU $FFDC -hPlayerXCoord EQU $FFDD - -hMissableObjectIndex EQU $FFDB - -hItemToRemoveID EQU $FFDB -hItemToRemoveIndex EQU $FFDC - -hVendingMachineItem EQU $FFDB -hVendingMachinePrice EQU $FFDC ; 3-byte BCD number - -hFFDB EQU $FFDB -hFFDC EQU $FFDC - -hBackupGymGateIndex EQU $FFE0 +; the first tile ID in a sequence of tile IDs that increase by 1 each step +hStartTileID:: db -hUnlockedSilphCoDoors EQU $FFE0 + ds 2 -; the first tile ID in a sequence of tile IDs that increase by 1 each step -hStartTileID EQU $FFE1 +hNewPartyLength:: db -hNewPartyLength EQU $FFE4 +UNION +hDividend2:: db +hDivisor2:: db +hQuotient2:: db -hIsHiddenMissableObject EQU $FFE5 +NEXTU +hIsHiddenMissableObject:: db +ENDU -hDividend2 EQU $FFE5 -hDivisor2 EQU $FFE6 -hQuotient2 EQU $FFE7 +hMapROMBank:: db -hMapROMBank EQU $FFE8 +hSpriteVRAMSlotAndFacing:: db -hSpriteVRAMSlotAndFacing EQU $FFE9 +hCoordsInFrontOfPlayerMatch:: +hSpriteAnimFrameCounter:: + db -hCoordsInFrontOfPlayerMatch EQU $FFEA +UNION +hSpriteScreenYCoord:: db +hSpriteScreenXCoord:: db +hSpriteMapYCoord:: db +hSpriteMapXCoord:: db -hSpriteAnimFrameCounter EQU $FFEA +NEXTU +hItemAlreadyFound:: db + ds 2 +hDidntFindAnyHiddenObject:: db -hSpriteScreenYCoord EQU $FFEB -hSpriteScreenXCoord EQU $FFEC -hSpriteMapYCoord EQU $FFED -hSpriteMapXCoord EQU $FFEE +NEXTU + ds 1 +hSavedMapTextPtr:: dw + ds 1 +ENDU -hItemAlreadyFound EQU $FFEB -hDidntFindAnyHiddenObject EQU $FFEE + ds 4 -hSavedMapTextPtr EQU $FFEC +hWhoseTurn:: db ; 0 on player's turn, 1 on enemy's turn -hWhoseTurn EQU $FFF3 ; 0 on player’s turn, 1 on enemy’s turn +hClearLetterPrintingDelayFlags:: db -hClearLetterPrintingDelayFlags EQU $FFF4 + ds 1 ; bit 0: draw HP fraction to the right of bar instead of below (for party menu) ; bit 1: menu is double spaced -hFlagsFFF6 EQU $FFF6 +hFlagsFFF6:: db + +hFieldMoveMonMenuTopMenuItemX:: db -hFieldMoveMonMenuTopMenuItemX EQU $FFF7 +hJoyInput:: db -hDisableJoypadPolling EQU $FFF9 +hDisableJoypadPolling:: db -hJoyInput EQU $FFF8 + ds 5 diff --git a/layout.link b/layout.link index d4473435..d56a7886 100644 --- a/layout.link +++ b/layout.link @@ -228,6 +228,9 @@ WRAM0 org $dfff "Stack" +VRAM + "VRAM" + SRAM $0 "Sprite Buffers" @@ -239,3 +242,6 @@ SRAM $2 SRAM $3 "Saved Boxes 2" + +HRAM + "HRAM" diff --git a/scripts/RocketHideoutB2F.asm b/scripts/RocketHideoutB2F.asm index 7a43e90e..95d8b0d2 100755 --- a/scripts/RocketHideoutB2F.asm +++ b/scripts/RocketHideoutB2F.asm @@ -376,7 +376,7 @@ ENDM FacilitySpinnerArrows: FACILITY_SPINNER EQU $20 * $10 -vFacilitySpinner EQU vTileset + FACILITY_SPINNER +vFacilitySpinner EQUS "vTileset + FACILITY_SPINNER" spinner SpinnerArrowAnimTiles, $00, 1, vFacilitySpinner spinner SpinnerArrowAnimTiles, $10, 1, vFacilitySpinner + $10 @@ -389,7 +389,7 @@ vFacilitySpinner EQU vTileset + FACILITY_SPINNER GymSpinnerArrows: GYM_SPINNER EQU $3c * $10 -vGymSpinner EQU vTileset + GYM_SPINNER +vGymSpinner EQUS "vTileset + GYM_SPINNER" spinner SpinnerArrowAnimTiles, $10, 1, vGymSpinner spinner SpinnerArrowAnimTiles, $30, 1, vGymSpinner + $10 @@ -1,21 +1,31 @@ -vChars0 EQU $8000 -vChars1 EQU $8800 -vChars2 EQU $9000 -vBGMap0 EQU $9800 -vBGMap1 EQU $9c00 +SECTION "VRAM", VRAM -; Battle/Menu -vSprites EQU vChars0 -vFont EQU vChars1 -vFrontPic EQU vChars2 -vBackPic EQU vFrontPic + 7 * 7 * $10 +UNION +; generic +vChars0:: ds $800 +vChars1:: ds $800 +vChars2:: ds $800 +vBGMap0:: ds $400 +vBGMap1:: ds $400 -; Overworld -vNPCSprites EQU vChars0 -vNPCSprites2 EQU vChars1 -vTileset EQU vChars2 +NEXTU +; battle/menu +vSprites:: ds $800 +vFont:: ds $800 +vFrontPic:: ds 7 * 7 * $10 +vBackPic:: ds 7 * 7 * $10 -; Title -vTitleLogo EQU vChars1 -vTitleLogo2 EQU vFrontPic + 7 * 7 * $10 +NEXTU +; overworld +vNPCSprites:: ds $800 +vNPCSprites2:: ds $800 +vTileset:: ds $800 +NEXTU +; title + ds $800 +vTitleLogo:: ds $800 + ds 7 * 7 * $10 +vTitleLogo2:: ds $1e0 + +ENDU @@ -3,6 +3,9 @@ INCLUDE "constants.asm" INCLUDE "macros/wram.asm" +INCLUDE "vram.asm" + + SECTION "WRAM Bank 0", WRAM0 wUnusedC000:: @@ -3112,3 +3115,5 @@ wStack:: INCLUDE "sram.asm" + +INCLUDE "hram.asm" |