ref: f9ae7b1240863b4311d24944ae7ec3c1d9b24507
parent: 5c73cffee6b854e4e08db04a776aa8a71d3a82cd
author: Rangi <remy.oukaour+rangi42@gmail.com>
date: Mon May 31 12:25:16 EDT 2021
More WRAM label cleanup (still needs UNIONs and renaming)
--- a/engine/battle/core.asm
+++ b/engine/battle/core.asm
@@ -6900,9 +6900,9 @@
; animates the mon "growing" out of the pokeball
AnimateSendingOutMon:
- ld a, [wPredefRegisters]
+ ld a, [wPredefHL]
ld h, a
- ld a, [wPredefRegisters + 1]
+ ld a, [wPredefHL + 1]
ld l, a
ldh a, [hStartTileID]
ldh [hBaseTileID], a
@@ -6940,9 +6940,9 @@
jr CopyUncompressedPicToHL
CopyUncompressedPicToTilemap:
- ld a, [wPredefRegisters]
+ ld a, [wPredefHL]
ld h, a
- ld a, [wPredefRegisters + 1]
+ ld a, [wPredefHL + 1]
ld l, a
ldh a, [hStartTileID]
CopyUncompressedPicToHL::
--- a/engine/items/town_map.asm
+++ b/engine/items/town_map.asm
@@ -249,7 +249,7 @@
db "To@"
BuildFlyLocationsList:
- ld hl, wFlyLocationsList - 1
+ ld hl, wFlyAnimUsingCoordList
ld [hl], $ff
inc hl
ld a, [wTownVisitedFlag]
--- a/engine/menus/party_menu.asm
+++ b/engine/menus/party_menu.asm
@@ -131,7 +131,7 @@
ld l, a
ld de, wEvosMoves
ld a, BANK(EvosMovesPointerTable)
- ld bc, wEvosMoves.end - wEvosMoves
+ ld bc, wEvosMovesEnd - wEvosMoves
call FarCopyData
ld hl, wEvosMoves
ld de, .notAbleToEvolveText
--- a/engine/predefs.asm
+++ b/engine/predefs.asm
@@ -1,20 +1,20 @@
GetPredefPointer::
-; Store the contents of the register
-; pairs (hl, de, bc) at wPredefRegisters.
+; Back up the contents of the registers (hl, de, bc).
; Then put the bank and address of predef
; wPredefID in [wPredefBank] and hl.
ld a, h
- ld [wPredefRegisters], a
+ ld [wPredefHL], a
ld a, l
- ld [wPredefRegisters + 1], a
+ ld [wPredefHL + 1], a
- ld hl, wPredefRegisters + 2
+ ld hl, wPredefDE
ld a, d
ld [hli], a
ld a, e
ld [hli], a
+ ASSERT wPredefDE + 2 == wPredefBC
ld a, b
ld [hli], a
ld [hl], c
--- a/home/overworld.asm
+++ b/home/overworld.asm
@@ -550,7 +550,7 @@
ld a, [wXCoord]
cp $ff
jr nz, .checkEastMap
- ld a, [wMapConn3Ptr]
+ ld a, [wWestConnectedMap]
ld [wCurMap], a
ld a, [wWestConnectedMapXAlignment] ; new X coordinate upon entering west map
ld [wXCoord], a
@@ -587,7 +587,7 @@
ld a, [wCurrentMapWidth2] ; map width
cp b
jr nz, .checkNorthMap
- ld a, [wMapConn4Ptr]
+ ld a, [wEastConnectedMap]
ld [wCurMap], a
ld a, [wEastConnectedMapXAlignment] ; new X coordinate upon entering east map
ld [wXCoord], a
@@ -623,7 +623,7 @@
ld a, [wYCoord]
cp $ff
jr nz, .checkSouthMap
- ld a, [wMapConn1Ptr]
+ ld a, [wNorthConnectedMap]
ld [wCurMap], a
ld a, [wNorthConnectedMapYAlignment] ; new Y coordinate upon entering north map
ld [wYCoord], a
@@ -651,7 +651,7 @@
ld a, [wCurrentMapHeight2]
cp b
jr nz, .didNotEnterConnectedMap
- ld a, [wMapConn2Ptr]
+ ld a, [wSouthConnectedMap]
ld [wCurMap], a
ld a, [wSouthConnectedMapYAlignment] ; new Y coordinate upon entering south map
ld [wYCoord], a
@@ -937,7 +937,7 @@
dec b
jr nz, .rowLoop
.northConnection
- ld a, [wMapConn1Ptr]
+ ld a, [wNorthConnectedMap]
cp $ff
jr z, .southConnection
call SwitchToMapRomBank
@@ -949,13 +949,13 @@
ld e, a
ld a, [wNorthConnectionStripDest + 1]
ld d, a
- ld a, [wNorthConnectionStripWidth]
+ ld a, [wNorthConnectionStripLength]
ldh [hNorthSouthConnectionStripWidth], a
ld a, [wNorthConnectedMapWidth]
ldh [hNorthSouthConnectedMapWidth], a
call LoadNorthSouthConnectionsTileMap
.southConnection
- ld a, [wMapConn2Ptr]
+ ld a, [wSouthConnectedMap]
cp $ff
jr z, .westConnection
call SwitchToMapRomBank
@@ -967,13 +967,13 @@
ld e, a
ld a, [wSouthConnectionStripDest + 1]
ld d, a
- ld a, [wSouthConnectionStripWidth]
+ ld a, [wSouthConnectionStripLength]
ldh [hNorthSouthConnectionStripWidth], a
ld a, [wSouthConnectedMapWidth]
ldh [hNorthSouthConnectedMapWidth], a
call LoadNorthSouthConnectionsTileMap
.westConnection
- ld a, [wMapConn3Ptr]
+ ld a, [wWestConnectedMap]
cp $ff
jr z, .eastConnection
call SwitchToMapRomBank
@@ -985,13 +985,13 @@
ld e, a
ld a, [wWestConnectionStripDest + 1]
ld d, a
- ld a, [wWestConnectionStripHeight]
+ ld a, [wWestConnectionStripLength]
ld b, a
ld a, [wWestConnectedMapWidth]
ldh [hEastWestConnectedMapWidth], a
call LoadEastWestConnectionsTileMap
.eastConnection
- ld a, [wMapConn4Ptr]
+ ld a, [wEastConnectedMap]
cp $ff
jr z, .done
call SwitchToMapRomBank
@@ -1003,7 +1003,7 @@
ld e, a
ld a, [wEastConnectionStripDest + 1]
ld d, a
- ld a, [wEastConnectionStripHeight]
+ ld a, [wEastConnectionStripLength]
ld b, a
ld a, [wEastConnectedMapWidth]
ldh [hEastWestConnectedMapWidth], a
@@ -2046,10 +2046,10 @@
jr nz, .copyFixedHeaderLoop
; initialize all the connected maps to disabled at first, before loading the actual values
ld a, $ff
- ld [wMapConn1Ptr], a
- ld [wMapConn2Ptr], a
- ld [wMapConn3Ptr], a
- ld [wMapConn4Ptr], a
+ ld [wNorthConnectedMap], a
+ ld [wSouthConnectedMap], a
+ ld [wWestConnectedMap], a
+ ld [wEastConnectedMap], a
; copy connection data (if any) to WRAM
ld a, [wMapConnections]
ld b, a
@@ -2056,22 +2056,22 @@
.checkNorth
bit 3, b
jr z, .checkSouth
- ld de, wMapConn1Ptr
+ ld de, wNorthConnectionHeader
call CopyMapConnectionHeader
.checkSouth
bit 2, b
jr z, .checkWest
- ld de, wMapConn2Ptr
+ ld de, wSouthConnectionHeader
call CopyMapConnectionHeader
.checkWest
bit 1, b
jr z, .checkEast
- ld de, wMapConn3Ptr
+ ld de, wWestConnectionHeader
call CopyMapConnectionHeader
.checkEast
bit 0, b
jr z, .getObjectDataPointer
- ld de, wMapConn4Ptr
+ ld de, wEastConnectionHeader
call CopyMapConnectionHeader
.getObjectDataPointer
ld a, [hli]
@@ -2094,7 +2094,7 @@
ld c, a
ld de, wWarpEntries
.warpLoop ; one warp per loop iteration
- ld b, $04
+ ld b, 4
.warpInnerLoop
ld a, [hli]
ld [de], a
--- a/home/predef.asm
+++ b/home/predef.asm
@@ -35,16 +35,16 @@
GetPredefRegisters::
; Restore the contents of register pairs
; when GetPredefPointer was called.
- ld a, [wPredefRegisters + 0]
+ ld a, [wPredefHL]
ld h, a
- ld a, [wPredefRegisters + 1]
+ ld a, [wPredefHL + 1]
ld l, a
- ld a, [wPredefRegisters + 2]
+ ld a, [wPredefDE]
ld d, a
- ld a, [wPredefRegisters + 3]
+ ld a, [wPredefDE + 1]
ld e, a
- ld a, [wPredefRegisters + 4]
+ ld a, [wPredefBC]
ld b, a
- ld a, [wPredefRegisters + 5]
+ ld a, [wPredefBC + 1]
ld c, a
ret
--- a/macros/wram.asm
+++ b/macros/wram.asm
@@ -102,3 +102,14 @@
\1TileID:: db
\1Attributes:: db
ENDM
+
+map_connection_struct: MACRO
+\1ConnectedMap:: db
+\1ConnectionStripSrc:: dw
+\1ConnectionStripDest:: dw
+\1ConnectionStripLength:: db
+\1ConnectedMapWidth:: db
+\1ConnectedMapYAlignment:: db
+\1ConnectedMapXAlignment:: db
+\1ConnectedMapViewPointer:: dw
+ENDM
--- a/scripts/VermilionDock.asm
+++ b/scripts/VermilionDock.asm
@@ -182,12 +182,12 @@
VermilionDock_EraseSSAnne:
; Fill the area the S.S. Anne occupies in BG map 0 with water tiles.
ld hl, wVermilionDockTileMapBuffer
- ld bc, (5 * BG_MAP_WIDTH) + SCREEN_WIDTH
+ ld bc, wVermilionDockTileMapBufferEnd - wVermilionDockTileMapBuffer
ld a, $14 ; water tile
call FillMemory
hlbgcoord 0, 10
ld de, wVermilionDockTileMapBuffer
- ld bc, (6 * BG_MAP_WIDTH) / 16
+ lb bc, BANK(wVermilionDockTileMapBuffer), 12
call CopyVideoData
; Replace the blocks of the lower half of the ship with water blocks. This
--- a/wram.asm
+++ b/wram.asm
@@ -26,83 +26,54 @@
wSavedVolume:: db
-wChannelCommandPointers:: ds 16
+wChannelCommandPointers:: ds NUM_CHANNELS * 2
+wChannelReturnAddresses:: ds NUM_CHANNELS * 2
-wChannelReturnAddresses:: ds 16
+wChannelSoundIDs:: ds NUM_CHANNELS
-wChannelSoundIDs:: ds 8
-
-wChannelFlags1:: ds 8
-
-wChannelFlags2:: ds 8
-
-wChannelDutyCycles:: ds 8
-
-wChannelDutyCyclePatterns:: ds 8
-
+wChannelFlags1:: ds NUM_CHANNELS
+wChannelFlags2:: ds NUM_CHANNELS
+wChannelDutyCycles:: ds NUM_CHANNELS
+wChannelDutyCyclePatterns:: ds NUM_CHANNELS
; reloaded at the beginning of a note. counts down until the vibrato begins.
-wChannelVibratoDelayCounters:: ds 8
-
-wChannelVibratoExtents:: ds 8
-
+wChannelVibratoDelayCounters:: ds NUM_CHANNELS
+wChannelVibratoExtents:: ds NUM_CHANNELS
; high nybble is rate (counter reload value) and low nybble is counter.
; time between applications of vibrato.
-wChannelVibratoRates:: ds 8
-
-wChannelFrequencyLowBytes:: ds 8
-
+wChannelVibratoRates:: ds NUM_CHANNELS
+wChannelFrequencyLowBytes:: ds NUM_CHANNELS
; delay of the beginning of the vibrato from the start of the note
-wChannelVibratoDelayCounterReloadValues:: ds 8
-
-wChannelPitchSlideLengthModifiers:: ds 8
-
-wChannelPitchSlideFrequencySteps:: ds 8
-
-wChannelPitchSlideFrequencyStepsFractionalPart:: ds 8
-
-wChannelPitchSlideCurrentFrequencyFractionalPart:: ds 8
-
-wChannelPitchSlideCurrentFrequencyHighBytes:: ds 8
-
-wChannelPitchSlideCurrentFrequencyLowBytes:: ds 8
-
-wChannelPitchSlideTargetFrequencyHighBytes:: ds 8
-
-wChannelPitchSlideTargetFrequencyLowBytes:: ds 8
-
+wChannelVibratoDelayCounterReloadValues:: ds NUM_CHANNELS
+wChannelPitchSlideLengthModifiers:: ds NUM_CHANNELS
+wChannelPitchSlideFrequencySteps:: ds NUM_CHANNELS
+wChannelPitchSlideFrequencyStepsFractionalPart:: ds NUM_CHANNELS
+wChannelPitchSlideCurrentFrequencyFractionalPart:: ds NUM_CHANNELS
+wChannelPitchSlideCurrentFrequencyHighBytes:: ds NUM_CHANNELS
+wChannelPitchSlideCurrentFrequencyLowBytes:: ds NUM_CHANNELS
+wChannelPitchSlideTargetFrequencyHighBytes:: ds NUM_CHANNELS
+wChannelPitchSlideTargetFrequencyLowBytes:: ds NUM_CHANNELS
; Note delays are stored as 16-bit fixed-point numbers where the integer part
; is 8 bits and the fractional part is 8 bits.
-wChannelNoteDelayCounters:: ds 8
-
-wChannelLoopCounters:: ds 8
-
-wChannelNoteSpeeds:: ds 8
-
-wChannelNoteDelayCountersFractionalPart:: ds 8
-
-wChannelOctaves:: ds 8
-
+wChannelNoteDelayCounters:: ds NUM_CHANNELS
+wChannelLoopCounters:: ds NUM_CHANNELS
+wChannelNoteSpeeds:: ds NUM_CHANNELS
+wChannelNoteDelayCountersFractionalPart:: ds NUM_CHANNELS
+wChannelOctaves:: ds NUM_CHANNELS
; also includes fade for hardware channels that support it
-wChannelVolumes:: ds 8
+wChannelVolumes:: ds NUM_CHANNELS
wMusicWaveInstrument:: db
-
wSfxWaveInstrument:: db
-
wMusicTempo:: dw
-
wSfxTempo:: dw
-
wSfxHeaderPointer:: dw
wNewSoundID:: db
wAudioROMBank:: db
-
wAudioSavedROMBank:: db
wFrequencyModifier:: db
-
wTempoModifier:: db
ds 13
@@ -288,43 +259,33 @@
; if non-zero, skip waiting for a button press after displaying text in DisplayTextID
wDoNotWaitForButtonPressAfterDisplayingText:: db
-; the final received nybble is stored here by Serial_SyncAndExchangeNybble
-wSerialSyncAndExchangeNybbleReceiveData::
+UNION
+; the received menu selection is stored twice
+wLinkMenuSelectionReceiveBuffer:: dw
+ ds 3
+; the menu selection byte is stored twice before sending
+wLinkMenuSelectionSendBuffer:: dw
+ ds 3
+wEnteringCableClub::
+wLinkTimeoutCounter:: db
+NEXTU
; temporary nybble used by Serial_ExchangeNybble
wSerialExchangeNybbleTempReceiveData::
-
-; two byte buffer
-; the received menu selection is stored twice
-wLinkMenuSelectionReceiveBuffer:: db
-
+; the final received nybble is stored here by Serial_SyncAndExchangeNybble
+wSerialSyncAndExchangeNybbleReceiveData:: db
; the final received nybble is stored here by Serial_ExchangeNybble
wSerialExchangeNybbleReceiveData:: db
-
ds 3
-
; this nybble is sent when using Serial_SyncAndExchangeNybble or Serial_ExchangeNybble
-wSerialExchangeNybbleSendData::
+wSerialExchangeNybbleSendData:: db
+ ds 4
+wUnknownSerialCounter:: dw
+ENDU
-; two byte buffer
-; the menu selection byte is stored twice before sending
-wLinkMenuSelectionSendBuffer::
-
- ds 5
-
-; 1 byte
-wLinkTimeoutCounter::
-
-; 2 bytes
-wUnknownSerialCounter::
-
-; 1 byte
-wEnteringCableClub:: dw
-
; $00 = player mons
; $01 = enemy mons
wWhichTradeMonSelectionMenu::
-
; 0 = player's party
; 1 = enemy party
; 2 = current box
@@ -348,7 +309,9 @@
wMissableObjectIndex:: db
wPredefID:: db
-wPredefRegisters:: ds 6
+wPredefHL:: dw
+wPredefDE:: dw
+wPredefBC:: dw
wTrainerHeaderFlagBit:: db
@@ -363,29 +326,29 @@
ds 2
-wUnusedCC5B::
+wVermilionDockTileMapBuffer:: ; ds 5 * BG_MAP_WIDTH + SCREEN_WIDTH
-; 180 bytes
-wVermilionDockTileMapBuffer::
+wOaksAideRewardItemName:: ; ds ITEM_NAME_LENGTH
-wOaksAideRewardItemName::
+wElevatorWarpMaps:: ; ds 11 * 2
-wDexRatingNumMonsSeen::
-
; List of bag items that has been filtered to a certain type of items,
; such as drinks or fossils.
-wFilteredBagItems::
+wFilteredBagItems:: ; ds 3 + 1
-wElevatorWarpMaps::
-
; Saved copy of OAM for the first frame of the animation to make it easy to
; flip back from the second frame.
-; $60 bytes
-wMonPartySpritesSavedOAM::
+wMonPartySpritesSavedOAM:: ; ds $60
-; $40 bytes
-wTrainerCardBlkPacket::
+wTrainerCardBlkPacket:: ; ds $40
+wHallOfFame:: ; ds HOF_TEAM
+
+wNPCMovementDirections:: ; ds $ff
+
+wBoostExpByExpAll::
+; values between 0-6. Shake screen horizontally, shake screen vertically, blink Pokemon...
+wAnimationType::
; If a random number greater than this value is generated, then the player is
; allowed to have three 7 symbols or bar symbols line up.
; So, this value is actually the chance of NOT entering that mode.
@@ -392,14 +355,9 @@
; If the slot is lucky, it equals 250, giving a 5/256 (~2%) chance.
; Otherwise, it equals 253, giving a 2/256 (~0.8%) chance.
wSlotMachineSevenAndBarModeChance::
+wUnusedCC5B::
+wDexRatingNumMonsSeen:: db
-; values between 0-6. Shake screen horizontally, shake screen vertically, blink Pokemon...
-wHallOfFame::
-wBoostExpByExpAll::
-wAnimationType::
-
-wNPCMovementDirections:: db
-
wDexRatingNumMonsOwned:: db
wDexRatingText:: db
@@ -420,17 +378,13 @@
NEXTU
; temporary buffer when swapping party mon data
-wSwitchPartyMonTempBuffer:: ds 49
+wSwitchPartyMonTempBuffer:: ds 44 ; party_struct size
ENDU
- ds 10
+ ds 15
wRLEByteCount:: db
-; 0 = not added
-; 1 = added
-wAddedToParty::
-
; this is the end of the joypad states
; the list starts above this address and extends downwards in memory until here
; overloaded with below labels
@@ -437,7 +391,9 @@
wSimulatedJoypadStatesEnd::
wParentMenuItem::
-
+; 0 = not added
+; 1 = added
+wAddedToParty::
; 1 flag for each party member indicating whether it can evolve
; The purpose of these flags is to track which mons levelled up during the
; current battle at the end of the battle when evolution occurs.
@@ -491,24 +447,24 @@
wTransformedEnemyMonOriginalDVs:: dw
-wMonIsDisobedient:: ds 1
+wMonIsDisobedient:: db
-wPlayerDisabledMoveNumber:: ds 1
-wEnemyDisabledMoveNumber:: ds 1
+wPlayerDisabledMoveNumber:: db
+wEnemyDisabledMoveNumber:: db
; When running in the scope of HandlePlayerMonFainted, it equals 1.
; When running in the scope of HandleEnemyMonFainted, it equals 0.
wInHandlePlayerMonFainted:: db
-wPlayerUsedMove:: ds 1
-wEnemyUsedMove:: ds 1
+wPlayerUsedMove:: db
+wEnemyUsedMove:: db
-wEnemyMonMinimized:: ds 1
+wEnemyMonMinimized:: db
-wMoveDidntMiss:: ds 1
+wMoveDidntMiss:: db
; flags that indicate which party members have fought the current enemy mon
-wPartyFoughtCurrentEnemyFlags:: flag_array 6
+wPartyFoughtCurrentEnemyFlags:: flag_array PARTY_LENGTH
; Whether the low health alarm has been disabled due to the player winning the
; battle.
@@ -518,28 +474,33 @@
ds 13
+UNION
wLuckySlotHiddenObjectIndex::
-
; number of hits by enemy in attacks like Double Slap, etc.
-wEnemyNumHits::
+wEnemyNumHits:: db
+NEXTU
; the amount of damage accumulated by the enemy while biding (2 bytes)
-wEnemyBideAccumulatedDamage::
+wEnemyBideAccumulatedDamage:: dw
+ENDU
- ds 10
+ ds 8
-wInGameTradeGiveMonSpecies::
+wVermilionDockTileMapBufferEnd::
-wPlayerMonUnmodifiedLevel:: db
+UNION
+wInGameTradeGiveMonSpecies:: db
+wInGameTradeTextPointerTablePointer:: dw
+wInGameTradeTextPointerTableIndex:: db
+wInGameTradeGiveMonName:: ds NAME_LENGTH
+wInGameTradeReceiveMonName:: ds NAME_LENGTH
+wInGameTradeMonNick:: ds NAME_LENGTH
+wInGameTradeReceiveMonSpecies:: db
-wInGameTradeTextPointerTablePointer::
-
+NEXTU
+wPlayerMonUnmodifiedLevel:: db
wPlayerMonUnmodifiedMaxHP:: dw
-
-wInGameTradeTextPointerTableIndex::
-
-wPlayerMonUnmodifiedAttack:: db
-wInGameTradeGiveMonName:: db
+wPlayerMonUnmodifiedAttack:: dw
wPlayerMonUnmodifiedDefense:: dw
wPlayerMonUnmodifiedSpeed:: dw
wPlayerMonUnmodifiedSpecial:: dw
@@ -547,20 +508,14 @@
; stat modifiers for the player's current pokemon
; value can range from 1 - 13 ($1 to $D)
; 7 is normal
-
wPlayerMonStatMods::
wPlayerMonAttackMod:: db
wPlayerMonDefenseMod:: db
wPlayerMonSpeedMod:: db
wPlayerMonSpecialMod:: db
-
-wInGameTradeReceiveMonName::
-
wPlayerMonAccuracyMod:: db
wPlayerMonEvasionMod:: db
-
ds 2
-
wPlayerMonStatModsEnd::
ds 1
@@ -568,21 +523,13 @@
wEnemyMonUnmodifiedLevel:: db
wEnemyMonUnmodifiedMaxHP:: dw
wEnemyMonUnmodifiedAttack:: dw
-wEnemyMonUnmodifiedDefense:: db
-
-; ds 11
-wInGameTradeMonNick:: db
-
+wEnemyMonUnmodifiedDefense:: dw
wEnemyMonUnmodifiedSpeed:: dw
-wEnemyMonUnmodifiedSpecial:: db
+wEnemyMonUnmodifiedSpecial:: dw
-wEngagedTrainerClass:: db
-wEngagedTrainerSet:: ; db
-
; stat modifiers for the enemy's current pokemon
; value can range from 1 - 13 ($1 to $D)
; 7 is normal
-
wEnemyMonStatMods::
wEnemyMonAttackMod:: db
wEnemyMonDefenseMod:: db
@@ -590,19 +537,19 @@
wEnemyMonSpecialMod:: db
wEnemyMonAccuracyMod:: db
wEnemyMonEvasionMod:: db
+ ds 2
+wEnemyMonStatModsEnd::
-wInGameTradeReceiveMonSpecies:: db
+NEXTU
+ ds 30
+wEngagedTrainerClass:: db
+wEngagedTrainerSet:: db
+ENDU
ds 1
-wEnemyMonStatModsEnd::
-
- ds 1
-
wNPCMovementDirections2Index::
-
wUnusedCD37::
-
; number of items in wFilteredBagItems list
wFilteredBagItemsCount:: db
@@ -622,275 +569,193 @@
ds 1
-; up to 20 bytes (one byte for each falling object)
-wFallingObjectsMovementData::
+; one byte for each falling object
+wFallingObjectsMovementData:: ; ds 20
-wSavedY::
+; array of the number of mons in each box
+wBoxMonCounts:: ; ds NUM_BOXES
-wTempSCX::
+; BCD number
+wPriceTemp:: ; ds 3
+; the current mon's field moves
+wFieldMoves:: ; ds NUM_MOVES
+
+wBoxNumString:: ; ds 3
+
+wSavedY::
+wTempSCX::
; 0 = upper half (Y < 9)
; 1 = lower half (Y >= 9)
wBattleTransitionCircleScreenQuadrantY::
-
; 2 bytes
; after 1 row/column has been copied, the offset to the next one to copy from
wBattleTransitionCopyTilesOffset::
-
; counts down from 7 so that every time 7 more tiles of the spiral have been
; placed, the tile map buffer is copied to VRAM so that progress is visible
wInwardSpiralUpdateScreenCounter::
-
wHoFTeamIndex::
-
; multiplied by 16 to get the number of times to go right by 2 pixels
wSSAnneSmokeDriftAmount::
-
wRivalStarterTemp::
-
-; 12 bytes
-; array of the number of mons in each box
-wBoxMonCounts::
-
wDexMaxSeenMon::
-
wPPRestoreItem::
-
wWereAnyMonsAsleep::
-
wCanPlaySlots::
-
wNumShakes::
-
; the level of the mon at the time it entered day care
wDayCareStartLevel::
-
wWhichBadge::
-
-; 3-byte BCD number
-wPriceTemp::
-
wTitleMonSpecies::
-
wPlayerCharacterOAMTile::
-
; the number of small stars OAM entries to move down
wMoveDownSmallStarsOAMCount::
-
wChargeMoveNum::
-
wCoordIndex::
-
wOptionsTextSpeedCursorX::
-
wTrainerInfoTextBoxWidthPlus1::
-
wSwappedMenuItem::
-
wHoFMonSpecies::
-
-; 4 bytes
-; the current mon's field moves
-wFieldMoves::
-
; tile ID of the badge number being drawn
wBadgeNumberTile::
-
; 0 = no bite
; 1 = bite
; 2 = no fish on map
wRodResponse::
-
wWhichTownMapLocation::
-
; which wheel the player is trying to stop
; 0 = none, 1 = wheel 1, 2 = wheel 2, 3 or greater = wheel 3
wStoppingWhichSlotMachineWheel::
-
wTradedPlayerMonSpecies::
-
wTradingWhichPlayerMon::
-
wChangeBoxSavedMapTextPointer::
-
wFlyAnimUsingCoordList::
-
wPlayerSpinInPlaceAnimFrameDelay::
-
wPlayerSpinWhileMovingUpOrDownAnimDeltaY::
-
-wBoxNumString::
-
wHiddenObjectFunctionArgument::
-
; which entry from TradeMons to select
wWhichTrade::
-
wTrainerSpriteOffset::
+wUnusedCD3D::
+ db
-wUnusedCD3D:: db
+; $ff sentinel values at each end
+wFlyLocationsList:: ; ds NUM_CITY_MAPS + 2
; difference in X between the next ball and the current one
wHUDPokeballGfxOffsetX::
-
; 0 = left half (X < 10)
; 1 = right half (X >= 10)
wBattleTransitionCircleScreenQuadrantX::
-
wSSAnneSmokeX::
-
wRivalStarterBallSpriteIndex::
-
wDayCareNumLevelsGrown::
-
wOptionsBattleAnimCursorX::
-
wTrainerInfoTextBoxWidth::
-
wHoFPartyMonIndex::
-
; the number of credits mons that have been displayed so far
wNumCreditsMonsDisplayed::
-
; first tile ID of the name being drawn
wBadgeNameTile::
-
-; NUM_CITY_MAPS bytes plus $ff sentinel values at each end
-wFlyLocationsList::
-
wSlotMachineWheel1Offset::
-
wTradedEnemyMonSpecies::
-
wTradingWhichEnemyMon::
-
wFlyAnimCounter::
-
wPlayerSpinInPlaceAnimFrameDelayDelta::
-
wPlayerSpinWhileMovingUpOrDownAnimMaxY::
-
wHiddenObjectFunctionRomBank::
+wTrainerEngageDistance::
+ db
-wTrainerEngageDistance:: db
+wHUDGraphicsTiles:: ; ds 3
-; 3 bytes
-wHUDGraphicsTiles::
+; BCD number
+wDayCareTotalCost:: ; ds 2
-; 2-byte BCD number
-wDayCareTotalCost::
+; a list of the first tile IDs of each badge or face (depending on whether the
+; badge is owned) to be drawn on the trainer screen
+wBadgeOrFaceTiles:: ; ds NUM_BADGES
-wJigglypuffFacingDirections::
+wNameOfPlayerMonToBeTraded:: ; ds NAME_LENGTH
+wJigglypuffFacingDirections::
wOptionsBattleStyleCursorX::
-
wTrainerInfoTextBoxNextRowOffset::
-
wHoFMonLevel::
-
-; 8 bytes
-; a list of the first tile IDs of each badge or face (depending on whether the
-; badge is owned) to be drawn on the trainer screen
-wBadgeOrFaceTiles::
-
wSlotMachineWheel2Offset::
-
-wNameOfPlayerMonToBeTraded::
-
wFlyAnimBirdSpriteImageIndex::
-
wPlayerSpinInPlaceAnimFrameDelayEndValue::
-
wPlayerSpinWhileMovingUpOrDownAnimFrameDelay::
-
wHiddenObjectIndex::
+wTrainerFacingDirection::
+ db
-wTrainerFacingDirection:: db
-
; show mon or show player?
; 0 = mon
; 1 = player
wHoFMonOrPlayer::
-
wSlotMachineWheel3Offset::
-
wPlayerSpinInPlaceAnimSoundID::
-
wHiddenObjectY::
-
wTrainerScreenY::
+wOptionsCancelCursorX::
+ db
-wOptionsCancelCursorX:: db
+; BCD number (always set to $100)
+wDayCarePerLevelCost:: ; ds 2
-; 2-byte BCD number (always set to $100)
-wDayCarePerLevelCost::
+wTradedPlayerMonOT:: ; ds NAME_LENGTH
wHoFTeamIndex2::
-
wHiddenItemOrCoinsIndex::
-
-wTradedPlayerMonOT::
-
wHiddenObjectX::
-
; the OAM tile number of the upper left corner of the winning symbol minus 2
wSlotMachineWinningSymbol::
-
wNumFieldMoves::
-
wSlotMachineWheel1BottomTile::
+wTrainerScreenX::
+ db
-wTrainerScreenX:: db
-; a lot of the uses for these values use more than the said address
-
wHoFTeamNo::
-
wSlotMachineWheel1MiddleTile::
+wFieldMovesLeftmostXCoord::
+ db
-wFieldMovesLeftmostXCoord:: db
+wLastFieldMoveID:: ; unused
+wSlotMachineWheel1TopTile::
+ db
-; unused
-wLastFieldMoveID::
-
-wSlotMachineWheel1TopTile:: db
-
wSlotMachineWheel2BottomTile:: db
wSlotMachineWheel2MiddleTile:: db
-; 2 bytes
; temporary variable used to add payout amount to the player's coins
-wTempCoins1::
+wTempCoins1:: ; ds 2
wSlotMachineWheel2TopTile:: db
; 0 = outward, 1 = inward
wBattleTransitionSpiralDirection::
-
wSlotMachineWheel3BottomTile:: db
-wSlotMachineWheel3MiddleTile::
-
-; 4 bytes (also, the byte before the start of the list (wSlotMachineWheel3BottomTile)
-; is used a temp variable when the list is rotated)
; used when spinning the player's sprite
-wFacingDirectionList:: db
+; also, the byte before the start of the list is
+; used as a temp variable when the list is rotated
+wFacingDirectionList:: ; ds 4
-wSlotMachineWheel3TopTile::
+wSlotMachineWheel3MiddleTile:: db
-; 8 bytes
; temporary list created when displaying the badges on the trainer screen
; one byte for each badge; 0 = not obtained, 1 = obtained
-wTempObtainedBadgesBooleans:: db
+wTempObtainedBadgesBooleans:: ; ds NUM_BADGES
-; 2 bytes
+wSlotMachineWheel3TopTile:: db
+
; temporary variable used to subtract the bet amount from the player's coins
wTempCoins2::
-
-; 2 bytes
wPayoutCoins:: dw
-wTradedPlayerMonOTID::
+wTradedPlayerMonOTID:: ; dw
; These flags are set randomly and control when the wheels stop.
; bit 6: allow the player to win in general
@@ -899,35 +764,31 @@
; wheel 1 can "slip" while this is non-zero
wSlotMachineWheel1SlipCounter::
-
; $3d = tree tile
; $52 = grass tile
wCutTile:: db
+wTradedEnemyMonOT:: ; ds NAME_LENGTH
+
; wheel 2 can "slip" while this is non-zero
-wSlotMachineWheel2SlipCounter::
+wSlotMachineWheel2SlipCounter:: db
-wTradedEnemyMonOT:: db
-
wSavedPlayerScreenY::
-
; The remaining number of times wheel 3 will roll down a symbol until a match is
; found, when winning is enabled. It's initialized to 4 each bet.
wSlotMachineRerollCounter::
-
; the index of the sprite the emotion bubble is to be displayed above
wEmotionBubbleSpriteIndex:: db
wWhichEmotionBubble::
-
; how many coins the player bet on the slot machine (1 to 3)
wSlotMachineBet::
-
wSavedPlayerFacingDirection::
-
; 0 = cut animation, 1 = boulder dust animation
-wWhichAnimationOffsets:: ds 9
+wWhichAnimationOffsets:: db
+ ds 8
+
wTradedEnemyMonOTID:: dw
; 0 = neither
@@ -934,9 +795,7 @@
; 1 = warp pad
; 2 = hole
wStandingOnWarpPadOrHole::
-
wOAMBaseTile::
-
wGymTrashCanIndex:: db
wSymmetricSpriteOAMAttributes:: db
@@ -976,85 +835,72 @@
; $00 = 5×5
; $01 = 3×3
wDownscaledMonSize::
-
; FormatMovesString stores the number of moves minus one here
wNumMovesMinusOne:: db
UNION
-
wcd6d:: ds NAME_BUFFER_LENGTH ; buffer for various data
NEXTU
+wEvosMoves:: ds MAX_EVOLUTIONS * EVOLUTION_SIZE + 1
+wEvosMovesEnd::
+NEXTU
ds 4
-
; temp variable used to print a move's current PP on the status screen
wStatusScreenCurrentPP:: db
-
ds 6
-
; list of normal max PP (without PP up) values
-wNormalMaxPPList:: ds 9
-
-NEXTU
-
-wEvosMoves:: ds MAX_EVOLUTIONS * EVOLUTION_SIZE + 1
-.end::
-
+wNormalMaxPPList:: ds NUM_MOVES
+ ds 5
ENDU
; buffer for transferring the random number list generated by the other gameboy
-wSerialOtherGameboyRandomNumberListBlock::
+wSerialOtherGameboyRandomNumberListBlock:: ; ds $11
; second buffer for temporarily saving and restoring current screen's tiles (e.g. if menus are drawn on top)
wTileMapBackup2:: ds 20 * 18
-wNamingScreenNameLength::
+; Temporary storage area
+wBuffer:: ; ds 30
+wNamingScreenNameLength::
wEvoOldSpecies::
-
-; Temporary storage area of 30 bytes.
-wBuffer::
-
; lower nybble is x, upper nybble is y
wTownMapCoords::
-
; whether WriteMonMoves is being used to make a mon learn moves from day care
; non-zero if so
wLearningMovesFromDayCare::
-
wChangeMonPicEnemyTurnSpecies::
+wHPBarMaxHP::
+ db
-wHPBarMaxHP:: db
-
; non-zero when the player has chosen to submit the name
wNamingScreenSubmitName::
-
wChangeMonPicPlayerTurnSpecies::
+wEvoNewSpecies::
+ db
-wEvoNewSpecies:: db
+UNION
+wHPBarOldHP:: dw
+wHPBarNewHP:: dw
+wHPBarDelta:: db
+wHPBarTempHP:: dw
+ ds 11
+wHPBarHPDifference:: db
+NEXTU
; 0 = upper case
; 1 = lower case
wAlphabetCase::
-
wEvoMonTileOffset::
+ db
-wHPBarOldHP:: db
-
wEvoCancelled:: db
-wNamingScreenLetter::
+wNamingScreenLetter:: db
+ENDU
-wHPBarNewHP:: dw
-wHPBarDelta:: db
-
-wHPBarTempHP:: dw
-
- ds 11
-
-wHPBarHPDifference:: db
-
ds 7
; the item that the AI used
@@ -1084,12 +930,12 @@
; bit 0: if set, DisplayTextID automatically draws a text box
wAutoTextBoxDrawingControl:: db
-wcf0d:: ds 1 ; used with some overworld scripts (not exactly sure what it's used for)
+wcf0d:: db ; used with some overworld scripts (not exactly sure what it's used for)
; used in CheckForTilePairCollisions2 to store the tile the player is on
wTilePlayerStandingOn:: db
-wNPCNumScriptedSteps:: ds 1
+wNPCNumScriptedSteps:: db
; which script function within the pointer table indicated by
; wNPCMovementScriptPointerTableNum
@@ -1101,7 +947,7 @@
wPredefParentBank:: db
-wSpriteIndex:: ds 1
+wSpriteIndex:: db
; movement byte 2 of current sprite
wCurSpriteMovement2:: db
@@ -1122,7 +968,7 @@
wDefaultPaletteCommand:: db
-wPlayerHPBarColor::
+wPlayerHPBarColor:: ; dw
; species of the mon whose palette is used for the whole screen
wWholeScreenPaletteMonSpecies:: db
@@ -1132,7 +978,7 @@
; 0: green
; 1: yellow
; 2: red
-wPartyMenuHPBarColors:: ds 6
+wPartyMenuHPBarColors:: ds PARTY_LENGTH
wStatusScreenHPBarColor:: db
@@ -1139,21 +985,20 @@
ds 7
wCopyingSGBTileData::
-
wWhichPartyMenuHPBar::
+wPalPacket::
+ db
-wPalPacket:: db
+wPartyMenuBlkPacket:: ; ds $30
-; $30 bytes
-wPartyMenuBlkPacket:: ds 29
+ ds 29
-; 2-byte big-endian number
-; the total amount of exp a mon gained
-wExpAmountGained::
-
; storage buffer for various strings
-wcf4b:: dw
+wcf4b:: ; ds 20
+; the total amount of exp a mon gained
+wExpAmountGained:: dw
+
wGainBoostedExp:: db
ds 17
@@ -1166,13 +1011,12 @@
wListPointer:: dw
-; 2 bytes
; used to store pointers, but never read
wUnusedCF8D:: dw
wItemPrices:: dw
-wcf91:: ds 1 ; used with a lot of things (too much to list here)
+wcf91:: db ; used with a lot of things (too much to list here)
; which pokemon you selected
wWhichPokemon:: db
@@ -1185,7 +1029,6 @@
; $01 = player HUD in battle / status screen
; $02 = party menu
wHPBarType::
-
; ID used by DisplayListMenuID
wListMenuID:: db
@@ -1192,7 +1035,6 @@
; if non-zero, RemovePokemon will remove the mon from the current box,
; else it will remove the mon from the party
wRemoveMonFromBox::
-
; 0 = move from box to party
; 1 = move from party to box
; 2 = move from daycare to party
@@ -1263,7 +1105,6 @@
wPlayerMoveAccuracy:: db
wPlayerMoveMaxPP:: db
-
wEnemyMonSpecies2:: db
wBattleMonSpecies2:: db
@@ -1271,9 +1112,9 @@
wEnemyMon:: battle_struct wEnemyMon
-wEnemyMonBaseStats:: ds 5
-wEnemyMonActualCatchRate:: ds 1
-wEnemyMonBaseExp:: ds 1
+wEnemyMonBaseStats:: ds NUM_STATS
+wEnemyMonActualCatchRate:: db
+wEnemyMonBaseExp:: db
wBattleMonNick:: ds NAME_LENGTH
wBattleMon:: battle_struct wBattleMon
@@ -1287,12 +1128,14 @@
ds 1
-wTempMoveNameBuffer::
+wTempMoveNameBuffer:: ; ds 14
; The name of the mon that is learning a move.
-wLearnMoveMonName:: ds 16
+wLearnMoveMonName:: ; ds NAME_LENGTH
-; 2-byte BCD number
+ ds 16
+
+; BCD number
; money received after battle = base money × level of highest-level enemy mon
wTrainerBaseMoney:: dw
@@ -1312,7 +1155,7 @@
wIsInBattle:: db
; flags that indicate which party members should be be given exp when GainExperience is called
-wPartyGainExpFlags:: flag_array 6
+wPartyGainExpFlags:: flag_array PARTY_LENGTH
; in a wild battle, this is the species of pokemon
; in a trainer battle, this is the trainer class + OPP_ID_OFFSET
@@ -1413,22 +1256,21 @@
ds 1
-; number of hits by player in attacks like Double Slap, etc.
-wPlayerNumHits::
+; the amount of damage accumulated by the player while biding
+wPlayerBideAccumulatedDamage:: ; dw
-; the amount of damage accumulated by the player while biding (2 bytes)
-wPlayerBideAccumulatedDamage::
+wUnknownSerialCounter2:: ; dw
-; 2 bytes
-wUnknownSerialCounter2::
+; number of hits by player in attacks like Double Slap, etc.
+wPlayerNumHits:: db
- ds 4
+ ds 3
; non-zero when an item or move that allows escape from battle was used
wEscapedFromBattle:: db
-; 3-byte BCD number
-wAmountMoneyWon::
+; BCD number
+wAmountMoneyWon:: ; ds 3
wObjectToHide:: db
@@ -1438,16 +1280,12 @@
; the map you will start at when the debug bit is set
wDefaultMap::
-
wMenuItemOffset::
-
; ID number of the current battle animation
wAnimationID:: db
wNamingScreenType::
-
wPartyMenuTypeOrMessageID::
-
; temporary storage for the number of tiles in a tileset
wTempTilesetNumTiles:: db
@@ -1463,7 +1301,7 @@
; low health alarm counter/enable
; high bit = enable, others = timer to cycle frequencies
-wLowHealthAlarm:: ds 1
+wLowHealthAlarm:: db
; counts how many tiles of the current frame block have been drawn
wFBTileCounter:: db
@@ -1483,42 +1321,32 @@
wNumFBTiles:: db
wFlashScreenLongCounter::
-
wSpiralBallsBaseY::
-
; bits 0-6: index into FallingObjects_DeltaXs array (0 - 8)
; bit 7: direction; 0 = right, 1 = left
wFallingObjectMovementByte::
-
wNumShootingBalls::
-
; $01 if mon is moving from left gameboy to right gameboy; $00 if vice versa
wTradedMonMovingRight::
-
wOptionsInitialized::
-
wNewSlotMachineBallTile::
-
; how much to add to the X/Y coord
wCoordAdjustmentAmount::
+wUnusedD08A::
+ db
-wUnusedD08A:: db
-
wSpiralBallsBaseX::
-
wNumFallingObjects::
-
wSlideMonDelay::
-
; generic counter variable for various animations
wAnimCounter::
-
; controls what transformations are applied to the subanimation
; 01: flip horizontally and vertically
; 02: flip horizontally and translate downwards 40 pixels
; 03: translate base coordinates of frame blocks, but don't change their internal coordinates or flip their tiles
; 04: reverse the subanimation
-wSubAnimTransform:: db
+wSubAnimTransform::
+ db
wEndBattleWinTextPointer:: dw
@@ -1533,25 +1361,23 @@
; the address _of the address_ of the current subanimation entry
wSubAnimAddrPtr:: dw
+; the address of the current subentry of the current subanimation
+wSubAnimSubEntryAddr:: ; dw
+
; If non-zero, the allow matches flag is always set.
; There is a 1/256 (~0.4%) chance that this value will be set to 60, which is
; the only way it can increase. Winning certain payout amounts will decrement it
; or zero it.
-wSlotMachineAllowMatchesCounter::
+wSlotMachineAllowMatchesCounter:: db
-; the address of the current subentry of the current subanimation
-wSubAnimSubEntryAddr:: dw
+ ds 3
- ds 2
-
wOutwardSpiralTileMapPointer:: db
wPartyMenuAnimMonEnabled::
-
; non-zero when enabled. causes nest locations to blink on and off.
; the town selection cursor will blink regardless of what this value is
wTownMapSpriteBlinkingEnabled::
-
wUnusedD09B:: db
; current destination address in OAM for frame blocks (big endian)
@@ -1568,25 +1394,19 @@
; 0 = small
; 1 = big
wLinkCableAnimBulgeToggle::
-
wIntroNidorinoBaseTile::
-
wOutwardSpiralCurrentDirection::
-
wDropletTile::
-
wNewTileBlockID::
-
wWhichBattleAnimTileset::
-
; 0 = left
; 1 = right
wSquishMonCurrentDirection::
-
; the tile ID of the leftmost tile in the bottom row in AnimationSlideMonUp_
-wSlideMonUpBottomRowLeftTile:: db
+wSlideMonUpBottomRowLeftTile::
+ db
-wDisableVBlankWYUpdate:: ds 1 ; if non-zero, don't update WY during V-blank
+wDisableVBlankWYUpdate:: db ; if non-zero, don't update WY during V-blank
wSpriteCurPosX:: db
wSpriteCurPosY:: db
@@ -1621,7 +1441,7 @@
; pointer to differential decoding table (assuming initial value 1)
wSpriteDecodeTable1Ptr:: dw
-wd0b5:: ds 1 ; used as a temp storage area for Pokemon Species, and other Pokemon/Battle related things
+wd0b5:: db ; used as a temp storage area for Pokemon Species, and other Pokemon/Battle related things
wNameListType:: db
@@ -1628,11 +1448,9 @@
wPredefBank:: db
wMonHeader::
-
; In the ROM base stats data structure, this is the dex number, but it is
; overwritten with the internal index number after the header is copied to WRAM.
wMonHIndex:: db
-
wMonHBaseStats::
wMonHBaseHP:: db
wMonHBaseAttack:: db
@@ -1639,26 +1457,18 @@
wMonHBaseDefense:: db
wMonHBaseSpeed:: db
wMonHBaseSpecial:: db
-
wMonHTypes::
wMonHType1:: db
wMonHType2:: db
-
wMonHCatchRate:: db
wMonHBaseEXP:: db
wMonHSpriteDim:: db
wMonHFrontSprite:: dw
wMonHBackSprite:: dw
-
wMonHMoves:: ds NUM_MOVES
-
wMonHGrowthRate:: db
-
-; bit field
wMonHLearnset:: flag_array NUM_TMS + NUM_HMS
-
ds 1
-
wMonHeaderEnd::
; saved at the start of a battle and then written back at the end of the battle
@@ -1698,26 +1508,20 @@
wFirstMonsNotOutYet:: db
wPokeBallCaptureCalcTemp::
-
; lower nybble: number of shakes
; upper nybble: number of animations to play
wPokeBallAnimData::
-
wUsingPPUp::
-
wMaxPP::
-
; 0 for player, non-zero for enemy
wCalculateWhoseStats::
-
wTypeEffectiveness::
-
wMoveType::
-
wNumSetBits::
+; used as a Pokemon and Item storage value. Also used as an output value for CountSetBits
+wd11e::
+ db
-wd11e:: ds 1 ; used as a Pokemon and Item storage value. Also used as an output value for CountSetBits
-
; When this value is non-zero, the player isn't allowed to exit the party menu
; by pressing B and not choosing a mon.
wForcePlayerToChooseMon:: db
@@ -1735,7 +1539,7 @@
wTextBoxID:: db
-wCurrentMapScriptFlags:: ds 1 ; not exactly sure what this is used for, but it seems to be used as a multipurpose temp flag value
+wCurrentMapScriptFlags:: db ; not exactly sure what this is used for, but it seems to be used as a multipurpose temp flag value
wCurEnemyLVL:: db
@@ -1751,7 +1555,6 @@
; the id of the menu item the player ultimately chose
wChosenMenuItem::
-
; non-zero when the whole party has fainted due to out-of-battle poison damage
wOutOfBattleBlackout:: db
@@ -1766,23 +1569,17 @@
; the size is always 6, so they didn't need a variable in RAM for this
wDungeonWarpDataEntrySize::
-
; 0 = museum guy
; 1 = gym guy
wWhichPewterGuy::
-
; there are 3 windows, from 0 to 2
wWhichPrizeWindow::
-
; a horizontal or vertical gate block
wGymGateTileBlock:: db
wSavedSpriteScreenY:: db
-
wSavedSpriteScreenX:: db
-
wSavedSpriteMapY:: db
-
wSavedSpriteMapX:: db
ds 5
@@ -1809,9 +1606,7 @@
wSerialRandomNumberListBlock::
wPrize1Price:: dw
-
wPrize2Price:: dw
-
wPrize3Price:: dw
ds 1
@@ -1819,8 +1614,7 @@
; shared list of 9 random numbers, indexed by wLinkBattleRandomNumberListIndex
wLinkBattleRandomNumberList:: ds 10
-; the first 6 bytes are the preamble
-wSerialPlayerDataBlock::
+wSerialPlayerDataBlock:: ; ds ...
; When a real item is being used, this is 0.
; When a move is acting as an item, this is the ID of the item it's acting as.
@@ -1841,7 +1635,7 @@
wPartyDataStart::
-wPartyCount:: ds 1
+wPartyCount:: db
wPartySpecies:: ds PARTY_LENGTH + 1
wPartyMons::
@@ -1874,7 +1668,6 @@
wPokedexSeen:: flag_array NUM_POKEMON
wPokedexSeenEnd::
-
wNumBagItems:: db
; item, quantity
wBagItems:: ds BAG_ITEM_CAPACITY * 2 + 1
@@ -1895,7 +1688,7 @@
; 5: Slow
wOptions:: db
-wObtainedBadges:: flag_array 8
+wObtainedBadges:: flag_array NUM_BADGES
ds 1
@@ -1908,7 +1701,6 @@
wPlayerID:: dw
wMapMusicSoundID:: db
-
wMapMusicROMBank:: db
; offset subtracted from FadePal4 to get the background and object palettes for the current map
@@ -1922,12 +1714,10 @@
; player's position on the current map
wYCoord:: db
-
wXCoord:: db
-; player's y position (by block)
+; player's position (by block)
wYBlockCoord:: db
-
wXBlockCoord:: db
wLastMap:: db
@@ -1938,86 +1728,20 @@
; blocks
wCurMapHeight:: db
-
-; blocks
wCurMapWidth:: db
wMapDataPtr:: dw
-
wMapTextPtr:: dw
-
wMapScriptPtr:: dw
-; connection byte
wMapConnections:: db
+wNorthConnectionHeader:: map_connection_struct wNorth
+wSouthConnectionHeader:: map_connection_struct wSouth
+wWestConnectionHeader:: map_connection_struct wWest
+wEastConnectionHeader:: map_connection_struct wEast
-wMapConn1Ptr:: db
-
-wNorthConnectionStripSrc:: dw
-
-wNorthConnectionStripDest:: dw
-
-wNorthConnectionStripWidth:: db
-
-wNorthConnectedMapWidth:: db
-
-wNorthConnectedMapYAlignment:: db
-
-wNorthConnectedMapXAlignment:: db
-
-wNorthConnectedMapViewPointer:: dw
-
-wMapConn2Ptr:: db
-
-wSouthConnectionStripSrc:: dw
-
-wSouthConnectionStripDest:: dw
-
-wSouthConnectionStripWidth:: db
-
-wSouthConnectedMapWidth:: db
-
-wSouthConnectedMapYAlignment:: db
-
-wSouthConnectedMapXAlignment:: db
-
-wSouthConnectedMapViewPointer:: dw
-
-wMapConn3Ptr:: db
-
-wWestConnectionStripSrc:: dw
-
-wWestConnectionStripDest:: dw
-
-wWestConnectionStripHeight:: db
-
-wWestConnectedMapWidth:: db
-
-wWestConnectedMapYAlignment:: db
-
-wWestConnectedMapXAlignment:: db
-
-wWestConnectedMapViewPointer:: dw
-
-wMapConn4Ptr:: db
-
-wEastConnectionStripSrc:: dw
-
-wEastConnectionStripDest:: dw
-
-wEastConnectionStripHeight:: db
-
-wEastConnectedMapWidth:: db
-
-wEastConnectedMapYAlignment:: db
-
-wEastConnectedMapXAlignment:: db
-
-wEastConnectedMapViewPointer:: dw
-
; sprite set for the current map (11 sprite picture ID's)
wSpriteSet:: ds 11
-
; sprite set ID for the current map
wSpriteSetID:: db
@@ -2028,11 +1752,11 @@
; the tile shown outside the boundaries of the map
wMapBackgroundTile:: db
-; number of warps in current map
+; number of warps in current map (up to 32)
wNumberOfWarps:: db
; current map warp entries
-wWarpEntries:: ds 128
+wWarpEntries:: ds 32 * 4 ; Y, X, warp ID, map ID
; if $ff, the player's coordinates are not updated when entering the map
wDestinationWarpID:: db
@@ -2042,13 +1766,10 @@
; number of signs in the current map (up to 16)
wNumSigns:: db
-; 2 bytes each
-; Y, X
-wSignCoords:: ds 32
-
+wSignCoords:: ds 16 * 2 ; Y, X
wSignTextIDs:: ds 16
-; number of sprites on the current map
+; number of sprites on the current map (up to 16)
wNumSprites:: db
; these two variables track the X and Y offset in blocks from the last special warp used
@@ -2056,12 +1777,9 @@
wYOffsetSinceLastSpecialWarp:: db
wXOffsetSinceLastSpecialWarp:: db
-; two bytes per sprite (movement byte 2, text ID)
-wMapSpriteData:: ds 32
+wMapSpriteData:: ds 16 * 2 ; movement byte 2, text ID
+wMapSpriteExtraData:: ds 16 * 2 ; trainer class/item ID, trainer set ID
-; two bytes per sprite (trainer class/item ID, trainer set ID)
-wMapSpriteExtraData:: ds 32
-
; map height in 2x2 meta-tiles
wCurrentMapHeight2:: db
@@ -2118,7 +1836,7 @@
wPlayerCoins:: ds 2 ; BCD
; bit array of missable objects. set = removed
-wMissableObjectFlags:: ds 32
+wMissableObjectFlags:: flag_array $100
wMissableObjectFlagsEnd::
ds 7
@@ -2130,9 +1848,10 @@
; * the sprite ID (depending on the current map)
; * the missable object index (global, used for wMissableObjectFlags)
; terminated with $FF
-wMissableObjectList:: ds 17 * 2
+wMissableObjectList:: ds 16 * 2 + 1
-; $c8 bytes
+ ds 1
+
wGameProgressFlags::
wOaksLabCurScript:: db
wPalletTownCurScript:: db
@@ -2252,9 +1971,9 @@
ds 56
-wObtainedHiddenItemsFlags:: ds 14
+wObtainedHiddenItemsFlags:: flag_array 112
-wObtainedHiddenCoinsFlags:: dw
+wObtainedHiddenCoinsFlags:: flag_array 16
; $00 = walking
; $01 = biking
@@ -2270,7 +1989,6 @@
; item given to cinnabar lab
wFossilItem:: db
-
; mon that will result from the item
wFossilMon:: db
@@ -2409,19 +2127,16 @@
ds 2
wWarpedFromWhichWarp:: db
-
wWarpedFromWhichMap:: db
ds 2
wCardKeyDoorY:: db
-
wCardKeyDoorX:: db
ds 2
wFirstLockTrashCanIndex:: db
-
wSecondLockTrashCanIndex:: db
ds 2
@@ -2479,7 +2194,6 @@
; the trainer the player must face after getting a wrong answer in the Cinnabar
; gym quiz
wOpponentAfterWrongAnswer::
-
wUnusedDA38:: db
; index of current map script, mostly used as index for function pointer array
@@ -2513,7 +2227,7 @@
wBoxDataStart::
-wBoxCount:: ds 1
+wBoxCount:: db
wBoxSpecies:: ds MONS_PER_BOX + 1
wBoxMons::