jep-hack/ram/wram.asm
2025-07-25 17:31:12 +01:00

3676 lines
68 KiB
NASM

SECTION "Stack", WRAM0
wStackBottom::
ds $100 - 1
wStackTop::
ds 1
SECTION "Audio RAM", WRAM0
; nonzero if playing
wMusicPlaying:: db
wAudio::
; wChannel1 - wChannel8
for n, 1, NUM_CHANNELS + 1
wChannel{d:n}:: channel_struct wChannel{d:n}
endr
ds 1
wCurTrackDuty:: db
wCurTrackVolumeEnvelope:: db
wCurTrackFrequency:: dw
wUnusedBCDNumber:: db ; BCD value, dummied out
wCurNoteDuration:: db ; used in MusicE0 and LoadNote
wCurMusicByte:: db
wCurChannel:: db
wVolume::
; 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::
; corresponds to rNR51
; bit 4-7: ch1-4 so2 on/off
; bit 0-3: ch1-4 so1 on/off
db
wPitchSweep::
; corresponds to rNR10
; bit 7: unused
; bit 4-6: sweep time
; bit 3: sweep direction
; but 0-2: sweep shift
db
wMusicID:: dw
wMusicBank:: db
wNoiseSampleAddress:: dw
wNoiseSampleDelay:: db
ds 1
wMusicNoiseSampleSet:: db
wSFXNoiseSampleSet:: db
wLowHealthAlarm::
; bit 7: on/off
; bit 4: pitch
; bit 0-3: counter
db
wMusicFade::
; 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
wMusicFadeID:: dw
ds 5
wCryPitch:: dw
wCryLength:: dw
wLastVolume:: db
wUnusedMusicF9Flag:: db
wSFXPriority::
; if nonzero, turn off music when playing sfx
db
ds 1
wChannel1JumpCondition:: db
wChannel2JumpCondition:: db
wChannel3JumpCondition:: db
wChannel4JumpCondition:: db
wStereoPanningMask:: db
wCryTracks::
; 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::
; id of sfx currently playing
db
wAudioEnd::
wMapMusic:: db
wDontPlayMapMusicOnReload:: db
SECTION "WRAM", WRAM0
wLZAddress:: dw
wLZBank:: db
ds 1
wBoxAlignment:: db
wInputType:: db
wAutoInputAddress:: dw
wAutoInputBank:: db
wAutoInputLength:: db
wDebugFlags:: db
wGameLogicPaused:: db
wSpriteUpdatesEnabled:: db
wUnusedScriptByte:: db
wMapTimeOfDay:: db
ds 3
wPrinterConnectionOpen:: db
wPrinterOpcode:: db
ds 1
wDisableTextAcceleration:: db
wPrevLandmark:: db
wCurLandmark:: db
wLandmarkSignTimer:: dw
wLinkMode::
; a LINK_* value for the link type
db
wScriptVar:: db
wPlayerNextMovement:: db
wPlayerMovement:: db
ds 2
wMovementObject::
db
wMovementDataBank:: db
wMovementDataAddress:: dw
wIndexedMovement2Pointer:: dw
ds 2
wContinueReadingMovement:: db
UNION
wObjectPriorities:: ds NUM_OBJECT_STRUCTS
NEXTU
wMovementPointer:: dw
ds 3
wTempObjectCopyMapObjectIndex:: db
wTempObjectCopySprite:: db
wTempObjectCopySpriteVTile:: db
wTempObjectCopyPalette:: db
wTempObjectCopyMovement:: db
wTempObjectCopyRange:: db
wTempObjectCopyX:: db
wTempObjectCopyY:: db
wTempObjectCopyRadius:: db
ENDU
ds 1
wTileDown:: db
wTileUp:: db
wTileLeft:: db
wTileRight:: db
wTilePermissions::
; set if tile behavior prevents
; you from walking in that direction
; bit 3: down
; bit 2: up
; bit 1: left
; bit 0: right
db
SECTION "wSpriteAnims", WRAM0
UNION
wSpriteAnimData::
wSpriteAnimDict::
; wSpriteAnimDict pairs keys with values
; keys: SPRITE_ANIM_DICT_* indexes (taken from SpriteAnimSeqData)
; values: vTiles0 offsets
ds NUM_SPRITEANIMDICT_ENTRIES * 2
wSpriteAnimationStructs::
; wSpriteAnim1 - wSpriteAnim10
for n, 1, NUM_SPRITE_ANIM_STRUCTS + 1
; field 0: index
; fields 1-3: loaded from SpriteAnimSeqData
wSpriteAnim{d:n}:: sprite_anim_struct wSpriteAnim{d:n}
endr
wSpriteAnimationStructsEnd::
NEXTU
; mobile data
wMobileWRAM::
wMobileErrorCodeBuffer:: ds 3
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 5
wc319:: db
wc31a:: db
wc31b:: db
wc31c:: db
wc31d:: db
wc31e:: db
wc31f:: db
wc320:: ds 38
wc346:: ds 102
wc3ac:: ds 8
ENDU
wSpriteAnimCount:: db
wCurSpriteOAMAddr:: db
wCurIcon:: db
wCurIconTile:: db
UNION
wSpriteAnimID::
wCurSpriteOAMFlags:: db
NEXTU
wSpriteAnimAddrBackup:: dw
ENDU
wCurAnimVTile:: db
wCurAnimXCoord:: db
wCurAnimYCoord:: db
wCurAnimXOffset:: db
wCurAnimYOffset:: db
wGlobalAnimYOffset:: db
wGlobalAnimXOffset:: db
wSpriteAnimDataEnd::
ds 11
; mobile data
wc3cc:: ds 1
wEmailAddress:: ds MOBILE_EMAIL_LENGTH
ds 1
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
wMobileWRAMEnd::
SECTION "Sprites", WRAM0
wShadowOAM::
; wShadowOAMSprite00 - wShadowOAMSprite39
for n, NUM_SPRITE_OAM_STRUCTS
wShadowOAMSprite{02d:n}:: sprite_oam_struct wShadowOAMSprite{02d:n}
endr
wShadowOAMEnd::
SECTION "Tilemap", WRAM0
wTilemap::
; 20x18 grid of 8x8 tiles
ds SCREEN_WIDTH * SCREEN_HEIGHT
wTilemapEnd::
; This union spans 480 bytes.
SECTION UNION "Miscellaneous", WRAM0
; box save buffer
; SaveBoxAddress uses this buffer in three steps because it
; needs more space than the buffer can hold.
wBoxPartialData:: ds 480
wBoxPartialDataEnd::
SECTION UNION "Miscellaneous", WRAM0
; battle tower temp struct
wBT_OTTemp:: battle_tower_struct wBT_OTTemp
SECTION UNION "Miscellaneous", WRAM0
; battle data
wBattle::
wEnemyMoveStruct:: move_struct wEnemyMoveStruct
wPlayerMoveStruct:: move_struct wPlayerMoveStruct
wEnemyMonNickname:: ds MON_NAME_LENGTH
wBattleMonNickname:: ds MON_NAME_LENGTH
wBattleMon:: battle_struct wBattleMon
ds 2
wWildMon:: db
ds 1
wEnemyTrainerItem1:: db
wEnemyTrainerItem2:: db
wEnemyTrainerBaseReward:: db
wEnemyTrainerAIFlags:: ds 3
wOTClassName:: ds TRAINER_CLASS_NAME_LENGTH
wCurOTMon:: db
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::
; >10: super-effective
; 10: normal
; <10: not very effective
; bit 7: stab
db
wCriticalHit::
; 0 if not critical
; 1 for a critical hit
; 2 for a OHKO
db
wAttackMissed::
; nonzero for a miss
db
wPlayerSubStatus1:: db
wPlayerSubStatus2:: db
wPlayerSubStatus3:: db
wPlayerSubStatus4:: db
wPlayerSubStatus5:: db
wEnemySubStatus1:: db
wEnemySubStatus2:: db
wEnemySubStatus3:: db
wEnemySubStatus4:: db
wEnemySubStatus5:: db
wPlayerRolloutCount:: db
wPlayerConfuseCount:: db
wPlayerToxicCount:: db
wPlayerDisableCount:: db
wPlayerEncoreCount:: db
wPlayerPerishCount:: db
wPlayerFuryCutterCount:: db
wPlayerProtectCount:: db
wEnemyRolloutCount:: db
wEnemyConfuseCount:: db
wEnemyToxicCount:: db
wEnemyDisableCount:: db
wEnemyEncoreCount:: db
wEnemyPerishCount:: db
wEnemyFuryCutterCount:: db
wEnemyProtectCount:: db
wPlayerDamageTaken:: dw
wEnemyDamageTaken:: dw
wBattleReward:: ds 3
wBattleAnimParam:: db
wBattleScriptBuffer:: ds 40
wBattleScriptBufferAddress:: dw
wTurnEnded:: db
ds 1
wPlayerStats::
wPlayerAttack:: dw
wPlayerDefense:: dw
wPlayerSpeed:: dw
wPlayerSpAtk:: dw
wPlayerSpDef:: dw
ds 1
wEnemyStats::
wEnemyAttack:: dw
wEnemyDefense:: dw
wEnemySpeed:: dw
wEnemySpAtk:: dw
wEnemySpDef:: dw
ds 1
wPlayerStatLevels::
wPlayerAtkLevel:: db
wPlayerDefLevel:: db
wPlayerSpdLevel:: db
wPlayerSAtkLevel:: db
wPlayerSDefLevel:: db
wPlayerAccLevel:: db
wPlayerEvaLevel:: db
ds 1
wEnemyStatLevels::
wEnemyAtkLevel:: db
wEnemyDefLevel:: db
wEnemySpdLevel:: db
wEnemySAtkLevel:: db
wEnemySDefLevel:: db
wEnemyAccLevel:: db
wEnemyEvaLevel:: db
ds 1
wEnemyTurnsTaken:: db
wPlayerTurnsTaken:: db
ds 1
wPlayerSubstituteHP:: db
wEnemySubstituteHP:: db
wUnusedPlayerLockedMove:: db
ds 1
wCurPlayerMove:: db
wCurEnemyMove:: db
wLinkBattleRNCount::
; how far through the prng stream
db
wEnemyItemState:: db
ds 2
wCurEnemyMoveNum:: db
wEnemyHPAtTimeOfPlayerSwitch:: dw
wPayDayMoney:: ds 3
wSafariMonAngerCount:: db ; unreferenced
wSafariMonEating:: db
ds 1
wEnemyBackupDVs:: dw ; used when enemy is transformed
wAlreadyDisobeyed:: db
wDisabledMove:: db
wEnemyDisabledMove:: db
wWhichMonFaintedFirst:: db
; exists so you can't counter on switch
wLastPlayerCounterMove:: db
wLastEnemyCounterMove:: db
wEnemyMinimized:: db
wAlreadyFailed:: db
wBattleParticipantsIncludingFainted:: db
wBattleLowHealthAlarm:: db
wPlayerMinimized:: db
wPlayerScreens::
; bit
; 0 spikes
; 1
; 2 safeguard
; 3 light screen
; 4 reflect
; 5-7 unused
db
wEnemyScreens::
; see wPlayerScreens
db
wPlayerSafeguardCount:: db
wPlayerLightScreenCount:: db
wPlayerReflectCount:: db
ds 1
wEnemySafeguardCount:: db
wEnemyLightScreenCount:: db
wEnemyReflectCount:: db
ds 1
ds 1
wBattleWeather::
; 00 normal
; 01 rain
; 02 sun
; 03 sandstorm
; 04 rain stopped
; 05 sunliight faded
; 06 sandstorm subsided
db
wWeatherCount::
; # turns remaining
db
wLoweredStat:: db
wEffectFailed:: db
wFailedMessage:: db
wEnemyGoesFirst:: db
wPlayerIsSwitching:: db
wEnemyIsSwitching:: db
wPlayerUsedMoves::
; add a move that has been used once by the player
; added in order of use
ds NUM_MOVES
wEnemyAISwitchScore:: db
wEnemySwitchMonParam:: db
wEnemySwitchMonIndex:: db
wTempLevel:: db
wLastPlayerMon:: db
wLastPlayerMove:: db
wLastEnemyMove:: db
wPlayerFutureSightCount:: db
wEnemyFutureSightCount:: db
wGivingExperienceToExpShareHolders:: db
wBackupEnemyMonBaseStats:: ds NUM_EXP_STATS
wBackupEnemyMonCatchRate:: db
wBackupEnemyMonBaseExp:: db
wPlayerFutureSightDamage:: dw
wEnemyFutureSightDamage:: dw
wPlayerRageCounter:: db
wEnemyRageCounter:: db
wBeatUpHitAtLeastOnce:: db
wPlayerTrappingMove:: db
wEnemyTrappingMove:: db
wPlayerWrapCount:: db
wEnemyWrapCount:: db
wPlayerCharging:: db
wEnemyCharging:: db
wBattleEnded:: db
wWildMonMoves:: ds NUM_MOVES
wWildMonPP:: ds NUM_MOVES
wAmuletCoin:: db
wSomeoneIsRampaging:: db
wPlayerJustGotFrozen:: db
wEnemyJustGotFrozen:: db
wBattleEnd::
SECTION UNION "Miscellaneous", WRAM0
; link patch lists
wPlayerPatchLists:: ds SERIAL_PATCH_LIST_LENGTH
wOTPatchLists:: ds SERIAL_PATCH_LIST_LENGTH
SECTION UNION "Miscellaneous", WRAM0
; mobile
wMobileTransferData:: ds 480
SECTION UNION "Miscellaneous", WRAM0
; This union spans 200 bytes.
UNION
; timeset temp storage
wTimeSetBuffer::
ds 20
wInitHourBuffer:: db
ds 9
wInitMinuteBuffer:: db
ds 19
wTimeSetBufferEnd::
NEXTU
; hall of fame temp struct
wHallOfFameTemp:: hall_of_fame wHallOfFameTemp
NEXTU
; odd egg
wOddEgg:: party_struct wOddEgg
wOddEggName:: ds MON_NAME_LENGTH
wOddEggOT:: ds NAME_LENGTH
NEXTU
; debug mon color picker
wDebugMiddleColors::
wDebugLightColor:: ds 2
wDebugDarkColor:: ds 2
ds 6
wDebugRedChannel:: db
wDebugGreenChannel:: db
wDebugBlueChannel:: db
NEXTU
; debug tileset color picker
wDebugPalette::
wDebugWhiteTileColor:: ds 2
wDebugLightTileColor:: ds 2
wDebugDarkTileColor:: ds 2
wDebugBlackTileColor:: ds 2
NEXTU
wMobileMonSender:: ds NAME_LENGTH_JAPANESE - 1
wMobileMon:: party_struct wMobileMon
wMobileMonOT:: ds NAME_LENGTH_JAPANESE - 1
wMobileMonNick:: ds NAME_LENGTH_JAPANESE - 1
wMobileMonMail:: mailmsg_jp wMobileMonMail
NEXTU
wOfferEmail:: ds MOBILE_EMAIL_LENGTH
wOfferTrainerID:: dw
wOfferSecretID:: dw
wOfferGender:: db
wOfferSpecies:: db
wOfferReqGender:: db
wOfferReqSpecies:: db
wOfferMonSender:: ds NAME_LENGTH_JAPANESE - 1
wOfferMon:: party_struct wOfferMon
wOfferMonOT:: ds NAME_LENGTH_JAPANESE - 1
wOfferMonNick:: ds NAME_LENGTH_JAPANESE - 1
wOfferMonMail:: mailmsg_jp wOfferMonMail
NEXTU
wUnknownGender:: db
wUnknownSpecies:: db
wUnknownReqGender:: db
wUnknownReqSpecies:: db
wUnknownMonSender:: ds NAME_LENGTH_JAPANESE - 1
wUnknownMon:: party_struct wUnknownMon
wUnknownMonOT:: ds NAME_LENGTH_JAPANESE - 1
wUnknownMonNick:: ds NAME_LENGTH_JAPANESE - 1
wUnknownMonMail:: mailmsg_jp wUnknownMonMail
NEXTU
wc608:: ds 7
wc60f:: ds 9
wc618:: ds 48
wc648:: ds 2
wc64a:: ds 62
wc688:: ds 2
wc68a:: ds 15
wc699:: ds 15
wc6a8:: ds 40
ENDU
; This union spans 280 bytes.
UNION
; pokedex
wPokedexDataStart::
wDexListingScrollOffset:: dw ; offset of the first displayed entry from the start
wDexListingCursor:: db ; Dex cursor
wDexListingEnd:: dw ; 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:: dw
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:: dw
wDexListingCursorBackup:: db
wBackupDexListingCursor:: db
wBackupDexListingPage:: dw
wDexCurLocation:: db
wPokedexStatus:: db
wPokedexShinyToggle::
; bit 0: set if displaying shiny palettes
db
wPokedexDisplayNumber:: dw
wDexLastSeenIndex:: db ; index into wPokedexSeen containing the last non-zero value
wDexLastSeenValue:: db ; value at index
wDexTempCounter:: dw
wPokedexDataEnd::
wPrevDexEntry:: dw
wPrevDexEntryBackup:: dw
wPrevDexEntryJumptableIndex:: db
wPokedexNameBuffer:: ds MON_NAME_LENGTH
ds 231
NEXTU
; pokegear
wPokegearPhoneDisplayPosition:: db
wPokegearPhoneCursorPosition:: db
wPokegearPhoneScrollPosition:: db
wPokegearPhoneSelectedPerson:: db
wPokegearPhoneSubmenuCursor:: db
wPokegearMapCursorObjectPointer:: dw
wPokegearMapCursorLandmark:: db
wPokegearMapPlayerIconLandmark:: db
wPokegearRadioChannelBank:: db
wPokegearRadioChannelAddr:: dw
wPokegearRadioMusicPlaying:: db
NEXTU
; trade
wPlayerTrademon:: trademon wPlayerTrademon
wOTTrademon:: trademon wOTTrademon
wTradeAnimAddress:: dw
wLinkPlayer1Name:: ds NAME_LENGTH
wLinkPlayer2Name:: ds NAME_LENGTH
wLinkTradeSendmonSpecies:: db
wLinkTradeGetmonSpecies:: db
NEXTU
; naming screen
wNamingScreenDestinationPointer:: dw
wNamingScreenCurNameLength:: db
wNamingScreenMaxNameLength:: db
wNamingScreenType:: db
wNamingScreenCursorObjectPointer:: dw
wNamingScreenLastCharacter:: db
wNamingScreenStringEntryCoord:: dw
NEXTU
; slot machine
wSlots::
wReel1:: slot_reel wReel1
wReel2:: slot_reel wReel2
wReel3:: slot_reel wReel3
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
; card flip
wDeck:: ds 4 * 6
wDeckEnd::
wCardFlipNumCardsPlayed:: db
wCardFlipFaceUpCard:: db
wDiscardPile:: ds 4 * 6
wDiscardPileEnd::
; beta poker game
wBetaPokerSGBPals:: dw
ds 1
wBetaPokerSGBAttr:: db
wBetaPokerSGBCol:: db
wBetaPokerSGBRow:: db
NEXTU
; unused memory game
wMemoryGameCards:: ds 9 * 5
wMemoryGameCardsEnd::
wMemoryGameLastCardPicked:: db
wMemoryGameCard1:: db
wMemoryGameCard2:: db
wMemoryGameCard1Location:: db
wMemoryGameCard2Location:: db
wMemoryGameNumberTriesRemaining:: db
wMemoryGameLastMatches:: ds 5
wMemoryGameCounter:: db
wMemoryGameNumCardsMatched:: db
NEXTU
; unown puzzle
wPuzzlePieces:: ds 6 * 6
NEXTU
; 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 7
wc719:: ds 53
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 2
ENDU
SECTION "Unused Map Buffer", WRAM0
; 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::
ds 24
SECTION UNION "Overworld Map", WRAM0
; overworld map blocks
wOverworldMapBlocks:: ds 1300
wOverworldMapBlocksEnd::
SECTION UNION "Overworld Map", WRAM0
; GB Printer data
wGameboyPrinterRAM::
wGameboyPrinter2bppSource:: ds 40 tiles
wGameboyPrinter2bppSourceEnd::
wUnusedGameboyPrinterSafeCancelFlag:: db
wPrinterRowIndex:: db
; Printer data
wPrinterData:: ds 4
wPrinterChecksum:: dw
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
wPrinterStatus:: db
ds 1
; High nibble is for margin before the image, low nibble is for after.
wPrinterMargins:: db
wPrinterExposureTime:: db
ds 16
wGameboyPrinterRAMEnd::
SECTION UNION "Overworld Map", WRAM0
; bill's pc data
wBillsPCData::
wBillsPCPokemonList::
; (species, box number, list index) x30
ds 4 * 30
ds 690
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::
SECTION UNION "Overworld Map", WRAM0
; Hall of Fame data
wHallOfFamePokemonList:: hall_of_fame wHallOfFamePokemonList
SECTION UNION "Overworld Map", WRAM0
; debug color picker
wDebugOriginalColors:: ds 256 * 4
SECTION UNION "Overworld Map", WRAM0
; raw link data
wLinkData:: ds 1300
wLinkDataEnd::
SECTION UNION "Overworld Map", WRAM0
; link data members
wLinkPlayerName:: ds NAME_LENGTH
wLinkPartyCount:: db
wLinkPartySpecies:: ds PARTY_LENGTH
wLinkPartyEnd:: db ; older code doesn't check PartyCount
UNION
; link player data
wLinkPlayerData::
; wLinkPlayerPartyMon1 - wLinkPlayerPartyMon6
for n, 1, PARTY_LENGTH + 1
wLinkPlayerPartyMon{d:n}:: party_struct wLinkPlayerPartyMon{d:n}
endr
wLinkPlayerPartyMonOTs::
; wLinkPlayerPartyMon1OT - wLinkPlayerPartyMon6OT
for n, 1, PARTY_LENGTH + 1
wLinkPlayerPartyMon{d:n}OT:: ds NAME_LENGTH
endr
wLinkPlayerPartyMonNicknames::
; wLinkPlayerPartyMon1Nickname - wLinkPlayerPartyMon6Nickname
for n, 1, PARTY_LENGTH + 1
wLinkPlayerPartyMon{d:n}Nickname:: ds MON_NAME_LENGTH
endr
NEXTU
; time capsule party data
wTimeCapsulePlayerData::
; wTimeCapsulePartyMon1 - wTimeCapsulePartyMon6
for n, 1, PARTY_LENGTH + 1
wTimeCapsulePartyMon{d:n}:: red_party_struct wTimeCapsulePartyMon{d:n}
endr
wTimeCapsulePartyMonOTs::
; wTimeCapsulePartyMon1OT - wTimeCapsulePartyMon6OT
for n, 1, PARTY_LENGTH + 1
wTimeCapsulePartyMon{d:n}OT:: ds NAME_LENGTH
endr
wTimeCapsulePartyMonNicknames::
; wTimeCapsulePartyMon1Nickname - wTimeCapsulePartyMon6Nickname
for n, 1, PARTY_LENGTH + 1
wTimeCapsulePartyMon{d:n}Nickname:: ds MON_NAME_LENGTH
endr
ENDU
SECTION UNION "Overworld Map", WRAM0
; link data prep
ds 1000
wCurLinkOTPartyMonTypePointer:: dw
wLinkOTPartyMonTypes::
; wLinkOTPartyMon1Type - wLinkOTPartyMon6Type
for n, 1, PARTY_LENGTH + 1
wLinkOTPartyMon{d:n}Type:: dw
endr
SECTION UNION "Overworld Map", WRAM0
; link mail data
ds 500
wLinkPlayerMail::
wLinkPlayerMailPreamble:: ds SERIAL_MAIL_PREAMBLE_LENGTH
wLinkPlayerMailMessages:: ds (MAIL_MSG_LENGTH + 1) * PARTY_LENGTH
wLinkPlayerMailMetadata:: ds (MAIL_STRUCT_LENGTH - (MAIL_MSG_LENGTH + 1)) * PARTY_LENGTH
wLinkPlayerMailPatchSet:: ds 100 + SERIAL_PATCH_PREAMBLE_LENGTH
wLinkPlayerMailEnd::
ds 10
wLinkOTMail::
wLinkOTMailMessages:: ds (MAIL_MSG_LENGTH + 1) * PARTY_LENGTH
wLinkOTMailMetadata:: ds (MAIL_STRUCT_LENGTH - (MAIL_MSG_LENGTH + 1)) * PARTY_LENGTH
wLinkOTMailPatchSet:: ds 100 + SERIAL_PATCH_PREAMBLE_LENGTH
wLinkOTMailPadding:: ds SERIAL_MAIL_PREAMBLE_LENGTH
wLinkOTMailEnd::
ds 10
SECTION UNION "Overworld Map", WRAM0
; received link mail data
ds 500
wLinkReceivedMail:: ds MAIL_STRUCT_LENGTH * PARTY_LENGTH
wLinkReceivedMailEnd:: db
SECTION UNION "Overworld Map", WRAM0
; mystery gift data
wMysteryGiftStaging:: ds 80
UNION
wMysteryGiftTrainer:: ds 1 + (1 + 1 + NUM_MOVES) * PARTY_LENGTH + 1
wMysteryGiftTrainerEnd::
NEXTU
wNameCardData:: ds NAME_LENGTH + 2 + 2 + 1 + 8 + 12
wNameCardDataEnd::
NEXTU
wMysteryGiftCardHolderName:: ds PLAYER_NAME_LENGTH
ENDU
ds 138
wMysteryGiftPartnerData::
wMysteryGiftPartnerGameVersion:: db
wMysteryGiftPartnerID:: dw
wMysteryGiftPartnerName:: ds NAME_LENGTH
wMysteryGiftPartnerDexCaught:: db
wMysteryGiftPartnerSentDeco:: db
wMysteryGiftPartnerWhichItem:: db
wMysteryGiftPartnerWhichDeco:: db
wMysteryGiftPartnerBackupItem:: db
ds 1
wMysteryGiftPartnerDataEnd::
ds 60
wMysteryGiftPlayerData::
wMysteryGiftPlayerGameVersion:: db
wMysteryGiftPlayerID:: dw
wMysteryGiftPlayerName:: ds NAME_LENGTH
wMysteryGiftPlayerDexCaught:: db
wMysteryGiftPlayerSentDeco:: db
wMysteryGiftPlayerWhichItem:: db
wMysteryGiftPlayerWhichDeco:: db
wMysteryGiftPlayerBackupItem:: db
ds 1
wMysteryGiftPlayerDataEnd::
SECTION UNION "Overworld Map", WRAM0
ds $200
; mystery gift data
wUnusedMysteryGiftStagedDataLength:: db
wMysteryGiftMessageCount:: db
wMysteryGiftStagedDataLength:: db
SECTION UNION "Overworld Map", WRAM0
ds $200
; blank credits tile buffer
wCreditsBlankFrame2bpp:: ds 4 * 4 tiles
wCreditsBlankFrame2bppEnd::
SECTION UNION "Overworld Map", WRAM0
; mobile
wc800:: db
wc801:: db
wc802:: db
wc803:: db
wc804:: db
wc805:: db
wc806:: db
wc807:: db
wc808:: dw
wc80a:: db
wc80b:: db
wc80c:: dw
wc80e:: db
wc80f:: db
wc810:: dw
wMobileSDK_PacketChecksum:: dw
wc814:: db
wc815:: db
wc816:: dw
wMobileSDK_AdapterType:: db
wc819:: db
wc81a:: db
wc81b:: db
wc81c:: db
wc81d:: db
wMobileSDK_SendCommandID:: db
wc81f:: db
wc820:: db
wc821:: db
wc822:: db
wc823:: ds 4
wc827:: dw
wc829:: dw
wc82b:: db
wc82c:: db
wc82d:: db
wc82e:: db
wc82f:: ds 3
wc832:: db
wc833:: db
wc834:: db
wc835:: db
wc836:: ds 8
wc83e:: ds 20
wc852:: ds 20
wc866:: ds 4
wc86a:: db
wc86b:: db
wc86c:: db
wc86d:: db
wc86e:: dw
wc870:: db
wc871:: db
wc872:: db
wc873:: db
wc874:: db
wc875:: db
wc876:: db
wc877:: db
wc878:: dw
wc87a:: db
wc87b:: db
wc87c:: db
wc87d:: db
wc87e:: db
wc87f:: db
wc880:: dw
wc882:: db
wc883:: db
wc884:: ds 8
wc88c:: ds 32
wc8ac:: ds 26
wc8c6:: db
wc8c7:: db
wc8c8:: db
wc8c9:: db
wc8ca:: ds 44
wc8f6:: ds 8
wc8fe:: db
wc8ff:: ds 15
wc90e:: ds 8
wc916:: ds 16
wc926:: ds 8
wc92e:: ds 75
wc979:: db
wc97a:: ds 5
wc97f:: db
wc980:: db
wc981:: db
wc982:: db
wc983:: dw
wc985:: db
wc986:: db
wc987:: db
wMobileAPIIndex:: db
wc989:: db
wc98a:: db
wc98b:: db
wc98c:: db
wc98d:: db
wc98e:: db
wc98f:: db
wc990:: db
wc991:: db
wc992:: db
wc993:: db
wc994:: db
wc995:: ds 16
wc9a5:: ds 5
wc9aa:: db
wc9ab:: db
wc9ac:: db
wc9ad:: db
wc9ae:: db
wc9af:: dw
wc9b1:: db
wc9b2:: ds 3
wc9b5:: db
wc9b6:: ds 121
wMobileSDK_ReceivePacketBufferAlt:: ds 11
wMobileSDK_ReceivedBytes:: dw
wMobileSDK_ReceivePacketBuffer:: ds 250
wcb36:: db
ds 16
wMobileSDK_PacketBuffer:: ds 281
wcc60:: ds 1
wcc61:: ds 1
wcc62:: ds 2
wcc64:: ds 1
wcc65:: ds 57
ds 22
wccb4:: ds 1
wccb5:: ds 3
wccb8:: ds 1
wccb9:: ds 1
wccba:: ds 90
if DEF(_DEBUG)
SECTION UNION "Overworld Map", WRAM0
; debug room RTC values
wDebugRoomRTCSec:: db
wDebugRoomRTCMin:: db
wDebugRoomRTCHour:: db
wDebugRoomRTCDay:: dw
wDebugRoomRTCCurSec:: db
wDebugRoomRTCCurMin:: db
wDebugRoomRTCCurHour:: db
wDebugRoomRTCCurDay:: dw
; debug room paged values
wDebugRoomCurPage:: db
wDebugRoomCurValue:: db
wDebugRoomAFunction:: dw
wDebugRoomStartFunction:: dw
wDebugRoomSelectFunction:: dw
wDebugRoomAutoFunction:: dw
wDebugRoomPageCount:: db
wDebugRoomPagesPointer:: dw
wDebugRoomROMChecksum:: dw
wDebugRoomCurChecksumBank:: db
UNION
; debug room new item values
wDebugRoomItemID:: db
wDebugRoomItemQuantity:: db
NEXTU
; debug room new pokemon values
wDebugRoomMon:: box_struct wDebugRoomMon
wDebugRoomMonBox:: db
NEXTU
; debug room GB ID values
wDebugRoomGBID:: dw
ENDU
endc
SECTION "Video", WRAM0
UNION
; bg map
wBGMapBuffer:: ds 40
wBGMapPalBuffer:: ds 40
wBGMapBufferPointers:: ds 20 * 2
wBGMapBufferEnd::
NEXTU
; credits
wCreditsPos:: dw
wCreditsTimer:: db
NEXTU
; mobile data
wMobileMonSpeciesPointer:: dw
wMobileMonStructPointer:: dw
wMobileMonOTPointer:: dw
wMobileMonNicknamePointer:: dw
wMobileMonMailPointer:: dw
NEXTU
; more mobile data
wcd20:: ds 1
wcd21:: ds 1
wcd22:: ds 1
wcd23:: ds 1
wcd24:: ds 1
wMobileCommsJumptableIndex:: ds 1
wcd26:: ds 1
wcd27:: ds 1
wcd28:: ds 1
wcd29:: ds 1
wMobileMonIndex::
wMobileMonMiscSpecies::
wcd2a:: db
UNION
wTempOddEggNickname:: ds MON_NAME_LENGTH
NEXTU
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
ENDU
; current time for link/mobile?
wcd36:: db ; hours
wcd37:: db ; mins
wcd38:: db ; secs
wcd39:: ds 1
wcd3a:: ds 1
wcd3b:: ds 1
wBattleTowerRoomMenu2JumptableIndex:: 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 1
wcd70:: ds 1
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
wDefaultSGBLayout:: db
wPlayerHPPal:: db
wEnemyHPPal:: db
wHPPals:: ds PARTY_LENGTH
wCurHPPal:: db
wSGBPals:: ds 48
wAttrmap::
; 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
; addresses dealing with serial comms
ds 1
wcf42:: db
ds 1
wcf44:: db
wcf45:: db
NEXTU
wTileAnimBuffer:: ds 1 tiles
ENDU
; link data
UNION
wOtherPlayerLinkMode:: db
wOtherPlayerLinkAction:: db
ds 3
wPlayerLinkAction:: db
wUnusedLinkAction:: db
ds 3
NEXTU
wLinkReceivedSyncBuffer:: ds 5
wLinkPlayerSyncBuffer:: ds 5
ENDU
wLinkTimeoutFrames:: dw
wLinkByteTimeout:: dw
wMonType:: db
wCurSpecies:: db
wNamedObjectType:: db
wJumptableIndex::
wBattleTowerBattleEnded::
db
UNION
; intro data
wIntroSceneFrameCounter:: db
wIntroSceneTimer:: db
NEXTU
; title data
wTitleScreenSelectedOption:: db
wTitleScreenTimer:: dw
NEXTU
; credits data
wCreditsBorderFrame:: db
wCreditsBorderMon:: db
wCreditsLYOverride:: db
NEXTU
; pokegear
wPokegearCard:: db
wPokegearMapRegion:: db
wUnusedPokegearByte:: db
NEXTU
; pack
wPackJumptableIndex:: db
wCurPocket:: db
wPackUsedItem:: db
NEXTU
; trainer card badges
wTrainerCardBadgeFrameCounter:: db
wTrainerCardBadgeTileID:: db
wTrainerCardBadgeAttributes:: db
NEXTU
; slot machine
wSlotsDelay:: db
ds 1
wUnusedSlotReelIconDelay:: db
NEXTU
; card flip
wCardFlipCursorY:: db
wCardFlipCursorX:: db
wCardFlipWhichCard:: db
NEXTU
; unused memory game
wMemoryGameCardChoice:: db
NEXTU
; magnet train
wMagnetTrainOffset:: db
wMagnetTrainPosition:: db
wMagnetTrainWaitCounter:: db
NEXTU
; unown puzzle data
wHoldingUnownPuzzlePiece:: db
wUnownPuzzleCursorPosition:: db
wUnownPuzzleHeldPiece:: db
NEXTU
; battle transitions
wBattleTransitionCounter:: db
wBattleTransitionSineWaveOffset::
wBattleTransitionSpinQuadrant:: db
NEXTU
; bill's pc
wUnusedBillsPCData:: ds 3
NEXTU
; debug mon color picker
wDebugColorRGBJumptableIndex:: db
wDebugColorCurColor:: db
wDebugColorCurMon:: db
NEXTU
; debug tileset color picker
wDebugTilesetCurPalette:: db
wDebugTilesetRGBJumptableIndex:: db
wDebugTilesetCurColor:: db
NEXTU
; stats screen
wStatsScreenFlags:: db
NEXTU
; battle tower
wNrOfBeatenBattleTowerTrainers:: db
ds 1
wBattleTowerRoomMenuJumptableIndex:: db
NEXTU
; miscellaneous
wFrameCounter::
wMomBankDigitCursorPosition::
wNamingScreenLetterCase::
wHallOfFameMonCounter::
wTradeDialog::
db
wFrameCounter2::
wPrinterQueueLength::
wUnusedSGB1eColorOffset::
db
wUnusedTradeAnimPlayEvolutionMusic:: db
NEXTU
; mobile
wcf64:: db
wcf65:: db
wcf66:: db
ENDU
wRequested2bppSize:: db
wRequested2bppSource:: dw
wRequested2bppDest:: dw
wRequested1bppSize:: db
wRequested1bppSource:: dw
wRequested1bppDest:: dw
wMenuMetadata::
wWindowStackPointer:: dw
wMenuJoypad:: db
wMenuSelection:: db
wMenuSelectionQuantity:: db
wWhichIndexSet:: db
wScrollingMenuCursorPosition:: db
wWindowStackSize:: db
ds 8
wMenuMetadataEnd::
; menu header
wMenuHeader::
wMenuFlags:: db
wMenuBorderTopCoord:: db
wMenuBorderLeftCoord:: db
wMenuBorderBottomCoord:: db
wMenuBorderRightCoord:: db
wMenuDataPointer:: dw
wMenuCursorPosition:: db
ds 1
wMenuDataBank:: db
ds 6
wMenuHeaderEnd::
wMenuData::
wMenuDataFlags:: db
UNION
; Vertical Menu/DoNthMenu/SetUpMenu
wMenuDataItems:: db
wMenuDataIndicesPointer:: dw
wMenuDataDisplayFunctionPointer:: dw
wMenuDataPointerTableAddr:: dw
NEXTU
; 2D Menu
wMenuData_2DMenuDimensions:: db
wMenuData_2DMenuSpacing:: db
wMenuData_2DMenuItemStringsBank:: db
wMenuData_2DMenuItemStringsAddr:: dw
wMenuData_2DMenuFunctionBank:: db
wMenuData_2DMenuFunctionAddr:: dw
NEXTU
; Scrolling Menu
wMenuData_ScrollingMenuHeight:: db
wMenuData_ScrollingMenuWidth:: db
wMenuData_ScrollingMenuItemFormat:: db
wMenuData_ItemsPointerBank:: db
wMenuData_ItemsPointerAddr:: dw
wMenuData_ScrollingMenuFunction1:: ds 3
wMenuData_ScrollingMenuFunction2:: ds 3
wMenuData_ScrollingMenuFunction3:: ds 3
ENDU
wMenuDataEnd::
wMoreMenuData::
w2DMenuData::
w2DMenuCursorInitY:: db
w2DMenuCursorInitX:: db
w2DMenuNumRows:: db
w2DMenuNumCols:: db
w2DMenuFlags1::
; 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
w2DMenuCursorOffsets:: db
wMenuJoypadFilter:: db
w2DMenuDataEnd::
wMenuCursorY:: db
wMenuCursorX:: db
wCursorOffCharacter:: db
wCursorCurrentTile:: dw
ds 3
wMoreMenuDataEnd::
wOverworldDelay:: db
wTextDelayFrames:: db
wVBlankOccurred:: db
wPredefID:: db
wPredefHL:: dw
wPredefAddress:: dw
wFarCallBC:: dw
wUnusedLinkCommunicationByte:: db
wGameTimerPaused::
; bit 0: game timer paused
; bit 7: something mobile
db
wJoypadDisable::
; bits 4, 6, or 7 can be used to disable joypad input
; bit 4
; bit 6: ongoing mon faint animation
; bit 7: ongoing sgb data transfer
db
wInBattleTowerBattle::
; 0 not in BattleTower-Battle
; 1 BattleTower-Battle
db
wFXAnimID:: dw
wPlaceBallsX:: db
wPlaceBallsY:: db
wTileAnimationTimer:: db
; palette backups?
wBGP:: db
wOBP0:: db
wOBP1:: db
wNumHits:: db
wOptions::
; 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::
; bits 0-2: textbox frame 0-7
db
wTextboxFlags::
; bit 0: 1-frame text delay
; bit 4: no text delay
db
wGBPrinterBrightness::
; bit 0-6: brightness
; lightest: $00
; lighter: $20
; normal: $40 (default)
; darker: $60
; darkest: $7F
db
wOptions2::
; 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
wTempLoopCounter:: db
SECTION "16-bit WRAM home data", WRAM0
; align to $20
wConversionTableBitmap:: ds $20
SECTION "WRAM 1", WRAMX
wGBCOnlyDecompressBuffer:: ; a $540-byte buffer that continues past this SECTION
wBetaTitleSequenceOpeningType::
; This selected the title screen animation (fire/notes) in pokegold-spaceworld.
db
wDefaultSpawnpoint:: db
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; mon buffer
wBufferMonNickname:: ds MON_NAME_LENGTH
wBufferMonOT:: ds NAME_LENGTH
wBufferMon:: party_struct wBufferMon
ds 8
wMonOrItemNameBuffer:: ds NAME_LENGTH
ds NAME_LENGTH
wOverworldDelaySkip:: db
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; poke seer
wSeerAction:: db
wSeerNickname:: ds MON_NAME_LENGTH
wSeerCaughtLocation:: ds 17
wSeerTimeOfDay:: ds NAME_LENGTH
wSeerOT:: ds NAME_LENGTH
wSeerOTGrammar:: db
wSeerCaughtLevelString:: ds 4
wSeerCaughtLevel:: db
wSeerCaughtData:: db
wSeerCaughtGender:: db
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; mail temp storage
wTempMail:: mailmsg wTempMail
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; bug-catching contest
wBugContestResults::
bugcontestwinner wBugContestFirstPlace
bugcontestwinner wBugContestSecondPlace
bugcontestwinner wBugContestThirdPlace
wBugContestWinnersEnd::
bugcontestwinner wBugContestTemp
ds 4
wBugContestWinnerName:: ds NAME_LENGTH
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; 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
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; town map data
wTownMapPlayerIconLandmark:: db
UNION
wTownMapCursorLandmark:: db
wTownMapCursorObjectPointer:: dw
NEXTU
wTownMapCursorCoordinates:: dw
wStartFlypoint:: db
wEndFlypoint:: db
ENDU
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; phone call data
wPhoneScriptBank:: db
wPhoneCaller:: dw
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; radio data
wCurRadioLine:: db
wNextRadioLine:: db
wRadioTextDelay:: db
wNumRadioLinesPrinted:: db
wOaksPKMNTalkSegmentCounter:: db
ds 5
wRadioText:: ds 2 * SCREEN_WIDTH
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; lucky number show
wLuckyNumberDigitsBuffer:: ds 5
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; movement buffer data
wMovementBufferCount:: db
wMovementBufferObject:: db
wUnusedMovementBufferBank:: db
wUnusedMovementBufferPointer:: dw
wMovementBuffer:: ds 55
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; box printing
wWhichBoxMonToPrint:: db
wFinishedPrintingBox:: db
wAddrOfBoxToPrint:: dw
wBankOfBoxToPrint:: db
wWhichBoxToPrint:: db
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; Unown printing
wPrintedUnownTileSource:: ds 1 tiles
wPrintedUnownTileDest:: ds 1 tiles
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; trainer HUD data
ds 1
wPlaceBallsDirection:: db
wTrainerHUDTiles:: ds 4
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; mobile participant nicknames
ds 4
wMobileParticipant1Nickname:: ds NAME_LENGTH_JAPANESE
wMobileParticipant2Nickname:: ds NAME_LENGTH_JAPANESE
wMobileParticipant3Nickname:: ds NAME_LENGTH_JAPANESE
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; battle exp gain
wExperienceGained:: ds 3
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; earthquake data buffer
wEarthquakeMovementDataBuffer:: ds 5
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; switching items in pack
wSwitchItemBuffer:: ds 2 ; may store 1 or 2 bytes
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; switching pokemon in party
; may store a name, partymon, or mail
wSwitchMonBuffer::
UNION
ds NAME_LENGTH
NEXTU
ds PARTYMON_STRUCT_LENGTH
NEXTU
ds MAIL_STRUCT_LENGTH
ENDU
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; giving pokemon mail
wMonMailMessageBuffer:: ds MAIL_MSG_LENGTH + 1
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; bill's pc
UNION
wBoxNameBuffer:: ds BOX_NAME_LENGTH
NEXTU
ds 1
wBillsPCTempListIndex:: db
wBillsPCTempBoxCount:: db
ENDU
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; prof. oak's pc
wTempPokedexSeenCount:: db
wTempPokedexCaughtCount:: db
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; player's room pc
UNION
wDecoNameBuffer:: ds ITEM_NAME_LENGTH
NEXTU
wNumOwnedDecoCategories:: db
wOwnedDecoCategories:: ds 16
ENDU
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; trade
wCurTradePartyMon:: db
wCurOTTradePartyMon:: db
wBufferTrademonNickname:: ds MON_NAME_LENGTH
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; link battle record data
wLinkBattleRecordBuffer::
wLinkBattleRecordName:: ds NAME_LENGTH
wLinkBattleRecordWins:: dw
wLinkBattleRecordLosses:: dw
wLinkBattleRecordDraws:: dw
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; miscellaneous
wTempDayOfWeek::
wPrevPartyLevel::
wCurBeatUpPartyMon::
wUnownPuzzleCornerTile::
wKeepSevenBiasChance::
wPokeFluteCuredSleep::
wTempRestorePPItem::
wApricorns::
wSuicuneFrame::
db
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; debug color picker
wDebugColorIsTrainer:: db
wDebugColorIsShiny:: db
wDebugColorCurTMHM:: db
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; mobile?
wd002:: ds 1
wd003:: ds 1
wd004:: ds 1
ds 3
wd008:: ds 2
ds 6
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
SECTION UNION "Miscellaneous WRAM 1", WRAMX
; Every previous SECTION UNION takes up 60 or fewer bytes,
; except the initial "mon buffer" one.
ds 60
UNION
; 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
; menu items list
wMenuItemsList:: ds 16
wMenuItemsListEnd::
NEXTU
; fruit tree data
wCurFruitTree:: db
wCurFruit:: db
NEXTU
; item ball data
wItemBallData::
wItemBallItemID:: db
wItemBallQuantity:: db
wItemBallDataEnd::
NEXTU
; hidden item data
wHiddenItemData::
wHiddenItemEvent:: dw
wHiddenItemID:: db
wHiddenItemDataEnd::
NEXTU
; elevator data
wElevatorData::
wElevatorPointerBank:: db
wElevatorPointer:: dw
wElevatorOriginFloor:: db
wElevatorDataEnd::
NEXTU
; coord event data
wCurCoordEvent::
wCurCoordEventSceneID:: db
wCurCoordEventMapY:: db
wCurCoordEventMapX:: db
ds 1
wCurCoordEventScriptAddr:: dw
NEXTU
; BG event data
wCurBGEvent::
wCurBGEventYCoord:: db
wCurBGEventXCoord:: db
wCurBGEventType:: db
wCurBGEventScriptAddr:: dw
NEXTU
; mart data
wMartType:: db
wMartPointerBank:: db
wMartPointer:: dw
wMartJumptableIndex:: db
wBargainShopFlags:: db
NEXTU
; 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
; std script buffer
ds 1
wJumpStdScriptBuffer:: ds 3
NEXTU
; phone script data
wCheckedTime:: db
wPhoneListIndex:: db
wNumAvailableCallers:: db
wAvailableCallers:: ds CONTACT_LIST_SIZE
NEXTU
; phone caller contact
ds 1
wCallerContact:: ds PHONE_CONTACT_SIZE
NEXTU
; backup menu data
ds 7
wMenuCursorPositionBackup:: db
wMenuScrollPositionBackup:: db
NEXTU
; poison step data
wPoisonStepData::
wPoisonStepFlagSum:: db
wPoisonStepPartyFlags:: ds PARTY_LENGTH
wPoisonStepDataEnd::
ENDU
ds 23
SECTION "More WRAM 1", WRAMX
wTMHMMoveNameBackup:: ds MOVE_NAME_LENGTH
wStringBuffer1:: ds STRING_BUFFER_LENGTH
wStringBuffer2:: ds STRING_BUFFER_LENGTH
wStringBuffer3:: ds STRING_BUFFER_LENGTH
wStringBuffer4:: ds STRING_BUFFER_LENGTH
wStringBuffer5:: ds STRING_BUFFER_LENGTH
wBattleMenuCursorPosition:: db
ds 1
wCurBattleMon::
; index of the player's mon currently in battle (0-5)
db
wCurMoveNum:: db
wLastPocket:: db
wPCItemsCursor:: db
wPartyMenuCursor:: db
wItemsPocketCursor:: db
wKeyItemsPocketCursor:: db
wBallsPocketCursor:: db
wTMHMPocketCursor:: db
wPCItemsScrollPosition:: db
ds 1
wItemsPocketScrollPosition:: db
wKeyItemsPocketScrollPosition:: db
wBallsPocketScrollPosition:: db
wTMHMPocketScrollPosition:: db
wSwitchMon::
wSwitchItem::
wSwappingMove::
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
wVramState::
; bit 0: overworld sprite updating on/off
; bit 1: something to do with sprite updates
; bit 6: something to do with text
; bit 7: on when surf initiates
; flickers when climbing waterfall
db
wBattleResult::
; WIN, LOSE, or DRAW
; bit 6: caught celebi
; bit 7: box full
db
wUsingItemWithSelect:: db
UNION
; mart data
wCurMartCount:: db
wCurMartItems:: ds 15
NEXTU
; elevator data
wCurElevatorCount:: db
wCurElevatorFloors:: ds 15
NEXTU
; mailbox data
wCurMessageScrollPosition:: db
wCurMessageIndex:: db
wMailboxCount:: db
wMailboxItems:: ds MAILBOX_CAPACITY
ENDU
wListPointer:: dw
wUnusedNamesPointer:: dw
wItemAttributesPointer:: dw
wCurItem:: db
wCurItemQuantity::
wMartItemID::
db
wCurPartySpecies:: db
wCurPartyMon::
; index of mon's party location (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
wItemQuantityChange:: db
wItemQuantity:: db
wTempMon:: party_struct wTempMon
wSpriteFlags:: db
wHandlePlayerStep:: db
ds 1
wPartyMenuActionText:: db
wItemAttributeValue:: db
wCurPartyLevel:: db
wScrollingMenuListSize:: db
ds 1
; used when following a map warp
wNextWarp:: db
wNextMapGroup:: db
wNextMapNumber:: db
wPrevWarp:: db
wPrevMapGroup:: db
wPrevMapNumber:: db
wPlayerBGMapOffsetX:: db ; used in FollowNotExact; unit is pixels
wPlayerBGMapOffsetY:: db ; used in FollowNotExact; unit is pixels
; Player movement
wPlayerStepVectorX:: db
wPlayerStepVectorY:: db
wPlayerStepFlags:: db
wPlayerStepDirection:: db
wBGMapAnchor:: dw
UNION
wUsedSprites:: ds SPRITE_GFX_LIST_CAPACITY * 2
wUsedSpritesEnd::
NEXTU
ds 31
wd173:: db ; related to command queue type 3
ENDU
wOverworldMapAnchor:: dw
wPlayerMetatileY:: db
wPlayerMetatileX:: db
wMapPartial::
wMapAttributesBank:: db
wMapTileset:: db
wEnvironment:: db
wMapAttributesPointer:: dw
wMapPartialEnd::
wMapAttributes::
wMapBorderBlock:: db
; width/height are in blocks (2x2 walkable tiles, 4x4 graphics tiles)
wMapHeight:: db
wMapWidth:: db
wMapBlocksBank:: db
wMapBlocksPointer:: dw
wMapScriptsBank:: db
wMapScriptsPointer:: dw
wMapEventsPointer:: dw
; bit set
wMapConnections:: db
wMapAttributesEnd::
wNorthMapConnection:: map_connection_struct wNorth
wSouthMapConnection:: map_connection_struct wSouth
wWestMapConnection:: map_connection_struct wWest
wEastMapConnection:: map_connection_struct wEast
wTileset::
wTilesetBank:: db
wTilesetAddress:: dw
wTilesetBlocksBank:: db
wTilesetBlocksAddress:: dw
wTilesetCollisionBank:: db
wTilesetCollisionAddress:: dw
wTilesetAttributesBank:: db
wTilesetAttributesAddress:: dw
wTilesetAnim:: dw ; bank 3f
wTilesetEnd::
assert wTilesetEnd - wTileset == TILESET_LENGTH
wEvolvableFlags:: flag_array PARTY_LENGTH
wForceEvolution:: db
UNION
; general-purpose HP buffers
wHPBuffer1:: dw
wHPBuffer2:: dw
wHPBuffer3:: dw
NEXTU
; HP bar animations
wCurHPAnimMaxHP:: dw
wCurHPAnimOldHP:: dw
wCurHPAnimNewHP:: dw
wCurHPAnimPal:: db
wCurHPBarPixels:: db
wNewHPBarPixels:: db
wCurHPAnimDeltaHP:: dw
wCurHPAnimLowHP:: db
wCurHPAnimHighHP:: db
NEXTU
; move AI
wEnemyAIMoveScores:: ds NUM_MOVES
NEXTU
; switch AI
wEnemyEffectivenessVsPlayerMons:: flag_array PARTY_LENGTH
wPlayerEffectivenessVsEnemyMons:: flag_array PARTY_LENGTH
NEXTU
; battle HUD
wBattleHUDTiles:: ds PARTY_LENGTH
NEXTU
; thrown ball data
wFinalCatchRate:: db
wThrownBallWobbleCount:: db
NEXTU
; evolution data
wEvolutionOldSpecies:: db
wEvolutionNewSpecies:: db
wEvolutionPicOffset:: db
wEvolutionCanceled:: db
NEXTU
; experience
wExpToNextLevel:: ds 3
NEXTU
; PP Up
wPPUpPPBuffer:: ds NUM_MOVES
NEXTU
; lucky number show
wMonIDDigitsBuffer:: ds 5
NEXTU
; mon submenu
wMonSubmenuCount:: db
wMonSubmenuItems:: ds NUM_MONMENU_ITEMS + 1
NEXTU
; field move data
wFieldMoveData::
wFieldMoveJumptableIndex:: db
wEscapeRopeOrDigType::
wSurfingPlayerState::
wFishingRodUsed:: db
wCutWhirlpoolOverworldBlockAddr:: dw
wCutWhirlpoolReplacementBlock:: db
wCutWhirlpoolAnimationType::
wStrengthSpecies::
wFishingResult:: db
ds 1
wFieldMoveDataEnd::
NEXTU
; hidden items
wCurMapScriptBank:: db
wRemainingBGEventCount:: db
wBottomRightYCoord:: db
wBottomRightXCoord:: db
NEXTU
; heal machine anim
wHealMachineAnimType:: db
wHealMachineTempOBP1:: db
wHealMachineAnimState:: db
NEXTU
; decorations
wCurDecoration:: db
wSelectedDecorationSide:: db
wSelectedDecoration:: db
wOtherDecoration:: db
wChangedDecorations:: db
wCurDecorationCategory:: db
NEXTU
; withdraw/deposit items
wPCItemQuantityChange:: db
wPCItemQuantity:: db
NEXTU
; mail
wCurMailAuthorID:: dw
wCurMailIndex:: db
NEXTU
; kurt
wKurtApricornCount:: db
wKurtApricornItems:: ds 10
NEXTU
; tree mons
wTreeMonCoordScore:: db
wTreeMonOTIDScore:: db
NEXTU
; restart clock
wRestartClockCurDivision:: db
wRestartClockPrevDivision:: db
wRestartClockUpArrowYCoord:: db
wRestartClockDay:: db
wRestartClockHour:: db
wRestartClockMin:: db
NEXTU
; link
ds 9
wLinkBattleRNPreamble:: ds SERIAL_RN_PREAMBLE_LENGTH
wLinkBattleRNs:: ds SERIAL_RNS_LENGTH
NEXTU
; mobile
wd1ea:: ds 1
wd1eb:: ds 1
wd1ec:: ds 1
wd1ed:: ds 1
wd1ee:: ds 1
wd1ef:: ds 1
wd1f0:: ds 1
wd1f1:: ds 1
wd1f2:: ds 1
wd1f3:: ds 1
ds 6
NEXTU
; miscellaneous bytes
wSkipMovesBeforeLevelUp::
wRegisteredPhoneNumbers::
wListMovesLineSpacing:: db
wSwitchMonTo:: db
wSwitchMonFrom:: db
ds 4
wCurEnemyItem:: db
NEXTU
; miscellaneous words
wBuySellItemPrice::
wTempMysteryGiftTimer::
wMagikarpLength:: dw
NEXTU
; 16-bit wram
ds 13
wOtherTrainerType:: db
wTrainerGroupBank:: db
ENDU
wTempEnemyMonSpecies:: db
wTempBattleMonSpecies:: db
UNION
wOTLinkBattleRNData:: ds SERIAL_RN_PREAMBLE_LENGTH + SERIAL_RNS_LENGTH
NEXTU
wEnemyMon:: battle_struct wEnemyMon
wEnemyMonBaseStats:: ds NUM_EXP_STATS
wEnemyMonCatchRate:: db
wEnemyMonBaseExp:: db
wEnemyMonEnd::
ENDU
wBattleMode::
; 0: overworld
; 1: wild battle
; 2: trainer battle
db
wTempWildMonSpecies:: db
wOtherTrainerClass::
; class (Youngster, Bug Catcher, etc.) of opposing trainer
; 0 if opponent is a wild Pokémon, not a trainer
db
; BATTLETYPE_* values
wBattleType:: db
wOtherTrainerID::
; which trainer of the class that you're fighting
; (Joey, Mikey, Albert, etc.)
db
wForcedSwitch:: db
wTrainerClass:: db
wUnownLetter:: db
wMoveSelectionMenuType:: db
; corresponds to the data/pokemon/base_stats/*.asm contents
wCurBaseData::
wBaseSpecies:: db
wBaseStats::
wBaseHP:: db
wBaseAttack:: db
wBaseDefense:: db
wBaseSpeed:: db
wBaseSpecialAttack:: db
wBaseSpecialDefense:: db
wBaseType::
wBaseType1:: db
wBaseType2:: db
wBaseCatchRate:: db
wBaseExp:: db
wBaseItems::
wBaseItem1:: db
wBaseItem2:: db
wBaseGender:: db
wBaseUnknown1:: db
wBaseEggSteps:: db
wBaseUnknown2:: db
wBasePicSize:: db
wBaseUnusedFrontpic:: dw
wBaseUnusedBackpic:: dw
wBaseGrowthRate:: db
wBaseEggGroups:: db
wBaseTMHM:: flag_array NUM_TM_HM_TUTOR
wCurBaseDataEnd::
assert wCurBaseDataEnd - wCurBaseData == BASE_DATA_SIZE
wCurDamage:: dw
wTilesetDataAddress:: dw
wMornEncounterRate:: db
wDayEncounterRate:: db
wNiteEncounterRate:: db
wWaterEncounterRate:: db
wListMoves_MoveIndicesBuffer:: ds NUM_MOVES
wPutativeTMHMMove:: db
wInitListType:: db
wBattleHasJustStarted:: db
wNamedObjectIndex::
wTextDecimalByte::
wTempByteValue::
wNumSetBits::
wTypeMatchup::
wCurType::
wTempSpecies::
wTempIconSpecies::
wTempTMHM::
wTempPP::
wNextBoxOrPartyIndex::
wChosenCableClubRoom::
wBreedingCompatibility::
wApplyStatLevelMultipliersToEnemy::
wUsePPUp::
wd265:: ; mobile
db
wFailedToFlee:: db
wNumFleeAttempts:: db
wMonTriedToEvolve:: db
wTimeOfDay:: db
ds 1
SECTION "Enemy Party", WRAMX
UNION
wPokedexShowPointerAddr:: dw
wPokedexShowPointerBank:: db
ds 3
wd271:: dw ; mobile
NEXTU
wUnusedEggHatchFlag:: db
NEXTU
; enemy party
wOTPartyData::
wOTPlayerName:: ds NAME_LENGTH
wOTPlayerID:: dw
ds 8
wOTPartyCount:: db
wOTPartySpecies:: ds PARTY_LENGTH
wOTPartyEnd:: db ; older code doesn't check PartyCount
ENDU
UNION
; ot party mons
wOTPartyMons::
; wOTPartyMon1 - wOTPartyMon6
for n, 1, PARTY_LENGTH + 1
wOTPartyMon{d:n}:: party_struct wOTPartyMon{d:n}
endr
wOTPartyMonOTs::
; wOTPartyMon1OT - wOTPartyMon6OT
for n, 1, PARTY_LENGTH + 1
wOTPartyMon{d:n}OT:: ds NAME_LENGTH
endr
wOTPartyMonNicknames::
; wOTPartyMon1Nickname - wOTPartyMon6Nickname
for n, 1, PARTY_LENGTH + 1
wOTPartyMon{d:n}Nickname:: ds MON_NAME_LENGTH
endr
wOTPartyDataEnd::
NEXTU
; catch tutorial dude pack
wDudeNumItems:: db
wDudeItems:: ds 2 * 4 + 1
wDudeNumKeyItems:: db
wDudeKeyItems:: ds 18 + 1
wDudeNumBalls:: db
wDudeBalls:: ds 2 * 4 + 1
ENDU
ds 4
wd430:: ; mobile
wBattleAction:: db
wLinkBattleSentAction:: db
wMapStatus:: db
wMapEventStatus:: db
wScriptFlags::
; bit 3: run deferred script
db
ds 1
wScriptFlags2::
; bit 0: count steps
; bit 1: coord events
; bit 2: warps and connections
; bit 4: wild encounters
; bit 5: unknown
db
wScriptMode:: db
wScriptRunning:: db
wScriptBank:: db
wScriptPos:: dw
wScriptStackSize:: db
wScriptStack:: ds 3 * 5
ds 1
wScriptDelay:: db
wDeferredScriptBank::
wScriptTextBank::
db
wDeferredScriptAddr::
wScriptTextAddr::
dw
ds 1
wWildEncounterCooldown:: db
wXYComparePointer:: dw
ds 4
wBattleScriptFlags:: db
ds 1
wPlayerSpriteSetupFlags::
; 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
wMapReentryScriptBank:: db
wMapReentryScriptAddress:: dw
ds 4
wTimeCyclesSinceLastCall:: db
wReceiveCallDelay_MinsRemaining:: db
wReceiveCallDelay_StartTime:: ds 3
ds 3
wBugContestMinsRemaining:: db
wBugContestSecsRemaining:: db
ds 2
wMapStatusEnd::
ds 2
wCrystalData::
wPlayerGender::
; 0 male
; 1 female
; 2 enby
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:: dw
wPlayerName:: ds NAME_LENGTH
wMomsName:: ds NAME_LENGTH
wRivalName:: ds NAME_LENGTH
wRedsName:: ds NAME_LENGTH
wGreensName:: ds NAME_LENGTH
wSubstituteName:: ds NAME_LENGTH
wSavedAtLeastOnce:: db
wSpawnAfterChampion:: db
; init time set at newgame
wStartDay:: db
wStartHour:: db
wStartMinute:: db
wStartSecond:: db
wRTC:: ds 4
wDST::
; bit 7: dst
db
wGameTime:: ; used only for BANK(wGameTime)
wGameTimeCap:: db
wGameTimeHours:: dw
wGameTimeMinutes:: db
wGameTimeSeconds:: db
wGameTimeFrames:: db
wCurDay:: db
wObjectFollow_Leader:: db
wObjectFollow_Follower:: db
wCenteredObject:: db
wFollowerMovementQueueLength:: db
wFollowMovementQueue:: ds 5
wObjectStructs::
wPlayerStruct:: object_struct wPlayer ; player is object struct 0
; wObjectStruct1 - wObjectStruct12
for n, 1, NUM_OBJECT_STRUCTS
wObject{d:n}Struct:: object_struct wObject{d:n}
endr
wCmdQueue:: ds CMDQUEUE_CAPACITY * CMDQUEUE_ENTRY_SIZE
ds 3
wMapObjects::
wPlayerObject:: map_object wPlayer ; player is map object 0
; wMap1Object - wMap17Object
for n, 1, NUM_OBJECTS
wMap{d:n}Object:: map_object wMap{d:n}
endr
wObjectMasks:: ds NUM_OBJECTS
wVariableSprites:: ds $100 - SPRITE_VARS
wEnteredMapFromContinue:: db
ds 2
wTimeOfDayPal:: db
ds 4
wTimeOfDayPalFlags:: db
wTimeOfDayPalset:: db
wCurTimeOfDay:: db
ds 1
wSecretID:: dw
wStatusFlags::
; 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::
; 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
wMomsMoney:: ds 3
wMomSavingMoney::
; bit 0: saving some money
; bit 1: saving half money (unused)
; bit 2: saving all money (unused)
; bit 7: active
db
wCoins:: dw
wBadges::
wJohtoBadges:: flag_array NUM_JOHTO_BADGES
wKantoBadges:: flag_array NUM_KANTO_BADGES
wNihonBadges:: flag_array NUM_NIHON_BADGES
wTMsHMs:: ds NUM_TMS + NUM_HMS
wNumItems:: db
wItems:: ds MAX_ITEMS * 2 + 1
wNumKeyItems:: db
wKeyItems:: ds MAX_KEY_ITEMS + 1
wNumBalls:: db
wBalls:: ds MAX_BALLS * 2 + 1
wNumPCItems:: db
wPCItems:: ds MAX_PC_ITEMS * 2 + 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
wRegisteredItem:: db
wPlayerState:: db
wHallOfFameCount:: db
wExpShareToggle:: db
wTradeFlags:: flag_array NUM_NPC_TRADES
ds 1
wMooMooBerries:: db
wUndergroundSwitchPositions:: db
wFarfetchdPosition:: db
ds 13
; map scene ids
wPokecenter2FSceneID:: db
wTradeCenterSceneID:: db
wColosseumSceneID:: db
wTimeCapsuleSceneID:: db
wPowerPlantSceneID:: db
wCeruleanGymSceneID:: db
wRoute25SceneID:: db
wTrainerHouseB1FSceneID:: db
wVictoryRoadGateSceneID:: db
wSaffronMagnetTrainStationSceneID:: db
wRoute16GateSceneID:: db
wRoute17Route18GateSceneID:: db
wIndigoPlateauPokecenter1FSceneID:: db
wWillsRoomSceneID:: db
wKogasRoomSceneID:: db
wBrunosRoomSceneID:: db
wKarensRoomSceneID:: db
wLancesRoomSceneID:: db
wHallOfFameSceneID:: db
wRoute27SceneID:: db
wNewBarkTownSceneID:: db
wElmsLabSceneID:: db
wPlayersHouse1FSceneID:: db
wRoute29SceneID:: db
wCherrygroveCitySceneID:: db
wMrPokemonsHouseSceneID:: db
wRoute32SceneID:: db
wRoute35NationalParkGateSceneID:: db
wRoute36SceneID:: db
wRoute36NationalParkGateSceneID:: db
wAzaleaTownSceneID:: db
wGoldenrodGymSceneID:: db
wGoldenrodMagnetTrainStationSceneID:: db
wGoldenrodPokecenter1FSceneID:: db
wOlivineCitySceneID:: db
wRoute34SceneID:: db
wRoute34IlexForestGateSceneID:: db
wEcruteakTinTowerEntranceSceneID:: db
wWiseTriosRoomSceneID:: db
wEcruteakPokecenter1FSceneID:: db
wEcruteakGymSceneID:: db
wMahoganyTownSceneID:: db
wRoute42SceneID:: db
wCianwoodCitySceneID:: db
wBattleTower1FSceneID:: db
wBattleTowerBattleRoomSceneID:: db
wBattleTowerElevatorSceneID:: db
wBattleTowerHallwaySceneID:: db
wBattleTowerOutsideSceneID:: db
wRoute43GateSceneID:: db
wMountMoonSceneID:: db
wSproutTower3FSceneID:: db
wTinTower1FSceneID:: db
wBurnedTower1FSceneID:: db
wBurnedTowerB1FSceneID:: db
wRadioTower5FSceneID:: db
wRuinsOfAlphOutsideSceneID:: db
wRuinsOfAlphResearchCenterSceneID:: db
wRuinsOfAlphHoOhChamberSceneID:: db
wRuinsOfAlphKabutoChamberSceneID:: db
wRuinsOfAlphOmanyteChamberSceneID:: db
wRuinsOfAlphAerodactylChamberSceneID:: db
wRuinsOfAlphInnerChamberSceneID:: db
wMahoganyMart1FSceneID:: db
wTeamRocketBaseB1FSceneID:: db
wTeamRocketBaseB2FSceneID:: db
wTeamRocketBaseB3FSceneID:: db
wGoldenrodUndergroundSwitchRoomEntrancesSceneID:: db
wSilverCaveRoom3SceneID:: db
wVictoryRoadSceneID:: db
wDragonsDenB1FSceneID:: db
wDragonShrineSceneID:: db
wOlivinePortSceneID:: db
wVermilionPortSceneID:: db
wFastShip1FSceneID:: db
wFastShipB1FSceneID:: db
wMountMoonSquareSceneID:: db
wMobileTradeRoomSceneID:: db
wMobileBattleRoomSceneID:: db
wCeruleanCave1FSceneID:: db
wPewterMuseum1FSceneID:: db
wSilentHillsSceneID:: db
wBlueLabSceneID:: db
wRoute66WhiteCityGateID:: db
wFuchsiaSafariZoneGateID:: db
wVermilionCityID:: db
wRoute14ID:: db
wLavenderCryptDokuroarsRoomID:: db
ds 41
; fight counts
wJackFightCount:: db
wBeverlyFightCount:: db ; unreferenced
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 ; unreferenced
wArnieFightCount:: db
wAlanFightCount:: db
wDanaFightCount:: db
wChadFightCount:: db
;wDerekFightCount:: db ; unreferenced
wTullyFightCount:: db
wBrentFightCount:: db
wTiffanyFightCount:: db
wVanceFightCount:: db
wWiltonFightCount:: db
;wKenjiFightCount:: db ; unreferenced
wParryFightCount:: db
wErinFightCount:: db
; ds 100
; ITEMFIX: Needed to free up a few bytes, and for each new pokemon this would need to be done again in theory. I've halfed this because it seems to be unused? Which should buy some time.
ds 50
wEventFlags:: flag_array NUM_EVENTS
wCurBox:: db
ds 2
wBoxNames:: ds BOX_NAME_LENGTH * NUM_BOXES
wCelebiEvent::
; bit 2: forest is restless
db
ds 1
wBikeFlags::
; bit 0: using strength
; bit 1: always on bike
; bit 2: downhill
db
ds 1 ; cleared along with wBikeFlags by ResetBikeFlags
wCurMapSceneScriptPointer:: dw
wCurCaller:: dw
wCurMapWarpCount:: db
wCurMapWarpsPointer:: dw
wCurMapCoordEventCount:: db
wCurMapCoordEventsPointer:: dw
wCurMapBGEventCount:: db
wCurMapBGEventsPointer:: dw
wCurMapObjectEventCount:: db
wCurMapObjectEventsPointer:: dw
wCurMapSceneScriptCount:: db
wCurMapSceneScriptsPointer:: dw
wCurMapCallbackCount:: db
wCurMapCallbacksPointer:: dw
ds 2
; Sprite id of each decoration
wDecoBed:: db
wDecoCarpet:: db
wDecoPlant:: db
wDecoPoster:: db
wDecoConsole:: db
wDecoLeftOrnament:: db
wDecoRightOrnament:: db
wDecoBigDoll:: db
; Items bought from Mom
wWhichMomItem:: db
wWhichMomItemSet:: db
wMomItemTriggerBalance:: ds 3
wDailyResetTimer:: dw
wDailyFlags1:: db
wDailyFlags2:: db
wSwarmFlags:: db
wJackyTimer:: db
ds 1
wTimerEventStartDay:: db
ds 3
wFruitTreeFlags:: flag_array NUM_FRUIT_TREES
ds 2
wLuckyNumberDayTimer:: dw
ds 2
wSpecialPhoneCallID:: db
ds 3
wBugContestStartTime:: ds 4 ; day, hour, min, sec
wUnusedTwoDayTimerOn:: db
wUnusedTwoDayTimer:: db
wUnusedTwoDayTimerStartDate:: db
wSweetHoneyEnabled:: db
wSweetHoneyTimer:: db ; counts days since start date
wSweetHoneyStartDate:: db
wSweetHoneyMapGroup:: db
wSweetHoneyMapNumber:: db
wSweetHoneyX:: db
wSweetHoneyY:: db
wMobileOrCable_LastSelection:: db
wdc41:: ds 1
wdc42:: ds 8
wBuenasPassword:: db
wBlueCardBalance:: db
wWalkingOnBridge:: db
wDailyRematchFlags:: ds 4
wDailyPhoneItemFlags:: ds 4
wDailyPhoneTimeOfDayFlags:: ds 4
wKenjiBreakTimer:: ds 2 ; Kenji
wYanmaMapGroup:: db
wYanmaMapNumber:: db
wPlayerMonSelection:: ds 3
wdc5f:: db
wdc60:: db
ds 18
wStepCount:: db
wPoisonStepCount:: db
ds 2
wHappinessStepCount:: db
wSafariZoneStepCount:: dw ; Will contain 500 steps
wParkBallsRemaining::
wSafariBallsRemaining:: db
wSafariTimeRemaining:: dw
wPhoneList:: ds CONTACT_LIST_SIZE + 1
ds 21
wLuckyNumberShowFlag:: db
ds 1
wLuckyIDNumber:: dw
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
wDigWarpNumber:: db
wDigMapGroup:: db
wDigMapNumber:: db
; used on maps like second floor pokécenter, which are reused, so we know which
; map to return to
wBackupWarpNumber:: db
wBackupMapGroup:: db
wBackupMapNumber:: db
ds 3
wLastSpawnMapGroup:: db
wLastSpawnMapNumber:: db
wWarpNumber:: db
wMapGroup:: db
wMapNumber:: db
wYCoord:: db
wXCoord:: db
wScreenSave:: ds SCREEN_META_WIDTH * SCREEN_META_HEIGHT
wCurMapDataEnd::
SECTION "Party", WRAMX
wPokemonData::
wPartyCount:: db
wPartySpecies:: ds PARTY_LENGTH
wPartyEnd:: db ; older code doesn't check wPartyCount
wPartyMons::
; wPartyMon1 - wPartyMon6
for n, 1, PARTY_LENGTH + 1
wPartyMon{d:n}:: party_struct wPartyMon{d:n}
endr
wPartyMonOTs::
; wPartyMon1OT - wPartyMon6OT
for n, 1, PARTY_LENGTH + 1
wPartyMon{d:n}OT:: ds NAME_LENGTH
endr
wPartyMonNicknames::
; wPartyMon1Nickname - wPartyMon6Nickname
for n, 1, PARTY_LENGTH + 1
wPartyMon{d:n}Nickname:: ds MON_NAME_LENGTH
endr
wPartyMonNicknamesEnd::
; ds 20 ; modified to fit the new unown
; ITEMFIX: According to the unown form tutorial this is entirely unused? Commented out to make space for increasingly large num_pokemon.
wPokedexCaught:: flag_array NUM_POKEMON ; ITEMFIX: I've not changed this but FUCK YOU FOR MAKING THINGS HARD FOR NO REASON
wEndPokedexCaught::
wPokedexSeen:: flag_array NUM_POKEMON ; ITEMFIX: Same as above, no actual change, just a FUCK YOU to num_pokemon lmao
wEndPokedexSeen::
wUnownDex:: ds NUM_UNOWN
wUnlockedUnowns:: db
wFirstUnownSeen:: db
wDayCareMan::
; bit 7: active
; bit 6: egg ready
; bit 5: monsters are compatible
; bit 0: monster 1 in day-care
db
wBreedMon1Nickname:: ds MON_NAME_LENGTH
wBreedMon1OT:: ds NAME_LENGTH
wBreedMon1:: box_struct wBreedMon1
wDayCareLady::
; bit 7: active
; bit 0: monster 2 in day-care
db
wStepsToEgg::
db
wBreedMotherOrNonDitto::
; z: yes
; nz: no
db
wBreedMon2Nickname:: ds MON_NAME_LENGTH
wBreedMon2OT:: ds NAME_LENGTH
wBreedMon2:: box_struct wBreedMon2
wEggMonNickname:: ds MON_NAME_LENGTH
wEggMonOT:: ds NAME_LENGTH
wEggMon:: box_struct wEggMon
wBugContestSecondPartySpecies:: db
wContestMon:: party_struct wContestMon
wDunsparceMapGroup:: db
wDunsparceMapNumber:: db
wFishingSwarmFlag:: db
wRoamMon1:: roam_struct wRoamMon1
wRoamMon2:: roam_struct wRoamMon2
wRoamMon3:: roam_struct wRoamMon3
wRoamMons_CurMapNumber:: db
wRoamMons_CurMapGroup:: db
wRoamMons_LastMapNumber:: db
wRoamMons_LastMapGroup:: db
wBestMagikarpLengthFeet:: db
wBestMagikarpLengthInches:: db
wMagikarpRecordHoldersName:: ds NAME_LENGTH
wPokemonDataEnd::
wGameDataEnd::
SECTION "Pic Animations", WRAMX
wTempTilemap::
; 20x18 grid of 8x8 tiles
ds SCREEN_WIDTH * SCREEN_HEIGHT
; 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 "16-bit WRAM tables", WRAMX
; align this section to $100
wram_conversion_table wPokemonIndexTable, MON_TABLE
wram_conversion_table wMoveIndexTable, MOVE_TABLE
SECTION "Battle Tower RAM", WRAMX
w3_d000:: ds 1
w3_d001:: ds 1
w3_d002:: ds 16
w3_d012:: ds $6e
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
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
w3_d742:: battle_tower_struct w3_d742
NEXTU
ds $be
w3_d800:: ds BG_MAP_WIDTH * SCREEN_HEIGHT
NEXTU
ds $be
wBTChoiceOfLvlGroup:: db
ds $1
w3_d802:: ds 12
w3_d80e:: db
ds $1
w3_d810::
ds $59
w3_d869:: ds $17
w3_d880:: ds 1
w3_d881:: ds 8
w3_d889:: ds 1
w3_d88a:: ds 4
w3_d88e:: ds 1
w3_d88f:: ds 4
w3_d893:: ds 1
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
ds $1c0
w3_dc00:: ds SCREEN_WIDTH * SCREEN_HEIGHT
UNION
w3_dd68:: ds SCREEN_WIDTH * SCREEN_HEIGHT
ds $11c
w3_dfec:: ds $10
w3_dffc:: ds 4
NEXTU
ds $98
w3_de00:: ds $200
ENDU
SECTION "News Script RAM", WRAMX
w4_d000:: ds $1000
SECTION "Surrounding Data", WRAMX
wSurroundingTiles:: ds SURROUNDING_WIDTH * SURROUNDING_HEIGHT
wSurroundingAttributes:: ds SURROUNDING_WIDTH * SURROUNDING_HEIGHT
SECTION "GBC Video", WRAMX, ALIGN[8]
; eight 4-color palettes each
wGBCPalettes:: ; used only for BANK(wGBCPalettes)
wBGPals1:: ds 8 palettes
wOBPals1:: ds 8 palettes
wBGPals2:: ds 8 palettes
wOBPals2:: ds 8 palettes
align 8
wLYOverrides:: ds SCREEN_HEIGHT_PX
wLYOverridesEnd::
ds 1
wMagnetTrain:: ; used only for BANK(wMagnetTrain)
wMagnetTrainDirection:: db
wMagnetTrainInitPosition:: db
wMagnetTrainHoldPosition:: db
wMagnetTrainFinalPosition:: db
wMagnetTrainPlayerSpriteInitX:: db
ds 106
align 8
wLYOverridesBackup:: ds SCREEN_HEIGHT_PX
wLYOverridesBackupEnd::
SECTION "Battle Animations", WRAMX
wBattleAnimTileDict::
; wBattleAnimTileDict pairs keys with values
; keys: ANIM_GFX_* indexes (taken from anim_*gfx arguments)
; values: vTiles0 offsets
ds NUM_BATTLEANIMTILEDICT_ENTRIES * 2
wActiveAnimObjects::
; wAnimObject1 - wAnimObject10
for n, 1, NUM_ANIM_OBJECTS + 1
wAnimObject{d:n}:: battle_anim_struct wAnimObject{d:n}
endr
wActiveBGEffects::
; wBGEffect1 - wBGEffect5
for n, 1, NUM_BG_EFFECTS + 1
wBGEffect{d:n}:: battle_bg_effect wBGEffect{d:n}
endr
wLastAnimObjectIndex:: db
wBattleAnimFlags:: db
wBattleAnimAddress:: dw
wBattleAnimDelay:: db
wBattleAnimParent:: dw
wBattleAnimLoops:: db
wBattleAnimVar:: db
wBattleAnimByte:: db
wBattleAnimOAMPointerLo:: db
UNION
wBattleObjectTempID:: db
wBattleObjectTempXCoord:: db
wBattleObjectTempYCoord:: db
wBattleObjectTempParam:: db
NEXTU
wBattleBGEffectTempID:: db
wBattleBGEffectTempJumptableIndex:: db
wBattleBGEffectTempTurn:: db
wBattleBGEffectTempParam:: db
NEXTU
wBattleAnimTempOAMFlags:: db
wBattleAnimTempFixY:: db
wBattleAnimTempTileID:: db
wBattleAnimTempXCoord:: db
wBattleAnimTempYCoord:: db
wBattleAnimTempXOffset:: db
wBattleAnimTempYOffset:: db
wBattleAnimTempFrameOAMFlags:: db
wBattleAnimTempPalette:: db
NEXTU
wBattleAnimGFXTempTileID::
wBattleAnimGFXTempPicHeight:: db
NEXTU
wBattleSineWaveTempProgress:: db
wBattleSineWaveTempOffset:: db
wBattleSineWaveTempAmplitude:: db
wBattleSineWaveTempTimer:: db
NEXTU
wBattlePicResizeTempBaseTileID:: db
wBattlePicResizeTempPointer:: dw
ENDU
UNION
ds 50
wBattleAnimEnd::
NEXTU
wSurfWaveBGEffect:: ds $40
wSurfWaveBGEffectEnd::
ENDU
SECTION "Mobile RAM and Pokedex Listings", WRAMX
UNION
w5_d800:: ds $200
w5_da00:: ds $200
w5_dc00:: ds $d
w5_dc0d:: ds 4
w5_dc11:: ds 9
w5_MobileOpponentBattleMessages:: ds $c
w5_MobileOpponentBattleStartMessage:: ds $c
w5_MobileOpponentBattleWinMessage:: ds $c
w5_MobileOpponentBattleLossMessage:: ds $c
NEXTU
wPokedexOrder:: ds 2 * (NUM_POKEMON + 1) ; enough room to expand to 1,407 entries
ENDU
SECTION "Scratch RAM", WRAMX
UNION
wScratchTilemap:: ds BG_MAP_WIDTH * BG_MAP_HEIGHT
wScratchAttrmap:: ds BG_MAP_WIDTH * BG_MAP_HEIGHT
NEXTU
wDecompressScratch:: ds $100 tiles
NEXTU
; unidentified uses
w6_d000:: ds $1000
ENDU
SECTION "Stack RAM", WRAMX
wWindowStack:: ds $1000 - 1
wWindowStackBottom:: ds 1