ref: e614dd1278c9dbdfa546cba77757f76541378c13
parent: 7a4d64125176d9bd946682a3f9440de0f71324af
author: Remy Oukaour <remy.oukaour@gmail.com>
date: Tue Dec 26 20:58:36 EST 2017
gfx/pokemon/animation.asm → engine/pic_animation.asm Correct comment in constants/pokemon_constants.asm
--- a/constants/pokemon_constants.asm
+++ b/constants/pokemon_constants.asm
@@ -6,12 +6,12 @@
; - EggMovePointers (see data/pokemon/egg_move_pointers.asm)
; - PokemonCries (see data/pokemon/cries.asm)
; - MonMenuIcons (see data/pokemon/menu_icons.asm)
+; - PokemonPicPointers (see data/pokemon/pic_pointers.asm)
; - PokemonPalettes (see data/pokemon/palettes.asm)
; - PokedexDataPointerTable (see data/pokemon/dex_entry_pointers.asm)
; - AlphabeticalPokedexOrder (see data/pokemon/dex_order_alpha.asm)
; - NewPokedexOrder (see data/pokemon/dex_order_new.asm)
; - Pokered_MonIndices (see data/time_capsule/mon_order.asm)
-; - PokemonPicPointers (see gfx/pokemon/pic_pointers.asm)
; - AnimationPointers (see gfx/pokemon/anim_pointers.asm)
; - AnimationExtraPointers (see gfx/pokemon/extra_pointers.asm)
; - BitmasksPointers (see gfx/pokemon/bitmask_pointers.asm)
--- a/constants/pokemon_data_constants.asm
+++ b/constants/pokemon_data_constants.asm
@@ -149,7 +149,7 @@
FISHSWARM_REMORAID EQU 2
-; PokeAnims indexes (see gfx/pokemon/animation.asm)
+; PokeAnims indexes (see engine/pic_animation.asm)
const_def
const ANIM_MON_SLOW
const ANIM_MON_NORMAL
--- /dev/null
+++ b/engine/pic_animation.asm
@@ -1,0 +1,1140 @@
+; Pic animation arrangement.
+
+AnimateMon_Slow_Normal: ; d0000
+ hlcoord 12, 0
+ ld a, [wBattleMode]
+ cp WILD_BATTLE
+ jr z, .wild
+ ld e, ANIM_MON_SLOW
+ ld d, $0
+ call AnimateFrontpic
+ ret
+
+.wild
+ ld e, ANIM_MON_NORMAL
+ ld d, $0
+ call AnimateFrontpic
+ ret
+; d001a
+
+AnimateMon_Menu: ; d001a
+ ld e, ANIM_MON_MENU
+ ld d, $0
+ call AnimateFrontpic
+ ret
+; d0022
+
+AnimateMon_Trade: ; d0022
+ ld e, ANIM_MON_TRADE
+ ld d, $0
+ call AnimateFrontpic
+ ret
+; d002a
+
+AnimateMon_Evolve: ; d002a
+ ld e, ANIM_MON_EVOLVE
+ ld d, $0
+ call AnimateFrontpic
+ ret
+; d0032
+
+AnimateMon_Hatch: ; d0032
+ ld e, ANIM_MON_HATCH
+ ld d, $0
+ call AnimateFrontpic
+ ret
+; d003a
+
+AnimateMon_Unused: ; d003a
+ ld e, ANIM_MON_UNUSED
+ ld d, $0
+ call AnimateFrontpic
+ ret
+; d0042
+
+pokeanim: MACRO
+ rept _NARG
+; Workaround for a bug where macro args can't come after the start of a symbol
+if !def(\1_POKEANIM)
+\1_POKEANIM equs "PokeAnim_\1_"
+endc
+ db (\1_POKEANIM - PokeAnim_SetupCommands) / 2
+ shift
+ endr
+ db (PokeAnim_Finish_ - PokeAnim_SetupCommands) / 2
+ENDM
+
+PokeAnims: ; d0042
+ dw .Slow
+ dw .Normal
+ dw .Menu
+ dw .Trade
+ dw .Evolve
+ dw .Hatch
+ dw .Unused ; same as .Menu
+ dw .Egg1
+ dw .Egg2
+
+.Slow: pokeanim StereoCry, Setup2, Play
+.Normal: pokeanim StereoCry, Setup, Play
+.Menu: pokeanim CryNoWait, Setup, Play, SetWait, Wait, Extra, Play
+.Trade: pokeanim Extra, Play2, Extra, Play, SetWait, Wait, Cry, Setup, Play
+.Evolve: pokeanim Extra, Play, SetWait, Wait, CryNoWait, Setup, Play
+.Hatch: pokeanim Extra, Play, CryNoWait, Setup, Play, SetWait, Wait, Extra, Play
+.Unused: pokeanim CryNoWait, Setup, Play, SetWait, Wait, Extra, Play
+.Egg1: pokeanim Setup, Play
+.Egg2: pokeanim Extra, Play
+
+
+AnimateFrontpic: ; d008e
+ call AnimateMon_CheckIfPokemon
+ ret c
+ call LoadMonAnimation
+.loop
+ call SetUpPokeAnim
+ push af
+ farcall HDMATransferTileMapToWRAMBank3
+ pop af
+ jr nc, .loop
+ ret
+; d00a3
+
+LoadMonAnimation: ; d00a3
+ push hl
+ ld c, e
+ ld b, 0
+ ld hl, PokeAnims
+ add hl, bc
+ add hl, bc
+ ld a, [hli]
+ ld b, [hl]
+ ld c, a
+ pop hl
+ call PokeAnim_InitPicAttributes
+ ret
+; d00b4
+
+SetUpPokeAnim: ; d00b4
+ ld a, [rSVBK]
+ push af
+ ld a, BANK(wPokeAnimSceneIndex)
+ ld [rSVBK], a
+ ld a, [wPokeAnimSceneIndex]
+ ld c, a
+ ld b, 0
+ ld hl, wPokeAnimPointer
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ add hl, bc
+ ld a, [hl]
+ ld hl, PokeAnim_SetupCommands
+ rst JumpTable
+ ld a, [wPokeAnimSceneIndex]
+ ld c, a
+ pop af
+ ld [rSVBK], a
+ ld a, c
+ and $80
+ ret z
+ scf
+ ret
+; d00da
+
+PokeAnim_SetupCommands: ; d00da
+setup_command: macro
+\1_: dw \1
+endm
+ setup_command PokeAnim_Finish
+ setup_command PokeAnim_BasePic
+ setup_command PokeAnim_SetWait
+ setup_command PokeAnim_Wait
+ setup_command PokeAnim_Setup
+ setup_command PokeAnim_Setup2
+ setup_command PokeAnim_Extra
+ setup_command PokeAnim_Play
+ setup_command PokeAnim_Play2
+ setup_command PokeAnim_Cry
+ setup_command PokeAnim_CryNoWait
+ setup_command PokeAnim_StereoCry
+; d00f2
+
+PokeAnim_SetWait: ; d00f2
+ ld a, 18
+ ld [wPokeAnimWaitCounter], a
+ ld a, [wPokeAnimSceneIndex]
+ inc a
+ ld [wPokeAnimSceneIndex], a
+
+PokeAnim_Wait: ; d00fe
+ ld hl, wPokeAnimWaitCounter
+ dec [hl]
+ ret nz
+ ld a, [wPokeAnimSceneIndex]
+ inc a
+ ld [wPokeAnimSceneIndex], a
+ ret
+; d010b
+
+PokeAnim_Setup: ; d010b
+ ld c, FALSE
+ ld b, 0
+ call PokeAnim_InitAnim
+ call PokeAnim_SetVBank1
+ ld a, [wPokeAnimSceneIndex]
+ inc a
+ ld [wPokeAnimSceneIndex], a
+ ret
+; d011d
+
+PokeAnim_Setup2: ; d011d
+ ld c, FALSE
+ ld b, 4
+ call PokeAnim_InitAnim
+ call PokeAnim_SetVBank1
+ ld a, [wPokeAnimSceneIndex]
+ inc a
+ ld [wPokeAnimSceneIndex], a
+ ret
+; d012f
+
+PokeAnim_Extra: ; d012f
+ ld c, TRUE
+ ld b, 0
+ call PokeAnim_InitAnim
+ call PokeAnim_SetVBank1
+ ld a, [wPokeAnimSceneIndex]
+ inc a
+ ld [wPokeAnimSceneIndex], a
+ ret
+; d0141
+
+PokeAnim_Play: ; d0141
+ call PokeAnim_DoAnimScript
+ ld a, [wPokeAnimJumptableIndex]
+ bit 7, a
+ ret z
+ call PokeAnim_PlaceGraphic
+ ld a, [wPokeAnimSceneIndex]
+ inc a
+ ld [wPokeAnimSceneIndex], a
+ ret
+; d0155
+
+PokeAnim_Play2: ; d0155
+ call PokeAnim_DoAnimScript
+ ld a, [wPokeAnimJumptableIndex]
+ bit 7, a
+ ret z
+ ld a, [wPokeAnimSceneIndex]
+ inc a
+ ld [wPokeAnimSceneIndex], a
+ ret
+; d0166
+
+PokeAnim_BasePic: ; d0166
+ call PokeAnim_DeinitFrames
+ ld a, [wPokeAnimSceneIndex]
+ inc a
+ ld [wPokeAnimSceneIndex], a
+ ret
+; d0171
+
+PokeAnim_Finish: ; d0171
+ call PokeAnim_DeinitFrames
+ ld hl, wPokeAnimSceneIndex
+ set 7, [hl]
+ ret
+; d017a
+
+PokeAnim_Cry: ; d017a
+ ld a, [wPokeAnimSpecies]
+ call _PlayCry
+ ld a, [wPokeAnimSceneIndex]
+ inc a
+ ld [wPokeAnimSceneIndex], a
+ ret
+; d0188
+
+PokeAnim_CryNoWait: ; d0188
+ ld a, [wPokeAnimSpecies]
+ call PlayCry2
+ ld a, [wPokeAnimSceneIndex]
+ inc a
+ ld [wPokeAnimSceneIndex], a
+ ret
+; d0196
+
+PokeAnim_StereoCry: ; d0196
+ ld a, $f
+ ld [CryTracks], a
+ ld a, [wPokeAnimSpecies]
+ call PlayStereoCry2
+ ld a, [wPokeAnimSceneIndex]
+ inc a
+ ld [wPokeAnimSceneIndex], a
+ ret
+; d01a9
+
+PokeAnim_DeinitFrames: ; d01a9
+ ld a, [rSVBK]
+ push af
+ ld a, $2
+ ld [rSVBK], a
+ call PokeAnim_PlaceGraphic
+ farcall HDMATransferTileMapToWRAMBank3
+ call PokeAnim_SetVBank0
+ farcall HDMATransferAttrMapToWRAMBank3
+ pop af
+ ld [rSVBK], a
+ ret
+; d01c6
+
+AnimateMon_CheckIfPokemon: ; d01c6
+ ld a, [CurPartySpecies]
+ cp EGG
+ jr z, .fail
+ call IsAPokemon
+ jr c, .fail
+ and a
+ ret
+
+.fail
+ scf
+ ret
+; d01d6
+
+PokeAnim_InitPicAttributes: ; d01d6
+ ld a, [rSVBK]
+ push af
+ ld a, BANK(wPokeAnimSceneIndex)
+ ld [rSVBK], a
+
+ push bc
+ push de
+ push hl
+ ld hl, wPokeAnimSceneIndex
+ ld bc, wPokeAnimStructEnd - wPokeAnimSceneIndex
+ xor a
+ call ByteFill
+ pop hl
+ pop de
+ pop bc
+
+; bc contains anim pointer
+ ld a, c
+ ld [wPokeAnimPointer], a
+ ld a, b
+ ld [wPokeAnimPointer + 1], a
+; hl contains TileMap coords
+ ld a, l
+ ld [wPokeAnimCoord], a
+ ld a, h
+ ld [wPokeAnimCoord + 1], a
+; d = start tile
+ ld a, d
+ ld [wPokeAnimGraphicStartTile], a
+
+ ld a, $1
+ ld hl, CurPartySpecies
+ call GetFarWRAMByte
+ ld [wPokeAnimSpecies], a
+
+ ld a, $1
+ ld hl, UnownLetter
+ call GetFarWRAMByte
+ ld [wPokeAnimUnownLetter], a
+
+ call PokeAnim_GetSpeciesOrUnown
+ ld [wPokeAnimSpeciesOrUnown], a
+
+ call PokeAnim_GetFrontpicDims
+ ld a, c
+ ld [wPokeAnimFrontpicHeight], a
+
+ pop af
+ ld [rSVBK], a
+ ret
+; d0228
+
+PokeAnim_InitAnim: ; d0228
+ ld a, [rSVBK]
+ push af
+ ld a, BANK(wPokeAnimExtraFlag)
+ ld [rSVBK], a
+ push bc
+ ld hl, wPokeAnimExtraFlag
+ ld bc, wPokeAnimStructEnd - wPokeAnimExtraFlag
+ xor a
+ call ByteFill
+ pop bc
+ ld a, b
+ ld [wPokeAnimSpeed], a
+ ld a, c
+ ld [wPokeAnimExtraFlag], a
+ call GetMonAnimPointer
+ call GetMonFramesPointer
+ call GetMonBitmaskPointer
+ pop af
+ ld [rSVBK], a
+ ret
+; d0250
+
+PokeAnim_DoAnimScript: ; d0250
+ xor a
+ ld [hBGMapMode], a
+.loop
+ ld a, [wPokeAnimJumptableIndex]
+ and $7f
+ ld hl, .Jumptable
+ rst JumpTable
+ ret
+; d025d
+
+.Jumptable: ; d025d
+ dw .RunAnim
+ dw .WaitAnim
+; d0261
+
+.RunAnim: ; d0261
+ call PokeAnim_GetPointer
+ ld a, [wPokeAnimCommand]
+ cp -1
+ jr z, PokeAnim_End
+ cp -2
+ jr z, .SetRepeat
+ cp -3
+ jr z, .DoRepeat
+ call PokeAnim_GetFrame
+ ld a, [wPokeAnimParameter]
+ call PokeAnim_GetDuration
+ ld [wPokeAnimWaitCounter], a
+ call PokeAnim_StartWaitAnim
+.WaitAnim: ; d0282
+ ld a, [wPokeAnimWaitCounter]
+ dec a
+ ld [wPokeAnimWaitCounter], a
+ ret nz
+ call PokeAnim_StopWaitAnim
+ ret
+; d028e
+
+.SetRepeat: ; d028e
+ ld a, [wPokeAnimParameter]
+ ld [wPokeAnimRepeatTimer], a
+ jr .loop
+; d0296
+
+.DoRepeat: ; d0296
+ ld a, [wPokeAnimRepeatTimer]
+ and a
+ ret z
+ dec a
+ ld [wPokeAnimRepeatTimer], a
+ ret z
+ ld a, [wPokeAnimParameter]
+ ld [wPokeAnimFrame], a
+ jr .loop
+; d02a8
+
+PokeAnim_End: ; d02a8
+ ld hl, wPokeAnimJumptableIndex
+ set 7, [hl]
+ ret
+; d02ae
+
+PokeAnim_GetDuration: ; d02ae
+; a * (1 + [wPokeAnimSpeed] / 16)
+ ld c, a
+ ld b, $0
+ ld hl, 0
+ ld a, [wPokeAnimSpeed]
+ call AddNTimes
+ ld a, h
+ swap a
+ and $f0
+ ld h, a
+ ld a, l
+ swap a
+ and $f
+ or h
+ add c
+ ret
+; d02c8
+
+PokeAnim_GetFrame: ; d02c8
+ call PokeAnim_PlaceGraphic
+ ld a, [wPokeAnimCommand]
+ and a
+ ret z
+ call PokeAnim_GetBitmaskIndex
+ push hl
+ call PokeAnim_CopyBitmaskToBuffer
+ pop hl
+ call PokeAnim_ConvertAndApplyBitmask
+ ret
+; d02dc
+
+PokeAnim_StartWaitAnim: ; d02dc
+ ld a, [wPokeAnimJumptableIndex]
+ inc a
+ ld [wPokeAnimJumptableIndex], a
+ ret
+; d02e4
+
+PokeAnim_StopWaitAnim: ; d02e4
+ ld a, [wPokeAnimJumptableIndex]
+ dec a
+ ld [wPokeAnimJumptableIndex], a
+ ret
+; d02ec
+
+PokeAnim_IsUnown: ; d02ec
+ ld a, [wPokeAnimSpecies]
+ cp UNOWN
+ ret
+; d02f2
+
+PokeAnim_IsEgg: ; d02f2
+ ld a, [wPokeAnimSpecies]
+ cp EGG
+ ret
+; d02f8
+
+PokeAnim_GetPointer: ; d02f8
+ push hl
+ ld a, [wPokeAnimFrame]
+ ld e, a
+ ld d, $0
+ ld hl, wPokeAnimPointerAddr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ add hl, de
+ add hl, de
+ ld a, [wPokeAnimPointerBank]
+ call GetFarHalfword
+ ld a, l
+ ld [wPokeAnimCommand], a
+ ld a, h
+ ld [wPokeAnimParameter], a
+ ld hl, wPokeAnimFrame
+ inc [hl]
+ pop hl
+ ret
+; d031b
+
+PokeAnim_GetBitmaskIndex: ; d031b
+ ld a, [wPokeAnimCommand]
+ dec a
+ ld c, a
+ ld b, $0
+ ld hl, wPokeAnimFramesAddr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ add hl, bc
+ add hl, bc
+ ld a, [wPokeAnimFramesBank]
+ call GetFarHalfword
+ ld a, [wPokeAnimFramesBank]
+ call GetFarByte
+ ld [wPokeAnimCurBitmask], a
+ inc hl
+ ret
+; d033b
+
+PokeAnim_CopyBitmaskToBuffer: ; d033b
+ call .GetSize
+ push bc
+ ld hl, wPokeAnimBitmaskAddr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, [wPokeAnimCurBitmask]
+ call AddNTimes
+ pop bc
+ ld de, wPokeAnimBitmaskBuffer
+ ld a, [wPokeAnimBitmaskBank]
+ call FarCopyBytes
+ ret
+; d0356
+
+.GetSize: ; d0356
+ push hl
+ ld a, [wPokeAnimFrontpicHeight]
+ sub 5 ; to get a number 0, 1, or 2
+ ld c, a
+ ld b, 0
+ ld hl, .Sizes
+ add hl, bc
+ ld c, [hl]
+ ld b, 0
+ pop hl
+ ret
+; d0368
+
+.Sizes: db 4, 5, 7
+
+poke_anim_box: MACRO
+y = 7
+rept \1
+x = 7 +- \1
+rept \1
+ db x + y
+x = x + 1
+endr
+y = y + 7
+endr
+endm
+
+PokeAnim_ConvertAndApplyBitmask: ; d036b
+ xor a
+ ld [wPokeAnimBitmaskCurBit], a
+ ld [wPokeAnimBitmaskCurRow], a
+ ld [wPokeAnimBitmaskCurCol], a
+.loop
+ push hl
+ call .IsCurBitSet
+ pop hl
+ ld a, b
+ and a
+ jr z, .next
+
+ ld a, [wPokeAnimFramesBank]
+ call GetFarByte
+ inc hl
+ push hl
+ call .ApplyFrame
+ pop hl
+
+.next
+ push hl
+ call .NextBit
+ pop hl
+ jr nc, .loop
+ ret
+; d0392
+
+.IsCurBitSet: ; d0392
+; which byte
+ ld a, [wPokeAnimBitmaskCurBit]
+ and $f8
+ rrca
+ rrca
+ rrca
+ ld e, a
+ ld d, 0
+ ld hl, wPokeAnimBitmaskBuffer
+ add hl, de
+ ld b, [hl]
+; which bit
+ ld a, [wPokeAnimBitmaskCurBit]
+ and $7
+ jr z, .skip
+
+ ld c, a
+ ld a, b
+.loop2
+ rrca
+ dec c
+ jr nz, .loop2
+ ld b, a
+
+.skip
+ xor a
+ bit 0, b
+ jr z, .finish
+ ld a, 1
+
+.finish
+ ld b, a
+ ld hl, wPokeAnimBitmaskCurBit
+ inc [hl]
+ ret
+; d03bd
+
+.ApplyFrame: ; d03bd
+ push af
+ call .GetCoord
+ pop af
+ push hl
+ call .GetTilemap
+ ld hl, wPokeAnimGraphicStartTile
+ add [hl]
+ pop hl
+ ld [hl], a
+ ret
+; d03cd
+
+.GetCoord: ; d03cd
+ call .GetStartCoord
+ ld a, [wPokeAnimBitmaskCurRow]
+ ld bc, SCREEN_WIDTH
+ call AddNTimes
+ ld a, [wBoxAlignment]
+ and a
+ jr nz, .go
+ ld a, [wPokeAnimBitmaskCurCol]
+ ld e, a
+ ld d, 0
+ add hl, de
+ jr .skip2
+
+.go
+ ld a, [wPokeAnimBitmaskCurCol]
+ ld e, a
+ ld a, l
+ sub e
+ ld l, a
+ ld a, h
+ sbc 0
+ ld h, a
+
+.skip2
+ ret
+; d03f4
+
+; XXX
+ db 6, 5, 4
+
+.GetTilemap: ; d03f7
+ push af
+ ld a, [wPokeAnimFrontpicHeight]
+ cp 5
+ jr z, .check_add_24
+ cp 6
+ jr z, .check_add_13
+ pop af
+ ret
+
+.check_add_24
+ pop af
+ cp 5 * 5
+ jr nc, .add_24
+ push hl
+ push de
+ ld hl, ._5by5
+ ld e, a
+ ld d, 0
+ add hl, de
+ ld a, [hl]
+ pop de
+ pop hl
+ ret
+
+.add_24
+ add 24
+ ret
+
+.check_add_13
+ pop af
+ cp 6 * 6
+ jr nc, .add_13
+ push hl
+ push de
+ ld hl, ._6by6
+ ld e, a
+ ld d, 0
+ add hl, de
+ ld a, [hl]
+ pop de
+ pop hl
+ ret
+
+.add_13
+ add 13
+ ret
+; d042f
+
+._5by5:
+ poke_anim_box 5
+ ; db 9, 10, 11, 12, 13
+ ; db 16, 17, 18, 19, 20
+ ; db 23, 24, 25, 26, 27
+ ; db 30, 31, 32, 33, 34
+ ; db 37, 38, 39, 40, 41
+
+._6by6:
+ poke_anim_box 6
+ ; db 8, 9, 10, 11, 12, 13
+ ; db 15, 16, 17, 18, 19, 20
+ ; db 22, 23, 24, 25, 26, 27
+ ; db 29, 30, 31, 32, 33, 34
+ ; db 36, 37, 38, 39, 40, 41
+ ; db 43, 44, 45, 46, 47, 48
+
+
+.GetStartCoord: ; d046c
+ ld hl, wPokeAnimCoord
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+
+ ld a, [wPokeAnimFrontpicHeight]
+ ld de, 0
+ ld bc, 6
+ cp 7
+ jr z, .okay
+ ld de, SCREEN_WIDTH + 1
+ ld bc, SCREEN_WIDTH + 5
+ cp 6
+ jr z, .okay
+ ld de, 2 * SCREEN_WIDTH + 1
+ ld bc, 2 * SCREEN_WIDTH + 5
+.okay
+
+ ld a, [wBoxAlignment]
+ and a
+ jr nz, .add_bc
+ add hl, de
+ ret
+
+.add_bc
+ add hl, bc
+ ret
+; d0499
+
+.NextBit: ; d0499
+ ld a, [wPokeAnimBitmaskCurRow]
+ inc a
+ ld [wPokeAnimBitmaskCurRow], a
+ ld c, a
+ ld a, [wPokeAnimFrontpicHeight]
+ cp c
+ jr nz, .no_carry
+ xor a
+ ld [wPokeAnimBitmaskCurRow], a
+ ld a, [wPokeAnimBitmaskCurCol]
+ inc a
+ ld [wPokeAnimBitmaskCurCol], a
+ ld c, a
+ ld a, [wPokeAnimFrontpicHeight]
+ cp c
+ jr nz, .no_carry
+ scf
+ ret
+
+.no_carry
+ xor a
+ ret
+; d04bd
+
+PokeAnim_PlaceGraphic: ; d04bd
+ call .ClearBox
+ ld a, [wBoxAlignment]
+ and a
+ jr nz, .flipped
+ ld de, 1
+ ld bc, 0
+ jr .okay
+
+.flipped
+ ld de, -1
+ ld bc, 6
+
+.okay
+ ld hl, wPokeAnimCoord
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ add hl, bc
+ ld c, 7
+ ld b, 7
+ ld a, [wPokeAnimGraphicStartTile]
+.loop
+ push bc
+ push hl
+ push de
+ ld de, SCREEN_WIDTH
+.loop2
+ ld [hl], a
+ inc a
+ add hl, de
+ dec b
+ jr nz, .loop2
+ pop de
+ pop hl
+ add hl, de
+ pop bc
+ dec c
+ jr nz, .loop
+ ret
+; d04f6
+
+.ClearBox: ; d04f6
+ ld hl, wPokeAnimCoord
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld b, 7
+ ld c, 7
+ call ClearBox
+ ret
+; d0504
+
+PokeAnim_SetVBank1: ; d0504
+ ld a, [rSVBK]
+ push af
+ ld a, $2
+ ld [rSVBK], a
+ xor a
+ ld [hBGMapMode], a
+ call .SetFlag
+ farcall HDMATransferAttrMapToWRAMBank3
+ pop af
+ ld [rSVBK], a
+ ret
+; d051b
+
+.SetFlag: ; d051b
+ call PokeAnim_GetAttrMapCoord
+ ld b, 7
+ ld c, 7
+ ld de, SCREEN_WIDTH
+.row
+ push bc
+ push hl
+.col
+ ld a, [hl]
+ or 8
+ ld [hl], a
+ add hl, de
+ dec c
+ jr nz, .col
+ pop hl
+ inc hl
+ pop bc
+ dec b
+ jr nz, .row
+ ret
+; d0536
+
+PokeAnim_SetVBank0: ; d0536
+ call PokeAnim_GetAttrMapCoord
+ ld b, 7
+ ld c, 7
+ ld de, SCREEN_WIDTH
+.row
+ push bc
+ push hl
+.col
+ ld a, [hl]
+ and $f7
+ ld [hl], a
+ add hl, de
+ dec c
+ jr nz, .col
+ pop hl
+ inc hl
+ pop bc
+ dec b
+ jr nz, .row
+ ret
+; d0551
+
+PokeAnim_GetAttrMapCoord: ; d0551
+ ld hl, wPokeAnimCoord
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld de, AttrMap - TileMap
+ add hl, de
+ ret
+; d055c
+
+GetMonAnimPointer: ; d055c
+ call PokeAnim_IsEgg
+ jr z, .egg
+
+ ld c, BANK(UnownAnimations)
+ ld hl, UnownAnimationPointers
+ ld de, UnownAnimationExtraPointers
+ call PokeAnim_IsUnown
+ jr z, .unown
+ ld c, BANK(PicAnimations)
+ ld hl, AnimationPointers
+ ld de, AnimationExtraPointers
+.unown
+
+ ld a, [wPokeAnimExtraFlag]
+ and a
+ jr z, .extras
+ ld h, d
+ ld l, e
+.extras
+
+ ld a, [wPokeAnimSpeciesOrUnown]
+ dec a
+ ld e, a
+ ld d, 0
+ add hl, de
+ add hl, de
+ ld a, c
+ ld [wPokeAnimPointerBank], a
+ call GetFarHalfword
+ ld a, l
+ ld [wPokeAnimPointerAddr], a
+ ld a, h
+ ld [wPokeAnimPointerAddr + 1], a
+ ret
+
+.egg
+ ld hl, EggAnimation
+ ld c, BANK(EggAnimation)
+ ld a, [wPokeAnimExtraFlag]
+ and a
+ jr z, .extras_egg
+ ld hl, EggAnimationExtra
+ ld c, BANK(EggAnimationExtra)
+.extras_egg
+
+ ld a, c
+ ld [wPokeAnimPointerBank], a
+ ld a, l
+ ld [wPokeAnimPointerAddr], a
+ ld a, h
+ ld [wPokeAnimPointerAddr + 1], a
+ ret
+; d05b4
+
+PokeAnim_GetFrontpicDims: ; d05b4
+ ld a, [rSVBK]
+ push af
+ ld a, BANK(CurPartySpecies)
+ ld [rSVBK], a
+ ld a, [CurPartySpecies]
+ ld [CurSpecies], a
+ call GetBaseData
+ ld a, [BasePicSize]
+ and $f
+ ld c, a
+ pop af
+ ld [rSVBK], a
+ ret
+; d05ce
+
+GetMonFramesPointer: ; d05ce
+ call PokeAnim_IsEgg
+ jr z, .egg
+
+ call PokeAnim_IsUnown
+ ld b, BANK(UnownFramesPointers)
+ ld c, BANK(UnownsFrames)
+ ld hl, UnownFramesPointers
+ jr z, .got_frames
+ ld a, [wPokeAnimSpecies]
+ cp CHIKORITA
+ ld b, BANK(FramesPointers)
+ ld c, BANK(KantoFrames)
+ ld hl, FramesPointers
+ jr c, .got_frames
+ ld c, BANK(JohtoFrames)
+.got_frames
+ ld a, c
+ ld [wPokeAnimFramesBank], a
+
+ ld a, [wPokeAnimSpeciesOrUnown]
+ dec a
+ ld e, a
+ ld d, 0
+ add hl, de
+ add hl, de
+ ld a, b
+ call GetFarHalfword
+ ld a, l
+ ld [wPokeAnimFramesAddr], a
+ ld a, h
+ ld [wPokeAnimFramesAddr + 1], a
+ ret
+
+.egg
+ ld hl, EggFrames
+ ld c, BANK(EggFrames)
+ ld a, c
+ ld [wPokeAnimFramesBank], a
+ ld a, l
+ ld [wPokeAnimFramesAddr], a
+ ld a, h
+ ld [wPokeAnimFramesAddr + 1], a
+ ret
+; d061b
+
+GetMonBitmaskPointer: ; d061b
+ call PokeAnim_IsEgg
+ jr z, .egg
+
+ call PokeAnim_IsUnown
+ ld a, BANK(UnownBitmasksPointers)
+ ld hl, UnownBitmasksPointers
+ jr z, .unown
+ ld a, BANK(BitmasksPointers)
+ ld hl, BitmasksPointers
+.unown
+ ld [wPokeAnimBitmaskBank], a
+
+ ld a, [wPokeAnimSpeciesOrUnown]
+ dec a
+ ld e, a
+ ld d, 0
+ add hl, de
+ add hl, de
+ ld a, [wPokeAnimBitmaskBank]
+ call GetFarHalfword
+ ld a, l
+ ld [wPokeAnimBitmaskAddr], a
+ ld a, h
+ ld [wPokeAnimBitmaskAddr + 1], a
+ ret
+
+.egg
+ ld c, BANK(EggBitmasks)
+ ld hl, EggBitmasks
+ ld a, c
+ ld [wPokeAnimBitmaskBank], a
+ ld a, l
+ ld [wPokeAnimBitmaskAddr], a
+ ld a, h
+ ld [wPokeAnimBitmaskAddr + 1], a
+ ret
+; d065c
+
+PokeAnim_GetSpeciesOrUnown: ; d065c
+ call PokeAnim_IsUnown
+ jr z, .unown
+ ld a, [wPokeAnimSpecies]
+ ret
+
+.unown
+ ld a, [wPokeAnimUnownLetter]
+ ret
+; d0669
+
+Predef48: ; d0669 Predef 48
+ ld a, $1
+ ld [wBoxAlignment], a
+HOF_AnimateFrontpic: ; d066e Predef 49
+ call AnimateMon_CheckIfPokemon
+ jr c, .fail
+ ld h, d
+ ld l, e
+ push bc
+ push hl
+ ld de, VTiles2
+ predef GetAnimatedFrontpicPredef
+ pop hl
+ pop bc
+ ld d, 0
+ ld e, c
+ call AnimateFrontpic
+ xor a
+ ld [wBoxAlignment], a
+ ret
+
+.fail
+ xor a
+ ld [wBoxAlignment], a
+ inc a
+ ld [CurPartySpecies], a
+ ret
+; d0695
--- a/gfx/pokemon/animation.asm
+++ /dev/null
@@ -1,1140 +1,0 @@
-; Pic animation arrangement.
-
-AnimateMon_Slow_Normal: ; d0000
- hlcoord 12, 0
- ld a, [wBattleMode]
- cp WILD_BATTLE
- jr z, .wild
- ld e, ANIM_MON_SLOW
- ld d, $0
- call AnimateFrontpic
- ret
-
-.wild
- ld e, ANIM_MON_NORMAL
- ld d, $0
- call AnimateFrontpic
- ret
-; d001a
-
-AnimateMon_Menu: ; d001a
- ld e, ANIM_MON_MENU
- ld d, $0
- call AnimateFrontpic
- ret
-; d0022
-
-AnimateMon_Trade: ; d0022
- ld e, ANIM_MON_TRADE
- ld d, $0
- call AnimateFrontpic
- ret
-; d002a
-
-AnimateMon_Evolve: ; d002a
- ld e, ANIM_MON_EVOLVE
- ld d, $0
- call AnimateFrontpic
- ret
-; d0032
-
-AnimateMon_Hatch: ; d0032
- ld e, ANIM_MON_HATCH
- ld d, $0
- call AnimateFrontpic
- ret
-; d003a
-
-AnimateMon_Unused: ; d003a
- ld e, ANIM_MON_UNUSED
- ld d, $0
- call AnimateFrontpic
- ret
-; d0042
-
-pokeanim: MACRO
- rept _NARG
-; Workaround for a bug where macro args can't come after the start of a symbol
-if !def(\1_POKEANIM)
-\1_POKEANIM equs "PokeAnim_\1_"
-endc
- db (\1_POKEANIM - PokeAnim_SetupCommands) / 2
- shift
- endr
- db (PokeAnim_Finish_ - PokeAnim_SetupCommands) / 2
-ENDM
-
-PokeAnims: ; d0042
- dw .Slow
- dw .Normal
- dw .Menu
- dw .Trade
- dw .Evolve
- dw .Hatch
- dw .Unused ; same as .Menu
- dw .Egg1
- dw .Egg2
-
-.Slow: pokeanim StereoCry, Setup2, Play
-.Normal: pokeanim StereoCry, Setup, Play
-.Menu: pokeanim CryNoWait, Setup, Play, SetWait, Wait, Extra, Play
-.Trade: pokeanim Extra, Play2, Extra, Play, SetWait, Wait, Cry, Setup, Play
-.Evolve: pokeanim Extra, Play, SetWait, Wait, CryNoWait, Setup, Play
-.Hatch: pokeanim Extra, Play, CryNoWait, Setup, Play, SetWait, Wait, Extra, Play
-.Unused: pokeanim CryNoWait, Setup, Play, SetWait, Wait, Extra, Play
-.Egg1: pokeanim Setup, Play
-.Egg2: pokeanim Extra, Play
-
-
-AnimateFrontpic: ; d008e
- call AnimateMon_CheckIfPokemon
- ret c
- call LoadMonAnimation
-.loop
- call SetUpPokeAnim
- push af
- farcall HDMATransferTileMapToWRAMBank3
- pop af
- jr nc, .loop
- ret
-; d00a3
-
-LoadMonAnimation: ; d00a3
- push hl
- ld c, e
- ld b, 0
- ld hl, PokeAnims
- add hl, bc
- add hl, bc
- ld a, [hli]
- ld b, [hl]
- ld c, a
- pop hl
- call PokeAnim_InitPicAttributes
- ret
-; d00b4
-
-SetUpPokeAnim: ; d00b4
- ld a, [rSVBK]
- push af
- ld a, BANK(wPokeAnimSceneIndex)
- ld [rSVBK], a
- ld a, [wPokeAnimSceneIndex]
- ld c, a
- ld b, 0
- ld hl, wPokeAnimPointer
- ld a, [hli]
- ld h, [hl]
- ld l, a
- add hl, bc
- ld a, [hl]
- ld hl, PokeAnim_SetupCommands
- rst JumpTable
- ld a, [wPokeAnimSceneIndex]
- ld c, a
- pop af
- ld [rSVBK], a
- ld a, c
- and $80
- ret z
- scf
- ret
-; d00da
-
-PokeAnim_SetupCommands: ; d00da
-setup_command: macro
-\1_: dw \1
-endm
- setup_command PokeAnim_Finish
- setup_command PokeAnim_BasePic
- setup_command PokeAnim_SetWait
- setup_command PokeAnim_Wait
- setup_command PokeAnim_Setup
- setup_command PokeAnim_Setup2
- setup_command PokeAnim_Extra
- setup_command PokeAnim_Play
- setup_command PokeAnim_Play2
- setup_command PokeAnim_Cry
- setup_command PokeAnim_CryNoWait
- setup_command PokeAnim_StereoCry
-; d00f2
-
-PokeAnim_SetWait: ; d00f2
- ld a, 18
- ld [wPokeAnimWaitCounter], a
- ld a, [wPokeAnimSceneIndex]
- inc a
- ld [wPokeAnimSceneIndex], a
-
-PokeAnim_Wait: ; d00fe
- ld hl, wPokeAnimWaitCounter
- dec [hl]
- ret nz
- ld a, [wPokeAnimSceneIndex]
- inc a
- ld [wPokeAnimSceneIndex], a
- ret
-; d010b
-
-PokeAnim_Setup: ; d010b
- ld c, FALSE
- ld b, 0
- call PokeAnim_InitAnim
- call PokeAnim_SetVBank1
- ld a, [wPokeAnimSceneIndex]
- inc a
- ld [wPokeAnimSceneIndex], a
- ret
-; d011d
-
-PokeAnim_Setup2: ; d011d
- ld c, FALSE
- ld b, 4
- call PokeAnim_InitAnim
- call PokeAnim_SetVBank1
- ld a, [wPokeAnimSceneIndex]
- inc a
- ld [wPokeAnimSceneIndex], a
- ret
-; d012f
-
-PokeAnim_Extra: ; d012f
- ld c, TRUE
- ld b, 0
- call PokeAnim_InitAnim
- call PokeAnim_SetVBank1
- ld a, [wPokeAnimSceneIndex]
- inc a
- ld [wPokeAnimSceneIndex], a
- ret
-; d0141
-
-PokeAnim_Play: ; d0141
- call PokeAnim_DoAnimScript
- ld a, [wPokeAnimJumptableIndex]
- bit 7, a
- ret z
- call PokeAnim_PlaceGraphic
- ld a, [wPokeAnimSceneIndex]
- inc a
- ld [wPokeAnimSceneIndex], a
- ret
-; d0155
-
-PokeAnim_Play2: ; d0155
- call PokeAnim_DoAnimScript
- ld a, [wPokeAnimJumptableIndex]
- bit 7, a
- ret z
- ld a, [wPokeAnimSceneIndex]
- inc a
- ld [wPokeAnimSceneIndex], a
- ret
-; d0166
-
-PokeAnim_BasePic: ; d0166
- call PokeAnim_DeinitFrames
- ld a, [wPokeAnimSceneIndex]
- inc a
- ld [wPokeAnimSceneIndex], a
- ret
-; d0171
-
-PokeAnim_Finish: ; d0171
- call PokeAnim_DeinitFrames
- ld hl, wPokeAnimSceneIndex
- set 7, [hl]
- ret
-; d017a
-
-PokeAnim_Cry: ; d017a
- ld a, [wPokeAnimSpecies]
- call _PlayCry
- ld a, [wPokeAnimSceneIndex]
- inc a
- ld [wPokeAnimSceneIndex], a
- ret
-; d0188
-
-PokeAnim_CryNoWait: ; d0188
- ld a, [wPokeAnimSpecies]
- call PlayCry2
- ld a, [wPokeAnimSceneIndex]
- inc a
- ld [wPokeAnimSceneIndex], a
- ret
-; d0196
-
-PokeAnim_StereoCry: ; d0196
- ld a, $f
- ld [CryTracks], a
- ld a, [wPokeAnimSpecies]
- call PlayStereoCry2
- ld a, [wPokeAnimSceneIndex]
- inc a
- ld [wPokeAnimSceneIndex], a
- ret
-; d01a9
-
-PokeAnim_DeinitFrames: ; d01a9
- ld a, [rSVBK]
- push af
- ld a, $2
- ld [rSVBK], a
- call PokeAnim_PlaceGraphic
- farcall HDMATransferTileMapToWRAMBank3
- call PokeAnim_SetVBank0
- farcall HDMATransferAttrMapToWRAMBank3
- pop af
- ld [rSVBK], a
- ret
-; d01c6
-
-AnimateMon_CheckIfPokemon: ; d01c6
- ld a, [CurPartySpecies]
- cp EGG
- jr z, .fail
- call IsAPokemon
- jr c, .fail
- and a
- ret
-
-.fail
- scf
- ret
-; d01d6
-
-PokeAnim_InitPicAttributes: ; d01d6
- ld a, [rSVBK]
- push af
- ld a, BANK(wPokeAnimSceneIndex)
- ld [rSVBK], a
-
- push bc
- push de
- push hl
- ld hl, wPokeAnimSceneIndex
- ld bc, wPokeAnimStructEnd - wPokeAnimSceneIndex
- xor a
- call ByteFill
- pop hl
- pop de
- pop bc
-
-; bc contains anim pointer
- ld a, c
- ld [wPokeAnimPointer], a
- ld a, b
- ld [wPokeAnimPointer + 1], a
-; hl contains TileMap coords
- ld a, l
- ld [wPokeAnimCoord], a
- ld a, h
- ld [wPokeAnimCoord + 1], a
-; d = start tile
- ld a, d
- ld [wPokeAnimGraphicStartTile], a
-
- ld a, $1
- ld hl, CurPartySpecies
- call GetFarWRAMByte
- ld [wPokeAnimSpecies], a
-
- ld a, $1
- ld hl, UnownLetter
- call GetFarWRAMByte
- ld [wPokeAnimUnownLetter], a
-
- call PokeAnim_GetSpeciesOrUnown
- ld [wPokeAnimSpeciesOrUnown], a
-
- call PokeAnim_GetFrontpicDims
- ld a, c
- ld [wPokeAnimFrontpicHeight], a
-
- pop af
- ld [rSVBK], a
- ret
-; d0228
-
-PokeAnim_InitAnim: ; d0228
- ld a, [rSVBK]
- push af
- ld a, BANK(wPokeAnimExtraFlag)
- ld [rSVBK], a
- push bc
- ld hl, wPokeAnimExtraFlag
- ld bc, wPokeAnimStructEnd - wPokeAnimExtraFlag
- xor a
- call ByteFill
- pop bc
- ld a, b
- ld [wPokeAnimSpeed], a
- ld a, c
- ld [wPokeAnimExtraFlag], a
- call GetMonAnimPointer
- call GetMonFramesPointer
- call GetMonBitmaskPointer
- pop af
- ld [rSVBK], a
- ret
-; d0250
-
-PokeAnim_DoAnimScript: ; d0250
- xor a
- ld [hBGMapMode], a
-.loop
- ld a, [wPokeAnimJumptableIndex]
- and $7f
- ld hl, .Jumptable
- rst JumpTable
- ret
-; d025d
-
-.Jumptable: ; d025d
- dw .RunAnim
- dw .WaitAnim
-; d0261
-
-.RunAnim: ; d0261
- call PokeAnim_GetPointer
- ld a, [wPokeAnimCommand]
- cp -1
- jr z, PokeAnim_End
- cp -2
- jr z, .SetRepeat
- cp -3
- jr z, .DoRepeat
- call PokeAnim_GetFrame
- ld a, [wPokeAnimParameter]
- call PokeAnim_GetDuration
- ld [wPokeAnimWaitCounter], a
- call PokeAnim_StartWaitAnim
-.WaitAnim: ; d0282
- ld a, [wPokeAnimWaitCounter]
- dec a
- ld [wPokeAnimWaitCounter], a
- ret nz
- call PokeAnim_StopWaitAnim
- ret
-; d028e
-
-.SetRepeat: ; d028e
- ld a, [wPokeAnimParameter]
- ld [wPokeAnimRepeatTimer], a
- jr .loop
-; d0296
-
-.DoRepeat: ; d0296
- ld a, [wPokeAnimRepeatTimer]
- and a
- ret z
- dec a
- ld [wPokeAnimRepeatTimer], a
- ret z
- ld a, [wPokeAnimParameter]
- ld [wPokeAnimFrame], a
- jr .loop
-; d02a8
-
-PokeAnim_End: ; d02a8
- ld hl, wPokeAnimJumptableIndex
- set 7, [hl]
- ret
-; d02ae
-
-PokeAnim_GetDuration: ; d02ae
-; a * (1 + [wPokeAnimSpeed] / 16)
- ld c, a
- ld b, $0
- ld hl, 0
- ld a, [wPokeAnimSpeed]
- call AddNTimes
- ld a, h
- swap a
- and $f0
- ld h, a
- ld a, l
- swap a
- and $f
- or h
- add c
- ret
-; d02c8
-
-PokeAnim_GetFrame: ; d02c8
- call PokeAnim_PlaceGraphic
- ld a, [wPokeAnimCommand]
- and a
- ret z
- call PokeAnim_GetBitmaskIndex
- push hl
- call PokeAnim_CopyBitmaskToBuffer
- pop hl
- call PokeAnim_ConvertAndApplyBitmask
- ret
-; d02dc
-
-PokeAnim_StartWaitAnim: ; d02dc
- ld a, [wPokeAnimJumptableIndex]
- inc a
- ld [wPokeAnimJumptableIndex], a
- ret
-; d02e4
-
-PokeAnim_StopWaitAnim: ; d02e4
- ld a, [wPokeAnimJumptableIndex]
- dec a
- ld [wPokeAnimJumptableIndex], a
- ret
-; d02ec
-
-PokeAnim_IsUnown: ; d02ec
- ld a, [wPokeAnimSpecies]
- cp UNOWN
- ret
-; d02f2
-
-PokeAnim_IsEgg: ; d02f2
- ld a, [wPokeAnimSpecies]
- cp EGG
- ret
-; d02f8
-
-PokeAnim_GetPointer: ; d02f8
- push hl
- ld a, [wPokeAnimFrame]
- ld e, a
- ld d, $0
- ld hl, wPokeAnimPointerAddr
- ld a, [hli]
- ld h, [hl]
- ld l, a
- add hl, de
- add hl, de
- ld a, [wPokeAnimPointerBank]
- call GetFarHalfword
- ld a, l
- ld [wPokeAnimCommand], a
- ld a, h
- ld [wPokeAnimParameter], a
- ld hl, wPokeAnimFrame
- inc [hl]
- pop hl
- ret
-; d031b
-
-PokeAnim_GetBitmaskIndex: ; d031b
- ld a, [wPokeAnimCommand]
- dec a
- ld c, a
- ld b, $0
- ld hl, wPokeAnimFramesAddr
- ld a, [hli]
- ld h, [hl]
- ld l, a
- add hl, bc
- add hl, bc
- ld a, [wPokeAnimFramesBank]
- call GetFarHalfword
- ld a, [wPokeAnimFramesBank]
- call GetFarByte
- ld [wPokeAnimCurBitmask], a
- inc hl
- ret
-; d033b
-
-PokeAnim_CopyBitmaskToBuffer: ; d033b
- call .GetSize
- push bc
- ld hl, wPokeAnimBitmaskAddr
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld a, [wPokeAnimCurBitmask]
- call AddNTimes
- pop bc
- ld de, wPokeAnimBitmaskBuffer
- ld a, [wPokeAnimBitmaskBank]
- call FarCopyBytes
- ret
-; d0356
-
-.GetSize: ; d0356
- push hl
- ld a, [wPokeAnimFrontpicHeight]
- sub 5 ; to get a number 0, 1, or 2
- ld c, a
- ld b, 0
- ld hl, .Sizes
- add hl, bc
- ld c, [hl]
- ld b, 0
- pop hl
- ret
-; d0368
-
-.Sizes: db 4, 5, 7
-
-poke_anim_box: MACRO
-y = 7
-rept \1
-x = 7 +- \1
-rept \1
- db x + y
-x = x + 1
-endr
-y = y + 7
-endr
-endm
-
-PokeAnim_ConvertAndApplyBitmask: ; d036b
- xor a
- ld [wPokeAnimBitmaskCurBit], a
- ld [wPokeAnimBitmaskCurRow], a
- ld [wPokeAnimBitmaskCurCol], a
-.loop
- push hl
- call .IsCurBitSet
- pop hl
- ld a, b
- and a
- jr z, .next
-
- ld a, [wPokeAnimFramesBank]
- call GetFarByte
- inc hl
- push hl
- call .ApplyFrame
- pop hl
-
-.next
- push hl
- call .NextBit
- pop hl
- jr nc, .loop
- ret
-; d0392
-
-.IsCurBitSet: ; d0392
-; which byte
- ld a, [wPokeAnimBitmaskCurBit]
- and $f8
- rrca
- rrca
- rrca
- ld e, a
- ld d, 0
- ld hl, wPokeAnimBitmaskBuffer
- add hl, de
- ld b, [hl]
-; which bit
- ld a, [wPokeAnimBitmaskCurBit]
- and $7
- jr z, .skip
-
- ld c, a
- ld a, b
-.loop2
- rrca
- dec c
- jr nz, .loop2
- ld b, a
-
-.skip
- xor a
- bit 0, b
- jr z, .finish
- ld a, 1
-
-.finish
- ld b, a
- ld hl, wPokeAnimBitmaskCurBit
- inc [hl]
- ret
-; d03bd
-
-.ApplyFrame: ; d03bd
- push af
- call .GetCoord
- pop af
- push hl
- call .GetTilemap
- ld hl, wPokeAnimGraphicStartTile
- add [hl]
- pop hl
- ld [hl], a
- ret
-; d03cd
-
-.GetCoord: ; d03cd
- call .GetStartCoord
- ld a, [wPokeAnimBitmaskCurRow]
- ld bc, SCREEN_WIDTH
- call AddNTimes
- ld a, [wBoxAlignment]
- and a
- jr nz, .go
- ld a, [wPokeAnimBitmaskCurCol]
- ld e, a
- ld d, 0
- add hl, de
- jr .skip2
-
-.go
- ld a, [wPokeAnimBitmaskCurCol]
- ld e, a
- ld a, l
- sub e
- ld l, a
- ld a, h
- sbc 0
- ld h, a
-
-.skip2
- ret
-; d03f4
-
-; XXX
- db 6, 5, 4
-
-.GetTilemap: ; d03f7
- push af
- ld a, [wPokeAnimFrontpicHeight]
- cp 5
- jr z, .check_add_24
- cp 6
- jr z, .check_add_13
- pop af
- ret
-
-.check_add_24
- pop af
- cp 5 * 5
- jr nc, .add_24
- push hl
- push de
- ld hl, ._5by5
- ld e, a
- ld d, 0
- add hl, de
- ld a, [hl]
- pop de
- pop hl
- ret
-
-.add_24
- add 24
- ret
-
-.check_add_13
- pop af
- cp 6 * 6
- jr nc, .add_13
- push hl
- push de
- ld hl, ._6by6
- ld e, a
- ld d, 0
- add hl, de
- ld a, [hl]
- pop de
- pop hl
- ret
-
-.add_13
- add 13
- ret
-; d042f
-
-._5by5:
- poke_anim_box 5
- ; db 9, 10, 11, 12, 13
- ; db 16, 17, 18, 19, 20
- ; db 23, 24, 25, 26, 27
- ; db 30, 31, 32, 33, 34
- ; db 37, 38, 39, 40, 41
-
-._6by6:
- poke_anim_box 6
- ; db 8, 9, 10, 11, 12, 13
- ; db 15, 16, 17, 18, 19, 20
- ; db 22, 23, 24, 25, 26, 27
- ; db 29, 30, 31, 32, 33, 34
- ; db 36, 37, 38, 39, 40, 41
- ; db 43, 44, 45, 46, 47, 48
-
-
-.GetStartCoord: ; d046c
- ld hl, wPokeAnimCoord
- ld a, [hli]
- ld h, [hl]
- ld l, a
-
- ld a, [wPokeAnimFrontpicHeight]
- ld de, 0
- ld bc, 6
- cp 7
- jr z, .okay
- ld de, SCREEN_WIDTH + 1
- ld bc, SCREEN_WIDTH + 5
- cp 6
- jr z, .okay
- ld de, 2 * SCREEN_WIDTH + 1
- ld bc, 2 * SCREEN_WIDTH + 5
-.okay
-
- ld a, [wBoxAlignment]
- and a
- jr nz, .add_bc
- add hl, de
- ret
-
-.add_bc
- add hl, bc
- ret
-; d0499
-
-.NextBit: ; d0499
- ld a, [wPokeAnimBitmaskCurRow]
- inc a
- ld [wPokeAnimBitmaskCurRow], a
- ld c, a
- ld a, [wPokeAnimFrontpicHeight]
- cp c
- jr nz, .no_carry
- xor a
- ld [wPokeAnimBitmaskCurRow], a
- ld a, [wPokeAnimBitmaskCurCol]
- inc a
- ld [wPokeAnimBitmaskCurCol], a
- ld c, a
- ld a, [wPokeAnimFrontpicHeight]
- cp c
- jr nz, .no_carry
- scf
- ret
-
-.no_carry
- xor a
- ret
-; d04bd
-
-PokeAnim_PlaceGraphic: ; d04bd
- call .ClearBox
- ld a, [wBoxAlignment]
- and a
- jr nz, .flipped
- ld de, 1
- ld bc, 0
- jr .okay
-
-.flipped
- ld de, -1
- ld bc, 6
-
-.okay
- ld hl, wPokeAnimCoord
- ld a, [hli]
- ld h, [hl]
- ld l, a
- add hl, bc
- ld c, 7
- ld b, 7
- ld a, [wPokeAnimGraphicStartTile]
-.loop
- push bc
- push hl
- push de
- ld de, SCREEN_WIDTH
-.loop2
- ld [hl], a
- inc a
- add hl, de
- dec b
- jr nz, .loop2
- pop de
- pop hl
- add hl, de
- pop bc
- dec c
- jr nz, .loop
- ret
-; d04f6
-
-.ClearBox: ; d04f6
- ld hl, wPokeAnimCoord
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld b, 7
- ld c, 7
- call ClearBox
- ret
-; d0504
-
-PokeAnim_SetVBank1: ; d0504
- ld a, [rSVBK]
- push af
- ld a, $2
- ld [rSVBK], a
- xor a
- ld [hBGMapMode], a
- call .SetFlag
- farcall HDMATransferAttrMapToWRAMBank3
- pop af
- ld [rSVBK], a
- ret
-; d051b
-
-.SetFlag: ; d051b
- call PokeAnim_GetAttrMapCoord
- ld b, 7
- ld c, 7
- ld de, SCREEN_WIDTH
-.row
- push bc
- push hl
-.col
- ld a, [hl]
- or 8
- ld [hl], a
- add hl, de
- dec c
- jr nz, .col
- pop hl
- inc hl
- pop bc
- dec b
- jr nz, .row
- ret
-; d0536
-
-PokeAnim_SetVBank0: ; d0536
- call PokeAnim_GetAttrMapCoord
- ld b, 7
- ld c, 7
- ld de, SCREEN_WIDTH
-.row
- push bc
- push hl
-.col
- ld a, [hl]
- and $f7
- ld [hl], a
- add hl, de
- dec c
- jr nz, .col
- pop hl
- inc hl
- pop bc
- dec b
- jr nz, .row
- ret
-; d0551
-
-PokeAnim_GetAttrMapCoord: ; d0551
- ld hl, wPokeAnimCoord
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld de, AttrMap - TileMap
- add hl, de
- ret
-; d055c
-
-GetMonAnimPointer: ; d055c
- call PokeAnim_IsEgg
- jr z, .egg
-
- ld c, BANK(UnownAnimations)
- ld hl, UnownAnimationPointers
- ld de, UnownAnimationExtraPointers
- call PokeAnim_IsUnown
- jr z, .unown
- ld c, BANK(PicAnimations)
- ld hl, AnimationPointers
- ld de, AnimationExtraPointers
-.unown
-
- ld a, [wPokeAnimExtraFlag]
- and a
- jr z, .extras
- ld h, d
- ld l, e
-.extras
-
- ld a, [wPokeAnimSpeciesOrUnown]
- dec a
- ld e, a
- ld d, 0
- add hl, de
- add hl, de
- ld a, c
- ld [wPokeAnimPointerBank], a
- call GetFarHalfword
- ld a, l
- ld [wPokeAnimPointerAddr], a
- ld a, h
- ld [wPokeAnimPointerAddr + 1], a
- ret
-
-.egg
- ld hl, EggAnimation
- ld c, BANK(EggAnimation)
- ld a, [wPokeAnimExtraFlag]
- and a
- jr z, .extras_egg
- ld hl, EggAnimationExtra
- ld c, BANK(EggAnimationExtra)
-.extras_egg
-
- ld a, c
- ld [wPokeAnimPointerBank], a
- ld a, l
- ld [wPokeAnimPointerAddr], a
- ld a, h
- ld [wPokeAnimPointerAddr + 1], a
- ret
-; d05b4
-
-PokeAnim_GetFrontpicDims: ; d05b4
- ld a, [rSVBK]
- push af
- ld a, BANK(CurPartySpecies)
- ld [rSVBK], a
- ld a, [CurPartySpecies]
- ld [CurSpecies], a
- call GetBaseData
- ld a, [BasePicSize]
- and $f
- ld c, a
- pop af
- ld [rSVBK], a
- ret
-; d05ce
-
-GetMonFramesPointer: ; d05ce
- call PokeAnim_IsEgg
- jr z, .egg
-
- call PokeAnim_IsUnown
- ld b, BANK(UnownFramesPointers)
- ld c, BANK(UnownsFrames)
- ld hl, UnownFramesPointers
- jr z, .got_frames
- ld a, [wPokeAnimSpecies]
- cp CHIKORITA
- ld b, BANK(FramesPointers)
- ld c, BANK(KantoFrames)
- ld hl, FramesPointers
- jr c, .got_frames
- ld c, BANK(JohtoFrames)
-.got_frames
- ld a, c
- ld [wPokeAnimFramesBank], a
-
- ld a, [wPokeAnimSpeciesOrUnown]
- dec a
- ld e, a
- ld d, 0
- add hl, de
- add hl, de
- ld a, b
- call GetFarHalfword
- ld a, l
- ld [wPokeAnimFramesAddr], a
- ld a, h
- ld [wPokeAnimFramesAddr + 1], a
- ret
-
-.egg
- ld hl, EggFrames
- ld c, BANK(EggFrames)
- ld a, c
- ld [wPokeAnimFramesBank], a
- ld a, l
- ld [wPokeAnimFramesAddr], a
- ld a, h
- ld [wPokeAnimFramesAddr + 1], a
- ret
-; d061b
-
-GetMonBitmaskPointer: ; d061b
- call PokeAnim_IsEgg
- jr z, .egg
-
- call PokeAnim_IsUnown
- ld a, BANK(UnownBitmasksPointers)
- ld hl, UnownBitmasksPointers
- jr z, .unown
- ld a, BANK(BitmasksPointers)
- ld hl, BitmasksPointers
-.unown
- ld [wPokeAnimBitmaskBank], a
-
- ld a, [wPokeAnimSpeciesOrUnown]
- dec a
- ld e, a
- ld d, 0
- add hl, de
- add hl, de
- ld a, [wPokeAnimBitmaskBank]
- call GetFarHalfword
- ld a, l
- ld [wPokeAnimBitmaskAddr], a
- ld a, h
- ld [wPokeAnimBitmaskAddr + 1], a
- ret
-
-.egg
- ld c, BANK(EggBitmasks)
- ld hl, EggBitmasks
- ld a, c
- ld [wPokeAnimBitmaskBank], a
- ld a, l
- ld [wPokeAnimBitmaskAddr], a
- ld a, h
- ld [wPokeAnimBitmaskAddr + 1], a
- ret
-; d065c
-
-PokeAnim_GetSpeciesOrUnown: ; d065c
- call PokeAnim_IsUnown
- jr z, .unown
- ld a, [wPokeAnimSpecies]
- ret
-
-.unown
- ld a, [wPokeAnimUnownLetter]
- ret
-; d0669
-
-Predef48: ; d0669 Predef 48
- ld a, $1
- ld [wBoxAlignment], a
-HOF_AnimateFrontpic: ; d066e Predef 49
- call AnimateMon_CheckIfPokemon
- jr c, .fail
- ld h, d
- ld l, e
- push bc
- push hl
- ld de, VTiles2
- predef GetAnimatedFrontpicPredef
- pop hl
- pop bc
- ld d, 0
- ld e, c
- call AnimateFrontpic
- xor a
- ld [wBoxAlignment], a
- ret
-
-.fail
- xor a
- ld [wBoxAlignment], a
- inc a
- ld [CurPartySpecies], a
- ret
-; d0695
--- a/main.asm
+++ b/main.asm
@@ -413,7 +413,7 @@
SECTION "Pic Animations 1", ROMX
-INCLUDE "gfx/pokemon/animation.asm"
+INCLUDE "engine/pic_animation.asm"
INCLUDE "gfx/pokemon/anim_pointers.asm"
INCLUDE "gfx/pokemon/anims.asm"
INCLUDE "gfx/pokemon/extra_pointers.asm"