Merge pull request #601 from mid-kid/master

Exciting adventures down battle animation street!
This commit is contained in:
Rangi 2019-02-16 13:23:17 -05:00 committed by GitHub
commit 771d2efd65
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 190 additions and 145 deletions

View File

@ -25,6 +25,7 @@
const BATTLEANIMSTRUCT_16 const BATTLEANIMSTRUCT_16
const BATTLEANIMSTRUCT_17 const BATTLEANIMSTRUCT_17
BATTLEANIMSTRUCT_LENGTH EQU const_value BATTLEANIMSTRUCT_LENGTH EQU const_value
NUM_ANIM_OBJECTS EQU 10 ; see wActiveAnimObjects
; Start tile for battle animation graphics ; Start tile for battle animation graphics
BATTLEANIM_BASE_TILE EQU 7 * 7 ; Maximum size of a pokemon picture BATTLEANIM_BASE_TILE EQU 7 * 7 ; Maximum size of a pokemon picture
@ -816,6 +817,8 @@ BATTLEANIM_BASE_TILE EQU 7 * 7 ; Maximum size of a pokemon picture
const BG_EFFECT_STRUCT_JT_INDEX const BG_EFFECT_STRUCT_JT_INDEX
const BG_EFFECT_STRUCT_BATTLE_TURN const BG_EFFECT_STRUCT_BATTLE_TURN
const BG_EFFECT_STRUCT_03 const BG_EFFECT_STRUCT_03
BG_EFFECT_STRUCT_LENGTH EQU const_value
NUM_BG_EFFECTS EQU 5 ; see wActiveBGEffects
; battle palettes ; battle palettes
const_def const_def

View File

@ -123,6 +123,13 @@ DARKNESS EQU 1 << DARKNESS_F
ANYTIME EQU MORN | DAY | NITE ANYTIME EQU MORN | DAY | NITE
; wBattleAnimFlags:: ; d40f
const_def
const BATTLEANIM_STOP_F ; 0
const BATTLEANIM_IN_SUBROUTINE_F ; 1
const BATTLEANIM_IN_LOOP_F ; 2
const BATTLEANIM_KEEPSPRITES_F ; 3
; wPlayerSpriteSetupFlags:: ; d45b ; wPlayerSpriteSetupFlags:: ; d45b
PLAYERSPRITESETUP_FACING_MASK EQU %11 PLAYERSPRITESETUP_FACING_MASK EQU %11
PLAYERSPRITESETUP_FEMALE_TO_MALE_F EQU 2 PLAYERSPRITESETUP_FEMALE_TO_MALE_F EQU 2

View File

@ -230,11 +230,11 @@ BattleAnimFrameData:
frame BATTLEANIMOAMSET_4C, 2 frame BATTLEANIMOAMSET_4C, 2
frame BATTLEANIMOAMSET_4D, 4 frame BATTLEANIMOAMSET_4D, 4
frame BATTLEANIMOAMSET_4E, 2 frame BATTLEANIMOAMSET_4E, 2
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_4E, 2 frame BATTLEANIMOAMSET_4E, 2
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_4E, 2 frame BATTLEANIMOAMSET_4E, 2
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_4E, 2 frame BATTLEANIMOAMSET_4E, 2
delanim delanim
@ -243,11 +243,11 @@ BattleAnimFrameData:
frame BATTLEANIMOAMSET_4C, 2, OAM_X_FLIP frame BATTLEANIMOAMSET_4C, 2, OAM_X_FLIP
frame BATTLEANIMOAMSET_4D, 4, OAM_X_FLIP frame BATTLEANIMOAMSET_4D, 4, OAM_X_FLIP
frame BATTLEANIMOAMSET_4E, 2, OAM_X_FLIP frame BATTLEANIMOAMSET_4E, 2, OAM_X_FLIP
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_4E, 2, OAM_X_FLIP frame BATTLEANIMOAMSET_4E, 2, OAM_X_FLIP
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_4E, 2, OAM_X_FLIP frame BATTLEANIMOAMSET_4E, 2, OAM_X_FLIP
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_4E, 2, OAM_X_FLIP frame BATTLEANIMOAMSET_4E, 2, OAM_X_FLIP
delanim delanim
@ -256,11 +256,11 @@ BattleAnimFrameData:
frame BATTLEANIMOAMSET_4C, 2, OAM_X_FLIP, OAM_Y_FLIP frame BATTLEANIMOAMSET_4C, 2, OAM_X_FLIP, OAM_Y_FLIP
frame BATTLEANIMOAMSET_4D, 4, OAM_X_FLIP, OAM_Y_FLIP frame BATTLEANIMOAMSET_4D, 4, OAM_X_FLIP, OAM_Y_FLIP
frame BATTLEANIMOAMSET_4E, 2, OAM_X_FLIP, OAM_Y_FLIP frame BATTLEANIMOAMSET_4E, 2, OAM_X_FLIP, OAM_Y_FLIP
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_4E, 2, OAM_X_FLIP, OAM_Y_FLIP frame BATTLEANIMOAMSET_4E, 2, OAM_X_FLIP, OAM_Y_FLIP
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_4E, 2, OAM_X_FLIP, OAM_Y_FLIP frame BATTLEANIMOAMSET_4E, 2, OAM_X_FLIP, OAM_Y_FLIP
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_4E, 2, OAM_X_FLIP, OAM_Y_FLIP frame BATTLEANIMOAMSET_4E, 2, OAM_X_FLIP, OAM_Y_FLIP
delanim delanim
@ -272,11 +272,11 @@ BattleAnimFrameData:
frame BATTLEANIMOAMSET_50, 1 frame BATTLEANIMOAMSET_50, 1
frame BATTLEANIMOAMSET_51, 1 frame BATTLEANIMOAMSET_51, 1
frame BATTLEANIMOAMSET_52, 2 frame BATTLEANIMOAMSET_52, 2
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_52, 2 frame BATTLEANIMOAMSET_52, 2
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_52, 2 frame BATTLEANIMOAMSET_52, 2
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_52, 2 frame BATTLEANIMOAMSET_52, 2
delanim delanim
@ -288,11 +288,11 @@ BattleAnimFrameData:
frame BATTLEANIMOAMSET_50, 1, OAM_X_FLIP frame BATTLEANIMOAMSET_50, 1, OAM_X_FLIP
frame BATTLEANIMOAMSET_51, 1, OAM_X_FLIP frame BATTLEANIMOAMSET_51, 1, OAM_X_FLIP
frame BATTLEANIMOAMSET_52, 2, OAM_X_FLIP frame BATTLEANIMOAMSET_52, 2, OAM_X_FLIP
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_52, 2, OAM_X_FLIP frame BATTLEANIMOAMSET_52, 2, OAM_X_FLIP
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_52, 2, OAM_X_FLIP frame BATTLEANIMOAMSET_52, 2, OAM_X_FLIP
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_52, 2, OAM_X_FLIP frame BATTLEANIMOAMSET_52, 2, OAM_X_FLIP
delanim delanim
@ -368,13 +368,13 @@ BattleAnimFrameData:
frame BATTLEANIMOAMSET_10, 3 frame BATTLEANIMOAMSET_10, 3
frame BATTLEANIMOAMSET_0F, 3 frame BATTLEANIMOAMSET_0F, 3
frame BATTLEANIMOAMSET_12, 1 frame BATTLEANIMOAMSET_12, 1
dorepeat 1 dowait 1
frame BATTLEANIMOAMSET_12, 1 frame BATTLEANIMOAMSET_12, 1
dorepeat 1 dowait 1
frame BATTLEANIMOAMSET_12, 1 frame BATTLEANIMOAMSET_12, 1
dorepeat 1 dowait 1
frame BATTLEANIMOAMSET_12, 1 frame BATTLEANIMOAMSET_12, 1
dorepeat 1 dowait 1
frame BATTLEANIMOAMSET_12, 3 frame BATTLEANIMOAMSET_12, 3
delanim delanim
@ -535,13 +535,13 @@ BattleAnimFrameData:
frame BATTLEANIMOAMSET_34, 32 frame BATTLEANIMOAMSET_34, 32
frame BATTLEANIMOAMSET_35, 32 ; fallthrough frame BATTLEANIMOAMSET_35, 32 ; fallthrough
.Frameset_2f: .Frameset_2f:
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_35, 4 frame BATTLEANIMOAMSET_35, 4
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_35, 4 frame BATTLEANIMOAMSET_35, 4
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_35, 4 frame BATTLEANIMOAMSET_35, 4
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_35, 4 frame BATTLEANIMOAMSET_35, 4
delanim delanim
@ -579,13 +579,13 @@ BattleAnimFrameData:
.Frameset_35: .Frameset_35:
frame BATTLEANIMOAMSET_40, 2 frame BATTLEANIMOAMSET_40, 2
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_40, 2 frame BATTLEANIMOAMSET_40, 2
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_41, 2 frame BATTLEANIMOAMSET_41, 2
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_41, 2 frame BATTLEANIMOAMSET_41, 2
dorepeat 2 dowait 2
dorestart dorestart
.Frameset_36: .Frameset_36:
@ -597,7 +597,7 @@ BattleAnimFrameData:
.Frameset_37: .Frameset_37:
frame BATTLEANIMOAMSET_19, 2 frame BATTLEANIMOAMSET_19, 2
dorepeat 2 dowait 2
dorestart dorestart
.Frameset_38: .Frameset_38:
@ -607,7 +607,7 @@ BattleAnimFrameData:
.Frameset_39: .Frameset_39:
frame BATTLEANIMOAMSET_18, 2 frame BATTLEANIMOAMSET_18, 2
dorepeat 2 dowait 2
dorestart dorestart
.Frameset_3a: .Frameset_3a:
@ -639,15 +639,15 @@ BattleAnimFrameData:
endanim endanim
.Frameset_44: .Frameset_44:
dorepeat 20 dowait 20
frame BATTLEANIMOAMSET_55, 40 frame BATTLEANIMOAMSET_55, 40
frame BATTLEANIMOAMSET_54, 40 frame BATTLEANIMOAMSET_54, 40
frame BATTLEANIMOAMSET_53, 20 frame BATTLEANIMOAMSET_53, 20
dorepeat 4 dowait 4
frame BATTLEANIMOAMSET_53, 4 frame BATTLEANIMOAMSET_53, 4
dorepeat 4 dowait 4
frame BATTLEANIMOAMSET_53, 4 frame BATTLEANIMOAMSET_53, 4
dorepeat 4 dowait 4
frame BATTLEANIMOAMSET_53, 4 frame BATTLEANIMOAMSET_53, 4
delanim delanim
@ -658,11 +658,11 @@ BattleAnimFrameData:
delanim delanim
.Frameset_45: .Frameset_45:
dorepeat 0 dowait 0
frame BATTLEANIMOAMSET_14, 0 frame BATTLEANIMOAMSET_14, 0
frame BATTLEANIMOAMSET_15, 0 frame BATTLEANIMOAMSET_15, 0
frame BATTLEANIMOAMSET_14, 0, OAM_X_FLIP frame BATTLEANIMOAMSET_14, 0, OAM_X_FLIP
dorepeat 0 dowait 0
frame BATTLEANIMOAMSET_16, 0, OAM_X_FLIP frame BATTLEANIMOAMSET_16, 0, OAM_X_FLIP
frame BATTLEANIMOAMSET_15, 0 frame BATTLEANIMOAMSET_15, 0
frame BATTLEANIMOAMSET_16, 0 frame BATTLEANIMOAMSET_16, 0
@ -867,7 +867,7 @@ BattleAnimFrameData:
delanim delanim
.Frameset_68: .Frameset_68:
dorepeat 15 dowait 15
frame BATTLEANIMOAMSET_84, 15 frame BATTLEANIMOAMSET_84, 15
frame BATTLEANIMOAMSET_85, 15 frame BATTLEANIMOAMSET_85, 15
frame BATTLEANIMOAMSET_29, 15 frame BATTLEANIMOAMSET_29, 15
@ -970,11 +970,11 @@ BattleAnimFrameData:
frame BATTLEANIMOAMSET_9C, 2 frame BATTLEANIMOAMSET_9C, 2
frame BATTLEANIMOAMSET_9D, 2 frame BATTLEANIMOAMSET_9D, 2
frame BATTLEANIMOAMSET_9E, 8 frame BATTLEANIMOAMSET_9E, 8
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_9E, 2 frame BATTLEANIMOAMSET_9E, 2
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_9E, 2 frame BATTLEANIMOAMSET_9E, 2
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_9E, 2 frame BATTLEANIMOAMSET_9E, 2
delanim delanim
@ -1160,11 +1160,11 @@ BattleAnimFrameData:
frame BATTLEANIMOAMSET_50, 1 frame BATTLEANIMOAMSET_50, 1
frame BATTLEANIMOAMSET_51, 1 frame BATTLEANIMOAMSET_51, 1
frame BATTLEANIMOAMSET_52, 2 frame BATTLEANIMOAMSET_52, 2
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_52, 2 frame BATTLEANIMOAMSET_52, 2
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_52, 2 frame BATTLEANIMOAMSET_52, 2
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_52, 2 frame BATTLEANIMOAMSET_52, 2
delanim delanim
@ -1178,11 +1178,11 @@ BattleAnimFrameData:
frame BATTLEANIMOAMSET_50, 1, OAM_X_FLIP, OAM_Y_FLIP frame BATTLEANIMOAMSET_50, 1, OAM_X_FLIP, OAM_Y_FLIP
frame BATTLEANIMOAMSET_51, 1, OAM_X_FLIP, OAM_Y_FLIP frame BATTLEANIMOAMSET_51, 1, OAM_X_FLIP, OAM_Y_FLIP
frame BATTLEANIMOAMSET_52, 2, OAM_X_FLIP, OAM_Y_FLIP frame BATTLEANIMOAMSET_52, 2, OAM_X_FLIP, OAM_Y_FLIP
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_52, 2, OAM_X_FLIP, OAM_Y_FLIP frame BATTLEANIMOAMSET_52, 2, OAM_X_FLIP, OAM_Y_FLIP
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_52, 2, OAM_X_FLIP, OAM_Y_FLIP frame BATTLEANIMOAMSET_52, 2, OAM_X_FLIP, OAM_Y_FLIP
dorepeat 2 dowait 2
frame BATTLEANIMOAMSET_52, 2, OAM_X_FLIP, OAM_Y_FLIP frame BATTLEANIMOAMSET_52, 2, OAM_X_FLIP, OAM_Y_FLIP
delanim delanim

View File

@ -1,6 +1,6 @@
BattleAnimOAMData: BattleAnimOAMData:
; entries correspond to BATTLEANIMOAMSET_* constants ; entries correspond to BATTLEANIMOAMSET_* constants
; vtile offset, length, pointer ; vtile offset, data length, data pointer
dbbw $00, 16, .OAMData_00 ; BATTLEANIMOAMSET_00 dbbw $00, 16, .OAMData_00 ; BATTLEANIMOAMSET_00
dbbw $04, 9, .OAMData_01 ; BATTLEANIMOAMSET_01 dbbw $04, 9, .OAMData_01 ; BATTLEANIMOAMSET_01
dbbw $08, 4, .OAMData_02 ; BATTLEANIMOAMSET_02 dbbw $08, 4, .OAMData_02 ; BATTLEANIMOAMSET_02

View File

@ -398,7 +398,7 @@ BattleAnim_ThrowPokeBall:
anim_jump .Loop anim_jump .Loop
.Click: .Click:
anim_clearsprites anim_keepsprites
anim_ret anim_ret
.BreakFree: .BreakFree:

View File

@ -129,12 +129,12 @@ SpriteAnimFrameData:
.Frameset_TextEntryCursor: .Frameset_TextEntryCursor:
frame SPRITE_ANIM_OAMSET_TEXT_ENTRY_CURSOR, 1 frame SPRITE_ANIM_OAMSET_TEXT_ENTRY_CURSOR, 1
dorepeat 1 dowait 1
dorestart dorestart
.Frameset_TextEntryCursorBig: .Frameset_TextEntryCursorBig:
frame SPRITE_ANIM_OAMSET_TEXT_ENTRY_CURSOR_BIG, 1 frame SPRITE_ANIM_OAMSET_TEXT_ENTRY_CURSOR_BIG, 1
dorepeat 1 dowait 1
dorestart dorestart
.Frameset_GameFreakLogo: .Frameset_GameFreakLogo:
@ -285,11 +285,11 @@ SpriteAnimFrameData:
; unused ; unused
frame SPRITE_ANIM_OAMSET_UNUSED_4E, 3 frame SPRITE_ANIM_OAMSET_UNUSED_4E, 3
dorepeat 3 dowait 3
dorestart dorestart
.Frameset_Unused1C: .Frameset_Unused1C:
dorepeat 32 dowait 32
endanim endanim
.Frameset_Leaf: .Frameset_Leaf:
@ -299,9 +299,9 @@ SpriteAnimFrameData:
.Frameset_CutTree: .Frameset_CutTree:
frame SPRITE_ANIM_OAMSET_TREE_1, 2 frame SPRITE_ANIM_OAMSET_TREE_1, 2
frame SPRITE_ANIM_OAMSET_CUT_TREE_2, 16 frame SPRITE_ANIM_OAMSET_CUT_TREE_2, 16
dorepeat 1 dowait 1
frame SPRITE_ANIM_OAMSET_CUT_TREE_3, 1 frame SPRITE_ANIM_OAMSET_CUT_TREE_3, 1
dorepeat 1 dowait 1
frame SPRITE_ANIM_OAMSET_CUT_TREE_4, 1 frame SPRITE_ANIM_OAMSET_CUT_TREE_4, 1
delanim delanim
@ -483,7 +483,7 @@ SpriteAnimFrameData:
endanim endanim
.Frameset_IntroUnownF: .Frameset_IntroUnownF:
dorepeat 0 dowait 0
endanim endanim
.Frameset_CelebiLeft: .Frameset_CelebiLeft:

View File

@ -1,6 +1,6 @@
SpriteAnimOAMData: SpriteAnimOAMData:
; entries correspond to SPRITE_ANIM_OAMSET_* constants ; entries correspond to SPRITE_ANIM_OAMSET_* constants
; vtile offset, pointer ; vtile offset, data pointer
dbw $00, .OAMData_RedWalk ; SPRITE_ANIM_OAMSET_RED_WALK_1 dbw $00, .OAMData_RedWalk ; SPRITE_ANIM_OAMSET_RED_WALK_1
dbw $04, .OAMData_RedWalk ; SPRITE_ANIM_OAMSET_RED_WALK_2 dbw $04, .OAMData_RedWalk ; SPRITE_ANIM_OAMSET_RED_WALK_2
dbw $4c, .OAMData_1x1_Palette0 ; SPRITE_ANIM_OAMSET_GS_INTRO_BUBBLE_1 dbw $4c, .OAMData_1x1_Palette0 ; SPRITE_ANIM_OAMSET_GS_INTRO_BUBBLE_1

View File

@ -91,6 +91,7 @@ Caveats:
- Doesn't work with `anim_4gfx` and `anim_5gfx`. - Doesn't work with `anim_4gfx` and `anim_5gfx`.
- This overwrites previously loaded animation graphics if you've loaded more than 53 tiles (2row) or 66 tiles (1row). - This overwrites previously loaded animation graphics if you've loaded more than 53 tiles (2row) or 66 tiles (1row).
## `$DB`: `anim_checkpokeball` ## `$DB`: `anim_checkpokeball`
Sets `BattleAnimVar` to the result of [GetPokeBallWobble](/engine/battle_anims/pokeball_wobble.asm). Sets `BattleAnimVar` to the result of [GetPokeBallWobble](/engine/battle_anims/pokeball_wobble.asm).
@ -196,7 +197,11 @@ Sets `rOBP0` to *colors*.
Sets `rOBP1` to *colors*. Sets `rOBP1` to *colors*.
## `$F4`: `anim_clearsprites` ## `$F4`: `anim_keepsprites`
Causes only the palettes to be cleared from the OAM memory when the animation ends, instead of clearing all of the OAM memory. This causes all objects to start using palette 0 (monochrome) when the animation script ends, and whatever objects were on the screen before the last `anim_ret` will stay on the screen.
This is only used for the Poke Ball animation.
## `$F5`: `anim_0xf5` ## `$F5`: `anim_0xf5`

View File

@ -112,10 +112,10 @@ RunBattleAnimScript:
cp ROLLOUT cp ROLLOUT
jr nz, .not_rollout jr nz, .not_rollout
ld a, $2e ld a, ANIM_BG_2E
ld b, 5 ld b, NUM_BG_EFFECTS
ld de, 4 ld de, BG_EFFECT_STRUCT_LENGTH
ld hl, wActiveBGEffects ld hl, wBGEffect1Function
.find .find
cp [hl] cp [hl]
jr z, .done jr z, .done
@ -128,10 +128,10 @@ RunBattleAnimScript:
.done .done
ld a, [wBattleAnimFlags] ld a, [wBattleAnimFlags]
bit 0, a bit BATTLEANIM_STOP_F, a
jr z, .playframe jr z, .playframe
call BattleAnim_ClearCGB_OAMFlags call BattleAnim_ClearOAM
ret ret
BattleAnimClearHud: BattleAnimClearHud:
@ -232,16 +232,17 @@ Unreferenced_Functioncc220:
call BattleAnimDelayFrame call BattleAnimDelayFrame
ret ret
BattleAnim_ClearCGB_OAMFlags: BattleAnim_ClearOAM:
ld a, [wBattleAnimFlags] ld a, [wBattleAnimFlags]
bit 3, a bit BATTLEANIM_KEEPSPRITES_F, a
jr z, .delete jr z, .delete
; Instead of deleting the sprites, make them all use palette 0 (monochrome)
ld hl, wVirtualOAMSprite00Attributes ld hl, wVirtualOAMSprite00Attributes
ld c, NUM_SPRITE_OAM_STRUCTS ld c, NUM_SPRITE_OAM_STRUCTS
.loop .loop
ld a, [hl] ld a, [hl]
and $f0 and ~PALETTE_MASK & ~VRAM_BANK_1
ld [hli], a ld [hli], a
rept SPRITEOAMSTRUCT_LENGTH + -1 rept SPRITEOAMSTRUCT_LENGTH + -1
inc hl inc hl
@ -267,12 +268,12 @@ RunBattleAnimCommand:
ret ret
.CheckTimer: .CheckTimer:
ld a, [wBattleAnimDuration] ld a, [wBattleAnimDelay]
and a and a
jr z, .done jr z, .done
dec a dec a
ld [wBattleAnimDuration], a ld [wBattleAnimDelay], a
and a and a
ret ret
@ -289,17 +290,17 @@ RunBattleAnimCommand:
; Return from a subroutine. ; Return from a subroutine.
ld hl, wBattleAnimFlags ld hl, wBattleAnimFlags
bit 1, [hl] bit BATTLEANIM_IN_SUBROUTINE_F, [hl]
jr nz, .do_anim jr nz, .do_anim
set 0, [hl] set BATTLEANIM_STOP_F, [hl]
ret ret
.not_done_with_anim .not_done_with_anim
cp $d0 cp anim_obj_command
jr nc, .do_anim jr nc, .do_anim
ld [wBattleAnimDuration], a ld [wBattleAnimDelay], a
ret ret
.do_anim .do_anim
@ -310,7 +311,7 @@ RunBattleAnimCommand:
.DoCommand: .DoCommand:
; Execute battle animation command in [wBattleAnimByte]. ; Execute battle animation command in [wBattleAnimByte].
ld a, [wBattleAnimByte] ld a, [wBattleAnimByte]
sub $d0 sub anim_obj_command
ld e, a ld e, a
ld d, 0 ld d, 0
@ -361,7 +362,7 @@ BattleAnimCommands::
dw BattleAnimCmd_BGP dw BattleAnimCmd_BGP
dw BattleAnimCmd_OBP0 dw BattleAnimCmd_OBP0
dw BattleAnimCmd_OBP1 dw BattleAnimCmd_OBP1
dw BattleAnimCmd_ClearSprites dw BattleAnimCmd_KeepSprites
dw BattleAnimCmd_F5 dw BattleAnimCmd_F5
dw BattleAnimCmd_F6 dw BattleAnimCmd_F6
dw BattleAnimCmd_F7 dw BattleAnimCmd_F7
@ -382,7 +383,7 @@ BattleAnimCmd_ED:
BattleAnimCmd_Ret: BattleAnimCmd_Ret:
ld hl, wBattleAnimFlags ld hl, wBattleAnimFlags
res 1, [hl] res BATTLEANIM_IN_SUBROUTINE_F, [hl]
ld hl, wBattleAnimParent ld hl, wBattleAnimParent
ld e, [hl] ld e, [hl]
inc hl inc hl
@ -413,7 +414,7 @@ BattleAnimCmd_Call:
inc hl inc hl
ld [hl], d ld [hl], d
ld hl, wBattleAnimFlags ld hl, wBattleAnimFlags
set 1, [hl] set BATTLEANIM_IN_SUBROUTINE_F, [hl]
ret ret
BattleAnimCmd_Jump: BattleAnimCmd_Jump:
@ -430,12 +431,12 @@ BattleAnimCmd_Jump:
BattleAnimCmd_Loop: BattleAnimCmd_Loop:
call GetBattleAnimByte call GetBattleAnimByte
ld hl, wBattleAnimFlags ld hl, wBattleAnimFlags
bit 2, [hl] bit BATTLEANIM_IN_LOOP_F, [hl]
jr nz, .continue_loop jr nz, .continue_loop
and a and a
jr z, .perpetual jr z, .perpetual
dec a dec a
set 2, [hl] set BATTLEANIM_IN_LOOP_F, [hl]
ld [wBattleAnimLoops], a ld [wBattleAnimLoops], a
.continue_loop .continue_loop
ld hl, wBattleAnimLoops ld hl, wBattleAnimLoops
@ -456,7 +457,7 @@ BattleAnimCmd_Loop:
.return_from_loop .return_from_loop
ld hl, wBattleAnimFlags ld hl, wBattleAnimFlags
res 2, [hl] res BATTLEANIM_IN_LOOP_F, [hl]
ld hl, wBattleAnimAddress ld hl, wBattleAnimAddress
ld e, [hl] ld e, [hl]
inc hl inc hl
@ -643,10 +644,13 @@ BattleAnimCmd_ResetObp0:
ret ret
BattleAnimCmd_ClearObjs: BattleAnimCmd_ClearObjs:
; BUG: This function only clears the first 6+(2/3) objects
ld hl, wActiveAnimObjects ld hl, wActiveAnimObjects
ld a, $a0 ld a, $a0
; ld a, wActiveAnimObjectsEnd - wActiveAnimObjects
.loop .loop
ld [hl], $0 ld [hl], 0
inc hl inc hl
dec a dec a
jr nz, .loop jr nz, .loop
@ -693,7 +697,7 @@ endr
BattleAnimCmd_IncObj: BattleAnimCmd_IncObj:
call GetBattleAnimByte call GetBattleAnimByte
ld e, 10 ld e, NUM_ANIM_OBJECTS
ld bc, wActiveAnimObjects ld bc, wActiveAnimObjects
.loop .loop
ld hl, BATTLEANIMSTRUCT_INDEX ld hl, BATTLEANIMSTRUCT_INDEX
@ -718,8 +722,8 @@ BattleAnimCmd_IncObj:
BattleAnimCmd_IncBGEffect: BattleAnimCmd_IncBGEffect:
call GetBattleAnimByte call GetBattleAnimByte
ld e, 5 ld e, NUM_BG_EFFECTS
ld bc, wActiveBGEffects ld bc, wBGEffect1Function
.loop .loop
ld hl, $0 ld hl, $0
add hl, bc add hl, bc
@ -743,7 +747,7 @@ BattleAnimCmd_IncBGEffect:
BattleAnimCmd_SetObj: BattleAnimCmd_SetObj:
call GetBattleAnimByte call GetBattleAnimByte
ld e, 10 ld e, NUM_ANIM_OBJECTS
ld bc, wActiveAnimObjects ld bc, wActiveAnimObjects
.loop .loop
ld hl, BATTLEANIMSTRUCT_INDEX ld hl, BATTLEANIMSTRUCT_INDEX
@ -1152,9 +1156,9 @@ BattleAnimCmd_OAMOff:
ldh [hOAMUpdate], a ldh [hOAMUpdate], a
ret ret
BattleAnimCmd_ClearSprites: BattleAnimCmd_KeepSprites:
ld hl, wBattleAnimFlags ld hl, wBattleAnimFlags
set 3, [hl] set BATTLEANIM_KEEPSPRITES_F, [hl]
ret ret
BattleAnimCmd_F5: BattleAnimCmd_F5:
@ -1430,10 +1434,10 @@ BattleAnim_SetOBPals:
ret ret
BattleAnim_UpdateOAM_All: BattleAnim_UpdateOAM_All:
ld a, $0 ld a, 0
ld [wBattleAnimOAMPointerLo], a ld [wBattleAnimOAMPointerLo], a
ld hl, wActiveAnimObjects ld hl, wActiveAnimObjects
ld e, 10 ld e, NUM_ANIM_OBJECTS
.loop .loop
ld a, [hl] ld a, [hl]
and a and a

View File

@ -10,7 +10,7 @@
ExecuteBGEffects: ExecuteBGEffects:
ld hl, wActiveBGEffects ld hl, wActiveBGEffects
ld e, 5 ld e, NUM_BG_EFFECTS
.loop .loop
ld a, [hl] ld a, [hl]
and a and a
@ -23,7 +23,7 @@ ExecuteBGEffects:
pop de pop de
pop hl pop hl
.next .next
ld bc, 4 ld bc, BG_EFFECT_STRUCT_LENGTH
add hl, bc add hl, bc
dec e dec e
jr nz, .loop jr nz, .loop
@ -31,12 +31,12 @@ ExecuteBGEffects:
QueueBGEffect: QueueBGEffect:
ld hl, wActiveBGEffects ld hl, wActiveBGEffects
ld e, 5 ld e, NUM_BG_EFFECTS
.loop .loop
ld a, [hl] ld a, [hl]
and a and a
jr z, .load jr z, .load
ld bc, 4 ld bc, BG_EFFECT_STRUCT_LENGTH
add hl, bc add hl, bc
dec e dec e
jr nz, .loop jr nz, .loop
@ -416,7 +416,7 @@ BattleBGEffect_BattlerObj_1Row:
.zero .zero
call BGEffect_CheckFlyDigStatus call BGEffect_CheckFlyDigStatus
jr z, .not_flying_digging jr z, .not_flying_digging
ld hl, wNumActiveBattleAnims ld hl, wLastAnimObjectIndex
inc [hl] inc [hl]
call EndBattleBGEffect call EndBattleBGEffect
ret ret
@ -483,7 +483,7 @@ BattleBGEffect_BattlerObj_2Row:
.zero .zero
call BGEffect_CheckFlyDigStatus call BGEffect_CheckFlyDigStatus
jr z, .not_flying_digging jr z, .not_flying_digging
ld hl, wNumActiveBattleAnims ld hl, wLastAnimObjectIndex
inc [hl] inc [hl]
call EndBattleBGEffect call EndBattleBGEffect
ret ret

View File

@ -1,6 +1,6 @@
QueueBattleAnimation: QueueBattleAnimation:
ld hl, wActiveAnimObjects ld hl, wActiveAnimObjects
ld e, 10 ld e, NUM_ANIM_OBJECTS
.loop .loop
ld a, [hl] ld a, [hl]
and a and a
@ -15,7 +15,7 @@ QueueBattleAnimation:
.done .done
ld c, l ld c, l
ld b, h ld b, h
ld hl, wNumActiveBattleAnims ld hl, wLastAnimObjectIndex
inc [hl] inc [hl]
call InitBattleAnimation call InitBattleAnimation
ret ret
@ -38,7 +38,7 @@ endr
ld d, h ld d, h
ld hl, BATTLEANIMSTRUCT_INDEX ld hl, BATTLEANIMSTRUCT_INDEX
add hl, bc add hl, bc
ld a, [wNumActiveBattleAnims] ld a, [wLastAnimObjectIndex]
ld [hli], a ; Index ld [hli], a ; Index
ld a, [de] ld a, [de]
inc de inc de
@ -80,32 +80,36 @@ endr
BattleAnimOAMUpdate: BattleAnimOAMUpdate:
call InitBattleAnimBuffer call InitBattleAnimBuffer
call GetBattleAnimFrame call GetBattleAnimFrame
cp -3 cp dowait_command
jp z, .done jp z, .done
cp -4 cp delanim_command
jp z, .delete jp z, .delete
push af push af
ld hl, wBattleAnimTempOAMFlags ld hl, wBattleAnimTempOAMFlags
ld a, [wBattleAnimTempAddSubFlags] ld a, [wBattleAnimTempFrameOAMFlags]
xor [hl] xor [hl]
and $e0 and PRIORITY | Y_FLIP | X_FLIP
ld [hl], a ld [hl], a
pop af pop af
push bc push bc
call GetBattleAnimOAMPointer call GetBattleAnimOAMPointer
ld a, [wBattleAnimTempTileID] ld a, [wBattleAnimTempTileID]
add [hl] add [hl] ; tile offset
ld [wBattleAnimTempTileID], a ld [wBattleAnimTempTileID], a
inc hl inc hl
ld a, [hli] ld a, [hli] ; oam data length
ld c, a ld c, a
ld a, [hli] ld a, [hli] ; oam data pointer
ld h, [hl] ld h, [hl]
ld l, a ld l, a
ld a, [wBattleAnimOAMPointerLo] ld a, [wBattleAnimOAMPointerLo]
ld e, a ld e, a
ld d, HIGH(wVirtualOAM) ld d, HIGH(wVirtualOAM)
.loop .loop
; Y Coord
ld a, [wBattleAnimTempYCoord] ld a, [wBattleAnimTempYCoord]
ld b, a ld b, a
ld a, [wBattleAnimTempYOffset] ld a, [wBattleAnimTempYOffset]
@ -114,16 +118,17 @@ BattleAnimOAMUpdate:
push hl push hl
ld a, [hl] ld a, [hl]
ld hl, wBattleAnimTempOAMFlags ld hl, wBattleAnimTempOAMFlags
bit 6, [hl] bit OAM_Y_FLIP, [hl]
jr z, .no_yflip jr z, .no_yflip
add $8 add $8
xor $ff xor $ff
inc a inc a
.no_yflip .no_yflip
pop hl pop hl
add b add b
ld [de], a ld [de], a
; X Coord
inc hl inc hl
inc de inc de
ld a, [wBattleAnimTempXCoord] ld a, [wBattleAnimTempXCoord]
@ -134,43 +139,47 @@ BattleAnimOAMUpdate:
push hl push hl
ld a, [hl] ld a, [hl]
ld hl, wBattleAnimTempOAMFlags ld hl, wBattleAnimTempOAMFlags
bit 5, [hl] bit OAM_X_FLIP, [hl]
jr z, .no_xflip jr z, .no_xflip
add $8 add $8
xor $ff xor $ff
inc a inc a
.no_xflip .no_xflip
pop hl pop hl
add b add b
ld [de], a ld [de], a
; Tile ID
inc hl inc hl
inc de inc de
ld a, [wBattleAnimTempTileID] ld a, [wBattleAnimTempTileID]
add BATTLEANIM_BASE_TILE add BATTLEANIM_BASE_TILE
add [hl] add [hl]
ld [de], a ld [de], a
; Attributes
inc hl inc hl
inc de inc de
ld a, [wBattleAnimTempOAMFlags] ld a, [wBattleAnimTempOAMFlags]
ld b, a ld b, a
ld a, [hl] ld a, [hl]
xor b xor b
and $e0 and PRIORITY | Y_FLIP | X_FLIP
ld b, a ld b, a
ld a, [hl] ld a, [hl]
and $10 and OBP_NUM
or b or b
ld b, a ld b, a
ld a, [wBattleAnimTempPalette] ld a, [wBattleAnimTempPalette]
and $f and (PRIORITY | Y_FLIP | X_FLIP | OBP_NUM) ^ $ff
or b or b
ld [de], a ld [de], a
inc hl inc hl
inc de inc de
ld a, e ld a, e
ld [wBattleAnimOAMPointerLo], a ld [wBattleAnimOAMPointerLo], a
cp $a0 cp LOW(wVirtualOAMEnd)
jr nc, .exit_set_carry jr nc, .exit_set_carry
dec c dec c
jr nz, .loop jr nz, .loop
@ -193,10 +202,11 @@ InitBattleAnimBuffer:
ld hl, BATTLEANIMSTRUCT_01 ld hl, BATTLEANIMSTRUCT_01
add hl, bc add hl, bc
ld a, [hl] ld a, [hl]
and %10000000
and PRIORITY
ld [wBattleAnimTempOAMFlags], a ld [wBattleAnimTempOAMFlags], a
xor a xor a
ld [wBattleAnimTempAddSubFlags], a ld [wBattleAnimTempFrameOAMFlags], a
ld hl, BATTLEANIMSTRUCT_PALETTE ld hl, BATTLEANIMSTRUCT_PALETTE
add hl, bc add hl, bc
ld a, [hl] ld a, [hl]
@ -217,15 +227,18 @@ InitBattleAnimBuffer:
ld [wBattleAnimTempXOffset], a ld [wBattleAnimTempXOffset], a
ld a, [hli] ld a, [hli]
ld [wBattleAnimTempYOffset], a ld [wBattleAnimTempYOffset], a
ldh a, [hBattleTurn] ldh a, [hBattleTurn]
and a and a
ret z ret z
ld hl, BATTLEANIMSTRUCT_01 ld hl, BATTLEANIMSTRUCT_01
add hl, bc add hl, bc
ld a, [hl] ld a, [hl]
ld [wBattleAnimTempOAMFlags], a ld [wBattleAnimTempOAMFlags], a
bit 0, [hl] bit 0, [hl]
ret z ret z
ld hl, BATTLEANIMSTRUCT_XCOORD ld hl, BATTLEANIMSTRUCT_XCOORD
add hl, bc add hl, bc
ld a, [hli] ld a, [hli]

View File

@ -37,16 +37,16 @@ GetBattleAnimFrame:
push af push af
ld a, [hl] ld a, [hl]
push hl push hl
and $3f and (Y_FLIP << 1 | X_FLIP << 1) ^ $ff
ld hl, BATTLEANIMSTRUCT_DURATION ld hl, BATTLEANIMSTRUCT_DURATION
add hl, bc add hl, bc
ld [hl], a ld [hl], a
pop hl pop hl
.okay .okay
ld a, [hl] ld a, [hl]
and $c0 and Y_FLIP << 1 | X_FLIP << 1 ; The << 1 is compensated in the "frame" macro
srl a srl a
ld [wBattleAnimTempAddSubFlags], a ld [wBattleAnimTempFrameOAMFlags], a
pop af pop af
ret ret
@ -55,6 +55,7 @@ GetBattleAnimFrame:
ld hl, BATTLEANIMSTRUCT_DURATION ld hl, BATTLEANIMSTRUCT_DURATION
add hl, bc add hl, bc
ld [hl], a ld [hl], a
ld hl, BATTLEANIMSTRUCT_FRAME ld hl, BATTLEANIMSTRUCT_FRAME
add hl, bc add hl, bc
dec [hl] dec [hl]

View File

@ -315,8 +315,8 @@ UpdateAnimFrame:
AddOrSubtractY: AddOrSubtractY:
push hl push hl
ld a, [hl] ld a, [hl]
ld hl, wCurSpriteAddSubFlags ld hl, wCurSpriteOAMFlags
bit 6, [hl] bit OAM_Y_FLIP, [hl]
jr z, .ok jr z, .ok
; 8 - a ; 8 - a
add $8 add $8
@ -330,8 +330,8 @@ AddOrSubtractY:
AddOrSubtractX: AddOrSubtractX:
push hl push hl
ld a, [hl] ld a, [hl]
ld hl, wCurSpriteAddSubFlags ld hl, wCurSpriteOAMFlags
bit 5, [hl] ; x flip bit OAM_X_FLIP, [hl]
jr z, .ok jr z, .ok
; 8 - a ; 8 - a
add $8 add $8
@ -343,20 +343,20 @@ AddOrSubtractX:
ret ret
GetSpriteOAMAttr: GetSpriteOAMAttr:
ld a, [wCurSpriteAddSubFlags] ld a, [wCurSpriteOAMFlags]
ld b, a ld b, a
ld a, [hl] ld a, [hl]
xor b xor b
and $e0 and PRIORITY | Y_FLIP | X_FLIP
ld b, a ld b, a
ld a, [hl] ld a, [hl]
and $1f and (PRIORITY | Y_FLIP | X_FLIP) ^ $ff
or b or b
ret ret
InitSpriteAnimBuffer: InitSpriteAnimBuffer:
xor a xor a
ld [wCurSpriteAddSubFlags], a ld [wCurSpriteOAMFlags], a
ld hl, SPRITEANIMSTRUCT_TILE_ID ld hl, SPRITEANIMSTRUCT_TILE_ID
add hl, bc add hl, bc
ld a, [hli] ld a, [hli]
@ -436,7 +436,7 @@ GetSpriteAnimFrame:
push af push af
ld a, [hl] ld a, [hl]
push hl push hl
and $3f and (Y_FLIP << 1 | X_FLIP << 1) ^ $ff
ld hl, SPRITEANIMSTRUCT_DURATIONOFFSET ld hl, SPRITEANIMSTRUCT_DURATIONOFFSET
add hl, bc add hl, bc
add [hl] add [hl]
@ -446,9 +446,9 @@ GetSpriteAnimFrame:
pop hl pop hl
.okay .okay
ld a, [hl] ld a, [hl]
and $c0 and Y_FLIP << 1 | X_FLIP << 1 ; The << 1 is compensated in the "frame" macro
srl a srl a
ld [wCurSpriteAddSubFlags], a ld [wCurSpriteOAMFlags], a
pop af pop af
ret ret

View File

@ -174,3 +174,6 @@ limited_interpret_data EQUS "text_dots"
link_wait_button EQUS "text_linkwaitbutton" link_wait_button EQUS "text_linkwaitbutton"
current_day EQUS "text_today" current_day EQUS "text_today"
text_jump EQUS "text_far" text_jump EQUS "text_far"
; macros/scripts/battle_anims.asm
anim_clearsprites EQUS "anim_keepsprites"

View File

@ -233,7 +233,7 @@ anim_obp1: MACRO
ENDM ENDM
enum anim_clearsprites_command ; $f4 enum anim_clearsprites_command ; $f4
anim_clearsprites: MACRO anim_keepsprites: MACRO
db anim_clearsprites_command db anim_clearsprites_command
ENDM ENDM

View File

@ -15,20 +15,20 @@ ENDM
enum_start $fc enum_start $fc
enum delanim_command ; $fc enum delanim_command ; $fc
delanim: MACRO ; used for oam delanim: MACRO
; Removes the object from the screen, as opposed to `endanim` which just stops all motion
db delanim_command db delanim_command
ENDM ENDM
enum dorepeat_command ; $fd enum dowait_command ; $fd
dorepeat: MACRO dowait: MACRO
db dorepeat_command db dowait_command
db \1 ; # db \1 ; frames
ENDM ENDM
enum setrepeat_command ; $fe enum dorestart_command ; $fe
setrepeat: MACRO dorestart: MACRO
db setrepeat_command db dorestart_command
db \1 ; #
ENDM ENDM
enum endanim_command ; $ff enum endanim_command ; $ff
@ -36,9 +36,18 @@ endanim: MACRO
db endanim_command db endanim_command
ENDM ENDM
__enum__ = $fe
enum dorestart_command ; $fe ; Used for pic animations
dorestart: MACRO ; used for oam __enum__ = $fd
db dorestart_command
enum dorepeat_command ; $fd
dorepeat: MACRO
db dorepeat_command
db \1 ; command offset to jump to
ENDM
enum setrepeat_command ; $fe
setrepeat: MACRO
db setrepeat_command
db \1 ; amount of times to repeat
ENDM ENDM

View File

@ -263,7 +263,7 @@ wCurIcon:: db ; c3b6
wCurIconTile:: db wCurIconTile:: db
wSpriteAnimAddrBackup:: wSpriteAnimAddrBackup::
wSpriteAnimIDBuffer:: wSpriteAnimIDBuffer::
wCurSpriteAddSubFlags:: wCurSpriteOAMFlags::
dw dw
wCurAnimVTile:: db wCurAnimVTile:: db
wCurAnimXCoord:: db wCurAnimXCoord:: db
@ -3045,11 +3045,11 @@ wBGEffect4:: battle_bg_effect wBGEffect4
wBGEffect5:: battle_bg_effect wBGEffect5 wBGEffect5:: battle_bg_effect wBGEffect5
wActiveBGEffectsEnd:: wActiveBGEffectsEnd::
wNumActiveBattleAnims:: db ; d40e wLastAnimObjectIndex:: db ; d40e
wBattleAnimFlags:: db ; d40f wBattleAnimFlags:: db ; d40f
wBattleAnimAddress:: dw ; d410 wBattleAnimAddress:: dw ; d410
wBattleAnimDuration:: db ; d412 wBattleAnimDelay:: db ; d412
wBattleAnimParent:: dw ; d413 wBattleAnimParent:: dw ; d413
wBattleAnimLoops:: db ; d415 wBattleAnimLoops:: db ; d415
wBattleAnimVar:: db ; d416 wBattleAnimVar:: db ; d416
@ -3077,7 +3077,7 @@ wBattleAnimTempXCoord:: db
wBattleAnimTempYCoord:: db wBattleAnimTempYCoord:: db
wBattleAnimTempXOffset:: db wBattleAnimTempXOffset:: db
wBattleAnimTempYOffset:: db wBattleAnimTempYOffset:: db
wBattleAnimTempAddSubFlags:: db wBattleAnimTempFrameOAMFlags:: db
wBattleAnimTempPalette:: db wBattleAnimTempPalette:: db
ENDU ; d422 ENDU ; d422