summaryrefslogtreecommitdiff
path: root/ram/wram.asm
diff options
context:
space:
mode:
Diffstat (limited to 'ram/wram.asm')
-rw-r--r--ram/wram.asm1282
1 files changed, 1282 insertions, 0 deletions
diff --git a/ram/wram.asm b/ram/wram.asm
new file mode 100644
index 0000000..9690975
--- /dev/null
+++ b/ram/wram.asm
@@ -0,0 +1,1282 @@
+INCLUDE "constants.asm"
+
+
+SECTION "Music engine RAM", WRAM0
+
+wMusic::
+
+wChannels::
+wChannel1:: channel_struct wChannel1
+wChannel2:: channel_struct wChannel2
+wChannel3:: channel_struct wChannel3
+wChannel4:: channel_struct wChannel4
+
+wSFXChannels::
+wChannel5:: channel_struct wChannel5
+wChannel6:: channel_struct wChannel6
+wChannel7:: channel_struct wChannel7
+wChannel8:: channel_struct wChannel8
+
+ ds 1
+
+wCurTrackDuty:: db
+wCurTrackIntensity:: db
+wCurTrackFrequency:: dw
+wc195:: db
+
+ ds 2 ; TODO
+
+wCurChannel:: db
+wVolume:: db
+wSoundOutput::
+; corresponds to $ff25
+; bit 4-7: ch1-4 so2 on/off
+; bit 0-3: ch1-4 so1 on/off
+ db
+
+ ds 1 ; TODO
+
+wMusicID:: dw
+wMusicBank:: db
+
+ ds 5 ; TODO
+
+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-6: number of frames for each volume level
+; $00 = none (default)
+ db
+wMusicFadeCount:: db
+wMusicFadeID::
+wMusicFadeIDLow:: db
+wMusicFadeIDHigh:: db
+
+ ds 2 ; TODO
+
+wIncrementTempo: dw
+wMapMusic:: db
+wCryPitch:: dw
+wCryLength:: dw
+ ds 7 ; TODO
+
+wc1b9:: db
+wc1ba:: db
+; either wChannelsEnd or wMusicEnd, unsure
+
+ ds 1 ; TODO
+
+wMusicInitEnd::
+
+
+SECTION "OAM Buffer", WRAM0
+
+wVirtualOAM::
+ ds SPRITEOAMSTRUCT_LENGTH * NUM_SPRITE_OAM_STRUCTS
+wVirtualOAMEnd::
+
+wTileMap::
+ ds SCREEN_HEIGHT * SCREEN_WIDTH
+
+UNION
+
+wTileMapBackup::
+ ds SCREEN_HEIGHT * SCREEN_WIDTH
+
+NEXTU
+
+ ds 1
+
+wc409:: ds 1
+wc40a:: ds 1
+
+; Monster or Trainer test?
+wWhichPicTest::
+ db
+
+
+wc40c:: ds 1
+wc40d:: ds 1
+wc40e:: ds 1
+
+ ds 11
+
+wc41a:: db
+
+ ds 165
+
+wSpriteAnimIDBuffer:: db
+
+ ds 6
+
+wc4c7:: db
+wc4c8:: db
+
+ ds 7
+
+wNamingScreenDestinationPointer:: dw
+wNamingScreenCurNameLength:: db
+wNamingScreenMaxNameLength:: db
+wNamingScreenType:: db
+wNamingScreenCursorObjectPointer:: dw
+wNamingScreenLastCharacter:: db
+wNamingScreenStringEntryCoordY:: db
+wNamingScreenStringEntryCoordX:: db
+
+ ds 64
+
+wc51a:: ds 1
+
+ENDU
+
+
+SECTION "Map Buffer", WRAM0
+
+wMapBuffer::
+wMapScriptNumber:: db
+wMapScriptNumberLocation:: dw
+wUnknownMapPointer:: dw ; TODO
+wc5ed:: db
+ ds 18
+wMapBufferEnd::
+
+
+UNION
+
+wOverworldMapBlocks:: ds 1300
+wOverworldMapBlocksEnd::
+
+NEXTU
+
+wLYOverrides::
+ ds SCREEN_HEIGHT_PX
+ ds $10
+wLYOverrides2::
+
+NEXTU
+; Battle-related
+
+ ds $1ea
+
+wActiveBGEffects::
+wBGEffect1:: battle_bg_effect wBGEffect1
+wBGEffect2:: battle_bg_effect wBGEffect2
+wBGEffect3:: battle_bg_effect wBGEffect3
+wBGEffect4:: battle_bg_effect wBGEffect4
+wBGEffect5:: battle_bg_effect wBGEffect5
+wActiveBGEffectsEnd::
+
+wNumActiveBattleAnims:: db
+
+wBattleAnimFlags:: db
+wBattleAnimAddress:: dw
+wBattleAnimDuration:: db
+wBattleAnimParent:: dw
+wBattleAnimLoops:: db
+wBattleAnimVar:: db
+wBattleAnimByte:: db
+wBattleAnimOAMPointerLo:: db
+ db
+
+UNION
+; unidentified
+wBattleAnimTemp0:: db
+wBattleAnimTemp1:: db
+wBattleAnimTemp2:: db
+wBattleAnimTemp3:: db
+
+NEXTU
+wBattleAnimTempOAMFlags:: db
+wBattleAnimTempField02:: db
+wBattleAnimTempTileID:: db
+wBattleAnimTempXCoord:: db
+wBattleAnimTempYCoord:: db
+wBattleAnimTempXOffset:: db
+wBattleAnimTempYOffset:: db
+wBattleAnimTempAddSubFlags:: db
+wBattleAnimTempPalette:: db
+ENDU
+
+ ds $32
+wBattleAnimEnd::
+
+ ds $1aa ; TODO
+
+
+wc9ef:: ds 1
+
+ ds 6
+
+wBattleMonNickname:: ds 6
+wEnemyMonNickname:: ds 6
+
+wca02:: ds 1
+wca03:: ds 1
+wca04:: ds 1
+
+ ds 3
+
+wca08:: ds 1
+wca09:: ds 1
+wca0a:: ds 1
+
+ ds 5 ; TODO
+
+wca10:: ds 1
+wca11:: ds 1
+wca12:: ds 1
+wca13:: ds 1
+wca14:: ds 1
+
+ ds $22 ; TODO
+
+wca37:: ds 1
+wca38:: ds 1
+wca39:: ds 1
+wca3a:: ds 1
+wca3b:: ds 1
+wca3c:: ds 1
+wPlayerSubStatus3:: db
+
+wca3e:: ds 1
+wca3f:: ds 1
+wca40:: ds 1
+wca41:: ds 1
+
+wEnemySubStatus3:: db
+
+wca43:: db
+
+wca44:: db
+
+ ds $12
+wTrainerClass::
+ db
+
+wca58:: ds 1
+wca59:: ds 1
+wca5a:: ds 1
+wca5b:: ds 1
+wca5c:: ds 1
+
+ ds $5c
+
+wcab9:: ds 1
+
+ ds 6
+
+wcac0:: ds 1
+wcac1:: ds 1
+wcac2:: ds 1
+
+wLinkBattleRNCount:: db
+
+ ds 12
+
+wcad0:: ds 1
+
+ ds 9
+
+wcada:: ds 1
+
+ ds 6
+
+wcae1:: ds 1
+
+ENDU
+
+
+
+
+SECTION "CB14", WRAM0[$CB14]
+
+UNION
+wRedrawRowOrColumnSrcTiles::
+; the tiles of the row or column to be redrawn by RedrawRowOrColumn
+ ds SCREEN_WIDTH * 2
+NEXTU
+wRedrawFlashlightDst0:: dw
+wRedrawFlashlightSrc0:: dw
+wRedrawFlashlightBlackDst0:: dw
+wRedrawFlashlightDst1:: dw
+wRedrawFlashlightSrc1:: dw
+wRedrawFlashlightBlackDst1:: dw
+wRedrawFlashlightWidthHeight:: db
+; width or height of flashlight redraw region
+; in units of two tiles (people event meta tile)
+ENDU
+
+SECTION "CB56", WRAM0[$CB4C]
+wOtherPlayerLinkMode:: db
+wOtherPlayerLinkAction:: db
+ ds 3 ; TODO
+
+wPlayerLinkAction:: db
+ ds 4 ; TODO
+
+wLinkTimeoutFrames:: dw
+wcb58:: ds 2
+wMonType:: db
+wCurSpecies:: db
+wNamedObjectTypeBuffer:: db
+
+SECTION "CB5E", WRAM0[$CB5E]
+wJumptableIndex:: db
+wFlyDestination:: db
+
+wcb60:: ds 1
+wcb61:: ds 1
+
+wVBCopySize:: ds 1
+wVBCopySrc:: ds 2
+wVBCopyDst:: ds 2
+wVBCopyDoubleSize:: ds 1
+wVBCopyDoubleSrc:: ds 2
+wVBCopyDoubleDst:: ds 2
+wcb6c:: db
+wcb6d:: db
+wcb6e:: db
+wPlayerStepDirection:: db
+
+SECTION "CB71", WRAM0[$CB70]
+
+wcb70:: db
+
+wVBCopyFarSize:: ds 1
+wVBCopyFarSrc:: ds 2
+wVBCopyFarDst:: ds 2
+wVBCopyFarSrcBank:: ds 1
+wPlayerMovement:: db
+wMovementObject:: db
+ ptrba wMovementData
+
+wcb7c:: ds 1
+
+SECTION "Collision buffer", WRAM0[$CB90]
+
+wTileDown:: db
+wTileUp:: db
+wTileLeft:: db
+wTileRight:: db
+
+wScreenSave::
+ ds 6 * 5
+
+SECTION "CBB2", WRAM0[$CBB2]
+wToolgearBuffer::
+ ds $40
+
+SECTION "CBF2", WRAM0[$CBF2]
+
+wWindowData::
+wWindowStackPointer:: dw
+wMenuJoypad:: db
+wMenuSelection:: db
+wMenuSelectionQuantity:: db
+wWhichIndexSet::
+wActiveBackpackPocket:: db
+wScrollingMenuCursorPosition:: db
+wWindowStackSize:: db
+
+SECTION "CC09", WRAM0[$CC02]
+
+wMenuDataHeader::
+ db
+wMenuBorderTopCoord:: db
+wMenuBorderLeftCoord:: db
+wMenuBorderBottomCoord:: db
+wMenuBorderRightCoord:: db
+wMenuDataPointer:: dw
+wMenuCursorBuffer:: db
+ ds 8 ; TODO
+wMenuDataHeaderEnd::
+
+wMenuData2::
+wMenuDataFlags:: db
+wMenuDataItems:: db
+wMenuDataIndicesPointer:: dw
+wMenuDataDisplayFunctionPointer:: dw
+wMenuDataPointerTableAddr:: dw
+
+SECTION "MenuData3", WRAM0[$CC22]
+wMenuData3::
+
+w2DMenuCursorInitY:: db
+w2DMenuCursorInitX:: db
+w2DMenuNumRows:: db
+w2DMenuNumCols:: db
+w2DMenuFlags:: dw
+w2DMenuCursorOffsets:: db
+wMenuJoypadFilter:: db
+w2DMenuDataEnd::
+
+wMenuCursorY:: db
+wMenuCursorX:: db
+wCursorOffCharacter:: db
+wCursorCurrentTile:: dw
+
+SECTION "CC32", WRAM0[$CC32] ; Please merge when more is disassembled
+wVBlankJoyFrameCounter: db
+
+wVBlankOccurred: db
+wLastSpawnMapGroup: db
+wLastSpawnMapNumber: db
+
+ ds 2
+
+;Controls what type of opening (fire/notes) you get.
+wcc38::
+wTitleSequenceOpeningType::
+ db
+
+wDefaultSpawnPoint::
+ db
+
+wMovementBufferCount:: db
+wMovementBufferObject:: db
+ ptrba wMovementBufferPointer
+wMovementBuffer::
+ ds 55
+
+SECTION "CC9A", WRAM0[$CC9A]
+
+wSkatingDirection:: db
+wCompanionCollisionFrameCounter:: db
+
+wUnknownWordcc9c::
+ dw
+
+wUnknownBuffercc9e::
+ ds 14
+
+
+wSpriteCurPosX : ds 1
+wSpriteCurPosY : ds 1
+wSpriteWidth : ds 1
+wSpriteHeight : ds 1
+wSpriteInputCurByte : ds 1
+wSpriteInputBitCounter : ds 1
+wSpriteOutputBitOffset : ds 1
+wSpriteLoadFlags : ds 1
+wSpriteUnpackMode : ds 1
+wSpriteFlipped : ds 1
+wSpriteInputPtr : ds 2
+wSpriteOutputPtr : ds 2
+wSpriteOutputPtrCached : ds 2
+wSpriteDecodeTable0Ptr : ds 2
+wSpriteDecodeTable1Ptr : ds 2
+
+wccc0:: ds 1
+wccc1:: ds 1
+wccc2:: ds 1
+wccc3:: ds 1
+wccc4:: ds 1
+
+SECTION "CCC7", WRAM0[$CCC7]
+
+wDisableVBlankOAMUpdate:: db
+
+SECTION "CCCA", WRAM0[$CCCA]
+
+wBGP:: db
+wOBP0:: db
+wOBP1:: db
+
+wcccd:: ds 1
+
+wDisableVBlankWYUpdate:: db
+wSGB:: db
+
+SECTION "CCD0", WRAM0[$CCD0]
+
+wccd0:: ds 1
+wccd1:: ds 1
+wccd2:: ds 1
+wccd3:: ds 1
+
+ ds 5
+
+wccd9:: ds 1
+
+SECTION "CCE1", WRAM0[$CCE1]
+
+wcce1:: ds 1
+wcce2:: ds 1
+wcce3:: ds 1
+wcce4:: ds 1
+
+ ds 6
+
+wcceb:: ds 1
+
+ ds 5
+
+wccf1:: ds 1
+wccf2:: ds 1
+wccf3:: ds 1
+wccf4:: ds 1
+
+SECTION "CD11", WRAM0[$CD11]
+
+wcd11:: ds 1
+
+ ds 20
+
+wStringBuffer1:: ds 1 ; How long is this?
+wcd27:: ds 1
+SECTION "CD31", WRAM0[$CD31]
+
+UNION
+wStartDay:: db
+wStartHour:: db
+wStartMinute:: db
+
+NEXTU
+wHPBarTempHP:: dw
+
+NEXTU
+wStringBuffer2:: db ; How long is this?
+
+ENDU
+
+
+SECTION "CD3C", WRAM0[$CD3C]
+
+wcd3c:: db
+wRegularItemsCursor:: db
+wBackpackAndKeyItemsCursor:: db
+wStartmenuCursor:: db
+wcd40:: db
+wcd41:: db
+wcd42:: db
+wcd43:: db
+wRegularItemsScrollPosition:: db
+wBackpackAndKeyItemsScrollPosition:: db
+wcd46:: ds 1
+wcd47:: ds 1
+wSelectedSwapPosition:: db
+wMenuScrollPosition:: db
+
+wTextDest:: ds 2
+
+wQueuedScriptBank:: db
+wQueuedScriptAddr:: dw
+
+wPredefID::
+ db
+
+wPredefHL::
+ dw
+wPredefDE::
+ dw
+wPredefBC::
+
+wFarCallBCBuffer::
+ dw
+
+wcd56:: ds 1
+wcd57:: ds 1
+wFieldMoveSucceeded:: db
+wVramState:: db
+
+ ds 3 ; TODO
+wcd5d:: db
+ db
+wChosenStarter:: db
+
+SECTION "CD70", WRAM0[$CD70]
+wcd70:: ds 1
+wcd71:: ds 1
+wcd72:: dw
+wcd74:: db
+wcd75:: db
+
+wCurItem:: db
+wItemIndex:: db
+wMonDexIndex: db
+wWhichPokemon: db
+
+SECTION "CD7B", WRAM0[$CD7B]
+
+wHPBarType:: db
+wcd7c:: ds 1
+
+wItemQuantity:: db
+wItemQuantityBuffer:: db
+wcd7f:: db
+wcd80:: db
+wcd81:: db
+
+SECTION "CD9E", WRAM0 [$CD9E]
+wLoadedMonLevel:: db
+
+SECTION "CDAF", WRAM0 [$CDAF]
+wcdaf:: db
+
+SECTION "CDB0", WRAM0 [$CDB0]
+wTalkingTargetType:: db
+;bit 0 = has engaged NPC in dialogue
+;bit 1 = has engaged sign in dialogue
+
+wcdb1:: ds 1
+wcdb2:: ds 1
+
+SECTION "CDB9", WRAM0[$CDB9]
+
+wcdb9:: ds 1
+
+wItemAttributeParamBuffer:: db
+wCurPartyLevel:: db
+
+SECTION "CDBD", WRAM0[$CDBD]
+
+wLinkMode:: db
+; 00 -
+; 01 -
+; 02 -
+; 03 -
+
+wNextWarp:: db
+wNextMapGroup:: db
+wNextMapId:: db
+wPrevWarp:: db
+
+ ds 1
+
+UNION
+wFieldMoveScriptID:: db
+wMapBlocksAddress:: dw
+wReplacementBlock:: db
+
+NEXTU
+
+wHPBarMaxHP:: dw
+wHPBarOldHP:: dw
+
+ENDU
+
+wHPBarNewHP:: dw
+wHPBarDelta:: db
+wcdca:: db
+wHPBarHPDifference:: dw
+
+wLinkBattleRNs:: ds 10
+
+wcdd7:: ds 1
+wcdd8:: ds 1
+wcdd9:: ds 1
+wcdda:: ds 1
+wcddb:: ds 1
+wcddc:: ds 1
+wcddd:: ds 1
+wcdde:: ds 1
+wcddf:: ds 1
+wcde0:: ds 1
+wcde1:: ds 1
+wcde2:: ds 1
+wcde3:: ds 1
+wcde4:: ds 1
+wcde5:: ds 1
+wcde6:: ds 1
+wcde7:: ds 1
+wcde8:: ds 1
+wcde9:: ds 1
+wcdea:: ds 1
+wcdeb:: ds 1
+
+
+SECTION "CDFE", WRAM0[$CDFE]
+
+wcdfe:: ds 1
+wcdff:: ds 1
+wBattleMode:: db
+wce01:: ds 1
+wce02:: ds 1
+wce03:: ds 1
+wce04:: ds 1
+wce05:: ds 1
+wce06:: ds 1
+
+wMonHeader::
+
+wMonHIndex::
+; In the ROM base stats data structure, this is the dex number, but it is
+; overwritten with the dex number after the header is copied to WRAM.
+ ds 1
+
+wMonHBaseStats::
+wMonHBaseHP::
+ ds 1
+wMonHBaseAttack::
+ ds 1
+wMonHBaseDefense::
+ ds 1
+wMonHBaseSpeed::
+ ds 1
+wMonHBaseSpecialAtt::
+ ds 1
+wMonHBaseSpecialDef::
+ ds 1
+
+wMonHTypes::
+wMonHType1::
+ ds 1
+wMonHType2::
+ ds 1
+
+wMonHCatchRate::
+ ds 1
+wMonHBaseEXP::
+ ds 1
+
+wMonHItems::
+wMonHItem1::
+ ds 1
+wMonHItem2::
+ ds 1
+
+wMonHGenderRatio::
+ ds 1
+
+wMonHUnk0::
+ ds 1
+wMonHUnk1::
+ ds 1
+wMonHUnk2::
+ ds 1
+
+wMonHSpriteDim::
+ ds 1
+wMonHFrontSprite::
+ ds 2
+wMonHBackSprite::
+ ds 2
+
+wMonHGrowthRate::
+ ds 1
+
+wMonHLearnset::
+; bit field
+ flag_array 50 + 5 ; size = 7
+ ds 1
+
+SECTION "CE2D", WRAM0[$CE2D]
+wce2d:: ds 1
+wce2e:: ds 1
+wce2f:: ds 1
+wce30:: ds 1
+wce31:: ds 1
+wce32:: ds 1
+wce33:: ds 1
+wce34:: ds 1
+wce35:: ds 1
+wce36:: ds 1
+
+wNamedObjectIndexBuffer::
+wCountSetBitsResult::
+wce37::
+ db
+
+SECTION "CE3A", WRAM0[$CE3A]
+
+wce3a:: ds 1
+
+wVBlankSavedROMBank::
+ db
+
+wBuffer::
+ db
+
+wTimeOfDay:: db
+; based on RTC
+; Time of Day Regular Debug
+; 00 - Day 09--15h 00--30s
+; 01 - Night 15--06h 30--35s
+; 02 - Cave 35--50s
+; 03 - Morning 06--09h 50--59s
+
+wcd3f: ds 1
+
+SECTION "CE5F", WRAM0[$CE5F]
+
+wce5f:: ; debug menu writes $41 to it
+ db
+
+wce60::
+ db ; main menu checks this, maybe states if there's a save present?
+
+wActiveFrame:: db
+
+wTextBoxFlags:: db
+
+wDebugFlags:: db
+; Bit 0: Debug battle indicator
+; Bit 1: Debug field indicator
+; Bit 2-3: Game is continued (set when selecting continue on the main menu)
+
+wce64:: ds 1
+wce65:: ds 1
+wce66:: ds 1
+
+wPlayerName:: ds 6
+
+wMomsName:: ds 6
+
+SECTION "CE73", WRAM0[$CE73]
+
+wce73: ds 1
+wce74: ds 1
+wce75: ds 1
+
+wObjectFollow_Leader::
+ db
+wObjectFollow_Follower::
+ db
+wCenteredObject::
+ db
+wFollowerMovementQueueLength::
+ db
+wFollowMovementQueue::
+ ds 5
+
+wObjectStructs::
+; Note: this might actually not be an object. TODO: Investigate (if indexing starts at 1, then this isn't an object)
+; It might just be unused/a leftover.
+wUnkObjectStruct:: object_struct wUnkObject
+wPlayerStruct:: object_struct wPlayer
+wObject1Struct:: object_struct wObject1
+wObject2Struct:: object_struct wObject2
+wObject3Struct:: object_struct wObject3
+wObject4Struct:: object_struct wObject4
+wObject5Struct:: object_struct wObject5
+wObject6Struct:: object_struct wObject6
+wObject7Struct:: object_struct wObject7
+wObject8Struct:: object_struct wObject8
+wObjectStructsEnd::
+
+wCmdQueue::
+wCmdQueueEntry1:: ds 16
+wCmdQueueEntry2:: ds 16
+wCmdQueueEntry3:: ds 16
+wCmdQueueEntry4:: ds 16
+
+wMapObjects::
+wPlayerObject:: map_object wPlayer
+wMap1Object:: map_object wMap1
+wMap2Object:: map_object wMap2
+wMap3Object:: map_object wMap3
+wMap4Object:: map_object wMap4
+wMap5Object:: map_object wMap5
+wMap6Object:: map_object wMap6
+wMap7Object:: map_object wMap7
+wMap8Object:: map_object wMap8
+wMap9Object:: map_object wMap9
+wMap10Object:: map_object wMap10
+wMap11Object:: map_object wMap11
+wMap12Object:: map_object wMap12
+wMap13Object:: map_object wMap13
+wMap14Object:: map_object wMap14
+wMap15Object:: map_object wMap15
+wMapObjectsEnd::
+
+wToolgearFlags:: db
+; 76543210
+; | | \- show toolgear
+; | |
+; | \--- transfer toolgear to window
+; \-------- hide toolgear
+
+ ds 2 ; TODO
+
+wTimeOfDayPal:: db
+; Applied according to wCurTimeOfDay from wTimeOfDayPalset
+
+wd153:: db
+; 76543210
+; | \- show player coords in toolgear instead of time
+; \-------- switch overworld palettes according to seconds not hours
+
+ ds 3 ; TODO
+wTimeOfDayPalFlags:: db
+; 76543210
+; \-------- disable overworld palette switch
+
+wTimeOfDayPalset:: db
+; 76543210
+; \/\/\/\/
+; | | | \- Map Palette for TimeOfDay $00 (MORN)
+; | | \--- Map Palette for TimeOfDay $01 (DAY)
+; | \----- Map Palette for TimeOfDay $02 (NITE)
+; \------- Map Palette for TimeOfDay $03 (DARK)
+
+wCurTimeOfDay:: db
+
+SECTION "D15B", WRAM0[$D15B]
+
+wd15b:: db
+
+wd15c:: db
+
+wd15d:: db
+
+wd15e:: db
+
+wd15f:: db
+
+SECTION "D163", WRAM0[$D163]
+
+wd163:: db
+
+wd164:: db
+
+wTMsHMs:: db
+
+SECTION "D19E", WRAM0[$D19E]
+
+wItems::
+wNumBagItems:: db
+
+SECTION "D1C8", WRAM0[$D1C8]
+
+wNumKeyItems:: db
+wKeyItems:: db
+
+SECTION "D1DE", WRAM0[$D1DE]
+
+wNumBallItems:: db
+wBallQuantities:: db
+
+ ds 10
+
+wUnknownListLengthd1ea:: db
+wUnknownListd1eb:: db
+
+SECTION "Rival's Name", WRAM0[$D256]
+wRegisteredItem:: db
+wRegisteredItemQuantity:: db
+wRivalName:: ds 6
+ ds 6
+
+wPlayerState:: db
+; 00 - walking
+; 01 - bicycle
+; 02 - skateboard
+; 04 - surfing
+
+wd265:: db
+wd266:: db
+
+;The starting house's map script number is stored at d29a. Others are probably nearby.
+SECTION "D29A", WRAM0[$D29A]
+wd29a:: db
+wd29b:: db
+wd29c:: db
+wd29d:: db
+wd29e:: db
+ db
+wd2a0:: db
+
+SECTION "D35F", WRAM0[$D35F]
+wOptions:: db
+
+SECTION "D39D", WRAM0[$D39D]
+wd39d:: db
+
+SECTION "D3A5", WRAM0[$D3A5]
+wd3a5:: db
+
+SECTION "Game Event Flags", WRAM0[$D41A]
+wd41a:: db
+; 76543210
+; | \- read email?
+; \-------- talked to Blue, triggers Oak
+wd41b:: db
+; 76543210
+; |\-- followed Oak to his back room
+; \--- chose a starter
+wd41c:: db
+; 76543210
+; \----- recieved pokedexes
+wd41d:: db
+; 76543210
+; \--- beat rival in the lab
+wd41e:: db
+
+SECTION "D4A9", WRAM0[$D4A9]
+
+wd4a9:: db
+ ds 1 ; TODO
+wJoypadFlags:: db
+; 76543210
+; ||||\__/
+; |||| \-- unkn
+; |||\----- set for rival intro textbox
+; ||\------ don't wait for keypress to close text box
+; |\------- joypad sync mtx
+; \-------- joypad disabled
+
+SECTION "wDigWarpNumber", WRAM0[$D4B2]
+
+wDigWarpNumber:: db
+wd4b3:: ds 1
+wd4b4:: ds 1
+wd4b5:: ds 1
+wd4b6:: ds 1
+wd4b7:: ds 1
+wd4b8:: ds 1
+wd4b9:: ds 1
+
+
+SECTION "Warp data", WRAM0[$D513]
+
+wWarpNumber:: db
+
+wCurrMapWarpCount::
+ db
+
+wCurrMapWarps::
+REPT 32 ; TODO: confirm this
+ ds 5
+ENDR
+
+
+wCurrMapSignCount::
+ db
+
+wCurrMapSigns::
+REPT 16 ; TODO: confirm this
+ ds 4
+ENDR
+
+wCurrMapObjectCount::
+ db
+
+wCurrMapInlineTrainers::
+REPT 32 ; TODO: confirm this
+ ds 2 ; inline trainers. each pair of bytes is direction, distance
+ENDR
+
+SECTION "D637", WRAM0[$D637]
+wd637:: db ;OW battle state? $3 wild battle, $8 is trainer battle $4 is left battle, $B is load overworld? $0 is in overworld
+wd638:: db ;wd637's last written-to value
+
+SECTION "Used sprites", WRAM0[$D643]
+
+wBGMapAnchor::
+ dw
+
+wUsedSprites::
+ dw ; This is for the player
+
+wUsedNPCSprites::
+ ds 2 * 5 ; This is for the NPCs
+
+wUsedSpritesEnd::
+
+
+SECTION "Map header", WRAM0[$D656]
+
+wMapGroup:: db
+wMapId:: db
+
+wOverworldMapAnchor::
+ dw
+
+wYCoord:: db
+wXCoord:: db
+
+wMetatileNextY:: db
+wMetatileNextX:: db
+
+wd65e::
+ db
+
+wMapPartial::
+wMapAttributesBank::
+ db
+wMapTileset::
+ db
+wMapPermissions::
+ db
+wMapAttributesPtr::
+ dw
+wMapPartialEnd::
+
+wMapAttributes::
+wMapHeight::
+ db
+wMapWidth::
+ db
+wMapBlocksPointer::
+ dw
+wMapTextPtr::
+ dw
+wMapScriptPtr::
+ dw
+wMapObjectsPtr::
+ dw
+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
+wTilesetBlocksAddress::
+ dw
+wTilesetTilesAddress::
+ dw
+wTilesetCollisionAddress::
+ dw
+ ds 4 ; TODO
+wTilesetEnd::
+
+wPartyCount:: db
+wPartySpecies:: ds PARTY_LENGTH
+wPartyEnd:: db
+
+wPartyMons::
+wPartyMon1:: party_struct wPartyMon1
+wPartyMon2:: party_struct wPartyMon2
+wPartyMon3:: party_struct wPartyMon3
+wPartyMon4:: party_struct wPartyMon4
+wPartyMon5:: party_struct wPartyMon5
+wPartyMon6:: party_struct wPartyMon6
+wPlayerPartyEnd::
+
+wPartyMonOT::
+ ds PARTY_LENGTH * 6
+wPartyMonOTEnd::
+
+wPartyMonNicknames::
+ ds PARTY_LENGTH * MON_NAME_LENGTH ; = $24
+wPartyMonNicknamesEnd::
+
+wPokedexOwned::
+ flag_array NUM_POKEMON
+wPokedexOwnedEnd::
+
+wPokedexSeen::
+ flag_array NUM_POKEMON
+wPokedexSeenEnd::
+
+wAnnonDex:: ds 26
+
+wAnnonID:: ds 1
+
+wd875:: ds 1
+wd876:: ds 1
+
+ ds 5
+
+wd87c:: ds 1
+
+ ds 5
+
+wd882:: ds 1
+wd883:: ds 1
+wd884:: ds 1
+
+SECTION "D8A2", WRAM0[$D8A2]
+
+wd8a2:: ds 1
+wd8a3:: ds 1
+wd8a4:: ds 1
+wd8a5:: ds 1
+
+ ds 5
+
+wd8ab:: ds 1
+
+SECTION "wd8b1", WRAM0[$D8B1]
+
+wd8b1:: ds 1
+
+ ds 5
+
+wd8b7:: ds 1
+wd8b8:: ds 1
+
+SECTION "D8D1", WRAM0[$D8D1]
+
+wd8d1:: ds 1
+
+ ds 5
+
+wd8d7:: ds 1
+
+ ds 5
+
+wd8dd:: ds 1
+
+SECTION "D8E3", WRAM0[$D8E3]
+
+wd8e3:: ds 1
+wd8e4:: ds 1
+
+SECTION "D8FD", WRAM0[$D8FD]
+
+wd8fd:: ds 1
+
+SECTION "D913", WRAM0[$D913]
+
+wd913:: ds 1
+
+SECTION "Wild mon buffer", WRAM0[$D91B]
+
+UNION
+wWildMons::
+ ds 41
+NEXTU
+ ds 2
+wd91d:: ds 1
+ ds 29
+wd93b:: ds 1
+ENDU
+
+SECTION "DA3B", WRAM0[$DA3B]
+
+wOTPartyMonOT:: db
+
+SECTION "DA5F", WRAM0[$DA5F]
+
+wda5f:: db
+
+SECTION "DA83", WRAM0[$DA83]
+
+wBoxListLength:: db
+wBoxList:: ds MONS_PER_BOX
+
+SECTION "DAA3", WRAM0[$DAA3]
+
+wdaa3:: db
+wdaa4:: db
+wdaa5:: db
+
+SECTION "DE63", WRAM0[$DE63]
+
+wde63:: db
+
+SECTION "DF17", WRAM0[$DF17]
+wdf17:: ds 1
+
+SECTION "DFCB", WRAM0[$DFCB]
+wdfcb:: ds 1
+
+SECTION "Stack Bottom", WRAM0
+
+; Where SP is set at game init
+wStackBottom::
+; Due to the way the stack works (`push` first decrements, then writes), the byte at $DFFF is actually wasted