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
