pokegold/wram.asm
2020-06-05 21:34:35 +01:00

2947 lines
63 KiB
NASM

INCLUDE "constants.asm"
INCLUDE "macros/wram.asm"
INCLUDE "vram.asm"
SECTION "Audio RAM", WRAM0
wMusic::
; nonzero if playing
wMusicPlaying:: db ; c000
wChannels::
wChannel1:: channel_struct wChannel1 ; c001
wChannel2:: channel_struct wChannel2 ; c033
wChannel3:: channel_struct wChannel3 ; c065
wChannel4:: channel_struct wChannel4 ; c097
wSFXChannels::
wChannel5:: channel_struct wChannel5 ; c0c9
wChannel6:: channel_struct wChannel6 ; c0fb
wChannel7:: channel_struct wChannel7 ; c12d
wChannel8:: channel_struct wChannel8 ; c15f
ds 1 ; c191
wCurTrackDuty:: db
wCurTrackVolumeEnvelope:: db
wCurTrackFrequency:: dw
wUnusedBCDNumber:: db ; BCD value, dummied out
wCurNoteDuration:: db ; used in MusicE0 and LoadNote
wCurMusicByte:: db ; c198
wCurChannel:: db ; c199
wVolume:: ; c19a
; 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:: ; c19b
; corresponds to rNR51
; bit 4-7: ch1-4 so2 on/off
; bit 0-3: ch1-4 so1 on/off
db
wPitchSweep:: ; c19c
; corresponds to rNR10
; bit 7: unused
; bit 4-6: sweep time
; bit 3: sweep direction
; but 0-2: sweep shift
db
wMusicID:: dw ; c19d
wMusicBank:: db ; c19f
wNoiseSampleAddress:: dw ; c1a0
wNoiseSampleDelay:: db ; c1a2
ds 1 ; c1a3
wMusicNoiseSampleSet:: db ; c1a4
wSFXNoiseSampleSet:: db ; c1a5
wLowHealthAlarm:: ; c1a6
; bit 7: on/off
; bit 4: pitch
; bit 0-3: counter
db
wMusicFade:: ; c1a7
; 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 ; c1a8
wMusicFadeID:: dw ; c1a9
ds 5
wCryPitch:: dw ; c1b0
wCryLength:: dw ; c1b2
wLastVolume:: db ; c1b4
wUnusedMusicF9Flag:: db ; c1b5
wSFXPriority:: ; c1b6
; if nonzero, turn off music when playing sfx
db
ds 1
wChannel1JumpCondition:: db
wChannel2JumpCondition:: db
wChannel3JumpCondition:: db
wChannel4JumpCondition:: db
wStereoPanningMask:: db ; c1bc
wCryTracks:: ; c1bd
; 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:: ; c1bf
; id of sfx currently playing
db
wChannelsEnd::
wMapMusic:: db ; c1c0
wDontPlayMapMusicOnReload:: db
wMusicEnd::
SECTION "WRAM", WRAM0
wLZAddress:: dw ; c1c2
wLZBank:: db ; c1c4
ds 1
wInputType:: db ; c1c6
wAutoInputAddress:: dw ; c1c7
wAutoInputBank:: db ; c1c9
wAutoInputLength:: db ; c1ca
wDebugFlags:: db
wGameLogicPaused:: db ; c1cc
wSpriteUpdatesEnabled:: db
wUnusedScriptByteBuffer:: db
wMapTimeOfDay:: db
ds 3
wPrinterConnectionOpen:: db
wPrinterOpcode:: db
wPrevDexEntry:: db
wDisableTextAcceleration:: db
wPCItemsCursor:: db
wPCItemsScrollPosition:: db
ds 39
SECTION "GBC Palettes", WRAM0
; eight 4-color palettes each
wBGPals1:: ds 8 palettes ; c200
wOBPals1:: ds 8 palettes ; c240
wBGPals2:: ds 8 palettes ; c280
wOBPals2:: ds 8 palettes ; c2c0
SECTION "Sprites", WRAM0
wVirtualOAM:: ; c300
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:: ; c3a0
; 20x18 grid of 8x8 tiles
ds SCREEN_WIDTH * SCREEN_HEIGHT
wTilemapEnd::
SECTION "Miscellaneous", WRAM0
; This union spans 480 bytes from c508 to c6e8.
UNION ; c508
; surrounding tiles
; This buffer determines the size for the rest of the union;
; it uses exactly 480 bytes.
wSurroundingTiles:: ds SURROUNDING_WIDTH * SURROUNDING_HEIGHT
NEXTU ; c508
; box save buffer
; SaveBoxAddress uses this buffer in three steps because it
; needs more space than the buffer can hold.
wBoxPartialData:: ds 480
wBoxPartialDataEnd::
NEXTU ; c508
; 20x18 grid of 8x8 tiles
wTempTilemap::
ds SCREEN_WIDTH * SCREEN_HEIGHT ; $168 = 360
NEXTU ; c508
; unown puzzle
wUnownPuzzle::
ds 200
wPuzzlePieces:: ds 6 * 6
ds 244
wUnownPuzzleEnd::
NEXTU ; c508
; This union spans 200 bytes from c508 to c5d0.
UNION ; c508
; 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::
wSpriteAnimCount:: db
wCurSpriteOAMAddr:: db
wCurIcon:: db ; c5be
wCurIconTile:: db
wSpriteAnimAddrBackup::
wSpriteAnimIDBuffer::
wCurSpriteOAMFlags::
dw
wCurAnimVTile:: db
wCurAnimXCoord:: db
wCurAnimYCoord:: db
wCurAnimXOffset:: db
wCurAnimYOffset:: db
wGlobalAnimYOffset:: db
wGlobalAnimXOffset:: db
wSpriteAnimsEnd::
ds 7
NEXTU ; c508
; timeset temp storage
wTimeSetBuffer::
ds 20
wInitHourBuffer:: db ; c51c
ds 9
wInitMinuteBuffer:: db ; c526
ds 19
wTimeSetBufferEnd::
NEXTU ; c508
; hall of fame temp struct
wHallOfFameTemp:: hall_of_fame wHallOfFameTemp
NEXTU ; c508
; link engine data
wLink_c508:: ds 10
wc512:: ds 10
NEXTU ; c508
; unused (engine/menus/debug.asm)
wc508:: ds 13
ENDU ; c5d0
; This union spans 280 bytes from c5d0 to c6e8.
UNION ; c5d0
; pokedex
wPokedexDataStart:: ; c5d0
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
wPokedexDataEnd::
ds 3
NEXTU ; c5d0
; pokegear
wPokegearPhoneLoadNameBuffer:: db ; c5d0
wPokegearPhoneCursorPosition:: db ; c5d1
wPokegearPhoneScrollPosition:: db ; c5d2
wPokegearPhoneSelectedPerson:: db ; cd3
wPokegearPhoneSubmenuCursor:: db ; c5d4
wPokegearMapCursorObjectPointer:: dw ; c5d5
wPokegearMapCursorLandmark:: db ; c5d7
wPokegearMapPlayerIconLandmark:: db ; c5d8
wPokegearRadioChannelBank:: db ; c5d9
wPokegearRadioChannelAddr:: dw ; c5da
wPokegearRadioMusicPlaying:: db ; c5dc
NEXTU ; c5d0
; trade
wTrademons:: ; c5d0
wPlayerTrademon:: trademon wPlayerTrademon
wOTTrademon:: trademon wOTTrademon
wTrademonsEnd::
wTradeAnimAddress:: dw
wLinkPlayer1Name:: ds NAME_LENGTH
wLinkPlayer2Name:: ds NAME_LENGTH
wLinkTradeSendmonSpecies:: db
wLinkTradeGetmonSpecies:: db
NEXTU
; naming screen
wNamingScreenDestinationPointer:: dw ; c5d0
wNamingScreenCurNameLength:: db ; c5d2
wNamingScreenMaxNameLength:: db ; c5d3
wNamingScreenType:: db ; c5d4
wNamingScreenCursorObjectPointer:: dw ; c5d5
wNamingScreenLastCharacter:: db ; c5d7
wNamingScreenStringEntryCoord:: dw ; c5d8
NEXTU ; c5d0
; slot machine
wSlots:: ; c5d0
wReel1:: slot_reel wReel1
wReel2:: slot_reel wReel2
wReel3:: slot_reel wReel3
; c600
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 ; c5d0
; card flip
wCardFlip:: ; c5d0
wDeck:: ds 24
wDeckEnd::
; c5e8
wCardFlipNumCardsPlayed:: db
wCardFlipFaceUpCard:: db
wDiscardPile:: ds 24
wDiscardPileEnd::
wCardFlipEnd::
NEXTU ; c5d0
; dummy game
wDummyGame:: ; c5d0
wDummyGameCards:: ds 9 * 5
wDummyGameCardsEnd::
wDummyGameLastCardPicked:: db ; c5fd
wDummyGameCard1:: db ; c5fe
wDummyGameCard2:: db ; c5ff
wDummyGameCard1Location:: db ; c600
wDummyGameCard2Location:: db ; c601
wDummyGameNumberTriesRemaining:: db ; c602
wDummyGameLastMatches:: ds 5 ; c603
wDummyGameCounter:: db ; c608
wDummyGameNumCardsMatched:: db ; c609
wDummyGameEnd::
NEXTU ; c5d0
; unused (engine/gfx/color.asm)
ds 50
wc602:: db ; c602
ds 2
wc605:: db ; c605
wc606:: db ; c606
wc607:: db ; c607
ENDU ; c6e8
ENDU ; c6e8
; This was a buffer for map-related pointers in the 1997 G/S prototype.
; See wMapBuffer in pokegold-spaceworld's wram.asm.
wUnusedMapBuffer:: ds 24
wUnusedMapBufferEnd::
SECTION "Overworld Map", WRAM0
UNION ; c700
; overworld map blocks
wOverworldMapBlocks:: ds 1300 ; c700
wOverworldMapBlocksEnd::
NEXTU ; c700
; decompress buffer in wram
wDecompressScratch:: ds 40 tiles
NEXTU ; c700
; GB Printer screen RAM
wGameboyPrinterRAM::
wGameboyPrinterScreen:: ds SCREEN_HEIGHT * SCREEN_WIDTH ; c700
wGameboyPrinterScreenEnd:: ; c868
NEXTU ; c700
; GB Printer data
wGameboyPrinter2bppSource:: ds 40 tiles
wGameboyPrinter2bppSourceEnd::
wc980:: db
wPrinterRowIndex:: db
; Printer data
wPrinterData:: ds 4
wPrinterChecksum:: dw ; c986
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 ; c990
wPrinterTilemapBufferEnd::
wPrinterStatus:: db ; caf8
ds 1
; High nibble is for margin before the image, low nibble is for after.
wPrinterMargins:: db ; cafa
wPrinterExposureTime:: db ; cafb
ds 16
wGameboyPrinterRAMEnd::
NEXTU ; c700
; bill's pc data
wBillsPCData::
wBillsPCPokemonList::
; (species, box number, list index) x30
ds 3 * 30
ds 720
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 5
wBillsPCDataEnd::
NEXTU ; c700
; Hall of Fame data
wHallOfFamePokemonList:: hall_of_fame wHallOfFamePokemonList
NEXTU ; c700
; raw link data
wLinkData:: ds $514
wLinkDataEnd::
NEXTU ; c700
; unused (engine/gfx/sprite_anims.asm)
ds 4
wc704:: ds 19
wc717:: ds 1
NEXTU ; c700
; link data members
wLinkPlayerName:: ds NAME_LENGTH
wLinkPartyCount:: db
wLinkPartySpecies:: ds PARTY_LENGTH
wLinkPartyEnd:: db ; older code doesn't check PartyCount
UNION ; c713
; 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 ; c713
; 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
NEXTU ; c700
; mystery gift data
wMysteryGiftPartyTemp:: ; ds PARTY_LENGTH * (1 + 1 + NUM_MOVES)
wMysteryGiftStaging::
wc700:: ds 80
wMysteryGiftTrainerData:: ds (1 + 1 + NUM_MOVES) * PARTY_LENGTH + 2
wMysteryGiftTrainerDataEnd::
ds 138
wMysteryGiftPartnerData::
wc800:: db
wMysteryGiftPartnerID:: dw
wMysteryGiftPartnerName:: ds NAME_LENGTH
wMysteryGiftPartnerDexCaught:: db
wc80f::
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
wc8f4:: ds 5
wc8f9:: ds 7
NEXTU ; c700
; LCD expects wLYOverrides to have an alignment of $100
wLYOverrides:: ds SCREEN_HEIGHT_PX
wLYOverridesEnd:: ds 112
wLYOverridesBackup:: ds SCREEN_HEIGHT_PX
wLYOverridesBackupEnd:: ds 112
UNION ; c900
; blank credits tile buffer
wCreditsBlankFrame2bpp:: ds 4 * 4 tiles
wCreditsBlankFrame2bppEnd::
NEXTU ; c900
; mystery gift data
wc900:: db
wc901:: db
wc902:: db
NEXTU ; c900
; link
ds 191
wc9bf:: ds 79
wca0e:: ds 5
wca13:: ds 113
wca84:: ds 100
wcae8:: dw
wLinkOTPartyMonTypes:: ds 2 * PARTY_LENGTH ; caea
ds 84
wcb4a:: ds 84
wcb9e:: ds 130
NEXTU ; c900
; battle
wBattleAnimTileDict:: ds 10
wActiveAnimObjects:: ; c90a
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::
wActiveBGEffects:: ; c9fa
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::
wLastAnimObjectIndex:: db ; ca0e
wBattleAnimFlags:: db ; ca0f
wBattleAnimAddress:: dw ; ca10
wBattleAnimDelay:: db ; ca12
wBattleAnimParent:: dw ; ca13
wBattleAnimLoops:: db ; ca15
wBattleAnimVar:: db ; ca16
wBattleAnimByte:: db ; ca17
wBattleAnimOAMPointerLo:: db ; ca18
UNION ; ca19
; unidentified
wBattleAnimTemp0:: db
wBattleAnimTemp1:: db
wBattleAnimTemp2:: db
wBattleAnimTemp3:: db
NEXTU ; ca19
wBattleObjectTempID:: db
wBattleObjectTempXCoord:: db
wBattleObjectTempYCoord:: db
wBattleObjectTempParam:: db
NEXTU ; ca19
wBattleAnimTempOAMFlags:: db
wBattleAnimTempField02:: db
wBattleAnimTempTileID:: db
wBattleAnimTempXCoord:: db
wBattleAnimTempYCoord:: db
wBattleAnimTempXOffset:: db
wBattleAnimTempYOffset:: db
wBattleAnimTempFrameOAMFlags:: db
wBattleAnimTempPalette:: db
ENDU ; ca22
UNION ; ca22
ds $32
wBattleAnimEnd::
NEXTU ; ca22
wSurfWaveBGEffect:: ds $40
wSurfWaveBGEffectEnd::
ENDU ; ca62
ds 134
wBattle:: ; cae8
wEnemyMoveStruct:: move_struct wEnemyMoveStruct
wPlayerMoveStruct:: move_struct wPlayerMoveStruct
wEnemyMonNick:: ds MON_NAME_LENGTH ; caf6
wBattleMonNick:: ds MON_NAME_LENGTH ; cb01
wBattleMon:: battle_struct wBattleMon ; cb0c
wcb2c:: ds 1 ; cb2c
wcb2d:: ds 1 ; cb2d
wEnemyTrainerItem1:: db ; cb2e
wEnemyTrainerItem2:: db ; cb2f
wEnemyTrainerBaseReward:: db ; cb30
wcb31:: ds 1 ; cb31
wcb32:: ds 1 ; cb32
wcb33:: ds 1 ; cb33
wOTClassName:: ds TRAINER_CLASS_NAME_LENGTH ; cb34
wCurOTMon:: db ; cb41
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:: ; cb43
; >10: super-effective
; 10: normal
; <10: not very effective
; bit 7: stab
db
wCriticalHit:: ; cb44
; 0 if not critical
; 1 for a critical hit
; 2 for a OHKO
db
wAttackMissed:: ; cb45
; nonzero for a miss
db
wPlayerSubStatus1:: ; cb46
; bit
; 7 in love
; 6 rollout
; 5 endure
; 4 perish song
; 3 identified
; 2 protect
; 1 curse
; 0 nightmare
db
wPlayerSubStatus2:: ; cb47
; bit
; 7
; 6
; 5
; 4
; 3
; 2
; 1
; 0 curled
db
wPlayerSubStatus3:: ; cb48
; bit
; 7 confused
; 6 flying
; 5 underground
; 4 charged
; 3 flinched
; 2 in loop
; 1 rampage
; 0 bide
db
wPlayerSubStatus4:: ; cb49
; bit
; 7 leech seed
; 6 rage
; 5 recharge
; 4 substitute
; 3
; 2 focus energy
; 1 mist
; 0 x accuracy
db
wPlayerSubStatus5:: ; cb4a
; bit
; 7 can't run
; 6 destiny bond
; 5 lock-on
; 4 encored
; 3 transformed
; 2
; 1
; 0 toxic
db
wEnemySubStatus1:: ; cb4b
; see wPlayerSubStatus1
db
wEnemySubStatus2:: ; cb4c
; see wPlayerSubStatus2
db
wEnemySubStatus3:: ; cb4d
; see wPlayerSubStatus3
db
wEnemySubStatus4:: ; cb4e
; see wPlayerSubStatus4
db
wEnemySubStatus5:: ; cb4f
; see wPlayerSubStatus5
db
wPlayerRolloutCount:: db ; cb50
wPlayerConfuseCount:: db ; cb51
wPlayerToxicCount:: db ; cb52
wPlayerDisableCount:: db ; cb53
wPlayerEncoreCount:: db ; cb54
wPlayerPerishCount:: db ; cb55
wPlayerFuryCutterCount:: db ; cb56
wPlayerProtectCount:: db ; cb57
wEnemyRolloutCount:: db ; cb58
wEnemyConfuseCount:: db ; cb59
wEnemyToxicCount:: db ; cb5a
wEnemyDisableCount:: db ; cb5b
wEnemyEncoreCount:: db ; cb5c
wEnemyPerishCount:: db ; cb5d
wEnemyFuryCutterCount:: db ; cb5e
wEnemyProtectCount:: db ; cb5f
wPlayerDamageTaken:: dw ; cb60
wEnemyDamageTaken:: dw ; cb62
wBattleReward:: ds 3 ; cb64
wBattleAnimParam::
wKickCounter::
wPresentPower::
db ; cb67
wBattleScriptBuffer:: ds 40 ; cb68
wBattleScriptBufferAddress:: dw ; cb90
wTurnEnded:: db ; cb92
ds 1
wPlayerStats:: ; cb94
wPlayerAttack:: dw
wPlayerDefense:: dw
wPlayerSpeed:: dw
wPlayerSpAtk:: dw
wPlayerSpDef:: dw
ds 1
wEnemyStats:: ; cb9f
wEnemyAttack:: dw
wEnemyDefense:: dw
wEnemySpeed:: dw
wEnemySpAtk:: dw
wEnemySpDef:: dw
ds 1
wPlayerStatLevels:: ; cbaa
; 07 neutral
wPlayerAtkLevel:: db ; cbaa
wPlayerDefLevel:: db ; cbab
wPlayerSpdLevel:: db ; cbac
wPlayerSAtkLevel:: db ; cbad
wPlayerSDefLevel:: db ; cbae
wPlayerAccLevel:: db ; cbaf
wPlayerEvaLevel:: db ; cbb0
ds 1
wPlayerStatLevelsEnd::
wEnemyStatLevels:: ; cbb2
; 07 neutral
wEnemyAtkLevel:: db ; cbb2
wEnemyDefLevel:: db ; cbb3
wEnemySpdLevel:: db ; cbb4
wEnemySAtkLevel:: db ; cbb5
wEnemySDefLevel:: db ; cbb6
wEnemyAccLevel:: db ; cbb7
wEnemyEvaLevel:: db ; cbb8
ds 1
wEnemyTurnsTaken:: db ; cbba
wPlayerTurnsTaken:: db ; cbbb
ds 1
wPlayerSubstituteHP:: db ; cbbd
wEnemySubstituteHP:: db ; cbbe
wUnusedPlayerLockedMove:: db ; cbbf
ds 1
wCurPlayerMove:: db ; cbc1
wCurEnemyMove:: db ; cbc2
wLinkBattleRNCount:: ; cbc3
; how far through the prng stream
db
wEnemyItemState:: db ; cbc4
ds 2
wCurEnemyMoveNum:: db ; cbc7
wEnemyHPAtTimeOfPlayerSwitch:: dw ; cbc8
wPayDayMoney:: ds 3 ; cbca
wSafariMonAngerCount:: db ; cbcd
wSafariMonEating:: db ; cbce
ds 1
wEnemyBackupDVs:: dw ; cbd0 ; used when enemy is transformed
wAlreadyDisobeyed:: db ; cbd2
wDisabledMove:: db ; cbd3
wEnemyDisabledMove:: db ; cbd4
wWhichMonFaintedFirst:: db ; cbd5
; exists so you can't counter on switch
wLastPlayerCounterMove:: db ; cbd6
wLastEnemyCounterMove:: db ; cbd7
wEnemyMinimized:: db ; cbd8
wAlreadyFailed:: db ; cbd9
wBattleParticipantsIncludingFainted:: db ; cbda
wBattleLowHealthAlarm:: db ; cbdb
wPlayerMinimized:: db ; cbdc
wPlayerScreens:: ; cbdd
; bit
; 7
; 6
; 5
; 4 reflect
; 3 light screen
; 2 safeguard
; 1
; 0 spikes
db
wEnemyScreens:: ; cbde
; see wPlayerScreens
db
wPlayerSafeguardCount:: db ; cbdf
wPlayerLightScreenCount:: db ; cbe0
wPlayerReflectCount:: db ; cbe1
ds 1
wEnemySafeguardCount:: db ; cbe3
wEnemyLightScreenCount:: db ; cbe4
wEnemyReflectCount:: db ; cbe5
ds 2
wBattleWeather:: ; cbe8
; 00 normal
; 01 rain
; 02 sun
; 03 sandstorm
; 04 rain stopped
; 05 sunliight faded
; 06 sandstorm subsided
db
wWeatherCount:: ; cbe9
; # turns remaining
db
wLoweredStat:: db ; cbea
wEffectFailed:: db ; cbeb
wFailedMessage:: db ; cbec
wEnemyGoesFirst:: db ; cbed
wPlayerIsSwitching:: db ; cbee
wEnemyIsSwitching:: db ; cbef
wPlayerUsedMoves:: ; cbf0
; add a move that has been used once by the player
; added in order of use
ds NUM_MOVES
wEnemyAISwitchScore:: db ; cbf4
wEnemySwitchMonParam:: db ; cbf5
wEnemySwitchMonIndex:: db ; cbf6
wTempLevel:: db ; cbf7
wLastPlayerMon:: db ; cbf8
wLastPlayerMove:: db ; cbf9
wLastEnemyMove:: db ; cbfa
wPlayerFutureSightCount:: db ; cbfb
wEnemyFutureSightCount:: db ; cbfc
wGivingExperienceToExpShareHolders:: db ; cbfd
wBackupEnemyMonBaseStats:: ds 5 ; cbfe
wBackupEnemyMonCatchRate:: db ; cc03
wBackupEnemyMonBaseExp:: db ; cc04
wPlayerFutureSightDamage:: dw ; cc05
wEnemyFutureSightDamage:: dw ; cc07
wPlayerRageCounter:: db ; cc09
wEnemyRageCounter:: db ; cc0a
wBeatUpHitAtLeastOnce:: db ; cc0b
wPlayerTrappingMove:: db ; cc0c
wEnemyTrappingMove:: db ; cc0d
wPlayerWrapCount:: db ; cc0e
wEnemyWrapCount:: db ; cc0f
wPlayerCharging:: db ; cc10
wEnemyCharging:: db ; cc11
wBattleEnded:: db ; cc12
wWildMonMoves:: ds NUM_MOVES ; cc13
wWildMonPP:: ds NUM_MOVES ; cc17
wAmuletCoin:: db ; cc1b
wSomeoneIsRampaging:: db ; cc1c
wPlayerJustGotFrozen:: db ; cc1d
wEnemyJustGotFrozen:: db ; cc1e
wBattleEnd::
ds 1
ENDU
ENDU ; cc20
SECTION "Video", WRAM0
; wBGMapBuffer
wBGMapBuffer:: ds 40 ; cc20
wBGMapPalBuffer:: ds 40 ; cc48
wBGMapBufferPtrs:: ds 40 ; cc70 ; 20 bg map addresses (16x8 tiles)
wBGMapBufferEnd::
wSGBPredef:: db ; cc98
wPlayerHPPal:: db ; cc99
wEnemyHPPal:: db ; cc9a
wHPPals:: ds PARTY_LENGTH
wCurHPPal:: db
ds 7
wSGBPals:: ds 48 ; cca9
wAttrmap:: ; ccd9
; 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::
wTileAnimBuffer:: ds 1 tiles ; ce41
wOtherPlayerLinkMode:: db ; ce51
wOtherPlayerLinkAction:: ; ce52
wBattleAction:: db
ds 3
wPlayerLinkAction:: db ; ce56
wce57:: db
ds 3
wLinkTimeoutFrames:: dw ; ce5b
wce5d:: dw
wMonType:: db ; ce5f
wCurSpecies:: db ; ce60
wNamedObjectTypeBuffer:: db
ds 1
wJumptableIndex:: db
UNION ; ce64
; unidentified
wce64:: db
wce65:: db
wce66:: db
NEXTU ; ce64
; intro and title data
wIntroSceneFrameCounter:: db
UNION ; ce65
wIntroSceneTimer:: db
NEXTU ; ce65
wTitleScreenTimer:: dw
ENDU
NEXTU ; ce64
; credits data
wCreditsBorderFrame:: db
wCreditsBorderMon:: db
wCreditsLYOverride:: db
NEXTU ; ce64
; pokedex
wPrevDexEntryJumptableIndex:: db
wPrevDexEntryBackup::
wPokedexStatus:: db
NEXTU ; ce64
; pokegear
wPokegearCard:: db
wPokegearMapRegion:: db
wPokegearCE66:: db
NEXTU ; ce64
; pack
wPackJumptableIndex:: db
wCurPocket:: db
wPackUsedItem:: db
NEXTU ; ce64
; trainer card badges
wTrainerCardBadgeFrameCounter:: db
wTrainerCardBadgeTileID:: db
wTrainerCardBadgeAttributes:: db
NEXTU ; ce64
; card flip data
wCardFlipCursorY:: db
wCardFlipCursorX:: db
wCardFlipWhichCard:: db
NEXTU ; ce64
; magnet train
wMagnetTrainOffset:: db
wMagnetTrainPosition:: db
wMagnetTrainWaitCounter:: db
NEXTU ; ce64
; unown puzzle data
wHoldingUnownPuzzlePiece:: db
wUnownPuzzleCursorPosition:: db
wUnownPuzzleHeldPiece:: db
NEXTU ; ce64
; miscellaneous
wFrameCounter::
wMomBankDigitCursorPosition::
wNamingScreenLetterCase::
wHallOfFameMonCounter::
wSlotsDelay::
db
wPrinterQueueLength:: db
wSlotsCE66::
wPokedexCE66::
db
ENDU ; ce67
wRequested2bpp::
wRequested2bppSize:: db ; ce67
wRequested2bppSource:: dw ; ce68
wRequested2bppDest:: dw ; ce6a
wRequested1bpp::
wRequested1bppSize:: db ; ce6c
wRequested1bppSource:: dw ; ce6d
wRequested1bppDest:: dw ; ce6f
wSecondsSince:: db ; ce71
wMinutesSince:: db ; ce72
wHoursSince:: db ; ce73
wDaysSince:: db ; ce74
wce75:: ds 1 ; ce75
wce76:: ds 1 ; ce76
wce77:: ds 1 ; ce77
wce78:: ds 1 ; ce78
wce79:: ds 1 ; ce79
wce7a:: ds 1 ; ce7a
wce7b:: ds 1 ; ce7b
wce7c:: ds 1 ; ce7c
wce7d:: ds 1 ; ce7d
wce7e:: ds 1 ; ce7e
wce7f:: ds 1 ; ce7f
wce80:: ds 1 ; ce80
wPlayerBGMapOffsetX:: db ; used in FollowNotExact; unit is pixels
wPlayerBGMapOffsetY:: db ; used in FollowNotExact; unit is pixels
wPlayerStepVectorX:: db ; ce83
wPlayerStepVectorY:: db ; ce84
wPlayerStepFlags:: db ; ce85
wPlayerStepDirection:: db ; ce86
wPlayerNextMovement:: db ; ce87
wPlayerMovement:: db ; ce88
wce89:: ds 1 ; ce89
wce8a:: ds 1 ; ce8a
wMovementObject:: db ; ce8b
wMovementDataBank:: db ; ce8c
wMovementDataAddress:: dw ; ce8d
wce8f:: ds 1 ; ce8f
wce90:: ds 1 ; ce90
wce91:: ds 1 ; ce91
wce92:: ds 1 ; ce92
wMovementByteWasControlSwitch:: db ; ce93
wMovementPointer:: dw ; ce94
ds 3
wTempObjectCopyMapObjectIndex:: db ; ce99
wTempObjectCopySprite:: db ; ce9a
wTempObjectCopySpriteVTile:: db ; ce9b
wTempObjectCopyPalette:: db ; ce9c
wTempObjectCopyMovement:: db ; ce9d
wTempObjectCopyRange:: db ; ce9e
wTempObjectCopyX:: db ; ce9f
wTempObjectCopyY:: db ; cea0
wTempObjectCopyRadius:: db ; cea1
ds 1
wTileDown:: db ; cea3
wTileUp:: db ; cea4
wTileLeft:: db ; cea5
wTileRight:: db ; cea6
wTilePermissions:: db ; cea7
wWindowStackPointer:: dw ; cea8
wMenuJoypad:: db ; ceaa
wMenuSelection:: db ; ceab
wMenuSelectionQuantity:: db ; ceac
wWhichIndexSet:: db ; cead
wScrollingMenuCursorPosition:: db ; ceae
wWindowStackSize:: db ; ceaf
ds 8
; menu header
wMenuHeader:: ; ceb8
wMenuFlags:: db
wMenuBorderTopCoord:: db
wMenuBorderLeftCoord:: db
wMenuBorderBottomCoord:: db
wMenuBorderRightCoord:: db
wMenuDataPointer:: dw
wMenuCursorBuffer:: dw
ds 7
wMenuHeaderEnd::
wMenuData::
wMenuDataFlags:: db ; cec8
UNION ; cec9
; Vertical Menu/DoNthMenu/SetUpMenu
wMenuDataItems:: db ; cec9
wMenuDataIndicesPointer:: dw ; ceca
wMenuDataDisplayFunctionPointer:: dw ; cecc
wMenuDataPointerTableAddr:: dw ; cece
NEXTU ; cec9
; 2D Menu
wMenuData_2DMenuDimensions:: db ; cec9
wMenuData_2DMenuSpacing:: db ; ceca
wMenuData_2DMenuItemStringsBank:: db ; cecb
wMenuData_2DMenuItemStringsAddr:: dw ; cecc
wMenuData_2DMenuFunctionBank:: db ; cece
wMenuData_2DMenuFunctionAddr:: dw ; cecf
NEXTU ; cec9
; Scrolling Menu
wMenuData_ScrollingMenuHeight:: db ; cec9
wMenuData_ScrollingMenuWidth:: db ; ceca
wMenuData_ScrollingMenuItemFormat:: db ; cecb
wMenuData_ItemsPointerBank:: db ; cecc
wMenuData_ItemsPointerAddr:: dw ; cecd
wMenuData_ScrollingMenuFunction1:: ds 3 ; cecf
wMenuData_ScrollingMenuFunction2:: ds 3 ; ced2
wMenuData_ScrollingMenuFunction3:: ds 3 ; ced5
ENDU ; ced8
wMenuDataEnd::
w2DMenuData::
w2DMenuCursorInitY:: db ; ced8
w2DMenuCursorInitX:: db ; ced9
w2DMenuNumRows:: db ; ceda
w2DMenuNumCols:: db ; cedb
w2DMenuFlags1:: ; cedc
; 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 ; cedd
w2DMenuCursorOffsets:: db ; cede
wMenuJoypadFilter:: db ; cedf
w2DMenuDataEnd::
wMenuCursorY:: db ; cee0
wMenuCursorX:: db ; cee1
wCursorOffCharacter:: db ; cee2
wCursorCurrentTile:: dw ; cee3
ds 3
wOverworldDelay:: db ; cee8
wTextDelayFrames:: db ; cee9
wVBlankOccurred:: db ; ceea
wceeb:: db
wDefaultSpawnpoint:: db
UNION ; ceed
; mail temp storage
wTempMail:: mailmsg wTempMail
NEXTU ; ceed
; magnet train
wMagnetTrain:: ; used only for BANK(wMagnetTrain)
wMagnetTrainDirection:: db
wMagnetTrainInitPosition:: db
wMagnetTrainHoldPosition:: db
wMagnetTrainFinalPosition:: db
wMagnetTrainPlayerSpriteInitX:: db
NEXTU ; ceed
; credits
wCreditsPos:: dw
wCreditsTimer:: db
NEXTU ; ceed
; mon buffer
wBufferMonNick:: ds MON_NAME_LENGTH ; ceed
wBufferMonOT:: ds NAME_LENGTH ; cef8
wBufferMon:: party_struct wBufferMon ; cf03
ds 8
NEXTU ; ceed
; bug-catching contest
wBugContestResults::
bugcontestwinner wBugContestFirstPlace
bugcontestwinner wBugContestSecondPlace
bugcontestwinner wBugContestThirdPlace
wBugContestWinnersEnd::
bugcontestwinner wBugContestTemp
ds 4
wBugContestWinnerName:: ds NAME_LENGTH
NEXTU ; ceed
; 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 ; ceed
; town map data
wTownMapPlayerIconLandmark:: db
UNION
wTownMapCursorLandmark:: db
wTownMapCursorObjectPointer:: dw
NEXTU
wTownMapCursorCoordinates:: dw
ENDU
NEXTU ; ceed
; phone call data
wPhoneScriptBank:: db
wPhoneCaller:: dw
NEXTU ; ceed
; radio data
wCurRadioLine:: db
wNextRadioLine:: db
wRadioTextDelay:: db
wNumRadioLinesPrinted:: db
wOaksPKMNTalkSegmentCounter:: db
ds 5
wRadioText:: ds 2 * SCREEN_WIDTH
wRadioTextEnd::
NEXTU ; ceed
; lucky number show
wLuckyNumberDigitsBuffer:: ds 5
NEXTU ; ceed
; movement buffer data
wMovementBufferCount:: db
wMovementBufferObject:: db
wUnusedMovementBufferBank:: db
wUnusedMovementBufferPointer:: dw
wMovementBuffer:: ds 55
NEXTU ; ceed
; box printing
wWhichBoxMonToPrint:: db
wFinishedPrintingBox:: db
wAddrOfBoxToPrint:: dw
wBankOfBoxToPrint:: db
wWhichBoxToPrint:: db
NEXTU ; ceed
; trainer HUD data
ds 1
wPlaceBallsDirection:: db
wTrainerHUDTiles:: ds 4
NEXTU ; ceed
; earthquake data buffer
wEarthquakeMovementDataBuffer:: ds 5
NEXTU ; ceed
; miscellaneous
wTempDayOfWeek::
wKeepSevenBiasChance:: ; used in the slots to handle the favoring of 7 symbol streaks
db
ds 2
wStartFlypoint:: db
wEndFlypoint:: db
NEXTU ; ceed
; unidentified
wceed:: db
wceee:: db
wceef:: db
ds 1
wcef1:: ds 2
wcef3:: ds 2
ds 2
wcef7:: ds 1
wcef8:: ds 1
ds 1
wcefa:: ds 1
wcefb:: ds 1
wcefc:: ds 1
wcefd:: ds 1
wcefe:: ds 1
wceff:: ds 2
ds 1
wcf02:: ds 1
wcf03:: ds 1
wcf04:: ds 1
ds 19
wcf18:: ds 1
wcf19:: ds 1
wcf1a:: ds 1
wcf1b:: ds 1
wcf1c:: ds 1
wcf1d:: ds 1
wcf1e:: ds 1
wcf1f:: ds 2
wcf21:: ds 2
ds 6
UNION ; cf29
; trainer data
wSeenTrainerBank:: db
wSeenTrainerDistance:: db
wSeenTrainerDirection:: db
wTempTrainer::
wTempTrainerEventFlag:: dw
wTempTrainerClass:: db
wTempTrainerID:: db
wSeenTextPointer:: dw
wWinTextPointer:: dw
wLossTextPointer:: dw
wScriptAfterPointer:: dw
wRunningTrainerBattleScript:: db
wTempTrainerEnd::
NEXTU ; cf29
; menu items list
wMenuItemsList:: ds 16
wMenuItemsListEnd::
NEXTU ; cf29
; fruit tree data
wCurFruitTree:: db
wCurFruit:: db
NEXTU ; cf29
; item ball data
wItemBallData::
wItemBallItemID:: db
wItemBallQuantity:: db
wItemBallDataEnd::
NEXTU ; cf29
; hidden item data
wHiddenItemData::
wHiddenItemEvent:: dw
wHiddenItemID:: db
wHiddenItemDataEnd::
NEXTU ; cf29
; elevator data
wElevatorData::
wElevatorPointerBank:: db
wElevatorPointer:: dw
wElevatorOriginFloor:: db
wElevatorDataEnd::
NEXTU ; cf29
; coord event data
wCurCoordEvent::
wCurCoordEventSceneID:: db
wCurCoordEventMapY:: db
wCurCoordEventMapX:: db
ds 1
wCurCoordEventScriptAddr:: dw
NEXTU ; cf29
; BG event data
wCurBGEvent::
wCurBGEventYCoord:: db
wCurBGEventXCoord:: db
wCurBGEventType:: db
wCurBGEventScriptAddr:: dw
NEXTU ; cf29
; mart data
wMartType:: db
wMartPointerBank:: db
wMartPointer:: dw
wMartJumptableIndex:: db
wBargainShopFlags:: db
NEXTU ; cf29
; player movement data
wCurInput::
wFacingTileID:: db
wWalkingIntoNPC:: db
wWalkingIntoLand:: db
wWalkingIntoEdgeWarp:: db
wMovementAnimation:: db
wWalkingDirection:: db
wFacingDirection:: db
wWalkingX:: db
wWalkingY:: db
wWalkingTile:: db
ds 6
wPlayerTurningDirection:: db
NEXTU ; cf29
; std script buffer
ds 1
wJumpStdScriptBuffer:: ds 3
NEXTU ; cf29
; phone script data
wCheckedTime:: db
wPhoneListIndex:: db
wNumAvailableCallers:: db
wAvailableCallers:: ds CONTACT_LIST_SIZE
NEXTU ; cf29
; phone caller contact
ds 1
wCallerContact:: ds PHONE_CONTACT_SIZE
NEXTU ; cf29
; backup menu data
ds 7
wMenuCursorBufferBackup:: db
wMenuScrollPositionBackup:: db
NEXTU ; cf29
; poison step data
wPoisonStepData::
wPoisonStepFlagSum:: db
wPoisonStepPartyFlags:: ds PARTY_LENGTH
wPoisonStepDataEnd::
ENDU ; cf3a
ds 1
wBoxAlignment:: db
wUnusedBufferCF3C:: dw
wFXAnimID:: dw
ENDU ; cf40
wPlaceBallsX:: db ; cf40
wPlaceBallsY:: db ; cf41
wTileAnimationTimer:: db ; cf42
; palette backups?
wBGP:: db
wOBP0:: db
wOBP1:: db
wNumHits:: db ; cf46
ds 1
wMonOrItemNameBuffer:: ds 22 ; cf48
wTMHMMoveNameBackup:: ds MOVE_NAME_LENGTH ; cf5e
wStringBuffer1:: ds 19 ; cf6b
wStringBuffer2:: ds 19 ; cf7e
wStringBuffer3:: ds 19 ; cf91
wStringBuffer4:: ds 19 ; cfa4
wStringBuffer5:: ds 13 ; cfb7
wBattleMenuCursorBuffer:: dw ; cfc4
wCurBattleMon:: db ; cfc6
wCurMoveNum:: db; cfc7
wLastPocket:: db ; cfc8
wPartyMenuCursor:: db ; cfc9
wItemsPocketCursor:: db ; cfca
wKeyItemsPocketCursor:: db ; cfcb
wBallsPocketCursor:: db ; cfcc
wTMHMPocketCursor:: db ; cfcd
ds 1
wItemsPocketScrollPosition:: db ; cfcf
wKeyItemsPocketScrollPosition:: db; cfd0
wBallsPocketScrollPosition:: db ; cfd1
wTMHMPocketScrollPosition:: db ; cfd2
wSwitchMon::
wSwitchItem::
wMoveSwapBuffer::
wcfd3::
db
wMenuScrollPosition:: ds 4
wQueuedScriptBank:: db
wQueuedScriptAddr:: dw
wPredefID:: db ; cfdb
wPredefTemp:: dw ; cfdc
wPredefAddress:: dw ; cfde
wFarCallBCBuffer:: dw ; cfe0
ds 1
wNumMoves:: db
wFieldMoveSucceeded::
wItemEffectSucceeded::
wBattlePlayerAction::
; 0 - use move
; 1 - use item
; 2 - switch
wSolvedUnownPuzzle::
db ; cfe4
wVramState:: ; cfe5
; 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
ds 3
wBattleResult:: ; cfe9
; WIN, LOSE, or DRAW
; bit 7: box full
db
wcfea:: ds 1 ; cfea
wUsingItemWithSelect:: db ; cfeb
UNION ; cfec
; mart data
wCurMart:: ds 16
wCurMartEnd::
NEXTU ; cfec
; elevator data
wCurElevator:: db
wCurElevatorFloors:: db
NEXTU ; cfec
; mailbox data
wCurMessageScrollPosition:: db
wCurMessageIndex:: db
wMailboxCount:: db
wMailboxItems:: ds MAILBOX_CAPACITY
wMailboxEnd::
ENDU ; cffc
wListPointer:: dw ; cffc
wUnusedCFFE:: dw ; cffe
SECTION "WRAM 1", WRAMX
wItemAttributesPtr:: dw ; d000
wCurItem:: db ; d002
wCurItemQuantity:: ; d003
wMartItemID::
db
wCurPartySpecies:: db ; d004
wCurPartyMon:: ; d005
; contains which monster in a party
; is being dealt with at the moment
; 0-5
db
wd006:: ds 1 ; d006
wWhichHPBar:: ; d007
; 0: Enemy
; 1: Player
; 2: Party Menu
db
wPokemonWithdrawDepositParameter:: ; d008
; 0: Take from PC
; 1: Put into PC
; 2: Take from Day-Care
; 3: Put into Day-Care
db
wItemQuantityChangeBuffer:: db ; d009
wItemQuantityBuffer:: db ; d00a
wTempMon:: party_struct wTempMon ; d00b
wSpriteFlags:: db ; d03b
wHandlePlayerStep:: db ; d03c
ds 1
wPartyMenuActionText:: db ; d03e
wItemAttributeParamBuffer:: db ; d03f
wCurPartyLevel:: db ; d040
wScrollingMenuListSize:: db ; d041
wLinkMode:: db ; d042
; 0 not in link battle
; 1 link battle
; used when following a map warp
wNextWarp:: db ; d043
wNextMapGroup:: db ; d044
wNextMapNumber:: db ; d045
wPrevWarp:: db ; d046
wPrevMapGroup:: db ; d047
wPrevMapNumber:: db ; d048
wd049:: ds 1 ; d049
wd04a:: ds 1 ; d04a
wd04b:: ds 1 ; d04b
wd04c:: ds 1 ; d04c
wd04d:: ds 1 ; d04d
wd04e:: ds 1 ; d04e
wd04f:: ds 1 ; d04f
wd050:: ds 1 ; d050
wd051:: ds 1 ; d051
wd052:: ds 1 ; d052
wd053:: ds 1 ; d053
wd054:: ds 1 ; d054
wd055:: ds 1 ; d055
wd056:: ds 1 ; d056
wd057:: ds 1 ; d057
wd058:: ds 1 ; d058
wd059:: ds 1 ; d059
wUnusedD05A:: db
wBGMapAnchor:: dw ; d05b
wUsedSprites:: ds SPRITE_GFX_LIST_CAPACITY * 2
wUsedSpritesEnd::
ds 8
wOverworldMapAnchor:: dw ; d07d
wMetatileStandingY:: db ; d07f
wMetatileStandingX:: db ; d080
wMapPartial::
wMapAttributesBank:: db ; d081
wMapTileset:: db ; d082
wEnvironment:: db ; d083
wMapAttributesPointer:: dw ; d084
wMapPartialEnd::
wMapAttributes:: ; d086
wMapBorderBlock:: db ; d086
; width/height are in blocks (2x2 walkable tiles, 4x4 graphics tiles)
wMapHeight:: db ; d087
wMapWidth:: db ; d088
wMapBlocksBank:: db; d089
wMapBlocksPointer:: dw ; d08a
wMapScriptsBank:: db ; d08c
wMapScriptsPointer:: dw ; d08d
wMapEventsPointer:: dw ; d08f
; bit set
wMapConnections:: db ; d091
wMapAttributesEnd::
wNorthMapConnection:: map_connection_struct wNorth ; d092
wSouthMapConnection:: map_connection_struct wSouth ; d09e
wWestMapConnection:: map_connection_struct wWest ; d0aa
wEastMapConnection:: map_connection_struct wEast ; d0b6
wTileset::
wTilesetBank:: db ; d0c2
wTilesetAddress:: dw ; d0c3
wTilesetBlocksBank:: db ; d0c5
wTilesetBlocksAddress:: dw ; d0c6
wTilesetCollisionBank:: db ; d0c8
wTilesetCollisionAddress:: dw ; d0c9
wTilesetAnim:: dw ; bank 3f ; d0cb
ds 2 ; unused ; d0cd
wTilesetPalettes:: dw ; bank 3f ; d0cf
wTilesetEnd::
wEvolvableFlags:: flag_array PARTY_LENGTH ; d0d1
wForceEvolution:: db ; d0d2
UNION ; d0d3
; general-purpose buffers
wBuffer1:: db ; d0d3
wBuffer2:: db ; d0d4
wBuffer3:: db ; d0d5
wBuffer4:: db ; d0d6
wBuffer5:: db ; d0d7
wBuffer6:: db ; d0d8
NEXTU ; d0d3
; HP bar animations
wCurHPAnimMaxHP:: dw ; d0d3
wCurHPAnimOldHP:: dw ; d0d5
wCurHPAnimNewHP:: dw ; d0d7
wCurHPAnimPal:: db ; d0d9
wCurHPBarPixels:: db ; d0da
wNewHPBarPixels:: db ; d0db
wCurHPAnimDeltaHP:: dw ; d0dc
wCurHPAnimLowHP:: db ; d0de
wCurHPAnimHighHP:: db ; d0df
NEXTU ; d0d3
; evolution data
wEvolutionOldSpecies:: db ; d0d3
wEvolutionNewSpecies:: db ; d0d4
wEvolutionPicOffset:: db ; d0d5
wEvolutionCanceled:: db ; d0d6
NEXTU
wd0d3:: ds 1
wd0d4:: ds 1
wd0d5:: ds 1
wd0d6:: ds 1
wd0d7:: ds 1
wd0d8:: ds 1
wd0d9:: ds 1
wd0da:: ds 1
wd0db:: ds 1
wd0dc:: ds 1
NEXTU ; d0d3
; miscellaneous
wMagikarpLength:: dw
wSelectedDecoration:: db
wOtherDecoration:: db
ds 3
wCurEnemyItem:: db
ENDU ; d0e0
ds 3
wLinkBattleRNs:: ds 10 ; d0e3
wTempEnemyMonSpecies:: db ; d0ed
wTempBattleMonSpecies:: db ; d0ee
wEnemyMon:: battle_struct wEnemyMon ; d0ef
wEnemyMonBaseStats:: ds 5 ; d10f
wEnemyMonCatchRate:: db ; d114
wEnemyMonBaseExp:: db ; d115
wEnemyMonEnd::
wBattleMode:: ; d116
; 0: overworld
; 1: wild battle
; 2: trainer battle
db
wTempWildMonSpecies:: db
wOtherTrainerClass:: ; d118
; class (Youngster, Bug Catcher, etc.) of opposing trainer
; 0 if opponent is a wild Pokémon, not a trainer
db
; BATTLETYPE_* values
wBattleType:: db ; d119
wd11a:: ds 1 ; d11a
wOtherTrainerID:: ; d11b
; which trainer of the class that you're fighting
; (Joey, Mikey, Albert, etc.)
db
wForcedSwitch:: db
wTrainerClass:: db ; d11d
wUnownLetter:: db ; d11e
wMoveSelectionMenuType:: db ; d11f
; corresponds to the data/pokemon/base_stats/*.asm contents
wCurBaseData:: ; d120
wBaseDexNo:: db ; d120
wBaseStats:: ; d121
wBaseHP:: db ; d121
wBaseAttack:: db ; d122
wBaseDefense:: db ; d123
wBaseSpeed:: db ; d124
wBaseSpecialAttack:: db ; d125
wBaseSpecialDefense:: db ; d126
wBaseType:: ; d127
wBaseType1:: db ; d127
wBaseType2:: db ; d128
wBaseCatchRate:: db ; d129
wBaseExp:: db ; d12a
wBaseItems:: ; d12b
wBaseItem1:: db ; d12b
wBaseItem2:: db ; d12c
wBaseGender:: db ; d12d
wBaseUnknown1:: db ; d12e
wBaseEggSteps:: db ; d12f
wBaseUnknown2:: db ; d130
wBasePicSize:: db ; d131
wBaseUnusedFrontpic:: dw ; d132
wBaseUnusedBackpic:: dw ; d134
wBaseGrowthRate:: db ; d136
wBaseEggGroups:: db ; d137
wBaseTMHM:: flag_array NUM_TMS + NUM_HMS ; d138
wCurBaseDataEnd::
wd140:: ds 1 ; d140
wCurDamage:: dw ; d141
wd143:: ds 1 ; d143
wd144:: ds 1 ; d144
wMornEncounterRate:: db ; d145
wDayEncounterRate:: db ; d146
wNiteEncounterRate:: db ; d147
wWaterEncounterRate:: db ; d148
wListMoves_MoveIndicesBuffer:: ds NUM_MOVES
wPutativeTMHMMove:: db ; d14d
wInitListType:: db ; d14e
wWildMon:: db ; d14f
wBattleHasJustStarted:: db ; d150
; d151 has many different short-term uses
wNamedObjectIndexBuffer::
wDeciramBuffer::
wTempByteValue::
wNumSetBits::
wTypeMatchup::
wCurType::
wTempSpecies::
wTempIconSpecies::
wTempTMHM::
wTempPP::
wNextBoxOrPartyIndex::
wChosenCableClubRoom::
wBreedingCompatibility::
wMoveGrammar::
wApplyStatLevelMultipliersToEnemy::
wUsePPUp::
wd151::
db ; d151
wFailedToFlee:: db ; d152
wNumFleeAttempts:: db ; d153
wMonTriedToEvolve:: db ; d154
wROMBankBackup:: db ; d155
wFarByte::
wTempBank:: db ; d156
wTimeOfDay:: db ; d157
wd158:: ds 1 ; d158
wMapStatus:: db ; d159
wMapEventStatus:: db ; d15a
wScriptFlags:: ; d15b
; bit 3: priority jump
db
wScriptFlags2:: ; d15c
db
wScriptFlags3:: ; d15d
; bit 0: count steps
; bit 1: coord events
; bit 2: warps and connections
; bit 4: wild encounters
; bit 5: unknown
db
wScriptMode:: db ; d15e
wScriptRunning:: db ; d15f
wScriptBank:: db ; d160
wScriptPos:: dw ; d161
wScriptStackSize:: db
wScriptStack:: ds 3 * 5
wScriptVar:: db ; d173
wScriptDelay:: db ; d174
wPriorityScriptBank::
wScriptTextBank::
db ; d175
wPriorityScriptAddr::
wScriptTextAddr::
dw ; d176
wd178:: ds 1 ; d178
wWildEncounterCooldown:: db ; d179
wXYComparePointer:: dw ; d17a
wd17c:: ds 1 ; d17c
wd17d:: ds 1 ; d17d
wd17e:: ds 1 ; d17e
wd17f:: ds 1 ; d17f
wBattleScriptFlags:: dw ; d180
wPlayerSpriteSetupFlags:: ; d182
db
wMapReentryScriptQueueFlag:: db ; d183
wMapReentryScriptBank:: db
wMapReentryScriptAddress:: dw ; d185
wd187:: ds 1 ; d187
wd188:: ds 1 ; d188
wd189:: ds 1 ; d189
wd18a:: ds 1 ; d18a
wTimeCyclesSinceLastCall:: db ; d18b
wReceiveCallDelay_MinsRemaining:: db ; d18c
wReceiveCallDelay_StartTime:: ds 3 ; d18d
wd190:: ds 1 ; d190
wd191:: ds 1 ; d191
wd192:: ds 1 ; d192
wBugContestMinsRemaining:: db ; d193
wBugContestSecsRemaining:: db ; d194
wd195:: ds 1 ; d195
wd196:: ds 1 ; d196
wMapStatusEnd::
wd197:: ds 1 ; d197
wd198:: ds 1 ; d198
wOptions:: ; d199
; 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 ; d19a
wTextboxFrame:: ; d19b
; bits 0-2: textbox frame 0-7
db
wTextboxFlags:: ; d19c
; bit 0: 1-frame text delay
; bit 1: when unset, no text delay
db
wGBPrinterBrightness:: ; d19d
; bit 0-6: brightness
; lightest: $00
; lighter: $20
; normal: $40 (default)
; darker: $60
; darkest: $7F
db
wOptions2:: ; d19e
; bit 0: menu account off/on
db
ds 2
wOptionsEnd::
SECTION "Game Data", WRAMX
wGameData::
wPlayerData::
wPlayerData1::
wPlayerID:: dw ; d1a1
wPlayerName:: ds NAME_LENGTH ; d1a3
wMomsName:: ds NAME_LENGTH ; d1ae
wRivalName:: ds NAME_LENGTH ; d1b9
wRedsName:: ds NAME_LENGTH ; d1c4
wGreensName:: ds NAME_LENGTH ; d1cf
wSavedAtLeastOnce:: db ; d1da
wSpawnAfterChampion:: db ; d1db
wStartDay:: db ; d1dc
wStartHour:: db ; d1dd
wStartMinute:: db ; d1de
wStartSecond:: db ; d1df
wRTC:: ds 4 ; d1e0
wDSTBackupDay:: db ; d1e4
wDSTBackupHours:: db ; d1e5
wDSTBackupMinutes:: db ; d1e6
wDSTBackupSeconds:: db ; d1e7
wDST:: ; d1e8
; bit 7: dst
db
ds 1
wGameTimeCap:: db ; d1ea
wGameTimeHours:: dw ; d1eb
wGameTimeMinutes:: db ; d1ed
wGameTimeSeconds:: db ; d1ee
wGameTimeFrames:: db ; d1ef
ds 2
wCurDay:: db ; d1f2
ds 1
wObjectFollow_Leader:: db ; d1f4
wObjectFollow_Follower:: db ; d1f5
wCenteredObject:: db ; d1f6
wFollowerMovementQueueLength:: db ; d1f7
wFollowMovementQueue:: ds 5 ; d1f8
wObjectStructs:: ; d1fd
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
UNION
ds 18
wPlayerData1End::
wPlayerData2::
NEXTU
wObject11Struct:: object_struct wObject11
wObject12Struct:: object_struct wObject12
wObjectStructsEnd::
ENDU
wCmdQueue:: ds CMDQUEUE_CAPACITY * CMDQUEUE_ENTRY_SIZE ; d405
; d41d
ds 40
wMapObjects:: ; d445
wPlayerObject:: map_object wPlayer ; d445
wMap1Object:: map_object wMap1 ; d455
wMap2Object:: map_object wMap2 ; d465
wMap3Object:: map_object wMap3 ; d475
wMap4Object:: map_object wMap4 ; d485
wMap5Object:: map_object wMap5 ; d495
wMap6Object:: map_object wMap6 ; d4a5
wMap7Object:: map_object wMap7 ; d4b5
wMap8Object:: map_object wMap8 ; d4c5
wMap9Object:: map_object wMap9 ; d4d5
wMap10Object:: map_object wMap10 ; d4e5
wMap11Object:: map_object wMap11 ; d4f5
wMap12Object:: map_object wMap12 ; d505
wMap13Object:: map_object wMap13 ; d515
wMap14Object:: map_object wMap14 ; d525
wMap15Object:: map_object wMap15 ; d535
wMapObjectsEnd:: ; d545
wObjectMasks:: ds NUM_OBJECTS ; d545
wVariableSprites:: ds $100 - SPRITE_VARS ; d555
wEnteredMapFromContinue:: db ; d565
ds 2
wTimeOfDayPal:: db
ds 4
wTimeOfDayPalFlags:: db ; d56d
wTimeOfDayPalset:: db ; d56e
wCurTimeOfDay:: db ; d56f
ds 1
wPlayerData2End::
wPlayerData3::
wStatusFlags::
db ; d571
wStatusFlags2:: db ; d572
wMoney:: ds 3 ; d573
wMomsMoney:: ds 3 ; d576
wMomSavingMoney:: ; d579
; bit 0: saving some money
; bit 1: saving half money (unused)
; bit 2: saving all money (unused)
; bit 7: active
db
wCoins:: dw ; d57a
wBadges::
wJohtoBadges:: flag_array NUM_JOHTO_BADGES ; d57c
wKantoBadges:: flag_array NUM_KANTO_BADGES ; d57d
wTMsHMs:: ds NUM_TMS + NUM_HMS ; d57e
wTMsHMsEnd::
wNumItems:: db ; d5b7
wItems:: ds MAX_ITEMS * 2 + 1 ; d5b8
wItemsEnd::
wNumKeyItems:: db ; d5e1
wKeyItems:: ds MAX_KEY_ITEMS + 1 ; d5e2
wKeyItemsEnd::
wNumBalls:: db ; d5fc
wBalls:: ds MAX_BALLS * 2 + 1 ; d5fd
wBallsEnd::
wNumPCItems:: db
wPCItems:: ds MAX_PC_ITEMS * 2 + 1 ; d616
wPCItemsEnd::
wPokegearFlags::
; bit 0: map
; bit 1: radio
; bit 2: phone
; bit 3: expn
; bit 7: on/off
db
wRadioTuningKnob:: db ; d67d
wLastDexMode:: db ; d67e
ds 1
wWhichRegisteredItem:: db ; d680
wRegisteredItem:: db ; d681
wPlayerState:: db ; d682
wHallOfFameCount:: dw
wTradeFlags:: flag_array NUM_NPC_TRADES ; d685
wd686:: ds 1 ; d686
wd687:: ds 1 ; d687
wd688:: ds 1 ; d688
wd689:: ds 1 ; d689
wd68a:: ds 1 ; d68a
wd68b:: ds 1 ; d68b
wd68c:: ds 1 ; d68c
wd68d:: ds 1 ; d68d
wd68e:: ds 1 ; d68e
wd68f:: ds 1 ; d68f
wd690:: ds 1 ; d690
wd691:: ds 1 ; d691
wd692:: ds 1 ; d692
wd693:: ds 1 ; d693
wd694:: ds 1 ; d694
wd695:: ds 1 ; d695
wd696:: ds 1 ; d696
wd697:: ds 1 ; d697
wd698:: ds 1 ; d698
wd699:: ds 1 ; d699
wd69a:: ds 1 ; d69a
wd69b:: ds 1 ; d69b
wd69c:: ds 1 ; d69c
wd69d:: ds 1 ; d69d
wd69e:: ds 1 ; d69e
wd69f:: ds 1 ; d69f
wd6a0:: ds 1 ; d6a0
wd6a1:: ds 1 ; d6a1
wd6a2:: ds 1 ; d6a2
wd6a3:: ds 1 ; d6a3
wd6a4:: ds 1 ; d6a4
wd6a5:: ds 1 ; d6a5
wd6a6:: ds 1 ; d6a6
wMooMooBerries:: db ; d6a7
wUndergroundSwitchPositions:: db ; d6a8
wd6a9:: ds 1 ; d6a9
wd6aa:: ds 1 ; d6aa
wd6ab:: ds 1 ; d6ab
wd6ac:: ds 1 ; d6ac
wd6ad:: ds 1 ; d6ad
wd6ae:: ds 1 ; d6ae
wd6af:: ds 1 ; d6af
wd6b0:: ds 1 ; d6b0
wd6b1:: ds 1 ; d6b1
wd6b2:: ds 1 ; d6b2
wd6b3:: ds 1 ; d6b3
wd6b4:: ds 1 ; d6b4
wd6b5:: ds 1 ; d6b5
wd6b6:: ds 1 ; d6b6
wPokecenter2FSceneID:: db ; d6b7
wTradeCenterSceneID:: db ; d6b8
wColosseumSceneID:: db ; d6b9
wTimeCapsuleSceneID:: db ; d6ba
wPowerPlantSceneID:: db ; d6bb
wCeruleanGymSceneID:: db ; d6bc
wRoute25SceneID:: db ; d6bd
wTrainerHouseB1FSceneID:: db ; d6be
wVictoryRoadGateSceneID:: db ; d6bf
wSaffronMagnetTrainStationSceneID:: db ; d6c0
wRoute16GateSceneID:: db ; d6c1
wRoute17Route18GateSceneID:: db ; d6c2
wIndigoPlateauPokecenter1FSceneID:: db ; d6c3
wWillsRoomSceneID:: db ; d6c4
wKogasRoomSceneID:: db ; d6c5
wBrunosRoomSceneID:: db ; d6c6
wKarensRoomSceneID:: db ; d6c7
wLancesRoomSceneID:: db ; d6c8
wHallOfFameSceneID:: db ; d6c9
wRoute27SceneID:: db ; d6ca
wNewBarkTownSceneID:: db ; d6cb
wElmsLabSceneID:: db ; d6cc
wPlayersHouse1FSceneID:: db ; d6cd
wRoute29SceneID:: db ; d6ce
wCherrygroveCitySceneID:: db ; d6cf
wMrPokemonsHouseSceneID:: db ; d6d0
wRoute32SceneID:: db ; d6d1
wRoute35NationalParkGateSceneID:: db ; d6d2
wRoute36NationalParkGateSceneID:: db ; d6d3
wAzaleaTownSceneID:: db ; d6d4
wGoldenrodGymSceneID:: db ; d6d5
wGoldenrodMagnetTrainStationSceneID:: db ; d6d6
wOlivineCitySceneID:: db ; d6d7
wRoute34SceneID:: db ; d6d8
wEcruteakTinTowerEntranceSceneID:: db ; d6d9
wEcruteakPokecenter1FSceneID:: db ; d6da
wMahoganyTownSceneID:: db ; d6db
wRoute43GateSceneID:: db ; d6dc
wMountMoonSceneID:: db ; d6dd
wSproutTower3FSceneID:: db ; d6de
wBurnedTower1FSceneID:: db ; d6df
wBurnedTowerB1FSceneID:: db ; d6e0
wRadioTower5FSceneID:: db ; d6e1
wRuinsOfAlphOutsideSceneID:: db ; d6e2
wRuinsOfAlphResearchCenterSceneID:: db ; d6e3
wRuinsOfAlphInnerChamberSceneID:: db ; d6e4
wMahoganyMart1FSceneID:: db ; d6e5
wTeamRocketBaseB1FSceneID:: db ; d6e6
wTeamRocketBaseB2FSceneID:: db ; d6e7
wTeamRocketBaseB3FSceneID:: db ; d6e8
wGoldenrodUndergroundSwitchRoomEntrancesSceneID:: db ; d6e9
wSilverCaveRoom3SceneID:: db ; d6ea
wVictoryRoadSceneID:: db ; d6eb
wDragonsDenB1FSceneID:: db ; d6ec
wOlivinePortSceneID:: db ; d6ed
wVermilionPortSceneID:: db ; d6ee
wFastShip1FSceneID:: db ; d6ef
wFastShipB1FSceneID:: db ; d6f0
wMountMoonSquareSceneID:: db ; d6f1
wd6f2:: ds 1 ; d6f2
wd6f3:: ds 1 ; d6f3
wd6f4:: ds 1 ; d6f4
wd6f5:: ds 1 ; d6f5
wd6f6:: ds 1 ; d6f6
wd6f7:: ds 1 ; d6f7
wd6f8:: ds 1 ; d6f8
wd6f9:: ds 1 ; d6f9
wd6fa:: ds 1 ; d6fa
wd6fb:: ds 1 ; d6fb
wd6fc:: ds 1 ; d6fc
wd6fd:: ds 1 ; d6fd
wd6fe:: ds 1 ; d6fe
wd6ff:: ds 1 ; d6ff
wd700:: ds 1 ; d700
wd701:: ds 1 ; d701
wd702:: ds 1 ; d702
wd703:: ds 1 ; d703
wd704:: ds 1 ; d704
wd705:: ds 1 ; d705
wd706:: ds 1 ; d706
wd707:: ds 1 ; d707
wd708:: ds 1 ; d708
wd709:: ds 1 ; d709
wd70a:: ds 1 ; d70a
wd70b:: ds 1 ; d70b
wd70c:: ds 1 ; d70c
wd70d:: ds 1 ; d70d
wd70e:: ds 1 ; d70e
wd70f:: ds 1 ; d70f
wd710:: ds 1 ; d710
wd711:: ds 1 ; d711
wd712:: ds 1 ; d712
wd713:: ds 1 ; d713
wd714:: ds 1 ; d714
wd715:: ds 1 ; d715
wd716:: ds 1 ; d716
wd717:: ds 1 ; d717
wd718:: ds 1 ; d718
wd719:: ds 1 ; d719
wd71a:: ds 1 ; d71a
wd71b:: ds 1 ; d71b
wd71c:: ds 1 ; d71c
wd71d:: ds 1 ; d71d
wd71e:: ds 1 ; d71e
wd71f:: ds 1 ; d71f
wd720:: ds 1 ; d720
wd721:: ds 1 ; d721
wd722:: ds 1 ; d722
wd723:: ds 1 ; d723
wd724:: ds 1 ; d724
wd725:: ds 1 ; d725
wd726:: ds 1 ; d726
wd727:: ds 1 ; d727
wd728:: ds 1 ; d728
wd729:: ds 1 ; d729
wd72a:: ds 1 ; d72a
wd72b:: ds 1 ; d72b
wd72c:: ds 1 ; d72c
wd72d:: ds 1 ; d72d
wd72e:: ds 1 ; d72e
wd72f:: ds 1 ; d72f
wd730:: ds 1 ; d730
wd731:: ds 1 ; d731
wd732:: ds 1 ; d732
wd733:: ds 1 ; d733
wd734:: ds 1 ; d734
wd735:: ds 1 ; d735
wd736:: ds 1 ; d736
wd737:: ds 1 ; d737
wd738:: ds 1 ; d738
wd739:: ds 1 ; d739
wd73a:: ds 1 ; d73a
wd73b:: ds 1 ; d73b
wd73c:: ds 1 ; d73c
wd73d:: ds 1 ; d73d
wd73e:: ds 1 ; d73e
wd73f:: ds 1 ; d73f
wd740:: ds 1 ; d740
wd741:: ds 1 ; d741
wd742:: ds 1 ; d742
wd743:: ds 1 ; d743
wd744:: ds 1 ; d744
wd745:: ds 1 ; d745
wd746:: ds 1 ; d746
wd747:: ds 1 ; d747
wd748:: ds 1 ; d748
wd749:: ds 1 ; d749
wd74a:: ds 1 ; d74a
wd74b:: ds 1 ; d74b
wd74c:: ds 1 ; d74c
wd74d:: ds 1 ; d74d
wd74e:: ds 1 ; d74e
wd74f:: ds 1 ; d74f
wd750:: ds 1 ; d750
wd751:: ds 1 ; d751
wd752:: ds 1 ; d752
wd753:: ds 1 ; d753
wd754:: ds 1 ; d754
wd755:: ds 1 ; d755
wd756:: ds 1 ; d756
wd757:: ds 1 ; d757
wd758:: ds 1 ; d758
wd759:: ds 1 ; d759
wd75a:: ds 1 ; d75a
wd75b:: ds 1 ; d75b
wd75c:: ds 1 ; d75c
wd75d:: ds 1 ; d75d
wd75e:: ds 1 ; d75e
wd75f:: ds 1 ; d75f
wd760:: ds 1 ; d760
wd761:: ds 1 ; d761
wd762:: ds 1 ; d762
wd763:: ds 1 ; d763
wd764:: ds 1 ; d764
wd765:: ds 1 ; d765
wd766:: ds 1 ; d766
wd767:: ds 1 ; d767
wd768:: ds 1 ; d768
wd769:: ds 1 ; d769
wd76a:: ds 1 ; d76a
wd76b:: ds 1 ; d76b
wd76c:: ds 1 ; d76c
wd76d:: ds 1 ; d76d
wd76e:: ds 1 ; d76e
wd76f:: ds 1 ; d76f
wd770:: ds 1 ; d770
wd771:: ds 1 ; d771
wd772:: ds 1 ; d772
wd773:: ds 1 ; d773
wd774:: ds 1 ; d774
wd775:: ds 1 ; d775
wd776:: ds 1 ; d776
wd777:: ds 1 ; d777
wd778:: ds 1 ; d778
wd779:: ds 1 ; d779
wd77a:: ds 1 ; d77a
wd77b:: ds 1 ; d77b
wd77c:: ds 1 ; d77c
wd77d:: ds 1 ; d77d
wd77e:: ds 1 ; d77e
wd77f:: ds 1 ; d77f
wd780:: ds 1 ; d780
wd781:: ds 1 ; d781
wd782:: ds 1 ; d782
wd783:: ds 1 ; d783
wd784:: ds 1 ; d784
wd785:: ds 1 ; d785
wd786:: ds 1 ; d786
wd787:: ds 1 ; d787
wd788:: ds 1 ; d788
wd789:: ds 1 ; d789
wd78a:: ds 1 ; d78a
wd78b:: ds 1 ; d78b
wd78c:: ds 1 ; d78c
wd78d:: ds 1 ; d78d
wd78e:: ds 1 ; d78e
wd78f:: ds 1 ; d78f
wd790:: ds 1 ; d790
wd791:: ds 1 ; d791
wd792:: ds 1 ; d792
wd793:: ds 1 ; d793
wd794:: ds 1 ; d794
wd795:: ds 1 ; d795
wd796:: ds 1 ; d796
wd797:: ds 1 ; d797
wd798:: ds 1 ; d798
wd799:: ds 1 ; d799
wd79a:: ds 1 ; d79a
wd79b:: ds 1 ; d79b
wd79c:: ds 1 ; d79c
wd79d:: ds 1 ; d79d
wd79e:: ds 1 ; d79e
wd79f:: ds 1 ; d79f
wd7a0:: ds 1 ; d7a0
wd7a1:: ds 1 ; d7a1
wd7a2:: ds 1 ; d7a2
wd7a3:: ds 1 ; d7a3
wd7a4:: ds 1 ; d7a4
wd7a5:: ds 1 ; d7a5
wd7a6:: ds 1 ; d7a6
wd7a7:: ds 1 ; d7a7
wd7a8:: ds 1 ; d7a8
wd7a9:: ds 1 ; d7a9
wd7aa:: ds 1 ; d7aa
wd7ab:: ds 1 ; d7ab
wd7ac:: ds 1 ; d7ac
wd7ad:: ds 1 ; d7ad
wd7ae:: ds 1 ; d7ae
wd7af:: ds 1 ; d7af
wd7b0:: ds 1 ; d7b0
wd7b1:: ds 1 ; d7b1
wd7b2:: ds 1 ; d7b2
wd7b3:: ds 1 ; d7b3
wd7b4:: ds 1 ; d7b4
wd7b5:: ds 1 ; d7b5
wd7b6:: ds 1 ; d7b6
wEventFlags:: flag_array NUM_EVENTS ; d7b7
wd8b1:: ds 1 ; d8b1
wd8b2:: ds 1 ; d8b2
wd8b3:: ds 1 ; d8b3
wd8b4:: ds 1 ; d8b4
wd8b5:: ds 1 ; d8b5
wd8b6:: ds 1 ; d8b6
wd8b7:: ds 1 ; d8b7
wGameTimerPause:: db ; d8b8
wd8b9:: ds 1 ; d8b9
wd8ba:: ; d8ba
; bits 4, 6, or 7 can be used to disable joypad input
; bit 4
; bit 6: mon fainted?
; bit 7: SGB flag?
db
wd8bb:: ds 1 ; d8bb
wCurBox:: db ; d8bc
ds 2
; 8 chars + $50
wBoxNames:: ds BOX_NAME_LENGTH * NUM_BOXES ; d8bf
wd93d:: ds 1 ; d93d
wd93e:: ds 1 ; d93e
wBikeFlags:: db ; d93f
wd940:: ds 1 ; d940
wCurMapSceneScriptPointer:: dw ; d941
wCurCaller:: dw ; d943
wCurMapWarpCount:: db ; d945
wCurMapWarpsPointer:: dw ; d946
wCurMapCoordEventCount:: db ; d948
wCurMapCoordEventsPointer:: dw ; d949
wCurMapBGEventCount:: db ; d94b
wCurMapBGEventsPointer:: dw ; d94c
wCurMapObjectEventCount:: db ; d94e
wCurMapObjectEventsPointer:: dw ; d94f
wCurMapSceneScriptCount:: db ; d951
wCurMapSceneScriptsPointer:: dw ; d952
wCurMapCallbackCount:: db ; d954
wCurMapCallbacksPointer:: dw ; d955
ds 2
; Sprite id of each decoration
wDecoBed:: db ; d959
wDecoCarpet:: db ; d95a
wDecoPlant:: db ; d95b
wDecoPoster:: db ; d95c
wDecoConsole:: db ; d95d
wDecoLeftOrnament:: db ; d95e
wDecoRightOrnament:: db ; d95f
wDecoBigDoll:: db ; d960
; Items bought from Mom
wWhichMomItem:: db ; d961
wWhichMomItemSet:: db ; d962
wMomItemTriggerBalance:: ds 3 ; d963
wDailyResetTimer:: dw ; d966
wDailyFlags1:: db ; d968
wDailyFlags2:: db ; d969
ds 3
wTimerEventStartDay:: db
ds 3
wFruitTreeFlags:: flag_array NUM_FRUIT_TREES ; d971
ds 2
wLuckyNumberDayBuffer:: dw ; d977
wd979:: ds 1 ; d979
wd97a:: ds 1 ; d97a
wSpecialPhoneCallID:: db ; d97b
wd97c:: ds 1 ; d97c
wd97d:: ds 1 ; d97d
wd97e:: ds 1 ; d97e
wBugContestStartTime:: ds 4 ; day, hour, min, sec ; d97f
wUnusedTwoDayTimerOn:: db ; d983
wUnusedTwoDayTimer:: db
wUnusedTwoDayTimerStartDate:: db
wd986:: ds 1 ; d986
wd987:: ds 1 ; d987
wd988:: ds 1 ; d988
wd989:: ds 1 ; d989
wd98a:: ds 1 ; d98a
wd98b:: ds 1 ; d98b
wd98c:: ds 1 ; d98c
wd98d:: ds 1 ; d98d
wd98e:: ds 1 ; d98e
wd98f:: ds 1 ; d98f
wd990:: ds 1 ; d990
wd991:: ds 1 ; d991
wd992:: ds 1 ; d992
wd993:: ds 1 ; d993
wd994:: ds 1 ; d994
wd995:: ds 1 ; d995
wd996:: ds 1 ; d996
wd997:: ds 1 ; d997
wd998:: ds 1 ; d998
wd999:: ds 1 ; d999
wd99a:: ds 1 ; d99a
wd99b:: ds 1 ; d99b
wd99c:: ds 1 ; d99c
wd99d:: ds 1 ; d99d
wd99e:: ds 1 ; d99e
wd99f:: ds 1 ; d99f
wd9a0:: ds 1 ; d9a0
wd9a1:: ds 1 ; d9a1
wd9a2:: ds 1 ; d9a2
wd9a3:: ds 1 ; d9a3
wd9a4:: ds 1 ; d9a4
wd9a5:: ds 1 ; d9a5
wd9a6:: ds 1 ; d9a6
wd9a7:: ds 1 ; d9a7
wd9a8:: ds 1 ; d9a8
wd9a9:: ds 1 ; d9a9
wd9aa:: ds 1 ; d9aa
wd9ab:: ds 1 ; d9ab
wd9ac:: ds 1 ; d9ac
wd9ad:: ds 1 ; d9ad
wd9ae:: ds 1 ; d9ae
wd9af:: ds 1 ; d9af
wd9b0:: ds 1 ; d9b0
wd9b1:: ds 1 ; d9b1
wd9b2:: ds 1 ; d9b2
wd9b3:: ds 1 ; d9b3
wd9b4:: ds 1 ; d9b4
wd9b5:: ds 1 ; d9b5
wd9b6:: ds 1 ; d9b6
wd9b7:: ds 1 ; d9b7
wd9b8:: ds 1 ; d9b8
wd9b9:: ds 1 ; d9b9
wd9ba:: ds 1 ; d9ba
wd9bb:: ds 1 ; d9bb
wd9bc:: ds 1 ; d9bc
wStepCount:: db ; d9bd
wPoisonStepCount:: db ; d9be
ds 2
wHappinessStepCount:: db
ds 1
wParkBallsRemaining::
wSafariBallsRemaining:: db ; d9c3
wSafariTimeRemaining:: dw ; d9c4
wPhoneList:: ds CONTACT_LIST_SIZE ; d9c6
; d9d0
ds 23
wLuckyNumberShowFlag:: db ; d9e7
ds 1
wLuckyIDNumber:: dw ; d9e9
wRepelEffect:: db ; If a Repel is in use, it contains the nr of steps it's still active
wBikeStep:: dw
wPlayerData3End::
wPlayerDataEnd::
wCurMapData::
wVisitedSpawns:: flag_array NUM_SPAWNS ; d9ee
wDigWarpNumber:: db ; d9f2
wDigMapGroup:: db ; d9f3
wDigMapNumber:: db ; d9f4
; used on maps like second floor pokécenter, which are reused, so we know which
; map to return to
wBackupWarpNumber:: db ; d9f5
wBackupMapGroup:: db ; d9f6
wBackupMapNumber:: db ; d9f7
ds 3
wLastSpawnMapGroup:: db
wLastSpawnMapNumber:: db
wd9fd:: ds 1 ; d9fd
wd9fe:: ds 1 ; d9fe
wWarpNumber:: db ; d9ff
wMapGroup:: db ; da00
wMapNumber:: db ; da01
wYCoord:: db ; da02
wXCoord:: db ; da03
wScreenSave:: ds SCREEN_META_WIDTH * SCREEN_META_HEIGHT
wCurMapDataEnd::
SECTION "Party", WRAMX
wPokemonData::
wPartyCount:: db ; da22
wPartySpecies:: ds PARTY_LENGTH ; da23
wPartyEnd:: db ; da29 ; older code doesn't check wPartyCount
wPartyMons::
wPartyMon1:: party_struct wPartyMon1 ; da2a
wPartyMon2:: party_struct wPartyMon2 ; da5a
wPartyMon3:: party_struct wPartyMon3 ; da8a
wPartyMon4:: party_struct wPartyMon4 ; daba
wPartyMon5:: party_struct wPartyMon5 ; daea
wPartyMon6:: party_struct wPartyMon6 ; db1a
wPartyMonOT:: ds NAME_LENGTH * PARTY_LENGTH ; db4a
wPartyMonNicknames:: ds MON_NAME_LENGTH * PARTY_LENGTH ; db8c
wPartyMonNicknamesEnd::
ds 22 ; equivalent to NAME_LENGTH + MON_NAME_LENGTH, possibly a reference to 7 pokemon?
wPokedexCaught:: flag_array NUM_POKEMON ; dbe4
wEndPokedexCaught::
wPokedexSeen:: flag_array NUM_POKEMON ; dc04
wEndPokedexSeen::
wUnownDex:: ds NUM_UNOWN ; dc24
wUnlockedUnowns:: db ; dc3e
wFirstUnownSeen:: db ; dc3f
wDayCareMan:: ; dc40
; 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 ; dc41
wBreedMon1OT:: ds NAME_LENGTH ; dc4c
wBreedMon1Stats:: box_struct wBreedMon1 ; dc57
wDayCareLady:: ; dc77
; bit 7: active
; bit 0: monster 2 in day-care
db
wStepsToEgg:: ; dc78
db
wBreedMotherOrNonDitto:: ; dc79
; z: yes
; nz: no
db
wBreedMon2::
wBreedMon2Nick:: ds MON_NAME_LENGTH ; dc7a
wBreedMon2OT:: ds NAME_LENGTH ; dc85
wBreedMon2Stats:: box_struct wBreedMon2 ; dc90
wEggNick:: ds MON_NAME_LENGTH ; dcb0
wEggOT:: ds NAME_LENGTH ; dcbb
wEggMon:: box_struct wEggMon ; dcc6
wBugContestSecondPartySpecies:: db ; dce6
wContestMon:: party_struct wContestMon ; dce7
wSwarmMapGroup:: db ; dd17
wSwarmMapNumber:: db ; dd18
wFishingSwarmFlag:: db ; dd19
wRoamMon1:: roam_struct wRoamMon1 ; dd1a
wRoamMon2:: roam_struct wRoamMon2 ; dd21
wRoamMon3:: roam_struct wRoamMon3 ; dd28
wRoamMons_CurMapNumber:: db
wRoamMons_CurMapGroup:: db
wRoamMons_LastMapNumber:: db
wRoamMons_LastMapGroup:: db
wBestMagikarpLengthFeet:: db
wBestMagikarpLengthInches:: db
wMagikarpRecordHoldersName:: ds NAME_LENGTH
UNION ; dd40
wPokedexShowPointerAddr:: dw
wPokedexShowPointerBank:: db
ds 3
NEXTU ; dd40
wUnusedEggHatchFlag:: db
NEXTU ; dd40
; enemy party
wOTPlayerName:: ds NAME_LENGTH ; dd40
wOTPlayerID:: dw ; dd4b
ds 8
wOTPartyCount:: db ; dd55
wOTPartySpecies:: ds PARTY_LENGTH ; dd56
wOTPartyEnd:: db ; older code doesn't check PartyCount
ENDU ; dd5d
UNION ; dd5d
; catch tutorial dude pack
wDudeBag::
wDudeNumItems:: db
wDudeItems:: ds 2 * 4
wDudeItemsEnd:: db
wDudeNumKeyItems:: db ; dd67
wDudeKeyItems:: ds 18
wDudeKeyItemsEnd:: db
wDudeNumBalls:: db ; dd7b
wDudeBalls:: ds 2 * 4 ; dd7c
wDudeBallsEnd:: db ; dd84
wDudeBagEnd::
NEXTU ; dd5d
; ot party mons
wOTPartyMons::
wOTPartyMon1:: party_struct wOTPartyMon1 ; dd5d
wOTPartyMon2:: party_struct wOTPartyMon2 ; dd8d
wOTPartyMon3:: party_struct wOTPartyMon3 ; ddbd
wOTPartyMon4:: party_struct wOTPartyMon4 ; dded
wOTPartyMon5:: party_struct wOTPartyMon5 ; de1d
wOTPartyMon6:: party_struct wOTPartyMon6 ; de4d
wOTPartyMonsEnd::
wOTPartyMonOT:: ds NAME_LENGTH * PARTY_LENGTH ; de7d
wOTPartyMonNicknames:: ds MON_NAME_LENGTH * PARTY_LENGTH ; debf
wOTPartyDataEnd::
ENDU ; df01
wPokemonDataEnd::
wGameDataEnd::
SECTION "Stack", WRAMX
wStackTop::
INCLUDE "sram.asm"
INCLUDE "hram.asm"