pokegold-spaceworld/wram.asm
2019-03-05 21:23:17 +10:00

1291 lines
23 KiB
NASM

INCLUDE "constants.asm"
SECTION "Music engine RAM", WRAM0
wMusic:: ; c000
wChannels::
wChannel1:: channel_struct wChannel1 ; c000
wChannel2:: channel_struct wChannel2 ; c032
wChannel3:: channel_struct wChannel3 ; c064
wChannel4:: channel_struct wChannel4 ; c096
wSFXChannels::
wChannel5:: channel_struct wChannel5 ; c0c8
wChannel6:: channel_struct wChannel6 ; c0fa
wChannel7:: channel_struct wChannel7 ; c12c
wChannel8:: channel_struct wChannel8 ; c15e
ds 1 ; c190
wCurTrackDuty:: db ; c191
wCurTrackIntensity:: db ; c192
wCurTrackFrequency:: dw ; c193
wc195:: db ; c195
ds 2 ; TODO
wCurChannel:: db ; c198
wVolume:: db ; c199
wSoundOutput:: ; c19a
; 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 ; c19c
wMusicBank:: db ; c19e
ds 5 ; TODO
wLowHealthAlarm:: ; c1a4
; bit 7: on/off
; bit 4: pitch
; bit 0-3: counter
db
wMusicFade:: ; c1a5
; 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 ; c1a6
wMusicFadeID::
wMusicFadeIDLow:: db ; c1a7
wMusicFadeIDHigh:: db ; c1a8
ds 2 ; TODO
wIncrementTempo: dw ; c1ab
wMapMusic:: db ; c1ad
wCryPitch:: dw ; c1ae
wCryLength:: dw ; c1b0
; c1b2
ds 7 ; TODO
wc1b9:: db ; c1b9
wc1ba:: db ; c1ba
; either wChannelsEnd or wMusicEnd, unsure
ds 1 ; TODO
wMusicInitEnd:: ; c1bc
SECTION "OAM Buffer", WRAM0
wVirtualOAM:: ; c200
ds SPRITEOAMSTRUCT_LENGTH * NUM_SPRITE_OAM_STRUCTS
wVirtualOAMEnd::
wTileMap:: ; c2a0
ds SCREEN_HEIGHT * SCREEN_WIDTH
UNION
wTileMapBackup:: ; c408
ds SCREEN_HEIGHT * SCREEN_WIDTH
NEXTU
ds 1
wc409:: ds 1 ; c409
wc40a:: ds 1 ; c40a
; Monster or Trainer test?
wWhichPicTest:: ; c40b
db
wc40c:: ds 1 ; c40c
wc40d:: ds 1 ; c40d
wc40e:: ds 1 ; c40e
ds 11
wc41a:: db ; c41a
ds 165
wSpriteAnimIDBuffer:: db ; c4c0
ds 6
wc4c7:: db ; c4c7
wc4c8:: db ; c4c8
ds 7
wNamingScreenDestinationPointer:: dw ; c4d0
wNamingScreenCurNameLength:: db ; c4d2
wNamingScreenMaxNameLength:: db ; c4d3
wNamingScreenType:: db ; c4d4
wNamingScreenCursorObjectPointer:: dw ; c4d5
wNamingScreenLastCharacter:: db ; c4d7
wNamingScreenStringEntryCoordY:: db ; c4d8
wNamingScreenStringEntryCoordX:: db ; c4d9
ds 64
wc51a:: ds 1 ; c51a
ENDU
SECTION "Map Buffer", WRAM0
wMapBuffer::
wMapScriptNumber:: db ; c5e8
wMapScriptNumberLocation:: dw ; c5e9
wUnknownMapPointer:: dw ; c5eb ; TODO
wc5ed:: db ; c5ed
ds 18
wMapBufferEnd:: ; c600
UNION
wOverworldMapBlocks:: ds 1300 ; c600
wOverworldMapBlocksEnd:: ; cb14
NEXTU
wLYOverrides:: ; c600
ds SCREEN_HEIGHT_PX
; c690
ds $10
wLYOverrides2:: ; c6a0
NEXTU
; Battle-related
ds $1ea
; c7ea
wActiveBGEffects:: ; c7ea
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 ; c7fe
wBattleAnimFlags:: db ; c7ff
wBattleAnimAddress:: dw ; c800
wBattleAnimDuration:: db ; c802
wBattleAnimParent:: dw ; c803
wBattleAnimLoops:: db ; c805
wBattleAnimVar:: db ; c806
wBattleAnimByte:: db ; c807
wBattleAnimOAMPointerLo:: db ; c808
db
UNION ; c80a
; unidentified
wBattleAnimTemp0:: db
wBattleAnimTemp1:: db
wBattleAnimTemp2:: db
wBattleAnimTemp3:: db
NEXTU ; c80a
wBattleAnimTempOAMFlags:: db
wBattleAnimTempField02:: db
wBattleAnimTempTileID:: db
wBattleAnimTempXCoord:: db
wBattleAnimTempYCoord:: db
wBattleAnimTempXOffset:: db
wBattleAnimTempYOffset:: db
wBattleAnimTempAddSubFlags:: db
wBattleAnimTempPalette:: db
ENDU ; c813
ds $32
wBattleAnimEnd::
; c845
ds $1aa ; TODO
wc9ef:: ds 1 ; c9ef
ds 6
wBattleMonNickname:: ds 6 ; c9f6
wEnemyMonNickname:: ds 6 ; c9fc
wca02:: ds 1 ; ca02
wca03:: ds 1 ; ca03
wca04:: ds 1 ; ca04
ds 3
wca08:: ds 1 ; ca08
wca09:: ds 1 ; ca09
wca0a:: ds 1 ; ca0a
ds 5 ; TODO
wca10:: ds 1 ; ca10
wca11:: ds 1 ; ca11
wca12:: ds 1 ; ca12
wca13:: ds 1 ; ca13
wca14:: ds 1 ; ca14
ds $22 ; TODO
wca37:: ds 1 ; ca37
wca38:: ds 1 ; ca38
wca39:: ds 1 ; ca39
wca3a:: ds 1 ; ca3a
wca3b:: ds 1 ; ca3b
wca3c:: ds 1 ; ca3c
wPlayerSubStatus3:: db ; ca3d
wca3e:: ds 1 ; ca3e
wca3f:: ds 1 ; ca3f
wca40:: ds 1 ; ca40
wca41:: ds 1 ; ca41
wEnemySubStatus3:: db ; ca42
wca43:: db ; ca43
wca44:: db ; ca44
ds $12
wTrainerClass:: ; ca57
db
wca58:: ds 1 ; ca58
wca59:: ds 1 ; ca59
wca5a:: ds 1 ; ca5a
wca5b:: ds 1 ; ca5b
wca5c:: ds 1 ; ca5c
ds $5c
wcab9:: ds 1 ; cab9
ds 6
wcac0:: ds 1 ; cac0
wcac1:: ds 1 ; cac1
wcac2:: ds 1 ; cac2
wLinkBattleRNCount:: db ; cac3
ds 12
wcad0:: ds 1 ; cad0
ds 9
wcada:: ds 1 ;cada
ds 6
wcae1:: ds 1 ; cae1
ENDU
SECTION "CB14", WRAM0[$CB14]
UNION
wRedrawRowOrColumnSrcTiles:: ; cb14
; the tiles of the row or column to be redrawn by RedrawRowOrColumn
ds SCREEN_WIDTH * 2
NEXTU
wRedrawFlashlightDst0:: dw ; cb14
wRedrawFlashlightSrc0:: dw ; cb16
wRedrawFlashlightBlackDst0:: dw ; cb18
wRedrawFlashlightDst1:: dw ; cb1a
wRedrawFlashlightSrc1:: dw ; cb1c
wRedrawFlashlightBlackDst1:: dw ; cb1e
wRedrawFlashlightWidthHeight:: db ; cb20
; width or height of flashlight redraw region
; in units of two tiles (people event meta tile)
ENDU
SECTION "CB56", WRAM0[$CB4C]
wOtherPlayerLinkMode:: db ; cb4c
wOtherPlayerLinkAction:: db ; cb4d
ds 3 ; TODO
wPlayerLinkAction:: db ; cb51
ds 4 ; TODO
wLinkTimeoutFrames:: dw ; cb56
wcb58:: ds 2 ; cb58
wMonType:: db ; cb5a
wCurSpecies:: db ; cb5b
wNamedObjectTypeBuffer:: db ; cb5c
SECTION "CB5E", WRAM0[$CB5E]
wJumptableIndex:: db ; cb5e
wFlyDestination:: db ; cb5f
wcb60:: ds 1 ; cb60
wcb61:: ds 1 ; cb61
wVBCopySize:: ds 1 ; cb62
wVBCopySrc:: ds 2 ; cb63
wVBCopyDst:: ds 2 ; cb65
wVBCopyDoubleSize:: ds 1 ; cb67
wVBCopyDoubleSrc:: ds 2 ; cb68
wVBCopyDoubleDst:: ds 2 ; cb6a
wcb6c:: db ; cb6c
wcb6d:: db ; cb6d
wcb6e:: db ; cb6e
wPlayerStepDirection:: db ; cb6f
SECTION "CB71", WRAM0[$CB70]
wcb70:: db
wVBCopyFarSize:: ds 1 ; cb71
wVBCopyFarSrc:: ds 2 ; cb72
wVBCopyFarDst:: ds 2 ; cb74
wVBCopyFarSrcBank:: ds 1 ; cb76
wPlayerMovement:: db ; cb77
wMovementObject:: db ; cb78
ptrba wMovementData ; cb79
wcb7c:: ds 1 ; cb7c
SECTION "Collision buffer", WRAM0[$CB90]
wTileDown:: db ; cb90
wTileUp:: db ; cb91
wTileLeft:: db ; cb92
wTileRight:: db ; cb93
wScreenSave:: ; cb94
ds 6 * 5
SECTION "CBB2", WRAM0[$CBB2]
wToolgearBuffer:: ; cbb2
ds $40
; cbe2
SECTION "CBF2", WRAM0[$CBF2]
wWindowData::
wWindowStackPointer:: dw ; cbf2
wMenuJoypad:: db ; cbf4
wMenuSelection:: db ; cbf5
wMenuSelectionQuantity:: db ; cbf6
wWhichIndexSet::
wActiveBackpackPocket:: db ; cbf7
wScrollingMenuCursorPosition:: db ; cbf8
wWindowStackSize:: db ; cbf9
SECTION "CC09", WRAM0[$CC02]
wMenuDataHeader::
db ; cc02
wMenuBorderTopCoord:: db ; cc03
wMenuBorderLeftCoord:: db ; cc04
wMenuBorderBottomCoord:: db ; cc05
wMenuBorderRightCoord:: db ; cc06
wMenuDataPointer:: dw ; cc07
wMenuCursorBuffer:: db ; cc09
; cc0a
ds 8 ; TODO
wMenuData2::
wMenuDataFlags:: db ; cc12
wMenuDataItems:: db ; cc13
wMenuDataIndicesPointer:: dw ; cc14
wMenuDataDisplayFunctionPointer:: dw ; cc16
wMenuDataPointerTableAddr:: dw ; cc18
SECTION "MenuData3", WRAM0[$CC22]
wMenuData3:: ; cc22
w2DMenuCursorInitY:: db ; cc22
w2DMenuCursorInitX:: db ; cc23
w2DMenuNumRows:: db ; cc24
w2DMenuNumCols:: db ; cc25
w2DMenuFlags:: dw ; cc26
w2DMenuCursorOffsets:: db ; cc28
wMenuJoypadFilter:: db ; cc29
w2DMenuDataEnd::
wMenuCursorY:: db ; cc2a
wMenuCursorX:: db ; cc2b
wCursorOffCharacter:: db ; cc2c
wCursorCurrentTile:: dw ; cc2d
SECTION "CC32", WRAM0[$CC32] ; Please merge when more is disassembled
wVBlankJoyFrameCounter: db ; cc32
wVBlankOccurred: db ; cc33
wLastSpawnMapGroup: db ;cc34
wLastSpawnMapNumber: db ; cc35
ds 2
;Controls what type of opening (fire/notes) you get.
wcc38::
wTitleSequenceOpeningType:: ; cc38
db
wDefaultSpawnPoint:: ; cc39
db
wMovementBufferCount:: db ; cc3a
wMovementBufferObject:: db ; cc3b
ptrba wMovementBufferPointer ; cc3c
wMovementBuffer:: ; cc3f
ds 55
SECTION "CC9A", WRAM0[$CC9A]
wSkatingDirection:: db ; cc9a
wCompanionCollisionFrameCounter:: db ; cc9b
wUnknownWordcc9c:: ; cc9c
dw
wUnknownBuffercc9e:: ; cc9e
ds 14
wSpriteCurPosX : ds 1 ; ccac
wSpriteCurPosY : ds 1 ; ccad
wSpriteWidth : ds 1 ; ccae
wSpriteHeight : ds 1 ; ccaf
wSpriteInputCurByte : ds 1 ; ccb0
wSpriteInputBitCounter : ds 1 ; ccb1
wSpriteOutputBitOffset : ds 1 ; ccb2
wSpriteLoadFlags : ds 1 ; ccb3
wSpriteUnpackMode : ds 1 ; ccb4
wSpriteFlipped : ds 1 ; ccb5
wSpriteInputPtr : ds 2 ; ccb6
wSpriteOutputPtr : ds 2 ; ccb8
wSpriteOutputPtrCached : ds 2 ; ccba
wSpriteDecodeTable0Ptr : ds 2 ; ccbc
wSpriteDecodeTable1Ptr : ds 2 ; ccbe
wccc0:: ds 1 ; ccc0
wccc1:: ds 1 ; ccc1
wccc2:: ds 1 ; ccc2
wccc3:: ds 1 ; ccc3
wccc4:: ds 1 ; ccc4
SECTION "CCC7", WRAM0[$CCC7]
wDisableVBlankOAMUpdate:: db ; ccc7
SECTION "CCCA", WRAM0[$CCCA]
wBGP:: db ; ccca
wOBP0:: db ; cccb
wOBP1:: db ; cccc
wcccd:: ds 1 ; cccd
wDisableVBlankWYUpdate:: db ; ccce
wSGB:: db
SECTION "CCD0", WRAM0[$CCD0]
wccd0:: ds 1 ; ccd0
wccd1:: ds 1 ; ccd1
wccd2:: ds 1 ; ccd2
wccd3:: ds 1 ; ccd3
ds 5
wccd9:: ds 1 ; ccd9
SECTION "CCE1", WRAM0[$CCE1]
wcce1:: ds 1 ; cce1
wcce2:: ds 1 ; cce2
wcce3:: ds 1 ; cce3
wcce4:: ds 1 ; cce4
ds 6
wcceb:: ds 1 ; cceb
ds 5
wccf1:: ds 1 ; ccf1
wccf2:: ds 1 ; ccf2
wccf3:: ds 1 ; ccf3
wccf4:: ds 1 ; ccf4
SECTION "CD11", WRAM0[$CD11]
wcd11:: ds 1 ; cd11
ds 20
wStringBuffer1:: ds 1 ; How long is this? ; cd26
wcd27:: ds 1
SECTION "CD31", WRAM0[$CD31]
UNION
wStartDay:: db ;cd31
wStartHour:: db ;cd32
wStartMinute:: db ;cd33
NEXTU
wHPBarTempHP:: dw ; cd31
NEXTU
wStringBuffer2:: db ; How long is this? ; cd31
ENDU
SECTION "CD3C", WRAM0[$CD3C]
wcd3c:: db ; cd3c
wRegularItemsCursor:: db ; cd3d
wBackpackAndKeyItemsCursor:: db ;cd3e
wStartmenuCursor:: db ; cd3f
wcd40:: db ; cd40
wcd41:: db ; cd41
wcd42:: db ; cd42
wcd43:: db ; cd43
wRegularItemsScrollPosition:: db ; cd44
wBackpackAndKeyItemsScrollPosition:: db ; cd45
wcd46:: ds 1 ; cd46
wcd47:: ds 1 ; cd47
wSelectedSwapPosition:: db ; cd48
wMenuScrollPosition:: db ; cd49
wTextDest:: ds 2; cd4a
wQueuedScriptBank:: db ; cd4c
wQueuedScriptAddr:: dw ; cd4d
wPredefID:: ; cd4f
db
wPredefHL:: ; cd50
dw
wPredefDE:: ; cd52
dw
wPredefBC:: ; cd54
wFarCallBCBuffer:: ; cd54
dw
wcd56:: ds 1 ; cd56
wcd57:: ds 1 ; cd57
wFieldMoveSucceeded:: db ; cd58
wVramState:: db ; cd59
ds 3 ; TODO
wcd5d:: db ; cd5d
db
wChosenStarter:: db ; cd5f
SECTION "CD70", WRAM0[$CD70]
wcd70:: ds 1 ; cd70
wcd71:: ds 1 ; cd71
wcd72:: dw ; cd72
wcd74:: db ; cd74
wcd75:: db ; cd75
wCurItem:: db ; cd76
wItemIndex:: db ;cd77
wMonDexIndex: db ; cd78
wWhichPokemon: db ; cd79
SECTION "CD7B", WRAM0[$CD7B]
wHPBarType:: db ; cd7b
wcd7c:: ds 1 ; cd7c
wItemQuantity:: db ; cd7d
wItemQuantityBuffer:: db ; cd7e
wcd7f:: db ; cd7f
wcd80:: db ; cd80
wcd81:: db ; cd81
SECTION "CD9E", WRAM0 [$CD9E]
wcd9e:: db ; cd9e
SECTION "CDAF", WRAM0 [$CDAF]
wcdaf:: db ; cdaf
SECTION "CDB0", WRAM0 [$CDB0]
wTalkingTargetType:: db ; cdb0
;bit 0 = has engaged NPC in dialogue
;bit 1 = has engaged sign in dialogue
wcdb1:: ds 1 ; cdb1
wcdb2:: ds 1 ; cdb2
SECTION "CDB9", WRAM0[$CDB9]
wcdb9:: ds 1 ; cdb9
wItemAttributeParamBuffer:: db ; cdba
wCurPartyLevel:: db ; cdbb
SECTION "CDBD", WRAM0[$CDBD]
wLinkMode:: db ; cdbd
; 00 -
; 01 -
; 02 -
; 03 -
wNextWarp:: db ; cdbe
wNextMapGroup:: db ; cdbf
wNextMapId:: db ; cdc0
wPrevWarp:: db ; cdc1
ds 1
UNION
wFieldMoveScriptID:: db; cdc3
wMapBlocksAddress:: dw ; cdc4
wReplacementBlock:: db ; cdc6
NEXTU
wHPBarMaxHP:: dw ; cdc3
wHPBarOldHP:: dw ; cdc5
ENDU
wHPBarNewHP:: dw ; cdc7
wHPBarDelta:: db ; cdc9
wcdca:: db ; cdca
wHPBarHPDifference:: dw ; cdcb
wLinkBattleRNs:: ds 10 ; cdcd
wcdd7:: ds 1 ; cdd7
wcdd8:: ds 1 ; cdd8
wcdd9:: ds 1 ; cdd9
wcdda:: ds 1 ; cdda
wcddb:: ds 1 ; cddb
wcddc:: ds 1 ; cddc
wcddd:: ds 1 ; cddd
wcdde:: ds 1 ; cdde
wcddf:: ds 1 ; cddf
wcde0:: ds 1 ; cde0
wcde1:: ds 1 ; cde1
wcde2:: ds 1 ; cde2
wcde3:: ds 1 ; cde3
wcde4:: ds 1 ; cde4
wcde5:: ds 1 ; cde5
wcde6:: ds 1 ; cde6
wcde7:: ds 1 ; cde7
wcde8:: ds 1 ; cde8
wcde9:: ds 1 ; cde9
wcdea:: ds 1 ; cdea
wcdeb:: ds 1 ; cdeb
SECTION "CDFE", WRAM0[$CDFE]
wcdfe:: ds 1 ; cdfe
wcdff:: ds 1 ; cdff
wBattleMode:: db ; ce00
wce01:: ds 1 ; ce01
wce02:: ds 1 ; ce02
wce03:: ds 1 ; ce03
wce04:: ds 1 ; ce04
wce05:: ds 1 ; ce05
wce06:: ds 1 ; ce06
wMonHeader::
wMonHIndex:: ; ce07
; 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:: ; ce08
wMonHBaseHP:: ; ce08
ds 1
wMonHBaseAttack:: ; ce09
ds 1
wMonHBaseDefense:: ; ce0a
ds 1
wMonHBaseSpeed:: ; ce0b
ds 1
wMonHBaseSpecialAtt:: ; ce0c
ds 1
wMonHBaseSpecialDef:: ; ce0d
ds 1
wMonHTypes:: ; ce0e
wMonHType1:: ; ce0e
ds 1
wMonHType2:: ; ce0f
ds 1
wMonHCatchRate:: ; ce10
ds 1
wMonHBaseEXP:: ; ce11
ds 1
wMonHItems:: ; ce12
wMonHItem1:: ; ce12
ds 1
wMonHItem2:: ; ce13
ds 1
wMonHGenderRatio:: ; ce14
ds 1
wMonHUnk0:: ; ce15
ds 1
wMonHUnk1:: ; ce16
ds 1
wMonHUnk2:: ; ce17
ds 1
wMonHSpriteDim:: ; ce18
ds 1
wMonHFrontSprite:: ; ce19
ds 2
wMonHBackSprite:: ; ce1b
ds 2
wMonHGrowthRate:: ; ce1d
ds 1
wMonHLearnset:: ; ce1e
; bit field
flag_array 50 + 5 ; size = 7
ds 1
SECTION "CE2D", WRAM0[$CE2D]
wce2d:: ds 1 ; ce2d
wce2e:: ds 1 ; ce2e
wce2f:: ds 1 ; ce2f
wce30:: ds 1 ; ce30
wce31:: ds 1 ; ce31
wce32:: ds 1 ; ce32
wce33:: ds 1 ; ce33
wce34:: ds 1 ; ce34
wce35:: ds 1 ; ce35
wce36:: ds 1 ; ce36
wNamedObjectIndexBuffer::
wCountSetBitsResult::
wce37:: ; ce37
db
SECTION "CE3A", WRAM0[$CE3A]
wce3a:: ds 1 ; ce3a
wVBlankSavedROMBank:: ; ce3b
db
wBuffer:: ; ce3c
db
wTimeOfDay:: db ; ce3d
; 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:: ; ce5f ; debug menu writes $41 to it
db
wce60:: ; ce60
db ; main menu checks this, maybe states if there's a save present?
wActiveFrame:: db ; ce61
wTextBoxFlags:: db ; ce62
wDebugFlags:: db ; ce63
; 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 ; ce64
wce65:: ds 1 ; ce65
wce66:: ds 1 ; ce66
wPlayerName:: ds 6 ; ce67
wMomsName:: ds 6 ; ce6d
SECTION "CE73", WRAM0[$CE73]
wce73: ds 1 ; ce73
wce74: ds 1 ; ce74
wce75: ds 1 ; ce75
wObjectFollow_Leader:: ; ce76
db
wObjectFollow_Follower:: ; ce77
db
wCenteredObject:: ; ce78
db
wFollowerMovementQueueLength:: ; ce79
db
wFollowMovementQueue:: ; ce7a
ds 5
wObjectStructs:: ; ce7f
; 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 ; ce7f
wPlayerStruct:: object_struct wPlayer ; cea7
wObject1Struct:: object_struct wObject1 ; cecf
wObject2Struct:: object_struct wObject2 ; cef7
wObject3Struct:: object_struct wObject3 ; cf1f
wObject4Struct:: object_struct wObject4 ; cf47
wObject5Struct:: object_struct wObject5 ; cf6f
wObject6Struct:: object_struct wObject6 ; cf97
wObject7Struct:: object_struct wObject7 ; cfbf
wObject8Struct:: object_struct wObject8 ; cfe7
wObjectStructsEnd:: ; d00f
wCmdQueue:: ; d00f
wCmdQueueEntry1:: ds 16
wCmdQueueEntry2:: ds 16
wCmdQueueEntry3:: ds 16
wCmdQueueEntry4:: ds 16
wMapObjects:: ; d04f
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:: ; d14f
wToolgearFlags:: db ; d14f
; 76543210
; | | \- show toolgear
; | |
; | \--- transfer toolgear to window
; \-------- hide toolgear
ds 2 ; TODO
wTimeOfDayPal:: db ; d152
; Applied according to wCurTimeOfDay from wTimeOfDayPalset
wd153:: db ; d153
; 76543210
; | \- show player coords in toolgear instead of time
; \-------- switch overworld palettes according to seconds not hours
ds 3 ; TODO
wTimeOfDayPalFlags:: db ; d157
; 76543210
; \-------- disable overworld palette switch
wTimeOfDayPalset:: db ; d158
; 76543210
; \/\/\/\/
; | | | \- Map Palette for TimeOfDay 0x00
; | | \--- Map Palette for TimeOfDay 0x01
; | \----- Map Palette for TimeOfDay 0x02
; \------- Map Palette for TimeOfDay 0x03
wCurTimeOfDay:: db ; d159
SECTION "D15B", WRAM0[$D15B]
wd15b:: db ; d15b
wd15c:: db ; d15c
wd15d:: db ; d15d
wd15e:: db ; d15e
wd15f:: db ; d15f
SECTION "D163", WRAM0[$D163]
wd163:: db ; d163
wd164:: db ; d164
wTMsHMs:: db ; d165
SECTION "D19E", WRAM0[$D19E]
wItems::
wNumBagItems:: db ; d19e
SECTION "D1C8", WRAM0[$D1C8]
wNumKeyItems:: db ; d1c8
wKeyItems:: db ; d1c9
SECTION "D1DE", WRAM0[$D1DE]
wNumBallItems:: db ; d1de
wBallQuantities:: db ; d1df
ds 10
wUnknownListLengthd1ea:: db ; d1ea
wUnknownListd1eb:: db ; d1eb
SECTION "Rival's Name", WRAM0[$D256]
wRegisteredItem:: db ; d256
wRegisteredItemQuantity:: db ; d257
wRivalName:: ds 6 ; d258
ds 6
wPlayerState:: db ; d264
; 00 - walking
; 01 - bicycle
; 02 - skateboard
; 04 - surfing
wd265:: db ; d265
wd266:: db ; d266
;The starting house's map script number is stored at d29a. Others are probably nearby.
SECTION "D29A", WRAM0[$D29A]
wd29a:: db ; d29a
wd29b:: db ; d29b
wd29c:: db ; d29c
wd29d:: db ; d29d
wd29e:: db ; d29e
db
wd2a0:: db ; d2a0
SECTION "D35F", WRAM0[$D35F]
wOptions:: db ; d35f
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 ; d4a9
ds 1 ; TODO
wJoypadFlags:: db ; d4ab
; 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 ; d4b2
wd4b3:: ds 1 ; d4b3
wd4b4:: ds 1 ; d4b4
wd4b5:: ds 1 ; d4b5
wd4b6:: ds 1 ; d4b6
wd4b7:: ds 1 ; d4b7
wd4b8:: ds 1 ; d4b8
wd4b9:: ds 1 ; d4b9
SECTION "Warp data", WRAM0[$D513]
wWarpNumber:: db ; d513
wCurrMapWarpCount:: ; d514
db
wCurrMapWarps:: ; d515
REPT 32 ; TODO: confirm this
ds 5
ENDR
wCurrMapSignCount:: ; d5b5
db
wCurrMapSigns:: ; d5b6
REPT 16 ; TODO: confirm this
ds 4
ENDR
wCurrMapObjectCount:: ; d5f6
db
wCurrMapInlineTrainers:: ; d5f7
REPT 32 ; TODO: confirm this
ds 2 ; inline trainers. each pair of bytes is direction, distance
ENDR
SECTION "D637", WRAM0[$D637]
wd637:: db ; d637 ;OW battle state? $3 wild battle, $8 is trainer battle $4 is left battle, $B is load overworld? $0 is in overworld
wd638:: db ; d638 ;wd637's last written-to value
SECTION "Used sprites", WRAM0[$D643]
wBGMapAnchor:: ; d643
dw
wUsedSprites:: ; d645
dw ; This is for the player
wUsedNPCSprites:: ;d647
ds 2 * 5 ; This is for the NPCs
wUsedSpritesEnd:: ; d651
SECTION "Map header", WRAM0[$D656]
wMapGroup:: db ; d656
wMapId:: db ; d657
wOverworldMapAnchor:: ; d658
dw
wYCoord:: db ; d65a
wXCoord:: db ; d65b
wMetatileNextY:: db ; d65c
wMetatileNextX:: db ; d65d
wd65e:: ; d65e
db
wMapPartial:: ; d65f
wMapAttributesBank:: ; d65f
db
wMapTileset:: ; d660
db
wMapPermissions:: ; d661
db
wMapAttributesPtr:: ; d662
dw
wMapPartialEnd:: ; d664
wMapAttributes:: ; d664
wMapHeight:: ; d664
db
wMapWidth:: ; d665
db
wMapBlocksPointer:: ; d666
dw
wMapTextPtr::
dw
wMapScriptPtr:: ; d66a
dw
wMapObjectsPtr:: ; d66c
dw
wMapConnections:: ; d66e
db
wMapAttributesEnd:: ; d66f
wNorthMapConnection:: map_connection_struct wNorth ; d66f
wSouthMapConnection:: map_connection_struct wSouth ; d67b
wWestMapConnection:: map_connection_struct wWest ; d687
wEastMapConnection:: map_connection_struct wEast ; d693
wTileset:: ; d69f
wTilesetBank:: ; d69f
db
wTilesetBlocksAddress:: ; d6a0
dw
wTilesetTilesAddress:: ; d6a2
dw
wTilesetCollisionAddress:: ; d6a4
dw
ds 4 ; TODO
wTilesetEnd:: ; d6aa
wPartyCount:: db
wPartySpecies:: ds PARTY_LENGTH ; d6ab - d6b0
wPartyEnd:: db ; d6b1
wPartyMons::
wPartyMon1:: party_struct wPartyMon1 ; d6b2
wPartyMon2:: party_struct wPartyMon2 ; d6e2
wPartyMon3:: party_struct wPartyMon3 ; d712
wPartyMon4:: party_struct wPartyMon4 ; d742
wPartyMon5:: party_struct wPartyMon5 ; d772
wPartyMon6:: party_struct wPartyMon6 ; d7a2
wPlayerPartyEnd:: ; d7d2
wPartyMonOT:: ; d7d2
ds PARTY_LENGTH * 6
wPartyMonOTEnd:: ; d7f6
wPartyMonNicknames:: ; d7f6
ds PARTY_LENGTH * MON_NAME_LENGTH ; = $24
wPartyMonNicknamesEnd:: ; d81a
wPokedexOwned:: ; d81a
flag_array NUM_POKEMON
wPokedexOwnedEnd:: ; d839
wPokedexSeen:: ; d83a
flag_array NUM_POKEMON
wPokedexSeenEnd:: ; d859
wAnnonDex:: ds 26 ; d85a
wAnnonID:: ds 1 ; d874
wd875:: ds 1 ; d875
wd876:: ds 1 ; d876
ds 5
wd87c:: ds 1 ; d87c
ds 5
wd882:: ds 1 ; d882
wd883:: ds 1 ; d883
wd884:: ds 1 ; d884
SECTION "D8A2", WRAM0[$D8A2]
wd8a2:: ds 1 ; d8a2
wd8a3:: ds 1 ; d8a3
wd8a4:: ds 1 ; d8a4
wd8a5:: ds 1 ; d8a5
ds 5
wd8ab:: ds 1 ; d8ab
SECTION "wd8b1", WRAM0[$D8B1]
wd8b1:: ds 1 ; d8b1
ds 5
wd8b7:: ds 1 ; d8b7
wd8b8:: ds 1 ; d8b8
SECTION "D8D1", WRAM0[$D8D1]
wd8d1:: ds 1 ; d8d1
ds 5
wd8d7:: ds 1 ; d8d7
ds 5
wd8dd:: ds 1 ; d8dd
SECTION "D8E3", WRAM0[$D8E3]
wd8e3:: ds 1 ; d8e3
wd8e4:: ds 1 ; d8e4
SECTION "D8FD", WRAM0[$D8FD]
wd8fd:: ds 1 ; d8fd
SECTION "D913", WRAM0[$D913]
wd913:: ds 1 ; d913
SECTION "Wild mon buffer", WRAM0[$D91B]
UNION
wWildMons:: ; d91b
ds 41
NEXTU
ds 2
wd91d:: ds 1 ; d91d
ds 29
wd93b:: ds 1 ; d93b
ENDU
SECTION "DA3B", WRAM0[$DA3B]
wOTPartyMonOT:: db ; da3b
SECTION "DA5F", WRAM0[$DA5F]
wda5f:: db ; da5f
SECTION "DA83", WRAM0[$DA83]
wBoxListLength:: db ; da83
wBoxList:: ds MONS_PER_BOX ; da84
SECTION "DAA3", WRAM0[$DAA3]
wdaa3:: db ; daa3
wdaa4:: db ; daa4
wdaa5:: db ; daa5
SECTION "DE63", WRAM0[$DE63]
wde63:: db ; de63
SECTION "DF17", WRAM0[$DF17]
wdf17:: ds 1 ; df17
SECTION "DDFF (Patch-Only)", WRAM0[$DDFF]
wRandomAddressForDataJuggling:: ds 1 ; ddff
SECTION "DFCB", WRAM0[$DFCB]
wdfcb:: ds 1 ; dfcb
SECTION "Stack Bottom", WRAM0
; Where SP is set at game init
wStackBottom:: ; dfff
; Due to the way the stack works (`push` first decrements, then writes), the byte at $DFFF is actually wasted