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: Channel1MusicID: ; c101 ds 2 Channel1MusicBank: ; c103 ds 1 Channel1Flags: ; c104 ; 0: on/off ; 1: subroutine ; 2: ; 3: ; 4: noise sampling on/off ; 5: ; 6: ; 7: ds 1 Channel1Flags2: ; c105 ; 0: vibrato on/off ; 1: ; 2: duty cycle on/off ; 3: ; 4: ; 5: ; 6: ; 7: ds 1 Channel1Flags3: ; c106 ; 0: vibrato up/down ; 1: ; 2: ; 3: ; 4: ; 5: ; 6: ; 7: ds 1 Channel1MusicAddress: ; c107 ds 2 Channel1LastMusicAddress: ; c109 ds 2 ; could have been meant as a third-level address ds 2 Channel1NoteFlags: ; c10d ; 0: ; 1: ; 2: ; 3: ; 4: ; 5: rest ; 6: ; 7: ds 1 Channel1Condition: ; c10e ; used for conditional jumps ds 1 Channel1DutyCycle: ; c10f ; uses top 2 bits only ; 0: 12.5% ; 1: 25% ; 2: 50% ; 3: 75% ds 1 Channel1Intensity: ; c110 ; hi: pressure ; lo: velocity ds 1 Channel1Frequency: ; 11 bits Channel1FrequencyLo: ; c111 ds 1 Channel1FrequencyHi: ; c112 ds 1 Channel1Pitch: ; 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 Channel1Octave: ; c114 ; 0: highest ; 7: lowest ds 1 Channel1StartingOctave ; c115 ; raises existing octaves by this value ; used for repeating phrases in a higher octave to save space ds 1 Channel1NoteDuration: ; c116 ; number of frames remaining in the current note ds 1 ; c117 ds 1 ; c118 ds 1 Channel1LoopCount ; c119 ds 1 Channel1Tempo: ; c11a ds 2 Channel1Tracks: ; c11c ; hi: l ; lo: r ds 1 ; c11d ds 1 Channel1VibratoDelayCount: ; c11e ; initialized at the value in VibratoDelay ; decrements each frame ; at 0, vibrato starts ds 1 Channel1VibratoDelay: ; c11f ; number of frames a note plays until vibrato starts ds 1 Channel1VibratoExtent: ; c120 ; difference in ds 1 Channel1VibratoRate: ; 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 Channel1CryPitch: ; c128 ds 1 Channel1CryEcho: ; c129 ds 1 ds 4 Channel1NoteLength: ; c12e ; # frames per 16th note ds 1 ; c12f ds 1 ; c130 ds 1 ; c131 ds 1 ; c132 ds 1 ; end Channel2: ; c133 ds 50 Channel3: ; c165 ds 50 Channel4: ; c197 ds 50 SFXChannels: Channel5: ; c1c9 ds 50 Channel6: ; c1fb ds 50 Channel7: ; c22d ds 50 Channel8: ; c25f ds 50 ; 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 CurMusic: ; c2c0 ; id of music currently playing ds 1 SECTION "auto",WRAM0[$c2c7] InputType: ; c2c7 AUTO_INPUT EQU $ff 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 160 SpritesEnd TileMap: ; c4a0 ; 20x18 grid of 8x8 tiles ds 360 SECTION "BattleMons",WRAM0[$c608] EnemyMoveStruct: EnemyMoveAnimation: ; c608 ds 1 EnemyMoveEffect: ; c609 ds 1 EnemyMovePower: ; c60a ds 1 EnemyMoveType: ; c60b ds 1 EnemyMoveAccuracy: ; c60c ds 1 EnemyMovePP: ; c60d ds 1 EnemyMoveEffectChance: ; c60e ds 1 PlayerMoveStruct: PlayerMoveAnimation: ; c60f ds 1 PlayerMoveEffect: ; c610 ds 1 PlayerMovePower: ; c611 ds 1 PlayerMoveType: ; c612 ds 1 PlayerMoveAccuracy: ; c613 ds 1 PlayerMovePP: ; c614 ds 1 PlayerMoveEffectChance: ; c615 ds 1 EnemyMonNick: ; c616 ds 11 BattleMonNick: ; c621 ds 11 BattleMonSpecies: ; c62c ds 1 BattleMonItem: ; c62d ds 1 BattleMonMoves: BattleMonMove1: ; c62e ds 1 BattleMonMove2: ; c62f ds 1 BattleMonMove3: ; c630 ds 1 BattleMonMove4: ; c631 ds 1 BattleMonDVs: BattleMonAtkDefDV: ; c632 ds 1 BattleMonSpdSpclDV: ; c633 ds 1 BattleMonPP: BattleMonPPMove1: ; c634 ds 1 BattleMonPPMove2: ; c635 ds 1 BattleMonPPMove3: ; c636 ds 1 BattleMonPPMove4: ; c637 ds 1 BattleMonHappiness: ; c638 ds 1 BattleMonLevel: ; c639 ds 1 BattleMonStatus: ; c63a ds 2 BattleMonHP: ; c63c ds 2 BattleMonMaxHP: ; c63e ds 2 BattleMonAtk: ; c640 ds 2 BattleMonDef: ; c642 ds 2 BattleMonSpd: ; c644 ds 2 BattleMonSpclAtk: ; c646 ds 2 BattleMonSpclDef: ; c648 ds 2 BattleMonType1: ; c64a ds 1 BattleMonType2: ; c64b ds 1 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 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 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 5 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 ds 1 PlayerLightScreenCount: ; c702 ds 1 PlayerReflectCount: ; c703 ds 1 ds 2 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 3 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 SECTION "battle",WRAM0[$c734] BattleEnded: ; c734 ds 1 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 360 ds 30 MonType: ; cf5f PARTYMON EQU 0 OTPARTYMON EQU 1 BOXMON EQU 2 WILDMON EQU 4 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 STANDING EQU -1 DOWN EQU 0 UP EQU 1 LEFT EQU 2 RIGHT EQU 3 ds 1 FacingDirection: ; d044 FACE_CURRENT EQU 0 FACE_DOWN EQU 8 FACE_UP EQU 4 FACE_LEFT EQU 2 FACE_RIGHT EQU 1 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 ds 21 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: TempMonSpecies: ; d10e ds 1 TempMonItem: ; d10f ds 1 TempMonMoves: ; d110 TempMonMove1: ; d110 ds 1 TempMonMove2: ; d111 ds 1 TempMonMove3: ; d112 ds 1 TempMonMove4: ; d113 ds 1 TempMonID: ; d114 ds 2 TempMonExp: ; d116 ds 3 TempMonHPExp: ; d119 ds 2 TempMonAtkExp: ; d11b ds 2 TempMonDefExp: ; d11d ds 2 TempMonSpdExp: ; d11f ds 2 TempMonSpclExp: ; d121 ds 2 TempMonDVs: ; d123 ; hp = %1000 for each dv ds 1 ; atk/def ds 1 ; spd/spc TempMonPP: ; d125 ds 4 TempMonHappiness: ; d129 ds 1 TempMonPokerusStatus: ; d12a ds 1 TempMonCaughtData: ; d12b TempMonCaughtTime: ; d12b TempMonCaughtLevel: ; d12b ds 1 TempMonCaughtGender: ; d12c TempMonCaughtLocation: ; d12c ds 1 TempMonLevel: ; d12d ds 1 TempMonStatus: ; d12e ds 1 ; d12f ds 1 TempMonCurHP: ; d130 ds 2 TempMonMaxHP: ; d132 ds 2 TempMonAtk: ; d134 ds 2 TempMonDef: ; d136 ds 2 TempMonSpd: ; d138 ds 2 TempMonSpclAtk: ; d13a ds 2 TempMonSpclDef: ; d13c ds 2 TempMonEnd ; d13e 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[$d1a3],BANK[1] MapEventBank: ; d1a3 ds 1 ds 5 MapConnections: 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 ds 1 ds 1 MagikarpLength: Buffer1: ; d1ea ds 1 MovementType: Buffer2: ; d1eb ds 1 SECTION "BattleMons2",WRAMX[$d1fa],BANK[1] LinkBattleRNs: ; d1fa ds 10 TempEnemyMonSpecies: ; d204 ds 1 TempBattleMonSpecies: ; d205 ds 1 EnemyMon: EnemyMonSpecies: ; d206 ds 1 EnemyMonItem: ; d207 ds 1 EnemyMonMoves: EnemyMonMove1: ; d208 ds 1 EnemyMonMove2: ; d209 ds 1 EnemyMonMove3: ; d20a ds 1 EnemyMonMove4: ; d20b ds 1 EnemyMonMovesEnd EnemyMonDVs: EnemyMonAtkDefDV: ; d20c ds 1 EnemyMonSpdSpclDV: ; d20d ds 1 EnemyMonPP: EnemyMonPPMove1: ; d20e ds 1 EnemyMonPPMove2: ; d20f ds 1 EnemyMonPPMove3: ; d210 ds 1 EnemyMonPPMove4: ; d211 ds 1 EnemyMonHappiness: ; d212 ds 1 EnemyMonLevel: ; d213 ds 1 EnemyMonStatus: ; d214 ds 2 EnemyMonHP: EnemyMonHPHi: ; d216 ds 1 EnemyMonHPLo: ; d217 ds 1 EnemyMonMaxHP: EnemyMonMaxHPHi: ; d218 ds 1 EnemyMonMaxHPLo: ; d219 ds 1 EnemyMonStats: EnemyMonAtk: ; d21a ds 2 EnemyMonDef: ; d21c ds 2 EnemyMonSpd: ; d21e ds 2 EnemyMonSpclAtk: ; d220 ds 2 EnemyMonSpclDef: ; d222 ds 2 EnemyMonStatsEnd EnemyMonType1: ; d224 ds 1 EnemyMonType2: ; d225 ds 1 EnemyMonBaseStats: ; d226 ds 5 EnemyMonCatchRate: ; d22b ds 1 EnemyMonBaseExp: ; d22c ds 1 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 MORN EQU 0 DAY EQU 1 NITE EQU 2 DARKNESS EQU 3 ds 1 SECTION "OTParty",WRAMX[$d280],BANK[1] OTPartyCount: ; d280 ds 1 ; number of Pokémon in party OTPartySpecies: ; d281 ds 6 ; species of each Pokémon in party ; d287 ds 1 ; any empty slots including the 7th must be FF ; or the routine will keep going OTPartyMon1: OTPartyMon1Species: ; d288 ds 1 OTPartyMon1Item: ; d289 ds 1 OTPartyMon1Moves: ; d28a OTPartyMon1Move1: ; d28a ds 1 OTPartyMon1Move2: ; d28b ds 1 OTPartyMon1Move3: ; d28c ds 1 OTPartyMon1Move4: ; d28d ds 1 OTPartyMon1ID: ; d28e ds 2 OTPartyMon1Exp: ; d290 ds 3 OTPartyMon1HPExp: ; d293 ds 2 OTPartyMon1AtkExp: ; d295 ds 2 OTPartyMon1DefExp: ; d297 ds 2 OTPartyMon1SpdExp: ; d299 ds 2 OTPartyMon1SpclExp: ; d29b ds 2 OTPartyMon1DVs: ; d29d OTPartyMon1AtkDefDV: ; d29d ds 1 OTPartyMon1SpdSpclDV: ; d29e ds 1 OTPartyMon1PP: ; d29f OTPartyMon1PPMove1: ; d29f ds 1 OTPartyMon1PPMove2: ; d2a0 ds 1 OTPartyMon1PPMove3: ; d2a1 ds 1 OTPartyMon1PPMove4: ; d2a2 ds 1 OTPartyMon1Happiness: ; d2a3 ds 1 OTPartyMon1PokerusStatus: ; d2a4 ds 1 OTPartyMon1CaughtData: ; d2a5 OTPartyMon1CaughtGender: ; d2a5 OTPartyMon1CaughtLocation: ; d2a5 ds 1 OTPartyMon1CaughtTime: ; d2a6 ds 1 OTPartyMon1Level: ; d2a7 ds 1 OTPartyMon1Status: ; d2a8 ds 1 OTPartyMon1Unused: ; d2a9 ds 1 OTPartyMon1CurHP: ; d2aa ds 2 OTPartyMon1MaxHP: ; d2ac ds 2 OTPartyMon1Atk: ; d2ae ds 2 OTPartyMon1Def: ; d2b0 ds 2 OTPartyMon1Spd: ; d2b2 ds 2 OTPartyMon1SpclAtk: ; d2b4 ds 2 OTPartyMon1SpclDef: ; d2b6 ds 2 OTPartyMon2: ; d2b8 ds 48 OTPartyMon3: ; d2e8 ds 48 OTPartyMon4: ; d318 ds 48 OTPartyMon5: ; d348 ds 48 OTPartyMon6: ; d378 ds 48 OTPartyMonOT: OTPartyMon1OT: ; d3a8 ds 11 OTPartyMon2OT: ; d3b3 ds 11 OTPartyMon3OT: ; d3be ds 11 OTPartyMon4OT: ; d3c9 ds 11 OTPartyMon5OT: ; d3d4 ds 11 OTPartyMon6OT: ; d3df ds 11 OTPartyMonNicknames: OTPartyMon1Nickname: ; d3ea ds 11 OTPartyMon2Nickname: ; d3f5 ds 11 OTPartyMon3Nickname: ; d400 ds 11 OTPartyMon4Nickname: ; d40b ds 11 OTPartyMon5Nickname: ; d416 ds 11 OTPartyMon6Nickname: ; d421 ds 11 SECTION "Scripting",WRAMX[$d434],BANK[1] ScriptFlags: ; d434 SCRIPT_RUNNING EQU 2 ds 1 ScriptFlags2: ; d435 ds 1 ScriptFlags3: ; d436 ds 1 ScriptMode: ; d437 SCRIPT_OFF EQU 0 SCRIPT_READ EQU 1 SCRIPT_WAIT_MOVEMENT EQU 2 SCRIPT_WAIT EQU 3 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 SUNDAY EQU 0 MONDAY EQU 1 TUESDAY EQU 2 WEDNESDAY EQU 3 THURSDAY EQU 4 FRIDAY EQU 5 SATURDAY EQU 6 ds 1 ds 10 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 2 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 SECTION "Objects",WRAMX[$d71e],BANK[1] MapObjects: ; d71e PLAYER_OBJECT EQU 0 NUM_OBJECTS EQU $10 OBJECT_LENGTH EQU $10 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 ds 4 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 REGISTERED_POCKET EQU %11000000 REGISTERED_NUMBER EQU %00111111 ds 1 RegisteredItem: ; d95c ds 1 PlayerState: ; d95d PLAYER_NORMAL EQU 0 PLAYER_BIKE EQU 1 PLAYER_SLIP EQU 2 PLAYER_SURF EQU 4 PLAYER_SURF_PIKA EQU 8 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 "Events",WRAMX[$da72],BANK[1] EventFlags: ; da72 ;RoomDecorations: ; dac6 ;TeamRocketAzaleaTownAttackEvent: ; db51 ;PoliceAtElmsLabEvent: ; db52 ;SalesmanMahoganyTownEvent: ; db5c ;RedGyaradosEvent: ; db5c ds 250 ; db6c SECTION "BoxNames",WRAMX[$db75],BANK[1] ; 8 chars + $50 Box1Name: ; db75 ds 9 Box2Name: ; db7e ds 9 Box3Name: ; db87 ds 9 Box4Name: ; db90 ds 9 Box5Name: ; db99 ds 9 Box6Name: ; dba2 ds 9 Box7Name: ; dbab ds 9 Box8Name: ; dbb4 ds 9 Box9Name: ; dbbd ds 9 Box10Name: ; dbc6 ds 9 Box11Name: ; dbcf ds 9 Box12Name: ; dbd8 ds 9 Box13Name: ; dbe1 ds 9 Box14Name: ; dbea ds 9 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 "FlypointPermissions", WRAMX[$dca5],BANK[1] FlypointPerms: ; dca5 ds 4 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: PartyMon1Species: ; dcdf ds 1 PartyMon1Item: ; dce0 ds 1 PartyMon1Moves: ; dce1 PartyMon1Move1: ; dce1 ds 1 PartyMon1Move2: ; dce2 ds 1 PartyMon1Move3: ; dce3 ds 1 PartyMon1Move4: ; dce4 ds 1 PartyMon1ID: ; dce5 ds 2 PartyMon1Exp: ; dce7 ds 3 PartyMon1HPExp: ; dcea ds 2 PartyMon1AtkExp: ; dcec ds 2 PartyMon1DefExp: ; dcee ds 2 PartyMon1SpdExp: ; dcf0 ds 2 PartyMon1SpclExp: ; dcf2 ds 2 PartyMon1DVs: ; dcf4 ; hp = %1000 for each dv ds 1 ; atk/def ds 1 ; spd/spc PartyMon1PP: ; dcf6 ds 4 PartyMon1Happiness: ; dcfa ds 1 PartyMon1PokerusStatus: ; dcfb ds 1 PartyMon1CaughtData: ; dcfc PartyMon1CaughtTime: ; dcfc PartyMon1CaughtLevel: ; dcfc ds 1 PartyMon1CaughtGender: ; dcfd PartyMon1CaughtLocation: ; dcfd ds 1 PartyMon1Level: ; dcfe ds 1 PartyMon1Status: ; dcff ds 1 ; dd00 unused ds 1 PartyMon1CurHP: ; dd01 ds 2 PartyMon1MaxHP: ; dd03 ds 2 PartyMon1Atk: ; dd05 ds 2 PartyMon1Def: ; dd07 ds 2 PartyMon1Spd: ; dd09 ds 2 PartyMon1SpclAtk: ; dd0b ds 2 PartyMon1SpclDef: ; dd0d ds 2 PartyMon2: ; dd0f ds 48 PartyMon3: ; dd3f ds 48 PartyMon4: ; dd6f ds 48 PartyMon5: ; dd9f ds 48 PartyMon6: ; ddcf ds 48 PartyMonOT: PartyMon1OT: ; ddff ds 11 PartyMon2OT: ; de0a ds 11 PartyMon3OT: ; de15 ds 11 PartyMon4OT: ; de20 ds 11 PartyMon5OT: ; de2b ds 11 PartyMon6OT: ; de36 ds 11 PartyMonNicknames: PartyMon1Nickname: ; de41 ds 11 PartyMon2Nickname: ; de4c ds 11 PartyMon3Nickname: ; de57 ds 11 PartyMon4Nickname: ; de62 ds 11 PartyMon5Nickname: ; de6d ds 11 PartyMon6Nickname: ; de78 ds 11 PartyMonNicknamesEnd SECTION "Pokedex",WRAMX[$de99],BANK[1] PokedexCaught: ; de99 ds 32 EndPokedexCaught: PokedexSeen: ; deb9 ds 32 EndPokedexSeen: UnownDex: ; ded9 ds 26 UnlockedUnowns: ; def3 ds 1 SECTION "Breeding",WRAMX[$def5],BANK[1] DaycareMan: ; def5 ; bit 7: active ; bit 6: monsters are compatible ; bit 5: egg ready ; bit 0: monster 1 in daycare ds 1 BreedMon1: BreedMon1Nick: ; def6 ds 11 BreedMon1OT: ; df01 ds 11 BreedMon1Stats: BreedMon1Species: ; df0c ds 1 ds 31 DaycareLady: ; df2c ; bit 7: active ; bit 0: monster 2 in daycare ds 1 StepsToEgg: ; df2d ds 1 DittoInDaycare: ; df2e ; z: yes ; nz: no ds 1 BreedMon2: BreedMon2Nick: ; df2f ds 11 BreedMon2OT: ; df3a ds 11 BreedMon2Stats: BreedMon2Species: ; df45 ds 1 ds 31 EggNick: ; df65 ; EGG@ ds 11 EggOT: ; df70 ds 11 EggStats: EggSpecies: ; df7b ds 1 ds 31 SECTION "RoamMons",WRAMX[$dfcf],BANK[1] RoamMon1Species: ; dfcf ds 1 RoamMon1Level: ; dfd0 ds 1 RoamMon1MapGroup: ; dfd1 ds 1 RoamMon1MapNumber: ; dfd2 ds 1 RoamMon1CurHP: ; dfd3 ds 1 RoamMon1DVs: ; dfd4 ds 2 RoamMon2Species: ; dfd6 ds 1 RoamMon2Level: ; dfd7 ds 1 RoamMon2MapGroup: ; dfd8 ds 1 RoamMon2MapNumber: ; dfd9 ds 1 RoamMon2CurHP: ; dfda ds 1 RoamMon2DVs: ; dfdb ds 2 RoamMon3Species: ; dfdd ds 1 RoamMon3Level: ; dfde ds 1 RoamMon3MapGroup: ; dfdf ds 1 RoamMon3MapNumber: ; dfe0 ds 1 RoamMon3CurHP: ; dfe1 ds 1 RoamMon3DVs: ; dfe2 ds 2 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 SECTION "SRAMBank1",SRAM,BANK[1] SECTION "BoxMons",SRAM[$ad10],BANK[1] BoxCount: ; ad10 ds 1 BoxSpecies: ; ad11 ds 20 ds 1 BoxMons: BoxMon1: BoxMon1Species: ; ad26 ds 1 BoxMon1Item: ; ad27 ds 1 BoxMon1Moves: ; ad28 ds 4 BoxMon1ID: ; ad2c ds 2 BoxMon1Exp: ; ad2e ds 3 BoxMon1HPExp: ; ad31 ds 2 BoxMon1AtkExp: ; ad33 ds 2 BoxMon1DefExp: ; ad35 ds 2 BoxMon1SpdExp: ; ad37 ds 2 BoxMon1SpcExp: ; ad39 ds 2 BoxMon1DVs: ; ad3b ds 2 BoxMon1PP: ; ad3d ds 4 BoxMon1Happiness: ; ad41 ds 1 BoxMon1PokerusStatus: ; ad42 ds 1 BoxMon1CaughtData: BoxMon1CaughtTime: BoxMon1CaughtLevel: ; ad43 ds 1 BoxMon1CaughtGender: BoxMon1CaughtLocation: ; ad44 ds 1 BoxMon1Level: ; ad45 ds 1 BoxMon2: ; ad46 ds 32 BoxMon3: ; ad66 ds 32 BoxMon4: ; ad86 ds 32 BoxMon5: ; ada6 ds 32 BoxMon6: ; adc6 ds 32 BoxMon7: ; ade6 ds 32 BoxMon8: ; ae06 ds 32 BoxMon9: ; ae26 ds 32 BoxMon10: ; ae46 ds 32 BoxMon11: ; ae66 ds 32 BoxMon12: ; ae86 ds 32 BoxMon13: ; aea6 ds 32 BoxMon14: ; aec6 ds 32 BoxMon15: ; aee6 ds 32 BoxMon16: ; af06 ds 32 BoxMon17: ; af26 ds 32 BoxMon18: ; af46 ds 32 BoxMon19: ; af66 ds 32 BoxMon20: ; af86 ds 32 BoxMonOT: BoxMon1OT: ; afa6 ds 11 BoxMon2OT: ; afb1 ds 11 BoxMon3OT: ; afbc ds 11 BoxMon4OT: ; afc7 ds 11 BoxMon5OT: ; afd2 ds 11 BoxMon6OT: ; afdd ds 11 BoxMon7OT: ; afe8 ds 11 BoxMon8OT: ; aff3 ds 11 BoxMon9OT: ; affe ds 11 BoxMon10OT: ; b009 ds 11 BoxMon11OT: ; b014 ds 11 BoxMon12OT: ; b01f ds 11 BoxMon13OT: ; b02a ds 11 BoxMon14OT: ; b035 ds 11 BoxMon15OT: ; b040 ds 11 BoxMon16OT: ; b04b ds 11 BoxMon17OT: ; b056 ds 11 BoxMon18OT: ; b061 ds 11 BoxMon19OT: ; b06c ds 11 BoxMon20OT: ; b077 ds 11 BoxMonNicknames: BoxMon1Nickname: ; b082 ds 11 BoxMon2Nickname: ; b08d ds 11 BoxMon3Nickname: ; b098 ds 11 BoxMon4Nickname: ; b0a3 ds 11 BoxMon5Nickname: ; b0ae ds 11 BoxMon6Nickname: ; b0b9 ds 11 BoxMon7Nickname: ; b0c4 ds 11 BoxMon8Nickname: ; b0cf ds 11 BoxMon9Nickname: ; b0da ds 11 BoxMon10Nickname: ; b0e5 ds 11 BoxMon11Nickname: ; b0f0 ds 11 BoxMon12Nickname: ; b0fb ds 11 BoxMon13Nickname: ; b106 ds 11 BoxMon14Nickname: ; b111 ds 11 BoxMon15Nickname: ; b11c ds 11 BoxMon16Nickname: ; b127 ds 11 BoxMon17Nickname: ; b132 ds 11 BoxMon18Nickname: ; b13d ds 11 BoxMon19Nickname: ; b148 ds 11 BoxMon20Nickname: ; b153 ds 11 BoxMonNicknamesEnd