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 wWasMonCaught:: db ; for use with givepoke 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