ref: 1045c6a16f95273faaaf8ef1f62143e937cc445e
dir: /wram.asm/
INCLUDE "includes.asm" party_struct: MACRO \1Species:: db \1Item:: db \1Moves:: \1Move1:: db \1Move2:: db \1Move3:: db \1Move4:: db \1ID:: dw \1Exp:: ds 3 ; Big endian \1StatExp:: \1HPExp:: dw \1AtkExp:: dw \1DefExp:: dw \1SpdExp:: dw \1SpclExp:: dw \1DVs:: \1AtkDefDV:: db \1SpdSpcDV:: db \1PP:: \1PPMove1:: db \1PPMove2:: db \1PPMove3:: db \1PPMove4:: db \1Happiness:: db \1PokerusStatus:: db \1CaughtData:: \1CaughtTime:: \1CaughtLevel:: db \1CaughtGender:: \1CaughtLocation:: db \1Level:: db \1Status:: db \1Unused:: db ; Stats are big endian. \1HP:: dw \1MaxHP:: dw \1Attack:: dw \1Defense:: dw \1Speed:: dw \1SpclAtk:: dw \1SpclDef:: dw 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:: 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 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 TileMapEnd:: 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 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 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 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 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 TempMonHP:: ; 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[$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 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 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:: ; d288 party_struct OTPartyMon1 OTPartyMon2:: ; d2b8 party_struct OTPartyMon2 OTPartyMon3:: ; d2e8 party_struct OTPartyMon3 OTPartyMon4:: ; d318 party_struct OTPartyMon4 OTPartyMon5:: ; d348 party_struct OTPartyMon5 OTPartyMon6:: ; d378 party_struct OTPartyMon6 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 "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 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 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 "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 "Visited Spawn Points", WRAMX[$dca5],BANK[1] VisitedSpawns:: ; 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:: ; dcdf party_struct PartyMon1 PartyMon2:: ; dd0f party_struct PartyMon2 PartyMon3:: ; dd3f party_struct PartyMon3 PartyMon4:: ; dd6f party_struct PartyMon4 PartyMon5:: ; dd9f party_struct PartyMon5 PartyMon6:: ; ddcf party_struct PartyMon6 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 ds 1 wContestMon:: ; df9c party_struct wContestMon ds 3 RoamMon1Species:: ; dfcf ds 1 RoamMon1Level:: ; dfd0 ds 1 RoamMon1MapGroup:: ; dfd1 ds 1 RoamMon1MapNumber:: ; dfd2 ds 1 RoamMon1HP:: ; dfd3 ds 1 RoamMon1DVs:: ; dfd4 ds 2 RoamMon2Species:: ; dfd6 ds 1 RoamMon2Level:: ; dfd7 ds 1 RoamMon2MapGroup:: ; dfd8 ds 1 RoamMon2MapNumber:: ; dfd9 ds 1 RoamMon2HP:: ; dfda ds 1 RoamMon2DVs:: ; dfdb ds 2 RoamMon3Species:: ; dfdd ds 1 RoamMon3Level:: ; dfde ds 1 RoamMon3MapGroup:: ; dfdf ds 1 RoamMon3MapNumber:: ; dfe0 ds 1 RoamMon3HP:: ; 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:: 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 "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::