Files
pokecrystal/wram.asm
yenatch 023cfdbb05 Consolidate monster structs in wram and sram.
The PartyMon struct is really the box struct with volatile variables like status added.

Some other labels have been reworked.
Move structs no longer have explicit labels since their location is arbitrary and usually shared.
2014-06-12 18:32:42 -07:00

1888 lines
30 KiB
NASM

INCLUDE "includes.asm"
flag_array: MACRO
ds ((\1) + 7) / 8
ENDM
box_struct_length EQU 32
box_struct: MACRO
\1Species:: db
\1Item:: db
\1Moves:: ds NUM_MOVES
\1ID:: dw
\1Exp:: ds 3
\1StatExp::
\1HPExp:: dw
\1AtkExp:: dw
\1DefExp:: dw
\1SpdExp:: dw
\1SpcExp:: dw
\1DVs:: ds 2
\1PP:: ds NUM_MOVES
\1Happiness:: db
\1PokerusStatus:: db
\1CaughtData::
\1CaughtTime::
\1CaughtLevel:: db
\1CaughtGender::
\1CaughtLocation:: db
\1Level:: db
\1End::
ENDM
party_struct: MACRO
box_struct \1
\1Status:: db
\1Unused:: db
\1HP:: dw
\1MaxHP:: dw
\1Stats:: ; big endian
\1Attack:: dw
\1Defense:: dw
\1Speed:: dw
\1SpclAtk:: dw
\1SpclDef:: dw
\1StatsEnd::
ENDM
battle_struct: MACRO
\1Species:: db
\1Item:: db
\1Moves:: ds NUM_MOVES
\1MovesEnd::
\1DVs:: ds 2
\1PP:: ds NUM_MOVES
\1Happiness:: db
\1Level:: db
\1Status:: ds 2
\1HP:: dw
\1MaxHP:: dw
\1Stats:: ; big endian
\1Attack:: dw
\1Defense:: dw
\1Speed:: dw
\1SpclAtk:: dw
\1SpclDef:: dw
\1StatsEnd::
\1Type::
\1Type1:: db
\1Type2:: db
ENDM
channel_struct: MACRO
; Addresses are Channel1 ($c101).
\1MusicID:: ; c101
ds 2
\1MusicBank:: ; c103
ds 1
\1Flags:: ; c104
; 0: on/off
; 1: subroutine
; 2:
; 3:
; 4: noise sampling on/off
; 5:
; 6:
; 7:
ds 1
\1Flags2:: ; c105
; 0: vibrato on/off
; 1:
; 2: duty cycle on/off
; 3:
; 4:
; 5:
; 6:
; 7:
ds 1
\1Flags3:: ; c106
; 0: vibrato up/down
; 1:
; 2:
; 3:
; 4:
; 5:
; 6:
; 7:
ds 1
\1MusicAddress:: ; c107
ds 2
\1LastMusicAddress:: ; c109
ds 2
; could have been meant as a third-level address
ds 2
\1NoteFlags:: ; c10d
; 0:
; 1:
; 2:
; 3:
; 4:
; 5: rest
; 6:
; 7:
ds 1
\1Condition:: ; c10e
; used for conditional jumps
ds 1
\1DutyCycle:: ; c10f
; uses top 2 bits only
; 0: 12.5%
; 1: 25%
; 2: 50%
; 3: 75%
ds 1
\1Intensity:: ; c110
; hi: pressure
; lo: velocity
ds 1
\1Frequency::
; 11 bits
\1FrequencyLo:: ; c111
ds 1
\1FrequencyHi:: ; c112
ds 1
\1Pitch:: ; c113
; 0: rest
; 1: C
; 2: C#
; 3: D
; 4: D#
; 5: E
; 6: F
; 7: F#
; 8: G
; 9: G#
; a: A
; b: A#
; c: B
ds 1
\1Octave:: ; c114
; 0: highest
; 7: lowest
ds 1
\1StartingOctave:: ; c115
; raises existing octaves by this value
; used for repeating phrases in a higher octave to save space
ds 1
\1NoteDuration:: ; c116
; number of frames remaining in the current note
ds 1
; c117
ds 1
; c118
ds 1
\1LoopCount:: ; c119
ds 1
\1Tempo:: ; c11a
ds 2
\1Tracks:: ; c11c
; hi: l
; lo: r
ds 1
; c11d
ds 1
\1VibratoDelayCount:: ; c11e
; initialized at the value in VibratoDelay
; decrements each frame
; at 0, vibrato starts
ds 1
\1VibratoDelay:: ; c11f
; number of frames a note plays until vibrato starts
ds 1
\1VibratoExtent:: ; c120
; difference in
ds 1
\1VibratoRate:: ; c121
; counts down from a max of 15 frames
; over which the pitch is alternated
; hi: init frames
; lo: frame count
ds 1
; c122
ds 1
; c123
ds 1
; c124
ds 1
; c125
ds 1
; c126
ds 1
; c127
ds 1
\1CryPitch:: ; c128
ds 1
\1CryEcho:: ; c129
ds 1
ds 4
\1NoteLength:: ; c12e
; # frames per 16th note
ds 1
; c12f
ds 1
; c130
ds 1
; c131
ds 1
; c132
ds 1
ENDM
SECTION "tiles0",VRAM[$8000],BANK[0]
VTiles0::
SECTION "tiles1",VRAM[$8800],BANK[0]
VTiles1::
SECTION "tiles2",VRAM[$9000],BANK[0]
VTiles2::
SECTION "bgmap0",VRAM[$9800],BANK[0]
VBGMap0::
SECTION "bgmap1",VRAM[$9C00],BANK[0]
VBGMap1::
SECTION "WRAMBank0",WRAM0[$c000]
SECTION "stack",WRAM0[$c0ff]
Stack:: ; c0ff
ds -$100
SECTION "audio",WRAM0[$c100]
MusicPlaying:: ; c100
; nonzero if playing
ds 1
Channels::
Channel1:: ; c101
channel_struct Channel1
Channel2:: ; c133
channel_struct Channel2
Channel3:: ; c165
channel_struct Channel3
Channel4:: ; c197
channel_struct Channel4
SFXChannels::
Channel5:: ; c1c9
channel_struct Channel5
Channel6:: ; c1fb
channel_struct Channel6
Channel7:: ; c22d
channel_struct Channel7
Channel8:: ; c25f
channel_struct Channel8
; c291
ds 1
; c292
ds 1
; c293
ds 1
; c294
ds 1
; c295
ds 1
; c296
ds 1
; c297
ds 1
CurMusicByte:: ; c298
ds 1
CurChannel:: ; c299
ds 1
Volume:: ; c29a
; corresponds to $ff24
; 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)
ds 1
SoundOutput:: ; c29b
; corresponds to $ff25
; bit 4-7: ch1-4 so2 on/off
; bit 0-3: ch1-4 so1 on/off
ds 1
SoundInput:: ; c29c
; corresponds to $ff26
; bit 7: global on/off
; bit 0: ch1 on/off
; bit 1: ch2 on/off
; bit 2: ch3 on/off
; bit 3: ch4 on/off
ds 1
MusicID::
MusicIDLo:: ; c29d
ds 1
MusicIDHi:: ; c29e
ds 1
MusicBank:: ; c29f
ds 1
NoiseSampleAddress::
NoiseSampleAddressLo:: ; c2a0
ds 1
NoiseSampleAddressHi:: ; c2a1
ds 1
; noise delay? ; c2a2
ds 1
; c2a3
ds 1
MusicNoiseSampleSet:: ; c2a4
ds 1
SFXNoiseSampleSet:: ; c2a5
ds 1
Danger:: ; c2a6
; bit 7: on/off
; bit 4: pitch
; bit 0-3: counter
ds 1
MusicFade:: ; c2a7
; fades volume over x frames
; bit 7: fade in/out
; bit 0-5: number of frames for each volume level
; $00 = none (default)
ds 1
MusicFadeCount:: ; c2a8
ds 1
MusicFadeID::
MusicFadeIDLo:: ; c2a9
ds 1
MusicFadeIDHi:: ; c2aa
ds 1
ds 5
CryPitch:: ; c2b0
ds 1
CryEcho:: ; c2b1
ds 1
CryLength:: ; c2b2
ds 2
LastVolume:: ; c2b4
ds 1
ds 1
SFXPriority:: ; c2b6
; if nonzero, turn off music when playing sfx
ds 1
ds 6
CryTracks:: ; c2bd
; plays only in left or right track depending on what side the monster is on
; both tracks active outside of battle
ds 1
ds 1
CurSFX:: ; c2bf
; id of sfx currently playing
ds 1
wMapMusic:: ; c2c0
ds 1
SECTION "auto",WRAM0[$c2c7]
InputType:: ; c2c7
ds 1
AutoInputAddress:: ; c2c8
ds 2
AutoInputBank:: ; c2ca
ds 1
AutoInputLength:: ; c2cb
ds 1
SECTION "linkbattle",WRAM0[$c2dc]
InLinkBattle:: ; c2dc
; 0 not in link battle
; 1 link battle
; 4 mobile battle
ds 1
SECTION "scriptengine",WRAM0[$c2dd]
ScriptVar:: ; c2dd
ds 1
SECTION "tiles",WRAM0[$c2fa]
TileDown:: ; c2fa
ds 1
TileUp:: ; c2fb
ds 1
TileLeft:: ; c2fc
ds 1
TileRight:: ; c2fd
ds 1
TilePermissions:: ; c2fe
; set if tile behavior prevents
; you from walking in that direction
; bit 3: down
; bit 2: up
; bit 1: left
; bit 0: right
ds 1
SECTION "icons",WRAM0[$c3b6]
CurIcon:: ; c3b6
ds 1
SECTION "gfx",WRAM0[$c400]
Sprites:: ; c400
; 4 bytes per sprite
; 40 sprites
; struct:
; y in pixels
; x in pixels
; tile id
; attributes:
; 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 4 * 40
SpritesEnd::
TileMap:: ; c4a0
; 20x18 grid of 8x8 tiles
ds SCREEN_WIDTH * SCREEN_HEIGHT
TileMapEnd::
wBattle::
wEnemyMoveStruct:: ds MOVE_LENGTH ; c608
wPlayerMoveStruct:: ds MOVE_LENGTH ; c60f
EnemyMonNick:: ds 11 ; c616
BattleMonNick:: ds 11 ; c621
BattleMon:: battle_struct BattleMon ; c62c
ds 10
OTName:: ; c656
ds 13
CurOTMon:: ; c663
ds 1
ds 1
TypeModifier:: ; c665
; >10: super-effective
; 10: normal
; <10: not very effective
; bit 7: stab
ds 1
CriticalHit:: ; c666
; nonzero for a critical hit
ds 1
AttackMissed:: ; c667
; nonzero for a miss
ds 1
PlayerSubStatus1:: ; c668
; bit
; 7 attract
; 6 encore
; 5 endure
; 4 perish song
; 3 identified
; 2 protect
; 1 curse
; 0 nightmare
ds 1
PlayerSubStatus2:: ; c669
; bit
; 7
; 6
; 5
; 4
; 3
; 2
; 1
; 0 curled
ds 1
PlayerSubStatus3:: ; c66a
; bit
; 7 confused
; 6 flying
; 5 underground
; 4 charged
; 3 flinch
; 2
; 1 rollout
; 0 bide
ds 1
PlayerSubStatus4:: ; c66b
; bit
; 7 leech seed
; 6 rage
; 5 recharge
; 4 substitute
; 3
; 2 focus energy
; 1 mist
; 0 bide: unleashed energy
ds 1
PlayerSubStatus5:: ; c66c
; bit
; 7 cant run
; 6 destiny bond
; 5 lock-on
; 4
; 3
; 2
; 1
; 0 toxic
ds 1
EnemySubStatus1:: ; c66d
; see PlayerSubStatus1
ds 1
EnemySubStatus2:: ; c66e
; see PlayerSubStatus2
ds 1
EnemySubStatus3:: ; c66f
; see PlayerSubStatus3
ds 1
EnemySubStatus4:: ; c670
; see PlayerSubStatus4
ds 1
EnemySubStatus5:: ; c671
; see PlayerSubStatus5
ds 1
PlayerRolloutCount:: ; c672
ds 1
PlayerConfuseCount:: ; c673
ds 1
ds 1
PlayerDisableCount:: ; c675
ds 1
PlayerEncoreCount:: ; c676
ds 1
PlayerPerishCount:: ; c677
ds 1
PlayerFuryCutterCount:: ; c678
ds 1
PlayerProtectCount:: ; c679
ds 1
EnemyRolloutCount:: ; c67a
ds 1
EnemyConfuseCount:: ; c67b
ds 1
ds 1
EnemyDisableCount:: ; c67d
ds 1
EnemyEncoreCount:: ; c67e
ds 1
EnemyPerishCount:: ; c67f
ds 1
EnemyFuryCutterCount:: ; c680
ds 1
EnemyProtectCount:: ; c681
ds 1
PlayerDamageTaken:: ; c682
ds 2
EnemyDamageTaken:: ; c684
ds 2
ds 3
ds 1
BattleScriptBuffer:: ; c68a
ds 40
BattleScriptBufferLoc:: ; c6b2
ds 2
ds 2
PlayerStats:: ; c6b6
ds 10
ds 1
EnemyStats:: ; c6c1
ds 10
ds 1
PlayerStatLevels:: ; c6cc
; 07 neutral
PlayerAtkLevel:: ; c6cc
ds 1
PlayerDefLevel:: ; c6cd
ds 1
PlayerSpdLevel:: ; c6ce
ds 1
PlayerSAtkLevel:: ; c6cf
ds 1
PlayerSDefLevel:: ; c6d0
ds 1
PlayerAccLevel:: ; c6d1
ds 1
PlayerEvaLevel:: ; c6d2
ds 1
; c6d3
ds 1
PlayerStatLevelsEnd::
EnemyStatLevels:: ; c6d4
; 07 neutral
EnemyAtkLevel:: ; c6d4
ds 1
EnemyDefLevel:: ; c6d5
ds 1
EnemySpdLevel:: ; c6d6
ds 1
EnemySAtkLevel:: ; c6d7
ds 1
EnemySDefLevel:: ; c6d8
ds 1
EnemyAccLevel:: ; c6d9
ds 1
EnemyEvaLevel:: ; c6da
ds 1
; c6db
ds 1
EnemyTurnsTaken:: ; c6dc
ds 1
PlayerTurnsTaken:: ; c6dd
ds 1
ds 1
PlayerSubstituteHP:: ; c6df
ds 1
EnemySubstituteHP:: ; c6e0
ds 1
ds 2
CurPlayerMove:: ; c6e3
ds 1
CurEnemyMove:: ; c6e4
ds 1
LinkBattleRNCount:: ; c6e5
; how far through the prng stream
ds 1
ds 3
CurEnemyMoveNum:: ; c6e9
ds 1
ds 10
AlreadyDisobeyed:: ; c6f4
ds 1
DisabledMove:: ; c6f5
ds 1
EnemyDisabledMove:: ; c6f6
ds 1
ds 1
; exists so you can't counter on switch
LastEnemyCounterMove:: ; c6f8
ds 1
LastPlayerCounterMove:: ; c6f9
ds 1
ds 1
AlreadyFailed:: ; c6fb
ds 1
ds 3
PlayerScreens:: ; c6ff
; bit
; 4 reflect
; 3 light screen
; 2 safeguard
; 0 spikes
ds 1
EnemyScreens:: ; c700
; see PlayerScreens
ds 1
PlayerSafeguardCount:: ; c701
ds 1
PlayerLightScreenCount:: ; c702
ds 1
PlayerReflectCount:: ; c703
ds 1
ds 1
EnemySafeguardCount:: ; c705
ds 1
EnemyLightScreenCount:: ; c706
ds 1
EnemyReflectCount:: ; c707
ds 1
ds 2
Weather:: ; c70a
; 00 normal
; 01 rain
; 02 sun
; 03 sandstorm
; 04 rain stopped
; 05 sunliight faded
; 06 sandstorm subsided
ds 1
WeatherCount:: ; c70b
; # turns remaining
ds 1
LoweredStat:: ; c70c
ds 1
EffectFailed:: ; c70d
ds 1
FailedMessage:: ; c70e
ds 1
ds 1
wPlayerIsSwitching:: ds 1 ; c710
wEnemyIsSwitching:: ds 1 ; c711
PlayerUsedMoves:: ; c712
; add a move that has been used once by the player
; added in order of use
ds 4
ds 5
LastPlayerMove:: ; c71b
ds 1
LastEnemyMove:: ; c71c
ds 1
ds 23
BattleEnded:: ; c734
ds 1
ds 12
wBattleEnd::
; c741
SECTION "overworldmap",WRAM0[$c800]
OverworldMap:: ; c800
ds 1300
OverworldMapEnd::
ds 12
SECTION "gfx2",WRAM0[$cd20]
CreditsPos::
BGMapBuffer:: ; cd20
ds 2
CreditsTimer:: ; cd22
ds 1
ds 37
BGMapPalBuffer:: ; cd48
ds 40
BGMapBufferPtrs:: ; cd70
; 20 bg map addresses (16x8 tiles)
ds 40
SGBPredef:: ; cd98
ds 1
PlayerHPPal:: ; cd99
ds 1
EnemyHPPal:: ; cd9a
ds 1
ds 62
AttrMap:: ; cdd9
; 20x18 grid of palettes for 8x8 tiles
; read horizontally from the top row
; bit 3: vram bank
; bit 0-2: palette id
ds SCREEN_WIDTH * SCREEN_HEIGHT
ds 30
MonType:: ; cf5f
ds 1
CurSpecies:: ; cf60
ds 1
ds 6
Requested2bpp:: ; cf67
ds 1
Requested2bppSource:: ; cf68
ds 2
Requested2bppDest:: ; cf6a
ds 2
Requested1bpp:: ; cf6c
ds 1
Requested1bppSource:: ; cf6d
ds 2
Requested1bppDest:: ; cf6f
ds 2
ds 3
MenuSelection:: ; cf74
ds 1
SECTION "VBlank",WRAM0[$cfb1]
OverworldDelay:: ; cfb1
ds 1
TextDelayFrames:: ; cfb2
ds 1
VBlankOccurred:: ; cfb3
ds 1
PredefID:: ; cfb4
ds 1
PredefTemp:: ; cfb5
ds 2
PredefAddress:: ; cfb7
ds 2
ds 3
GameTimerPause:: ; cfbc
; bit 0
ds 1
SECTION "Engine",WRAM0[$cfc2]
FXAnimID::
FXAnimIDLo:: ; cfc2
ds 1
FXAnimIDHi:: ; cfc3
ds 1
ds 2
TileAnimationTimer:: ; cfc6
ds 1
ds 5
Options:: ; cfcc
; 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
ds 1
ds 1
TextBoxFrame:: ; cfce
; bits 0-2: textbox frame 0-7
ds 1
ds 1
GBPrinter:: ; cfd0
; bit 0-6: brightness
; lightest: $00
; lighter: $20
; normal: $40 (default)
; darker: $60
; darkest: $7F
ds 1
Options2:: ; cfd1
; bit 1: menu account off/on
ds 1
ds 46
SECTION "WRAMBank1",WRAMX[$d000],BANK[1]
ds 2
DefaultFlypoint:: ; d002
ds 1
; d003
ds 1
; d004
ds 1
StartFlypoint:: ; d005
ds 1
EndFlypoint:: ; d006
ds 1
MovementBuffer:: ; d007
ds 55
MenuItemsList::
CurFruitTree::
CurInput::
EngineBuffer1:: ; d03e
ds 1
CurFruit:: ; d03f
ds 1
MartPointer:: ; d040
ds 2
MovementAnimation:: ; d042
ds 1
WalkingDirection:: ; d043
ds 1
FacingDirection:: ; d044
ds 1
WalkingX:: ; d045
ds 1
WalkingY:: ; d046
ds 1
WalkingTile:: ; d047
ds 1
ds 43
StringBuffer1:: ; d073
ds 19
StringBuffer2:: ; d086
ds 19
StringBuffer3:: ; d099
ds 19
StringBuffer4:: ; d0ac
ds 19
StringBuffer5:: ; d0bf
ds 19
ds 2
CurBattleMon:: ; d0d4
ds 1
CurMoveNum:: ; d0d5
ds 1
ds 23
VramState:: ; d0ed
; bit 0: overworld sprite updating on/off
; bit 6: something to do with text
; bit 7: on when surf initiates
; flickers when climbing waterfall
ds 1
ds 2
CurMart:: ; d0f0
ds 16
CurMartEnd::
ds 6
CurItem:: ; d106
ds 1
ds 1
CurPartySpecies:: ; d108
ds 1
CurPartyMon:: ; d109
; contains which monster in a party
; is being dealt with at the moment
; 0-5
ds 1
ds 4
TempMon::
party_struct TempMon
ds 3
PartyMenuActionText:: ; d141
ds 1
ds 1
CurPartyLevel:: ; d143
ds 1
SECTION "UsedSprites",WRAMX[$d154],BANK[1]
UsedSprites:: ; d154
ds 32
SECTION "map",WRAMX[$d19d],BANK[1]
; both are in blocks (2x2 walkable tiles, 4x4 graphics tiles)
MapHeader:: ; d19d
MapBorderBlock:: ; d19d
ds 1
MapHeight:: ; d19e
ds 1
MapWidth:: ; d19f
ds 1
MapBlockDataBank:: ; d1a0
ds 1
MapBlockDataPointer:: ; d1a1
ds 2
MapScriptHeaderBank:: ; d1a3
ds 1
MapScriptHeaderPointer:: ; d1a4
ds 2
MapEventHeaderPointer:: ; d1a6
ds 2
; bit set
MapConnections:: ; d1a8
ds 1
NorthMapConnection:: ; d1a9
NorthConnectedMapGroup:: ; d1a9
ds 1
NorthConnectedMapNumber:: ; d1aa
ds 1
NorthConnectionStripPointer:: ; d1ab
ds 2
NorthConnectionStripLocation:: ; d1ad
ds 2
NorthConnectionStripLength:: ; d1af
ds 1
NorthConnectedMapWidth:: ; d1b0
ds 1
NorthConnectionStripYOffset:: ; d1b1
ds 1
NorthConnectionStripXOffset:: ; d1b2
ds 1
NorthConnectionWindow:: ; d1b3
ds 2
SouthMapConnection:: ; d1b5
SouthConnectedMapGroup:: ; d1b5
ds 1
SouthConnectedMapNumber:: ; d1b6
ds 1
SouthConnectionStripPointer:: ; d1b7
ds 2
SouthConnectionStripLocation:: ; d1b9
ds 2
SouthConnectionStripLength:: ; d1bb
ds 1
SouthConnectedMapWidth:: ; d1bc
ds 1
SouthConnectionStripYOffset:: ; d1bd
ds 1
SouthConnectionStripXOffset:: ; d1be
ds 1
SouthConnectionWindow:: ; d1bf
ds 2
WestMapConnection:: ; d1c1
WestConnectedMapGroup:: ; d1c1
ds 1
WestConnectedMapNumber:: ; d1c2
ds 1
WestConnectionStripPointer:: ; d1c3
ds 2
WestConnectionStripLocation:: ; d1c5
ds 2
WestConnectionStripLength:: ; d1c7
ds 1
WestConnectedMapWidth:: ; d1c8
ds 1
WestConnectionStripYOffset:: ; d1c9
ds 1
WestConnectionStripXOffset:: ; d1ca
ds 1
WestConnectionWindow:: ; d1cb
ds 2
EastMapConnection:: ; d1cd
EastConnectedMapGroup:: ; d1cd
ds 1
EastConnectedMapNumber:: ; d1ce
ds 1
EastConnectionStripPointer:: ; d1cf
ds 2
EastConnectionStripLocation:: ; d1d1
ds 2
EastConnectionStripLength:: ; d1d3
ds 1
EastConnectedMapWidth:: ; d1d4
ds 1
EastConnectionStripYOffset:: ; d1d5
ds 1
EastConnectionStripXOffset:: ; d1d6
ds 1
EastConnectionWindow:: ; d1d7
ds 2
TilesetHeader::
TilesetBank:: ; d1d9
ds 1
TilesetAddress:: ; d1da
ds 2
TilesetBlocksBank:: ; d1dc
ds 1
TilesetBlocksAddress:: ; d1dd
ds 2
TilesetCollisionBank:: ; d1df
ds 1
TilesetCollisionAddress:: ; d1e0
ds 2
TilesetAnim:: ; d1e2
; bank 3f
ds 2
; unused ; d1e4
ds 2
TilesetPalettes:: ; d1e6
; bank 3f
ds 2
EvolvableFlags:: ; d1e8
flag_array PARTY_LENGTH
ds 1
MagikarpLength::
Buffer1:: ; d1ea
ds 1
MovementType::
Buffer2:: ; d1eb
ds 1
SECTION "BattleMons2",WRAMX[$d1fa],BANK[1]
LinkBattleRNs:: ; d1fa
ds 10
TempEnemyMonSpecies:: ds 1 ; d204
TempBattleMonSpecies:: ds 1 ; d205
EnemyMon:: battle_struct EnemyMon ; d206
EnemyMonBaseStats:: ds 5 ; d226
EnemyMonCatchRate:: db ; d22b
EnemyMonBaseExp:: db ; d22c
EnemyMonEnd::
IsInBattle:: ; d22d
; 0: overworld
; 1: wild battle
; 2: trainer battle
ds 1
ds 1
OtherTrainerClass:: ; d22f
; class (Youngster, Bug Catcher, etc.) of opposing trainer
; 0 if opponent is a wild Pokémon, not a trainer
ds 1
BattleType:: ; d230
; $00 normal
; $01
; $02
; $03 dude
; $04 fishing
; $05 roaming
; $06
; $07 shiny
; $08 headbutt/rock smash
; $09
; $0a force Item1
; $0b
; $0c suicune
ds 1
OtherTrainerID:: ; d231
; which trainer of the class that you're fighting
; (Joey, Mikey, Albert, etc.)
ds 1
ds 1
TrainerClass:: ; d233
ds 1
UnownLetter:: ; d234
ds 1
ds 1
CurBaseData:: ; d236
BaseDexNo:: ; d236
ds 1
BaseStats:: ; d237
BaseHP:: ; d237
ds 1
BaseAttack:: ; d238
ds 1
BaseDefense:: ; d239
ds 1
BaseSpeed:: ; d23a
ds 1
BaseSpecialAttack:: ; d23b
ds 1
BaseSpecialDefense:: ; d23c
ds 1
BaseType:: ; d23d
BaseType1:: ; d23d
ds 1
BaseType2:: ; d23e
ds 1
BaseCatchRate:: ; d23f
ds 1
BaseExp:: ; d240
ds 1
BaseItems:: ; d241
ds 2
BaseGender:: ; d243
ds 1
BaseUnknown1:: ; d244
ds 1
BaseEggSteps:: ; d245
ds 1
BaseUnknown2:: ; d246
ds 1
BasePicSize:: ; d247
ds 1
BasePadding:: ; d248
ds 4
BaseGrowthRate:: ; d24c
ds 1
BaseEggGroups:: ; d24d
ds 1
BaseTMHM:: ; d24e
ds 8
CurDamage:: ; d256
ds 2
SECTION "TimeOfDay",WRAMX[$d269],BANK[1]
TimeOfDay:: ; d269
ds 1
SECTION "OTParty",WRAMX[$d280],BANK[1]
OTPartyCount:: ds 1 ; d280
OTPartySpecies:: ds 6 ; d281
OTPartyEnd:: ds 1
OTPartyMon1:: party_struct OTPartyMon1 ; d288
OTPartyMon2:: party_struct OTPartyMon2 ; d2b8
OTPartyMon3:: party_struct OTPartyMon3 ; d2e8
OTPartyMon4:: party_struct OTPartyMon4 ; d318
OTPartyMon5:: party_struct OTPartyMon5 ; d348
OTPartyMon6:: party_struct OTPartyMon6 ; d378
OTPartyMonOT:: ds 11 * 6 ; d3a8
OTPartyMonNicknames:: ds 11 * 6 ; d3ea
SECTION "Map Events", WRAMX[$d432], BANK[1]
MapStatus:: ; d432
ds 1
MapEventStatus:: ; d433
ds 1
ScriptFlags:: ; d434
ds 1
ScriptFlags2:: ; d435
ds 1
ScriptFlags3:: ; d436
ds 1
ScriptMode:: ; d437
ds 1
ScriptRunning:: ; d438
ds 1
ScriptBank:: ; d439
ds 1
ScriptPos:: ; d43a
ds 2
ds 17
ScriptDelay:: ; d44d
ds 1
SECTION "Player",WRAMX[$d472],BANK[1]
PlayerGender:: ; d472
; bit 0:
; 0 male
; 1 female
ds 1
ds 8
PlayerID:: ; d47b
ds 2
PlayerName:: ; d47d
ds 11
MomsName:: ; d488
ds 11
RivalName:: ; d493
ds 11
RedsName:: ; d49e
ds 11
GreensName:: ; d4a9
ds 11
ds 2
; init time set at newgame
StartDay:: ; d4b6
ds 1
StartHour:: ; d4b7
ds 1
StartMinute:: ; d4b8
ds 1
StartSecond:: ; d4b9
ds 1
ds 9
GameTimeCap:: ; d4c3
ds 1
GameTimeHours:: ; d4c4
ds 2
GameTimeMinutes:: ; d4c6
ds 1
GameTimeSeconds:: ; d4c7
ds 1
GameTimeFrames:: ; d4c8
ds 1
ds 2
CurDay:: ; d4cb
ds 1
ds 10
ObjectStructs::
PlayerStruct:: ; d4d6
ds 2
PlayerSprite:: ; d4d8
ds 1
ds 3
PlayerPalette:: ; d4dc
ds 1
ds 1
PlayerDirection:: ; d4de
; uses bits 2 and 3 / $0c / %00001100
; %00 down
; %01 up
; %10 left
; $11 right
ds 1
ds 2
PlayerAction:: ; d4e1
; 1 standing
; 2 walking
; 4 spinning
; 6 fishing
ds 1
ds 1
PlayerFacing:: ; d4e3
ds 1
StandingTile:: ; d4e4
ds 1
StandingTile2:: ; d4e5
ds 1
; relative to the map struct including borders
MapX:: ; d4e6
ds 1
MapY:: ; d4e7
ds 1
MapX2:: ; d4e8
ds 1
MapY2:: ; d4e9
ds 1
ds 3
; relative to the bg map, in px
PlayerSpriteX:: ; d4ed
ds 1
PlayerSpriteY:: ; d4ee
ds 1
ds 15
ObjectStruct1:: ; d4fe
ds 40
ObjectStruct2:: ; d526
ds 40
ObjectStruct3:: ; d54e
ds 40
ObjectStruct4:: ; d576
ds 40
ObjectStruct5:: ; d59e
ds 40
ObjectStruct6:: ; d5c6
ds 40
ObjectStruct7:: ; d5ee
ds 40
ObjectStruct8:: ; d616
ds 40
ObjectStruct9:: ; d63e
ds 40
ObjectStruct10:: ; d666
ds 40
ObjectStruct11:: ; d68e
ds 40
ObjectStruct12:: ; d6b6
ds 40
; d6de
SECTION "Objects",WRAMX[$d71e],BANK[1]
MapObjects:: ; d71e
ds OBJECT_LENGTH * NUM_OBJECTS
SECTION "VariableSprites",WRAMX[$d82e],BANK[1]
VariableSprites:: ; d82e
ds $10
SECTION "Status",WRAMX[$d841],BANK[1]
TimeOfDayPal:: ; d841
ds 1
ds 4
; d846
ds 1
ds 1
CurTimeOfDay:: ; d848
ds 1
ds 3
StatusFlags:: ; d84c
ds 1
StatusFlags2:: ; d84d
ds 1
Money:: ; d84e
ds 3
wMomsMoney:: ; d851
ds 3
wMomSavingMoney:: ; d854
ds 1
Coins:: ; d855
ds 2
Badges::
JohtoBadges:: ; d857
ds 1
KantoBadges:: ; d858
ds 1
SECTION "Items",WRAMX[$d859],BANK[1]
TMsHMs:: ; d859
ds 57
TMsHMsEnd::
NumItems:: ; d892
ds 1
Items:: ; d893
ds 41
ItemsEnd::
NumKeyItems:: ; d8bc
ds 1
KeyItems:: ; d8bd
ds 26
KeyItemsEnd::
NumBalls:: ; d8d7
ds 1
Balls:: ; d8d8
ds 25
BallsEnd::
PCItems:: ; d8f1
ds 101
PCItemsEnd::
SECTION "overworld",WRAMX[$d95b],BANK[1]
WhichRegisteredItem:: ; d95b
ds 1
RegisteredItem:: ; d95c
ds 1
PlayerState:: ; d95d
ds 1
SECTION "scriptram",WRAMX[$d962],BANK[1]
MooMooBerries:: ; d962
ds 1 ; how many berries fed to MooMoo
UndergroundSwitchPositions:: ; d963
ds 1 ; which positions the switches are in
FarfetchdPosition:: ; d964
ds 1 ; which position the ilex farfetch'd is in
SECTION "Map Triggers", WRAMX[$d972], BANK[1]
wPokecenter2FTrigger:: ds 1 ; d972
wTradeCenterTrigger:: ds 1 ; d973
wColosseumTrigger:: ds 1 ; d974
wTimeCapsuleTrigger:: ds 1 ; d975
wPowerPlantTrigger:: ds 1 ; d976
wCeruleanGymTrigger:: ds 1 ; d977
wRoute25Trigger:: ds 1 ; d978
wTrainerHouseB1FTrigger:: ds 1 ; d979
wVictoryRoadGateTrigger:: ds 1 ; d97a
wSaffronTrainStationTrigger:: ds 1 ; d97b
wRoute16GateTrigger:: ds 1 ; d97c
wRoute1718GateTrigger:: ds 1 ; d97d
wIndigoPlateauPokecenter1FTrigger:: ds 1 ; d97e
wWillsRoomTrigger:: ds 1 ; d97f
wKogasRoomTrigger:: ds 1 ; d980
wBrunosRoomTrigger:: ds 1 ; d981
wKarensRoomTrigger:: ds 1 ; d982
wLancesRoomTrigger:: ds 1 ; d983
wHallOfFameTrigger:: ds 1 ; d984
wRoute27Trigger:: ds 1 ; d985
wNewBarkTownTrigger:: ds 1 ; d986
wElmsLabTrigger:: ds 1 ; d987
wKrissHouse1FTrigger:: ds 1 ; d988
wRoute29Trigger:: ds 1 ; d989
wCherrygroveCityTrigger:: ds 1 ; d98a
wMrPokemonsHouseTrigger:: ds 1 ; d98b
wRoute32Trigger:: ds 1 ; d98c
wRoute35NationalParkGateTrigger:: ds 1 ; d98d
wRoute36Trigger:: ds 1 ; d98e
wRoute36NationalParkGateTrigger:: ds 1 ; d98f
wAzaleaTownTrigger:: ds 1 ; d990
wGoldenrodGymTrigger:: ds 1 ; d991
wGoldenrodMagnetTrainStationTrigger:: ds 1 ; d992
wGoldenrodPokecenter1FTrigger:: ds 1 ; d993
wOlivineCityTrigger:: ds 1 ; d994
wRoute34Trigger:: ds 1 ; d995
wRoute34IlexForestGateTrigger:: ds 1 ; d996
wEcruteakHouseTrigger:: ds 1 ; d997
wWiseTriosRoomTrigger:: ds 1 ; d998
wEcruteakPokecenter1FTrigger:: ds 1 ; d999
wEcruteakGymTrigger:: ds 1 ; d99a
wMahoganyTownTrigger:: ds 1 ; d99b
wRoute42Trigger:: ds 1 ; d99c
wCianwoodCityTrigger:: ds 1 ; d99d
wBattleTower1FTrigger:: ds 1 ; d99e
wBattleTowerBattleRoomTrigger:: ds 1 ; d99f
wBattleTowerElevatorTrigger:: ds 1 ; d9a0
wBattleTowerHallwayTrigger:: ds 1 ; d9a1
wBattleTowerOutsideTrigger:: ds 1 ; d9a2
wRoute43GateTrigger:: ds 1 ; d9a3
wMountMoonTrigger:: ds 1 ; d9a4
wSproutTower3FTrigger:: ds 1 ; d9a5
wTinTower1FTrigger:: ds 1 ; d9a6
wBurnedTower1FTrigger:: ds 1 ; d9a7
wBurnedTowerB1FTrigger:: ds 1 ; d9a8
wRadioTower5FTrigger:: ds 1 ; d9a9
wRuinsOfAlphOutsideTrigger:: ds 1 ; d9aa
wRuinsOfAlphResearchCenterTrigger:: ds 1 ; d9ab
wRuinsOfAlphHoOhChamberTrigger:: ds 1 ; d9ac
wRuinsOfAlphKabutoChamberTrigger:: ds 1 ; d9ad
wRuinsOfAlphOmanyteChamberTrigger:: ds 1 ; d9ae
wRuinsOfAlphAerodactylChamberTrigger:: ds 1 ; d9af
wRuinsOfAlphInnerChamberTrigger:: ds 1 ; d9b0
wMahoganyMart1FTrigger:: ds 1 ; d9b1
wTeamRocketBaseB1FTrigger:: ds 1 ; d9b2
wTeamRocketBaseB2FTrigger:: ds 1 ; d9b3
wTeamRocketBaseB3FTrigger:: ds 1 ; d9b4
wUndergroundPathSwitchRoomEntrancesTrigger:: ds 1 ; d9b5
wSilverCaveRoom3Trigger:: ds 1 ; d9b6
wVictoryRoadTrigger:: ds 1 ; d9b7
wDragonsDenB1FTrigger:: ds 1 ; d9b8
wDragonShrineTrigger:: ds 1 ; d9b9
wOlivinePortTrigger:: ds 1 ; d9ba
wVermilionPortTrigger:: ds 1 ; d9bb
wFastShip1FTrigger:: ds 1 ; d9bc
wFastShipB1FTrigger:: ds 1 ; d9bd
wMountMoonSquareTrigger:: ds 1 ; d9be
wMobileTradeRoomMobileTrigger:: ds 1 ; d9bf
wMobileBattleRoomTrigger:: ds 1 ; d9c0
SECTION "Events",WRAMX[$da72],BANK[1]
EventFlags:: ; da72
;RoomDecorations:: ; dac6
;TeamRocketAzaleaTownAttackEvent:: ; db51
;PoliceAtElmsLabEvent:: ; db52
;SalesmanMahoganyTownEvent:: ; db5c
;RedGyaradosEvent:: ; db5c
flag_array 2000
; db6c
SECTION "Boxes",WRAMX[$db72],BANK[1]
wCurBox:: ; db72
ds 1
ds 2
; 8 chars + $50
wBoxNames:: ds 9 * NUM_BOXES ; db75
SECTION "bike", WRAMX[$dbf5],BANK[1]
BikeFlags:: ; dbf5
; bit 1: always on bike
; bit 2: downhill
ds 1
SECTION "decorations", WRAMX[$dc0f],BANK[1]
; Sprite id of each decoration
Bed:: ; dc0f
ds 1
Carpet:: ; dc10
ds 1
Plant:: ; dc11
ds 1
Poster:: ; dc12
ds 1
Console:: ; dc13
ds 1
LeftOrnament:: ; dc14
ds 1
RightOrnament:: ; dc15
ds 1
BigDoll:: ; dc16
ds 1
SECTION "fruittrees", WRAMX[$dc27],BANK[1]
FruitTreeFlags:: ; dc27
ds 1
SECTION "steps", WRAMX[$dc73],BANK[1]
StepCount:: ; dc73
ds 1
PoisonStepCount:: ; dc74
ds 1
SECTION "Visited Spawn Points", WRAMX[$dca5],BANK[1]
VisitedSpawns:: ; dca5
flag_array 27
SECTION "BackupMapInfo", WRAMX[$dcad],BANK[1]
; used on maps like second floor pokécenter, which are reused, so we know which
; map to return to
BackupMapGroup:: ; dcad
ds 1
BackupMapNumber:: ; dcae
ds 1
SECTION "PlayerMapInfo", WRAMX[$dcb4],BANK[1]
WarpNumber:: ; dcb4
ds 1
MapGroup:: ; dcb5
ds 1 ; map group of current map
MapNumber:: ; dcb6
ds 1 ; map number of current map
YCoord:: ; dcb7
ds 1 ; current y coordinate relative to top-left corner of current map
XCoord:: ; dcb8
ds 1 ; current x coordinate relative to top-left corner of current map
SECTION "PlayerParty",WRAMX[$dcd7],BANK[1]
PartyCount:: ; dcd7
ds 1 ; number of Pokémon in party
PartySpecies:: ; dcd8
ds 6 ; species of each Pokémon in party
PartyEnd:: ; dcde
ds 1 ; legacy functions don't check PartyCount
PartyMons::
PartyMon1:: party_struct PartyMon1 ; dcdf
PartyMon2:: party_struct PartyMon2 ; dd0f
PartyMon3:: party_struct PartyMon3 ; dd3f
PartyMon4:: party_struct PartyMon4 ; dd6f
PartyMon5:: party_struct PartyMon5 ; dd9f
PartyMon6:: party_struct PartyMon6 ; ddcf
PartyMonOT:: ds 11 * 6 ; ddff
PartyMonNicknames:: ds 11 * 6 ; de41
PartyMonNicknamesEnd::
SECTION "Pokedex", WRAMX[$de99], BANK[1]
PokedexCaught:: ; de99
flag_array 251
EndPokedexCaught::
PokedexSeen:: ; deb9
flag_array 251
EndPokedexSeen::
UnownDex:: ; ded9
ds 26
UnlockedUnowns:: ; def3
ds 1
ds 1
wDaycareMan:: ; def5
; bit 7: active
; bit 6: monsters are compatible
; bit 5: egg ready
; bit 0: monster 1 in daycare
ds 1
wBreedMon1::
wBreedMon1Nick:: ds PKMN_NAME_LENGTH ; def6
wBreedMon1OT:: ds NAME_LENGTH ; df01
wBreedMon1Stats:: box_struct wBreedMon1 ; df0c
wDaycareLady:: ; df2c
; bit 7: active
; bit 0: monster 2 in daycare
ds 1
wStepsToEgg:: ; df2d
ds 1
wDittoInDaycare:: ; df2e
; z: yes
; nz: no
ds 1
wBreedMon2::
wBreedMon2Nick:: ds PKMN_NAME_LENGTH ; df2f
wBreedMon2OT:: ds NAME_LENGTH ; df3a
wBreedMon2Stats:: box_struct wBreedMon2 ; df45
wEggNick:: ds PKMN_NAME_LENGTH ; df65
wEggOT:: ds NAME_LENGTH ; df70
wEggMon:: box_struct wEggMon ; df7b
ds 1
wContestMon:: party_struct wContestMon ; df9c
ds 3
roam_struct: MACRO
\1Species:: db
\1Level:: db
\1MapGroup:: db
\1MapNumber:: db
\1HP:: ds 1
\1DVs:: ds 2
ENDM
wRoamMon1:: roam_struct wRoamMon1 ; dfcf
wRoamMon2:: roam_struct wRoamMon2 ; dfd6
wRoamMon3:: roam_struct wRoamMon3 ; dfdd
SECTION "WRAMBank5",WRAMX[$d000],BANK[5]
; 8 4-color palettes
Unkn1Pals:: ; d000
ds $40
Unkn2Pals:: ; d040
ds $40
BGPals:: ; d080
ds $40
OBPals:: ; d0c0
ds $40
LYOverrides:: ; d100
ds 144
LYOverridesEnd::
ds 112
LYOverridesBackup:: ; d200
ds 144
LYOverridesBackupEnd::
SECTION "Battle Animations", WRAMX[$d30a], BANK[5]
ActiveAnimObjects:: ; d30a
ds 4 * 40
ds 80
ActiveBGEffects:: ; d3fa
ds 4 * 5
ds 1
BattleAnimFlags:: ; d40f
ds 1
BattleAnimAddress:: ; d410
ds 2
BattleAnimDuration:: ; d412
ds 1
BattleAnimParent:: ; d413
ds 2
BattleAnimLoops:: ; d415
ds 1
BattleAnimVar:: ; d416
ds 1
BattleAnimByte:: ; d417
ds 1
ds 1
BattleAnimTemps:: ; d419
ds 8
SECTION "Scratch", SRAM, BANK[0]
SECTION "SRAM Bank 1", SRAM, BANK[1]
SECTION "BoxMons", SRAM[$ad10], BANK[1]
sBoxCount:: ds 1 ; ad10
sBoxSpecies:: ds MONS_PER_BOX ; ad11
ds 1
sBoxMons:: ; ad26
sBoxMon1:: box_struct sBoxMon1
sBoxMon2::
ds box_struct_length * (MONS_PER_BOX +- 1)
sBoxMonOT:: ds 11 * 20 ; afa6
sBoxMonNicknames:: ds 11 * 20 ; b082
sBoxMonNicknamesEnd::
; b15e