pokecrystal-board/wram.asm
mid-kid a21507f22a Document wSuicuneFrame
Also fixed inmediate in PlaceMapNameFrame.FillTopBottom to calculate the
amount of loops required. (It fills two tiles in the first iteration,
and four in the remaining, hence the `-2` and `+1` part).
2019-01-15 13:08:40 +01:00

3123 lines
64 KiB
NASM

INCLUDE "constants.asm"
INCLUDE "macros/wram.asm"
INCLUDE "vram.asm"
SECTION "Stack", WRAM0
wStackBottom::
ds $100 - 1
wStack::
wStackTop::
ds 1
SECTION "Audio RAM", WRAM0
wMusic::
; nonzero if playing
wMusicPlaying:: db ; c100
wChannels::
wChannel1:: channel_struct wChannel1 ; c101
wChannel2:: channel_struct wChannel2 ; c133
wChannel3:: channel_struct wChannel3 ; c165
wChannel4:: channel_struct wChannel4 ; c197
wSFXChannels::
wChannel5:: channel_struct wChannel5 ; c1c9
wChannel6:: channel_struct wChannel6 ; c1fb
wChannel7:: channel_struct wChannel7 ; c22d
wChannel8:: channel_struct wChannel8 ; c25f
ds 1 ; c291
wCurTrackDuty:: db
wCurTrackIntensity:: db
wCurTrackFrequency:: dw
wc296:: db ; BCD value, dummied out
wCurNoteDuration:: db ; used in MusicE0 and LoadNote
wCurMusicByte:: db ; c298
wCurChannel:: db ; c299
wVolume:: ; c29a
; corresponds to rNR50
; Channel control / ON-OFF / Volume (R/W)
; bit 7 - Vin->SO2 ON/OFF
; bit 6-4 - SO2 output level (volume) (# 0-7)
; bit 3 - Vin->SO1 ON/OFF
; bit 2-0 - SO1 output level (volume) (# 0-7)
db
wSoundOutput:: ; c29b
; corresponds to rNR51
; bit 4-7: ch1-4 so2 on/off
; bit 0-3: ch1-4 so1 on/off
db
wSoundInput:: ; c29c
; corresponds to rNR52
; bit 7: global on/off
; bit 0: ch1 on/off
; bit 1: ch2 on/off
; bit 2: ch3 on/off
; bit 3: ch4 on/off
db
wMusicID:: dw ; c29d
wMusicBank:: db ; c29f
wNoiseSampleAddress:: dw ; c2a0
wNoiseSampleDelay:: db ; c2a2
ds 1 ; c2a3
wMusicNoiseSampleSet:: db ; c2a4
wSFXNoiseSampleSet:: db ; c2a5
wLowHealthAlarm:: ; c2a6
; bit 7: on/off
; bit 4: pitch
; bit 0-3: counter
db
wMusicFade:: ; c2a7
; fades volume over x frames
; bit 7: fade in/out
; bit 0-5: number of frames for each volume level
; $00 = none (default)
db
wMusicFadeCount:: db ; c2a8
wMusicFadeID:: dw ; c2a9
ds 5
wCryPitch:: dw ; c2b0
wCryLength:: dw ; c2b2
wLastVolume:: db ; c2b4
wc2b5:: db ; c2b5
wSFXPriority:: ; c2b6
; if nonzero, turn off music when playing sfx
db
ds 1
wChannel1JumpCondition:: db
wChannel2JumpCondition:: db
wChannel3JumpCondition:: db
wChannel4JumpCondition:: db
wStereoPanningMask:: db ; c2bc
wCryTracks:: ; c2bd
; plays only in left or right track depending on what side the monster is on
; both tracks active outside of battle
db
wSFXDuration:: db
wCurSFX:: ; c2bf
; id of sfx currently playing
db
wChannelsEnd::
wMapMusic:: db ; c2c0
wDontPlayMapMusicOnReload:: db
wMusicEnd::
SECTION "WRAM", WRAM0
wLZAddress:: dw ; c2c2
wLZBank:: db ; c2c4
ds 1
wBoxAlignment:: db
wInputType:: db ; c2c7
wAutoInputAddress:: dw ; c2c8
wAutoInputBank:: db ; c2ca
wAutoInputLength:: db ; c2cb
wDebugFlags:: db
wGameLogicPaused:: db ; c2cd
wSpriteUpdatesEnabled:: db
wc2cf:: db ; ????
wMapTimeOfDay:: db
ds 3
wPrinterConnectionOpen:: db
wPrinterOpcode:: db
wPrevDexEntry:: db
wDisableTextAcceleration:: db
wPrevLandmark:: db
wCurLandmark:: db
wLandmarkSignTimer:: dw
wLinkMode::
; a LINK_* value for the link type
db ; c2dc
wScriptVar:: db ; c2dd
wPlayerNextMovement:: db
wPlayerMovement:: db
ds 2
wc2e2::
wMovementObject::
db
wMovementDataPointer:: ds 3 ; dba
wc2e6:: ds 4
wMovementByteWasControlSwitch:: db
wMovementPointer:: dw ; c2eb
ds 3
wTempObjectCopyMapObjectIndex:: db ; c2f0
wTempObjectCopySprite:: db ; c2f1
wTempObjectCopySpriteVTile:: db ; c2f2
wTempObjectCopyPalette:: db ; c2f3
wTempObjectCopyMovement:: db ; c2f4
wTempObjectCopyRange:: db ; c2f5
wTempObjectCopyX:: db ; c2f6
wTempObjectCopyY:: db ; c2f7
wTempObjectCopyRadius:: db ; c2f8
ds 1
wTileDown:: db ; c2fa
wTileUp:: db ; c2fb
wTileLeft:: db ; c2fc
wTileRight:: db ; c2fd
wTilePermissions:: ; c2fe
; set if tile behavior prevents
; you from walking in that direction
; bit 3: down
; bit 2: up
; bit 1: left
; bit 0: right
db
ds 1
SECTION "wSpriteAnims", WRAM0
UNION ; c300
; wSpriteAnimDict is a 10x2 dictionary
; keys: taken from third column of SpriteAnimSeqData
; values: vTiles
wSpriteAnimDict:: ds 10 * 2
wSpriteAnimationStructs::
; field 0: index
; fields 1-3: loaded from SpriteAnimSeqData
wSpriteAnim1:: sprite_anim_struct wSpriteAnim1
wSpriteAnim2:: sprite_anim_struct wSpriteAnim2
wSpriteAnim3:: sprite_anim_struct wSpriteAnim3
wSpriteAnim4:: sprite_anim_struct wSpriteAnim4
wSpriteAnim5:: sprite_anim_struct wSpriteAnim5
wSpriteAnim6:: sprite_anim_struct wSpriteAnim6
wSpriteAnim7:: sprite_anim_struct wSpriteAnim7
wSpriteAnim8:: sprite_anim_struct wSpriteAnim8
wSpriteAnim9:: sprite_anim_struct wSpriteAnim9
wSpriteAnim10:: sprite_anim_struct wSpriteAnim10
wSpriteAnimationStructsEnd::
NEXTU ; c300
; mobile data
wc300:: ds 1
wc301:: ds 1
wc302:: ds 1
wc303:: ds 2
wc305:: ds 1
wc306:: ds 1
wc307:: ds 1
wc308:: ds 1
wc309:: ds 1
wc30a:: ds 1
wc30b:: ds 1
wc30c:: ds 1
wc30d:: ds 1
wc30e:: ds 1
wc30f:: ds 1
wc310:: ds 1
wc311:: ds 1
wc312:: ds 1
wc313:: ds 1
wc314:: ds 152
wc3ac:: ds 8
ENDU ; c3b4
wSpriteAnimCount:: db
wCurSpriteOAMAddr:: db
wCurIcon:: db ; c3b6
wCurIconTile:: db
wSpriteAnimAddrBackup::
wSpriteAnimIDBuffer::
wCurSpriteAddSubFlags::
dw
wCurAnimVTile:: db
wCurAnimXCoord:: db
wCurAnimYCoord:: db
wCurAnimXOffset:: db
wCurAnimYOffset:: db
wGlobalAnimYOffset:: db
wGlobalAnimXOffset:: db
wSpriteAnimsEnd::
ds 11
; mobile data
wc3cc:: ds 1
wc3cd:: ds 31
wc3ec:: ds 1
wc3ed:: ds 1
wc3ee:: ds 1
wc3ef:: ds 1
wc3f0:: ds 1
wc3f1:: ds 1
wc3f2:: ds 1
wc3f3:: ds 1
wc3f4:: ds 1
wc3f5:: ds 1
wc3f6:: ds 1
wc3f7:: ds 1
wc3f8:: ds 1
wc3f9:: ds 1
wc3fa:: ds 1
wc3fb:: ds 1
wc3fc:: ds 1
ds 3
SECTION "Sprites", WRAM0
wVirtualOAM:: ; c400
wVirtualOAMSprite00:: sprite_oam_struct wVirtualOAMSprite00
wVirtualOAMSprite01:: sprite_oam_struct wVirtualOAMSprite01
wVirtualOAMSprite02:: sprite_oam_struct wVirtualOAMSprite02
wVirtualOAMSprite03:: sprite_oam_struct wVirtualOAMSprite03
wVirtualOAMSprite04:: sprite_oam_struct wVirtualOAMSprite04
wVirtualOAMSprite05:: sprite_oam_struct wVirtualOAMSprite05
wVirtualOAMSprite06:: sprite_oam_struct wVirtualOAMSprite06
wVirtualOAMSprite07:: sprite_oam_struct wVirtualOAMSprite07
wVirtualOAMSprite08:: sprite_oam_struct wVirtualOAMSprite08
wVirtualOAMSprite09:: sprite_oam_struct wVirtualOAMSprite09
wVirtualOAMSprite10:: sprite_oam_struct wVirtualOAMSprite10
wVirtualOAMSprite11:: sprite_oam_struct wVirtualOAMSprite11
wVirtualOAMSprite12:: sprite_oam_struct wVirtualOAMSprite12
wVirtualOAMSprite13:: sprite_oam_struct wVirtualOAMSprite13
wVirtualOAMSprite14:: sprite_oam_struct wVirtualOAMSprite14
wVirtualOAMSprite15:: sprite_oam_struct wVirtualOAMSprite15
wVirtualOAMSprite16:: sprite_oam_struct wVirtualOAMSprite16
wVirtualOAMSprite17:: sprite_oam_struct wVirtualOAMSprite17
wVirtualOAMSprite18:: sprite_oam_struct wVirtualOAMSprite18
wVirtualOAMSprite19:: sprite_oam_struct wVirtualOAMSprite19
wVirtualOAMSprite20:: sprite_oam_struct wVirtualOAMSprite20
wVirtualOAMSprite21:: sprite_oam_struct wVirtualOAMSprite21
wVirtualOAMSprite22:: sprite_oam_struct wVirtualOAMSprite22
wVirtualOAMSprite23:: sprite_oam_struct wVirtualOAMSprite23
wVirtualOAMSprite24:: sprite_oam_struct wVirtualOAMSprite24
wVirtualOAMSprite25:: sprite_oam_struct wVirtualOAMSprite25
wVirtualOAMSprite26:: sprite_oam_struct wVirtualOAMSprite26
wVirtualOAMSprite27:: sprite_oam_struct wVirtualOAMSprite27
wVirtualOAMSprite28:: sprite_oam_struct wVirtualOAMSprite28
wVirtualOAMSprite29:: sprite_oam_struct wVirtualOAMSprite29
wVirtualOAMSprite30:: sprite_oam_struct wVirtualOAMSprite30
wVirtualOAMSprite31:: sprite_oam_struct wVirtualOAMSprite31
wVirtualOAMSprite32:: sprite_oam_struct wVirtualOAMSprite32
wVirtualOAMSprite33:: sprite_oam_struct wVirtualOAMSprite33
wVirtualOAMSprite34:: sprite_oam_struct wVirtualOAMSprite34
wVirtualOAMSprite35:: sprite_oam_struct wVirtualOAMSprite35
wVirtualOAMSprite36:: sprite_oam_struct wVirtualOAMSprite36
wVirtualOAMSprite37:: sprite_oam_struct wVirtualOAMSprite37
wVirtualOAMSprite38:: sprite_oam_struct wVirtualOAMSprite38
wVirtualOAMSprite39:: sprite_oam_struct wVirtualOAMSprite39
wVirtualOAMEnd::
SECTION "Tilemap", WRAM0
wTileMap:: ; c4a0
; 20x18 grid of 8x8 tiles
ds SCREEN_WIDTH * SCREEN_HEIGHT
wTileMapEnd::
SECTION "Battle", WRAM0
UNION ; c608
; unidentified uses
wc608:: ds 53
wc63d:: ds 5
wc642:: ds 5
wc647:: ds 33
wc668:: ds 32
wc688:: ds 2
wc68a:: ds 350
NEXTU ; c608
; surrounding tiles
wSurroundingTiles:: ds SURROUNDING_WIDTH * SURROUNDING_HEIGHT
NEXTU ; c608
; box save buffer
wBoxPartialData:: ds 480
wBoxPartialDataEnd::
NEXTU ; c608
; odd egg
wOddEgg:: party_struct wOddEgg
wOddEggName:: ds MON_NAME_LENGTH
wOddEggOTName:: ds NAME_LENGTH
NEXTU ; c608
; battle tower temp struct
wBT_OTTemp:: battle_tower_struct wBT_OTTemp
NEXTU ; c608
; hall of fame temp struct
wHallOfFameTemp:: hall_of_fame wHallOfFameTemp
NEXTU ; c608
; timeset temp storage
wTimeSetBuffer::
ds 20
wInitHourBuffer:: db ; c61c
ds 9
wInitMinuteBuffer:: db ; c626
NEXTU ; c608
; link engine data
wLink_c608:: ds 10
wc612:: ds 10
NEXTU ; c608
; battle data
wBattle::
wEnemyMoveStruct:: move_struct wEnemyMoveStruct ; c608
wPlayerMoveStruct:: move_struct wPlayerMoveStruct ; c60f
wEnemyMonNick:: ds MON_NAME_LENGTH ; c616
wBattleMonNick:: ds MON_NAME_LENGTH ; c621
wBattleMon:: battle_struct wBattleMon ; c62c
ds 2
wWildMon:: db ; c64e
ds 1
wEnemyTrainerItem1:: db ; c650
wEnemyTrainerItem2:: db ; c651
wEnemyTrainerBaseReward:: db ; c652
wEnemyTrainerAIFlags:: ds 3 ; c653
wOTClassName:: ds TRAINER_CLASS_NAME_LENGTH ; c656
wCurOTMon:: db ; c663
wBattleParticipantsNotFainted::
; Bit array. Bits 0 - 5 correspond to party members 1 - 6.
; Bit set if the mon appears in battle.
; Bit cleared if the mon faints.
; Backed up if the enemy switches.
; All bits cleared if the enemy faints.
db
wTypeModifier:: ; c665
; >10: super-effective
; 10: normal
; <10: not very effective
; bit 7: stab
db
wCriticalHit:: ; c666
; 0 if not critical
; 1 for a critical hit
; 2 for a OHKO
db
wAttackMissed:: ; c667
; nonzero for a miss
db
wPlayerSubStatus1:: ; c668
; bit
; 7 in love
; 6 rollout
; 5 endure
; 4 perish song
; 3 identified
; 2 protect
; 1 curse
; 0 nightmare
db
wPlayerSubStatus2:: ; c669
; bit
; 7
; 6
; 5
; 4
; 3
; 2
; 1
; 0 curled
db
wPlayerSubStatus3:: ; c66a
; bit
; 7 confused
; 6 flying
; 5 underground
; 4 charged
; 3 flinched
; 2 in loop
; 1 rampage
; 0 bide
db
wPlayerSubStatus4:: ; c66b
; bit
; 7 leech seed
; 6 rage
; 5 recharge
; 4 substitute
; 3
; 2 focus energy
; 1 mist
; 0 x accuracy
db
wPlayerSubStatus5:: ; c66c
; bit
; 7 can't run
; 6 destiny bond
; 5 lock-on
; 4 encored
; 3 transformed
; 2
; 1
; 0 toxic
db
wEnemySubStatus1:: ; c66d
; see wPlayerSubStatus1
db
wEnemySubStatus2:: ; c66e
; see wPlayerSubStatus2
db
wEnemySubStatus3:: ; c66f
; see wPlayerSubStatus3
db
wEnemySubStatus4:: ; c670
; see wPlayerSubStatus4
db
wEnemySubStatus5:: ; c671
; see wPlayerSubStatus5
db
wPlayerRolloutCount:: db ; c672
wPlayerConfuseCount:: db ; c673
wPlayerToxicCount:: db ; c674
wPlayerDisableCount:: db ; c675
wPlayerEncoreCount:: db ; c676
wPlayerPerishCount:: db ; c677
wPlayerFuryCutterCount:: db ; c678
wPlayerProtectCount:: db ; c679
wEnemyRolloutCount:: db ; c67a
wEnemyConfuseCount:: db ; c67b
wEnemyToxicCount:: db ; c67c
wEnemyDisableCount:: db ; c67d
wEnemyEncoreCount:: db ; c67e
wEnemyPerishCount:: db ; c67f
wEnemyFuryCutterCount:: db ; c680
wEnemyProtectCount:: db ; c681
wPlayerDamageTaken:: dw ; c682
wEnemyDamageTaken:: dw ; c684
wBattleReward:: ds 3 ; c686
wBattleAnimParam::
wKickCounter::
wPresentPower::
db ; c689
wBattleScriptBuffer:: ds 40 ; c68a
wBattleScriptBufferAddress:: dw ; c6b2
wTurnEnded:: db ; c6b4
ds 1
wPlayerStats:: ; c6b6
wPlayerAttack:: dw
wPlayerDefense:: dw
wPlayerSpeed:: dw
wPlayerSpAtk:: dw
wPlayerSpDef:: dw
ds 1
wEnemyStats:: ; c6c1
wEnemyAttack:: dw
wEnemyDefense:: dw
wEnemySpeed:: dw
wEnemySpAtk:: dw
wEnemySpDef:: dw
ds 1
wPlayerStatLevels:: ; c6cc
; 07 neutral
wPlayerAtkLevel:: db ; c6cc
wPlayerDefLevel:: db ; c6cd
wPlayerSpdLevel:: db ; c6ce
wPlayerSAtkLevel:: db ; c6cf
UNION ; c6d0
; finish battle RAM
wPlayerSDefLevel:: db ; c6d0
wPlayerAccLevel:: db ; c6d1
wPlayerEvaLevel:: db ; c6d2
ds 1 ; c6d3
wPlayerStatLevelsEnd::
wEnemyStatLevels:: ; c6d4
; 07 neutral
wEnemyAtkLevel:: db ; c6d4
wEnemyDefLevel:: db ; c6d5
wEnemySpdLevel:: db ; c6d6
wEnemySAtkLevel:: db ; c6d7
wEnemySDefLevel:: db ; c6d8
wEnemyAccLevel:: db ; c6d9
wEnemyEvaLevel:: db ; c6da
ds 1
wEnemyTurnsTaken:: db ; c6dc
wPlayerTurnsTaken:: db ; c6dd
ds 1
wPlayerSubstituteHP:: db ; c6df
wEnemySubstituteHP:: db ; c6e0
wUnusedPlayerLockedMove:: db ; c6e1
ds 1
wCurPlayerMove:: db ; c6e3
wCurEnemyMove:: db ; c6e4
wLinkBattleRNCount:: ; c6e5
; how far through the prng stream
db
wEnemyItemState:: db ; c6e6
ds 2
wCurEnemyMoveNum:: db ; c6e9
wEnemyHPAtTimeOfPlayerSwitch:: dw ; c6ea
wPayDayMoney:: ds 3 ; c6ec
wSafariMonAngerCount:: db
wSafariMonEating:: db
ds 1
wEnemyBackupDVs:: dw ; used when enemy is transformed
wAlreadyDisobeyed:: db ; c6f4
wDisabledMove:: db ; c6f5
wEnemyDisabledMove:: db ; c6f6
wWhichMonFaintedFirst:: db
; exists so you can't counter on switch
wLastPlayerCounterMove:: db ; c6f8
wLastEnemyCounterMove:: db ; c6f9
wEnemyMinimized:: db ; c6fa
wAlreadyFailed:: db ; c6fb
wBattleParticipantsIncludingFainted:: db ; c6fc
wBattleLowHealthAlarm:: db ; c6fd
wPlayerMinimized:: db ; c6fe
wPlayerScreens:: ; c6ff
; bit
; 7
; 6
; 5
; 4 reflect
; 3 light screen
; 2 safeguard
; 1
; 0 spikes
db
wEnemyScreens:: ; c700
; see wPlayerScreens
db
wPlayerSafeguardCount:: db ; c701
wPlayerLightScreenCount:: db ; c702
wPlayerReflectCount:: db ; c703
ds 1
wEnemySafeguardCount:: db ; c705
wEnemyLightScreenCount:: db ; c706
wEnemyReflectCount:: db ; c707
ds 2
wBattleWeather:: ; c70a
; 00 normal
; 01 rain
; 02 sun
; 03 sandstorm
; 04 rain stopped
; 05 sunliight faded
; 06 sandstorm subsided
db
wWeatherCount:: ; c70b
; # turns remaining
db
wLoweredStat:: db ; c70c
wEffectFailed:: db ; c70d
wFailedMessage:: db ; c70e
wEnemyGoesFirst:: db ; c70f
wPlayerIsSwitching:: db ; c710
wEnemyIsSwitching:: db ; c711
wPlayerUsedMoves:: ; c712
; add a move that has been used once by the player
; added in order of use
ds NUM_MOVES
wEnemyAISwitchScore:: db ; c716
wEnemySwitchMonParam:: db ; c717
wEnemySwitchMonIndex:: db ; c718
wTempLevel:: db ; c719
wLastPlayerMon:: db ; c71a
wLastPlayerMove:: db ; c71b
wLastEnemyMove:: db ; c71c
wPlayerFutureSightCount:: db ; c71d
wEnemyFutureSightCount:: db ; c71e
wGivingExperienceToExpShareHolders:: db ; c71f
wBackupEnemyMonBaseStats:: ds 5 ; c720
wBackupEnemyMonCatchRate:: db ; c725
wBackupEnemyMonBaseExp:: db ; c726
wPlayerFutureSightDamage:: dw ; c727
wEnemyFutureSightDamage:: dw ; c729
wPlayerRageCounter:: db ; c72b
wEnemyRageCounter:: db ; c72c
wBeatUpHitAtLeastOnce:: db ; c72d
wPlayerTrappingMove:: db ; c72e
wEnemyTrappingMove:: db ; c72f
wPlayerWrapCount:: db ; c730
wEnemyWrapCount:: db ; c731
wPlayerCharging:: db ; c732
wEnemyCharging:: db ; c733
wBattleEnded:: db ; c734
wWildMonMoves:: ds NUM_MOVES ; c735
wWildMonPP:: ds NUM_MOVES ; c739
wAmuletCoin:: db ; c73a
wSomeoneIsRampaging:: db ; c73b
wPlayerJustGotFrozen:: db ; c73c
wEnemyJustGotFrozen:: db ; c73d
wBattleEnd::
; Battle RAM
; c741
NEXTU ; c6d0
; trade
wTrademons::
wPlayerTrademon:: trademon wPlayerTrademon
wOTTrademon:: trademon wOTTrademon
wTrademonsEnd::
wTradeAnimAddress:: dw
wLinkPlayer1Name:: ds NAME_LENGTH
wLinkPlayer2Name:: ds NAME_LENGTH
wLinkTradeSendmonSpecies:: db
wLinkTradeGetmonSpecies:: db
NEXTU ; c6d0
; naming screen
wNamingScreenDestinationPointer:: dw ; c6d0
wNamingScreenCurNameLength:: db ; c6d2
wNamingScreenMaxNameLength:: db ; c6d3
wNamingScreenType:: db ; c6d4
wNamingScreenCursorObjectPointer:: dw ; c6d5
wNamingScreenLastCharacter:: db ; c6d7
wNamingScreenStringEntryCoord:: dw ; c6d8
NEXTU ; c6d0
; pokegear
wPokegearPhoneLoadNameBuffer:: db ; c6d0
wPokegearPhoneCursorPosition:: db ; c6d1
wPokegearPhoneScrollPosition:: db ; c6d2
wPokegearPhoneSelectedPerson:: db ; c6d3
wPokegearPhoneSubmenuCursor:: db ; c6d4
wPokegearMapCursorObjectPointer:: dw ; c6d5
wPokegearMapCursorLandmark:: db ; c6d7
wPokegearMapPlayerIconLandmark:: db ; c6d8
wPokegearRadioChannelBank:: db ; c6d9
wPokegearRadioChannelAddr:: dw ; c6da
wPokegearRadioMusicPlaying:: db ; c6dc
NEXTU ; c6d0
; slot machine
wSlots::
wReel1:: slot_reel wReel1
wReel2:: slot_reel wReel2
wReel3:: slot_reel wReel3
; c700
wReel1Stopped:: ds 3
wReel2Stopped:: ds 3
wReel3Stopped:: ds 3
wSlotBias:: db
wSlotBet:: db
wFirstTwoReelsMatching:: db
wFirstTwoReelsMatchingSevens:: db
wSlotMatched:: db
wCurReelStopped:: ds 3
wPayout:: dw
wCurReelXCoord:: db
wCurReelYCoord:: db
ds 2
wSlotBuildingMatch:: db
wSlotsDataEnd::
ds 28
wSlotsEnd::
NEXTU ; c6d0
; card flip
wCardFlip::
wDeck:: ds 24
wDeckEnd::
; c6e8
wCardFlipNumCardsPlayed:: db
wCardFlipFaceUpCard:: db
wDiscardPile:: ds 24
wDiscardPileEnd::
wCardFlipEnd::
NEXTU ; c6d0
; dummy game
wDummyGame::
wDummyGameCards:: ds 9 * 5
wDummyGameCardsEnd::
wDummyGameLastCardPicked:: db ; c6fd
wDummyGameCard1:: db ; c6fe
wDummyGameCard2:: db ; c6ff
wDummyGameCard1Location:: db ; c700
wDummyGameCard2Location:: db ; c701
wDummyGameNumberTriesRemaining:: db ; c702
wDummyGameLastMatches:: ds 5 ; c703
wDummyGameCounter:: db ; c708
wDummyGameNumCardsMatched:: db ; c709
wDummyGameEnd::
NEXTU ; c6d0
; unown puzzle
wUnownPuzzle::
wPuzzlePieces:: ds 6 * 6
wUnownPuzzleEnd::
NEXTU ; c6d0
; pokedex
wPokedexDataStart::
wPokedexOrder:: ds $100 ; >= NUM_POKEMON
wPokedexOrderEnd::
wDexListingScrollOffset:: db ; offset of the first displayed entry from the start
wDexListingCursor:: db ; Dex cursor
wDexListingEnd:: db ; Last mon to display
wDexListingHeight:: db ; number of entries displayed at once in the dex listing
wCurDexMode:: db ; Pokedex Mode
wDexSearchMonType1:: db ; first type to search
wDexSearchMonType2:: db ; second type to search
wDexSearchResultCount:: db
wDexArrowCursorPosIndex:: db
wDexArrowCursorDelayCounter:: db
wDexArrowCursorBlinkCounter:: db
wDexSearchSlowpokeFrame:: db
wUnlockedUnownMode:: db
wDexCurUnownIndex:: db
wDexUnownCount:: db
wDexConvertedMonType:: db ; mon type converted from dex search mon type
wDexListingScrollOffsetBackup:: db
wDexListingCursorBackup:: db
wBackupDexListingCursor:: db
wBackupDexListingPage:: db
wDexCurLocation:: db
if DEF(_CRYSTAL11)
wPokedexStatus:: db
wPokedexDataEnd::
else
wPokedexDataEnd:: ds 1
endc
ds 2
NEXTU ; c6d0
; mobile data
wc6d0:: ds 56
wc708:: db
wc709:: db
wc70a:: db
wc70b:: db
wc70c:: db
wc70d:: db
wc70e:: db
wc70f:: db
wc710:: db
wc711:: db
wc712:: ds 60
wc74e:: ds 107
wc7b9:: ds 1
wc7ba:: ds 1
wc7bb:: ds 2
wc7bd:: ds 19
wc7d0:: ds 1
wc7d1:: ds 1
wc7d2:: ds 1
wc7d3:: ds 1
wc7d4:: ds 1
ENDU ; c7e8
ENDU ; c7e8
wc7e8:: ds 24
wc7e8_End::
SECTION "Overworld Map", WRAM0
UNION ; c800
; overworld map blocks
wOverworldMapBlocks:: ds 1300 ; c800
wOverworldMapBlocksEnd::
NEXTU ; c800
; GB Printer screen RAM
wGameboyPrinterRAM::
wGameboyPrinterScreen:: ds SCREEN_HEIGHT * SCREEN_WIDTH ; c800
wGameboyPrinterScreenEnd:: ; c968
NEXTU ; c800
; GB Printer data
wGameboyPrinter2bppSource:: ds 40 tiles
wGameboyPrinter2bppSourceEnd::
wca80:: db
wPrinterRowIndex:: db
; Printer data
wPrinterData:: ds 4
wPrinterChecksum:: dw ; ca86
wPrinterHandshake:: db
wPrinterStatusFlags::
; bit 7: set if error 1 (battery low)
; bit 6: set if error 4 (too hot or cold)
; bit 5: set if error 3 (paper jammed or empty)
; if this and the previous byte are both $ff: error 2 (connection error)
db
wHandshakeFrameDelay:: db
wPrinterSerialFrameDelay:: db
wPrinterSendByteOffset:: dw
wPrinterSendByteCounter:: dw
; tilemap backup?
wPrinterTileMapBuffer:: ds SCREEN_HEIGHT * SCREEN_WIDTH ; ca90
wPrinterTileMapBufferEnd::
wPrinterStatus:: db ; cbf8
ds 1
wcbfa:: ds 1
wGBPrinterSettings:: db
ds 16
wGameboyPrinterRAMEnd::
NEXTU ; c800
; bill's pc data
wBillsPCPokemonList::
; (species, box number, list index) x30
ds 3 * 30
NEXTU ; c800
; Hall of Fame data
wHallOfFamePokemonList:: hall_of_fame wHallOfFamePokemonList
NEXTU ; c800
; raw link data
wLinkData:: ds $514
wLinkDataEnd::
NEXTU ; c800
; link data members
wLinkPlayerName:: ds NAME_LENGTH
wLinkPartyCount:: db
wLinkPartySpecies:: ds PARTY_LENGTH
wLinkPartyEnd:: db ; older code doesn't check PartyCount
UNION ; c813
; time capsule party data
wTimeCapsulePlayerData::
wTimeCapsulePartyMon1:: red_party_struct wTimeCapsulePartyMon1
wTimeCapsulePartyMon2:: red_party_struct wTimeCapsulePartyMon2
wTimeCapsulePartyMon3:: red_party_struct wTimeCapsulePartyMon3
wTimeCapsulePartyMon4:: red_party_struct wTimeCapsulePartyMon4
wTimeCapsulePartyMon5:: red_party_struct wTimeCapsulePartyMon5
wTimeCapsulePartyMon6:: red_party_struct wTimeCapsulePartyMon6
wTimeCapsulePartyMonOTNames:: ds PARTY_LENGTH * NAME_LENGTH
wTimeCapsulePartyMonNicks:: ds PARTY_LENGTH * MON_NAME_LENGTH
wTimeCapsulePlayerDataEnd::
NEXTU ; c813
; link player data
wLinkPlayerData::
wLinkPlayerPartyMon1:: party_struct wLinkPlayerPartyMon1
wLinkPlayerPartyMon2:: party_struct wLinkPlayerPartyMon2
wLinkPlayerPartyMon3:: party_struct wLinkPlayerPartyMon3
wLinkPlayerPartyMon4:: party_struct wLinkPlayerPartyMon4
wLinkPlayerPartyMon5:: party_struct wLinkPlayerPartyMon5
wLinkPlayerPartyMon6:: party_struct wLinkPlayerPartyMon6
wLinkPlayerPartyMonOTNames:: ds PARTY_LENGTH * NAME_LENGTH
wLinkPlayerPartyMonNicks:: ds PARTY_LENGTH * MON_NAME_LENGTH
wLinkPlayerDataEnd::
ENDU ; c9b7
NEXTU ; c800
; mystery gift data
wMysteryGiftPartyTemp:: ; ds PARTY_LENGTH * (1 + 1 + NUM_MOVES)
wMysteryGiftStaging::
wc800:: ds 1
wc801:: ds 1
wc802:: ds 1
wc803:: ds 4
wc807:: ds 7
wc80e:: ds 1
wc80f:: ds 1
wc810:: ds 1
wc811:: ds 1
wc812:: ds 1
wc813:: ds 1
wc814:: ds 4
wc818:: ds 8
wc820:: ds 1
wc821:: ds 47
UNION ; c850
wMysteryGiftTrainerData:: ds (1 + 1 + NUM_MOVES) * PARTY_LENGTH + 2
wMysteryGiftTrainerDataEnd::
NEXTU ; c850
wc850:: ds 16
wc860:: ds 16
wc870:: ds 16
wc880:: ds 16
wc890:: ds 16
wc8a0:: ds 16
wc8b0:: ds 16
wc8c0:: ds 16
wc8d0:: ds 16
wc8e0:: ds 16
wc8f0:: ds 16
ENDU ; c900
wMysteryGiftPartnerData::
wc900:: db
wMysteryGiftPartnerID:: dw
wMysteryGiftPartnerName:: ds NAME_LENGTH
wMysteryGiftPartnerDexCaught:: db
wc90f::
wMysteryGiftPartnerSentDeco:: db
wMysteryGiftPartnerWhichItem:: db
wMysteryGiftPartnerWhichDeco:: db
wMysteryGiftPartnerBackupItem:: db
ds 1
wMysteryGiftPartnerDataEnd::
ds 60
wMysteryGiftPlayerData::
ds 1
wMysteryGiftPlayerID:: dw
wMysteryGiftPlayerName:: ds NAME_LENGTH
wMysteryGiftPlayerDexCaught:: db
wMysteryGiftPlayerSentDeco:: db
wMysteryGiftPlayerWhichItem:: db
wMysteryGiftPlayerWhichDeco:: db
wMysteryGiftPlayerBackupItem:: db
ds 1
wMysteryGiftPlayerDataEnd::
ds 144
wc9f4:: ds 5
wc9f9:: ds 7
UNION ; ca00
; blank credits tile buffer
wCreditsBlankFrame2bpp:: ds 4 * 4 tiles
wCreditsBlankFrame2bppEnd::
NEXTU ; ca00
; mystery gift data
wca00:: db
wca01:: db
wca02:: db
NEXTU ; ca00
; link data
ds 191
wcabf:: ds 79
wcb0e:: ds 5
wcb13:: ds 23
ENDU ; cb2a
wBillsPC_ScrollPosition:: db
wBillsPC_CursorPosition:: db
wBillsPC_NumMonsInBox:: db
wBillsPC_NumMonsOnScreen:: db
wBillsPC_LoadedBox:: db ; 0 if party, 1 - 14 if box, 15 if active box
wBillsPC_BackupScrollPosition:: db
wBillsPC_BackupCursorPosition:: db
wBillsPC_BackupLoadedBox:: db
wBillsPC_MonHasMail:: db
ds 18
wcb45:: ds 20
wcb59:: ds 20
wcb6d:: ds 1
wcb6e:: ds 22
wcb84:: ds 100
wcbe8:: dw
wLinkOTPartyMonTypes:: ds 2 * PARTY_LENGTH
ds 84
wcc4a:: ds 22
wcc60:: ds 1
wcc61:: ds 1
wcc62:: ds 2
wcc64:: ds 1
wcc65:: ds 57
wcc9e:: ds 22
wccb4:: ds 1
wccb5:: ds 3
wccb8:: ds 1
wccb9:: ds 1
wccba:: ds 102
ENDU ; cd20
SECTION "Video", WRAM0
UNION ; cd20
; wBGMapBuffer
wBGMapBuffer:: ds 40 ; cd20
wBGMapPalBuffer:: ds 40 ; cd48
wBGMapBufferPtrs:: ds 40 ; cd70 ; 20 bg map addresses (16x8 tiles)
wBGMapBufferEnd::
NEXTU ; cd20
; credits
wCreditsPos:: db
wCreditsUnusedCD21:: db
wCreditsTimer:: db
NEXTU ; cd20
; mobile data
wMobileMonSpeciesPointerBuffer:: dw
wMobileMonStructurePointerBuffer:: dw
wMobileMonOTNamePointerBuffer:: dw
wMobileMonNicknamePointerBuffer:: dw
wMobileMonMailPointerBuffer:: dw
NEXTU ; cd20
; more mobile data
wcd20:: ds 1
wcd21:: ds 1
wcd22:: ds 1
wcd23:: ds 1
wcd24:: ds 1
wMobileCommsJumptableIndex:: ds 1 ; cd25
wcd26:: ds 1
wcd27:: ds 1
wcd28:: ds 1
wcd29:: ds 1
wMobileMonSpeciesBuffer::
wcd2a:: db
wTempOddEggNickname:: ; ds 11
wcd2b:: ds 1
wcd2c:: ds 1
wcd2d:: ds 1
wcd2e:: ds 1
wcd2f:: ds 1
wcd30:: ds 1
wcd31:: ds 1
wcd32:: ds 1
wcd33:: ds 1
wcd34:: ds 1
wcd35:: ds 1
; current time for link/mobile?
wcd36:: db ; hours
wcd37:: db ; mins
wcd38:: db ; secs
wcd39:: ds 1
wcd3a:: ds 1
wcd3b:: ds 1
wcd3c:: ds 1
wcd3d:: ds 1
wcd3e:: ds 1
wcd3f:: ds 1
wcd40:: ds 1
wcd41:: ds 1
wcd42:: ds 1
wcd43:: ds 1
; some sort of timer in link battles
wMobileInactivityTimerMinutes:: db ; mins
wMobileInactivityTimerSeconds:: db ; secs
wMobileInactivityTimerFrames:: db ; frames
wcd47:: ds 1
ds 1
wBTTempOTSprite::
wcd49:: db
wcd4a:: ds 1
wcd4b:: ds 1
wEZChatCursorXCoord::
wcd4c:: db
wEZChatCursorYCoord::
wcd4d:: db
wcd4e:: ds 1
wcd4f:: ds 1
wcd50:: ds 1
wcd51:: ds 1
wcd52:: ds 1
wMobileOpponentBattleMessage:: ; ds 12
wcd53:: ds 1
wcd54:: ds 1
wcd55:: ds 1
wcd56:: ds 1
wcd57:: ds 1
wcd58:: ds 1
wcd59:: ds 1
wcd5a:: ds 1
wcd5b:: ds 1
wcd5c:: ds 1
wcd5d:: ds 1
wcd5e:: ds 1
wcd5f:: ds 1
wcd60:: ds 2
wcd62:: ds 1
wcd63:: ds 1
wcd64:: ds 1
wcd65:: ds 1
wcd66:: ds 1
wcd67:: ds 1
wcd68:: ds 1
wcd69:: ds 1
wcd6a:: ds 1
wcd6b:: ds 1
wcd6c:: ds 1
wcd6d:: ds 1
wcd6e:: ds 1
wcd6f:: ds 2
wcd71:: ds 1
wcd72:: ds 1
wcd73:: ds 1
wcd74:: ds 1
wOTMonSelection:: ds 2 ; ds BATTLETOWER_PARTY_LENGTH
wcd77:: ds 1
wMobileCrashCheckPointer:: dw
wcd7a:: ds 2
wcd7c:: ds 3
wcd7f:: ds 1
wcd80:: ds 1
wcd81:: ds 1
wcd82:: ds 1
wcd83:: ds 1
wcd84:: ds 1
wcd85:: ds 4
wcd89:: ds 1
wcd8a:: ds 1
wcd8b:: ds 1
wcd8c:: ds 1
wcd8d:: ds 11
ENDU ; cd98
wSGBPredef:: db ; cd98
wPlayerHPPal:: db ; cd99
wEnemyHPPal:: db ; cd9a
wHPPals:: ds PARTY_LENGTH
wCurHPPal:: db
ds 7
wSGBPals:: ds 48 ; cda9
wAttrMap:: ; cdd9
; 20x18 grid of bg tile attributes for 8x8 tiles
; read horizontally from the top row
; bit 7: priority
; bit 6: y flip
; bit 5: x flip
; bit 4: pal # (non-cgb)
; bit 3: vram bank (cgb only)
; bit 2-0: pal # (cgb only)
ds SCREEN_WIDTH * SCREEN_HEIGHT
wAttrMapEnd::
UNION ; cf41
; addresses dealing with serial comms
ds 1
wcf42:: db
ds 1
wcf44:: db
wcf45:: db
NEXTU ; cf41
wTileAnimBuffer:: ds 1 tiles
ENDU ; cf51
; link data
wOtherPlayerLinkMode:: db
wOtherPlayerLinkAction:: db
ds 3
wPlayerLinkAction:: db
wcf57:: db
ds 3
wLinkTimeoutFrames:: dw ; cf5b
wcf5d:: dw
wMonType:: db ; cf5f
wCurSpecies:: db ; cf60
wNamedObjectTypeBuffer:: db
ds 1
wJumptableIndex::
wBattleTowerBattleEnded::
db
UNION ; cf64
; unidentified
wcf64:: db
wcf65:: db
wcf66:: db
NEXTU ; cf64
; intro and title data
wIntroSceneFrameCounter:: db
UNION ; cf65
wIntroSceneTimer:: db
NEXTU ; cf65
wTitleScreenTimer:: dw
ENDU
NEXTU ; cf64
; credits data
wCreditsBorderFrame:: db
wCreditsBorderMon:: db
wCreditsLYOverride:: db
NEXTU ; cf64
; pokedex
wPrevDexEntryJumptableIndex:: db
if DEF(_CRYSTAL11)
wPrevDexEntryBackup:: db
else
wPrevDexEntryBackup::
wPokedexStatus:: db
endc
NEXTU ; cf64
; pokegear
wPokegearCard:: db
wPokegearMapRegion:: db
NEXTU ; cf64
; pack
wPackJumptableIndex:: db
wCurPocket:: db
wPackUsedItem:: db
NEXTU ; cf64
; trainer card badges
wTrainerCardBadgeFrameCounter:: db
wTrainerCardBadgeTileID:: db
wTrainerCardBadgeAttributes:: db
NEXTU ; cf64
; card flip data
wCardFlipCursorY:: db
wCardFlipCursorX:: db
wCardFlipWhichCard:: db
NEXTU ; cf64
; magnet train
wMagnetTrainOffset:: db
wMagnetTrainPosition:: db
wMagnetTrainWaitCounter:: db
NEXTU ; cf64
; unown puzzle data
wHoldingUnownPuzzlePiece:: db
wUnownPuzzleCursorPosition:: db
wUnownPuzzleHeldPiece:: db
NEXTU ; cf64
; miscellaneous
wFrameCounter::
wNrOfBeatenBattleTowerTrainers::
wMomBankDigitCursorPosition::
wNamingScreenLetterCase::
wHallOfFameMonCounter::
wSlotsDelay::
db
wPrinterQueueLength::
db
ENDU ; cf67
wRequested2bpp::
wRequested2bppSize:: db ; cf67
wRequested2bppSource:: dw ; cf68
wRequested2bppDest:: dw ; cf6a
wRequested1bpp::
wRequested1bppSize:: db ; cf6c
wRequested1bppSource:: dw ; cf6d
wRequested1bppDest:: dw ; cf6f
wWindowStackPointer:: dw ; cf71
wMenuJoypad:: db ; cf73
wMenuSelection:: db ; cf74
wMenuSelectionQuantity:: db ; cf75
wWhichIndexSet:: db ; cf76
wScrollingMenuCursorPosition:: db ; cf77
wWindowStackSize:: db ; cf78
ds 8
; menu header
wMenuHeader:: ; cf81
wMenuFlags:: db
wMenuBorderTopCoord:: db
wMenuBorderLeftCoord:: db
wMenuBorderBottomCoord:: db
wMenuBorderRightCoord:: db
wMenuDataPointer:: dw
wMenuCursorBuffer:: dw
wMenuDataBank:: db
ds 6
wMenuHeaderEnd::
wMenuData::
wMenuDataFlags:: db ; cf91
UNION ; cf92
; Vertical Menu/DoNthMenu/SetUpMenu
wMenuDataItems:: db ; cf92
wMenuDataIndicesPointer:: dw ; cf94
wMenuDataDisplayFunctionPointer:: dw ; cf96
wMenuDataPointerTableAddr:: dw ; cf97
NEXTU ; cf92
; 2D Menu
wMenuData_2DMenuDimensions:: db ; cf92
wMenuData_2DMenuSpacing:: db ; cf93
wMenuData_2DMenuItemStringsBank:: db ; cf94
wMenuData_2DMenuItemStringsAddr:: dw ; cf96
wMenuData_2DMenuFunctionBank:: db ; cf97
wMenuData_2DMenuFunctionAddr:: dw ; cf98
NEXTU ; cf92
; Scrolling Menu
wMenuData_ScrollingMenuHeight:: db ; cf92
wMenuData_ScrollingMenuWidth:: db ; cf93
wMenuData_ScrollingMenuSpacing:: db ; cf94
wMenuData_ItemsPointerBank:: db ; cf95
wMenuData_ItemsPointerAddr:: dw ; cf97
wMenuData_ScrollingMenuFunction1:: ds 3 ; cf98
wMenuData_ScrollingMenuFunction2:: ds 3 ; cf9b
wMenuData_ScrollingMenuFunction3:: ds 3 ; cf9e
ENDU ; cfa1
wMenuDataEnd::
w2DMenuData::
w2DMenuCursorInitY:: db ; cfa1
w2DMenuCursorInitX:: db ; cfa2
w2DMenuNumRows:: db ; cfa3
w2DMenuNumCols:: db ; cfa4
w2DMenuFlags1:: ; cfa5
; bit 7: Disable checking of wMenuJoypadFilter
; bit 6: Enable sprite animations
; bit 5: Wrap around vertically
; bit 4: Wrap around horizontally
; bit 3: Set bit 7 in w2DMenuFlags2 and exit the loop if bit 5 is disabled and we tried to go too far down
; bit 2: Set bit 7 in w2DMenuFlags2 and exit the loop if bit 5 is disabled and we tried to go too far up
; bit 1: Set bit 7 in w2DMenuFlags2 and exit the loop if bit 4 is disabled and we tried to go too far left
; bit 0: Set bit 7 in w2DMenuFlags2 and exit the loop if bit 4 is disabled and we tried to go too far right
db
w2DMenuFlags2:: db ; cfa6
w2DMenuCursorOffsets:: db ; cfa7
wMenuJoypadFilter:: db ; cfa8
w2DMenuDataEnd::
wMenuCursorY:: db ; cfa9
wMenuCursorX:: db ; cfaa
wCursorOffCharacter:: db ; cfab
wCursorCurrentTile:: dw ; cfac
ds 3
wOverworldDelay:: db ; cfb1
wTextDelayFrames:: db ; cfb2
wVBlankOccurred:: db ; cfb3
wPredefID:: db ; cfb4
wPredefTemp:: dw ; cfb5
wPredefAddress:: dw ; cfb7
wFarCallBCBuffer:: dw ; cfb9
wcfbb:: db
wGameTimerPause:: ; cfbc
; bit 0: game timer paused
; bit 7: something mobile
db
ds 1
wcfbe:: ; cfbe
; bits 4, 6, or 7 can be used to disable joypad input
; bit 4
; bit 6: mon fainted?
; bit 7: SGB flag?
db
ds 1
wInBattleTowerBattle:: ; cfc0
; 0 not in BattleTower-Battle
; 1 BattleTower-Battle
db
ds 1
wFXAnimID:: dw ; cfc2
wPlaceBallsX:: db ; cfc4
wPlaceBallsY:: db ; cfc5
wTileAnimationTimer:: db ; cfc6
; palette backups?
wBGP:: db
wOBP0:: db
wOBP1:: db
wNumHits:: db
ds 1
wOptions:: ; cfcc
; bit 0-2: number of frames to delay when printing text
; fast 1; mid 3; slow 5
; bit 3: ?
; bit 4: no text delay
; bit 5: stereo off/on
; bit 6: battle style shift/set
; bit 7: battle scene off/on
db
wSaveFileExists:: db
wTextBoxFrame:: ; cfce
; bits 0-2: textbox frame 0-7
db
wTextBoxFlags::
; bit 0: 1-frame text delay
; bit 4: no text delay
db
wGBPrinter:: ; cfd0
; bit 0-6: brightness
; lightest: $00
; lighter: $20
; normal: $40 (default)
; darker: $60
; darkest: $7F
db
wOptions2:: ; cfd1
; bit 1: menu account off/on
db
ds 2
wOptionsEnd::
; Time buffer, for counting the amount of time since
; an event began.
wSecondsSince:: db
wMinutesSince:: db
wHoursSince:: db
wDaysSince:: db
SECTION "WRAM 1", WRAMX
wGBCOnlyDecompressBuffer:: ds 1 ; also uses the next $53f bytes for $540 total
wDefaultSpawnpoint:: db
UNION ; d002
; mail temp storage
wTempMail:: mailmsg wTempMail
NEXTU ; d002
; poke seer
wSeerAction:: db
wSeerNickname:: ds MON_NAME_LENGTH
wSeerCaughtLocation:: ds 17
wSeerTimeOfDay:: ds NAME_LENGTH
wSeerOTName:: ds NAME_LENGTH
wSeerOTNameGrammar:: db
wSeerCaughtLevelString:: ds 4
wSeerCaughtLevel:: db
wSeerCaughtData:: db
wSeerCaughtGender:: db
NEXTU ; d002
; mon buffer
wBufferMonNick:: ds MON_NAME_LENGTH ; d002
wBufferMonOT:: ds NAME_LENGTH ; d00d
wBufferMon:: party_struct wBufferMon ; d018
ds 8
wMonOrItemNameBuffer::
NEXTU ; d002
; bug-catching contest
wBugContestResults::
bugcontestwinner wBugContestFirstPlace
bugcontestwinner wBugContestSecondPlace
bugcontestwinner wBugContestThirdPlace
wBugContestWinnersEnd::
bugcontestwinner wBugContestTemp
ds 4
wBugContestWinnerName:: ds NAME_LENGTH
NEXTU ; d002
; mart items
wMartItem1BCD:: ds 3
wMartItem2BCD:: ds 3
wMartItem3BCD:: ds 3
wMartItem4BCD:: ds 3
wMartItem5BCD:: ds 3
wMartItem6BCD:: ds 3
wMartItem7BCD:: ds 3
wMartItem8BCD:: ds 3
wMartItem9BCD:: ds 3
wMartItem10BCD:: ds 3
NEXTU ; d002
; town map data
wTownMapPlayerIconLandmark:: db
UNION
wTownMapCursorLandmark:: db
wTownMapCursorObjectPointer:: dw
NEXTU
wTownMapCursorCoordinates:: dw
ENDU
NEXTU ; d002
; phone call data
wPhoneScriptBank:: db
wPhoneCaller:: dw
NEXTU ; d002
; radio data
wCurRadioLine:: db
wNextRadioLine:: db
wRadioTextDelay:: db
wNumRadioLinesPrinted:: db
wOaksPKMNTalkSegmentCounter:: db
ds 5
wRadioText:: ds 2 * SCREEN_WIDTH
wRadioTextEnd::
NEXTU ; d002
; lucky number show
wLuckyNumberDigitsBuffer:: ds 5
NEXTU ; d002
; movement buffer data
wMovementBufferCount:: db
wMovementBufferObject:: db
wUnusedMovementBufferBank:: db
wUnusedMovementBufferPointer:: dw
wMovementBuffer:: ds 55
NEXTU ; d002
; box printing
wWhichBoxMonToPrint:: db
wFinishedPrintingBox:: db
wAddrOfBoxToPrint:: dw
wBankOfBoxToPrint:: db
wWhichBoxToPrint:: db
NEXTU ; d002
; trainer HUD data
ds 1
wPlaceBallsDirection:: db
wTrainerHUDTiles:: ds 4
NEXTU ; d002
; mobile participant nicknames
ds 4
wMobileParticipant1Nickname:: ds NAME_LENGTH_JAPANESE
wMobileParticipant2Nickname:: ds NAME_LENGTH_JAPANESE
wMobileParticipant3Nickname:: ds NAME_LENGTH_JAPANESE
NEXTU ; d002
; earthquake data buffer
wEarthquakeMovementDataBuffer:: ds 5
NEXTU ; d002
; miscellaneous
wTempDayOfWeek::
wApricorns::
wKeepSevenBiasChance:: ; used in the slots to handle the favoring of 7 symbol streaks
wSuicuneFrame::
db
ds 2
wStartFlypoint:: db
wEndFlypoint:: db
NEXTU ; d002
; unidentified
wd002:: db
wd003:: db
wd004:: db
; mobile?
ds 1
wd006:: ds 2
wd008:: ds 2
ds 2
wd00c:: ds 1
wd00d:: ds 1
ds 1
wd00f:: ds 1
wd010:: ds 1
wd011:: ds 1
wd012:: ds 1
wd013:: ds 1
wd014:: ds 2
ds 1
wd017:: ds 1
wd018:: ds 1
wd019:: ds 1
ds 19
wd02d:: ds 1
wd02e:: ds 1
wd02f:: ds 1
wd030:: ds 1
wd031:: ds 1
wd032:: ds 1
wd033:: ds 1
wd034:: ds 2
wd036:: ds 2
ds 6
UNION ; d03e
; engine buffers
wEngineBuffer1:: db
wEngineBuffer2:: db
wEngineBuffer3:: db
wEngineBuffer4:: db
wEngineBuffer5:: db
NEXTU ; d03e
; menu items list
wMenuItemsList:: ds 16
wMenuItemsListEnd::
NEXTU ; d03e
; fruit tree data
wCurFruitTree:: db
wCurFruit:: db
NEXTU ; d03e
; elevator data
wElevatorPointerBank:: db
wElevatorPointer:: dw
wElevatorOriginFloor:: db
NEXTU ; d03e
; coord event data
wCurCoordEventSceneID:: db
wCurCoordEventMapY:: db
wCurCoordEventMapX:: db
ds 1
wCurCoordEventScriptAddr:: dw
NEXTU ; d03e
; BG event data
wCurBGEventYCoord:: db
wCurBGEventXCoord:: db
wCurBGEventType:: db
wCurBGEventScriptAddr:: dw
NEXTU ; d03e
; mart data
ds 1
wMartPointerBank:: db
wMartPointer:: dw
ds 1
wBargainShopFlags:: db
NEXTU ; d03e
; trainer data
ds 3
wTempTrainer::
wTempTrainerEventFlag:: dw
wTempTrainerClass:: db
wTempTrainerID:: db
wSeenTextPointer:: dw
wWinTextPointer:: dw
wLossTextPointer:: dw
wScriptAfterPointer:: dw
wRunningTrainerBattleScript:: db
wTempTrainerEnd::
NEXTU ; d03e
; player movement data
wCurInput:: db
wd03f:: db
wd040:: db
wd041:: db
wMovementAnimation:: db
wWalkingDirection:: db
wFacingDirection:: db
wWalkingX:: db
wWalkingY:: db
wWalkingTile:: db
ds 6
wPlayerTurningDirection:: db
NEXTU ; d03e
; std script buffer
ds 1
wJumpStdScriptBuffer:: ds 3
NEXTU ; d03e
; phone script pointer
ds 10
wPhoneScriptPointer:: dw
NEXTU ; d03e
; backup menu data
ds 7
wMenuCursorBufferBackup:: db
wMenuScrollPositionBackup:: db
ds 31
ENDU ; d066
ENDU ; d066
wTMHMMoveNameBackup:: ds MOVE_NAME_LENGTH ; d066
wStringBuffer1:: ds 19 ; d073
wStringBuffer2:: ds 19 ; d086
wStringBuffer3:: ds 19 ; d099
wStringBuffer4:: ds 19 ; d0ac
wStringBuffer5:: ds 19 ; d0bf
wBattleMenuCursorBuffer:: dw ; d0d2
wCurBattleMon:: db ; d0d4
wCurMoveNum:: db ; d0d5
wLastPocket:: db
wPCItemsCursor:: db
wPartyMenuCursor:: db
wItemsPocketCursor:: db
wKeyItemsPocketCursor:: db
wBallsPocketCursor:: db
wTMHMPocketCursor:: db
wPCItemsScrollPosition:: db
wPartyMenuScrollPosition:: db ; unused
wItemsPocketScrollPosition:: db
wKeyItemsPocketScrollPosition:: db
wBallsPocketScrollPosition:: db
wTMHMPocketScrollPosition:: db
wSwitchMon::
wSwitchItem::
wMoveSwapBuffer::
wd0e3:: ; mobile
db
wMenuScrollPosition:: ds 4
wQueuedScriptBank:: db
wQueuedScriptAddr:: dw
wNumMoves:: db
wFieldMoveSucceeded::
wItemEffectSucceeded::
wBattlePlayerAction::
; 0 - use move
; 1 - use item
; 2 - switch
wSolvedUnownPuzzle::
db ; d0ec
wVramState:: ; d0ed
; bit 0: overworld sprite updating on/off
; bit 6: something to do with text
; bit 7: on when surf initiates
; flickers when climbing waterfall
db
wBattleResult:: ; d0ee
; WIN, LOSE, or DRAW
; bit 6: caught celebi
; bit 7: box full
db
wUsingItemWithSelect:: db ; d0ef
UNION ; d0f0
; mart data
wCurMart:: ds 16
wCurMartEnd::
NEXTU ; d0f0
; elevator data
wCurElevator:: db
wCurElevatorFloors:: db
NEXTU ; d0f0
; mailbox data
wCurMessageScrollPosition:: db
wCurMessageIndex:: db
wMailboxCount:: db
wMailboxItems:: ds MAILBOX_CAPACITY
wMailboxEnd:: ; d0fe
ENDU ; d100
wListPointer:: dw ; d100
wUnusedD102:: dw ; d102
wItemAttributesPtr:: dw ; d104
wCurItem:: db ; d106
wCurItemQuantity:: ; d107
wMartItemID::
db
wCurPartySpecies:: db ; d108
wCurPartyMon:: ; d109
; contains which monster in a party
; is being dealt with at the moment
; 0-5
db
wWhichHPBar::
; 0: Enemy
; 1: Player
; 2: Party Menu
db
wPokemonWithdrawDepositParameter::
; 0: Take from PC
; 1: Put into PC
; 2: Take from Day-Care
; 3: Put into Day-Care
db
wItemQuantityChangeBuffer:: db
wItemQuantityBuffer:: db
wTempMon:: party_struct wTempMon ; d10e
wSpriteFlags:: db ; d13e
wHandlePlayerStep:: dw ; d13f
wPartyMenuActionText:: db ; d141
wItemAttributeParamBuffer:: db ; d142
wCurPartyLevel:: db ; d143
wScrollingMenuListSize:: dw
; used when following a map warp
; d146
wNextWarp:: db
wNextMapGroup:: db
wNextMapNumber:: db
wPrevWarp:: db
wPrevMapGroup:: db
wPrevMapNumber:: db
; d14c
wPlayerBGMapOffsetX:: db ; used in FollowNotExact; unit is pixels
wPlayerBGMapOffsetY:: db ; used in FollowNotExact; unit is pixels
; Player movement
wPlayerStepVectorX:: db ; d14e
wPlayerStepVectorY:: db ; d14f
wPlayerStepFlags:: db ; d150
wPlayerStepDirection:: ; d151
; bit 7: Start step
; bit 6: Stop step
; bit 5: Doing step
; bit 4: In midair
; bits 0-3: unused
db
wBGMapAnchor:: dw ; d152
UNION ; d154
wUsedSprites:: ds SPRITE_GFX_LIST_CAPACITY * 2
wUsedSpritesEnd::
NEXTU ; d154
ds 31
wd173:: db ; related to command queue type 3
ENDU ; d194
wOverworldMapAnchor:: dw ; d194
wMetatileStandingY:: db ; d196
wMetatileStandingX:: db ; d197
wMapPartial::
wMapAttributesBank:: db ; d198
wMapTileset:: db ; d199
wEnvironment:: db ; d19a
wMapAttributesPointer:: dw ; d19b
wMapPartialEnd::
wMapAttributes:: ; d19d
wMapBorderBlock:: db ; d19d
; width/height are in blocks (2x2 walkable tiles, 4x4 graphics tiles)
wMapHeight:: db ; d19e
wMapWidth:: db ; d19f
wMapBlocksBank:: db; d1a0
wMapBlocksPointer:: dw ; d1a1
wMapScriptsBank:: db ; d1a3
wMapScriptsPointer:: dw ; d1a4
wMapEventsPointer:: dw ; d1a6
; bit set
wMapConnections:: db ; d1a8
wMapAttributesEnd::
wNorthMapConnection:: map_connection_struct wNorth ; d1a9
wSouthMapConnection:: map_connection_struct wSouth ; d1b5
wWestMapConnection:: map_connection_struct wWest ; d1c1
wEastMapConnection:: map_connection_struct wEast ; d1cd
wTileset::
wTilesetBank:: db ; d1d9
wTilesetAddress:: dw ; d1da
wTilesetBlocksBank:: db ; d1dc
wTilesetBlocksAddress:: dw ; d1dd
wTilesetCollisionBank:: db ; d1df
wTilesetCollisionAddress:: dw ; d1e0
wTilesetAnim:: dw ; bank 3f ; d1e2
ds 2 ; unused ; d1e4
wTilesetPalettes:: dw ; bank 3f ; d1e6
wTilesetEnd::
wEvolvableFlags:: flag_array PARTY_LENGTH ; d1e8
wForceEvolution:: db ; d1e9
UNION ; d1ea
; general-purpose buffers
wBuffer1:: db ; d1ea
wBuffer2:: db ; d1eb
wBuffer3:: db ; d1ec
wBuffer4:: db ; d1ed
wBuffer5:: db ; d1ee
wBuffer6:: db ; d1ef
NEXTU ; d1ea
; HP bar animations
wCurHPAnimMaxHP:: dw ; d1ea
wCurHPAnimOldHP:: dw ; d1ec
wCurHPAnimNewHP:: dw ; d1ee
wCurHPAnimPal:: db ; d1f0
wCurHPBarPixels:: db ; d1f1
wNewHPBarPixels:: db ; d1f2
wCurHPAnimDeltaHP:: dw ; d1f3
wCurHPAnimLowHP:: db ; d1f5
wCurHPAnimHighHP:: db ; d1f6
NEXTU ; d1ea
; evolution data
wEvolutionOldSpecies:: db ; d1ea
wEvolutionNewSpecies:: db ; d1eb
wEvolutionPicOffset:: db ; d1ec
wEvolutionCanceled:: db ; d1ed
NEXTU ; d1ea
; mobile
ds 2
wd1ec:: ds 1
wd1ed:: ds 1
wd1ee:: ds 1
wd1ef:: ds 1
wd1f0:: ds 1
wd1f1:: ds 1
wd1f2:: ds 1
wd1f3:: ds 4
NEXTU ; d1ea
; miscellaneous
wMagikarpLength:: dw
wSelectedDecoration:: db
wOtherDecoration:: db
ds 3
wCurEnemyItem:: db
ENDU ; d1f7
ds 3
wLinkBattleRNs:: ds 10 ; d1fa
wTempEnemyMonSpecies:: db ; d204
wTempBattleMonSpecies:: db ; d205
wEnemyMon:: battle_struct wEnemyMon ; d206
wEnemyMonBaseStats:: ds 5 ; d226
wEnemyMonCatchRate:: db ; d22b
wEnemyMonBaseExp:: db ; d22c
wEnemyMonEnd::
wBattleMode:: ; d22d
; 0: overworld
; 1: wild battle
; 2: trainer battle
db
wTempWildMonSpecies:: db
wOtherTrainerClass:: ; d22f
; class (Youngster, Bug Catcher, etc.) of opposing trainer
; 0 if opponent is a wild Pokémon, not a trainer
db
; BATTLETYPE_* values
wBattleType:: db ; d230
wOtherTrainerID:: ; d231
; which trainer of the class that you're fighting
; (Joey, Mikey, Albert, etc.)
db
wForcedSwitch:: db
wTrainerClass:: db ; d233
wUnownLetter:: db ; d234
wMoveSelectionMenuType:: db
; corresponds to the data/pokemon/base_stats/*.asm contents
wCurBaseData:: ; d236
wBaseDexNo:: db ; d236
wBaseStats:: ; d237
wBaseHP:: db ; d237
wBaseAttack:: db ; d238
wBaseDefense:: db ; d239
wBaseSpeed:: db ; d23a
wBaseSpecialAttack:: db ; d23b
wBaseSpecialDefense:: db ; d23c
wBaseType:: ; d23d
wBaseType1:: db ; d23d
wBaseType2:: db ; d23e
wBaseCatchRate:: db ; d23f
wBaseExp:: db ; d240
wBaseItems:: ; d241
wBaseItem1:: db ; d241
wBaseItem2:: db ; d242
wBaseGender:: db ; d243
wBaseUnknown1:: db ; d244
wBaseEggSteps:: db ; d245
wBaseUnknown2:: db ; d246
wBasePicSize:: db ; d247
wBasePadding:: ds 4 ; d248
wBaseGrowthRate:: db ; d24c
wBaseEggGroups:: db ; d24d
wBaseTMHM:: flag_array NUM_TM_HM_TUTOR ; d24e
wCurBaseDataEnd::
wCurDamage:: dw ; d256
ds 2
wMornEncounterRate:: db ; d25a
wDayEncounterRate:: db ; d25b
wNiteEncounterRate:: db ; d25c
wWaterEncounterRate:: db ; d25d
wListMoves_MoveIndicesBuffer:: ds NUM_MOVES
wPutativeTMHMMove:: db
wInitListType:: db
wBattleHasJustStarted:: db
; d265 has many different short-term uses
wNamedObjectIndexBuffer::
wDeciramBuffer::
wTempByteValue::
wNumSetBits::
wTypeMatchup::
wCurType::
wTempSpecies::
wTempIconSpecies::
wTempTMHM::
wTempPP::
wNextBoxOrPartyIndex::
wChosenCableClubRoom::
wBreedingCompatibility::
wMoveGrammar::
wApplyStatLevelMultipliersToEnemy::
wUsePPUp::
wd265:: ; mobile
db
wFailedToFlee:: db
wNumFleeAttempts:: db
wMonTriedToEvolve:: db
wTimeOfDay:: db ; d269
ds 1
SECTION "Enemy Party", WRAMX
UNION ; d26b
wd26b::
wPokedexShowPointerAddr:: dw
wPokedexShowPointerBank:: db
ds 3
wd271:: ds 5
NEXTU ; d26b
; enemy party
wOTPlayerName:: ds NAME_LENGTH ; d26b
ENDU ; d276
wOTPlayerID:: dw ; d276
ds 8
wOTPartyCount:: db ; d280
wOTPartySpecies:: ds PARTY_LENGTH ; d281
wOTPartyEnd:: db ; older code doesn't check PartyCount
UNION ; d288
; ot party mons
wOTPartyMons::
wOTPartyMon1:: party_struct wOTPartyMon1 ; d288
wOTPartyMon2:: party_struct wOTPartyMon2 ; d2b8
wOTPartyMon3:: party_struct wOTPartyMon3 ; d2e8
wOTPartyMon4:: party_struct wOTPartyMon4 ; d318
wOTPartyMon5:: party_struct wOTPartyMon5 ; d348
wOTPartyMon6:: party_struct wOTPartyMon6 ; d378
wOTPartyMonsEnd::
wOTPartyMonOT:: ds NAME_LENGTH * PARTY_LENGTH ; d3a8
wOTPartyMonNicknames:: ds MON_NAME_LENGTH * PARTY_LENGTH ; d3ea
wOTPartyDataEnd::
ds 4
NEXTU ; d288
; catch tutorial dude pack
wDudeBag::
wDudeNumItems:: db
wDudeItems:: ds 2 * 4
wDudeItemsEnd:: db
wDudeNumKeyItems:: db ; d292
wDudeKeyItems:: ds 18
wDudeKeyItemsEnd:: db
wDudeNumBalls:: db ; d2a6
wDudeBalls:: ds 2 * 4 ; d2a7
wDudeBallsEnd:: db ; d2af
wDudeBagEnd::
ENDU ; d430
wd430::
wBattleAction:: db ; d430
wd431:: db
wMapStatus:: db ; d432
wMapEventStatus:: ; d433
; 0: do map events
; 1: do background events
db
wScriptFlags:: ; d434
; bit 3: priority jump
db
wScriptFlags2:: ; d435
db
wScriptFlags3:: ; d436
; bit 0: count steps
; bit 1: coord events
; bit 2: warps and connections
; bit 4: wild encounters
; bit 5: unknown
db
wScriptMode:: db ; d437
wScriptRunning:: db ; d438
wScriptBank:: db ; d439
wScriptPos:: dw ; d43a
wScriptStackSize:: db
wScriptStack:: ds 3 * 5
ds 1
wScriptDelay:: db ; d44d
wPriorityScriptBank::
wScriptTextBank::
db ; d44e
wPriorityScriptAddr::
wScriptTextAddr::
dw ; d44f
ds 1
wWildEncounterCooldown:: db ; d452
wXYComparePointer:: dw ; d453
ds 4
wBattleScriptFlags:: dw ; d459
wPlayerSpriteSetupFlags:: ; d45b
; bit 7: if set, cancel wPlayerAction
; bit 6: RefreshMapSprites doesn't reload player sprite
; bit 5: if set, set facing according to bits 0-1
; bit 2: female player has been transformed into male
; bits 0-1: direction facing
db
wMapReentryScriptQueueFlag:: db ; d45c MemScriptFlag
wMapReentryScriptBank:: db ; d45d MemScriptBank
wMapReentryScriptAddress:: dw ; d45e MemScriptAddr
ds 4
wTimeCyclesSinceLastCall:: db ; d464
wReceiveCallDelay_MinsRemaining:: db ; d465
wReceiveCallDelay_StartTime:: ds 3 ; d466
ds 3
wBugContestMinsRemaining:: db ; d46c
wBugContestSecsRemaining:: db ; d46d
ds 2
wMapStatusEnd:: ; d470
ds 2
wCrystalData::
wPlayerGender:: ; d472
; bit 0:
; 0 male
; 1 female
db
wd473:: ds 1
wd474:: ds 1
wd475:: ds 1
wd476:: ds 1
wd477:: ds 1
wd478:: ds 1
wCrystalDataEnd::
wd479:: ds 2
wGameData::
wPlayerData::
wPlayerID:: ; d47b
dw
wPlayerName:: ds NAME_LENGTH ; d47d
wMomsName:: ds NAME_LENGTH ; d488
wRivalName:: ds NAME_LENGTH ; d493
wRedsName:: ds NAME_LENGTH ; d49e
wGreensName:: ds NAME_LENGTH ; d4a9
wSavedAtLeastOnce:: db
wSpawnAfterChampion:: db
; init time set at newgame
wStartDay:: db ; d4b6
wStartHour:: db ; d4b7
wStartMinute:: db ; d4b8
wStartSecond:: db ; d4b9
wRTC:: ds 8 ; d4ba
wDST:: ; d4c2
; bit 7: dst
db
wGameTime:: ; used only for BANK(wGameTime)
wGameTimeCap:: db ; d4c3
wGameTimeHours:: dw ; d4c4
wGameTimeMinutes:: db ; d4c6
wGameTimeSeconds:: db ; d4c7
wGameTimeFrames:: db ; d4c8
ds 2
wCurDay:: db ; d4cb
ds 1
wObjectFollow_Leader:: db
wObjectFollow_Follower:: db
wCenteredObject:: db
wFollowerMovementQueueLength:: db
wFollowMovementQueue:: ds 5
wObjectStructs:: ; d4d6
wPlayerStruct:: object_struct wPlayer
wObject1Struct:: object_struct wObject1
wObject2Struct:: object_struct wObject2
wObject3Struct:: object_struct wObject3
wObject4Struct:: object_struct wObject4
wObject5Struct:: object_struct wObject5
wObject6Struct:: object_struct wObject6
wObject7Struct:: object_struct wObject7
wObject8Struct:: object_struct wObject8
wObject9Struct:: object_struct wObject9
wObject10Struct:: object_struct wObject10
wObject11Struct:: object_struct wObject11
wObject12Struct:: object_struct wObject12
wObjectStructsEnd:: ; d6de
wCmdQueue:: ds CMDQUEUE_CAPACITY * CMDQUEUE_ENTRY_SIZE
ds 40
wMapObjects:: ; d71e
wPlayerObject:: map_object wPlayer
wMap1Object:: map_object wMap1
wMap2Object:: map_object wMap2
wMap3Object:: map_object wMap3
wMap4Object:: map_object wMap4
wMap5Object:: map_object wMap5
wMap6Object:: map_object wMap6
wMap7Object:: map_object wMap7
wMap8Object:: map_object wMap8
wMap9Object:: map_object wMap9
wMap10Object:: map_object wMap10
wMap11Object:: map_object wMap11
wMap12Object:: map_object wMap12
wMap13Object:: map_object wMap13
wMap14Object:: map_object wMap14
wMap15Object:: map_object wMap15
wMapObjectsEnd::
wObjectMasks:: ds NUM_OBJECTS ; d81e
wVariableSprites:: ds $100 - SPRITE_VARS ; d82e
wEnteredMapFromContinue:: db ; d83e
ds 2
wTimeOfDayPal:: db ; d841
ds 4
wTimeOfDayPalFlags:: db ; d846
wTimeOfDayPalset:: db
wCurTimeOfDay:: db ; d848
ds 1
wSecretID:: dw
wStatusFlags:: ; d84c
; bit 0: pokedex
; bit 1: unown dex
; bit 2: flash
; bit 3: caught pokerus
; bit 4: rocket signal
; bit 5: wild encounters on/off
; bit 6: hall of fame
; bit 7: bug contest on
db
wStatusFlags2:: ; d84d
; bit 0: rockets
; bit 1: safari game (unused)
; bit 2: bug contest timer
; bit 3: unused
; bit 4: bike shop call
; bit 5: can use sweet scent
; bit 6: reached goldenrod
; bit 7: rockets in mahogany
db
wMoney:: ds 3 ; d84e
wMomsMoney:: ds 3 ; d851
wMomSavingMoney:: ; d854
; bit 0: saving some money
; bit 1: saving half money (unused)
; bit 2: saving all money (unused)
; bit 7: active
db
wCoins:: dw ; d855
wBadges::
wJohtoBadges:: flag_array NUM_JOHTO_BADGES ; d857
wKantoBadges:: flag_array NUM_KANTO_BADGES ; d858
wTMsHMs:: ds NUM_TMS + NUM_HMS ; d859
wTMsHMsEnd::
wNumItems:: db ; d892
wItems:: ds MAX_ITEMS * 2 + 1 ; d893
wItemsEnd::
wNumKeyItems:: db ; d8bc
wKeyItems:: ds MAX_KEY_ITEMS + 1 ; d8bd
wKeyItemsEnd::
wNumBalls:: db ; d8d7
wBalls:: ds MAX_BALLS * 2 + 1 ; d8d8
wBallsEnd::
wPCItems:: ds MAX_PC_ITEMS * 2 + 1 ; d8f1
wPCItemsEnd::
ds 1
wPokegearFlags::
; bit 0: map
; bit 1: radio
; bit 2: phone
; bit 3: expn
; bit 7: on/off
db
wRadioTuningKnob:: db
wLastDexMode:: db
ds 1
wWhichRegisteredItem:: db ; d95b
wRegisteredItem:: db ; d95c
wPlayerState:: db ; d95d
wHallOfFameCount:: dw
wTradeFlags:: flag_array NUM_NPC_TRADES ; d960
ds 1
wMooMooBerries:: db ; d962
wUndergroundSwitchPositions:: db ; d963
wFarfetchdPosition:: db ; d964
ds 13
; map scene ids
wPokecenter2FSceneID:: db ; d972
wTradeCenterSceneID:: db ; d973
wColosseumSceneID:: db ; d974
wTimeCapsuleSceneID:: db ; d975
wPowerPlantSceneID:: db ; d976
wCeruleanGymSceneID:: db ; d977
wRoute25SceneID:: db ; d978
wTrainerHouseB1FSceneID:: db ; d979
wVictoryRoadGateSceneID:: db ; d97a
wSaffronMagnetTrainStationSceneID:: db ; d97b
wRoute16GateSceneID:: db ; d97c
wRoute17Route18GateSceneID:: db ; d97d
wIndigoPlateauPokecenter1FSceneID:: db ; d97e
wWillsRoomSceneID:: db ; d97f
wKogasRoomSceneID:: db ; d980
wBrunosRoomSceneID:: db ; d981
wKarensRoomSceneID:: db ; d982
wLancesRoomSceneID:: db ; d983
wHallOfFameSceneID:: db ; d984
wRoute27SceneID:: db ; d985
wNewBarkTownSceneID:: db ; d986
wElmsLabSceneID:: db ; d987
wPlayersHouse1FSceneID:: db ; d988
wRoute29SceneID:: db ; d989
wCherrygroveCitySceneID:: db ; d98a
wMrPokemonsHouseSceneID:: db ; d98b
wRoute32SceneID:: db ; d98c
wRoute35NationalParkGateSceneID:: db ; d98d
wRoute36SceneID:: db ; d98e
wRoute36NationalParkGateSceneID:: db ; d98f
wAzaleaTownSceneID:: db ; d990
wGoldenrodGymSceneID:: db ; d991
wGoldenrodMagnetTrainStationSceneID:: db ; d992
wGoldenrodPokecenter1FSceneID:: db ; d993
wOlivineCitySceneID:: db ; d994
wRoute34SceneID:: db ; d995
wRoute34IlexForestGateSceneID:: db ; d996
wEcruteakTinTowerEntranceSceneID:: db ; d997
wWiseTriosRoomSceneID:: db ; d998
wEcruteakPokecenter1FSceneID:: db ; d999
wEcruteakGymSceneID:: db ; d99a
wMahoganyTownSceneID:: db ; d99b
wRoute42SceneID:: db ; d99c
wCianwoodCitySceneID:: db ; d99d
wBattleTower1FSceneID:: db ; d99e
wBattleTowerBattleRoomSceneID:: db ; d99f
wBattleTowerElevatorSceneID:: db ; d9a0
wBattleTowerHallwaySceneID:: db ; d9a1
wBattleTowerOutsideSceneID:: db ; d9a2
wRoute43GateSceneID:: db ; d9a3
wMountMoonSceneID:: db ; d9a4
wSproutTower3FSceneID:: db ; d9a5
wTinTower1FSceneID:: db ; d9a6
wBurnedTower1FSceneID:: db ; d9a7
wBurnedTowerB1FSceneID:: db ; d9a8
wRadioTower5FSceneID:: db ; d9a9
wRuinsOfAlphOutsideSceneID:: db ; d9aa
wRuinsOfAlphResearchCenterSceneID:: db ; d9ab
wRuinsOfAlphHoOhChamberSceneID:: db ; d9ac
wRuinsOfAlphKabutoChamberSceneID:: db ; d9ad
wRuinsOfAlphOmanyteChamberSceneID:: db ; d9ae
wRuinsOfAlphAerodactylChamberSceneID:: db ; d9af
wRuinsOfAlphInnerChamberSceneID:: db ; d9b0
wMahoganyMart1FSceneID:: db ; d9b1
wTeamRocketBaseB1FSceneID:: db ; d9b2
wTeamRocketBaseB2FSceneID:: db ; d9b3
wTeamRocketBaseB3FSceneID:: db ; d9b4
wGoldenrodUndergroundSwitchRoomEntrancesSceneID:: db ; d9b5
wSilverCaveRoom3SceneID:: db ; d9b6
wVictoryRoadSceneID:: db ; d9b7
wDragonsDenB1FSceneID:: db ; d9b8
wDragonShrineSceneID:: db ; d9b9
wOlivinePortSceneID:: db ; d9ba
wVermilionPortSceneID:: db ; d9bb
wFastShip1FSceneID:: db ; d9bc
wFastShipB1FSceneID:: db ; d9bd
wMountMoonSquareSceneID:: db ; d9be
wMobileTradeRoomSceneID:: db ; d9bf
wMobileBattleRoomSceneID:: db ; d9c0
ds 49
; fight counts
wJackFightCount:: db ; d9f2
wBeverlyFightCount:: db ; unused
wHueyFightCount:: db
wGavenFightCount:: db
wBethFightCount:: db
wJoseFightCount:: db
wReenaFightCount:: db
wJoeyFightCount:: db
wWadeFightCount:: db
wRalphFightCount:: db
wLizFightCount:: db
wAnthonyFightCount:: db
wToddFightCount:: db
wGinaFightCount:: db
wIrwinFightCount:: db ; unused
wArnieFightCount:: db
wAlanFightCount:: db
wDanaFightCount:: db
wChadFightCount:: db
wDerekFightCount:: db ; unused
wTullyFightCount:: db
wBrentFightCount:: db
wTiffanyFightCount:: db
wVanceFightCount:: db
wWiltonFightCount:: db
wKenjiFightCount:: db ; unused
wParryFightCount:: db
wErinFightCount:: db
; da0e
ds 100
wEventFlags:: flag_array NUM_EVENTS ; da72
; db6c
ds 6
wCurBox:: db ; db72
ds 2
; 8 chars + $50
wBoxNames:: ds BOX_NAME_LENGTH * NUM_BOXES ; db75
wCelebiEvent:: ; dbf3
; bit 2: forest is restless
db
ds 1
wBikeFlags:: ; dbf5
; bit 0: using strength
; bit 1: always on bike
; bit 2: downhill
db
ds 1 ; cleared along with wBikeFlags by ResetBikeFlags
wCurMapSceneScriptPointer:: dw ; dbf7
wCurCaller:: dw ; dbf9
wCurMapWarpCount:: db ; dbfb
wCurMapWarpsPointer:: dw ; dbfc
wCurMapCoordEventCount:: db ; dbfe
wCurMapCoordEventsPointer:: dw ; dbff
wCurMapBGEventCount:: db ; dc01
wCurMapBGEventsPointer:: dw ; dc02
wCurMapObjectEventCount:: db ; dc04
wCurMapObjectEventsPointer:: dw ; dc05
wCurMapSceneScriptCount:: db ; dc07
wCurMapSceneScriptsPointer:: dw ; dc08
wCurMapCallbackCount:: db ; dc0a
wCurMapCallbacksPointer:: dw ; dc0b
ds 2
; Sprite id of each decoration
wDecoBed:: db ; dc0f
wDecoCarpet:: db ; dc10
wDecoPlant:: db ; dc11
wDecoPoster:: db ; dc12
wDecoConsole:: db ; dc13
wDecoLeftOrnament:: db ; dc14
wDecoRightOrnament:: db ; dc15
wDecoBigDoll:: db ; dc16
; Items bought from Mom
wWhichMomItem:: db ; dc17
wWhichMomItemSet:: db ; dc18
wMomItemTriggerBalance:: ds 3 ; dc19
wDailyResetTimer:: dw ; dc1c
wDailyFlags1:: db
wDailyFlags2:: db
wSwarmFlags:: db
ds 2
wTimerEventStartDay:: db
ds 3
wFruitTreeFlags:: flag_array NUM_FRUIT_TREES ; dc27
ds 2
wLuckyNumberDayBuffer:: dw ; dc2d
ds 2
wSpecialPhoneCallID:: db ; dc31
ds 3
wBugContestStartTime:: ds 4 ; day, hour, min, sec ; dc35
wUnusedTwoDayTimerOn:: db ; dc39
wUnusedTwoDayTimer:: db
wUnusedTwoDayTimerStartDate:: db
ds 4
wMobileOrCable_LastSelection:: db
wdc41:: ds 1
wdc42:: ds 8
wBuenasPassword:: db
wBlueCardBalance:: db
wDailyRematchFlags:: ds 4
wDailyPhoneItemFlags:: ds 4
wDailyPhoneTimeOfDayFlags:: ds 4
wKenjiBreakTimer:: ds 2 ; Kenji
wYanmaMapGroup:: db ; dc5a
wYanmaMapNumber:: db
wPlayerMonSelection:: ds 3
wdc5f:: ds 1
wdc60:: ds 19
wStepCount:: db ; dc73
wPoisonStepCount:: db ; dc74
ds 2
wHappinessStepCount:: db
ds 1
wParkBallsRemaining::
wSafariBallsRemaining:: db ; dc79
wSafariTimeRemaining:: dw ; dc7a
wPhoneList:: ds CONTACT_LIST_SIZE ; dc7c
; dc86
ds 23
wLuckyNumberShowFlag:: db ; dc9d
ds 1
wLuckyIDNumber:: dw ; dc9f
wRepelEffect:: db ; If a Repel is in use, it contains the nr of steps it's still active
wBikeStep:: dw
wKurtApricornQuantity:: db
wPlayerDataEnd::
wCurMapData::
wVisitedSpawns:: flag_array NUM_SPAWNS ; dca5
wDigWarpNumber:: db ; dcaa
wDigMapGroup:: db ; dcab
wDigMapNumber:: db ; dcac
; used on maps like second floor pokécenter, which are reused, so we know which
; map to return to
wBackupWarpNumber:: db ; dcad
wBackupMapGroup:: db ; dcae
wBackupMapNumber:: db ; dcaf
ds 3
wLastSpawnMapGroup:: db
wLastSpawnMapNumber:: db
wWarpNumber:: db ; dcb4
wMapGroup:: db ; dcb5 ; map group of current map
wMapNumber:: db ; dcb6 ; map number of current map
wYCoord:: db ; dcb7 ; current y coordinate relative to top-left corner of current map
wXCoord:: db ; dcb8 ; current x coordinate relative to top-left corner of current map
wScreenSave:: ds SCREEN_META_WIDTH * SCREEN_META_HEIGHT
wCurMapDataEnd::
SECTION "Party", WRAMX
wPokemonData::
wPartyCount:: db ; dcd7 ; number of Pokémon in party
wPartySpecies:: ds PARTY_LENGTH ; dcd8 ; species of each Pokémon in party
wPartyEnd:: db ; dcde ; older code doesn't check wPartyCount
wPartyMons::
wPartyMon1:: party_struct wPartyMon1 ; dcdf
wPartyMon2:: party_struct wPartyMon2 ; dd0f
wPartyMon3:: party_struct wPartyMon3 ; dd3f
wPartyMon4:: party_struct wPartyMon4 ; dd6f
wPartyMon5:: party_struct wPartyMon5 ; dd9f
wPartyMon6:: party_struct wPartyMon6 ; ddcf
wPartyMonOT:: ds NAME_LENGTH * PARTY_LENGTH ; ddff
wPartyMonNicknames:: ds MON_NAME_LENGTH * PARTY_LENGTH ; de41
wPartyMonNicknamesEnd::
ds 22
wPokedexCaught:: flag_array NUM_POKEMON ; de99
wEndPokedexCaught::
wPokedexSeen:: flag_array NUM_POKEMON ; deb9
wEndPokedexSeen::
wUnownDex:: ds NUM_UNOWN ; ded9
wUnlockedUnowns:: db ; def3
wFirstUnownSeen:: db
wDayCareMan:: ; def5
; bit 7: active
; bit 6: egg ready
; bit 5: monsters are compatible
; bit 0: monster 1 in day-care
db
wBreedMon1::
wBreedMon1Nick:: ds MON_NAME_LENGTH ; def6
wBreedMon1OT:: ds NAME_LENGTH ; df01
wBreedMon1Stats:: box_struct wBreedMon1 ; df0c
wDayCareLady:: ; df2c
; bit 7: active
; bit 0: monster 2 in day-care
db
wStepsToEgg:: ; df2d
db
wBreedMotherOrNonDitto:: ; df2e
; z: yes
; nz: no
db
wBreedMon2::
wBreedMon2Nick:: ds MON_NAME_LENGTH ; df2f
wBreedMon2OT:: ds NAME_LENGTH ; df3a
wBreedMon2Stats:: box_struct wBreedMon2 ; df45
wEggNick:: ds MON_NAME_LENGTH ; df65
wEggOT:: ds NAME_LENGTH ; df70
wEggMon:: box_struct wEggMon ; df7b
wBugContestSecondPartySpecies:: db
wContestMon:: party_struct wContestMon ; df9c
wDunsparceMapGroup:: db
wDunsparceMapNumber:: db
wFishingSwarmFlag:: db
wRoamMon1:: roam_struct wRoamMon1 ; dfcf
wRoamMon2:: roam_struct wRoamMon2 ; dfd6
wRoamMon3:: roam_struct wRoamMon3 ; dfdd
wRoamMons_CurMapNumber:: db
wRoamMons_CurMapGroup:: db
wRoamMons_LastMapNumber:: db
wRoamMons_LastMapGroup:: db
wBestMagikarpLengthFeet:: db
wBestMagikarpLengthInches:: db
wMagikarpRecordHoldersName:: ds NAME_LENGTH
wPokemonDataEnd::
wGameDataEnd::
; dff5
SECTION "Pic Animations", WRAMX
wTempTileMap::
; 20x18 grid of 8x8 tiles
ds SCREEN_WIDTH * SCREEN_HEIGHT ; $168 = 360
; PokeAnim data
wPokeAnimStruct::
wPokeAnimSceneIndex:: db
wPokeAnimPointer:: dw
wPokeAnimSpecies:: db
wPokeAnimUnownLetter:: db
wPokeAnimSpeciesOrUnown:: db
wPokeAnimGraphicStartTile:: db
wPokeAnimCoord:: dw
wPokeAnimFrontpicHeight:: db
wPokeAnimIdleFlag:: db
wPokeAnimSpeed:: db
wPokeAnimPointerBank:: db
wPokeAnimPointerAddr:: dw
wPokeAnimFramesBank:: db
wPokeAnimFramesAddr:: dw
wPokeAnimBitmaskBank:: db
wPokeAnimBitmaskAddr:: dw
wPokeAnimFrame:: db
wPokeAnimJumptableIndex:: db
wPokeAnimRepeatTimer:: db
wPokeAnimCurBitmask:: db
wPokeAnimWaitCounter:: db
wPokeAnimCommand:: db
wPokeAnimParameter:: db
ds 1
wPokeAnimBitmaskCurCol:: db
wPokeAnimBitmaskCurRow:: db
wPokeAnimBitmaskCurBit:: db
wPokeAnimBitmaskBuffer:: ds 7
ds 2
wPokeAnimStructEnd::
SECTION "Battle Tower RAM", WRAMX
w3_d000:: ds 1 ; d000
w3_d001:: ds 1
w3_d002:: ds $7e
w3_d080:: ds 1
w3_d081:: ds $f
w3_d090:: ds $70
w3_d100::
wBT_OTTrainer:: battle_tower_struct wBT_OT
ds $20
wBT_TrainerTextIndex:: db ; d200
ds 1
w3_d202:: battle_tower_struct w3_d202
w3_d2e2:: battle_tower_struct w3_d2e2
w3_d3c2:: battle_tower_struct w3_d3c2
w3_d4a2:: battle_tower_struct w3_d4a2
w3_d582:: battle_tower_struct w3_d582
w3_d662:: battle_tower_struct w3_d662
UNION ; d742
w3_d742:: battle_tower_struct w3_d742
; d822
NEXTU ; d742
ds $be
w3_d800:: ds BG_MAP_WIDTH * SCREEN_HEIGHT
NEXTU ; d742
ds $be
wBTChoiceOfLvlGroup:: db
ds $68
w3_d869:: ds $17
w3_d880:: ds 1
w3_d881:: ds 9
w3_d88a:: ds 5
w3_d88f:: ds 5
w3_d894:: ds 1
w3_d895:: ds 11
w3_d8a0:: ds 1
w3_d8a1:: ds 1
w3_d8a2:: ds 1
w3_d8a3:: ds 1
ENDU ; d8a4
ds $1c0
w3_dc00:: ds SCREEN_WIDTH * SCREEN_HEIGHT
w3_dd68:: ds SCREEN_WIDTH * SCREEN_HEIGHT
ds $11c
w3_dfec:: ds $10
w3_dffc:: ds 4
SECTION "GBC Video", WRAMX
; eight 4-color palettes each
wGBCPalettes:: ; used only for BANK(wGBCPalettes)
wBGPals1:: ds 8 palettes ; d000
wOBPals1:: ds 8 palettes ; d040
wBGPals2:: ds 8 palettes ; d080
wOBPals2:: ds 8 palettes ; d0c0
wLYOverrides:: ds SCREEN_HEIGHT_PX ; d100
wLYOverridesEnd:: ; d190
ds 1
wMagnetTrain:: ; used only for BANK(wMagnetTrain)
wMagnetTrainDirection:: db
wMagnetTrainInitPosition:: db
wMagnetTrainHoldPosition:: db
wMagnetTrainFinalPosition:: db
wMagnetTrainPlayerSpriteInitX:: db
ds 106
wLYOverridesBackup:: ds SCREEN_HEIGHT_PX ; d200
wLYOverridesBackupEnd::
SECTION "Battle Animations", WRAMX
wBattleAnimTileDict:: ds 10
wActiveAnimObjects:: ; d30a
wAnimObject01:: battle_anim_struct wAnimObject01
wAnimObject02:: battle_anim_struct wAnimObject02
wAnimObject03:: battle_anim_struct wAnimObject03
wAnimObject04:: battle_anim_struct wAnimObject04
wAnimObject05:: battle_anim_struct wAnimObject05
wAnimObject06:: battle_anim_struct wAnimObject06
wAnimObject07:: battle_anim_struct wAnimObject07
wAnimObject08:: battle_anim_struct wAnimObject08
wAnimObject09:: battle_anim_struct wAnimObject09
wAnimObject10:: battle_anim_struct wAnimObject10
wActiveAnimObjectsEnd:: ; d3aa
wActiveBGEffects:: ; d3fa
wBGEffect1:: battle_bg_effect wBGEffect1
wBGEffect2:: battle_bg_effect wBGEffect2
wBGEffect3:: battle_bg_effect wBGEffect3
wBGEffect4:: battle_bg_effect wBGEffect4
wBGEffect5:: battle_bg_effect wBGEffect5
wActiveBGEffectsEnd::
wNumActiveBattleAnims:: db ; d40e
wBattleAnimFlags:: db ; d40f
wBattleAnimAddress:: dw ; d410
wBattleAnimDuration:: db ; d412
wBattleAnimParent:: dw ; d413
wBattleAnimLoops:: db ; d415
wBattleAnimVar:: db ; d416
wBattleAnimByte:: db ; d417
wBattleAnimOAMPointerLo:: db ; d418
UNION ; d419
; unidentified
wBattleAnimTemp0:: db
wBattleAnimTemp1:: db
wBattleAnimTemp2:: db
wBattleAnimTemp3:: db
NEXTU ; d419
wBattleObjectTempID:: db
wBattleObjectTempXCoord:: db
wBattleObjectTempYCoord:: db
wBattleObjectTemp0b:: db
NEXTU ; d419
wBattleAnimTempOAMFlags:: db
wBattleAnimTempField02:: db
wBattleAnimTempTileID:: db
wBattleAnimTempXCoord:: db
wBattleAnimTempYCoord:: db
wBattleAnimTempXOffset:: db
wBattleAnimTempYOffset:: db
wBattleAnimTempAddSubFlags:: db
wBattleAnimTempPalette:: db
ENDU ; d422
UNION ; d422
ds $32
wBattleAnimEnd::
NEXTU ; d422
wSurfWaveBGEffect:: ds $40
wSurfWaveBGEffectEnd::
ENDU ; d462
SECTION "Mobile RAM", WRAMX
w5_d800:: ds $200
w5_da00:: ds $200
w5_dc00:: ds $d
w5_dc0d:: ds 4
w5_dc11:: ds 9
w5_MobileOpponentBattleMessages:: ds $c ; dc1a
w5_MobileOpponentBattleStartMessage:: ds $c ; dc26
w5_MobileOpponentBattleWinMessage:: ds $c ; dc32
w5_MobileOpponentBattleLossMessage:: ds $c ; dc3e
SECTION "Scratch RAM", WRAMX
UNION ; d000
wScratchTileMap:: ds BG_MAP_WIDTH * BG_MAP_HEIGHT
wScratchAttrMap:: ds BG_MAP_WIDTH * BG_MAP_HEIGHT
NEXTU ; d000
wDecompressScratch:: ds $80 tiles
wDecompressEnemyFrontpic:: ds $80 tiles
ENDU ; e000
SECTION "Stack RAM", WRAMX
wWindowStack:: ds $1000 - 1
wWindowStackBottom:: ds 1
INCLUDE "sram.asm"
INCLUDE "hram.asm"