shithub: pokecrystal

Download patch

ref: 771d2efd6569036531d69cf79d9b5aa163341cfc
parent: f9a60cff7a9451e2e8c3bb5db95d89fdba3bf000
parent: 7d6befa1816110c5518292d4c7cb8841a355dc79
author: Rangi <35663410+Rangi42@users.noreply.github.com>
date: Sat Feb 16 08:23:17 EST 2019

Merge pull request #601 from mid-kid/master

Exciting adventures down battle animation street!

--- a/constants/battle_anim_constants.asm
+++ b/constants/battle_anim_constants.asm
@@ -25,6 +25,7 @@
 	const BATTLEANIMSTRUCT_16
 	const BATTLEANIMSTRUCT_17
 BATTLEANIMSTRUCT_LENGTH EQU const_value
+NUM_ANIM_OBJECTS EQU 10 ; see wActiveAnimObjects
 
 ; Start tile for battle animation graphics
 BATTLEANIM_BASE_TILE EQU 7 * 7  ; Maximum size of a pokemon picture
@@ -816,6 +817,8 @@
 	const BG_EFFECT_STRUCT_JT_INDEX
 	const BG_EFFECT_STRUCT_BATTLE_TURN
 	const BG_EFFECT_STRUCT_03
+BG_EFFECT_STRUCT_LENGTH EQU const_value
+NUM_BG_EFFECTS EQU 5 ; see wActiveBGEffects
 
 ; battle palettes
 	const_def
--- a/constants/wram_constants.asm
+++ b/constants/wram_constants.asm
@@ -123,6 +123,13 @@
 
 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
 PLAYERSPRITESETUP_FACING_MASK       EQU %11
 PLAYERSPRITESETUP_FEMALE_TO_MALE_F  EQU 2
--- a/data/battle_anims/framesets.asm
+++ b/data/battle_anims/framesets.asm
@@ -230,11 +230,11 @@
 	frame BATTLEANIMOAMSET_4C,  2
 	frame BATTLEANIMOAMSET_4D,  4
 	frame BATTLEANIMOAMSET_4E,  2
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_4E,  2
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_4E,  2
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_4E,  2
 	delanim
 
@@ -243,11 +243,11 @@
 	frame BATTLEANIMOAMSET_4C,  2, OAM_X_FLIP
 	frame BATTLEANIMOAMSET_4D,  4, OAM_X_FLIP
 	frame BATTLEANIMOAMSET_4E,  2, OAM_X_FLIP
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_4E,  2, OAM_X_FLIP
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_4E,  2, OAM_X_FLIP
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_4E,  2, OAM_X_FLIP
 	delanim
 
@@ -256,11 +256,11 @@
 	frame BATTLEANIMOAMSET_4C,  2, 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
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_4E,  2, OAM_X_FLIP, OAM_Y_FLIP
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_4E,  2, OAM_X_FLIP, OAM_Y_FLIP
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_4E,  2, OAM_X_FLIP, OAM_Y_FLIP
 	delanim
 
@@ -272,11 +272,11 @@
 	frame BATTLEANIMOAMSET_50,  1
 	frame BATTLEANIMOAMSET_51,  1
 	frame BATTLEANIMOAMSET_52,  2
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_52,  2
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_52,  2
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_52,  2
 	delanim
 
@@ -288,11 +288,11 @@
 	frame BATTLEANIMOAMSET_50,  1, OAM_X_FLIP
 	frame BATTLEANIMOAMSET_51,  1, OAM_X_FLIP
 	frame BATTLEANIMOAMSET_52,  2, OAM_X_FLIP
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_52,  2, OAM_X_FLIP
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_52,  2, OAM_X_FLIP
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_52,  2, OAM_X_FLIP
 	delanim
 
@@ -368,13 +368,13 @@
 	frame BATTLEANIMOAMSET_10,  3
 	frame BATTLEANIMOAMSET_0F,  3
 	frame BATTLEANIMOAMSET_12,  1
-	dorepeat 1
+	dowait 1
 	frame BATTLEANIMOAMSET_12,  1
-	dorepeat 1
+	dowait 1
 	frame BATTLEANIMOAMSET_12,  1
-	dorepeat 1
+	dowait 1
 	frame BATTLEANIMOAMSET_12,  1
-	dorepeat 1
+	dowait 1
 	frame BATTLEANIMOAMSET_12,  3
 	delanim
 
@@ -535,13 +535,13 @@
 	frame BATTLEANIMOAMSET_34, 32
 	frame BATTLEANIMOAMSET_35, 32 ; fallthrough
 .Frameset_2f:
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_35,  4
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_35,  4
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_35,  4
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_35,  4
 	delanim
 
@@ -579,13 +579,13 @@
 
 .Frameset_35:
 	frame BATTLEANIMOAMSET_40,  2
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_40,  2
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_41,  2
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_41,  2
-	dorepeat 2
+	dowait 2
 	dorestart
 
 .Frameset_36:
@@ -597,7 +597,7 @@
 
 .Frameset_37:
 	frame BATTLEANIMOAMSET_19,  2
-	dorepeat 2
+	dowait 2
 	dorestart
 
 .Frameset_38:
@@ -607,7 +607,7 @@
 
 .Frameset_39:
 	frame BATTLEANIMOAMSET_18,  2
-	dorepeat 2
+	dowait 2
 	dorestart
 
 .Frameset_3a:
@@ -639,15 +639,15 @@
 	endanim
 
 .Frameset_44:
-	dorepeat 20
+	dowait 20
 	frame BATTLEANIMOAMSET_55, 40
 	frame BATTLEANIMOAMSET_54, 40
 	frame BATTLEANIMOAMSET_53, 20
-	dorepeat 4
+	dowait 4
 	frame BATTLEANIMOAMSET_53,  4
-	dorepeat 4
+	dowait 4
 	frame BATTLEANIMOAMSET_53,  4
-	dorepeat 4
+	dowait 4
 	frame BATTLEANIMOAMSET_53,  4
 	delanim
 
@@ -658,11 +658,11 @@
 	delanim
 
 .Frameset_45:
-	dorepeat 0
+	dowait 0
 	frame BATTLEANIMOAMSET_14,  0
 	frame BATTLEANIMOAMSET_15,  0
 	frame BATTLEANIMOAMSET_14,  0, OAM_X_FLIP
-	dorepeat 0
+	dowait 0
 	frame BATTLEANIMOAMSET_16,  0, OAM_X_FLIP
 	frame BATTLEANIMOAMSET_15,  0
 	frame BATTLEANIMOAMSET_16,  0
@@ -867,7 +867,7 @@
 	delanim
 
 .Frameset_68:
-	dorepeat 15
+	dowait 15
 	frame BATTLEANIMOAMSET_84, 15
 	frame BATTLEANIMOAMSET_85, 15
 	frame BATTLEANIMOAMSET_29, 15
@@ -970,11 +970,11 @@
 	frame BATTLEANIMOAMSET_9C,  2
 	frame BATTLEANIMOAMSET_9D,  2
 	frame BATTLEANIMOAMSET_9E,  8
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_9E,  2
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_9E,  2
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_9E,  2
 	delanim
 
@@ -1160,11 +1160,11 @@
 	frame BATTLEANIMOAMSET_50,  1
 	frame BATTLEANIMOAMSET_51,  1
 	frame BATTLEANIMOAMSET_52,  2
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_52,  2
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_52,  2
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_52,  2
 	delanim
 
@@ -1178,11 +1178,11 @@
 	frame BATTLEANIMOAMSET_50,  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
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_52,  2, OAM_X_FLIP, OAM_Y_FLIP
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_52,  2, OAM_X_FLIP, OAM_Y_FLIP
-	dorepeat 2
+	dowait 2
 	frame BATTLEANIMOAMSET_52,  2, OAM_X_FLIP, OAM_Y_FLIP
 	delanim
 
--- a/data/battle_anims/oam.asm
+++ b/data/battle_anims/oam.asm
@@ -1,6 +1,6 @@
 BattleAnimOAMData:
 ; entries correspond to BATTLEANIMOAMSET_* constants
-	; vtile offset, length, pointer
+	; vtile offset, data length, data pointer
 	dbbw $00, 16, .OAMData_00 ; BATTLEANIMOAMSET_00
 	dbbw $04,  9, .OAMData_01 ; BATTLEANIMOAMSET_01
 	dbbw $08,  4, .OAMData_02 ; BATTLEANIMOAMSET_02
--- a/data/moves/animations.asm
+++ b/data/moves/animations.asm
@@ -398,7 +398,7 @@
 	anim_jump .Loop
 
 .Click:
-	anim_clearsprites
+	anim_keepsprites
 	anim_ret
 
 .BreakFree:
--- a/data/sprite_anims/framesets.asm
+++ b/data/sprite_anims/framesets.asm
@@ -129,12 +129,12 @@
 
 .Frameset_TextEntryCursor:
 	frame SPRITE_ANIM_OAMSET_TEXT_ENTRY_CURSOR,  1
-	dorepeat  1
+	dowait 1
 	dorestart
 
 .Frameset_TextEntryCursorBig:
 	frame SPRITE_ANIM_OAMSET_TEXT_ENTRY_CURSOR_BIG,  1
-	dorepeat  1
+	dowait 1
 	dorestart
 
 .Frameset_GameFreakLogo:
@@ -285,11 +285,11 @@
 
 ; unused
 	frame SPRITE_ANIM_OAMSET_UNUSED_4E,  3
-	dorepeat  3
+	dowait 3
 	dorestart
 
 .Frameset_Unused1C:
-	dorepeat 32
+	dowait 32
 	endanim
 
 .Frameset_Leaf:
@@ -299,9 +299,9 @@
 .Frameset_CutTree:
 	frame SPRITE_ANIM_OAMSET_TREE_1,      2
 	frame SPRITE_ANIM_OAMSET_CUT_TREE_2, 16
-	dorepeat  1
+	dowait 1
 	frame SPRITE_ANIM_OAMSET_CUT_TREE_3,  1
-	dorepeat  1
+	dowait 1
 	frame SPRITE_ANIM_OAMSET_CUT_TREE_4,  1
 	delanim
 
@@ -483,7 +483,7 @@
 	endanim
 
 .Frameset_IntroUnownF:
-	dorepeat 0
+	dowait 0
 	endanim
 
 .Frameset_CelebiLeft:
--- a/data/sprite_anims/oam.asm
+++ b/data/sprite_anims/oam.asm
@@ -1,6 +1,6 @@
 SpriteAnimOAMData:
 ; 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 $04, .OAMData_RedWalk                  ; SPRITE_ANIM_OAMSET_RED_WALK_2
 	dbw $4c, .OAMData_1x1_Palette0             ; SPRITE_ANIM_OAMSET_GS_INTRO_BUBBLE_1
--- a/docs/battle_anim_commands.md
+++ b/docs/battle_anim_commands.md
@@ -91,6 +91,7 @@
 - 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).
 
+
 ## `$DB`: `anim_checkpokeball`
 
 Sets `BattleAnimVar` to the result of [GetPokeBallWobble](/engine/battle_anims/pokeball_wobble.asm).
@@ -196,7 +197,11 @@
 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`
--- a/engine/battle_anims/anim_commands.asm
+++ b/engine/battle_anims/anim_commands.asm
@@ -112,10 +112,10 @@
 	cp ROLLOUT
 	jr nz, .not_rollout
 
-	ld a, $2e
-	ld b, 5
-	ld de, 4
-	ld hl, wActiveBGEffects
+	ld a, ANIM_BG_2E
+	ld b, NUM_BG_EFFECTS
+	ld de, BG_EFFECT_STRUCT_LENGTH
+	ld hl, wBGEffect1Function
 .find
 	cp [hl]
 	jr z, .done
@@ -128,10 +128,10 @@
 
 .done
 	ld a, [wBattleAnimFlags]
-	bit 0, a
+	bit BATTLEANIM_STOP_F, a
 	jr z, .playframe
 
-	call BattleAnim_ClearCGB_OAMFlags
+	call BattleAnim_ClearOAM
 	ret
 
 BattleAnimClearHud:
@@ -232,16 +232,17 @@
 	call BattleAnimDelayFrame
 	ret
 
-BattleAnim_ClearCGB_OAMFlags:
+BattleAnim_ClearOAM:
 	ld a, [wBattleAnimFlags]
-	bit 3, a
+	bit BATTLEANIM_KEEPSPRITES_F, a
 	jr z, .delete
 
+	; Instead of deleting the sprites, make them all use palette 0 (monochrome)
 	ld hl, wVirtualOAMSprite00Attributes
 	ld c, NUM_SPRITE_OAM_STRUCTS
 .loop
 	ld a, [hl]
-	and $f0
+	and ~PALETTE_MASK & ~VRAM_BANK_1
 	ld [hli], a
 rept SPRITEOAMSTRUCT_LENGTH + -1
 	inc hl
@@ -267,12 +268,12 @@
 	ret
 
 .CheckTimer:
-	ld a, [wBattleAnimDuration]
+	ld a, [wBattleAnimDelay]
 	and a
 	jr z, .done
 
 	dec a
-	ld [wBattleAnimDuration], a
+	ld [wBattleAnimDelay], a
 	and a
 	ret
 
@@ -289,17 +290,17 @@
 
 ; Return from a subroutine.
 	ld hl, wBattleAnimFlags
-	bit 1, [hl]
+	bit BATTLEANIM_IN_SUBROUTINE_F, [hl]
 	jr nz, .do_anim
 
-	set 0, [hl]
+	set BATTLEANIM_STOP_F, [hl]
 	ret
 
 .not_done_with_anim
-	cp $d0
+	cp anim_obj_command
 	jr nc, .do_anim
 
-	ld [wBattleAnimDuration], a
+	ld [wBattleAnimDelay], a
 	ret
 
 .do_anim
@@ -310,7 +311,7 @@
 .DoCommand:
 ; Execute battle animation command in [wBattleAnimByte].
 	ld a, [wBattleAnimByte]
-	sub $d0
+	sub anim_obj_command
 
 	ld e, a
 	ld d, 0
@@ -361,7 +362,7 @@
 	dw BattleAnimCmd_BGP
 	dw BattleAnimCmd_OBP0
 	dw BattleAnimCmd_OBP1
-	dw BattleAnimCmd_ClearSprites
+	dw BattleAnimCmd_KeepSprites
 	dw BattleAnimCmd_F5
 	dw BattleAnimCmd_F6
 	dw BattleAnimCmd_F7
@@ -382,7 +383,7 @@
 
 BattleAnimCmd_Ret:
 	ld hl, wBattleAnimFlags
-	res 1, [hl]
+	res BATTLEANIM_IN_SUBROUTINE_F, [hl]
 	ld hl, wBattleAnimParent
 	ld e, [hl]
 	inc hl
@@ -413,7 +414,7 @@
 	inc hl
 	ld [hl], d
 	ld hl, wBattleAnimFlags
-	set 1, [hl]
+	set BATTLEANIM_IN_SUBROUTINE_F, [hl]
 	ret
 
 BattleAnimCmd_Jump:
@@ -430,12 +431,12 @@
 BattleAnimCmd_Loop:
 	call GetBattleAnimByte
 	ld hl, wBattleAnimFlags
-	bit 2, [hl]
+	bit BATTLEANIM_IN_LOOP_F, [hl]
 	jr nz, .continue_loop
 	and a
 	jr z, .perpetual
 	dec a
-	set 2, [hl]
+	set BATTLEANIM_IN_LOOP_F, [hl]
 	ld [wBattleAnimLoops], a
 .continue_loop
 	ld hl, wBattleAnimLoops
@@ -456,7 +457,7 @@
 
 .return_from_loop
 	ld hl, wBattleAnimFlags
-	res 2, [hl]
+	res BATTLEANIM_IN_LOOP_F, [hl]
 	ld hl, wBattleAnimAddress
 	ld e, [hl]
 	inc hl
@@ -643,10 +644,13 @@
 	ret
 
 BattleAnimCmd_ClearObjs:
+; BUG: This function only clears the first 6+(2/3) objects
+
 	ld hl, wActiveAnimObjects
 	ld a, $a0
+	; ld a, wActiveAnimObjectsEnd - wActiveAnimObjects
 .loop
-	ld [hl], $0
+	ld [hl], 0
 	inc hl
 	dec a
 	jr nz, .loop
@@ -693,7 +697,7 @@
 
 BattleAnimCmd_IncObj:
 	call GetBattleAnimByte
-	ld e, 10
+	ld e, NUM_ANIM_OBJECTS
 	ld bc, wActiveAnimObjects
 .loop
 	ld hl, BATTLEANIMSTRUCT_INDEX
@@ -718,8 +722,8 @@
 
 BattleAnimCmd_IncBGEffect:
 	call GetBattleAnimByte
-	ld e, 5
-	ld bc, wActiveBGEffects
+	ld e, NUM_BG_EFFECTS
+	ld bc, wBGEffect1Function
 .loop
 	ld hl, $0
 	add hl, bc
@@ -743,7 +747,7 @@
 
 BattleAnimCmd_SetObj:
 	call GetBattleAnimByte
-	ld e, 10
+	ld e, NUM_ANIM_OBJECTS
 	ld bc, wActiveAnimObjects
 .loop
 	ld hl, BATTLEANIMSTRUCT_INDEX
@@ -1152,9 +1156,9 @@
 	ldh [hOAMUpdate], a
 	ret
 
-BattleAnimCmd_ClearSprites:
+BattleAnimCmd_KeepSprites:
 	ld hl, wBattleAnimFlags
-	set 3, [hl]
+	set BATTLEANIM_KEEPSPRITES_F, [hl]
 	ret
 
 BattleAnimCmd_F5:
@@ -1430,10 +1434,10 @@
 	ret
 
 BattleAnim_UpdateOAM_All:
-	ld a, $0
+	ld a, 0
 	ld [wBattleAnimOAMPointerLo], a
 	ld hl, wActiveAnimObjects
-	ld e, 10
+	ld e, NUM_ANIM_OBJECTS
 .loop
 	ld a, [hl]
 	and a
--- a/engine/battle_anims/bg_effects.asm
+++ b/engine/battle_anims/bg_effects.asm
@@ -10,7 +10,7 @@
 
 ExecuteBGEffects:
 	ld hl, wActiveBGEffects
-	ld e, 5
+	ld e, NUM_BG_EFFECTS
 .loop
 	ld a, [hl]
 	and a
@@ -23,7 +23,7 @@
 	pop de
 	pop hl
 .next
-	ld bc, 4
+	ld bc, BG_EFFECT_STRUCT_LENGTH
 	add hl, bc
 	dec e
 	jr nz, .loop
@@ -31,12 +31,12 @@
 
 QueueBGEffect:
 	ld hl, wActiveBGEffects
-	ld e, 5
+	ld e, NUM_BG_EFFECTS
 .loop
 	ld a, [hl]
 	and a
 	jr z, .load
-	ld bc, 4
+	ld bc, BG_EFFECT_STRUCT_LENGTH
 	add hl, bc
 	dec e
 	jr nz, .loop
@@ -416,7 +416,7 @@
 .zero
 	call BGEffect_CheckFlyDigStatus
 	jr z, .not_flying_digging
-	ld hl, wNumActiveBattleAnims
+	ld hl, wLastAnimObjectIndex
 	inc [hl]
 	call EndBattleBGEffect
 	ret
@@ -483,7 +483,7 @@
 .zero
 	call BGEffect_CheckFlyDigStatus
 	jr z, .not_flying_digging
-	ld hl, wNumActiveBattleAnims
+	ld hl, wLastAnimObjectIndex
 	inc [hl]
 	call EndBattleBGEffect
 	ret
--- a/engine/battle_anims/core.asm
+++ b/engine/battle_anims/core.asm
@@ -1,6 +1,6 @@
 QueueBattleAnimation:
 	ld hl, wActiveAnimObjects
-	ld e, 10
+	ld e, NUM_ANIM_OBJECTS
 .loop
 	ld a, [hl]
 	and a
@@ -15,7 +15,7 @@
 .done
 	ld c, l
 	ld b, h
-	ld hl, wNumActiveBattleAnims
+	ld hl, wLastAnimObjectIndex
 	inc [hl]
 	call InitBattleAnimation
 	ret
@@ -38,7 +38,7 @@
 	ld d, h
 	ld hl, BATTLEANIMSTRUCT_INDEX
 	add hl, bc
-	ld a, [wNumActiveBattleAnims]
+	ld a, [wLastAnimObjectIndex]
 	ld [hli], a ; Index
 	ld a, [de]
 	inc de
@@ -80,32 +80,36 @@
 BattleAnimOAMUpdate:
 	call InitBattleAnimBuffer
 	call GetBattleAnimFrame
-	cp -3
+	cp dowait_command
 	jp z, .done
-	cp -4
+	cp delanim_command
 	jp z, .delete
+
 	push af
 	ld hl, wBattleAnimTempOAMFlags
-	ld a, [wBattleAnimTempAddSubFlags]
+	ld a, [wBattleAnimTempFrameOAMFlags]
 	xor [hl]
-	and $e0
+	and PRIORITY | Y_FLIP | X_FLIP
 	ld [hl], a
 	pop af
+
 	push bc
 	call GetBattleAnimOAMPointer
 	ld a, [wBattleAnimTempTileID]
-	add [hl]
+	add [hl] ; tile offset
 	ld [wBattleAnimTempTileID], a
 	inc hl
-	ld a, [hli]
+	ld a, [hli] ; oam data length
 	ld c, a
-	ld a, [hli]
+	ld a, [hli] ; oam data pointer
 	ld h, [hl]
 	ld l, a
 	ld a, [wBattleAnimOAMPointerLo]
 	ld e, a
 	ld d, HIGH(wVirtualOAM)
+
 .loop
+	; Y Coord
 	ld a, [wBattleAnimTempYCoord]
 	ld b, a
 	ld a, [wBattleAnimTempYOffset]
@@ -114,16 +118,17 @@
 	push hl
 	ld a, [hl]
 	ld hl, wBattleAnimTempOAMFlags
-	bit 6, [hl]
+	bit OAM_Y_FLIP, [hl]
 	jr z, .no_yflip
 	add $8
 	xor $ff
 	inc a
-
 .no_yflip
 	pop hl
 	add b
 	ld [de], a
+
+	; X Coord
 	inc hl
 	inc de
 	ld a, [wBattleAnimTempXCoord]
@@ -134,16 +139,17 @@
 	push hl
 	ld a, [hl]
 	ld hl, wBattleAnimTempOAMFlags
-	bit 5, [hl]
+	bit OAM_X_FLIP, [hl]
 	jr z, .no_xflip
 	add $8
 	xor $ff
 	inc a
-
 .no_xflip
 	pop hl
 	add b
 	ld [de], a
+
+	; Tile ID
 	inc hl
 	inc de
 	ld a, [wBattleAnimTempTileID]
@@ -150,6 +156,8 @@
 	add BATTLEANIM_BASE_TILE
 	add [hl]
 	ld [de], a
+
+	; Attributes
 	inc hl
 	inc de
 	ld a, [wBattleAnimTempOAMFlags]
@@ -156,21 +164,22 @@
 	ld b, a
 	ld a, [hl]
 	xor b
-	and $e0
+	and PRIORITY | Y_FLIP | X_FLIP
 	ld b, a
 	ld a, [hl]
-	and $10
+	and OBP_NUM
 	or b
 	ld b, a
 	ld a, [wBattleAnimTempPalette]
-	and $f
+	and (PRIORITY | Y_FLIP | X_FLIP | OBP_NUM) ^ $ff
 	or b
 	ld [de], a
+
 	inc hl
 	inc de
 	ld a, e
 	ld [wBattleAnimOAMPointerLo], a
-	cp $a0
+	cp LOW(wVirtualOAMEnd)
 	jr nc, .exit_set_carry
 	dec c
 	jr nz, .loop
@@ -193,10 +202,11 @@
 	ld hl, BATTLEANIMSTRUCT_01
 	add hl, bc
 	ld a, [hl]
-	and %10000000
+
+	and PRIORITY
 	ld [wBattleAnimTempOAMFlags], a
 	xor a
-	ld [wBattleAnimTempAddSubFlags], a
+	ld [wBattleAnimTempFrameOAMFlags], a
 	ld hl, BATTLEANIMSTRUCT_PALETTE
 	add hl, bc
 	ld a, [hl]
@@ -217,9 +227,11 @@
 	ld [wBattleAnimTempXOffset], a
 	ld a, [hli]
 	ld [wBattleAnimTempYOffset], a
+
 	ldh a, [hBattleTurn]
 	and a
 	ret z
+
 	ld hl, BATTLEANIMSTRUCT_01
 	add hl, bc
 	ld a, [hl]
@@ -226,6 +238,7 @@
 	ld [wBattleAnimTempOAMFlags], a
 	bit 0, [hl]
 	ret z
+
 	ld hl, BATTLEANIMSTRUCT_XCOORD
 	add hl, bc
 	ld a, [hli]
--- a/engine/battle_anims/helpers.asm
+++ b/engine/battle_anims/helpers.asm
@@ -37,7 +37,7 @@
 	push af
 	ld a, [hl]
 	push hl
-	and $3f
+	and (Y_FLIP << 1 | X_FLIP << 1) ^ $ff
 	ld hl, BATTLEANIMSTRUCT_DURATION
 	add hl, bc
 	ld [hl], a
@@ -44,9 +44,9 @@
 	pop hl
 .okay
 	ld a, [hl]
-	and $c0
+	and Y_FLIP << 1 | X_FLIP << 1 ; The << 1 is compensated in the "frame" macro
 	srl a
-	ld [wBattleAnimTempAddSubFlags], a
+	ld [wBattleAnimTempFrameOAMFlags], a
 	pop af
 	ret
 
@@ -55,6 +55,7 @@
 	ld hl, BATTLEANIMSTRUCT_DURATION
 	add hl, bc
 	ld [hl], a
+
 	ld hl, BATTLEANIMSTRUCT_FRAME
 	add hl, bc
 	dec [hl]
--- a/engine/gfx/sprites.asm
+++ b/engine/gfx/sprites.asm
@@ -315,8 +315,8 @@
 AddOrSubtractY:
 	push hl
 	ld a, [hl]
-	ld hl, wCurSpriteAddSubFlags
-	bit 6, [hl]
+	ld hl, wCurSpriteOAMFlags
+	bit OAM_Y_FLIP, [hl]
 	jr z, .ok
 	; 8 - a
 	add $8
@@ -330,8 +330,8 @@
 AddOrSubtractX:
 	push hl
 	ld a, [hl]
-	ld hl, wCurSpriteAddSubFlags
-	bit 5, [hl] ; x flip
+	ld hl, wCurSpriteOAMFlags
+	bit OAM_X_FLIP, [hl]
 	jr z, .ok
 	; 8 - a
 	add $8
@@ -343,20 +343,20 @@
 	ret
 
 GetSpriteOAMAttr:
-	ld a, [wCurSpriteAddSubFlags]
+	ld a, [wCurSpriteOAMFlags]
 	ld b, a
 	ld a, [hl]
 	xor b
-	and $e0
+	and PRIORITY | Y_FLIP | X_FLIP
 	ld b, a
 	ld a, [hl]
-	and $1f
+	and (PRIORITY | Y_FLIP | X_FLIP) ^ $ff
 	or b
 	ret
 
 InitSpriteAnimBuffer:
 	xor a
-	ld [wCurSpriteAddSubFlags], a
+	ld [wCurSpriteOAMFlags], a
 	ld hl, SPRITEANIMSTRUCT_TILE_ID
 	add hl, bc
 	ld a, [hli]
@@ -436,7 +436,7 @@
 	push af
 	ld a, [hl]
 	push hl
-	and $3f
+	and (Y_FLIP << 1 | X_FLIP << 1) ^ $ff
 	ld hl, SPRITEANIMSTRUCT_DURATIONOFFSET
 	add hl, bc
 	add [hl]
@@ -446,9 +446,9 @@
 	pop hl
 .okay
 	ld a, [hl]
-	and $c0
+	and Y_FLIP << 1 | X_FLIP << 1 ; The << 1 is compensated in the "frame" macro
 	srl a
-	ld [wCurSpriteAddSubFlags], a
+	ld [wCurSpriteOAMFlags], a
 	pop af
 	ret
 
--- a/macros/legacy.asm
+++ b/macros/legacy.asm
@@ -174,3 +174,6 @@
 link_wait_button       EQUS "text_linkwaitbutton"
 current_day            EQUS "text_today"
 text_jump              EQUS "text_far"
+
+; macros/scripts/battle_anims.asm
+anim_clearsprites EQUS "anim_keepsprites"
--- a/macros/scripts/battle_anims.asm
+++ b/macros/scripts/battle_anims.asm
@@ -233,7 +233,7 @@
 ENDM
 
 	enum anim_clearsprites_command ; $f4
-anim_clearsprites: MACRO
+anim_keepsprites: MACRO
 	db anim_clearsprites_command
 ENDM
 
--- a/macros/scripts/gfx_anims.asm
+++ b/macros/scripts/gfx_anims.asm
@@ -15,20 +15,20 @@
 	enum_start $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
 ENDM
 
-	enum dorepeat_command ; $fd
-dorepeat: MACRO
-	db dorepeat_command
-	db \1 ; #
+	enum dowait_command ; $fd
+dowait: MACRO
+	db dowait_command
+	db \1 ; frames
 ENDM
 
-	enum setrepeat_command ; $fe
-setrepeat: MACRO
-	db setrepeat_command
-	db \1 ; #
+	enum dorestart_command ; $fe
+dorestart: MACRO
+	db dorestart_command
 ENDM
 
 	enum endanim_command ; $ff
@@ -36,9 +36,18 @@
 	db endanim_command
 ENDM
 
-__enum__ = $fe
 
-	enum dorestart_command ; $fe
-dorestart: MACRO ; used for oam
-	db dorestart_command
+; Used for pic animations
+__enum__ = $fd
+
+	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
--- a/wram.asm
+++ b/wram.asm
@@ -263,7 +263,7 @@
 wCurIconTile:: db
 wSpriteAnimAddrBackup::
 wSpriteAnimIDBuffer::
-wCurSpriteAddSubFlags::
+wCurSpriteOAMFlags::
 	dw
 wCurAnimVTile:: db
 wCurAnimXCoord:: db
@@ -3045,11 +3045,11 @@
 wBGEffect5:: battle_bg_effect wBGEffect5
 wActiveBGEffectsEnd::
 
-wNumActiveBattleAnims:: db ; d40e
+wLastAnimObjectIndex:: db ; d40e
 
 wBattleAnimFlags:: db ; d40f
 wBattleAnimAddress:: dw ; d410
-wBattleAnimDuration:: db ; d412
+wBattleAnimDelay:: db ; d412
 wBattleAnimParent:: dw ; d413
 wBattleAnimLoops:: db ; d415
 wBattleAnimVar:: db ; d416
@@ -3077,7 +3077,7 @@
 wBattleAnimTempYCoord:: db
 wBattleAnimTempXOffset:: db
 wBattleAnimTempYOffset:: db
-wBattleAnimTempAddSubFlags:: db
+wBattleAnimTempFrameOAMFlags:: db
 wBattleAnimTempPalette:: db
 ENDU ; d422