Merge pull request #107 from jiangzhengwenjz/battle

battle (2nd take)
This commit is contained in:
PikalaxALT
2019-10-12 21:08:06 -04:00
committed by GitHub
66 changed files with 13403 additions and 31879 deletions
+1
View File
@@ -197,6 +197,7 @@ $(C_BUILDDIR)/isagbprn.o: CC1 := tools/agbcc/bin/old_agbcc
$(C_BUILDDIR)/isagbprn.o: CFLAGS := -mthumb-interwork
#$(C_BUILDDIR)/trainer_tower.o: CFLAGS += -ffreestanding
$(C_BUILDDIR)/flying.o: CFLAGS += -ffreestanding
ifeq ($(NODEP),1)
$(C_BUILDDIR)/%.o: c_dep :=
+20 -20
View File
@@ -99,10 +99,10 @@ sub_800FE24: @ 800FE24
movs r0, 0x4A
movs r1, 0
bl SetGpuReg
ldr r1, _0800FF30 @ =gUnknown_2022984
ldr r1, _0800FF30 @ =gBattle_WIN0H
movs r0, 0xF0
strh r0, [r1]
ldr r0, _0800FF34 @ =gUnknown_2022986
ldr r0, _0800FF34 @ =gBattle_WIN0V
strh r4, [r0]
bl ScanlineEffect_Clear
ldr r0, _0800FF38 @ =gScanlineEffectRegBuffers
@@ -184,8 +184,8 @@ _0800FEA6:
.align 2, 0
_0800FF28: .4byte 0x05006000
_0800FF2C: .4byte 0x00005051
_0800FF30: .4byte gUnknown_2022984
_0800FF34: .4byte gUnknown_2022986
_0800FF30: .4byte gBattle_WIN0H
_0800FF34: .4byte gBattle_WIN0V
_0800FF38: .4byte gScanlineEffectRegBuffers
_0800FF3C: .4byte gUnknown_824EFE4
_0800FF40: .4byte 0x0000ff10
@@ -3157,11 +3157,11 @@ VBlankCB_Battle: @ 80116F4
ldrh r1, [r0]
movs r0, 0x1E
bl SetGpuReg
ldr r0, _080117A8 @ =gUnknown_2022984
ldr r0, _080117A8 @ =gBattle_WIN0H
ldrh r1, [r0]
movs r0, 0x40
bl SetGpuReg
ldr r0, _080117AC @ =gUnknown_2022986
ldr r0, _080117AC @ =gBattle_WIN0V
ldrh r1, [r0]
movs r0, 0x44
bl SetGpuReg
@@ -3188,8 +3188,8 @@ _08011798: .4byte gBattle_BG2_X
_0801179C: .4byte gBattle_BG2_Y
_080117A0: .4byte gBattle_BG3_X
_080117A4: .4byte gBattle_BG3_Y
_080117A8: .4byte gUnknown_2022984
_080117AC: .4byte gUnknown_2022986
_080117A8: .4byte gBattle_WIN0H
_080117AC: .4byte gBattle_WIN0V
_080117B0: .4byte gUnknown_2022988
_080117B4: .4byte gUnknown_202298A
thumb_func_end VBlankCB_Battle
@@ -3543,10 +3543,10 @@ sub_8011A1C: @ 8011A1C
movs r0, 0x4A
movs r1, 0
bl SetGpuReg
ldr r1, _08011B48 @ =gUnknown_2022984
ldr r1, _08011B48 @ =gBattle_WIN0H
movs r0, 0xF0
strh r0, [r1]
ldr r0, _08011B4C @ =gUnknown_2022986
ldr r0, _08011B4C @ =gBattle_WIN0V
strh r4, [r0]
bl ScanlineEffect_Clear
ldr r0, _08011B50 @ =gScanlineEffectRegBuffers
@@ -3643,8 +3643,8 @@ _08011A9C:
.align 2, 0
_08011B40: .4byte 0x05006000
_08011B44: .4byte 0x00005051
_08011B48: .4byte gUnknown_2022984
_08011B4C: .4byte gUnknown_2022986
_08011B48: .4byte gBattle_WIN0H
_08011B4C: .4byte gBattle_WIN0V
_08011B50: .4byte gScanlineEffectRegBuffers
_08011B54: .4byte 0x0000ff10
_08011B58: .4byte gBattle_BG0_X
@@ -4145,16 +4145,16 @@ _08011F3C:
lsls r0, 16
lsrs r0, 16
_08011F46:
ldr r1, _08011F4C @ =gUnknown_82349CC
ldr r1, _08011F4C @ =gMonFrontPicCoords
lsls r0, 2
b _08011F88
.align 2, 0
_08011F4C: .4byte gUnknown_82349CC
_08011F4C: .4byte gMonFrontPicCoords
_08011F50:
ldr r0, _08011F68 @ =0x00000181
cmp r4, r0
bne _08011F74
ldr r0, _08011F6C @ =gUnknown_83AE03C
ldr r0, _08011F6C @ =gCastformFrontSpriteCoords
ldr r1, _08011F70 @ =gBattleMonForms
adds r1, r6, r1
ldrb r1, [r1]
@@ -4164,19 +4164,19 @@ _08011F50:
b _08011F8C
.align 2, 0
_08011F68: .4byte 0x00000181
_08011F6C: .4byte gUnknown_83AE03C
_08011F6C: .4byte gCastformFrontSpriteCoords
_08011F70: .4byte gBattleMonForms
_08011F74:
movs r0, 0xCE
lsls r0, 1
cmp r4, r0
bls _08011F84
ldr r0, _08011F80 @ =gUnknown_82349CC
ldr r0, _08011F80 @ =gMonFrontPicCoords
b _08011F8A
.align 2, 0
_08011F80: .4byte gUnknown_82349CC
_08011F80: .4byte gMonFrontPicCoords
_08011F84:
ldr r1, _08011FAC @ =gUnknown_82349CC
ldr r1, _08011FAC @ =gMonFrontPicCoords
lsls r0, r4, 2
_08011F88:
adds r0, r1
@@ -4199,7 +4199,7 @@ _08011F8C:
pop {r0}
bx r0
.align 2, 0
_08011FAC: .4byte gUnknown_82349CC
_08011FAC: .4byte gMonFrontPicCoords
_08011FB0: .4byte sub_8011FB4
thumb_func_end SpriteCB_FaintOpponentMon
+53 -53
View File
@@ -16,7 +16,7 @@ ClearBattleAnimationVars: @ 80724C0
strb r1, [r0]
ldr r0, _08072558 @ =gAnimScriptActive
strb r1, [r0]
ldr r0, _0807255C @ =gUnknown_2037EE2
ldr r0, _0807255C @ =gAnimVisualTaskCount
strb r1, [r0]
ldr r0, _08072560 @ =gUnknown_2037EE3
strb r1, [r0]
@@ -86,7 +86,7 @@ _08072520:
.align 2, 0
_08072554: .4byte gUnknown_2037EE0
_08072558: .4byte gAnimScriptActive
_0807255C: .4byte gUnknown_2037EE2
_0807255C: .4byte gAnimVisualTaskCount
_08072560: .4byte gUnknown_2037EE3
_08072564: .4byte gAnimDisableStructPtr
_08072568: .4byte gAnimMoveDmg
@@ -152,7 +152,7 @@ LaunchBattleAnimation: @ 80725D4
movs r4, 0
ldr r6, _08072618 @ =gBattlerPartyIndexes
movs r7, 0x64
ldr r5, _0807261C @ =gUnknown_2037F1C
ldr r5, _0807261C @ =gAnimBattlerSpecies
_08072600:
lsls r0, r4, 24
lsrs r0, 24
@@ -166,7 +166,7 @@ _08072600:
b _0807262A
.align 2, 0
_08072618: .4byte gBattlerPartyIndexes
_0807261C: .4byte gUnknown_2037F1C
_0807261C: .4byte gAnimBattlerSpecies
_08072620: .4byte gEnemyParty
_08072624:
ldrh r0, [r6]
@@ -276,10 +276,10 @@ _080726EE:
movs r2, 0x80
bl m4aMPlayVolumeControl
_08072706:
ldr r0, _08072730 @ =gUnknown_2022984
ldr r0, _08072730 @ =gBattle_WIN0H
movs r1, 0
strh r1, [r0]
ldr r0, _08072734 @ =gUnknown_2022986
ldr r0, _08072734 @ =gBattle_WIN0V
strh r1, [r0]
ldr r0, _08072738 @ =gUnknown_2022988
strh r1, [r0]
@@ -296,8 +296,8 @@ _08072706:
.align 2, 0
_08072728: .4byte 0x0000ffff
_0807272C: .4byte gMPlayInfo_BGM
_08072730: .4byte gUnknown_2022984
_08072734: .4byte gUnknown_2022986
_08072730: .4byte gBattle_WIN0H
_08072734: .4byte gBattle_WIN0V
_08072738: .4byte gUnknown_2022988
_0807273C: .4byte gUnknown_202298A
thumb_func_end LaunchBattleAnimation
@@ -309,7 +309,7 @@ DestroyAnimSprite: @ 8072740
bl FreeSpriteOamMatrix
adds r0, r4, 0
bl DestroySprite
ldr r1, _0807275C @ =gUnknown_2037EE2
ldr r1, _0807275C @ =gAnimVisualTaskCount
ldrb r0, [r1]
subs r0, 0x1
strb r0, [r1]
@@ -317,7 +317,7 @@ DestroyAnimSprite: @ 8072740
pop {r0}
bx r0
.align 2, 0
_0807275C: .4byte gUnknown_2037EE2
_0807275C: .4byte gAnimVisualTaskCount
thumb_func_end DestroyAnimSprite
thumb_func_start DestroyAnimVisualTask
@@ -326,14 +326,14 @@ DestroyAnimVisualTask: @ 8072760
lsls r0, 24
lsrs r0, 24
bl DestroyTask
ldr r1, _08072778 @ =gUnknown_2037EE2
ldr r1, _08072778 @ =gAnimVisualTaskCount
ldrb r0, [r1]
subs r0, 0x1
strb r0, [r1]
pop {r0}
bx r0
.align 2, 0
_08072778: .4byte gUnknown_2037EE2
_08072778: .4byte gAnimVisualTaskCount
thumb_func_end DestroyAnimVisualTask
thumb_func_start DestroyAnimSoundTask
@@ -666,7 +666,7 @@ _080729CC:
adds r0, r7, 0
adds r1, r4, 0
bl CreateSpriteAndAnimate
ldr r1, _08072A0C @ =gUnknown_2037EE2
ldr r1, _08072A0C @ =gAnimVisualTaskCount
ldrb r0, [r1]
adds r0, 0x1
strb r0, [r1]
@@ -676,7 +676,7 @@ _080729CC:
.align 2, 0
_08072A04: .4byte gBattleAnimAttacker
_08072A08: .4byte gBattleAnimTarget
_08072A0C: .4byte gUnknown_2037EE2
_08072A0C: .4byte gAnimVisualTaskCount
thumb_func_end ScriptCmd_createsprite
thumb_func_start ScriptCmd_createvisualtask
@@ -729,7 +729,7 @@ _08072A60:
lsls r0, 24
lsrs r0, 24
bl _call_via_r6
ldr r1, _08072A88 @ =gUnknown_2037EE2
ldr r1, _08072A88 @ =gAnimVisualTaskCount
ldrb r0, [r1]
adds r0, 0x1
strb r0, [r1]
@@ -739,7 +739,7 @@ _08072A60:
.align 2, 0
_08072A80: .4byte gUnknown_2037ED4
_08072A84: .4byte gBattleAnimArgs
_08072A88: .4byte gUnknown_2037EE2
_08072A88: .4byte gAnimVisualTaskCount
thumb_func_end ScriptCmd_createvisualtask
thumb_func_start ScriptCmd_delay
@@ -778,7 +778,7 @@ _08072AC8: .4byte WaitAnimFrameCount
thumb_func_start sub_8072ACC
sub_8072ACC: @ 8072ACC
push {lr}
ldr r0, _08072AE4 @ =gUnknown_2037EE2
ldr r0, _08072AE4 @ =gAnimVisualTaskCount
ldrb r2, [r0]
cmp r2, 0
bne _08072AF0
@@ -790,7 +790,7 @@ sub_8072ACC: @ 8072ACC
strb r2, [r0]
b _08072AF6
.align 2, 0
_08072AE4: .4byte gUnknown_2037EE2
_08072AE4: .4byte gAnimVisualTaskCount
_08072AE8: .4byte gUnknown_2037ED4
_08072AEC: .4byte gUnknown_2037EE0
_08072AF0:
@@ -821,7 +821,7 @@ sub_8072B08: @ 8072B08
push {r7}
movs r0, 0
mov r8, r0
ldr r0, _08072B38 @ =gUnknown_2037EE2
ldr r0, _08072B38 @ =gAnimVisualTaskCount
ldrb r0, [r0]
cmp r0, 0
bne _08072B30
@@ -842,7 +842,7 @@ _08072B30:
strh r0, [r1]
b _08072B62
.align 2, 0
_08072B38: .4byte gUnknown_2037EE2
_08072B38: .4byte gAnimVisualTaskCount
_08072B3C: .4byte gUnknown_2037EE3
_08072B40: .4byte gUnknown_2037F14
_08072B44: .4byte gUnknown_2037F12
@@ -1007,7 +1007,7 @@ _08072C62:
_08072C88:
adds r0, r5, 0
adds r1, r7, 0
bl sub_8072E48
bl MoveBattlerSpriteToBG
ldr r0, _08072CDC @ =gBattlerSpriteIds
adds r0, r5, r0
ldrb r4, [r0]
@@ -1091,7 +1091,7 @@ _08072D12:
_08072D3E:
adds r0, r5, 0
adds r1, r7, 0
bl sub_8072E48
bl MoveBattlerSpriteToBG
ldr r0, _08072D9C @ =gBattlerSpriteIds
adds r0, r5, r0
ldrb r4, [r0]
@@ -1217,8 +1217,8 @@ _08072E42:
bx r1
thumb_func_end IsBattlerSpriteVisible
thumb_func_start sub_8072E48
sub_8072E48: @ 8072E48
thumb_func_start MoveBattlerSpriteToBG
MoveBattlerSpriteToBG: @ 8072E48
push {r4-r7,lr}
mov r7, r8
push {r7}
@@ -1490,7 +1490,7 @@ _080730B0: .4byte gBattle_BG2_Y
_080730B4: .4byte gPlttBufferUnfaded + 0x200
_080730B8: .4byte 0x05000120
_080730BC: .4byte 0x04000008
thumb_func_end sub_8072E48
thumb_func_end MoveBattlerSpriteToBG
thumb_func_start sub_80730C0
sub_80730C0: @ 80730C0
@@ -1914,7 +1914,7 @@ _080733CE:
movs r1, 0
_080733F4:
adds r0, r4, 0
bl sub_8072E48
bl MoveBattlerSpriteToBG
ldr r2, _08073478 @ =gSprites
ldr r0, _0807347C @ =gBattlerSpriteIds
adds r0, r4, r0
@@ -1952,7 +1952,7 @@ _08073416:
movs r1, 0
_08073442:
adds r0, r4, 0
bl sub_8072E48
bl MoveBattlerSpriteToBG
ldr r2, _08073478 @ =gSprites
ldr r0, _0807347C @ =gBattlerSpriteIds
adds r0, r4, r0
@@ -2767,8 +2767,8 @@ ScriptCmd_changebg: @ 8073A24
_08073A40: .4byte gUnknown_2037ED4
thumb_func_end ScriptCmd_changebg
thumb_func_start sub_8073A44
sub_8073A44: @ 8073A44
thumb_func_start BattleAnimAdjustPanning
BattleAnimAdjustPanning: @ 8073A44
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
@@ -2867,10 +2867,10 @@ _08073AFC:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_8073A44
thumb_func_end BattleAnimAdjustPanning
thumb_func_start sub_8073B08
sub_8073B08: @ 8073B08
thumb_func_start BattleAnimAdjustPanning2
BattleAnimAdjustPanning2: @ 8073B08
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
@@ -2914,10 +2914,10 @@ _08073B56:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_8073B08
thumb_func_end BattleAnimAdjustPanning2
thumb_func_start sub_8073B60
sub_8073B60: @ 8073B60
thumb_func_start KeepPanInRange
KeepPanInRange: @ 8073B60
push {lr}
lsls r0, 16
lsrs r1, r0, 16
@@ -2939,7 +2939,7 @@ _08073B7A:
bx r1
.align 2, 0
_08073B84: .4byte 0x0000ffc0
thumb_func_end sub_8073B60
thumb_func_end KeepPanInRange
thumb_func_start CalculatePanIncrement
CalculatePanIncrement: @ 8073B88
@@ -2994,7 +2994,7 @@ ScriptCmd_playsewithpan: @ 8073BC8
orrs r4, r0
movs r0, 0x2
ldrsb r0, [r1, r0]
bl sub_8073A44
bl BattleAnimAdjustPanning
adds r1, r0, 0
lsls r1, 24
asrs r1, 24
@@ -3019,7 +3019,7 @@ ScriptCmd_setpan: @ 8073C00
str r0, [r4]
movs r0, 0x1
ldrsb r0, [r1, r0]
bl sub_8073A44
bl BattleAnimAdjustPanning
lsls r0, 24
asrs r0, 24
bl SE12PanpotControl
@@ -3058,14 +3058,14 @@ ScriptCmd_panse_1B: @ 8073C2C
ldrb r7, [r1, 0x5]
movs r0, 0x2
ldrsb r0, [r1, r0]
bl sub_8073A44
bl BattleAnimAdjustPanning
adds r5, r0, 0
lsls r5, 24
lsrs r5, 24
lsls r4, 24
asrs r4, 24
adds r0, r4, 0
bl sub_8073A44
bl BattleAnimAdjustPanning
mov r8, r0
lsls r5, 24
asrs r5, 24
@@ -3301,14 +3301,14 @@ ScriptCmd_panse_27: @ 8073E10
ldrb r7, [r1, 0x5]
movs r0, 0x2
ldrsb r0, [r1, r0]
bl sub_8073B08
bl BattleAnimAdjustPanning2
adds r6, r0, 0
lsls r6, 24
lsrs r6, 24
lsls r4, 24
asrs r4, 24
adds r0, r4, 0
bl sub_8073B08
bl BattleAnimAdjustPanning2
adds r5, r0, 0
lsls r5, 24
lsrs r5, 24
@@ -3317,7 +3317,7 @@ ScriptCmd_panse_27: @ 8073E10
asrs r1, 24
mov r8, r1
mov r0, r8
bl sub_8073B08
bl BattleAnimAdjustPanning2
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
@@ -3387,7 +3387,7 @@ ScriptCmd_loopsewithpan: @ 8073ED0
mov r9, r2
movs r0, 0x2
ldrsb r0, [r1, r0]
bl sub_8073A44
bl BattleAnimAdjustPanning
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
@@ -3498,7 +3498,7 @@ ScriptCmd_waitplaysewithpan: @ 8073FB4
mov r8, r0
movs r0, 0x2
ldrsb r0, [r1, r0]
bl sub_8073A44
bl BattleAnimAdjustPanning
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
@@ -3873,7 +3873,7 @@ ScriptCmd_invisible: @ 80742A4
ldr r4, _080742D8 @ =gUnknown_2037ED4
ldr r0, [r4]
ldrb r0, [r0, 0x1]
bl GetAnimBankSpriteId
bl GetAnimBattlerSpriteId
lsls r0, 24
lsrs r2, r0, 24
cmp r2, 0xFF
@@ -3906,7 +3906,7 @@ ScriptCmd_visible: @ 80742E0
ldr r4, _08074318 @ =gUnknown_2037ED4
ldr r0, [r4]
ldrb r0, [r0, 0x1]
bl GetAnimBankSpriteId
bl GetAnimBattlerSpriteId
lsls r0, 24
lsrs r2, r0, 24
cmp r2, 0xFF
@@ -3960,7 +3960,7 @@ sub_8074320: @ 8074320
cmp r7, 0
bne _08074370
ldrb r0, [r6]
bl sub_80768B0
bl GetBattlerSpriteBGPriorityRank
lsls r0, 24
lsrs r4, r0, 24
movs r0, 0
@@ -3971,12 +3971,12 @@ _08074368: .4byte gBattleAnimAttacker
_0807436C: .4byte gBattleAnimTarget
_08074370:
ldrb r0, [r5]
bl sub_80768B0
bl GetBattlerSpriteBGPriorityRank
lsls r0, 24
lsrs r4, r0, 24
movs r0, 0x1
_0807437C:
bl GetAnimBankSpriteId
bl GetAnimBattlerSpriteId
lsls r0, 24
lsrs r2, r0, 24
cmp r2, 0xFF
@@ -4042,7 +4042,7 @@ sub_80743C8: @ 80743C8
cmp r7, 0
bne _08074418
ldrb r0, [r6]
bl sub_80768B0
bl GetBattlerSpriteBGPriorityRank
lsls r0, 24
lsrs r4, r0, 24
movs r0, 0
@@ -4053,12 +4053,12 @@ _08074410: .4byte gBattleAnimAttacker
_08074414: .4byte gBattleAnimTarget
_08074418:
ldrb r0, [r5]
bl sub_80768B0
bl GetBattlerSpriteBGPriorityRank
lsls r0, 24
lsrs r4, r0, 24
movs r0, 0x1
_08074424:
bl GetAnimBankSpriteId
bl GetAnimBattlerSpriteId
lsls r0, 24
lsrs r2, r0, 24
cmp r2, 0xFF
File diff suppressed because it is too large Load Diff
+116 -116
View File
@@ -9,12 +9,12 @@
sub_80A6E48: @ 80A6E48
push {r4,r5,lr}
adds r4, r0, 0
bl sub_8074FCC
bl SetSpriteCoordsToAnimAttackerCoords
ldr r5, _080A6E8C @ =gBattleAnimArgs
movs r0, 0
ldrsh r1, [r5, r0]
adds r0, r4, 0
bl sub_8074FF8
bl SetAnimSpriteInitialXOffset
ldrh r0, [r5, 0x2]
ldrh r1, [r4, 0x22]
adds r0, r1
@@ -27,10 +27,10 @@ sub_80A6E48: @ 80A6E48
strh r0, [r4, 0x34]
ldrh r0, [r5, 0x6]
strh r0, [r4, 0x36]
ldr r1, _080A6E90 @ =move_anim_8074EE0
ldr r1, _080A6E90 @ =DestroySpriteAndMatrix
adds r0, r4, 0
bl StoreSpriteCallbackInData6
ldr r1, _080A6E94 @ =sub_8074BE4
ldr r1, _080A6E94 @ =TranslateSpriteInEllipseOverDuration
str r1, [r4, 0x1C]
adds r0, r4, 0
bl _call_via_r1
@@ -39,8 +39,8 @@ sub_80A6E48: @ 80A6E48
bx r0
.align 2, 0
_080A6E8C: .4byte gBattleAnimArgs
_080A6E90: .4byte move_anim_8074EE0
_080A6E94: .4byte sub_8074BE4
_080A6E90: .4byte DestroySpriteAndMatrix
_080A6E94: .4byte TranslateSpriteInEllipseOverDuration
thumb_func_end sub_80A6E48
thumb_func_start sub_80A6E98
@@ -166,7 +166,7 @@ sub_80A6F3C: @ 80A6F3C
adds r0, r3
strh r2, [r0, 0x24]
adds r0, r4, 0
bl move_anim_8074EE0
bl DestroySpriteAndMatrix
_080A6F7A:
ldrh r0, [r4, 0x2E]
subs r0, 0x1
@@ -254,7 +254,7 @@ sub_80A7020: @ 80A7020
push {r4,lr}
adds r4, r0, 0
movs r1, 0x1
bl sub_8075160
bl InitSpritePosToAnimAttacker
ldr r1, _080A704C @ =gBattleAnimArgs
ldrh r0, [r1, 0x4]
strh r0, [r4, 0x2E]
@@ -262,7 +262,7 @@ sub_80A7020: @ 80A7020
strh r0, [r4, 0x30]
ldrh r0, [r1, 0x8]
strh r0, [r4, 0x38]
ldr r0, _080A7050 @ =sub_8074C44
ldr r0, _080A7050 @ =WaitAnimForDuration
str r0, [r4, 0x1C]
ldr r1, _080A7054 @ =sub_80A7058
adds r0, r4, 0
@@ -272,7 +272,7 @@ sub_80A7020: @ 80A7020
bx r0
.align 2, 0
_080A704C: .4byte gBattleAnimArgs
_080A7050: .4byte sub_8074C44
_080A7050: .4byte WaitAnimForDuration
_080A7054: .4byte sub_80A7058
thumb_func_end sub_80A7020
@@ -438,7 +438,7 @@ _080A7176:
_080A718A:
strh r1, [r0, 0x26]
adds r0, r4, 0
bl sub_80759DC
bl SetBattlerSpriteYOffsetFromRotation
ldr r0, _080A71C8 @ =gTasks
adds r1, r6, r5
lsls r1, 3
@@ -479,7 +479,7 @@ _080A71D0:
sub_80A71D8: @ 80A71D8
push {r4,r5,lr}
adds r4, r0, 0
bl sub_8074FCC
bl SetSpriteCoordsToAnimAttackerCoords
ldr r0, _080A71FC @ =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -544,7 +544,7 @@ _080A724C:
orrs r0, r1
strb r0, [r2]
_080A7260:
ldr r0, _080A7274 @ =sub_8074F6C
ldr r0, _080A7274 @ =RunStoredCallbackWhenAnimEnds
str r0, [r4, 0x1C]
ldr r1, _080A7278 @ =DestroyAnimSprite
adds r0, r4, 0
@@ -553,7 +553,7 @@ _080A7260:
pop {r0}
bx r0
.align 2, 0
_080A7274: .4byte sub_8074F6C
_080A7274: .4byte RunStoredCallbackWhenAnimEnds
_080A7278: .4byte DestroyAnimSprite
thumb_func_end sub_80A71D8
@@ -562,8 +562,8 @@ sub_80A727C: @ 80A727C
push {r4,lr}
adds r4, r0, 0
movs r1, 0
bl sub_8075160
ldr r0, _080A7298 @ =sub_8074F50
bl InitSpritePosToAnimAttacker
ldr r0, _080A7298 @ =RunStoredCallbackWhenAffineAnimEnds
str r0, [r4, 0x1C]
ldr r1, _080A729C @ =sub_80A72A0
adds r0, r4, 0
@@ -572,7 +572,7 @@ sub_80A727C: @ 80A727C
pop {r0}
bx r0
.align 2, 0
_080A7298: .4byte sub_8074F50
_080A7298: .4byte RunStoredCallbackWhenAffineAnimEnds
_080A729C: .4byte sub_80A72A0
thumb_func_end sub_80A727C
@@ -635,7 +635,7 @@ _080A72EC:
_080A730E:
adds r0, r5, 0
movs r1, 0x1
bl sub_8075160
bl InitSpritePosToAnimAttacker
ldr r4, _080A73BC @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
@@ -671,7 +671,7 @@ _080A730E:
subs r1, r2
lsls r1, 16
asrs r1, 16
bl sub_8075B30
bl ArcTan2Neg
lsls r0, 16
movs r1, 0xF0
lsls r1, 24
@@ -692,7 +692,7 @@ _080A7380:
adds r0, r5, 0
movs r1, 0
adds r2, r3, 0
bl sub_8075A1C
bl TrySetSpriteRotScale
ldrh r0, [r6, 0x8]
strh r0, [r5, 0x2E]
mov r0, r8
@@ -1118,7 +1118,7 @@ _080A7690:
strh r0, [r4, 0xA]
movs r0, 0x3F
negs r0, r0
bl sub_8073A44
bl BattleAnimAdjustPanning
adds r1, r0, 0
lsls r1, 24
asrs r1, 24
@@ -1276,7 +1276,7 @@ _080A77B6:
movs r1, 0
mov r2, sp
mov r3, r10
bl sub_8076D9C
bl SetAverageBattlerPositions
b _080A7842
.align 2, 0
_080A7810: .4byte gBattleAnimAttacker
@@ -1506,7 +1506,7 @@ sub_80A79E8: @ 80A79E8
push {r4,lr}
adds r4, r0, 0
movs r1, 0
bl sub_8075160
bl InitSpritePosToAnimAttacker
ldr r0, _080A7A10 @ =gUnknown_83E3D18
ldrh r0, [r0, 0x2]
bl IndexOfSpritePaletteTag
@@ -1592,7 +1592,7 @@ sub_80A7A88: @ 80A7A88
sub sp, 0x4
adds r5, r0, 0
movs r1, 0x1
bl sub_8075160
bl InitSpritePosToAnimAttacker
ldr r4, _080A7B28 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
@@ -1636,7 +1636,7 @@ _080A7ACC:
subs r1, r2
lsls r1, 16
asrs r1, 16
bl sub_8075B30
bl ArcTan2Neg
lsls r0, 16
movs r1, 0xC0
lsls r1, 24
@@ -1648,7 +1648,7 @@ _080A7ACC:
adds r0, r5, 0
movs r1, 0
adds r2, r3, 0
bl sub_8075A1C
bl TrySetSpriteRotScale
ldrh r0, [r4, 0x8]
strh r0, [r5, 0x2E]
strh r6, [r5, 0x32]
@@ -1748,7 +1748,7 @@ sub_80A7BC4: @ 80A7BC4
push {r4,r5,lr}
adds r4, r0, 0
movs r1, 0x1
bl sub_8075160
bl InitSpritePosToAnimAttacker
movs r0, 0x14
strh r0, [r4, 0x2E]
ldr r5, _080A7C10 @ =gBattleAnimTarget
@@ -1789,7 +1789,7 @@ sub_80A7C1C: @ 80A7C1C
push {r4,lr}
adds r4, r0, 0
movs r0, 0x3F
bl sub_8073A44
bl BattleAnimAdjustPanning
adds r1, r0, 0
lsls r1, 24
asrs r1, 24
@@ -1907,7 +1907,7 @@ sub_80A7D04: @ 80A7D04
push {r4,lr}
adds r4, r0, 0
movs r1, 0
bl sub_8075160
bl InitSpritePosToAnimAttacker
ldr r0, _080A7D54 @ =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -1929,7 +1929,7 @@ _080A7D22:
strh r0, [r4, 0x34]
ldrh r0, [r1, 0x6]
strh r0, [r4, 0x36]
ldr r0, _080A7D5C @ =sub_8074A80
ldr r0, _080A7D5C @ =TranslateSpriteInCircleOverDuration
str r0, [r4, 0x1C]
ldr r1, _080A7D60 @ =DestroyAnimSprite
adds r0, r4, 0
@@ -1943,7 +1943,7 @@ _080A7D22:
.align 2, 0
_080A7D54: .4byte gBattleAnimAttacker
_080A7D58: .4byte gBattleAnimArgs
_080A7D5C: .4byte sub_8074A80
_080A7D5C: .4byte TranslateSpriteInCircleOverDuration
_080A7D60: .4byte DestroyAnimSprite
thumb_func_end sub_80A7D04
@@ -2094,7 +2094,7 @@ _080A7E48:
adds r0, r6
strh r0, [r5, 0x36]
adds r0, r5, 0
bl obj_translate_based_on_private_1_2_3_4
bl InitAnimLinearTranslation
ldrh r0, [r7]
strh r0, [r5, 0x38]
ldrh r0, [r5, 0x2E]
@@ -2119,7 +2119,7 @@ _080A7EB8: .4byte sub_80A7EBC
sub_80A7EBC: @ 80A7EBC
push {r4,lr}
adds r4, r0, 0
bl sub_80755E0
bl AnimTranslateLinear
lsls r0, 24
cmp r0, 0
beq _080A7F20
@@ -2233,7 +2233,7 @@ _080A7F90: .4byte sub_80A7F94
sub_80A7F94: @ 80A7F94
push {r4,lr}
adds r4, r0, 0
bl sub_80755E0
bl AnimTranslateLinear
lsls r0, 24
cmp r0, 0
beq _080A7FA8
@@ -2252,7 +2252,7 @@ sub_80A7FB0: @ 80A7FB0
lsls r5, 24
lsrs r5, 24
movs r0, 0x1
bl GetAnimBankSpriteId
bl GetAnimBattlerSpriteId
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
@@ -2273,7 +2273,7 @@ sub_80A7FB0: @ 80A7FB0
lsrs r0, 4
adds r0, 0x10
movs r1, 0
bl sub_8075B48
bl SetGreyscaleOrOriginalPalette
ldr r1, _080A800C @ =gTasks
lsls r0, r5, 2
adds r0, r5
@@ -2312,7 +2312,7 @@ sub_80A8014: @ 80A8014
cmp r1, r0
bne _080A8064
movs r0, 0x1
bl GetAnimBankSpriteId
bl GetAnimBattlerSpriteId
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
@@ -2327,7 +2327,7 @@ sub_80A8014: @ 80A8014
lsrs r0, 4
adds r0, 0x10
movs r1, 0x1
bl sub_8075B48
bl SetGreyscaleOrOriginalPalette
adds r0, r5, 0
bl DestroyAnimVisualTask
_080A8064:
@@ -2350,7 +2350,7 @@ sub_80A8074: @ 80A8074
ldr r0, _080A80C0 @ =gTasks
adds r4, r0
movs r0, 0
bl GetAnimBankSpriteId
bl GetAnimBattlerSpriteId
lsls r0, 24
lsrs r0, 24
movs r5, 0
@@ -2441,7 +2441,7 @@ _080A8128:
movs r3, 0
bl SetSpriteRotScale
ldrb r0, [r4, 0x8]
bl sub_8076440
bl SetBattlerSpriteYOffsetFromYScale
movs r2, 0xC
ldrsh r0, [r4, r2]
cmp r0, 0x20
@@ -2473,7 +2473,7 @@ _080A816E:
movs r3, 0
bl SetSpriteRotScale
ldrb r0, [r4, 0x8]
bl sub_8076440
bl SetBattlerSpriteYOffsetFromYScale
movs r0, 0x2
strh r0, [r4, 0xA]
b _080A81F6
@@ -2504,7 +2504,7 @@ _080A81A4:
movs r3, 0
bl SetSpriteRotScale
ldrb r0, [r4, 0x8]
bl sub_8076440
bl SetBattlerSpriteYOffsetFromYScale
movs r2, 0xC
ldrsh r0, [r4, r2]
cmp r0, 0x20
@@ -2550,7 +2550,7 @@ sub_80A8200: @ 80A8200
lsrs r1, 24
mov r9, r1
movs r0, 0
bl duplicate_obj_of_side_rel2move_in_transparent_mode
bl CloneBattlerSpriteWithBlend
lsls r0, 16
lsrs r0, 16
mov r8, r0
@@ -2720,7 +2720,7 @@ _080A835C: .4byte gTasks
_080A8360: .4byte gBattleAnimArgs
_080A8364:
ldrb r0, [r5]
bl GetAnimBankSpriteId
bl GetAnimBattlerSpriteId
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
@@ -2733,7 +2733,7 @@ _080A8364:
strh r2, [r4, 0x10]
ldr r2, _080A8390 @ =gUnknown_83E3E60
adds r0, r4, 0
bl sub_80762D0
bl PrepareAffineAnimInTaskData
ldr r0, _080A8394 @ =sub_80A8398
str r0, [r4]
_080A838A:
@@ -2774,7 +2774,7 @@ _080A83C0:
b _080A84A8
_080A83CA:
adds r0, r4, 0
bl sub_8076308
bl RunAffineAnimFromTaskData
ldrh r2, [r4, 0x10]
adds r2, 0x3
strh r2, [r4, 0x10]
@@ -2801,7 +2801,7 @@ _080A83CA:
_080A83FC: .4byte gSprites
_080A8400:
adds r0, r4, 0
bl sub_8076308
bl RunAffineAnimFromTaskData
ldr r2, _080A8430 @ =gSprites
movs r0, 0x8
ldrsh r1, [r4, r0]
@@ -2853,7 +2853,7 @@ _080A845C:
b _080A84A8
_080A8464:
adds r0, r4, 0
bl sub_8076308
bl RunAffineAnimFromTaskData
lsls r0, 24
lsrs r5, r0, 24
cmp r5, 0
@@ -2881,7 +2881,7 @@ _080A849C:
ldrb r1, [r4, 0x8]
ldr r2, _080A84B0 @ =gUnknown_83E3E60
adds r0, r4, 0
bl sub_80762D0
bl PrepareAffineAnimInTaskData
strh r5, [r4, 0xA]
_080A84A8:
pop {r4-r6}
@@ -2902,13 +2902,13 @@ sub_80A84B4: @ 80A84B4
ldr r0, _080A84E4 @ =gTasks
adds r4, r0
movs r0, 0
bl GetAnimBankSpriteId
bl GetAnimBattlerSpriteId
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
ldr r2, _080A84E8 @ =gUnknown_83E3E80
adds r0, r4, 0
bl sub_80762D0
bl PrepareAffineAnimInTaskData
ldr r0, _080A84EC @ =sub_80A84F0
str r0, [r4]
pop {r4}
@@ -2930,7 +2930,7 @@ sub_80A84F0: @ 80A84F0
lsls r0, 3
ldr r1, _080A8518 @ =gTasks
adds r0, r1
bl sub_8076308
bl RunAffineAnimFromTaskData
lsls r0, 24
cmp r0, 0
bne _080A8510
@@ -2998,7 +2998,7 @@ _080A856A:
ldr r1, _080A85A4 @ =DestroyAnimSprite
adds r0, r4, 0
bl StoreSpriteCallbackInData6
ldr r0, _080A85A8 @ =sub_8074D00
ldr r0, _080A85A8 @ =TranslateSpriteLinearFixedPoint
str r0, [r4, 0x1C]
pop {r4,r5}
pop {r0}
@@ -3007,7 +3007,7 @@ _080A856A:
_080A859C: .4byte 0x0000ffc0
_080A85A0: .4byte gBattleAnimAttacker
_080A85A4: .4byte DestroyAnimSprite
_080A85A8: .4byte sub_8074D00
_080A85A8: .4byte TranslateSpriteLinearFixedPoint
thumb_func_end sub_80A851C
thumb_func_start sub_80A85AC
@@ -3064,10 +3064,10 @@ _080A85E4:
movs r0, 0x8
strh r0, [r6, 0x22]
_080A8616:
ldr r1, _080A8630 @ =move_anim_8074EE0
ldr r1, _080A8630 @ =DestroySpriteAndMatrix
adds r0, r6, 0
bl StoreSpriteCallbackInData6
ldr r0, _080A8634 @ =sub_8074F50
ldr r0, _080A8634 @ =RunStoredCallbackWhenAffineAnimEnds
str r0, [r6, 0x1C]
pop {r4-r6}
pop {r0}
@@ -3075,8 +3075,8 @@ _080A8616:
.align 2, 0
_080A8628: .4byte gBattleAnimTarget
_080A862C: .4byte gBattleAnimArgs
_080A8630: .4byte move_anim_8074EE0
_080A8634: .4byte sub_8074F50
_080A8630: .4byte DestroySpriteAndMatrix
_080A8634: .4byte RunStoredCallbackWhenAffineAnimEnds
thumb_func_end sub_80A85AC
thumb_func_start sub_80A8638
@@ -3090,7 +3090,7 @@ sub_80A8638: @ 80A8638
ldr r0, _080A866C @ =gTasks
adds r4, r0
movs r0, 0
bl GetAnimBankSpriteId
bl GetAnimBattlerSpriteId
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
@@ -3099,7 +3099,7 @@ sub_80A8638: @ 80A8638
strh r0, [r4, 0xA]
ldr r2, _080A8670 @ =gUnknown_83E3F1C
adds r0, r4, 0
bl sub_80762D0
bl PrepareAffineAnimInTaskData
ldr r0, _080A8674 @ =sub_80A8678
str r0, [r4]
pop {r4}
@@ -3121,7 +3121,7 @@ sub_80A8678: @ 80A8678
lsls r0, 3
ldr r1, _080A86A0 @ =gTasks
adds r0, r1
bl sub_8076308
bl RunAffineAnimFromTaskData
lsls r0, 24
cmp r0, 0
bne _080A8698
@@ -3146,7 +3146,7 @@ sub_80A86A4: @ 80A86A4
ldr r0, _080A8718 @ =gTasks
adds r4, r1, r0
movs r0, 0
bl GetAnimBankSpriteId
bl GetAnimBattlerSpriteId
lsls r0, 24
lsrs r0, 24
movs r2, 0
@@ -3389,7 +3389,7 @@ sub_80A8874: @ 80A8874
adds r5, r1, r0
ldr r4, _080A88C8 @ =gBattleAnimTarget
ldrb r0, [r4]
bl sub_807492C
bl GetBattlerYCoordWithElevation
lsls r0, 24
lsrs r0, 24
adds r0, 0x20
@@ -3402,10 +3402,10 @@ sub_80A8874: @ 80A8874
strh r1, [r5, 0x10]
strh r1, [r5, 0x12]
ldrb r0, [r4]
bl sub_8076B2C
bl GetBattlerSpriteCoordAttr
strh r0, [r5, 0x26]
ldrb r0, [r4]
bl sub_80768B0
bl GetBattlerSpriteBGPriorityRank
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -3609,7 +3609,7 @@ sub_80A8A1C: @ 80A8A1C
movs r5, 0
strh r0, [r4, 0x20]
ldrb r0, [r6]
bl sub_807492C
bl GetBattlerYCoordWithElevation
lsls r0, 24
lsrs r0, 24
adds r0, 0x10
@@ -3622,11 +3622,11 @@ sub_80A8A1C: @ 80A8A1C
strh r5, [r4, 0x36]
ldrb r0, [r6]
movs r1, 0
bl sub_8076B2C
bl GetBattlerSpriteCoordAttr
adds r0, 0x2
strh r0, [r4, 0x38]
movs r0, 0x3F
bl sub_8073A44
bl BattleAnimAdjustPanning
lsls r0, 24
asrs r0, 24
strh r0, [r4, 0x3A]
@@ -3864,7 +3864,7 @@ _080A8BF2:
adds r1, r4, 0
mov r2, sp
adds r3, r7, 0
bl sub_8076D9C
bl SetAverageBattlerPositions
cmp r4, 0
bne _080A8C30
adds r0, r5, 0
@@ -3919,7 +3919,7 @@ _080A8C80: .4byte sub_8075D9C
sub_80A8C84: @ 80A8C84
push {r4,lr}
adds r4, r0, 0
bl sub_80755E0
bl AnimTranslateLinear
lsls r0, 24
cmp r0, 0
beq _080A8C9E
@@ -4128,7 +4128,7 @@ _080A8DFA:
mov r2, sp
mov r3, sp
adds r3, 0x2
bl sub_8076D9C
bl SetAverageBattlerPositions
b _080A8E6C
.align 2, 0
_080A8E40: .4byte gSprites
@@ -4192,7 +4192,7 @@ _080A8E9E:
ldrh r0, [r2]
strh r0, [r5, 0x2E]
adds r0, r5, 0
bl obj_translate_based_on_private_1_2_3_4
bl InitAnimLinearTranslation
ldr r1, _080A8EE4 @ =sub_80A8C84
str r1, [r5, 0x1C]
adds r0, r5, 0
@@ -4252,7 +4252,7 @@ sub_80A8F38: @ 80A8F38
push {r4,lr}
adds r4, r0, 0
movs r1, 0
bl sub_8075160
bl InitSpritePosToAnimAttacker
ldr r0, _080A8F6C @ =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -4565,14 +4565,14 @@ sub_80A917C: @ 80A917C
ldr r0, _080A91AC @ =gTasks
adds r4, r0
movs r0, 0
bl GetAnimBankSpriteId
bl GetAnimBattlerSpriteId
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
strh r1, [r4, 0x8]
ldr r2, _080A91B0 @ =gUnknown_83E4128
adds r0, r4, 0
bl sub_80762D0
bl PrepareAffineAnimInTaskData
ldr r0, _080A91B4 @ =sub_80A91B8
str r0, [r4]
pop {r4}
@@ -4595,7 +4595,7 @@ sub_80A91B8: @ 80A91B8
ldr r1, _080A9208 @ =gTasks
adds r4, r0, r1
adds r0, r4, 0
bl sub_8076308
bl RunAffineAnimFromTaskData
lsls r0, 24
lsrs r3, r0, 24
cmp r3, 0
@@ -4668,7 +4668,7 @@ _080A9250:
_080A9256:
strh r0, [r4, 0x24]
movs r0, 0x1
bl GetAnimBankSpriteId
bl GetAnimBattlerSpriteId
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x26]
@@ -4861,7 +4861,7 @@ sub_80A939C: @ 80A939C
movs r0, 0x2
strh r0, [r4, 0x24]
movs r0, 0
bl GetAnimBankSpriteId
bl GetAnimBattlerSpriteId
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x26]
@@ -5411,7 +5411,7 @@ sub_80A97E8: @ 80A97E8
push {r4-r6,lr}
adds r5, r0, 0
movs r1, 0
bl sub_8075160
bl InitSpritePosToAnimAttacker
ldr r6, _080A9850 @ =gBattleAnimAttacker
ldrb r0, [r6]
bl GetBattlerSide
@@ -5474,7 +5474,7 @@ sub_80A9860: @ 80A9860
bne _080A987A
adds r0, r4, 0
movs r1, 0
bl sub_8075160
bl InitSpritePosToAnimAttacker
_080A987A:
movs r1, 0x30
ldrsh r0, [r4, r1]
@@ -5517,9 +5517,9 @@ sub_80A98B0: @ 80A98B0
movs r6, 0x98
_080A98C4:
movs r5, 0
ldr r1, _080A9918 @ =gUnknown_2022984
ldr r1, _080A9918 @ =gBattle_WIN0H
strh r6, [r1]
ldr r4, _080A991C @ =gUnknown_2022986
ldr r4, _080A991C @ =gBattle_WIN0V
movs r0, 0xA0
strh r0, [r4]
ldrh r1, [r1]
@@ -5553,8 +5553,8 @@ _080A98C4:
pop {r0}
bx r0
.align 2, 0
_080A9918: .4byte gUnknown_2022984
_080A991C: .4byte gUnknown_2022986
_080A9918: .4byte gBattle_WIN0H
_080A991C: .4byte gBattle_WIN0V
_080A9920: .4byte 0x00003f1f
_080A9924: .4byte 0x00003f3f
_080A9928: .4byte gTasks
@@ -5583,7 +5583,7 @@ sub_80A9930: @ 80A9930
lsls r0, r2, 16
cmp r1, r0
blt _080A9970
ldr r0, _080A9968 @ =gUnknown_2022984
ldr r0, _080A9968 @ =gBattle_WIN0H
movs r1, 0
strh r1, [r0]
ldr r0, _080A996C @ =sub_80A9984
@@ -5591,10 +5591,10 @@ sub_80A9930: @ 80A9930
b _080A9978
.align 2, 0
_080A9964: .4byte gTasks
_080A9968: .4byte gUnknown_2022984
_080A9968: .4byte gBattle_WIN0H
_080A996C: .4byte sub_80A9984
_080A9970:
ldr r1, _080A9980 @ =gUnknown_2022984
ldr r1, _080A9980 @ =gBattle_WIN0H
lsls r0, r4, 8
orrs r2, r0
strh r2, [r1]
@@ -5603,7 +5603,7 @@ _080A9978:
pop {r0}
bx r0
.align 2, 0
_080A9980: .4byte gUnknown_2022984
_080A9980: .4byte gBattle_WIN0H
thumb_func_end sub_80A9930
thumb_func_start sub_80A9984
@@ -5649,9 +5649,9 @@ _080A99D4: .4byte 0x00007fff
_080A99D8:
cmp r0, 0x4
ble _080A9A0C
ldr r0, _080A9A14 @ =gUnknown_2022984
ldr r0, _080A9A14 @ =gBattle_WIN0H
strh r4, [r0]
ldr r0, _080A9A18 @ =gUnknown_2022986
ldr r0, _080A9A18 @ =gBattle_WIN0V
strh r4, [r0]
ldr r4, _080A9A1C @ =0x00003f3f
movs r0, 0x48
@@ -5674,8 +5674,8 @@ _080A9A0C:
pop {r0}
bx r0
.align 2, 0
_080A9A14: .4byte gUnknown_2022984
_080A9A18: .4byte gUnknown_2022986
_080A9A14: .4byte gBattle_WIN0H
_080A9A18: .4byte gBattle_WIN0V
_080A9A1C: .4byte 0x00003f3f
thumb_func_end sub_80A9984
@@ -5686,7 +5686,7 @@ sub_80A9A20: @ 80A9A20
lsrs r0, 24
adds r6, r0, 0
movs r0, 0x1
bl GetAnimBankSpriteId
bl GetAnimBattlerSpriteId
lsls r0, 24
lsrs r4, r0, 24
ldr r1, _080A9A70 @ =gTasks
@@ -5702,13 +5702,13 @@ sub_80A9A20: @ 80A9A20
cmp r0, 0x1
bne _080A9A7C
movs r0, 0x1
bl GetAnimBankSpriteId
bl GetAnimBattlerSpriteId
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
ldr r2, _080A9A74 @ =gUnknown_83E4200
adds r0, r5, 0
bl sub_80762D0
bl PrepareAffineAnimInTaskData
ldr r1, _080A9A78 @ =gSprites
lsls r0, r4, 4
adds r0, r4
@@ -5731,7 +5731,7 @@ _080A9A7C:
negs r0, r0
strh r0, [r4, 0x24]
adds r0, r5, 0
bl sub_8076308
bl RunAffineAnimFromTaskData
lsls r0, 24
lsrs r0, 24
cmp r0, 0
@@ -5755,7 +5755,7 @@ sub_80A9AB0: @ 80A9AB0
lsrs r0, 24
adds r6, r0, 0
movs r0, 0
bl GetAnimBankSpriteId
bl GetAnimBattlerSpriteId
lsls r0, 24
lsrs r4, r0, 24
ldr r1, _080A9B00 @ =gTasks
@@ -5771,13 +5771,13 @@ sub_80A9AB0: @ 80A9AB0
cmp r0, 0x1
bne _080A9B0C
movs r0, 0
bl GetAnimBankSpriteId
bl GetAnimBattlerSpriteId
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
ldr r2, _080A9B04 @ =gUnknown_83E4200
adds r0, r5, 0
bl sub_80762D0
bl PrepareAffineAnimInTaskData
ldr r1, _080A9B08 @ =gSprites
lsls r0, r4, 4
adds r0, r4
@@ -5800,7 +5800,7 @@ _080A9B0C:
negs r0, r0
strh r0, [r4, 0x24]
adds r0, r5, 0
bl sub_8076308
bl RunAffineAnimFromTaskData
lsls r0, 24
lsrs r0, 24
cmp r0, 0
@@ -5822,7 +5822,7 @@ sub_80A9B40: @ 80A9B40
push {r4,r5,lr}
adds r4, r0, 0
movs r1, 0x1
bl sub_8075160
bl InitSpritePosToAnimAttacker
movs r0, 0x5F
strh r0, [r4, 0x2E]
ldrh r0, [r4, 0x20]
@@ -5843,7 +5843,7 @@ sub_80A9B40: @ 80A9B40
lsrs r0, 24
strh r0, [r4, 0x36]
adds r0, r4, 0
bl obj_translate_based_on_private_1_2_3_4
bl InitAnimLinearTranslation
ldr r0, _080A9B88 @ =sub_80A9B8C
str r0, [r4, 0x1C]
pop {r4,r5}
@@ -5858,7 +5858,7 @@ _080A9B88: .4byte sub_80A9B8C
sub_80A9B8C: @ 80A9B8C
push {r4,lr}
adds r4, r0, 0
bl sub_80755E0
bl AnimTranslateLinear
lsls r0, 24
cmp r0, 0
bne _080A9BB6
@@ -5967,7 +5967,7 @@ sub_80A9C4C: @ 80A9C4C
strh r1, [r0, 0x2E]
ldrh r1, [r2, 0x2]
strh r1, [r0, 0x30]
ldr r1, _080A9C74 @ =sub_8074C44
ldr r1, _080A9C74 @ =WaitAnimForDuration
str r1, [r0, 0x1C]
ldr r1, _080A9C78 @ =sub_80A9C7C
bl StoreSpriteCallbackInData6
@@ -5975,7 +5975,7 @@ sub_80A9C4C: @ 80A9C4C
bx r0
.align 2, 0
_080A9C70: .4byte gBattleAnimArgs
_080A9C74: .4byte sub_8074C44
_080A9C74: .4byte WaitAnimForDuration
_080A9C78: .4byte sub_80A9C7C
thumb_func_end sub_80A9C4C
@@ -6082,13 +6082,13 @@ _080A9D2A:
mov r0, sp
ldrb r0, [r0, 0x9]
ldr r1, _080A9DAC @ =gFile_graphics_battle_anims_backgrounds_attract_tilemap
bl sub_807543C
bl AnimLoadCompressedBgTilemap
mov r0, sp
ldrb r0, [r0, 0x9]
ldr r1, _080A9DB0 @ =gFile_graphics_battle_anims_backgrounds_attract_sheet
mov r2, sp
ldrh r2, [r2, 0xA]
bl sub_80753B4
bl AnimLoadCompressedBgGfx
ldr r0, _080A9DB4 @ =gFile_graphics_battle_anims_backgrounds_attract_palette
mov r1, sp
ldrb r1, [r1, 0x8]
@@ -6360,7 +6360,7 @@ _080A9F98:
mov r0, sp
ldrb r0, [r0, 0x9]
ldr r1, _080A9FB8 @ =gFile_graphics_battle_anims_backgrounds_scary_face_player_tilemap
bl sub_807543C
bl AnimLoadCompressedBgTilemap
b _080A9FC6
.align 2, 0
_080A9FB4: .4byte gBattleAnimTarget
@@ -6369,14 +6369,14 @@ _080A9FBC:
mov r0, sp
ldrb r0, [r0, 0x9]
ldr r1, _080AA010 @ =gFile_graphics_battle_anims_backgrounds_scary_face_opponent_tilemap
bl sub_807543C
bl AnimLoadCompressedBgTilemap
_080A9FC6:
mov r0, sp
ldrb r0, [r0, 0x9]
ldr r1, _080AA014 @ =gFile_graphics_battle_anims_backgrounds_scary_face_sheet
mov r2, sp
ldrh r2, [r2, 0xA]
bl sub_80753B4
bl AnimLoadCompressedBgGfx
ldr r0, _080AA018 @ =gFile_graphics_battle_anims_backgrounds_scary_face_palette
mov r1, sp
ldrb r1, [r1, 0x8]
@@ -6907,7 +6907,7 @@ sub_80AA3F0: @ 80AA3F0
push {r4,lr}
adds r4, r0, 0
movs r1, 0x1
bl sub_8075160
bl InitSpritePosToAnimAttacker
ldr r0, _080AA404 @ =sub_80AA3D4
str r0, [r4, 0x1C]
pop {r4}
@@ -7428,7 +7428,7 @@ sub_80AA7C8: @ 80AA7C8
lsrs r5, 24
ldr r0, _080AA7FC @ =gBattleAnimArgs
ldrb r0, [r0]
bl GetAnimBankSpriteId
bl GetAnimBattlerSpriteId
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
@@ -7439,7 +7439,7 @@ sub_80AA7C8: @ 80AA7C8
adds r4, r0
ldr r2, _080AA804 @ =gUnknown_83E4410
adds r0, r4, 0
bl sub_80762D0
bl PrepareAffineAnimInTaskData
ldr r0, _080AA808 @ =sub_80AA80C
str r0, [r4]
pop {r4,r5}
@@ -7462,7 +7462,7 @@ sub_80AA80C: @ 80AA80C
lsls r0, 3
ldr r1, _080AA834 @ =gTasks
adds r0, r1
bl sub_8076308
bl RunAffineAnimFromTaskData
lsls r0, 24
cmp r0, 0
bne _080AA82C
@@ -7640,7 +7640,7 @@ _080AA95A:
lsrs r0, 4
adds r0, 0x10
movs r1, 0
bl sub_8075B48
bl SetGreyscaleOrOriginalPalette
_080AA978:
movs r0, 0x2E
ldrsh r1, [r4, r0]
@@ -7857,7 +7857,7 @@ sub_80AAAE4: @ 80AAAE4
adds r3, r5, 0
adds r3, 0x22
movs r1, 0
bl sub_8076D9C
bl SetAverageBattlerPositions
ldrh r0, [r5, 0x22]
adds r0, 0x28
strh r0, [r5, 0x22]
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-927
View File
@@ -1,927 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start sub_80DCE10
sub_80DCE10: @ 80DCE10
push {r4-r6,lr}
lsls r0, 24
lsrs r0, 24
ldr r1, _080DCE6C @ =gTasks
lsls r6, r0, 2
adds r6, r0
lsls r6, 3
adds r6, r1
ldr r1, _080DCE70 @ =gBattleAnimArgs
ldrh r0, [r1]
strh r0, [r6, 0x8]
ldrh r0, [r1, 0x2]
strh r0, [r6, 0xA]
movs r0, 0x40
negs r0, r0
bl sub_8073A44
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
movs r0, 0x3F
bl sub_8073A44
adds r5, r0, 0
lsls r4, 24
asrs r4, 24
lsls r5, 24
asrs r5, 24
adds r0, r4, 0
adds r1, r5, 0
movs r2, 0x2
bl CalculatePanIncrement
strh r4, [r6, 0xC]
strh r5, [r6, 0xE]
lsls r0, 24
asrs r0, 24
strh r0, [r6, 0x10]
movs r0, 0xA
strh r0, [r6, 0x1C]
ldr r0, _080DCE74 @ =sub_80DCE78
str r0, [r6]
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_080DCE6C: .4byte gTasks
_080DCE70: .4byte gBattleAnimArgs
_080DCE74: .4byte sub_80DCE78
thumb_func_end sub_80DCE10
thumb_func_start sub_80DCE78
sub_80DCE78: @ 80DCE78
push {r4-r6,lr}
lsls r0, 24
lsrs r0, 24
ldr r2, _080DCEA8 @ =gTasks
lsls r1, r0, 2
adds r1, r0
lsls r1, 3
adds r4, r1, r2
ldrh r5, [r4, 0xC]
ldrb r6, [r4, 0x10]
ldrh r0, [r4, 0x1E]
adds r0, 0x1
movs r1, 0
strh r0, [r4, 0x1E]
lsls r0, 16
asrs r0, 16
cmp r0, 0x6F
bne _080DCEB0
movs r0, 0x5
strh r0, [r4, 0x1C]
strh r1, [r4, 0x1E]
ldr r0, _080DCEAC @ =sub_80DCEE4
str r0, [r4]
b _080DCEDE
.align 2, 0
_080DCEA8: .4byte gTasks
_080DCEAC: .4byte sub_80DCEE4
_080DCEB0:
ldrh r0, [r4, 0x1C]
adds r0, 0x1
strh r0, [r4, 0x1C]
lsls r0, 16
asrs r0, 16
cmp r0, 0xB
bne _080DCECA
strh r1, [r4, 0x1C]
ldrh r0, [r4, 0x8]
lsls r1, r5, 24
asrs r1, 24
bl PlaySE12WithPanning
_080DCECA:
lsls r1, r6, 24
asrs r1, 24
lsls r0, r5, 16
asrs r0, 16
adds r0, r1
lsls r0, 16
asrs r0, 16
bl sub_8073B60
strh r0, [r4, 0xC]
_080DCEDE:
pop {r4-r6}
pop {r0}
bx r0
thumb_func_end sub_80DCE78
thumb_func_start sub_80DCEE4
sub_80DCEE4: @ 80DCEE4
push {r4,r5,lr}
lsls r0, 24
lsrs r5, r0, 24
ldr r1, _080DCF34 @ =gTasks
lsls r0, r5, 2
adds r0, r5
lsls r0, 3
adds r4, r0, r1
ldrh r0, [r4, 0x1C]
adds r0, 0x1
strh r0, [r4, 0x1C]
lsls r0, 16
asrs r0, 16
cmp r0, 0x6
bne _080DCF2C
movs r0, 0
strh r0, [r4, 0x1C]
movs r0, 0x3F
bl sub_8073A44
adds r1, r0, 0
ldrh r0, [r4, 0xA]
lsls r1, 24
asrs r1, 24
bl PlaySE12WithPanning
ldrh r0, [r4, 0x1E]
adds r0, 0x1
strh r0, [r4, 0x1E]
lsls r0, 16
asrs r0, 16
cmp r0, 0x2
bne _080DCF2C
adds r0, r5, 0
bl DestroyAnimSoundTask
_080DCF2C:
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080DCF34: .4byte gTasks
thumb_func_end sub_80DCEE4
thumb_func_start mas_80DCF38
mas_80DCF38: @ 80DCF38
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x4
mov r8, r0
lsls r0, 24
lsrs r0, 24
mov r8, r0
ldr r0, _080DCFDC @ =gBattleAnimArgs
ldrh r1, [r0]
str r1, [sp]
ldrb r5, [r0, 0x4]
ldrb r6, [r0, 0x6]
ldrb r3, [r0, 0x8]
mov r10, r3
ldrb r7, [r0, 0xA]
ldrb r1, [r0, 0xC]
mov r9, r1
ldrb r0, [r0, 0x2]
lsls r0, 24
asrs r0, 24
bl sub_8073A44
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
lsls r5, 24
asrs r5, 24
adds r0, r5, 0
bl sub_8073A44
adds r5, r0, 0
lsls r4, 24
asrs r4, 24
lsls r5, 24
asrs r5, 24
lsls r6, 24
asrs r6, 24
adds r0, r4, 0
adds r1, r5, 0
adds r2, r6, 0
bl CalculatePanIncrement
ldr r2, _080DCFE0 @ =gTasks
mov r3, r8
lsls r1, r3, 2
add r1, r8
lsls r1, 3
adds r1, r2
movs r2, 0
mov r6, sp
ldrh r6, [r6]
strh r6, [r1, 0x8]
strh r4, [r1, 0xA]
strh r5, [r1, 0xC]
lsls r0, 24
asrs r0, 24
strh r0, [r1, 0xE]
mov r0, r10
strh r0, [r1, 0x10]
strh r7, [r1, 0x12]
mov r3, r9
strh r3, [r1, 0x14]
strh r2, [r1, 0x1C]
strh r4, [r1, 0x1E]
strh r3, [r1, 0x20]
ldr r2, _080DCFE4 @ =sub_80DCFE8
str r2, [r1]
mov r0, r8
bl _call_via_r2
add sp, 0x4
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_080DCFDC: .4byte gBattleAnimArgs
_080DCFE0: .4byte gTasks
_080DCFE4: .4byte sub_80DCFE8
thumb_func_end mas_80DCF38
thumb_func_start sub_80DCFE8
sub_80DCFE8: @ 80DCFE8
push {r4,r5,lr}
lsls r0, 24
lsrs r5, r0, 24
ldr r1, _080DD02C @ =gTasks
lsls r0, r5, 2
adds r0, r5
lsls r0, 3
adds r4, r0, r1
ldrh r0, [r4, 0x20]
adds r1, r0, 0x1
strh r1, [r4, 0x20]
lsls r0, 16
asrs r0, 16
movs r2, 0x14
ldrsh r1, [r4, r2]
cmp r0, r1
bne _080DD030
movs r0, 0
strh r0, [r4, 0x20]
ldrh r0, [r4, 0x8]
movs r1, 0x1E
ldrsb r1, [r4, r1]
bl PlaySE12WithPanning
ldrh r0, [r4, 0x10]
subs r0, 0x1
strh r0, [r4, 0x10]
lsls r0, 16
cmp r0, 0
bne _080DD030
adds r0, r5, 0
bl DestroyAnimSoundTask
b _080DD062
.align 2, 0
_080DD02C: .4byte gTasks
_080DD030:
ldr r1, _080DD068 @ =gTasks
lsls r0, r5, 2
adds r0, r5
lsls r0, 3
adds r4, r0, r1
ldrh r0, [r4, 0x1C]
adds r1, r0, 0x1
strh r1, [r4, 0x1C]
lsls r0, 16
asrs r0, 16
movs r2, 0x12
ldrsh r1, [r4, r2]
cmp r0, r1
bne _080DD062
movs r0, 0
strh r0, [r4, 0x1C]
ldrh r0, [r4, 0xE]
ldrh r1, [r4, 0x1E]
adds r0, r1
strh r0, [r4, 0x1E]
movs r2, 0x1E
ldrsh r0, [r4, r2]
bl sub_8073B60
strh r0, [r4, 0x1E]
_080DD062:
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080DD068: .4byte gTasks
thumb_func_end sub_80DCFE8
thumb_func_start sub_80DD06C
sub_80DD06C: @ 80DD06C
push {r4-r6,lr}
lsls r0, 24
lsrs r5, r0, 24
movs r0, 0x40
negs r0, r0
bl sub_8073A44
lsls r0, 24
lsrs r6, r0, 24
ldr r0, _080DD090 @ =gBattleAnimArgs
movs r1, 0
ldrsh r0, [r0, r1]
cmp r0, 0
bne _080DD098
ldr r0, _080DD094 @ =gBattleAnimAttacker
ldrb r4, [r0]
b _080DD0BE
.align 2, 0
_080DD090: .4byte gBattleAnimArgs
_080DD094: .4byte gBattleAnimAttacker
_080DD098:
cmp r0, 0x1
bne _080DD0A8
ldr r0, _080DD0A4 @ =gBattleAnimTarget
ldrb r4, [r0]
b _080DD0BE
.align 2, 0
_080DD0A4: .4byte gBattleAnimTarget
_080DD0A8:
cmp r0, 0x2
bne _080DD0B4
ldr r0, _080DD0B0 @ =gBattleAnimAttacker
b _080DD0B6
.align 2, 0
_080DD0B0: .4byte gBattleAnimAttacker
_080DD0B4:
ldr r0, _080DD0E0 @ =gBattleAnimTarget
_080DD0B6:
ldrb r1, [r0]
movs r0, 0x2
adds r4, r0, 0
eors r4, r1
_080DD0BE:
ldr r0, _080DD0E4 @ =gBattleAnimArgs
movs r1, 0
ldrsh r0, [r0, r1]
cmp r0, 0x1
beq _080DD0CC
cmp r0, 0x3
bne _080DD0E8
_080DD0CC:
adds r0, r4, 0
bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
bne _080DD0E8
adds r0, r5, 0
bl DestroyAnimVisualTask
b _080DD13A
.align 2, 0
_080DD0E0: .4byte gBattleAnimTarget
_080DD0E4: .4byte gBattleAnimArgs
_080DD0E8:
adds r0, r4, 0
bl GetBattlerSide
lsls r0, 24
cmp r0, 0
beq _080DD10C
ldr r1, _080DD104 @ =gBattlerPartyIndexes
lsls r0, r4, 1
adds r0, r1
ldrh r1, [r0]
movs r0, 0x64
muls r0, r1
ldr r1, _080DD108 @ =gEnemyParty
b _080DD11A
.align 2, 0
_080DD104: .4byte gBattlerPartyIndexes
_080DD108: .4byte gEnemyParty
_080DD10C:
ldr r1, _080DD140 @ =gBattlerPartyIndexes
lsls r0, r4, 1
adds r0, r1
ldrh r1, [r0]
movs r0, 0x64
muls r0, r1
ldr r1, _080DD144 @ =gPlayerParty
_080DD11A:
adds r0, r1
movs r1, 0xB
bl GetMonData
lsls r0, 16
lsrs r0, 16
cmp r0, 0
beq _080DD134
lsls r1, r6, 24
asrs r1, 24
movs r2, 0x3
bl PlayCry3
_080DD134:
adds r0, r5, 0
bl DestroyAnimVisualTask
_080DD13A:
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_080DD140: .4byte gBattlerPartyIndexes
_080DD144: .4byte gPlayerParty
thumb_func_end sub_80DD06C
thumb_func_start sub_80DD148
sub_80DD148: @ 80DD148
push {r4-r6,lr}
lsls r0, 24
lsrs r6, r0, 24
movs r0, 0x40
negs r0, r0
bl sub_8073A44
lsls r0, 24
lsrs r5, r0, 24
ldr r0, _080DD16C @ =gBattleAnimArgs
movs r1, 0
ldrsh r0, [r0, r1]
cmp r0, 0
bne _080DD174
ldr r0, _080DD170 @ =gBattleAnimAttacker
ldrb r4, [r0]
b _080DD19A
.align 2, 0
_080DD16C: .4byte gBattleAnimArgs
_080DD170: .4byte gBattleAnimAttacker
_080DD174:
cmp r0, 0x1
bne _080DD184
ldr r0, _080DD180 @ =gBattleAnimTarget
ldrb r4, [r0]
b _080DD19A
.align 2, 0
_080DD180: .4byte gBattleAnimTarget
_080DD184:
cmp r0, 0x2
bne _080DD190
ldr r0, _080DD18C @ =gBattleAnimAttacker
b _080DD192
.align 2, 0
_080DD18C: .4byte gBattleAnimAttacker
_080DD190:
ldr r0, _080DD1BC @ =gBattleAnimTarget
_080DD192:
ldrb r1, [r0]
movs r0, 0x2
adds r4, r0, 0
eors r4, r1
_080DD19A:
ldr r0, _080DD1C0 @ =gBattleAnimArgs
movs r2, 0
ldrsh r0, [r0, r2]
cmp r0, 0x1
beq _080DD1A8
cmp r0, 0x3
bne _080DD1C4
_080DD1A8:
adds r0, r4, 0
bl IsBattlerSpriteVisible
lsls r0, 24
cmp r0, 0
bne _080DD1C4
adds r0, r6, 0
bl DestroyAnimVisualTask
b _080DD26A
.align 2, 0
_080DD1BC: .4byte gBattleAnimTarget
_080DD1C0: .4byte gBattleAnimArgs
_080DD1C4:
adds r0, r4, 0
bl GetBattlerSide
lsls r0, 24
cmp r0, 0
beq _080DD1E8
ldr r1, _080DD1E0 @ =gBattlerPartyIndexes
lsls r0, r4, 1
adds r0, r1
ldrh r1, [r0]
movs r0, 0x64
muls r0, r1
ldr r1, _080DD1E4 @ =gEnemyParty
b _080DD1F6
.align 2, 0
_080DD1E0: .4byte gBattlerPartyIndexes
_080DD1E4: .4byte gEnemyParty
_080DD1E8:
ldr r1, _080DD234 @ =gBattlerPartyIndexes
lsls r0, r4, 1
adds r0, r1
ldrh r1, [r0]
movs r0, 0x64
muls r0, r1
ldr r1, _080DD238 @ =gPlayerParty
_080DD1F6:
adds r0, r1
movs r1, 0xB
bl GetMonData
lsls r0, 16
lsrs r3, r0, 16
ldr r1, _080DD23C @ =gTasks
lsls r2, r6, 2
adds r0, r2, r6
lsls r0, 3
adds r0, r1
ldr r4, _080DD240 @ =gBattleAnimArgs
ldrh r1, [r4, 0x2]
strh r1, [r0, 0x8]
strh r3, [r0, 0xA]
lsls r1, r5, 24
asrs r1, 24
strh r1, [r0, 0xC]
adds r5, r2, 0
cmp r3, 0
beq _080DD264
movs r2, 0x2
ldrsh r0, [r4, r2]
cmp r0, 0xFF
bne _080DD244
adds r0, r3, 0
movs r2, 0x9
bl PlayCry3
b _080DD24C
.align 2, 0
_080DD234: .4byte gBattlerPartyIndexes
_080DD238: .4byte gPlayerParty
_080DD23C: .4byte gTasks
_080DD240: .4byte gBattleAnimArgs
_080DD244:
adds r0, r3, 0
movs r2, 0x7
bl PlayCry3
_080DD24C:
ldr r0, _080DD25C @ =gTasks
adds r1, r5, r6
lsls r1, 3
adds r1, r0
ldr r0, _080DD260 @ =sub_80DD270
str r0, [r1]
b _080DD26A
.align 2, 0
_080DD25C: .4byte gTasks
_080DD260: .4byte sub_80DD270
_080DD264:
adds r0, r6, 0
bl DestroyAnimVisualTask
_080DD26A:
pop {r4-r6}
pop {r0}
bx r0
thumb_func_end sub_80DD148
thumb_func_start sub_80DD270
sub_80DD270: @ 80DD270
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
lsls r0, 24
lsrs r4, r0, 24
mov r9, r4
ldr r1, _080DD2A0 @ =gTasks
lsls r0, r4, 2
adds r0, r4
lsls r0, 3
adds r1, r0, r1
ldrh r6, [r1, 0xA]
mov r8, r6
ldrb r5, [r1, 0xC]
adds r7, r5, 0
ldrh r2, [r1, 0x1A]
movs r3, 0x1A
ldrsh r0, [r1, r3]
cmp r0, 0x1
bgt _080DD2A4
adds r0, r2, 0x1
strh r0, [r1, 0x1A]
b _080DD2E6
.align 2, 0
_080DD2A0: .4byte gTasks
_080DD2A4:
movs r2, 0x8
ldrsh r0, [r1, r2]
cmp r0, 0xFF
bne _080DD2CA
bl IsCryPlaying
lsls r0, 24
cmp r0, 0
bne _080DD2E6
lsls r1, r5, 24
asrs r1, 24
adds r0, r6, 0
movs r2, 0xA
bl PlayCry3
adds r0, r4, 0
bl DestroyAnimVisualTask
b _080DD2E6
_080DD2CA:
bl IsCryPlaying
lsls r0, 24
cmp r0, 0
bne _080DD2E6
lsls r1, r7, 24
asrs r1, 24
mov r0, r8
movs r2, 0x8
bl PlayCry3
mov r0, r9
bl DestroyAnimVisualTask
_080DD2E6:
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_80DD270
thumb_func_start sub_80DD2F4
sub_80DD2F4: @ 80DD2F4
push {r4,lr}
lsls r0, 24
lsrs r0, 24
adds r4, r0, 0
ldr r1, _080DD318 @ =gTasks
lsls r0, r4, 2
adds r0, r4
lsls r0, 3
adds r1, r0, r1
ldrh r2, [r1, 0x1A]
movs r3, 0x1A
ldrsh r0, [r1, r3]
cmp r0, 0x1
bgt _080DD31C
adds r0, r2, 0x1
strh r0, [r1, 0x1A]
b _080DD32C
.align 2, 0
_080DD318: .4byte gTasks
_080DD31C:
bl IsCryPlaying
lsls r0, 24
cmp r0, 0
bne _080DD32C
adds r0, r4, 0
bl DestroyAnimVisualTask
_080DD32C:
pop {r4}
pop {r0}
bx r0
thumb_func_end sub_80DD2F4
thumb_func_start sub_80DD334
sub_80DD334: @ 80DD334
push {r4,r5,lr}
lsls r0, 24
lsrs r5, r0, 24
movs r0, 0x40
negs r0, r0
bl sub_8073A44
ldr r2, _080DD374 @ =gUnknown_2037F1C
ldr r1, _080DD378 @ =gBattleAnimAttacker
ldrb r1, [r1]
lsls r1, 1
adds r1, r2
ldrh r3, [r1]
ldr r2, _080DD37C @ =gTasks
lsls r1, r5, 2
adds r1, r5
lsls r1, 3
adds r4, r1, r2
strh r3, [r4, 0xA]
lsls r0, 24
asrs r1, r0, 24
strh r1, [r4, 0xC]
cmp r3, 0
beq _080DD384
adds r0, r3, 0
movs r2, 0x4
bl PlayCry3
ldr r0, _080DD380 @ =sub_80DD390
str r0, [r4]
b _080DD38A
.align 2, 0
_080DD374: .4byte gUnknown_2037F1C
_080DD378: .4byte gBattleAnimAttacker
_080DD37C: .4byte gTasks
_080DD380: .4byte sub_80DD390
_080DD384:
adds r0, r5, 0
bl DestroyAnimVisualTask
_080DD38A:
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_80DD334
thumb_func_start sub_80DD390
sub_80DD390: @ 80DD390
push {r4,r5,lr}
lsls r0, 24
lsrs r0, 24
adds r5, r0, 0
ldr r1, _080DD3B4 @ =gTasks
lsls r0, r5, 2
adds r0, r5
lsls r0, 3
adds r4, r0, r1
ldrh r1, [r4, 0x1A]
movs r2, 0x1A
ldrsh r0, [r4, r2]
cmp r0, 0x1
bgt _080DD3B8
adds r0, r1, 0x1
strh r0, [r4, 0x1A]
b _080DD3D4
.align 2, 0
_080DD3B4: .4byte gTasks
_080DD3B8:
bl IsCryPlaying
lsls r0, 24
cmp r0, 0
bne _080DD3D4
ldrh r0, [r4, 0xA]
movs r1, 0xC
ldrsb r1, [r4, r1]
movs r2, 0x6
bl PlayCry3
adds r0, r5, 0
bl DestroyAnimVisualTask
_080DD3D4:
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_80DD390
thumb_func_start sub_80DD3DC
sub_80DD3DC: @ 80DD3DC
push {r4,r5,lr}
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
ldr r0, _080DD40C @ =gBattleAnimArgs
ldrh r5, [r0]
ldrb r0, [r0, 0x2]
lsls r0, 24
asrs r0, 24
bl sub_8073A44
adds r1, r0, 0
lsls r1, 24
asrs r1, 24
adds r0, r5, 0
bl PlaySE1WithPanning
adds r0, r4, 0
bl DestroyAnimVisualTask
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080DD40C: .4byte gBattleAnimArgs
thumb_func_end sub_80DD3DC
thumb_func_start sub_80DD410
sub_80DD410: @ 80DD410
push {r4,r5,lr}
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
ldr r0, _080DD440 @ =gBattleAnimArgs
ldrh r5, [r0]
ldrb r0, [r0, 0x2]
lsls r0, 24
asrs r0, 24
bl sub_8073A44
adds r1, r0, 0
lsls r1, 24
asrs r1, 24
adds r0, r5, 0
bl PlaySE2WithPanning
adds r0, r4, 0
bl DestroyAnimVisualTask
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080DD440: .4byte gBattleAnimArgs
thumb_func_end sub_80DD410
thumb_func_start sub_80DD444
sub_80DD444: @ 80DD444
push {r4-r6,lr}
mov r6, r9
mov r5, r8
push {r5,r6}
mov r8, r0
lsls r0, 24
lsrs r0, 24
mov r8, r0
ldr r0, _080DD4C8 @ =gBattleAnimArgs
ldrb r5, [r0, 0x2]
ldrb r6, [r0, 0x4]
ldrh r1, [r0, 0x6]
mov r9, r1
ldrb r0, [r0]
lsls r0, 24
asrs r0, 24
bl sub_8073A44
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
lsls r5, 24
asrs r5, 24
adds r0, r5, 0
bl sub_8073A44
adds r5, r0, 0
lsls r4, 24
asrs r4, 24
lsls r5, 24
asrs r5, 24
lsls r6, 24
asrs r6, 24
adds r0, r4, 0
adds r1, r5, 0
adds r2, r6, 0
bl CalculatePanIncrement
ldr r2, _080DD4CC @ =gTasks
mov r3, r8
lsls r1, r3, 2
add r1, r8
lsls r1, 3
adds r1, r2
movs r2, 0
strh r4, [r1, 0xA]
strh r5, [r1, 0xC]
lsls r0, 24
asrs r0, 24
strh r0, [r1, 0xE]
mov r0, r9
strh r0, [r1, 0x12]
strh r2, [r1, 0x1C]
strh r4, [r1, 0x1E]
ldr r2, _080DD4D0 @ =sub_80DD4D4
str r2, [r1]
mov r0, r8
bl _call_via_r2
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_080DD4C8: .4byte gBattleAnimArgs
_080DD4CC: .4byte gTasks
_080DD4D0: .4byte sub_80DD4D4
thumb_func_end sub_80DD444
thumb_func_start sub_80DD4D4
sub_80DD4D4: @ 80DD4D4
push {r4,r5,lr}
lsls r0, 24
lsrs r0, 24
adds r5, r0, 0
ldr r1, _080DD52C @ =gTasks
lsls r0, r5, 2
adds r0, r5
lsls r0, 3
adds r4, r0, r1
ldrh r2, [r4, 0xE]
ldrh r0, [r4, 0x1C]
adds r1, r0, 0x1
strh r1, [r4, 0x1C]
lsls r0, 16
asrs r0, 16
movs r3, 0x12
ldrsh r1, [r4, r3]
cmp r0, r1
bne _080DD50E
movs r0, 0
strh r0, [r4, 0x1C]
ldrh r1, [r4, 0x1E]
adds r0, r2, r1
strh r0, [r4, 0x1E]
movs r2, 0x1E
ldrsh r0, [r4, r2]
bl sub_8073B60
strh r0, [r4, 0x1E]
_080DD50E:
ldr r1, _080DD530 @ =gUnknown_2037F24
ldrh r0, [r4, 0x1E]
strb r0, [r1]
movs r3, 0x1E
ldrsh r1, [r4, r3]
movs r2, 0xC
ldrsh r0, [r4, r2]
cmp r1, r0
bne _080DD526
adds r0, r5, 0
bl DestroyAnimVisualTask
_080DD526:
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080DD52C: .4byte gTasks
_080DD530: .4byte gUnknown_2037F24
thumb_func_end sub_80DD4D4
.align 2, 0 @ Don't pad with nop.
+22 -22
View File
@@ -18,10 +18,10 @@ sub_80EEC0C: @ 80EEC0C
str r0, [sp, 0x10]
ldr r0, _080EEDB4 @ =gBattleAnimAttacker
ldrb r4, [r0]
ldr r0, _080EEDB8 @ =gUnknown_2022984
ldr r0, _080EEDB8 @ =gBattle_WIN0H
movs r1, 0
strh r1, [r0]
ldr r0, _080EEDBC @ =gUnknown_2022986
ldr r0, _080EEDBC @ =gBattle_WIN0V
strh r1, [r0]
ldr r1, _080EEDC0 @ =0x00003f3f
movs r0, 0x48
@@ -155,13 +155,13 @@ sub_80EEC0C: @ 80EEC0C
mov r0, sp
ldrb r0, [r0, 0x9]
ldr r1, _080EEDD8 @ =gFile_graphics_battle_anims_masks_unknown_D2EC24_tilemap
bl sub_807543C
bl AnimLoadCompressedBgTilemap
mov r0, sp
ldrb r0, [r0, 0x9]
ldr r1, _080EEDDC @ =gFile_graphics_battle_anims_masks_unknown_D2EC24_sheet
mov r2, sp
ldrh r2, [r2, 0xA]
bl sub_80753B4
bl AnimLoadCompressedBgGfx
ldr r0, _080EEDE0 @ =gFile_graphics_battle_anims_masks_cure_bubbles_palette
mov r1, sp
ldrb r1, [r1, 0x8]
@@ -204,8 +204,8 @@ sub_80EEC0C: @ 80EEC0C
bx r0
.align 2, 0
_080EEDB4: .4byte gBattleAnimAttacker
_080EEDB8: .4byte gUnknown_2022984
_080EEDBC: .4byte gUnknown_2022986
_080EEDB8: .4byte gBattle_WIN0H
_080EEDBC: .4byte gBattle_WIN0V
_080EEDC0: .4byte 0x00003f3f
_080EEDC4: .4byte 0x00003f3d
_080EEDC8: .4byte 0x00003f42
@@ -336,9 +336,9 @@ _080EEE9C:
bne _080EEFA8
movs r0, 0
bl sub_8073128
ldr r0, _080EEFB4 @ =gUnknown_2022984
ldr r0, _080EEFB4 @ =gBattle_WIN0H
strh r4, [r0]
ldr r0, _080EEFB8 @ =gUnknown_2022986
ldr r0, _080EEFB8 @ =gBattle_WIN0V
strh r4, [r0]
ldr r4, _080EEFBC @ =0x00003f3f
movs r0, 0x48
@@ -439,8 +439,8 @@ _080EEFA8:
pop {r0}
bx r0
.align 2, 0
_080EEFB4: .4byte gUnknown_2022984
_080EEFB8: .4byte gUnknown_2022986
_080EEFB4: .4byte gBattle_WIN0H
_080EEFB8: .4byte gBattle_WIN0V
_080EEFBC: .4byte 0x00003f3f
_080EEFC0: .4byte gSprites
_080EEFC4: .4byte gHealthboxSpriteIds
@@ -855,7 +855,7 @@ _080EF2E6:
movs r3, 0
bl SetSpriteRotScale
adds r0, r5, 0
bl sub_8076440
bl SetBattlerSpriteYOffsetFromYScale
movs r0, 0x1C
ldrsh r1, [r4, r0]
ldr r0, _080EF314 @ =0x000002cf
@@ -1585,7 +1585,7 @@ sub_80EF8C0: @ 80EF8C0
ldr r0, _080EF8E8 @ =0x0000ffd8
strh r0, [r4, 0x38]
adds r0, r4, 0
bl sub_8075068
bl InitAnimArcTranslation
ldr r0, _080EF8EC @ =sub_80EF8F0
str r0, [r4, 0x1C]
pop {r4}
@@ -1601,7 +1601,7 @@ sub_80EF8F0: @ 80EF8F0
push {r4,r5,lr}
sub sp, 0x4
adds r4, r0, 0
bl AnimateBallThrow
bl TranslateAnimHorizontalArc
lsls r0, 24
cmp r0, 0
beq _080EF99E
@@ -2804,7 +2804,7 @@ _080F01F2:
ldrsb r0, [r1, r0]
strh r0, [r5, 0x38]
adds r0, r5, 0
bl sub_8075068
bl InitAnimArcTranslation
add r4, r10
ldr r0, _080F0270 @ =sub_80F0278
str r0, [r4]
@@ -2849,7 +2849,7 @@ sub_80F0278: @ 80F0278
orrs r0, r1
strb r0, [r3]
adds r0, r4, 0
bl AnimateBallThrow
bl TranslateAnimHorizontalArc
lsls r0, 24
cmp r0, 0
beq _080F02A8
@@ -3204,9 +3204,9 @@ sub_80F052C: @ 80F052C
movs r0, 0x20
strh r0, [r4, 0x38]
adds r0, r4, 0
bl sub_8075068
bl InitAnimArcTranslation
adds r0, r4, 0
bl sub_80750C8
bl TranslateAnimVerticalArc
ldr r0, _080F0570 @ =sub_80F0574
str r0, [r4, 0x1C]
pop {r4}
@@ -3220,7 +3220,7 @@ _080F0570: .4byte sub_80F0574
sub_80F0574: @ 80F0574
push {r4,lr}
adds r4, r0, 0
bl sub_80750C8
bl TranslateAnimVerticalArc
lsls r0, 24
cmp r0, 0
bne _080F0590
@@ -5317,7 +5317,7 @@ _080F15F0:
_080F15F6:
ldr r0, _080F1610 @ =gBattleAnimAttacker
ldrb r0, [r0]
bl sub_80768B0
bl GetBattlerSpriteBGPriorityRank
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -5982,7 +5982,7 @@ sub_80F1B3C: @ 80F1B3C
push {r4,r5,lr}
adds r4, r0, 0
movs r1, 0
bl sub_8075160
bl InitSpritePosToAnimAttacker
movs r0, 0x1E
strh r0, [r4, 0x2E]
movs r0, 0x1
@@ -6011,7 +6011,7 @@ sub_80F1B3C: @ 80F1B3C
ldr r0, _080F1BB4 @ =0x0000ffe0
strh r0, [r4, 0x38]
adds r0, r4, 0
bl sub_8075068
bl InitAnimArcTranslation
ldr r2, _080F1BB8 @ =gSprites
ldr r1, _080F1BBC @ =gBattlerSpriteIds
ldr r0, _080F1BC0 @ =gBattleAnimAttacker
@@ -6074,7 +6074,7 @@ _080F1C00: .4byte sub_80F1C04
sub_80F1C04: @ 80F1C04
push {r4,lr}
adds r4, r0, 0
bl AnimateBallThrow
bl TranslateAnimHorizontalArc
lsls r0, 24
cmp r0, 0
beq _080F1C26
File diff suppressed because it is too large Load Diff
-829
View File
@@ -1,829 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start sub_80B3FAC
sub_80B3FAC: @ 80B3FAC
push {r4-r6,lr}
adds r6, r0, 0
bl IsContest
lsls r0, 24
cmp r0, 0
beq _080B3FD8
adds r0, r6, 0
movs r1, 0x2
bl StartSpriteAffineAnim
ldr r0, _080B3FD4 @ =gBattleAnimArgs
ldrh r1, [r0, 0x4]
negs r1, r1
strh r1, [r0, 0x4]
ldrh r1, [r0]
negs r1, r1
strh r1, [r0]
b _080B4008
.align 2, 0
_080B3FD4: .4byte gBattleAnimArgs
_080B3FD8:
ldr r0, _080B406C @ =gBattleAnimTarget
ldrb r0, [r0]
bl GetBattlerSide
lsls r0, 24
cmp r0, 0
bne _080B4008
adds r0, r6, 0
movs r1, 0x1
bl StartSpriteAffineAnim
ldr r1, _080B4070 @ =gBattleAnimArgs
ldrh r0, [r1, 0x2]
negs r0, r0
strh r0, [r1, 0x2]
ldrh r0, [r1, 0x4]
negs r0, r0
strh r0, [r1, 0x4]
ldrh r0, [r1, 0x6]
negs r0, r0
strh r0, [r1, 0x6]
ldrh r0, [r1]
negs r0, r0
strh r0, [r1]
_080B4008:
ldr r5, _080B406C @ =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0x2
bl sub_8074844
lsls r0, 24
ldr r4, _080B4070 @ =gBattleAnimArgs
lsrs r0, 24
ldrh r1, [r4]
adds r0, r1
strh r0, [r6, 0x20]
ldrb r0, [r5]
movs r1, 0x3
bl sub_8074844
lsls r0, 24
lsrs r0, 24
ldrh r1, [r4, 0x2]
adds r0, r1
strh r0, [r6, 0x22]
ldrh r0, [r4, 0x8]
strh r0, [r6, 0x2E]
ldrb r0, [r5]
movs r1, 0x2
bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r4, 0x4]
adds r0, r1
strh r0, [r6, 0x32]
ldrb r0, [r5]
movs r1, 0x3
bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r4, [r4, 0x6]
adds r0, r4
strh r0, [r6, 0x36]
ldr r0, _080B4074 @ =StartAnimLinearTranslation
str r0, [r6, 0x1C]
ldr r1, _080B4078 @ =DestroyAnimSprite
adds r0, r6, 0
bl StoreSpriteCallbackInData6
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_080B406C: .4byte gBattleAnimTarget
_080B4070: .4byte gBattleAnimArgs
_080B4074: .4byte StartAnimLinearTranslation
_080B4078: .4byte DestroyAnimSprite
thumb_func_end sub_80B3FAC
thumb_func_start sub_80B407C
sub_80B407C: @ 80B407C
push {r4-r6,lr}
adds r6, r0, 0
bl IsContest
lsls r0, 24
cmp r0, 0
beq _080B40A0
ldr r1, _080B409C @ =gBattleAnimArgs
ldrh r0, [r1]
negs r0, r0
strh r0, [r1]
adds r0, r6, 0
movs r1, 0x2
bl StartSpriteAffineAnim
b _080B40BC
.align 2, 0
_080B409C: .4byte gBattleAnimArgs
_080B40A0:
ldr r0, _080B4118 @ =gBattleAnimTarget
ldrb r0, [r0]
bl GetBattlerSide
lsls r0, 24
cmp r0, 0
bne _080B40BC
ldr r0, _080B411C @ =gBattleAnimArgs
ldrh r1, [r0, 0x2]
negs r1, r1
strh r1, [r0, 0x2]
ldrh r1, [r0]
negs r1, r1
strh r1, [r0]
_080B40BC:
ldr r5, _080B4118 @ =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0x2
bl sub_8074844
lsls r0, 24
ldr r4, _080B411C @ =gBattleAnimArgs
lsrs r0, 24
ldrh r1, [r4]
adds r0, r1
strh r0, [r6, 0x20]
ldrb r0, [r5]
movs r1, 0x3
bl sub_8074844
lsls r0, 24
lsrs r0, 24
ldrh r1, [r4, 0x2]
adds r0, r1
strh r0, [r6, 0x22]
ldrh r0, [r4, 0x4]
strh r0, [r6, 0x2E]
ldrb r0, [r5]
movs r1, 0x2
bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r6, 0x32]
ldrb r0, [r5]
movs r1, 0x3
bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r6, 0x36]
ldr r0, _080B4120 @ =StartAnimLinearTranslation
str r0, [r6, 0x1C]
ldr r1, _080B4124 @ =DestroyAnimSprite
adds r0, r6, 0
bl StoreSpriteCallbackInData6
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_080B4118: .4byte gBattleAnimTarget
_080B411C: .4byte gBattleAnimArgs
_080B4120: .4byte StartAnimLinearTranslation
_080B4124: .4byte DestroyAnimSprite
thumb_func_end sub_80B407C
thumb_func_start sub_80B4128
sub_80B4128: @ 80B4128
push {r4,r5,lr}
adds r5, r0, 0
bl IsContest
lsls r0, 24
cmp r0, 0
beq _080B4144
ldr r0, _080B4184 @ =gBattleAnimArgs
movs r2, 0x4
ldrsh r1, [r0, r2]
lsrs r2, r1, 31
adds r1, r2
asrs r1, 1
strh r1, [r0, 0x4]
_080B4144:
adds r0, r5, 0
movs r1, 0x1
bl sub_8075160
ldr r1, _080B4184 @ =gBattleAnimArgs
ldrh r0, [r1, 0x4]
strh r0, [r5, 0x2E]
ldrh r0, [r5, 0x20]
strh r0, [r5, 0x30]
ldrh r0, [r5, 0x22]
strh r0, [r5, 0x34]
movs r2, 0x8
ldrsh r0, [r1, r2]
cmp r0, 0
bne _080B418C
ldr r4, _080B4188 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x32]
ldrb r0, [r4]
movs r1, 0x3
bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x36]
b _080B419E
.align 2, 0
_080B4184: .4byte gBattleAnimArgs
_080B4188: .4byte gBattleAnimTarget
_080B418C:
ldr r0, _080B41B4 @ =gBattleAnimTarget
ldrb r0, [r0]
adds r2, r5, 0
adds r2, 0x32
adds r3, r5, 0
adds r3, 0x36
movs r1, 0x1
bl sub_8076D9C
_080B419E:
adds r0, r5, 0
bl sub_8075678
ldr r0, _080B41B8 @ =gBattleAnimArgs
ldrh r0, [r0, 0x6]
strh r0, [r5, 0x38]
ldr r0, _080B41BC @ =sub_80B41C0
str r0, [r5, 0x1C]
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080B41B4: .4byte gBattleAnimTarget
_080B41B8: .4byte gBattleAnimArgs
_080B41BC: .4byte sub_80B41C0
thumb_func_end sub_80B4128
thumb_func_start sub_80B41C0
sub_80B41C0: @ 80B41C0
push {r4,lr}
adds r4, r0, 0
bl sub_80755E0
lsls r0, 24
cmp r0, 0
beq _080B41D6
adds r0, r4, 0
bl DestroyAnimSprite
b _080B41F2
_080B41D6:
movs r1, 0x3A
ldrsh r0, [r4, r1]
movs r2, 0x38
ldrsh r1, [r4, r2]
bl Sin
ldrh r1, [r4, 0x24]
adds r0, r1
strh r0, [r4, 0x24]
ldrh r0, [r4, 0x3A]
adds r0, 0xD
movs r1, 0xFF
ands r0, r1
strh r0, [r4, 0x3A]
_080B41F2:
pop {r4}
pop {r0}
bx r0
thumb_func_end sub_80B41C0
thumb_func_start sub_80B41F8
sub_80B41F8: @ 80B41F8
push {r4,lr}
adds r4, r0, 0
ldr r0, _080B4228 @ =gBattleAnimTarget
ldrb r0, [r0]
adds r2, r4, 0
adds r2, 0x20
adds r3, r4, 0
adds r3, 0x22
movs r1, 0
bl sub_8076D9C
ldr r0, _080B422C @ =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
lsls r0, 24
cmp r0, 0
beq _080B4234
ldr r0, _080B4230 @ =gBattleAnimArgs
ldrh r1, [r4, 0x20]
ldrh r2, [r0]
subs r1, r2
strh r1, [r4, 0x20]
b _080B4240
.align 2, 0
_080B4228: .4byte gBattleAnimTarget
_080B422C: .4byte gBattleAnimAttacker
_080B4230: .4byte gBattleAnimArgs
_080B4234:
ldr r1, _080B4268 @ =gBattleAnimArgs
ldrh r0, [r1]
ldrh r2, [r4, 0x20]
adds r0, r2
strh r0, [r4, 0x20]
adds r0, r1, 0
_080B4240:
ldrh r0, [r0, 0x2]
ldrh r1, [r4, 0x22]
adds r0, r1
strh r0, [r4, 0x22]
ldr r0, _080B426C @ =gBattleAnimTarget
ldrb r0, [r0]
bl GetBattlerSide
lsls r0, 24
cmp r0, 0
bne _080B425C
ldrh r0, [r4, 0x22]
adds r0, 0x8
strh r0, [r4, 0x22]
_080B425C:
ldr r0, _080B4270 @ =sub_80B4274
str r0, [r4, 0x1C]
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080B4268: .4byte gBattleAnimArgs
_080B426C: .4byte gBattleAnimTarget
_080B4270: .4byte sub_80B4274
thumb_func_end sub_80B41F8
thumb_func_start sub_80B4274
sub_80B4274: @ 80B4274
push {lr}
adds r3, r0, 0
ldrh r0, [r3, 0x2E]
adds r0, 0x1
strh r0, [r3, 0x2E]
lsls r0, 16
asrs r0, 16
cmp r0, 0x3
bne _080B42A8
movs r0, 0
strh r0, [r3, 0x2E]
movs r0, 0x3E
adds r0, r3
mov r12, r0
ldrb r2, [r0]
lsls r0, r2, 29
lsrs r0, 31
movs r1, 0x1
eors r1, r0
lsls r1, 2
movs r0, 0x5
negs r0, r0
ands r0, r2
orrs r0, r1
mov r1, r12
strb r0, [r1]
_080B42A8:
ldrh r0, [r3, 0x30]
adds r0, 0x1
strh r0, [r3, 0x30]
lsls r0, 16
asrs r0, 16
cmp r0, 0x33
bne _080B42BC
adds r0, r3, 0
bl DestroyAnimSprite
_080B42BC:
pop {r0}
bx r0
thumb_func_end sub_80B4274
thumb_func_start sub_80B42C0
sub_80B42C0: @ 80B42C0
push {r4,lr}
adds r4, r0, 0
movs r1, 0xFD
lsls r1, 6
movs r0, 0x50
bl SetGpuReg
movs r0, 0x52
movs r1, 0x10
bl SetGpuReg
movs r0, 0x10
strh r0, [r4, 0x2E]
ldr r0, _080B42E4 @ =sub_80B42E8
str r0, [r4, 0x1C]
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080B42E4: .4byte sub_80B42E8
thumb_func_end sub_80B42C0
thumb_func_start sub_80B42E8
sub_80B42E8: @ 80B42E8
push {r4,lr}
adds r4, r0, 0
ldrh r1, [r4, 0x32]
movs r2, 0x32
ldrsh r0, [r4, r2]
cmp r0, 0x13
bgt _080B42FC
adds r0, r1, 0x1
strh r0, [r4, 0x32]
b _080B433A
_080B42FC:
ldrh r1, [r4, 0x30]
adds r0, r1, 0x1
strh r0, [r4, 0x30]
movs r0, 0x1
ands r0, r1
cmp r0, 0
beq _080B433A
ldrh r1, [r4, 0x2E]
subs r1, 0x1
strh r1, [r4, 0x2E]
movs r0, 0x10
subs r0, r1
lsls r0, 8
orrs r1, r0
lsls r1, 16
lsrs r1, 16
movs r0, 0x52
bl SetGpuReg
movs r1, 0x2E
ldrsh r0, [r4, r1]
cmp r0, 0
bne _080B433A
adds r2, r4, 0
adds r2, 0x3E
ldrb r0, [r2]
movs r1, 0x4
orrs r0, r1
strb r0, [r2]
ldr r0, _080B4340 @ =sub_80B4344
str r0, [r4, 0x1C]
_080B433A:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080B4340: .4byte sub_80B4344
thumb_func_end sub_80B42E8
thumb_func_start sub_80B4344
sub_80B4344: @ 80B4344
push {r4,lr}
adds r4, r0, 0
movs r0, 0x50
movs r1, 0
bl SetGpuReg
movs r0, 0x52
movs r1, 0
bl SetGpuReg
adds r0, r4, 0
bl DestroyAnimSprite
pop {r4}
pop {r0}
bx r0
thumb_func_end sub_80B4344
thumb_func_start sub_80B4364
sub_80B4364: @ 80B4364
push {r4-r7,lr}
sub sp, 0x4
adds r7, r0, 0
bl IsContest
lsls r0, 24
cmp r0, 0
beq _080B4384
ldr r1, _080B4380 @ =gBattleAnimArgs
ldrh r0, [r1, 0x4]
negs r0, r0
strh r0, [r1, 0x4]
b _080B43A6
.align 2, 0
_080B4380: .4byte gBattleAnimArgs
_080B4384:
ldr r0, _080B4480 @ =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
lsls r0, 24
cmp r0, 0
beq _080B43A6
ldr r1, _080B4484 @ =gBattleAnimArgs
ldrh r0, [r1, 0x4]
negs r0, r0
strh r0, [r1, 0x4]
ldrh r0, [r1, 0x2]
negs r0, r0
strh r0, [r1, 0x2]
ldrh r0, [r1, 0x6]
negs r0, r0
strh r0, [r1, 0x6]
_080B43A6:
bl IsContest
lsls r0, 24
cmp r0, 0
bne _080B43F6
ldr r0, _080B4480 @ =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
adds r4, r0, 0
ldr r5, _080B4488 @ =gBattleAnimTarget
ldrb r0, [r5]
bl GetBattlerSide
lsls r4, 24
lsls r0, 24
cmp r4, r0
bne _080B43F6
ldrb r0, [r5]
bl GetBattlerPosition
lsls r0, 24
cmp r0, 0
beq _080B43E4
ldrb r0, [r5]
bl GetBattlerPosition
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
bne _080B43F6
_080B43E4:
ldr r0, _080B4484 @ =gBattleAnimArgs
movs r2, 0x4
ldrsh r1, [r0, r2]
negs r1, r1
strh r1, [r0, 0x4]
movs r2, 0
ldrsh r1, [r0, r2]
negs r1, r1
strh r1, [r0]
_080B43F6:
adds r0, r7, 0
movs r1, 0x1
bl sub_8075160
ldr r5, _080B4488 @ =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0x2
bl GetBattlerSpriteCoord
adds r4, r0, 0
lsls r4, 24
ldr r6, _080B4484 @ =gBattleAnimArgs
lsrs r4, 24
ldrh r0, [r6, 0x4]
adds r4, r0
lsls r4, 16
lsrs r4, 16
ldrb r0, [r5]
movs r1, 0x3
bl GetBattlerSpriteCoord
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
ldrh r2, [r6, 0x6]
adds r1, r2
lsls r1, 16
ldrh r2, [r7, 0x20]
lsls r0, r4, 16
asrs r0, 16
subs r0, r2
lsls r0, 16
asrs r0, 16
ldrh r2, [r7, 0x22]
lsrs r5, r1, 16
asrs r1, 16
subs r1, r2
lsls r1, 16
asrs r1, 16
bl sub_8075B30
lsls r0, 16
movs r1, 0xC0
lsls r1, 24
adds r0, r1
lsrs r0, 16
movs r3, 0x80
lsls r3, 1
str r0, [sp]
adds r0, r7, 0
movs r1, 0
adds r2, r3, 0
bl sub_8075A1C
ldrh r0, [r6, 0x8]
strh r0, [r7, 0x2E]
strh r4, [r7, 0x32]
strh r5, [r7, 0x36]
ldr r0, _080B448C @ =StartAnimLinearTranslation
str r0, [r7, 0x1C]
ldr r1, _080B4490 @ =DestroyAnimSprite
adds r0, r7, 0
bl StoreSpriteCallbackInData6
add sp, 0x4
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_080B4480: .4byte gBattleAnimAttacker
_080B4484: .4byte gBattleAnimArgs
_080B4488: .4byte gBattleAnimTarget
_080B448C: .4byte StartAnimLinearTranslation
_080B4490: .4byte DestroyAnimSprite
thumb_func_end sub_80B4364
thumb_func_start sub_80B4494
sub_80B4494: @ 80B4494
push {r4-r6,lr}
adds r6, r0, 0
movs r1, 0x1
bl sub_8075160
ldr r0, _080B4500 @ =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
lsls r0, 24
cmp r0, 0
beq _080B44B4
ldr r1, _080B4504 @ =gBattleAnimArgs
ldrh r0, [r1, 0x4]
negs r0, r0
strh r0, [r1, 0x4]
_080B44B4:
ldr r4, _080B4504 @ =gBattleAnimArgs
ldrh r0, [r4, 0x8]
strh r0, [r6, 0x2E]
ldr r5, _080B4508 @ =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0x2
bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r4, 0x4]
adds r0, r1
strh r0, [r6, 0x32]
ldrb r0, [r5]
movs r1, 0x3
bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r1, [r4, 0x6]
adds r0, r1
strh r0, [r6, 0x36]
ldrh r0, [r4, 0xA]
strh r0, [r6, 0x38]
adds r0, r6, 0
bl sub_8075068
ldr r0, _080B450C @ =sub_80B4510
str r0, [r6, 0x1C]
adds r2, r6, 0
adds r2, 0x3E
ldrb r0, [r2]
movs r1, 0x4
orrs r0, r1
strb r0, [r2]
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_080B4500: .4byte gBattleAnimAttacker
_080B4504: .4byte gBattleAnimArgs
_080B4508: .4byte gBattleAnimTarget
_080B450C: .4byte sub_80B4510
thumb_func_end sub_80B4494
thumb_func_start sub_80B4510
sub_80B4510: @ 80B4510
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x14
adds r4, r0, 0
adds r2, r4, 0
adds r2, 0x3E
ldrb r0, [r2]
movs r1, 0x5
negs r1, r1
ands r1, r0
strb r1, [r2]
adds r0, r4, 0
bl AnimateBallThrow
lsls r0, 24
cmp r0, 0
beq _080B453C
adds r0, r4, 0
bl DestroyAnimSprite
b _080B45CC
_080B453C:
movs r0, 0x2E
adds r0, r4
mov r8, r0
ldrh r7, [r4, 0x20]
ldrh r5, [r4, 0x24]
ldrh r1, [r4, 0x22]
mov r12, r1
ldrh r6, [r4, 0x26]
mov r2, r8
add r1, sp, 0x4
movs r3, 0x7
_080B4552:
ldrh r0, [r2]
strh r0, [r1]
adds r2, 0x2
adds r1, 0x2
subs r3, 0x1
cmp r3, 0
bge _080B4552
adds r0, r7, r5
lsls r0, 16
lsrs r5, r0, 16
mov r2, r12
adds r0, r2, r6
lsls r0, 16
lsrs r6, r0, 16
adds r0, r4, 0
bl AnimateBallThrow
lsls r0, 24
cmp r0, 0
bne _080B45CC
ldrh r0, [r4, 0x24]
ldrh r1, [r4, 0x20]
adds r0, r1
lsls r1, r5, 16
asrs r1, 16
subs r0, r1
lsls r0, 16
asrs r0, 16
ldrh r1, [r4, 0x26]
ldrh r2, [r4, 0x22]
adds r1, r2
lsls r2, r6, 16
asrs r2, 16
subs r1, r2
lsls r1, 16
asrs r1, 16
bl sub_8075B30
lsls r0, 16
movs r1, 0xC0
lsls r1, 24
adds r0, r1
lsrs r0, 16
movs r3, 0x80
lsls r3, 1
str r0, [sp]
adds r0, r4, 0
movs r1, 0
adds r2, r3, 0
bl sub_8075A1C
add r2, sp, 0x4
mov r1, r8
movs r3, 0x7
_080B45BE:
ldrh r0, [r2]
strh r0, [r1]
adds r2, 0x2
adds r1, 0x2
subs r3, 0x1
cmp r3, 0
bge _080B45BE
_080B45CC:
add sp, 0x14
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_80B4510
thumb_func_start sub_80B45D8
sub_80B45D8: @ 80B45D8
push {r4,r5,lr}
adds r5, r0, 0
ldr r0, _080B45EC @ =gBattleAnimArgs
movs r1, 0
ldrsh r0, [r0, r1]
cmp r0, 0
bne _080B45F4
ldr r4, _080B45F0 @ =gBattleAnimAttacker
b _080B45F6
.align 2, 0
_080B45EC: .4byte gBattleAnimArgs
_080B45F0: .4byte gBattleAnimAttacker
_080B45F4:
ldr r4, _080B4628 @ =gBattleAnimTarget
_080B45F6:
ldrb r0, [r4]
movs r1, 0x2
bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
adds r0, 0x12
strh r0, [r5, 0x22]
ldr r1, _080B462C @ =move_anim_8074EE0
adds r0, r5, 0
bl StoreSpriteCallbackInData6
ldr r0, _080B4630 @ =sub_8074F50
str r0, [r5, 0x1C]
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080B4628: .4byte gBattleAnimTarget
_080B462C: .4byte move_anim_8074EE0
_080B4630: .4byte sub_8074F50
thumb_func_end sub_80B45D8
.align 2, 0 @ Don't pad with nop.
-2323
View File
File diff suppressed because it is too large Load Diff
-835
View File
@@ -1,835 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start sub_80B725C
sub_80B725C: @ 80B725C
push {r4,r5,lr}
adds r5, r0, 0
ldr r4, _080B72A4 @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x3
bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
ldrb r0, [r4]
bl GetBattlerSide
lsls r0, 24
cmp r0, 0
beq _080B72AC
ldr r2, _080B72A8 @ =gBattleAnimArgs
ldrh r0, [r5, 0x20]
ldrh r1, [r2]
subs r0, r1
strh r0, [r5, 0x20]
ldrh r0, [r2, 0x6]
negs r0, r0
strh r0, [r2, 0x6]
ldrh r0, [r2, 0x8]
negs r0, r0
strh r0, [r2, 0x8]
adds r1, r2, 0
b _080B72B6
.align 2, 0
_080B72A4: .4byte gBattleAnimAttacker
_080B72A8: .4byte gBattleAnimArgs
_080B72AC:
ldr r1, _080B72EC @ =gBattleAnimArgs
ldrh r0, [r1]
ldrh r2, [r5, 0x20]
adds r0, r2
strh r0, [r5, 0x20]
_080B72B6:
ldrh r0, [r1, 0x2]
ldrh r2, [r5, 0x22]
adds r0, r2
strh r0, [r5, 0x22]
ldrh r0, [r1, 0x4]
strh r0, [r5, 0x2E]
ldrh r0, [r1, 0x6]
strh r0, [r5, 0x30]
ldrh r0, [r1, 0x8]
strh r0, [r5, 0x34]
ldrh r0, [r1, 0xA]
strh r0, [r5, 0x38]
adds r2, r5, 0
adds r2, 0x3E
ldrb r0, [r2]
movs r1, 0x4
orrs r0, r1
strb r0, [r2]
ldr r1, _080B72F0 @ =move_anim_8074EE0
adds r0, r5, 0
bl StoreSpriteCallbackInData6
ldr r0, _080B72F4 @ =sub_8074E70
str r0, [r5, 0x1C]
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080B72EC: .4byte gBattleAnimArgs
_080B72F0: .4byte move_anim_8074EE0
_080B72F4: .4byte sub_8074E70
thumb_func_end sub_80B725C
thumb_func_start sub_80B72F8
sub_80B72F8: @ 80B72F8
push {r4,r5,lr}
adds r5, r0, 0
bl sub_8074FCC
ldr r4, _080B7350 @ =gBattleAnimTarget
ldrb r0, [r4]
movs r1, 0x2
bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x32]
ldrb r0, [r4]
movs r1, 0x3
bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x36]
ldr r0, _080B7354 @ =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
lsls r0, 24
cmp r0, 0
beq _080B735C
ldr r2, _080B7358 @ =gBattleAnimArgs
ldrh r0, [r5, 0x20]
ldrh r1, [r2, 0x2]
subs r0, r1
strh r0, [r5, 0x20]
ldrh r0, [r5, 0x22]
adds r1, r0
strh r1, [r5, 0x22]
ldrh r0, [r5, 0x32]
ldrh r1, [r2, 0x4]
subs r0, r1
strh r0, [r5, 0x32]
ldrh r0, [r2, 0x6]
ldrh r1, [r5, 0x36]
adds r0, r1
strh r0, [r5, 0x36]
b _080B7386
.align 2, 0
_080B7350: .4byte gBattleAnimTarget
_080B7354: .4byte gBattleAnimAttacker
_080B7358: .4byte gBattleAnimArgs
_080B735C:
ldr r1, _080B73A0 @ =gBattleAnimArgs
ldrh r0, [r1]
ldrh r2, [r5, 0x20]
adds r0, r2
strh r0, [r5, 0x20]
ldrh r0, [r1, 0x2]
ldrh r2, [r5, 0x22]
adds r0, r2
strh r0, [r5, 0x22]
ldrh r0, [r1, 0x4]
ldrh r2, [r5, 0x32]
adds r0, r2
strh r0, [r5, 0x32]
ldrh r0, [r1, 0x6]
ldrh r1, [r5, 0x36]
adds r0, r1
strh r0, [r5, 0x36]
adds r0, r5, 0
movs r1, 0x1
bl StartSpriteAnim
_080B7386:
ldr r0, _080B73A0 @ =gBattleAnimArgs
ldrh r0, [r0, 0x8]
strh r0, [r5, 0x2E]
ldr r0, _080B73A4 @ =StartAnimLinearTranslation
str r0, [r5, 0x1C]
ldr r1, _080B73A8 @ =move_anim_8074EE0
adds r0, r5, 0
bl StoreSpriteCallbackInData6
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080B73A0: .4byte gBattleAnimArgs
_080B73A4: .4byte StartAnimLinearTranslation
_080B73A8: .4byte move_anim_8074EE0
thumb_func_end sub_80B72F8
thumb_func_start sub_80B73AC
sub_80B73AC: @ 80B73AC
push {r4,r5,lr}
adds r5, r0, 0
ldr r0, _080B73C0 @ =gBattleAnimArgs
movs r1, 0
ldrsh r0, [r0, r1]
cmp r0, 0
bne _080B73C8
ldr r4, _080B73C4 @ =gBattleAnimAttacker
b _080B73CA
.align 2, 0
_080B73C0: .4byte gBattleAnimArgs
_080B73C4: .4byte gBattleAnimAttacker
_080B73C8:
ldr r4, _080B740C @ =gBattleAnimTarget
_080B73CA:
ldrb r0, [r4]
movs r1, 0
bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x20]
ldrb r0, [r4]
movs r1, 0x1
bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
ldr r4, _080B7410 @ =gBattleAnimArgs
movs r0, 0x2
ldrsh r1, [r4, r0]
adds r0, r5, 0
bl sub_8074FF8
ldrh r0, [r4, 0x4]
ldrh r1, [r5, 0x22]
adds r0, r1
strh r0, [r5, 0x22]
ldr r0, _080B7414 @ =sub_8074F6C
str r0, [r5, 0x1C]
ldr r1, _080B7418 @ =move_anim_8074EE0
adds r0, r5, 0
bl StoreSpriteCallbackInData6
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080B740C: .4byte gBattleAnimTarget
_080B7410: .4byte gBattleAnimArgs
_080B7414: .4byte sub_8074F6C
_080B7418: .4byte move_anim_8074EE0
thumb_func_end sub_80B73AC
thumb_func_start sub_80B741C
sub_80B741C: @ 80B741C
push {r4,lr}
adds r4, r0, 0
ldr r0, _080B7444 @ =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
lsls r0, 24
cmp r0, 0
beq _080B7436
adds r0, r4, 0
movs r1, 0x1
bl StartSpriteAffineAnim
_080B7436:
adds r0, r4, 0
bl sub_80B72F8
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080B7444: .4byte gBattleAnimAttacker
thumb_func_end sub_80B741C
thumb_func_start sub_80B7448
sub_80B7448: @ 80B7448
push {r4-r7,lr}
adds r6, r0, 0
ldr r4, _080B749C @ =gBattleAnimAttacker
ldrb r0, [r4]
movs r1, 0x2
bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
movs r5, 0
strh r0, [r6, 0x20]
ldrb r0, [r4]
movs r1, 0x3
bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r6, 0x22]
strh r5, [r6, 0x36]
movs r0, 0x1
strh r0, [r6, 0x38]
ldr r0, _080B74A0 @ =gBattleAnimArgs
ldrh r0, [r0]
strh r0, [r6, 0x3A]
ldr r4, _080B74A4 @ =gBattlerAttacker
ldrb r0, [r4]
movs r1, 0
bl sub_8076B2C
lsls r7, r0, 16
lsrs r5, r7, 16
ldrb r0, [r4]
movs r1, 0x1
bl sub_8076B2C
lsls r1, r0, 16
lsrs r0, r1, 16
cmp r5, r0
bls _080B74A8
lsrs r0, r7, 17
b _080B74AA
.align 2, 0
_080B749C: .4byte gBattleAnimAttacker
_080B74A0: .4byte gBattleAnimArgs
_080B74A4: .4byte gBattlerAttacker
_080B74A8:
lsrs r0, r1, 17
_080B74AA:
strh r0, [r6, 0x3C]
movs r1, 0x3A
ldrsh r0, [r6, r1]
movs r2, 0x3C
ldrsh r1, [r6, r2]
bl Cos
strh r0, [r6, 0x24]
movs r1, 0x3A
ldrsh r0, [r6, r1]
movs r2, 0x3C
ldrsh r1, [r6, r2]
bl Sin
strh r0, [r6, 0x26]
ldr r0, _080B74D4 @ =sub_80B74D8
str r0, [r6, 0x1C]
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_080B74D4: .4byte sub_80B74D8
thumb_func_end sub_80B7448
thumb_func_start sub_80B74D8
sub_80B74D8: @ 80B74D8
push {r4,r5,lr}
adds r4, r0, 0
movs r0, 0x2E
ldrsh r5, [r4, r0]
cmp r5, 0
beq _080B74EA
cmp r5, 0x1
beq _080B7556
b _080B75DA
_080B74EA:
ldrh r0, [r4, 0x3A]
ldrh r1, [r4, 0x38]
subs r0, r1
movs r1, 0xFF
ands r0, r1
strh r0, [r4, 0x3A]
movs r1, 0x3A
ldrsh r0, [r4, r1]
movs r2, 0x3C
ldrsh r1, [r4, r2]
bl Cos
strh r0, [r4, 0x24]
movs r1, 0x3A
ldrsh r0, [r4, r1]
movs r2, 0x3C
ldrsh r1, [r4, r2]
bl Sin
strh r0, [r4, 0x26]
ldrh r0, [r4, 0x36]
adds r0, 0x1
strh r0, [r4, 0x36]
lsls r0, 16
asrs r0, 16
cmp r0, 0x5
ble _080B753C
strh r5, [r4, 0x36]
ldrh r1, [r4, 0x38]
movs r2, 0x38
ldrsh r0, [r4, r2]
cmp r0, 0xF
bgt _080B753C
adds r0, r1, 0x1
strh r0, [r4, 0x38]
lsls r0, 16
asrs r0, 16
cmp r0, 0xF
ble _080B753C
movs r0, 0x10
strh r0, [r4, 0x38]
_080B753C:
ldrh r0, [r4, 0x34]
adds r0, 0x1
strh r0, [r4, 0x34]
lsls r0, 16
asrs r0, 16
cmp r0, 0x3C
ble _080B75DA
movs r0, 0
strh r0, [r4, 0x34]
ldrh r0, [r4, 0x2E]
adds r0, 0x1
strh r0, [r4, 0x2E]
b _080B75DA
_080B7556:
ldrh r0, [r4, 0x3A]
ldrh r1, [r4, 0x38]
subs r0, r1
movs r1, 0xFF
ands r0, r1
strh r0, [r4, 0x3A]
ldrh r1, [r4, 0x3C]
movs r2, 0x3C
ldrsh r0, [r4, r2]
cmp r0, 0x95
bgt _080B757E
adds r0, r1, 0
adds r0, 0x8
strh r0, [r4, 0x3C]
lsls r0, 16
asrs r0, 16
cmp r0, 0x95
ble _080B757E
movs r0, 0x96
strh r0, [r4, 0x3C]
_080B757E:
movs r1, 0x3A
ldrsh r0, [r4, r1]
movs r2, 0x3C
ldrsh r1, [r4, r2]
bl Cos
strh r0, [r4, 0x24]
movs r1, 0x3A
ldrsh r0, [r4, r1]
movs r2, 0x3C
ldrsh r1, [r4, r2]
bl Sin
strh r0, [r4, 0x26]
ldrh r0, [r4, 0x36]
adds r0, 0x1
strh r0, [r4, 0x36]
lsls r0, 16
asrs r0, 16
cmp r0, 0x5
ble _080B75C6
movs r0, 0
strh r0, [r4, 0x36]
ldrh r1, [r4, 0x38]
movs r2, 0x38
ldrsh r0, [r4, r2]
cmp r0, 0xF
bgt _080B75C6
adds r0, r1, 0x1
strh r0, [r4, 0x38]
lsls r0, 16
asrs r0, 16
cmp r0, 0xF
ble _080B75C6
movs r0, 0x10
strh r0, [r4, 0x38]
_080B75C6:
ldrh r0, [r4, 0x34]
adds r0, 0x1
strh r0, [r4, 0x34]
lsls r0, 16
asrs r0, 16
cmp r0, 0x14
ble _080B75DA
adds r0, r4, 0
bl DestroyAnimSprite
_080B75DA:
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_80B74D8
thumb_func_start sub_80B75E0
sub_80B75E0: @ 80B75E0
push {r4-r6,lr}
sub sp, 0xC
lsls r0, 24
lsrs r0, 24
lsls r1, r0, 2
adds r1, r0
lsls r1, 3
ldr r0, _080B760C @ =gTasks
adds r4, r1, r0
ldr r0, _080B7610 @ =gBattleAnimAttacker
ldrb r0, [r0]
bl sub_80768B0
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
bne _080B761C
ldr r0, _080B7614 @ =0x04000014
str r0, [sp]
ldr r0, _080B7618 @ =gBattle_BG1_X
b _080B7622
.align 2, 0
_080B760C: .4byte gTasks
_080B7610: .4byte gBattleAnimAttacker
_080B7614: .4byte 0x04000014
_080B7618: .4byte gBattle_BG1_X
_080B761C:
ldr r0, _080B7698 @ =0x04000018
str r0, [sp]
ldr r0, _080B769C @ =gBattle_BG2_X
_080B7622:
ldrh r0, [r0]
strh r0, [r4, 0xC]
ldr r0, _080B76A0 @ =0xa2600001
str r0, [sp, 0x4]
mov r1, sp
movs r5, 0
movs r0, 0x1
strb r0, [r1, 0x8]
mov r0, sp
strb r5, [r0, 0x9]
ldr r0, _080B76A4 @ =gBattleAnimAttacker
ldrb r0, [r0]
bl sub_807492C
lsls r0, 24
lsrs r0, 24
adds r1, r0, 0
subs r1, 0x20
strh r1, [r4, 0xE]
adds r0, 0x20
strh r0, [r4, 0x10]
cmp r1, 0
bge _080B7652
strh r5, [r4, 0xE]
_080B7652:
ldrh r3, [r4, 0xE]
movs r1, 0x10
ldrsh r0, [r4, r1]
cmp r3, r0
bgt _080B7680
ldr r5, _080B76A8 @ =gScanlineEffectRegBuffers
movs r0, 0xF0
lsls r0, 3
adds r6, r5, r0
_080B7664:
lsls r1, r3, 1
adds r2, r1, r5
ldrh r0, [r4, 0xC]
strh r0, [r2]
adds r1, r6
ldrh r0, [r4, 0xC]
strh r0, [r1]
adds r0, r3, 0x1
lsls r0, 16
lsrs r3, r0, 16
movs r1, 0x10
ldrsh r0, [r4, r1]
cmp r3, r0
ble _080B7664
_080B7680:
ldr r0, [sp]
ldr r1, [sp, 0x4]
ldr r2, [sp, 0x8]
bl ScanlineEffect_SetParams
ldr r0, _080B76AC @ =sub_80B76B0
str r0, [r4]
add sp, 0xC
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_080B7698: .4byte 0x04000018
_080B769C: .4byte gBattle_BG2_X
_080B76A0: .4byte 0xa2600001
_080B76A4: .4byte gBattleAnimAttacker
_080B76A8: .4byte gScanlineEffectRegBuffers
_080B76AC: .4byte sub_80B76B0
thumb_func_end sub_80B75E0
thumb_func_start sub_80B76B0
sub_80B76B0: @ 80B76B0
push {lr}
lsls r0, 24
lsrs r3, r0, 24
lsls r0, r3, 2
adds r0, r3
lsls r0, 3
ldr r1, _080B76D4 @ =gTasks
adds r2, r0, r1
movs r1, 0x8
ldrsh r0, [r2, r1]
cmp r0, 0x4
bhi _080B7766
lsls r0, 2
ldr r1, _080B76D8 @ =_080B76DC
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_080B76D4: .4byte gTasks
_080B76D8: .4byte _080B76DC
.align 2, 0
_080B76DC:
.4byte _080B76F0
.4byte _080B7712
.4byte _080B7722
.4byte _080B774E
.4byte _080B7760
_080B76F0:
ldrh r0, [r2, 0x16]
adds r0, 0x1
strh r0, [r2, 0x16]
lsls r0, 16
asrs r0, 16
cmp r0, 0x1
ble _080B7746
movs r0, 0
strh r0, [r2, 0x16]
ldrh r0, [r2, 0x14]
adds r0, 0x1
strh r0, [r2, 0x14]
lsls r0, 16
asrs r0, 16
cmp r0, 0x3
bne _080B7746
b _080B7740
_080B7712:
ldrh r0, [r2, 0xA]
adds r0, 0x1
strh r0, [r2, 0xA]
lsls r0, 16
asrs r0, 16
cmp r0, 0x3C
ble _080B7746
b _080B7740
_080B7722:
ldrh r0, [r2, 0x16]
adds r0, 0x1
strh r0, [r2, 0x16]
lsls r0, 16
asrs r0, 16
cmp r0, 0x1
ble _080B7746
movs r0, 0
strh r0, [r2, 0x16]
ldrh r0, [r2, 0x14]
subs r0, 0x1
strh r0, [r2, 0x14]
lsls r0, 16
cmp r0, 0
bne _080B7746
_080B7740:
ldrh r0, [r2, 0x8]
adds r0, 0x1
strh r0, [r2, 0x8]
_080B7746:
adds r0, r2, 0
bl sub_80B776C
b _080B7766
_080B774E:
ldr r1, _080B775C @ =gScanlineEffect
movs r0, 0x3
strb r0, [r1, 0x15]
ldrh r0, [r2, 0x8]
adds r0, 0x1
strh r0, [r2, 0x8]
b _080B7766
.align 2, 0
_080B775C: .4byte gScanlineEffect
_080B7760:
adds r0, r3, 0
bl DestroyAnimVisualTask
_080B7766:
pop {r0}
bx r0
thumb_func_end sub_80B76B0
thumb_func_start sub_80B776C
sub_80B776C: @ 80B776C
push {r4-r7,lr}
mov r7, r8
push {r7}
adds r5, r0, 0
ldrh r3, [r5, 0x12]
ldrh r4, [r5, 0xE]
movs r1, 0x10
ldrsh r0, [r5, r1]
cmp r4, r0
bgt _080B77C2
ldr r7, _080B77D8 @ =gScanlineEffectRegBuffers
mov r12, r7
ldr r0, _080B77DC @ =gSineTable
mov r8, r0
ldr r6, _080B77E0 @ =gScanlineEffect
_080B778A:
lsls r2, r4, 1
ldrb r1, [r6, 0x14]
lsls r0, r1, 4
subs r0, r1
lsls r0, 7
adds r2, r0
add r2, r12
lsls r0, r3, 1
add r0, r8
movs r7, 0
ldrsh r1, [r0, r7]
movs r7, 0x14
ldrsh r0, [r5, r7]
muls r0, r1
asrs r0, 7
ldrh r1, [r5, 0xC]
adds r0, r1
strh r0, [r2]
adds r3, 0x8
movs r0, 0xFF
ands r3, r0
adds r0, r4, 0x1
lsls r0, 16
lsrs r4, r0, 16
movs r7, 0x10
ldrsh r0, [r5, r7]
cmp r4, r0
ble _080B778A
_080B77C2:
ldrh r0, [r5, 0x12]
adds r0, 0x9
movs r1, 0xFF
ands r0, r1
strh r0, [r5, 0x12]
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_080B77D8: .4byte gScanlineEffectRegBuffers
_080B77DC: .4byte gSineTable
_080B77E0: .4byte gScanlineEffect
thumb_func_end sub_80B776C
thumb_func_start sub_80B77E4
sub_80B77E4: @ 80B77E4
push {r4-r6,lr}
mov r6, r8
push {r6}
adds r4, r0, 0
ldr r5, _080B7884 @ =gBattleAnimArgs
movs r0, 0x4
ldrsh r1, [r5, r0]
lsls r0, r1, 1
adds r0, r1
movs r1, 0x5
bl __divsi3
adds r6, r0, 0
ldr r1, _080B7888 @ =gBattleAnimAttacker
mov r8, r1
ldrb r0, [r1]
movs r1, 0x2
bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x20]
mov r2, r8
ldrb r0, [r2]
movs r1, 0x3
bl GetBattlerSpriteCoord
lsls r0, 24
lsrs r0, 24
ldrh r3, [r5, 0x8]
adds r0, r3
strh r0, [r4, 0x22]
movs r1, 0x2
ldrsh r0, [r5, r1]
movs r2, 0x4
ldrsh r1, [r5, r2]
bl Cos
strh r0, [r4, 0x30]
movs r3, 0x2
ldrsh r0, [r5, r3]
lsls r6, 16
asrs r6, 16
adds r1, r6, 0
bl Sin
strh r0, [r4, 0x32]
ldrh r1, [r4, 0x30]
ldrh r2, [r5]
adds r3, r2, 0
muls r3, r1
adds r1, r3, 0
ldrh r3, [r4, 0x20]
adds r1, r3
strh r1, [r4, 0x20]
adds r1, r2, 0
muls r1, r0
adds r0, r1, 0
ldrh r2, [r4, 0x22]
adds r0, r2
strh r0, [r4, 0x22]
ldrh r0, [r5, 0x6]
strh r0, [r4, 0x34]
ldr r0, _080B788C @ =sub_80B7894
str r0, [r4, 0x1C]
adds r4, 0x2E
ldr r2, _080B7890 @ =gUnknown_20399A4
movs r1, 0x6
_080B786C:
ldrh r0, [r4]
strh r0, [r2]
adds r4, 0x2
adds r2, 0x2
subs r1, 0x1
cmp r1, 0
bge _080B786C
pop {r3}
mov r8, r3
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_080B7884: .4byte gBattleAnimArgs
_080B7888: .4byte gBattleAnimAttacker
_080B788C: .4byte sub_80B7894
_080B7890: .4byte gUnknown_20399A4
thumb_func_end sub_80B77E4
thumb_func_start sub_80B7894
sub_80B7894: @ 80B7894
push {r4,lr}
adds r4, r0, 0
ldrh r0, [r4, 0x30]
ldrh r1, [r4, 0x36]
adds r0, r1
strh r0, [r4, 0x36]
ldrh r0, [r4, 0x32]
ldrh r2, [r4, 0x38]
adds r0, r2
strh r0, [r4, 0x38]
movs r1, 0x36
ldrsh r0, [r4, r1]
movs r1, 0xA
bl __divsi3
strh r0, [r4, 0x24]
movs r2, 0x38
ldrsh r0, [r4, r2]
movs r1, 0xA
bl __divsi3
strh r0, [r4, 0x26]
ldrh r0, [r4, 0x2E]
adds r0, 0x1
strh r0, [r4, 0x2E]
lsls r0, 16
asrs r0, 16
movs r2, 0x34
ldrsh r1, [r4, r2]
cmp r0, r1
ble _080B78D8
adds r0, r4, 0
bl DestroyAnimSprite
_080B78D8:
pop {r4}
pop {r0}
bx r0
thumb_func_end sub_80B7894
.align 2, 0 @ Don't pad with nop.
+30 -30
View File
@@ -110,7 +110,7 @@ sub_80ADC9C: @ 80ADC9C
cmp r0, 0
beq _080ADCB2
adds r0, r2, 0
bl move_anim_8074EE0
bl DestroySpriteAndMatrix
_080ADCB2:
pop {r0}
bx r0
@@ -173,18 +173,18 @@ _080ADD1C:
strh r0, [r5, 0x32]
ldrh r0, [r2, 0x8]
strh r0, [r5, 0x34]
ldr r1, _080ADD44 @ =move_anim_8074EE0
ldr r1, _080ADD44 @ =DestroySpriteAndMatrix
adds r0, r5, 0
bl StoreSpriteCallbackInData6
ldr r0, _080ADD48 @ =sub_8074A80
ldr r0, _080ADD48 @ =TranslateSpriteInCircleOverDuration
str r0, [r5, 0x1C]
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080ADD40: .4byte gBattleAnimArgs
_080ADD44: .4byte move_anim_8074EE0
_080ADD48: .4byte sub_8074A80
_080ADD44: .4byte DestroySpriteAndMatrix
_080ADD48: .4byte TranslateSpriteInCircleOverDuration
thumb_func_end sub_80ADCB8
thumb_func_start sub_80ADD4C
@@ -315,7 +315,7 @@ _080ADE02:
cmp r0, 0
beq _080ADE66
adds r0, r4, 0
bl sub_8076884
bl GetBattlerSpriteBGPriority
lsls r0, 24
lsrs r0, 24
adds r0, 0x1
@@ -370,7 +370,7 @@ sub_80ADEB0: @ 80ADEB0
push {r4-r6,lr}
adds r4, r0, 0
movs r1, 0x1
bl sub_8075160
bl InitSpritePosToAnimAttacker
ldr r5, _080ADF24 @ =gBattleAnimArgs
ldrh r0, [r5, 0x6]
strh r0, [r4, 0x2E]
@@ -392,7 +392,7 @@ sub_80ADEB0: @ 80ADEB0
lsrs r0, 24
strh r0, [r4, 0x36]
adds r0, r4, 0
bl obj_translate_based_on_private_1_2_3_4
bl InitAnimLinearTranslation
ldrh r0, [r5, 0x4]
strh r0, [r4, 0x38]
ldrh r0, [r5, 0xA]
@@ -432,7 +432,7 @@ _080ADF34: .4byte sub_80ADF38
sub_80ADF38: @ 80ADF38
push {r4,lr}
adds r4, r0, 0
bl sub_80755E0
bl AnimTranslateLinear
lsls r0, 24
cmp r0, 0
bne _080ADFA2
@@ -743,7 +743,7 @@ sub_80AE1A0: @ 80AE1A0
push {r4,r5,lr}
adds r4, r0, 0
movs r1, 0
bl sub_8075114
bl InitSpritePosToAnimTarget
ldrh r2, [r4, 0x4]
lsls r1, r2, 22
lsrs r1, 22
@@ -788,7 +788,7 @@ _080AE1FA:
ldr r0, _080AE214 @ =gBattleAnimArgs
ldrh r0, [r0, 0x4]
strh r0, [r4, 0x2E]
ldr r0, _080AE218 @ =sub_8074C44
ldr r0, _080AE218 @ =WaitAnimForDuration
str r0, [r4, 0x1C]
ldr r1, _080AE21C @ =DestroyAnimSprite
adds r0, r4, 0
@@ -798,7 +798,7 @@ _080AE1FA:
bx r0
.align 2, 0
_080AE214: .4byte gBattleAnimArgs
_080AE218: .4byte sub_8074C44
_080AE218: .4byte WaitAnimForDuration
_080AE21C: .4byte DestroyAnimSprite
thumb_func_end sub_80AE1A0
@@ -1142,7 +1142,7 @@ sub_80AE470: @ 80AE470
ands r0, r5
orrs r0, r1
strh r0, [r6, 0x4]
ldr r1, _080AE4EC @ =gUnknown_2037EE2
ldr r1, _080AE4EC @ =gAnimVisualTaskCount
ldrb r0, [r1]
adds r0, 0x1
strb r0, [r1]
@@ -1160,7 +1160,7 @@ _080AE4DC: .4byte gUnknown_83E60B8
_080AE4E0: .4byte gSprites
_080AE4E4: .4byte 0x000003ff
_080AE4E8: .4byte 0xfffffc00
_080AE4EC: .4byte gUnknown_2037EE2
_080AE4EC: .4byte gAnimVisualTaskCount
_080AE4F0: .4byte sub_80AE4F4
thumb_func_end sub_80AE470
@@ -1344,11 +1344,11 @@ sub_80AE5BC: @ 80AE5BC
strh r0, [r4, 0x36]
strh r6, [r4, 0x38]
adds r0, r4, 0
bl obj_translate_based_on_private_1_2_3_4
bl InitAnimLinearTranslation
ldr r1, _080AE6B4 @ =sub_80AE704
adds r0, r4, 0
bl StoreSpriteCallbackInData6
ldr r0, _080AE6B8 @ =sub_8074F6C
ldr r0, _080AE6B8 @ =RunStoredCallbackWhenAnimEnds
str r0, [r4, 0x1C]
ldrh r0, [r5, 0x1A]
adds r0, 0x1
@@ -1390,7 +1390,7 @@ _080AE6A8: .4byte gUnknown_83E6120
_080AE6AC: .4byte gSprites
_080AE6B0: .4byte gUnknown_83E60D0
_080AE6B4: .4byte sub_80AE704
_080AE6B8: .4byte sub_8074F6C
_080AE6B8: .4byte RunStoredCallbackWhenAnimEnds
_080AE6BC:
movs r1, 0x16
ldrsh r0, [r5, r1]
@@ -1408,7 +1408,7 @@ _080AE6CA:
sub_80AE6D0: @ 80AE6D0
push {r4,lr}
adds r4, r0, 0
bl sub_80755E0
bl AnimTranslateLinear
lsls r0, 24
cmp r0, 0
beq _080AE6F8
@@ -1476,18 +1476,18 @@ _080AE73A:
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x22]
ldr r1, _080AE76C @ =move_anim_8074EE0
ldr r1, _080AE76C @ =DestroySpriteAndMatrix
adds r0, r5, 0
bl StoreSpriteCallbackInData6
ldr r0, _080AE770 @ =sub_8074F50
ldr r0, _080AE770 @ =RunStoredCallbackWhenAffineAnimEnds
str r0, [r5, 0x1C]
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080AE768: .4byte gBattleAnimTarget
_080AE76C: .4byte move_anim_8074EE0
_080AE770: .4byte sub_8074F50
_080AE76C: .4byte DestroySpriteAndMatrix
_080AE770: .4byte RunStoredCallbackWhenAffineAnimEnds
thumb_func_end sub_80AE71C
thumb_func_start sub_80AE774
@@ -1527,7 +1527,7 @@ _080AE792:
ldr r1, _080AE7D4 @ =DestroyAnimSprite
adds r0, r5, 0
bl StoreSpriteCallbackInData6
ldr r0, _080AE7D8 @ =sub_8074F6C
ldr r0, _080AE7D8 @ =RunStoredCallbackWhenAnimEnds
str r0, [r5, 0x1C]
pop {r4,r5}
pop {r0}
@@ -1536,7 +1536,7 @@ _080AE792:
_080AE7CC: .4byte gBattleAnimTarget
_080AE7D0: .4byte gBattleAnimArgs
_080AE7D4: .4byte DestroyAnimSprite
_080AE7D8: .4byte sub_8074F6C
_080AE7D8: .4byte RunStoredCallbackWhenAnimEnds
thumb_func_end sub_80AE774
thumb_func_start sub_80AE7DC
@@ -1559,7 +1559,7 @@ sub_80AE7DC: @ 80AE7DC
lsrs r0, 24
strh r0, [r5, 0x22]
movs r0, 0
bl GetAnimBankSpriteId
bl GetAnimBattlerSpriteId
lsls r0, 24
lsrs r0, 24
strh r0, [r5, 0x3A]
@@ -1632,7 +1632,7 @@ _080AE864:
cmp r0, r1
bls _080AE894
adds r0, r4, 0
bl move_anim_8074EE0
bl DestroySpriteAndMatrix
_080AE894:
pop {r4}
pop {r0}
@@ -1672,7 +1672,7 @@ _080AE8D2:
b _080AEA04
_080AE8D4:
movs r0, 0
bl GetAnimBankSpriteId
bl GetAnimBattlerSpriteId
lsls r0, 24
lsrs r0, 24
movs r6, 0
@@ -2203,7 +2203,7 @@ _080AECC4:
cmp r0, 0
beq _080AECD8
adds r0, r5, 0
bl move_anim_8074EE0
bl DestroySpriteAndMatrix
_080AECD8:
pop {r4,r5}
pop {r0}
@@ -2279,12 +2279,12 @@ _080AED20:
movs r0, 0xC
strh r0, [r5, 0x1E]
subs r0, 0x4C
bl sub_8073A44
bl BattleAnimAdjustPanning
lsls r0, 24
asrs r0, 24
strh r0, [r5, 0x20]
movs r0, 0x3F
bl sub_8073A44
bl BattleAnimAdjustPanning
lsls r0, 24
asrs r0, 24
strh r0, [r5, 0x22]
+38 -38
View File
@@ -13,14 +13,14 @@ unc_080B08A0: @ 80B08A0
movs r0, 0
ldrsh r1, [r5, r0]
adds r0, r4, 0
bl sub_8074FF8
bl SetAnimSpriteInitialXOffset
ldrh r0, [r5, 0x2]
ldrh r1, [r4, 0x22]
adds r0, r1
strh r0, [r4, 0x22]
movs r0, 0xF
strh r0, [r4, 0x2E]
ldr r0, _080B08D4 @ =sub_8074C44
ldr r0, _080B08D4 @ =WaitAnimForDuration
str r0, [r4, 0x1C]
ldr r1, _080B08D8 @ =DestroyAnimSprite
adds r0, r4, 0
@@ -30,7 +30,7 @@ unc_080B08A0: @ 80B08A0
bx r0
.align 2, 0
_080B08D0: .4byte gBattleAnimArgs
_080B08D4: .4byte sub_8074C44
_080B08D4: .4byte WaitAnimForDuration
_080B08D8: .4byte DestroyAnimSprite
thumb_func_end unc_080B08A0
@@ -110,19 +110,19 @@ sub_80B0954: @ 80B0954
bne _080B0978
adds r0, r5, 0
movs r1, 0x1
bl sub_8075160
bl InitSpritePosToAnimAttacker
b _080B0980
.align 2, 0
_080B0974: .4byte gBattleAnimArgs
_080B0978:
adds r0, r5, 0
movs r1, 0x1
bl sub_8075114
bl InitSpritePosToAnimTarget
_080B0980:
ldr r0, _080B0998 @ =gBattleAnimArgs
ldrh r0, [r0, 0x4]
strh r0, [r5, 0x2E]
ldr r0, _080B099C @ =sub_8074C44
ldr r0, _080B099C @ =WaitAnimForDuration
str r0, [r5, 0x1C]
ldr r1, _080B09A0 @ =DestroyAnimSprite
adds r0, r5, 0
@@ -132,7 +132,7 @@ _080B0980:
bx r0
.align 2, 0
_080B0998: .4byte gBattleAnimArgs
_080B099C: .4byte sub_8074C44
_080B099C: .4byte WaitAnimForDuration
_080B09A0: .4byte DestroyAnimSprite
thumb_func_end sub_80B0954
@@ -188,7 +188,7 @@ _080B09E8:
strh r0, [r5, 0x22]
mov r0, r8
movs r1, 0x1
bl sub_8076B2C
bl GetBattlerSpriteCoordAttr
lsls r0, 16
asrs r1, r0, 16
lsrs r0, 31
@@ -197,7 +197,7 @@ _080B09E8:
lsrs r6, r1, 16
mov r0, r8
movs r1, 0
bl sub_8076B2C
bl GetBattlerSpriteCoordAttr
lsls r0, 16
asrs r0, 16
cmp r0, 0
@@ -267,7 +267,7 @@ _080B0A9C:
mov r1, r9
ldrh r0, [r1, 0x2]
strh r0, [r5, 0x2E]
ldr r0, _080B0B1C @ =gUnknown_83E7C08
ldr r0, _080B0B1C @ =gBasicHitSplatSpriteTemplate
movs r2, 0x20
ldrsh r1, [r5, r2]
movs r3, 0x22
@@ -315,7 +315,7 @@ _080B0B00:
_080B0B10: .4byte gBattleAnimTarget
_080B0B14: .4byte gBattlerPositions
_080B0B18: .4byte 0xfff00000
_080B0B1C: .4byte gUnknown_83E7C08
_080B0B1C: .4byte gBasicHitSplatSpriteTemplate
_080B0B20: .4byte gSprites
_080B0B24: .4byte SpriteCallbackDummy
_080B0B28: .4byte sub_80B0B2C
@@ -371,7 +371,7 @@ sub_80B0B80: @ 80B0B80
push {r4,lr}
adds r4, r0, 0
movs r1, 0x1
bl sub_8075114
bl InitSpritePosToAnimTarget
movs r0, 0x1E
strh r0, [r4, 0x2E]
ldr r0, _080B0BA0 @ =gBattleAnimArgs
@@ -480,7 +480,7 @@ sub_80B0C28: @ 80B0C28
_080B0C54:
adds r0, r6, 0
movs r1, 0x1
bl sub_8075114
bl InitSpritePosToAnimTarget
ldr r0, _080B0CA4 @ =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -505,7 +505,7 @@ _080B0C72:
strh r0, [r6, 0x34]
strh r0, [r6, 0x36]
adds r0, r6, 0
bl obj_translate_based_on_private_1_2_3_4
bl InitAnimLinearTranslation
ldrh r0, [r4, 0xA]
strh r0, [r6, 0x38]
ldrh r0, [r4, 0x8]
@@ -527,7 +527,7 @@ _080B0CB0: .4byte sub_80B0CB4
sub_80B0CB4: @ 80B0CB4
push {r4,lr}
adds r4, r0, 0
bl sub_80755E0
bl AnimTranslateLinear
lsls r0, 24
cmp r0, 0
bne _080B0CE0
@@ -559,14 +559,14 @@ sub_80B0CEC: @ 80B0CEC
push {r4,r5,lr}
adds r4, r0, 0
movs r1, 0x1
bl sub_8075114
bl InitSpritePosToAnimTarget
ldr r5, _080B0D18 @ =gBattleAnimArgs
ldrb r1, [r5, 0x4]
adds r0, r4, 0
bl StartSpriteAnim
ldrh r0, [r5, 0x6]
strh r0, [r4, 0x2E]
ldr r0, _080B0D1C @ =sub_8074C44
ldr r0, _080B0D1C @ =WaitAnimForDuration
str r0, [r4, 0x1C]
ldr r1, _080B0D20 @ =sub_80B0D24
adds r0, r4, 0
@@ -576,7 +576,7 @@ sub_80B0CEC: @ 80B0CEC
bx r0
.align 2, 0
_080B0D18: .4byte gBattleAnimArgs
_080B0D1C: .4byte sub_8074C44
_080B0D1C: .4byte WaitAnimForDuration
_080B0D20: .4byte sub_80B0D24
thumb_func_end sub_80B0CEC
@@ -594,7 +594,7 @@ sub_80B0D24: @ 80B0D24
strb r0, [r2]
movs r0, 0x14
strh r0, [r4, 0x2E]
ldr r0, _080B0D50 @ =sub_8074C44
ldr r0, _080B0D50 @ =WaitAnimForDuration
str r0, [r4, 0x1C]
ldr r1, _080B0D54 @ =DestroyAnimSprite
adds r0, r4, 0
@@ -603,7 +603,7 @@ sub_80B0D24: @ 80B0D24
pop {r0}
bx r0
.align 2, 0
_080B0D50: .4byte sub_8074C44
_080B0D50: .4byte WaitAnimForDuration
_080B0D54: .4byte DestroyAnimSprite
thumb_func_end sub_80B0D24
@@ -612,7 +612,7 @@ sub_80B0D58: @ 80B0D58
push {r4,lr}
adds r4, r0, 0
movs r1, 0x1
bl sub_8075114
bl InitSpritePosToAnimTarget
ldr r0, _080B0D74 @ =gBattleAnimArgs
ldrh r0, [r0, 0x4]
strh r0, [r4, 0x2E]
@@ -674,14 +674,14 @@ sub_80B0DD4: @ 80B0DD4
push {lr}
movs r1, 0xF
strh r1, [r0, 0x2E]
ldr r1, _080B0DE8 @ =sub_8074C44
ldr r1, _080B0DE8 @ =WaitAnimForDuration
str r1, [r0, 0x1C]
ldr r1, _080B0DEC @ =DestroyAnimSprite
bl StoreSpriteCallbackInData6
pop {r0}
bx r0
.align 2, 0
_080B0DE8: .4byte sub_8074C44
_080B0DE8: .4byte WaitAnimForDuration
_080B0DEC: .4byte DestroyAnimSprite
thumb_func_end sub_80B0DD4
@@ -695,7 +695,7 @@ sub_80B0DF0: @ 80B0DF0
bne _080B0E1C
adds r0, r4, 0
movs r1, 0x1
bl sub_8075114
bl InitSpritePosToAnimTarget
ldr r1, _080B0E18 @ =gBattleAnimArgs
ldrh r0, [r1, 0x4]
strh r0, [r4, 0x30]
@@ -1052,7 +1052,7 @@ sub_80B107C: @ 80B107C
strh r0, [r5, 0x22]
ldr r0, _080B10D0 @ =gBattleAnimAttacker
ldrb r0, [r0]
bl sub_8076884
bl GetBattlerSpriteBGPriority
movs r1, 0x3
ands r1, r0
lsls r1, 2
@@ -1072,7 +1072,7 @@ _080B10D4: .4byte gBattleAnimTarget
_080B10D8:
ldr r0, _080B1110 @ =gBattleAnimTarget
ldrb r0, [r0]
bl sub_8076884
bl GetBattlerSpriteBGPriority
movs r1, 0x3
ands r1, r0
lsls r1, 2
@@ -1140,8 +1140,8 @@ sub_80B111C: @ 80B111C
lsrs r0, 24
strh r0, [r4, 0x36]
adds r0, r4, 0
bl obj_translate_based_on_private_1_2_3_4
ldr r1, _080B1180 @ =move_anim_8074EE0
bl InitAnimLinearTranslation
ldr r1, _080B1180 @ =DestroySpriteAndMatrix
adds r0, r4, 0
bl StoreSpriteCallbackInData6
ldr r0, _080B1184 @ =sub_807563C
@@ -1151,7 +1151,7 @@ _080B1178:
pop {r0}
bx r0
.align 2, 0
_080B1180: .4byte move_anim_8074EE0
_080B1180: .4byte DestroySpriteAndMatrix
_080B1184: .4byte sub_807563C
thumb_func_end sub_80B111C
@@ -1171,7 +1171,7 @@ sub_80B1188: @ 80B1188
adds r1, r5, 0
adds r1, 0x38
lsls r2, 8
bl sub_80765C0
bl StorePointerInVars
ldrh r0, [r4, 0x2]
strh r0, [r5, 0x3A]
ldrh r2, [r5, 0x4]
@@ -1214,7 +1214,7 @@ sub_80B11E4: @ 80B11E4
ldrsh r0, [r7, r2]
movs r2, 0x38
ldrsh r1, [r7, r2]
bl sub_80765C8
bl LoadPointerFromVars
adds r4, r0, 0
movs r1, 0x3A
ldrsh r0, [r7, r1]
@@ -1224,7 +1224,7 @@ sub_80B11E4: @ 80B11E4
adds r1, r7, 0
adds r1, 0x38
adds r2, r4, 0
bl sub_80765C0
bl StorePointerInVars
asrs r4, 8
strh r4, [r7, 0x22]
lsls r4, 16
@@ -1369,7 +1369,7 @@ _080B132C:
ldr r0, _080B1368 @ =gBattleAnimTarget
_080B1332:
ldrb r0, [r0]
bl sub_8076884
bl GetBattlerSpriteBGPriority
movs r1, 0x3
ands r1, r0
lsls r1, 2
@@ -1431,7 +1431,7 @@ _080B138C:
lsrs r0, 24
strh r0, [r5, 0x36]
adds r0, r5, 0
bl obj_translate_based_on_private_1_2_3_4
bl InitAnimLinearTranslation
ldr r1, _080B13CC @ =DestroyAnimSprite
adds r0, r5, 0
bl StoreSpriteCallbackInData6
@@ -1546,14 +1546,14 @@ sub_80B1484: @ 80B1484
bne _080B14A0
adds r0, r4, 0
movs r1, 0
bl sub_8075160
bl InitSpritePosToAnimAttacker
b _080B14A8
.align 2, 0
_080B149C: .4byte gBattleAnimArgs
_080B14A0:
adds r0, r4, 0
movs r1, 0
bl sub_8075114
bl InitSpritePosToAnimTarget
_080B14A8:
bl IsContest
lsls r0, 24
@@ -1574,7 +1574,7 @@ _080B14BC:
movs r1, 0x1
bl StartSpriteAnim
_080B14D2:
ldr r0, _080B14E8 @ =sub_8074F6C
ldr r0, _080B14E8 @ =RunStoredCallbackWhenAnimEnds
str r0, [r4, 0x1C]
ldr r1, _080B14EC @ =DestroyAnimSprite
adds r0, r4, 0
@@ -1584,7 +1584,7 @@ _080B14D2:
bx r0
.align 2, 0
_080B14E4: .4byte gBattleAnimAttacker
_080B14E8: .4byte sub_8074F6C
_080B14E8: .4byte RunStoredCallbackWhenAnimEnds
_080B14EC: .4byte DestroyAnimSprite
thumb_func_end sub_80B1484
+26 -26
View File
@@ -24,7 +24,7 @@ sub_80AC90C: @ 80AC90C
ldr r1, _080AC944 @ =DestroyAnimSprite
adds r0, r4, 0
bl StoreSpriteCallbackInData6
ldr r1, _080AC948 @ =sub_8074AE0
ldr r1, _080AC948 @ =TranslateSpriteInGrowingCircleOverDuration
str r1, [r4, 0x1C]
adds r0, r4, 0
bl _call_via_r1
@@ -34,7 +34,7 @@ sub_80AC90C: @ 80AC90C
.align 2, 0
_080AC940: .4byte gBattleAnimArgs
_080AC944: .4byte DestroyAnimSprite
_080AC948: .4byte sub_8074AE0
_080AC948: .4byte TranslateSpriteInGrowingCircleOverDuration
thumb_func_end sub_80AC90C
thumb_func_start sub_80AC94C
@@ -45,7 +45,7 @@ sub_80AC94C: @ 80AC94C
movs r0, 0
ldrsh r1, [r5, r0]
adds r0, r4, 0
bl sub_8074FF8
bl SetAnimSpriteInitialXOffset
ldrh r0, [r5, 0x2]
ldrh r1, [r4, 0x22]
adds r0, r1
@@ -56,7 +56,7 @@ sub_80AC94C: @ 80AC94C
strh r0, [r4, 0x30]
ldrh r0, [r5, 0x6]
strh r0, [r4, 0x32]
ldr r0, _080AC988 @ =sub_8074D00
ldr r0, _080AC988 @ =TranslateSpriteLinearFixedPoint
str r0, [r4, 0x1C]
ldr r1, _080AC98C @ =DestroyAnimSprite
adds r0, r4, 0
@@ -66,7 +66,7 @@ sub_80AC94C: @ 80AC94C
bx r0
.align 2, 0
_080AC984: .4byte gBattleAnimArgs
_080AC988: .4byte sub_8074D00
_080AC988: .4byte TranslateSpriteLinearFixedPoint
_080AC98C: .4byte DestroyAnimSprite
thumb_func_end sub_80AC94C
@@ -74,7 +74,7 @@ _080AC98C: .4byte DestroyAnimSprite
sub_80AC990: @ 80AC990
push {r4,lr}
adds r4, r0, 0
bl sub_8074FCC
bl SetSpriteCoordsToAnimAttackerCoords
ldr r0, _080AC9C4 @ =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -212,7 +212,7 @@ _080ACA92:
cmp r1, r0
bne _080ACAA4
adds r0, r2, 0
bl move_anim_8074EE0
bl DestroySpriteAndMatrix
_080ACAA4:
pop {r0}
bx r0
@@ -222,7 +222,7 @@ _080ACAA4:
sub_80ACAA8: @ 80ACAA8
push {r4,lr}
adds r4, r0, 0
bl sub_8074FCC
bl SetSpriteCoordsToAnimAttackerCoords
ldr r0, _080ACACC @ =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -348,7 +348,7 @@ _080ACB9C:
b _080ACBAA
_080ACBA4:
adds r0, r4, 0
bl move_anim_8074EE0
bl DestroySpriteAndMatrix
_080ACBAA:
pop {r4}
pop {r0}
@@ -449,7 +449,7 @@ sub_80ACC60: @ 80ACC60
push {r4,lr}
adds r4, r0, 0
movs r1, 0x1
bl sub_8075160
bl InitSpritePosToAnimAttacker
ldr r0, _080ACC80 @ =gBattleAnimArgs
ldrh r0, [r0, 0x4]
movs r1, 0
@@ -497,7 +497,7 @@ sub_80ACC88: @ 80ACC88
lsrs r0, 24
strh r0, [r5, 0x36]
adds r0, r5, 0
bl obj_translate_based_on_private_1_2_3_4
bl InitAnimLinearTranslation
ldr r0, _080ACCDC @ =sub_80ACCE0
str r0, [r5, 0x1C]
_080ACCD2:
@@ -513,7 +513,7 @@ _080ACCDC: .4byte sub_80ACCE0
sub_80ACCE0: @ 80ACCE0
push {r4-r6,lr}
adds r6, r0, 0
bl sub_80755E0
bl AnimTranslateLinear
lsls r0, 24
cmp r0, 0
beq _080ACD28
@@ -634,7 +634,7 @@ sub_80ACDA8: @ 80ACDA8
ldr r1, _080ACDE0 @ =DestroyAnimSprite
adds r0, r4, 0
bl StoreSpriteCallbackInData6
ldr r0, _080ACDE4 @ =sub_8074CD0
ldr r0, _080ACDE4 @ =TranslateSpriteLinear
str r0, [r4, 0x1C]
pop {r4}
pop {r0}
@@ -642,7 +642,7 @@ sub_80ACDA8: @ 80ACDA8
.align 2, 0
_080ACDDC: .4byte gBattleAnimArgs
_080ACDE0: .4byte DestroyAnimSprite
_080ACDE4: .4byte sub_8074CD0
_080ACDE4: .4byte TranslateSpriteLinear
thumb_func_end sub_80ACDA8
thumb_func_start sub_80ACDE8
@@ -650,7 +650,7 @@ sub_80ACDE8: @ 80ACDE8
push {r4,lr}
adds r4, r0, 0
movs r1, 0x1
bl sub_8075160
bl InitSpritePosToAnimAttacker
ldr r1, _080ACE1C @ =gBattleAnimArgs
ldrh r0, [r1, 0x4]
strh r0, [r4, 0x30]
@@ -662,7 +662,7 @@ sub_80ACDE8: @ 80ACDE8
movs r1, 0x4
orrs r0, r1
strb r0, [r2]
ldr r0, _080ACE20 @ =sub_8074C44
ldr r0, _080ACE20 @ =WaitAnimForDuration
str r0, [r4, 0x1C]
ldr r1, _080ACE24 @ =sub_80ACE28
adds r0, r4, 0
@@ -672,7 +672,7 @@ sub_80ACDE8: @ 80ACDE8
bx r0
.align 2, 0
_080ACE1C: .4byte gBattleAnimArgs
_080ACE20: .4byte sub_8074C44
_080ACE20: .4byte WaitAnimForDuration
_080ACE24: .4byte sub_80ACE28
thumb_func_end sub_80ACDE8
@@ -753,7 +753,7 @@ sub_80ACEA4: @ 80ACEA4
ldr r0, _080ACF04 @ =gTasks
adds r4, r0
movs r0, 0
bl GetAnimBankSpriteId
bl GetAnimBattlerSpriteId
lsls r0, 24
lsrs r0, 24
movs r5, 0
@@ -923,7 +923,7 @@ _080AD00C:
ldrh r0, [r4, 0x26]
lsls r0, 24
lsrs r0, 24
bl sub_8076440
bl SetBattlerSpriteYOffsetFromYScale
ldr r2, _080AD030 @ =gSprites
movs r0, 0x26
ldrsh r1, [r4, r0]
@@ -1635,7 +1635,7 @@ _080AD556:
_080AD55C:
adds r0, r5, 0
movs r1, 0
bl sub_8075160
bl InitSpritePosToAnimAttacker
ldr r4, _080AD584 @ =gBattleAnimArgs
ldrb r1, [r4, 0x4]
adds r0, r5, 0
@@ -1659,7 +1659,7 @@ _080AD58E:
strh r0, [r5, 0x36]
ldr r0, _080AD5B0 @ =gBattleAnimTarget
ldrb r0, [r0]
bl sub_8076884
bl GetBattlerSpriteBGPriority
movs r1, 0x3
ands r1, r0
lsls r1, 2
@@ -1787,7 +1787,7 @@ _080AD68C: .4byte sub_80AD690
sub_80AD690: @ 80AD690
push {r4,lr}
adds r4, r0, 0
bl sub_80755E0
bl AnimTranslateLinear
lsls r0, 24
cmp r0, 0
bne _080AD6E8
@@ -1889,7 +1889,7 @@ _080AD70C:
bls _080AD780
ldr r0, _080AD77C @ =gBattleAnimTarget
ldrb r0, [r0]
bl sub_8076884
bl GetBattlerSpriteBGPriority
movs r1, 0x3
ands r1, r0
lsls r1, 2
@@ -1906,7 +1906,7 @@ _080AD77C: .4byte gBattleAnimTarget
_080AD780:
ldr r0, _080AD7A4 @ =gBattleAnimTarget
ldrb r0, [r0]
bl sub_8076884
bl GetBattlerSpriteBGPriority
lsls r0, 24
lsrs r0, 24
adds r0, 0x1
@@ -2005,12 +2005,12 @@ _080AD826:
adds r0, 0x1
strh r0, [r4, 0x22]
movs r0, 0x1
bl GetAnimBankSpriteId
bl GetAnimBattlerSpriteId
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x24]
movs r0, 0x3
bl GetAnimBankSpriteId
bl GetAnimBattlerSpriteId
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x26]
-2945
View File
File diff suppressed because it is too large Load Diff
-4054
View File
File diff suppressed because it is too large Load Diff
-1787
View File
File diff suppressed because it is too large Load Diff
+51 -51
View File
@@ -365,7 +365,7 @@ sub_80AF2F0: @ 80AF2F0
ldr r1, _080AF328 @ =DestroyAnimSprite
adds r0, r4, 0
bl StoreSpriteCallbackInData6
ldr r1, _080AF32C @ =sub_8074AE0
ldr r1, _080AF32C @ =TranslateSpriteInGrowingCircleOverDuration
str r1, [r4, 0x1C]
adds r0, r4, 0
bl _call_via_r1
@@ -375,7 +375,7 @@ sub_80AF2F0: @ 80AF2F0
.align 2, 0
_080AF324: .4byte gBattleAnimArgs
_080AF328: .4byte DestroyAnimSprite
_080AF32C: .4byte sub_8074AE0
_080AF32C: .4byte TranslateSpriteInGrowingCircleOverDuration
thumb_func_end sub_80AF2F0
thumb_func_start sub_80AF330
@@ -383,7 +383,7 @@ sub_80AF330: @ 80AF330
push {r4,lr}
adds r4, r0, 0
movs r1, 0x1
bl sub_8075160
bl InitSpritePosToAnimAttacker
ldr r0, _080AF364 @ =gBattleAnimTarget
ldrb r0, [r0]
movs r1, 0x2
@@ -452,7 +452,7 @@ sub_80AF3B8: @ 80AF3B8
bne _080AF3D4
adds r0, r4, 0
movs r1, 0x1
bl sub_8075114
bl InitSpritePosToAnimTarget
b _080AF40A
.align 2, 0
_080AF3D0: .4byte gBattleAnimArgs
@@ -464,7 +464,7 @@ _080AF3D4:
adds r3, r4, 0
adds r3, 0x22
movs r1, 0x1
bl sub_8076D9C
bl SetAverageBattlerPositions
ldr r0, _080AF420 @ =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -487,7 +487,7 @@ _080AF40A:
ldr r1, _080AF424 @ =sub_80AF42C
adds r0, r4, 0
bl StoreSpriteCallbackInData6
ldr r0, _080AF428 @ =sub_8074F50
ldr r0, _080AF428 @ =RunStoredCallbackWhenAffineAnimEnds
str r0, [r4, 0x1C]
pop {r4,r5}
pop {r0}
@@ -496,7 +496,7 @@ _080AF40A:
_080AF41C: .4byte gBattleAnimTarget
_080AF420: .4byte gBattleAnimAttacker
_080AF424: .4byte sub_80AF42C
_080AF428: .4byte sub_8074F50
_080AF428: .4byte RunStoredCallbackWhenAffineAnimEnds
thumb_func_end sub_80AF3B8
thumb_func_start sub_80AF42C
@@ -526,7 +526,7 @@ sub_80AF42C: @ 80AF42C
cmp r0, 0x14
bne _080AF462
adds r0, r3, 0
bl move_anim_8074EE0
bl DestroySpriteAndMatrix
_080AF462:
pop {r0}
bx r0
@@ -538,7 +538,7 @@ sub_80AF468: @ 80AF468
sub sp, 0x10
adds r5, r0, 0
movs r1, 0x1
bl sub_8075160
bl InitSpritePosToAnimAttacker
ldr r6, _080AF4B0 @ =gBattleAnimArgs
ldrh r0, [r6, 0x8]
strh r0, [r5, 0x2E]
@@ -577,7 +577,7 @@ _080AF4B8:
adds r3, r5, 0
adds r3, 0x36
movs r1, 0x1
bl sub_8076D9C
bl SetAverageBattlerPositions
_080AF4CA:
ldr r0, _080AF4E8 @ =gBattleAnimAttacker
ldrb r0, [r0]
@@ -616,7 +616,7 @@ _080AF504:
cmp r4, 0
bge _080AF504
adds r0, r5, 0
bl sub_8075804
bl InitAnimFastLinearTranslationWithSpeed
ldrh r0, [r5, 0x30]
movs r1, 0x1
eors r0, r1
@@ -628,7 +628,7 @@ _080AF526:
movs r0, 0x1
strh r0, [r5, 0x2E]
adds r0, r5, 0
bl sub_807578C
bl AnimFastTranslateLinear
movs r0, 0x20
ldrsh r1, [r5, r0]
movs r2, 0x24
@@ -814,7 +814,7 @@ sub_80AF690: @ 80AF690
movs r0, 0x1
strh r0, [r4, 0x2E]
adds r0, r4, 0
bl sub_807578C
bl AnimFastTranslateLinear
movs r1, 0x20
ldrsh r0, [r4, r1]
movs r2, 0x24
@@ -853,7 +853,7 @@ sub_80AF6D8: @ 80AF6D8
sub sp, 0x10
adds r5, r0, 0
movs r1, 0x1
bl sub_8075160
bl InitSpritePosToAnimAttacker
ldr r1, _080AF71C @ =gBattleAnimArgs
ldrh r0, [r1, 0x8]
strh r0, [r5, 0x2E]
@@ -890,7 +890,7 @@ _080AF724:
adds r3, r5, 0
adds r3, 0x36
movs r1, 0x1
bl sub_8076D9C
bl SetAverageBattlerPositions
_080AF736:
ldr r0, _080AF758 @ =gBattleAnimAttacker
ldrb r0, [r0]
@@ -921,7 +921,7 @@ _080AF76A:
adds r0, r1
strh r0, [r5, 0x36]
adds r0, r5, 0
bl sub_8075804
bl InitAnimFastLinearTranslationWithSpeed
adds r7, r5, 0
adds r7, 0x2E
adds r2, r7, 0
@@ -946,7 +946,7 @@ _080AF79E:
movs r0, 0x1
strh r0, [r5, 0x2E]
adds r0, r5, 0
bl sub_807578C
bl AnimFastTranslateLinear
movs r2, 0x20
ldrsh r1, [r5, r2]
movs r2, 0x24
@@ -1011,7 +1011,7 @@ _080AF818: .4byte sub_80AF81C
sub_80AF81C: @ 80AF81C
push {r4,lr}
adds r4, r0, 0
bl sub_807578C
bl AnimFastTranslateLinear
movs r1, 0x2E
ldrsh r0, [r4, r1]
cmp r0, 0
@@ -1082,7 +1082,7 @@ sub_80AF88C: @ 80AF88C
bne _080AF8B0
adds r0, r4, 0
movs r1, 0
bl sub_8075114
bl InitSpritePosToAnimTarget
b _080AF8E6
.align 2, 0
_080AF8AC: .4byte gBattleAnimArgs
@@ -1094,7 +1094,7 @@ _080AF8B0:
adds r3, r4, 0
adds r3, 0x22
movs r1, 0
bl sub_8076D9C
bl SetAverageBattlerPositions
ldr r0, _080AF8F4 @ =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -1152,7 +1152,7 @@ sub_80AF914: @ 80AF914
bne _080AF938
adds r0, r5, 0
movs r1, 0
bl sub_8075160
bl InitSpritePosToAnimAttacker
b _080AF976
.align 2, 0
_080AF934: .4byte gBattleAnimArgs
@@ -1164,7 +1164,7 @@ _080AF938:
adds r3, r5, 0
adds r3, 0x22
movs r1, 0
bl sub_8076D9C
bl SetAverageBattlerPositions
ldrb r0, [r4]
bl GetBattlerSide
lsls r0, 24
@@ -1200,7 +1200,7 @@ _080AF984:
bne _080AF996
adds r0, r5, 0
movs r1, 0
bl sub_8075114
bl InitSpritePosToAnimTarget
b _080AF9D2
_080AF996:
ldr r4, _080AF9BC @ =gBattleAnimTarget
@@ -1210,7 +1210,7 @@ _080AF996:
adds r3, r5, 0
adds r3, 0x22
movs r1, 0
bl sub_8076D9C
bl SetAverageBattlerPositions
ldrb r0, [r4]
bl GetBattlerSide
lsls r0, 24
@@ -1279,7 +1279,7 @@ _080AFA10:
adds r0, r1
strh r0, [r5, 0x36]
adds r0, r5, 0
bl obj_translate_based_on_private_1_2_3_4
bl InitAnimLinearTranslation
movs r0, 0x40
strh r0, [r5, 0x38]
ldr r1, _080AFA48 @ =sub_80AFA4C
@@ -1299,7 +1299,7 @@ _080AFA48: .4byte sub_80AFA4C
sub_80AFA4C: @ 80AFA4C
push {r4,lr}
adds r4, r0, 0
bl sub_80755E0
bl AnimTranslateLinear
lsls r0, 24
cmp r0, 0
bne _080AFAD6
@@ -1328,7 +1328,7 @@ sub_80AFA4C: @ 80AFA4C
ldrh r0, [r4, 0x3C]
lsls r0, 24
lsrs r0, 24
bl sub_8076884
bl GetBattlerSpriteBGPriority
movs r1, 0x3
ands r1, r0
lsls r1, 2
@@ -1343,7 +1343,7 @@ _080AFAA8:
ldrh r0, [r4, 0x3C]
lsls r0, 24
lsrs r0, 24
bl sub_8076884
bl GetBattlerSpriteBGPriority
lsls r0, 24
lsrs r0, 24
adds r0, 0x1
@@ -1426,7 +1426,7 @@ _080AFB26:
mov r0, sp
ldrb r0, [r0, 0x9]
ldr r1, _080AFBB0 @ =gFile_graphics_battle_anims_backgrounds_fog_tilemap
bl sub_807543C
bl AnimLoadCompressedBgTilemap
ldr r0, _080AFBB4 @ =gUnknown_83C2CE0
mov r1, sp
ldrb r1, [r1, 0x8]
@@ -1673,14 +1673,14 @@ sub_80AFD4C: @ 80AFD4C
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x22]
ldr r0, _080AFD7C @ =sub_8075DF4
ldr r0, _080AFD7C @ =TranslateAnimSpriteToTargetMonLocation
str r0, [r4, 0x1C]
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080AFD78: .4byte gBattleAnimAttacker
_080AFD7C: .4byte sub_8075DF4
_080AFD7C: .4byte TranslateAnimSpriteToTargetMonLocation
thumb_func_end sub_80AFD4C
thumb_func_start sub_80AFD80
@@ -1737,7 +1737,7 @@ _080AFDC2:
mov r0, sp
ldrb r0, [r0, 0x9]
ldr r1, _080AFE50 @ =gFile_graphics_battle_anims_backgrounds_fog_tilemap
bl sub_807543C
bl AnimLoadCompressedBgTilemap
ldr r0, _080AFE54 @ =gUnknown_83C2CE0
mov r1, sp
ldrb r1, [r1, 0x8]
@@ -2015,7 +2015,7 @@ _080B0008:
cmp r0, 0
bne _080B0064
movs r0, 0x1
bl GetAnimBankSpriteId
bl GetAnimBattlerSpriteId
ldr r2, _080B00CC @ =gSprites
lsls r0, 24
lsrs r0, 24
@@ -2105,7 +2105,7 @@ _080B00F8:
adds r0, r6
strh r0, [r5, 0x36]
ldrb r0, [r4]
bl sub_8076884
bl GetBattlerSpriteBGPriority
lsls r0, 24
lsrs r0, 16
ldrh r1, [r5, 0x3C]
@@ -2123,7 +2123,7 @@ _080B00F8:
strb r0, [r1]
_080B012C:
adds r0, r5, 0
bl obj_translate_based_on_private_1_2_3_4
bl InitAnimLinearTranslation
ldr r0, _080B0144 @ =sub_80B0148
str r0, [r5, 0x1C]
pop {r3}
@@ -2159,7 +2159,7 @@ _080B0168:
b _080B0380
_080B016A:
adds r0, r4, 0
bl sub_80755E0
bl AnimTranslateLinear
ldr r1, _080B0194 @ =gSineTable
movs r2, 0x38
ldrsh r0, [r4, r2]
@@ -2251,13 +2251,13 @@ _080B0202:
ands r0, r1
strh r0, [r4, 0x38]
adds r0, r4, 0
bl obj_translate_based_on_private_1_2_3_4
bl InitAnimLinearTranslation
b _080B0380
.align 2, 0
_080B022C: .4byte gSineTable
_080B0230:
adds r0, r4, 0
bl sub_80755E0
bl AnimTranslateLinear
ldr r1, _080B028C @ =gSineTable
movs r2, 0x38
ldrsh r0, [r4, r2]
@@ -2397,7 +2397,7 @@ _080B032A:
_080B0340: .4byte 0x0000fff0
_080B0344:
adds r0, r4, 0
bl sub_80755E0
bl AnimTranslateLinear
lsls r0, 24
cmp r0, 0
beq _080B0380
@@ -2420,7 +2420,7 @@ _080B0344:
_080B0372:
adds r0, r4, 0
bl DestroySprite
ldr r1, _080B0388 @ =gUnknown_2037EE2
ldr r1, _080B0388 @ =gAnimVisualTaskCount
ldrb r0, [r1]
subs r0, 0x1
strb r0, [r1]
@@ -2429,7 +2429,7 @@ _080B0380:
pop {r0}
bx r0
.align 2, 0
_080B0388: .4byte gUnknown_2037EE2
_080B0388: .4byte gAnimVisualTaskCount
thumb_func_end sub_80B0148
thumb_func_start sub_80B038C
@@ -2610,7 +2610,7 @@ _080B04D0: .4byte gUnknown_83E652C
_080B04D4:
adds r0, r5, 0
movs r1, 0x1
bl sub_8076B2C
bl GetBattlerSpriteCoordAttr
lsls r0, 16
asrs r0, 16
movs r1, 0x6
@@ -2622,7 +2622,7 @@ _080B04D4:
lsrs r7, r1, 16
adds r0, r5, 0
movs r1, 0
bl sub_8076B2C
bl GetBattlerSpriteCoordAttr
lsls r0, 16
asrs r0, 16
movs r1, 0x6
@@ -2634,7 +2634,7 @@ _080B04D4:
_080B050A:
adds r0, r5, 0
movs r1, 0x1
bl sub_8076B2C
bl GetBattlerSpriteCoordAttr
lsls r0, 16
asrs r0, 16
movs r1, 0x6
@@ -2646,7 +2646,7 @@ _080B050A:
lsrs r7, r1, 16
adds r0, r5, 0
movs r1, 0
bl sub_8076B2C
bl GetBattlerSpriteCoordAttr
lsls r0, 16
asrs r0, 16
movs r1, 0x6
@@ -2904,7 +2904,7 @@ _080B071A:
bl StartSpriteAffineAnim
adds r0, r5, 0
movs r1, 0x1
bl sub_8075160
bl InitSpritePosToAnimAttacker
ldr r6, _080B0780 @ =gBattleAnimArgs
ldrh r0, [r6, 0x8]
strh r0, [r5, 0x2E]
@@ -2938,7 +2938,7 @@ _080B0742:
ldrh r0, [r6, 0xA]
strh r0, [r5, 0x38]
adds r0, r5, 0
bl sub_8075068
bl InitAnimArcTranslation
ldr r0, _080B078C @ =sub_80B0790
str r0, [r5, 0x1C]
pop {r4-r6}
@@ -2956,14 +2956,14 @@ _080B078C: .4byte sub_80B0790
sub_80B0790: @ 80B0790
push {r4,lr}
adds r4, r0, 0
bl AnimateBallThrow
bl TranslateAnimHorizontalArc
lsls r0, 24
cmp r0, 0
beq _080B07B2
adds r0, r4, 0
movs r1, 0x1
bl StartSpriteAnim
ldr r0, _080B07B8 @ =sub_8074F6C
ldr r0, _080B07B8 @ =RunStoredCallbackWhenAnimEnds
str r0, [r4, 0x1C]
ldr r1, _080B07BC @ =DestroyAnimSprite
adds r0, r4, 0
@@ -2973,7 +2973,7 @@ _080B07B2:
pop {r0}
bx r0
.align 2, 0
_080B07B8: .4byte sub_8074F6C
_080B07B8: .4byte RunStoredCallbackWhenAnimEnds
_080B07BC: .4byte DestroyAnimSprite
thumb_func_end sub_80B0790
@@ -2994,7 +2994,7 @@ sub_80B07C0: @ 80B07C0
strh r0, [r4, 0x4]
adds r0, r4, 0
movs r1, 0x1
bl sub_8075114
bl InitSpritePosToAnimTarget
bl Random
movs r5, 0xFF
ands r5, r0
-1978
View File
File diff suppressed because it is too large Load Diff
+47 -11
View File
@@ -20,7 +20,7 @@ sub_80B1620: @ 80B1620
_080B1636:
adds r0, r5, 0
movs r1, 0x1
bl sub_8075160
bl InitSpritePosToAnimAttacker
ldrh r0, [r4, 0x4]
strh r0, [r5, 0x2E]
ldr r4, _080B1678 @ =gBattleAnimTarget
@@ -39,7 +39,7 @@ _080B1636:
ldr r0, _080B167C @ =0x0000ffe2
strh r0, [r5, 0x38]
adds r0, r5, 0
bl sub_8075068
bl InitAnimArcTranslation
ldr r0, _080B1680 @ =sub_80B1684
str r0, [r5, 0x1C]
pop {r4,r5}
@@ -56,7 +56,7 @@ _080B1680: .4byte sub_80B1684
sub_80B1684: @ 80B1684
push {r4,lr}
adds r4, r0, 0
bl AnimateBallThrow
bl TranslateAnimHorizontalArc
lsls r0, 24
cmp r0, 0
beq _080B1698
@@ -84,7 +84,7 @@ sub_80B16A0: @ 80B16A0
_080B16B8:
adds r0, r4, 0
movs r1, 0x1
bl sub_8075160
bl InitSpritePosToAnimAttacker
ldr r0, _080B1718 @ =gBattleAnimTarget
ldrb r0, [r0]
mov r6, sp
@@ -92,7 +92,7 @@ _080B16B8:
movs r1, 0x1
mov r2, sp
adds r3, r6, 0
bl sub_8076D9C
bl SetAverageBattlerPositions
ldr r0, _080B171C @ =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -117,7 +117,7 @@ _080B16E6:
ldr r0, _080B1720 @ =0x0000ffe2
strh r0, [r4, 0x38]
adds r0, r4, 0
bl sub_8075068
bl InitAnimArcTranslation
ldr r0, _080B1724 @ =sub_80B1728
str r0, [r4, 0x1C]
add sp, 0x4
@@ -136,7 +136,7 @@ _080B1724: .4byte sub_80B1728
sub_80B1728: @ 80B1728
push {r4,lr}
adds r4, r0, 0
bl AnimateBallThrow
bl TranslateAnimHorizontalArc
lsls r0, 24
cmp r0, 0
beq _080B173C
@@ -193,7 +193,7 @@ _080B1794: .4byte sub_80B1798
sub_80B1798: @ 80B1798
push {r4,lr}
adds r4, r0, 0
bl sub_8074D00
bl TranslateSpriteLinearFixedPoint
ldrh r0, [r4, 0x30]
ldrh r1, [r4, 0x38]
subs r0, r1
@@ -225,7 +225,7 @@ sub_80B17C4: @ 80B17C4
adds r3, r4, 0
adds r3, 0x22
movs r1, 0x1
bl sub_8076D9C
bl SetAverageBattlerPositions
ldr r0, _080B1828 @ =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -280,7 +280,7 @@ sub_80B1838: @ 80B1838
bne _080B1854
adds r0, r4, 0
movs r1, 0x1
bl sub_8075114
bl InitSpritePosToAnimTarget
b _080B188A
.align 2, 0
_080B1850: .4byte gBattleAnimArgs
@@ -292,7 +292,7 @@ _080B1854:
adds r3, r4, 0
adds r3, 0x22
movs r1, 0x1
bl sub_8076D9C
bl SetAverageBattlerPositions
ldr r0, _080B1898 @ =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -323,4 +323,40 @@ _080B1898: .4byte gBattleAnimAttacker
_080B189C: .4byte sub_80B18A0
thumb_func_end sub_80B1838
thumb_func_start sub_80B18A0
sub_80B18A0: @ 80B18A0
push {r4,lr}
adds r4, r0, 0
ldrh r0, [r4, 0x2E]
adds r0, 0xB
movs r1, 0xFF
ands r0, r1
strh r0, [r4, 0x2E]
movs r1, 0x2E
ldrsh r0, [r4, r1]
movs r1, 0x4
bl Sin
strh r0, [r4, 0x24]
ldrh r0, [r4, 0x30]
adds r0, 0x30
strh r0, [r4, 0x30]
lsls r0, 16
asrs r0, 24
negs r0, r0
strh r0, [r4, 0x26]
adds r0, r4, 0
adds r0, 0x3F
ldrb r1, [r0]
movs r0, 0x20
ands r0, r1
cmp r0, 0
beq _080B18DC
adds r0, r4, 0
bl DestroyAnimSprite
_080B18DC:
pop {r4}
pop {r0}
bx r0
thumb_func_end sub_80B18A0
.align 2, 0 @ Don't pad with nop.
+8 -8
View File
@@ -290,7 +290,7 @@ _0804AB6C:
ldr r0, _0804ABC8 @ =0x0000ffd8
strh r0, [r4, 0x38]
adds r0, r4, 0
bl sub_8075068
bl InitAnimArcTranslation
mov r0, sp
ldrh r0, [r0]
strh r0, [r4, 0x6]
@@ -328,7 +328,7 @@ SpriteCB_TestBallThrow: @ 804ABD4
push {r7}
sub sp, 0x4
adds r7, r0, 0
bl AnimateBallThrow
bl TranslateAnimHorizontalArc
lsls r0, 24
cmp r0, 0
beq _0804AC74
@@ -1692,7 +1692,7 @@ SpriteCB_PlayerMonSendOut_1: @ 804B684
ldrh r0, [r4, 0x3A]
strh r0, [r4, 0x6]
adds r0, r4, 0
bl sub_8075068
bl InitAnimArcTranslation
ldr r0, _0804B6D0 @ =SpriteCB_PlayerMonSendOut_2
str r0, [r4, 0x1C]
pop {r4}
@@ -1754,7 +1754,7 @@ SpriteCB_PlayerMonSendOut_2: @ 804B6D4
_0804B736:
ldrh r4, [r5, 0x2E]
adds r0, r5, 0
bl sub_80755E0
bl AnimTranslateLinear
movs r1, 0x3A
ldrsh r0, [r5, r1]
movs r1, 0x3
@@ -1825,7 +1825,7 @@ _0804B78E:
b _0804B834
_0804B7C8:
adds r0, r5, 0
bl AnimateBallThrow
bl TranslateAnimHorizontalArc
lsls r0, 24
cmp r0, 0
beq _0804B834
@@ -2580,13 +2580,13 @@ _0804BD80:
_0804BD84: .4byte SpriteCallbackDummy
thumb_func_end sub_804BD6C
thumb_func_start DestroySpriteAndFreeResources_
DestroySpriteAndFreeResources_: @ 804BD88
thumb_func_start DestroySpriteAndFreeResources2
DestroySpriteAndFreeResources2: @ 804BD88
push {lr}
bl DestroySpriteAndFreeResources
pop {r0}
bx r0
thumb_func_end DestroySpriteAndFreeResources_
thumb_func_end DestroySpriteAndFreeResources2
thumb_func_start sub_804BD94
sub_804BD94: @ 804BD94
+2 -2
View File
@@ -6157,7 +6157,7 @@ sub_814A8B8: @ 814A8B8
movs r6, 0
cmp r6, r10
bge _0814A922
ldr r0, _0814A938 @ =gUnknown_82349CC
ldr r0, _0814A938 @ =gMonFrontPicCoords
mov r9, r0
ldr r1, _0814A93C @ =gUnknown_203F3D8
mov r8, r1
@@ -6200,7 +6200,7 @@ _0814A922:
bx r0
.align 2, 0
_0814A934: .4byte gUnknown_846D9D4
_0814A938: .4byte gUnknown_82349CC
_0814A938: .4byte gMonFrontPicCoords
_0814A93C: .4byte gUnknown_203F3D8
thumb_func_end sub_814A8B8
+1 -1
View File
@@ -10728,7 +10728,7 @@ sub_8139D90: @ 8139D90
lsls r0, 2
ldr r1, _08139DB8 @ =gSprites
adds r0, r1
bl DestroySpriteAndFreeResources_
bl DestroySpriteAndFreeResources2
pop {r0}
bx r0
.align 2, 0
-2180
View File
File diff suppressed because it is too large Load Diff
-1558
View File
File diff suppressed because it is too large Load Diff
+8 -8
View File
@@ -9300,7 +9300,7 @@ _0805139C:
adds r1, r0
lsls r1, 2
adds r1, r3
ldr r2, _08051410 @ =gUnknown_82349CC
ldr r2, _08051410 @ =gMonFrontPicCoords
adds r0, r4, 0
adds r0, 0xF0
ldrh r0, [r0]
@@ -9324,7 +9324,7 @@ _0805139C:
.align 2, 0
_08051408: .4byte gSprites
_0805140C: .4byte 0x0000ff4c
_08051410: .4byte gUnknown_82349CC
_08051410: .4byte gMonFrontPicCoords
_08051414:
ldr r5, [r7]
adds r6, r5, 0
@@ -10839,7 +10839,7 @@ _08052070:
adds r1, r0
lsls r1, 2
adds r1, r4
ldr r3, _08052120 @ =gUnknown_82349CC
ldr r3, _08052120 @ =gMonFrontPicCoords
adds r2, 0xF2
ldrh r0, [r2]
lsls r0, 2
@@ -10906,7 +10906,7 @@ _08052070:
b _080522AC
.align 2, 0
_0805211C: .4byte gSprites
_08052120: .4byte gUnknown_82349CC
_08052120: .4byte gMonFrontPicCoords
_08052124: .4byte 0x000fffff
_08052128:
movs r1, 0xAA
@@ -11476,7 +11476,7 @@ _0805278C:
adds r1, r0
lsls r1, 2
adds r1, r3
ldr r2, _08052800 @ =gUnknown_82349CC
ldr r2, _08052800 @ =gMonFrontPicCoords
adds r0, r4, 0
adds r0, 0xF0
ldrh r0, [r0]
@@ -11500,7 +11500,7 @@ _0805278C:
.align 2, 0
_080527F8: .4byte gSprites
_080527FC: .4byte 0x0000ff4c
_08052800: .4byte gUnknown_82349CC
_08052800: .4byte gMonFrontPicCoords
_08052804:
ldr r5, [r7]
adds r6, r5, 0
@@ -13064,7 +13064,7 @@ _080534CC:
adds r1, r0
lsls r1, 2
adds r1, r4
ldr r3, _0805357C @ =gUnknown_82349CC
ldr r3, _0805357C @ =gMonFrontPicCoords
adds r2, 0xF2
ldrh r0, [r2]
lsls r0, 2
@@ -13131,7 +13131,7 @@ _080534CC:
b _08053708
.align 2, 0
_08053578: .4byte gSprites
_0805357C: .4byte gUnknown_82349CC
_0805357C: .4byte gMonFrontPicCoords
_08053580: .4byte 0x000fffff
_08053584:
movs r1, 0xAA
+32 -32
View File
@@ -197,7 +197,7 @@ _080AAD10:
lsrs r0, 24
strh r0, [r6, 0x36]
adds r0, r6, 0
bl obj_translate_based_on_private_1_2_3_4
bl InitAnimLinearTranslation
ldr r0, _080AADAC @ =SpriteCallbackDummy
bl CreateInvisibleSpriteWithCallback
adds r4, r0, 0
@@ -273,7 +273,7 @@ sub_80AADB8: @ 80AADB8
movs r0, 0x1
strh r0, [r5, 0x2E]
adds r0, r5, 0
bl sub_80755E0
bl AnimTranslateLinear
mov r1, r8
lsrs r6, r1, 8
movs r0, 0x2E
@@ -329,14 +329,14 @@ sub_80AAE40: @ 80AAE40
negs r1, r1
ands r1, r2
strb r1, [r3]
ldr r1, _080AAE60 @ =sub_8074F6C
ldr r1, _080AAE60 @ =RunStoredCallbackWhenAnimEnds
str r1, [r0, 0x1C]
ldr r1, _080AAE64 @ =sub_80AAE68
bl StoreSpriteCallbackInData6
pop {r0}
bx r0
.align 2, 0
_080AAE60: .4byte sub_8074F6C
_080AAE60: .4byte RunStoredCallbackWhenAnimEnds
_080AAE64: .4byte sub_80AAE68
thumb_func_end sub_80AAE40
@@ -345,15 +345,15 @@ sub_80AAE68: @ 80AAE68
push {lr}
movs r1, 0xA
strh r1, [r0, 0x2E]
ldr r1, _080AAE7C @ =sub_8074C44
ldr r1, _080AAE7C @ =WaitAnimForDuration
str r1, [r0, 0x1C]
ldr r1, _080AAE80 @ =move_anim_8074EE0
ldr r1, _080AAE80 @ =DestroySpriteAndMatrix
bl StoreSpriteCallbackInData6
pop {r0}
bx r0
.align 2, 0
_080AAE7C: .4byte sub_8074C44
_080AAE80: .4byte move_anim_8074EE0
_080AAE7C: .4byte WaitAnimForDuration
_080AAE80: .4byte DestroySpriteAndMatrix
thumb_func_end sub_80AAE68
thumb_func_start sub_80AAE84
@@ -361,7 +361,7 @@ sub_80AAE84: @ 80AAE84
push {r4-r7,lr}
adds r5, r0, 0
movs r1, 0x1
bl sub_8075160
bl InitSpritePosToAnimAttacker
ldr r0, _080AAEAC @ =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -406,7 +406,7 @@ _080AAEBA:
adds r0, r7
strh r0, [r5, 0x36]
adds r0, r5, 0
bl obj_translate_based_on_private_1_2_3_4
bl InitAnimLinearTranslation
ldr r0, _080AAF18 @ =sub_80AAF1C
str r0, [r5, 0x1C]
adds r2, r5, 0
@@ -447,7 +447,7 @@ sub_80AAF1C: @ 80AAF1C
strb r0, [r2]
_080AAF3E:
adds r0, r4, 0
bl sub_80755E0
bl AnimTranslateLinear
lsls r0, 24
cmp r0, 0
beq _080AAF50
@@ -569,7 +569,7 @@ sub_80AB024: @ 80AB024
push {r4,r5,lr}
adds r5, r0, 0
movs r1, 0x1
bl sub_8075160
bl InitSpritePosToAnimAttacker
movs r0, 0x1E
strh r0, [r5, 0x2E]
ldrh r0, [r5, 0x20]
@@ -590,7 +590,7 @@ sub_80AB024: @ 80AB024
lsrs r0, 24
strh r0, [r5, 0x36]
adds r0, r5, 0
bl obj_translate_based_on_private_1_2_3_4
bl InitAnimLinearTranslation
movs r0, 0x2E
ldrsh r1, [r5, r0]
movs r0, 0xD2
@@ -634,7 +634,7 @@ _080AB0A8: .4byte sub_80AB0AC
sub_80AB0AC: @ 80AB0AC
push {r4,lr}
adds r4, r0, 0
bl sub_80755E0
bl AnimTranslateLinear
lsls r0, 24
cmp r0, 0
beq _080AB0C0
@@ -861,7 +861,7 @@ _080AB256:
movs r7, 0x3
_080AB260:
adds r0, r6, 0
bl sub_8075160
bl InitSpritePosToAnimAttacker
ldr r0, _080AB2B8 @ =gBattleAnimAttacker
ldrb r0, [r0]
bl GetBattlerSide
@@ -912,7 +912,7 @@ sub_80AB2CC: @ 80AB2CC
push {r4,lr}
adds r4, r0, 0
movs r1, 0x1
bl sub_8075114
bl InitSpritePosToAnimTarget
ldr r0, _080AB2FC @ =gBattleAnimArgs
ldrh r1, [r0, 0x8]
strh r1, [r4, 0x2E]
@@ -948,14 +948,14 @@ sub_80AB308: @ 80AB308
beq _080AB324
adds r0, r4, 0
movs r1, 0x1
bl sub_8075114
bl InitSpritePosToAnimTarget
b _080AB32C
.align 2, 0
_080AB320: .4byte gBattleAnimArgs
_080AB324:
adds r0, r4, 0
movs r1, 0x1
bl sub_8075160
bl InitSpritePosToAnimAttacker
_080AB32C:
ldr r0, _080AB33C @ =gBattleAnimArgs
ldrh r0, [r0, 0x4]
@@ -1054,7 +1054,7 @@ sub_80AB38C: @ 80AB38C
mov r0, sp
ldrb r0, [r0, 0x9]
ldr r1, _080AB404 @ =gFile_graphics_unknown_unknown_E81D14_tilemap
bl sub_807543C
bl AnimLoadCompressedBgTilemap
b _080AB42E
.align 2, 0
_080AB3FC: .4byte 0x00003f42
@@ -1064,7 +1064,7 @@ _080AB408:
mov r0, sp
ldrb r0, [r0, 0x9]
ldr r1, _080AB414 @ =gFile_graphics_unknown_unknown_E81FE4_tilemap
bl sub_807543C
bl AnimLoadCompressedBgTilemap
b _080AB42E
.align 2, 0
_080AB414: .4byte gFile_graphics_unknown_unknown_E81FE4_tilemap
@@ -1084,7 +1084,7 @@ _080AB42E:
ldr r1, _080AB45C @ =gFile_graphics_battle_anims_backgrounds_water_sheet
mov r2, sp
ldrh r2, [r2, 0xA]
bl sub_80753B4
bl AnimLoadCompressedBgGfx
ldr r0, _080AB460 @ =gBattleAnimArgs
movs r1, 0
ldrsh r0, [r0, r1]
@@ -1904,7 +1904,7 @@ sub_80ABA78: @ 80ABA78
strh r0, [r4, 0x4]
adds r0, r4, 0
movs r1, 0x1
bl sub_8075114
bl InitSpritePosToAnimTarget
bl Random
movs r5, 0xFF
ands r5, r0
@@ -1991,7 +1991,7 @@ sub_80ABB28: @ 80ABB28
ldr r0, _080ABB78 @ =gTasks
adds r4, r0
movs r0, 0
bl GetAnimBankSpriteId
bl GetAnimBattlerSpriteId
lsls r0, 24
lsrs r0, 24
strh r0, [r4, 0x26]
@@ -2138,7 +2138,7 @@ _080ABC66:
ldrh r0, [r4, 0x26]
lsls r0, 24
lsrs r0, 24
bl sub_8076440
bl SetBattlerSpriteYOffsetFromYScale
ldr r2, _080ABC84 @ =gSprites
movs r0, 0x26
ldrsh r1, [r4, r0]
@@ -2727,7 +2727,7 @@ _080AC0AE:
ldr r1, [r0]
adds r0, r2, 0
bl _call_via_r1
ldr r1, _080AC144 @ =gUnknown_2037EE2
ldr r1, _080AC144 @ =gAnimVisualTaskCount
ldrb r0, [r1]
adds r0, 0x1
strb r0, [r1]
@@ -2748,7 +2748,7 @@ _080AC0F8:
ldr r1, [r0]
adds r0, r2, 0
bl _call_via_r1
ldr r1, _080AC144 @ =gUnknown_2037EE2
ldr r1, _080AC144 @ =gAnimVisualTaskCount
ldrb r0, [r1]
adds r0, 0x1
strb r0, [r1]
@@ -2769,7 +2769,7 @@ _080AC128:
.align 2, 0
_080AC13C: .4byte gBattleAnimArgs
_080AC140: .4byte sub_80B94B4
_080AC144: .4byte gUnknown_2037EE2
_080AC144: .4byte gAnimVisualTaskCount
_080AC148:
movs r2, 0x1A
ldrsh r0, [r4, r2]
@@ -3287,7 +3287,7 @@ sub_80AC504: @ 80AC504
strh r1, [r0, 0x36]
ldrh r1, [r6, 0x1A]
strh r1, [r0, 0x38]
bl sub_8075068
bl InitAnimArcTranslation
adds r5, 0x1C
adds r4, r5
ldr r0, _080AC56C @ =sub_80AC570
@@ -3309,7 +3309,7 @@ _080AC56C: .4byte sub_80AC570
sub_80AC570: @ 80AC570
push {r4-r6,lr}
adds r6, r0, 0
bl AnimateBallThrow
bl TranslateAnimHorizontalArc
lsls r0, 24
cmp r0, 0
beq _080AC5CA
@@ -3344,7 +3344,7 @@ sub_80AC570: @ 80AC570
mvns r1, r1
strh r1, [r6, 0x38]
adds r0, r6, 0
bl sub_8075068
bl InitAnimArcTranslation
ldr r0, _080AC5D4 @ =sub_80AC5D8
str r0, [r6, 0x1C]
_080AC5CA:
@@ -3360,7 +3360,7 @@ _080AC5D4: .4byte sub_80AC5D8
sub_80AC5D8: @ 80AC5D8
push {r4-r6,lr}
adds r5, r0, 0
bl AnimateBallThrow
bl TranslateAnimHorizontalArc
lsls r0, 24
cmp r0, 0
beq _080AC614
@@ -3498,7 +3498,7 @@ sub_80AC6D8: @ 80AC6D8
push {r4,r5,lr}
adds r4, r0, 0
movs r1, 0x1
bl sub_8075160
bl InitSpritePosToAnimAttacker
ldr r5, _080AC714 @ =gBattleAnimTarget
ldrb r0, [r5]
movs r1, 0x2
-18
View File
@@ -242,21 +242,3 @@ gUnknown_83ADE18:: @ 83ADE18
gUnknown_83ADF5C:: @ 83ADF5C
.incbin "baserom.gba", 0x3ADF5C, 0xC0
gUnknown_83AE01C:: @ 83AE01C
.incbin "baserom.gba", 0x3AE01C, 0x20
gUnknown_83AE03C:: @ 83AE03C
.incbin "baserom.gba", 0x3AE03C, 0x10
gUnknown_83AE04C:: @ 83AE04C
.incbin "baserom.gba", 0x3AE04C, 0x4
gUnknown_83AE050:: @ 83AE050
.incbin "baserom.gba", 0x3AE050, 0x4
gUnknown_83AE054:: @ 83AE054
.incbin "baserom.gba", 0x3AE054, 0x30
gUnknown_83AE084:: @ 0x83AE084
.incbin "baserom.gba", 0x3AE084, 0x10
+2 -2
View File
@@ -55,7 +55,7 @@ gUnknown_823499C:: @ 823499C
gUnknown_82349BC:: @ 82349BC
.incbin "baserom.gba", 0x2349BC, 0x10
gUnknown_82349CC:: @ 82349CC
gMonFrontPicCoords:: @ 82349CC
.incbin "baserom.gba", 0x2349CC, 0x6E0
gMonFrontPicTable:: @ 82350AC
@@ -64,7 +64,7 @@ gMonFrontPicTable:: @ 82350AC
gUnknown_8235194:: @ 8235194
.incbin "baserom.gba", 0x235194, 0xCD8
gUnknown_8235E6C:: @ 8235E6C
gMonBackPicCoords:: @ 8235E6C
.incbin "baserom.gba", 0x235E6C, 0x6E0
gMonBackPicTable:: @ 823654C
+10 -53
View File
@@ -843,13 +843,19 @@ gUnknown_83E4410:: @ 83E4410
.incbin "baserom.gba", 0x3E4410, 0x1488
gUnknown_83E5898:: @ 83E5898
.incbin "baserom.gba", 0x3E5898, 0x248
.incbin "baserom.gba", 0x3E5898, 0xC0
gUnknown_83E5958:: @ 83E5958
.incbin "baserom.gba", 0x3E5958, 0x188
gUnknown_83E5AE0:: @ 83E5AE0
.incbin "baserom.gba", 0x3E5AE0, 0xA8
gUnknown_83E5B88:: @ 83E5B88
.incbin "baserom.gba", 0x3E5B88, 0x2A4
.incbin "baserom.gba", 0x3E5B88, 0x1C0
gUnknown_83E5D48:: @ 83E5D48
.incbin "baserom.gba", 0x3E5D48, 0xE4
gUnknown_83E5E2C:: @ 83E5E2C
.incbin "baserom.gba", 0x3E5E2C, 0x18
@@ -900,58 +906,9 @@ gUnknown_83E652C:: @ 83E652C
.incbin "baserom.gba", 0x3E652C, 0x78
gUnknown_83E65A4:: @ 83E65A4
.incbin "baserom.gba", 0x3E65A4, 0xA4C
.incbin "baserom.gba", 0x3E65A4, 0x544
gUnknown_83E6FF0:: @ 83E6FF0
.incbin "baserom.gba", 0x3E6FF0, 0x1C
gUnknown_83E700C:: @ 83E700C
.incbin "baserom.gba", 0x3E700C, 0x20
gUnknown_83E702C:: @ 83E702C
.incbin "baserom.gba", 0x3E702C, 0x18
gUnknown_83E7044:: @ 83E7044
.incbin "baserom.gba", 0x3E7044, 0xD0
gUnknown_83E7114:: @ 83E7114
.incbin "baserom.gba", 0x3E7114, 0x35C
gUnknown_83E7470:: @ 83E7470
.incbin "baserom.gba", 0x3E7470, 0x68
gUnknown_83E74D8:: @ 83E74D8
.incbin "baserom.gba", 0x3E74D8, 0x18
gUnknown_83E74F0:: @ 83E74F0
.incbin "baserom.gba", 0x3E74F0, 0x178
gUnknown_83E7668:: @ 83E7668
.incbin "baserom.gba", 0x3E7668, 0x78
gUnknown_83E76E0:: @ 83E76E0
.incbin "baserom.gba", 0x3E76E0, 0x528
gUnknown_83E7C08:: @ 83E7C08
.incbin "baserom.gba", 0x3E7C08, 0x30
gUnknown_83E7C38:: @ 83E7C38
.incbin "baserom.gba", 0x3E7C38, 0x60
gUnknown_83E7C98:: @ 83E7C98
.incbin "baserom.gba", 0x3E7C98, 0x30
gUnknown_83E7CC8:: @ 83E7CC8
.incbin "baserom.gba", 0x3E7CC8, 0x2
gUnknown_83E7CCA:: @ 83E7CCA
.incbin "baserom.gba", 0x3E7CCA, 0x4
gUnknown_83E7CCE:: @ 83E7CCE
.incbin "baserom.gba", 0x3E7CCE, 0x6
gUnknown_83E7CD4:: @ 83E7CD4
.incbin "baserom.gba", 0x3E7CD4, 0x28
.section .rodata.83E7CFC
gUnknown_83E7CFC:: @ 83E7CFC
.incbin "baserom.gba", 0x3E7CFC, 0x14
+15 -15
View File
@@ -1624,15 +1624,15 @@ gFile_graphics_battle_anims_backgrounds_00_tilemap:: @ 8D1CFD4
.incbin "graphics/battle_anims/backgrounds/00.bin.lz"
.align 2
gFile_graphics_battle_anims_masks_metal_shine_sheet:: @ 8D1D224
gMetalShineGfx:: @ 8D1D224
.incbin "graphics/battle_anims/masks/metal_shine.4bpp.lz"
.align 2
gFile_graphics_battle_anims_masks_metal_shine_palette:: @ 8D1D360
gMetalShinePalette:: @ 8D1D360
.incbin "graphics/battle_anims/masks/metal_shine.gbapal.lz"
.align 2
gFile_graphics_battle_anims_masks_metal_shine_tilemap:: @ 8D1D388
gMetalShineTilemap:: @ 8D1D388
.incbin "graphics/battle_anims/masks/metal_shine.bin.lz"
.align 2
@@ -2412,47 +2412,47 @@ gFile_graphics_battle_anims_sprites_243_palette:: @ 8D2D8CC
.incbin "graphics/battle_anims/sprites/243.gbapal.lz"
.align 2
gFile_graphics_battle_anims_masks_stat_sheet:: @ 8D2D8F4
gBattleStatMask_Gfx:: @ 8D2D8F4
.incbin "graphics/battle_anims/masks/stat.4bpp.lz"
.align 2
gFile_graphics_battle_anims_masks_stat_tilemap_1_tilemap:: @ 8D2DB04
gBattleStatMask1_Tilemap:: @ 8D2DB04
.incbin "graphics/battle_anims/masks/stat_tilemap_1.bin.lz"
.align 2
gFile_graphics_battle_anims_masks_stat_tilemap_2_tilemap:: @ 8D2DC20
gBattleStatMask2_Tilemap:: @ 8D2DC20
.incbin "graphics/battle_anims/masks/stat_tilemap_2.bin.lz"
.align 2
gFile_graphics_battle_anims_masks_stat1_palette:: @ 8D2DD3C
gBattleStatMask1_Pal:: @ 8D2DD3C
.incbin "graphics/battle_anims/masks/stat1.gbapal.lz"
.align 2
gFile_graphics_battle_anims_masks_stat2_palette:: @ 8D2DD5C
gBattleStatMask2_Pal:: @ 8D2DD5C
.incbin "graphics/battle_anims/masks/stat2.gbapal.lz"
.align 2
gFile_graphics_battle_anims_masks_stat3_palette:: @ 8D2DD7C
gBattleStatMask3_Pal:: @ 8D2DD7C
.incbin "graphics/battle_anims/masks/stat3.gbapal.lz"
.align 2
gFile_graphics_battle_anims_masks_stat4_palette:: @ 8D2DD9C
gBattleStatMask4_Pal:: @ 8D2DD9C
.incbin "graphics/battle_anims/masks/stat4.gbapal.lz"
.align 2
gFile_graphics_battle_anims_masks_stat5_palette:: @ 8D2DDBC
gBattleStatMask5_Pal:: @ 8D2DDBC
.incbin "graphics/battle_anims/masks/stat5.gbapal.lz"
.align 2
gFile_graphics_battle_anims_masks_stat6_palette:: @ 8D2DDDC
gBattleStatMask6_Pal:: @ 8D2DDDC
.incbin "graphics/battle_anims/masks/stat6.gbapal.lz"
.align 2
gFile_graphics_battle_anims_masks_stat7_palette:: @ 8D2DDFC
gBattleStatMask7_Pal:: @ 8D2DDFC
.incbin "graphics/battle_anims/masks/stat7.gbapal.lz"
.align 2
gFile_graphics_battle_anims_masks_stat8_palette:: @ 8D2DE1C
gBattleStatMask8_Pal:: @ 8D2DE1C
.incbin "graphics/battle_anims/masks/stat8.gbapal.lz"
.align 2
@@ -13554,7 +13554,7 @@ gFile_graphics_battle_anims_backgrounds_sandstorm_brew_sheet:: @ 8E794D0
.incbin "graphics/battle_anims/backgrounds/sandstorm_brew.4bpp.lz"
.align 2
gFile_graphics_battle_anims_sprites_261_palette:: @ 8E799FC
gBattleAnimSpritePal_FlyingDirt:: @ 8E799FC
.incbin "graphics/battle_anims/sprites/261.gbapal.lz"
.align 2
@@ -0,0 +1,19 @@
JASC-PAL
0100
16
106 148 139
148 148 255
189 197 255
222 222 255
238 238 255
238 246 255
255 255 255
238 246 255
255 255 255
0 0 0
0 0 0
0 0 0
0 0 0
205 213 255
205 205 255
230 230 255
+1 -4
View File
@@ -820,9 +820,6 @@ extern struct BattleSpriteData *gBattleSpritesDataPtr;
extern u8 *gLinkBattleSendBuffer;
extern u8 *gLinkBattleRecvBuffer;
extern u8 *gUnknown_0202305C;
extern u8 *gUnknown_02023060;
// Move this somewhere else
#include "sprite.h"
@@ -836,7 +833,7 @@ struct MonSpritesGfx
u8 field_F4[0x80];
u8 *barFontGfx;
void *field_178;
void *field_17C;
u16 *field_17C;
};
extern u16 gBattle_BG0_X;
+253 -51
View File
@@ -1,19 +1,9 @@
#ifndef GUARD_BATTLE_ANIM_H
#define GUARD_BATTLE_ANIM_H
#include "global.h"
#ifndef BATTLE_BANKS_COUNT
#define BATTLE_BANKS_COUNT 4
#endif // BATTLE_BANKS_COUNT
enum
{
ANIM_BANK_ATTACKER,
ANIM_BANK_TARGET,
ANIM_BANK_ATK_PARTNER,
ANIM_BANK_DEF_PARTNER,
};
#include "battle.h"
#include "constants/battle_anim.h"
#include "task.h"
enum
{
@@ -60,11 +50,39 @@ extern s16 gBattleAnimArgs[ANIM_ARGS_COUNT];
extern u8 gAnimMoveTurn;
extern u8 gBattleAnimAttacker;
extern u8 gBattleAnimTarget;
extern u16 gAnimSpeciesByBanks[BATTLE_BANKS_COUNT];
extern u8 gUnknown_02038440;
extern u8 gBattlerSpriteIds[MAX_BATTLERS_COUNT];
extern u16 gAnimMovePower;
extern s32 gAnimMoveDmg;
extern u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT];
extern u8 gUnknown_2037F24;
extern struct OamData gOamData_83ACA40;
extern struct OamData gOamData_83AC9C8;
extern struct OamData gOamData_83ACA38;
extern struct OamData gOamData_83AC9D0;
extern struct OamData gOamData_83AC9F8;
extern struct OamData gOamData_83AC9D8;
extern struct OamData gOamData_83ACB58;
extern struct OamData gOamData_83ACAF8;
extern struct OamData gOamData_83ACB60;
extern struct OamData gOamData_83ACA30;
extern struct OamData gOamData_83ACA98;
extern struct OamData gOamData_83ACA90;
extern struct OamData gOamData_83ACAF0;
extern struct OamData gOamData_83ACB10;
extern struct OamData gOamData_83ACB18;
extern struct OamData gOamData_83ACB38;
extern struct OamData gOamData_83ACA18;
extern struct OamData gOamData_83ACB20;
extern struct OamData gOamData_83ACB50;
extern struct OamData gOamData_83ACAB8;
extern struct OamData gOamData_83ACA00;
extern struct OamData gOamData_83ACBC0;
extern struct OamData gOamData_83ACB00;
extern struct OamData gOamData_83AC9E0;
extern struct OamData gOamData_83ACA20;
extern struct OamData gOamData_83ACA80;
extern struct OamData gOamData_83ACAA0;
void ClearBattleAnimationVars(void);
void DoMoveAnim(u16 move);
@@ -80,25 +98,22 @@ s8 BattleAnimAdjustPanning2(s8 pan);
s16 sub_80A52EC(s16 a);
s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan);
bool8 IsBattlerSpriteVisible(u8 battlerId);
s16 KeepPanInRange(s16 a, s32 oldPan);
void sub_80730C0(u16, const u16 *, s32, u8);
// battle_anim_80FE840.s
// battle_intro.c
void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value);
void sub_8118FBC(u8 arg0, u8 arg1, u8 arg2, u8 bankIdentity, u8 arg4, void *arg5, u16 *arg6, u16 arg7);
void HandleIntroSlide(u8 terrainId);
s32 GetAnimBgAttribute(u8 bgId, u8 attributeId);
void HandleIntroSlide(u8 terrain);
void sub_80BC41C(u8 taskId);
void sub_80BCEF4(s32 bgId, u8 arg1, u8 arg2, u8 battlerPosition, u8 arg4, u8 *arg5, u16 *arg6, u16 tilesOffset);
// battle_anim_80A5C6C.s
void sub_80A6EEC(struct Sprite *sprite);
void sub_80A68D4(struct Sprite *sprite);
void sub_80A6F3C(struct Sprite *sprite);
void sub_80A8278(void);
void sub_80A6B30(struct BattleAnimBgData *);
void sub_80A6B90(struct BattleAnimBgData *, u32 arg1);
u8 sub_80A82E4(u8 bank);
bool8 AnimateBallThrow(struct Sprite *sprite);
// battle_anim_special
// battle_anim_special.s
void sub_80F1720(u8 battler, struct Pokemon *mon);
// battle_anim_effects_1.s
void AnimMoveTwisterParticle(struct Sprite *sprite);
enum
{
BATTLER_COORD_X,
@@ -119,24 +134,24 @@ enum
BATTLER_COORD_ATTR_RAW_BOTTOM,
};
u8 GetBattlerSpriteCoord(u8 bank, u8 attributeId);
u8 GetBattlerSpriteCoord(u8 battlerId, u8 attributeId);
bool8 IsBankSpritePresent(u8 bank);
bool8 IsBankSpritePresent(u8 battlerId);
void sub_80A6C68(u8 arg0);
u8 GetAnimBankSpriteId(u8 wantedBank);
u8 GetAnimBattlerSpriteId(u8 wantedBank);
bool8 IsDoubleBattle(void);
u8 sub_80A6D94(void);
u8 sub_80A8364(u8);
void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*spriteCallback)(struct Sprite*));
void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*spriteCallback)(struct Sprite *));
void SetSpritePrimaryCoordsFromSecondaryCoords(struct Sprite *sprite);
u8 GetBattlerSpriteDefault_Y(u8 bank);
u8 sub_80A82E4(u8 bank);
u8 GetSubstituteSpriteDefault_Y(u8 bank);
u8 GetBattlerSpriteDefault_Y(u8 battlerId);
u8 sub_80A82E4(u8 battlerId);
u8 GetSubstituteSpriteDefault_Y(u8 battlerId);
u8 GetGhostSpriteDefault_Y(u8 battlerId);
void sub_8072E48(u8 battlerId, u8);
void MoveBattlerSpriteToBG(u8 battlerId, u8);
void sub_8073128(u8);
// battle_anim_80A9C70.s
// battle_anim_status_effects.s
#define STAT_ANIM_PLUS1 15
#define STAT_ANIM_PLUS2 39
#define STAT_ANIM_MINUS1 22
@@ -147,25 +162,114 @@ void sub_8073128(u8);
#define STAT_ANIM_MULTIPLE_MINUS2 58
void LaunchStatusAnimation(u8 bank, u8 statusAnimId);
// battle_anim_8170478.s
// battle_anim_special.s
u8 ItemIdToBallId(u16 itemId);
u8 LaunchBallStarsTask(u8 x, u8 y, u8 kindOfStars, u8 arg3, u8 ballId);
u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 bank, u32 arg2, u8 ballId);
u8 LaunchBallFadeMonTask(bool8 unFadeLater, u8 battlerId, u32 arg2, u8 ballId);
// battle_anim_mons.s
void TranslateMonSpriteLinear(struct Sprite * sprite);
void TranslateMonSpriteLinearFixedPoint(struct Sprite * sprite);
void InitSpriteDataForLinearTranslation(struct Sprite * sprite);
void PrepareBattlerSpriteForRotScale(u8 spriteId, u8 b);
void ResetSpriteRotScale(u8 spriteId);
void SetSpriteRotScale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation);
bool8 IsContest(void);
void sub_80759DC(u8 spriteId);
// battle_anim_mons.c
u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType);
u8 GetBattlerSpriteCoord2(u8 battlerId, u8 coordType);
u8 GetBattlerSpriteDefault_Y(u8 battlerId);
u8 GetSubstituteSpriteDefault_Y(u8 battlerId);
u8 GetGhostSpriteDefault_Y(u8 battlerId);
u8 GetBattlerYCoordWithElevation(u8 battlerId);
u8 GetAnimBattlerSpriteId(u8 animBattler);
void StoreSpriteCallbackInData6(struct Sprite *sprite, SpriteCallback callback);
void TranslateSpriteInCircleOverDuration(struct Sprite *sprite);
void TranslateSpriteInGrowingCircleOverDuration(struct Sprite *sprite);
void TranslateSpriteInEllipseOverDuration(struct Sprite *sprite);
void WaitAnimForDuration(struct Sprite *sprite);
void sub_8074C80(struct Sprite *sprite);
void TranslateSpriteLinear(struct Sprite *sprite);
void TranslateSpriteLinearFixedPoint(struct Sprite *sprite);
void TranslateMonSpriteLinear(struct Sprite *sprite);
void TranslateMonSpriteLinearFixedPoint(struct Sprite *sprite);
void TranslateSpriteLinearAndFlicker(struct Sprite *sprite);
void DestroySpriteAndMatrix(struct Sprite *sprite);
void RunStoredCallbackWhenAffineAnimEnds(struct Sprite *sprite);
void RunStoredCallbackWhenAnimEnds(struct Sprite *sprite);
void DestroyAnimSpriteAndDisableBlend(struct Sprite *sprite);
void DestroyAnimVisualTaskAndDisableBlend(u8 taskId);
void SetSpriteCoordsToAnimAttackerCoords(struct Sprite *sprite);
void SetAnimSpriteInitialXOffset(struct Sprite *sprite, s16 xOffset);
void InitAnimArcTranslation(struct Sprite *sprite);
bool8 TranslateAnimHorizontalArc(struct Sprite *sprite);
bool8 TranslateAnimVerticalArc(struct Sprite *sprite);
void SetSpritePrimaryCoordsFromSecondaryCoords(struct Sprite *sprite);
void InitSpritePosToAnimTarget(struct Sprite *sprite, bool8 respectMonPicOffsets);
void InitSpritePosToAnimAttacker(struct Sprite *sprite, bool8 respectMonPicOffsets);
u8 GetBattlerSide(u8 battlerId);
u8 GetBattlerPosition(u8 battlerId);
u8 GetBattlerAtPosition(u8 position);
bool8 IsBattlerSpritePresent(u8 battlerId);
u8 GetBattlerSpriteSubpriority(u8 battlerId);
bool8 IsDoubleBattle(void);
void sub_80752A0(struct BattleAnimBgData *animBgData);
void sub_80752C8(struct BattleAnimBgData *animBgData, u32 arg1);
void sub_8075300(struct BattleAnimBgData *animBgData, u8 unused);
void sub_8075358(u32 bgId);
void AnimLoadCompressedBgGfx(u32 bgId, const u32 *src, u32 tilesOffset);
void InitAnimBgTilemapBuffer(u32 bgId, const void *src);
void AnimLoadCompressedBgTilemap(u32 bgId, const u32 *src);
u8 sub_8075454(void);
void sub_8075458(bool8 arg0);
void sub_8075490(struct Sprite *sprite);
void InitSpriteDataForLinearTranslation(struct Sprite *sprite);
void InitAnimLinearTranslation(struct Sprite *sprite);
void StartAnimLinearTranslation(struct Sprite *sprite);
void sub_80755B8(struct Sprite *sprite);
u8 sub_80768B0(u8 battlerId);
bool8 AnimTranslateLinear(struct Sprite *sprite);
void sub_807563C(struct Sprite *sprite);
void sub_8075678(struct Sprite *sprite);
void sub_80756A4(struct Sprite *sprite);
void InitAndRunAnimFastLinearTranslation(struct Sprite *sprite);
bool8 AnimFastTranslateLinear(struct Sprite *sprite);
void InitAnimFastLinearTranslationWithSpeed(struct Sprite *sprite);
void sub_8075830(struct Sprite *sprite);
void SetSpriteRotScale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation);
void PrepareBattlerSpriteForRotScale(u8 spriteId, u8 objMode);
void ResetSpriteRotScale(u8 spriteId);
void SetBattlerSpriteYOffsetFromRotation(u8 spriteId);
void TrySetSpriteRotScale(struct Sprite *sprite, bool8 recalcCenterVector, s16 xScale, s16 yScale, u16 rotation);
void sub_8075AD8(struct Sprite *sprite);
u16 ArcTan2Neg(s16 a, s16 b);
void SetGreyscaleOrOriginalPalette(u16 paletteNum, bool8 restoreOriginalColor);
u32 sub_8075BE8(u8 battleBackground, u8 attacker, u8 target, u8 attackerPartner, u8 targetPartner, u8 a6, u8 a7);
u32 sub_8075CB8(u8 a1, u8 a2, u8 a3, u8 a4);
u8 sub_8075D80(u8 a1);
void sub_8075D9C(struct Sprite *sprite);
void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite);
void sub_8075E80(struct Sprite *sprite);
void sub_8075F0C(struct Sprite *sprite);
s16 CloneBattlerSpriteWithBlend(u8 animBattler);
void obj_delete_but_dont_free_vram(struct Sprite *sprite);
void sub_8076048(u8 taskId);
void AnimTask_BlendMonInAndOut(u8 task);
void sub_8076288(u8 taskId);
void PrepareAffineAnimInTaskData(struct Task *task, u8 spriteId, const union AffineAnimCmd *affineAnimCmds);
bool8 RunAffineAnimFromTaskData(struct Task *task);
void SetBattlerSpriteYOffsetFromYScale(u8 spriteId);
void SetBattlerSpriteYOffsetFromOtherYScale(u8 spriteId, u8 otherSpriteId);
void StorePointerInVars(s16 *lo, s16 *hi, const void *ptr);
void *LoadPointerFromVars(s16 lo, s16 hi);
void sub_80765D4(struct Task *task, u8 spriteId, s16 a3, s16 a4, s16 a5, s16 a6, u16 a7);
u8 sub_8076640(struct Task *task);
void AnimTask_GetFrustrationPowerLevel(u8 taskId);
void sub_80767F0(void);
u8 GetBattlerSpriteSubpriority(u8 battlerId);
u8 GetBattlerSpriteBGPriority(u8 battlerId);
u8 GetBattlerSpriteBGPriorityRank(u8 battlerId);
u8 sub_80768D0(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority, u32 personality, u32 trainerId, u32 battlerId, u32 a10);
void DestroySpriteAndFreeResources_(struct Sprite *sprite);
s16 GetBattlerSpriteCoordAttr(u8 battlerId, u8 attr);
void SetAverageBattlerPositions(u8 battlerId, bool8 respectMonPicOffsets, s16 *x, s16 *y);
u8 sub_8076E34(s32 battlerId, u8 spriteId, s32 species);
void sub_8076ED8(struct Sprite *sprite);
void sub_8076F58(struct Sprite *sprite);
void sub_8076FD0(struct Sprite *sprite);
void sub_8077030(u8 taskId);
void sub_807729C(struct Sprite *sprite);
void sub_8077350(struct Sprite *sprite);
// battle_anim_mon_movement.c
void AnimTask_ShakeMon(u8 taskId);
@@ -182,4 +286,102 @@ void sub_8099980(u8 taskId);
void sub_8099A78(u8 taskId);
void sub_8099BD4(u8 taskId);
// normal.c
extern const struct SpriteTemplate gUnknown_83E7C98;
u32 UnpackSelectedBattleAnimPalettes(s16 selector);
void sub_80B9BDC(u8 taskId);
void sub_80B9CE4(u8 taskId);
void sub_80B9E58(u8 taskId);
void sub_80B9F6C(u8 taskId);
void sub_80BA0E8(u8 taskId);
void sub_80BA47C(u8 taskId);
// ground.c
void sub_80B8E94(u8 taskId);
void sub_80B90EC(u8 taskId);
void sub_80B94B4(u8 taskId);
void AnimTask_IsPowerOver99(u8 taskId);
void sub_80B9800(u8 taskId);
// dragon.c
void sub_80B75E0(u8 taskId);
// ghost.c
void sub_80B54E8(u8 taskId);
void sub_80B58AC(u8 taskId);
void sub_80B5AAC(u8 taskId);
void sub_80B6020(u8 taskId);
void sub_80B63B4(u8 taskId);
void sub_80B68C8(u8 taskId);
void sub_80B6BBC(u8 taskId);
// rock.c
void AnimTask_LoadSandstormBackground(u8 taskId);
void sub_80B4BD0(u8 taskId);
void AnimTask_GetSeismicTossDamageLevel(u8 taskId);
void sub_80B5188(u8 taskId);
void sub_80B51EC(u8 taskId);
// psychic.c
void sub_80B3418(u8 taskId);
void sub_80B3480(u8 taskId);
void sub_80B3584(u8 taskId);
void sub_80B3834(u8 taskId);
void sub_80B3A58(u8 taskId);
void sub_80B3C78(u8 taskId);
// dark.c
void sub_80B78E0(u8 taskId);
void sub_80B79DC(u8 taskId);
void sub_80B7A80(u8 taskId);
void sub_80B7DA4(u8 taskId);
void sub_80B8070(u8 taskId);
void sub_80B85B8(u8 taskId);
void sub_80B8664(u8 taskId);
void AnimTask_MetallicShine(u8 taskId);
void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId);
void sub_80B8B38(u8 taskId);
// flying.c
void sub_80B194C(u8 taskId);
void sub_80B1D3C(struct Sprite *sprite);
void sub_80B2868(u8 taskId);
// water.s
extern const union AnimCmd *const gUnknown_83E5958[];
// fire.s
extern const union AnimCmd *const gUnknown_83E5D48[];
// battle_anim_utility_funcs.c
void sub_80BA7F8(u8 taskId);
void sub_80BA83C(u8 taskId);
void AnimTask_SetCamouflageBlend(u8 taskId);
void AnimTask_BlendParticle(u8 taskId);
void sub_80BAB38(u8 taskId);
void sub_80BAB98(u8 taskId);
void sub_80BACEC(u8 taskId);
void sub_80BB088(u8 taskId);
void sub_80BB660(u8 taskId);
void sub_80BB7DC(u8 taskId);
void sub_80BB82C(u8 taskId);
void AnimTask_GetAttackerSide(u8 taskId);
void AnimTask_GetTargetSide(u8 taskId);
void AnimTask_GetTargetIsAttackerPartner(u8 taskId);
void sub_80BB9B0(u8 taskId);
void sub_80BBA20(u8 taskId, s32 unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5, u8 arg6, u8 arg7, const u32 *gfx, const u32 *tilemap, const u32 *palette);
void AnimTask_GetBattleTerrain(u8 taskId);
void sub_80BBE10(u8 taskId);
void sub_80BBE3C(u8 taskId);
void sub_80BBE6C(u8 taskId);
void sub_80BBF08(u8 taskId);
void sub_80BBFA4(u8 taskId);
void AnimTask_IsContest(u8 taskId);
void sub_80BC060(u8 taskId);
void AnimTask_IsTargetSameSide(u8 taskId);
void sub_80BC0DC(u8 taskId);
void sub_80BC0FC(u8 taskId);
void sub_80BC12C(u8 taskId);
#endif // GUARD_BATTLE_ANIM_H
+2 -2
View File
@@ -49,7 +49,7 @@ void CB2_QuitRecordedBattle(void);
void sub_8038528(struct Sprite* sprite);
void sub_8038A04(void); // unused
void VBlankCB_Battle(void);
void sub_8038B74(struct Sprite *sprite);
void sub_801182C(struct Sprite *sprite);
void sub_8011A1C(void);
u32 sub_80391E0(u8 arrayId, u8 caseId);
u32 sub_80397C4(u32 setId, u32 tableId);
@@ -67,7 +67,7 @@ void EndBounceEffect(u8 bank, bool8 b);
void sub_8039E44(struct Sprite *sprite);
void sub_8039E60(struct Sprite *sprite);
void sub_8039E84(struct Sprite *sprite);
void sub_8039E9C(struct Sprite *sprite);
void sub_801236C(struct Sprite *sprite);
void BeginBattleIntro(void);
void SwitchInClearSetData(void);
void FaintClearSetData(void);
+2
View File
@@ -31,6 +31,8 @@ extern const struct CompressedSpritePalette gMonShinyPaletteTable[];
extern const struct CompressedSpriteSheet gTrainerFrontPicTable[];
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
extern const struct MonCoords gMonFrontPicCoords[];
extern const struct MonCoords gMonBackPicCoords[];
extern const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow;
extern const struct SpriteTemplate gSpriteTemplate_EnemyShadow;
-2
View File
@@ -77,8 +77,6 @@
#define RGB_BLACK RGB(0, 0, 0)
#define RGB_WHITE RGB(31, 31, 31)
#define WIN_RANGE(a, b) (((a) << 8) | (b))
#define NAKED __attribute__((naked))
#define UNUSED __attribute__((unused))
+36
View File
@@ -538,6 +538,40 @@
#define BGCNT_AFF512x512 0x8000
#define BGCNT_AFF1024x1024 0xC000
// WININ/OUT
#define WININ_WIN0_BG0 (1 << 0)
#define WININ_WIN0_BG1 (1 << 1)
#define WININ_WIN0_BG2 (1 << 2)
#define WININ_WIN0_BG3 (1 << 3)
#define WININ_WIN0_BG_ALL (WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3)
#define WININ_WIN0_OBJ (1 << 4)
#define WININ_WIN0_CLR (1 << 5)
#define WININ_WIN1_BG0 (1 << 8)
#define WININ_WIN1_BG1 (1 << 9)
#define WININ_WIN1_BG2 (1 << 10)
#define WININ_WIN1_BG3 (1 << 11)
#define WININ_WIN1_BG_ALL (WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG2 | WININ_WIN1_BG3)
#define WININ_WIN1_OBJ (1 << 12)
#define WININ_WIN1_CLR (1 << 13)
#define WINOUT_WIN01_BG0 (1 << 0)
#define WINOUT_WIN01_BG1 (1 << 1)
#define WINOUT_WIN01_BG2 (1 << 2)
#define WINOUT_WIN01_BG3 (1 << 3)
#define WINOUT_WIN01_BG_ALL (WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3)
#define WINOUT_WIN01_OBJ (1 << 4)
#define WINOUT_WIN01_CLR (1 << 5)
#define WINOUT_WINOBJ_BG0 (1 << 8)
#define WINOUT_WINOBJ_BG1 (1 << 9)
#define WINOUT_WINOBJ_BG2 (1 << 10)
#define WINOUT_WINOBJ_BG3 (1 << 11)
#define WINOUT_WINOBJ_BG_ALL (WINOUT_WINOBJ_BG0 | WINOUT_WINOBJ_BG1 | WINOUT_WINOBJ_BG2 | WINOUT_WINOBJ_BG3)
#define WINOUT_WINOBJ_OBJ (1 << 12)
#define WINOUT_WINOBJ_CLR (1 << 13)
#define WIN_RANGE(a, b) (((a) << 8) | (b))
#define WIN_RANGE2(a, b) ((b) | ((a) << 8))
// BLDCNT
// Bits 0-5 select layers for the 1st target
#define BLDCNT_TGT1_BG0 (1 << 0)
@@ -558,9 +592,11 @@
#define BLDCNT_TGT2_BG3 (1 << 11)
#define BLDCNT_TGT2_OBJ (1 << 12)
#define BLDCNT_TGT2_BD (1 << 13)
#define BLDCNT_TGT2_ALL (BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD)
// BLDALPHA
#define BLDALPHA_BLEND(target1, target2) (((target2) << 8) | (target1))
#define BLDALPHA_BLEND2(target1, target2) ((target1) | ((target2) << 8))
// SOUNDCNT_H
#define SOUND_CGB_MIX_QUARTER 0x0000
+24
View File
@@ -76,6 +76,18 @@ extern u8 gStringVar2[];
extern u8 gStringVar3[];
extern u8 gStringVar4[];
struct Coords8
{
s8 x;
s8 y;
};
struct UCoords8
{
u8 x;
u8 y;
};
struct Coords16
{
s16 x;
@@ -88,6 +100,18 @@ struct UCoords16
u16 y;
};
struct Coords32
{
s32 x;
s32 y;
};
struct UCoords32
{
u32 x;
u32 y;
};
struct Time
{
/*0x00*/ s16 days;
+31 -1
View File
@@ -961,6 +961,36 @@ extern const u8 gFile_graphics_items_icon_palettes_sapphire_palette[];
extern const u8 gFile_graphics_items_icons_return_to_field_arrow_sheet[];
extern const u8 gFile_graphics_items_icon_palettes_return_to_field_arrow_palette[];
// battle_anim_utility_funcs
extern const u32 gFile_graphics_battle_anims_masks_curse_sheet[];
extern const u32 gFile_graphics_battle_anims_masks_curse_tilemap[];
extern const u32 gBattleStatMask_Gfx[];
extern const u32 gBattleStatMask1_Pal[];
extern const u32 gBattleStatMask2_Pal[];
extern const u32 gBattleStatMask3_Pal[];
extern const u32 gBattleStatMask4_Pal[];
extern const u32 gBattleStatMask5_Pal[];
extern const u32 gBattleStatMask6_Pal[];
extern const u32 gBattleStatMask7_Pal[];
extern const u32 gBattleStatMask8_Pal[];
extern const u32 gBattleStatMask1_Tilemap[];
extern const u32 gBattleStatMask2_Tilemap[];
// dark
extern const u32 gMetalShineGfx[];
extern const u32 gMetalShinePalette[];
extern const u32 gMetalShineTilemap[];
// ghost
extern const u32 gFile_graphics_battle_anims_backgrounds_scary_face_sheet[];
extern const u32 gFile_graphics_battle_anims_backgrounds_scary_face_palette[];
extern const u32 gFile_graphics_battle_anims_backgrounds_scary_face_player_tilemap[];
// rock
extern const u32 gFile_graphics_battle_anims_backgrounds_sandstorm_brew_tilemap[];
extern const u32 gFile_graphics_battle_anims_backgrounds_sandstorm_brew_sheet[];
extern const u32 gBattleAnimSpritePal_FlyingDirt[];
// title_screen
extern const u16 gGraphics_TitleScreen_PokemonFireRedLogoPals[];
extern const u8 gGraphics_TitleScreen_PokemonFireRedLogoTiles[];
@@ -974,6 +1004,7 @@ extern const u8 gGraphics_TitleScreen_CopyrightPressStartMap[];
extern const u16 gGraphics_TitleScreen_FirePals[];
extern const u8 gGraphics_TitleScreen_BlankObjTiles[];
// battle_gfx_sfx_util
extern const u32 gHealthboxSinglesPlayerGfx[];
extern const u32 gHealthboxSinglesOpponentGfx[];
extern const u32 gHealthboxDoublesPlayerGfx[];
@@ -983,7 +1014,6 @@ extern const u32 gBlankGfxCompressed[];
extern const u16 gBattleInterface_BallStatusBarPal[];
extern const u16 gBattleInterface_BallDisplayPal[];
extern const u32 gFile_graphics_interface_hp_numbers[];
extern const u32 gGhostFrontPic[];
extern const u32 gGhostPalette[];
extern const u32 gSubstituteDollGfx[];
-5
View File
@@ -18,11 +18,6 @@ struct LinkPlayerMapObject
u8 mode;
};
struct UCoords32
{
u32 x, y;
};
struct CreditsOverworldCmd
{
s16 unk_0;
+1
View File
@@ -16,5 +16,6 @@ u16 sub_8096FD4(u16);
u8 sub_8096ECC(u16, void (*)(struct Sprite *), s16, s16, u8, bool32);
void sub_8097070(struct Sprite *);
u16 GetUnownLetterByPersonality(u32 personality);
u8 UpdateMonIconFrame(struct Sprite *sprite);
#endif // GUARD_POKEMON_ICON_H
-17
View File
@@ -1,17 +0,0 @@
#ifndef GUARD_ROM6_H
#define GUARD_ROM6_H
#include "global.h"
void sub_81357FC(u8, void(void));
u8 GetLeadMonIndex(void);
u8 GetSSTidalLocation(u8 *grp, u8 *num, s16 *x, s16 *y);
void sub_813BADC(bool8);
bool8 sub_813B9C0(void);
void UpdateMirageRnd(u16 days);
void UpdateBirchState(u16 days);
void UpdateFrontierManiac(u16 days);
void UpdateFrontierGambler(u16 days);
void SetShoalItemFlag(u16 days);
#endif //GUARD_ROM6_H
+2
View File
@@ -116,6 +116,7 @@ union AffineAnimCmd
struct AffineAnimFrameCmd frame;
struct AffineAnimLoopCmd loop;
struct AffineAnimJumpCmd jump;
struct AffineAnimEndCmdAlt end;
};
#define AFFINEANIMCMDTYPE_LOOP 0x7FFD
@@ -251,6 +252,7 @@ extern s16 gSpriteCoordOffsetX;
extern s16 gSpriteCoordOffsetY;
extern const struct SpriteTemplate gDummySpriteTemplate;
extern struct Sprite gSprites[];
extern struct OamMatrix gOamMatrices[];
void ResetSpriteData(void);
void AnimateSprites(void);
+26 -12
View File
@@ -111,7 +111,7 @@ SECTIONS {
src/palette.o(.text);
src/sound.o(.text);
asm/battle_anim.o(.text);
asm/battle_anim_mons.o(.text);
src/battle_anim_mons.o(.text);
src/task.o(.text);
src/reshow_battle_screen.o(.text);
asm/battle_anim_status_effects.o(.text);
@@ -161,16 +161,17 @@ SECTIONS {
asm/ice.o(.text);
asm/fighting.o(.text);
asm/poison.o(.text);
asm/flying.o(.text);
asm/psychic.o(.text);
asm/bug.o(.text);
asm/rock.o(.text);
asm/ghost.o(.text);
asm/dragon.o(.text);
asm/dark.o(.text);
asm/ground.o(.text);
asm/normal.o(.text);
asm/battle_anim_utility_funcs.o(.text);
src/flying.o(.text);
src/psychic.o(.text);
src/bug.o(.text);
src/rock.o(.text);
src/ghost.o(.text);
src/dragon.o(.text);
src/dark.o(.text);
src/ground.o(.text);
src/normal.o(.text);
src/battle_anim_utility_funcs.o(.text);
src/battle_intro.o(.text);
asm/bike.o(.text);
asm/easy_chat.o(.text);
asm/mon_markings.o(.text);
@@ -200,7 +201,7 @@ SECTIONS {
src/save.o(.text);
src/mystery_event_script.o(.text);
asm/field_effect_helpers.o(.text);
asm/battle_anim_sound_tasks.o(.text);
src/battle_anim_sound_tasks.o(.text);
src/battle_controller_safari.o(.text);
src/fldeff_sweetscent.o(.text);
asm/battle_anim_effects_3.o(.text);
@@ -412,6 +413,7 @@ SECTIONS {
src/palette.o(.rodata);
src/sound.o(.rodata);
data/battle_anim.o(.rodata);
src/battle_anim_mons.o(.rodata);
data/map_events.o(.rodata);
data/battle_anim_status_effects.o(.rodata);
src/title_screen.o(.rodata);
@@ -421,6 +423,18 @@ SECTIONS {
src/battle_anim_mon_movement.o(.rodata);
src/item.o(.rodata);
data/data_835B488.o(.rodata.83DF09C);
src/flying.o(.rodata);
src/psychic.o(.rodata);
src/bug.o(.rodata);
src/rock.o(.rodata);
src/ghost.o(.rodata);
src/dragon.o(.rodata);
src/dark.o(.rodata);
src/ground.o(.rodata);
src/normal.o(.rodata);
src/battle_anim_utility_funcs.o(.rodata);
src/battle_intro.o(.rodata);
data/data_835B488.o(.rodata.83E7CFC);
src/heal_location.o(.rodata);
data/data_835B488.o(.rodata.83EEC98);
src/battle_ai_script_commands.o(.rodata);
+14 -14
View File
@@ -92,7 +92,7 @@ const struct SpriteTemplate gUnknown_83D4EB4 =
// arg 4: frame delay
void AnimTask_ShakeMon(u8 taskId)
{
u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]);
u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
if (spriteId == 0xFF)
DestroyAnimVisualTask(taskId);
@@ -150,7 +150,7 @@ void AnimTask_ShakeMon2(u8 taskId)
if (gBattleAnimArgs[0] < MAX_BATTLERS_COUNT)
{
spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]);
spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
if (spriteId == 0xFF)
abort = TRUE;
}
@@ -228,7 +228,7 @@ static void AnimTask_ShakeMon2Step(u8 taskId)
// arg 4: delay
void AnimTask_ShakeMonInPlace(u8 taskId)
{
u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]);
u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
if (spriteId == 0xFF)
DestroyAnimVisualTask(taskId);
@@ -290,7 +290,7 @@ static void AnimTask_ShakeMonInPlaceStep(u8 taskId)
// arg 4: duration
void AnimTask_ShakeAndSinkMon(u8 taskId)
{
u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]);
u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
gSprites[spriteId].pos2.x = gBattleAnimArgs[1];
gTasks[taskId].data[0] = spriteId;
@@ -331,7 +331,7 @@ void AnimTask_TranslateMonElliptical(u8 taskId)
{
u8 wavePeriod = 1;
u8 i;
u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]);
u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
if (gBattleAnimArgs[4] > 5)
gBattleAnimArgs[4] = 5;
for (i = 0; i < gBattleAnimArgs[4]; i++)
@@ -414,7 +414,7 @@ static void DoVerticalDip(struct Sprite * sprite)
{
u8 spriteId;
sprite->invisible = TRUE;
spriteId = GetAnimBankSpriteId(gBattleAnimArgs[2]);
spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[2]);
sprite->data[0] = gBattleAnimArgs[0];
sprite->data[1] = 0;
sprite->data[2] = gBattleAnimArgs[1];
@@ -581,7 +581,7 @@ void AnimTask_WindUpLunge(u8 taskId)
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
gBattleAnimArgs[5] = -gBattleAnimArgs[5];
}
gTasks[taskId].data[0] = GetAnimBankSpriteId(gBattleAnimArgs[0]);
gTasks[taskId].data[0] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
gTasks[taskId].data[1] = gBattleAnimArgs[1] * 256 / gBattleAnimArgs[3];
gTasks[taskId].data[2] = gBattleAnimArgs[2];
gTasks[taskId].data[3] = gBattleAnimArgs[3];
@@ -627,7 +627,7 @@ void sub_80995FC(u8 taskId)
{
case 0:
case 1:
spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]);
spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
break;
case 2:
if (!IsBattlerSpriteVisible(gBattleAnimAttacker ^ BIT_FLANK))
@@ -678,7 +678,7 @@ void AnimTask_SwayMon(u8 taskId)
u8 spriteId;
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
spriteId = GetAnimBankSpriteId(gBattleAnimArgs[4]);
spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[4]);
gTasks[taskId].data[0] = gBattleAnimArgs[0];
gTasks[taskId].data[1] = gBattleAnimArgs[1];
gTasks[taskId].data[2] = gBattleAnimArgs[2];
@@ -735,7 +735,7 @@ static void AnimTask_SwayMonStep(u8 taskId)
// arg 4: sprite object mode
void AnimTask_ScaleMonAndRestore(u8 taskId)
{
u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[3]);
u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[3]);
PrepareBattlerSpriteForRotScale(spriteId, gBattleAnimArgs[4]);
gTasks[taskId].data[0] = gBattleAnimArgs[0];
gTasks[taskId].data[1] = gBattleAnimArgs[1];
@@ -773,7 +773,7 @@ static void AnimTask_ScaleMonAndRestoreStep(u8 taskId)
void sub_8099980(u8 taskId)
{
u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[2]);
u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[2]);
PrepareBattlerSpriteForRotScale(spriteId, 0);
gTasks[taskId].data[1] = 0;
gTasks[taskId].data[2] = gBattleAnimArgs[0];
@@ -806,7 +806,7 @@ void sub_8099980(u8 taskId)
void sub_8099A78(u8 taskId)
{
u8 spriteId = GetAnimBankSpriteId(gBattleAnimArgs[2]);
u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[2]);
PrepareBattlerSpriteForRotScale(spriteId, 0);
gTasks[taskId].data[1] = 0;
gTasks[taskId].data[2] = gBattleAnimArgs[0];
@@ -844,7 +844,7 @@ static void sub_8099B54(u8 taskId)
gTasks[taskId].data[3] += gTasks[taskId].data[4];
SetSpriteRotScale(gTasks[taskId].data[5], 0x100, 0x100, gTasks[taskId].data[3]);
if (gTasks[taskId].data[7])
sub_80759DC(gTasks[taskId].data[5]);
SetBattlerSpriteYOffsetFromRotation(gTasks[taskId].data[5]);
if (++gTasks[taskId].data[1] >= gTasks[taskId].data[2])
{
switch (gTasks[taskId].data[6])
@@ -888,7 +888,7 @@ void sub_8099BD4(u8 taskId)
gTasks[taskId].data[12] = 0;
gTasks[taskId].data[10] = gBattleAnimArgs[3];
gTasks[taskId].data[11] = gBattleAnimArgs[4];
gTasks[taskId].data[7] = GetAnimBankSpriteId(1);
gTasks[taskId].data[7] = GetAnimBattlerSpriteId(1);
gTasks[taskId].data[8] = gSprites[gTasks[taskId].data[7]].pos2.x;
gTasks[taskId].data[9] = gSprites[gTasks[taskId].data[7]].pos2.y;
gTasks[taskId].data[0] = 0;
File diff suppressed because it is too large Load Diff
+313
View File
@@ -0,0 +1,313 @@
#include "global.h"
#include "battle.h"
#include "battle_anim.h"
#include "sound.h"
#include "task.h"
#include "constants/battle_anim.h"
#include "constants/species.h"
static void sub_80DCE78(u8 taskId);
static void sub_80DCEE4(u8 taskId);
static void sub_80DCFE8(u8 taskId);
static void sub_80DD270(u8 taskId);
static void sub_80DD390(u8 taskId);
static void sub_80DD4D4(u8 taskId);
void sub_80DCE10(u8 taskId)
{
s8 pan1, pan2, panIncrement;
gTasks[taskId].data[0] = gBattleAnimArgs[0];
gTasks[taskId].data[1] = gBattleAnimArgs[1];
pan1 = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER);
pan2 = BattleAnimAdjustPanning(SOUND_PAN_TARGET);
panIncrement = CalculatePanIncrement(pan1, pan2, 2);
gTasks[taskId].data[2] = pan1;
gTasks[taskId].data[3] = pan2;
gTasks[taskId].data[4] = panIncrement;
gTasks[taskId].data[10] = 10;
gTasks[taskId].func = sub_80DCE78;
}
static void sub_80DCE78(u8 taskId)
{
s16 pan = gTasks[taskId].data[2];
s8 panIncrement = gTasks[taskId].data[4];
if (++gTasks[taskId].data[11] == 111)
{
gTasks[taskId].data[10] = 5;
gTasks[taskId].data[11] = 0;
gTasks[taskId].func = sub_80DCEE4;
}
else
{
if (++gTasks[taskId].data[10] == 11)
{
gTasks[taskId].data[10] = 0;
PlaySE12WithPanning(gTasks[taskId].data[0], pan);
}
pan += panIncrement;
gTasks[taskId].data[2] = KeepPanInRange(pan, panIncrement);
}
}
static void sub_80DCEE4(u8 taskId)
{
if (++gTasks[taskId].data[10] == 6)
{
s8 pan;
gTasks[taskId].data[10] = 0;
pan = BattleAnimAdjustPanning(SOUND_PAN_TARGET);
PlaySE12WithPanning(gTasks[taskId].data[1], pan);
if (++gTasks[taskId].data[11] == 2)
DestroyAnimSoundTask(taskId);
}
}
void mas_80DCF38(u8 taskId)
{
u16 songId = gBattleAnimArgs[0];
s8 targetPan = gBattleAnimArgs[2];
s8 panIncrement = gBattleAnimArgs[3];
u8 r10 = gBattleAnimArgs[4];
u8 r7 = gBattleAnimArgs[5];
u8 r9 = gBattleAnimArgs[6];
s8 sourcePan = BattleAnimAdjustPanning(gBattleAnimArgs[1]);
targetPan = BattleAnimAdjustPanning(targetPan);
panIncrement = CalculatePanIncrement(sourcePan, targetPan, panIncrement);
gTasks[taskId].data[0] = songId;
gTasks[taskId].data[1] = sourcePan;
gTasks[taskId].data[2] = targetPan;
gTasks[taskId].data[3] = panIncrement;
gTasks[taskId].data[4] = r10;
gTasks[taskId].data[5] = r7;
gTasks[taskId].data[6] = r9;
gTasks[taskId].data[10] = 0;
gTasks[taskId].data[11] = sourcePan;
gTasks[taskId].data[12] = r9;
gTasks[taskId].func = sub_80DCFE8;
sub_80DCFE8(taskId);
}
static void sub_80DCFE8(u8 taskId)
{
if (gTasks[taskId].data[12]++ == gTasks[taskId].data[6])
{
gTasks[taskId].data[12] = 0;
PlaySE12WithPanning(gTasks[taskId].data[0], gTasks[taskId].data[11]);
if (--gTasks[taskId].data[4] == 0)
{
DestroyAnimSoundTask(taskId);
return;
}
}
if (gTasks[taskId].data[10]++ == gTasks[taskId].data[5])
{
u16 dPan, oldPan;
gTasks[taskId].data[10] = 0;
dPan = gTasks[taskId].data[3];
oldPan = gTasks[taskId].data[11] ;
gTasks[taskId].data[11] = dPan + oldPan;
gTasks[taskId].data[11] = KeepPanInRange(gTasks[taskId].data[11], oldPan);
}
}
void sub_80DD06C(u8 taskId)
{
u16 species = SPECIES_NONE;
u8 battlerId;
s8 pan = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER);
// Get wanted battler.
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
battlerId = gBattleAnimAttacker;
else if (gBattleAnimArgs[0] == ANIM_TARGET)
battlerId = gBattleAnimTarget;
else if (gBattleAnimArgs[0] == ANIM_ATK_PARTNER)
battlerId = BATTLE_PARTNER(gBattleAnimAttacker);
else
battlerId = BATTLE_PARTNER(gBattleAnimTarget);
// Check if battler is visible.
if ((gBattleAnimArgs[0] == ANIM_TARGET || gBattleAnimArgs[0] == ANIM_DEF_PARTNER)
&& !IsBattlerSpriteVisible(battlerId))
{
DestroyAnimVisualTask(taskId);
return;
}
if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
else
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
if (species != SPECIES_NONE)
PlayCry3(species, pan, 3);
DestroyAnimVisualTask(taskId);
}
void sub_80DD148(u8 taskId)
{
u16 species = SPECIES_NONE;
u8 battlerId;
s8 pan = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER);
// Get wanted battler.
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
battlerId = gBattleAnimAttacker;
else if (gBattleAnimArgs[0] == ANIM_TARGET)
battlerId = gBattleAnimTarget;
else if (gBattleAnimArgs[0] == ANIM_ATK_PARTNER)
battlerId = BATTLE_PARTNER(gBattleAnimAttacker);
else
battlerId = BATTLE_PARTNER(gBattleAnimTarget);
// Check if battler is visible.
if ((gBattleAnimArgs[0] == ANIM_TARGET || gBattleAnimArgs[0] == ANIM_DEF_PARTNER)
&& !IsBattlerSpriteVisible(battlerId))
{
DestroyAnimVisualTask(taskId);
return;
}
if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
else
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
gTasks[taskId].data[0] = gBattleAnimArgs[1];
gTasks[taskId].data[1] = species;
gTasks[taskId].data[2] = pan;
if (species != SPECIES_NONE)
{
if (gBattleAnimArgs[1] == TASK_NONE)
PlayCry3(species, pan, 9);
else
PlayCry3(species, pan, 7);
gTasks[taskId].func = sub_80DD270;
}
else
{
DestroyAnimVisualTask(taskId);
}
}
static void sub_80DD270(u8 taskId)
{
u16 species = gTasks[taskId].data[1];
s8 pan = gTasks[taskId].data[2];
if (gTasks[taskId].data[9] < 2)
{
++gTasks[taskId].data[9];
}
else if (gTasks[taskId].data[0] == TASK_NONE)
{
if (!IsCryPlaying())
{
PlayCry3(species, pan, 10);
DestroyAnimVisualTask(taskId);
}
}
else if (!IsCryPlaying())
{
PlayCry3(species, pan, 8);
DestroyAnimVisualTask(taskId);
}
}
void sub_80DD2F4(u8 taskId)
{
if (gTasks[taskId].data[9] < 2)
++gTasks[taskId].data[9];
else if (!IsCryPlaying())
DestroyAnimVisualTask(taskId);
}
void sub_80DD334(u8 taskId)
{
u16 species;
s8 pan;
pan = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER);
species = gAnimBattlerSpecies[gBattleAnimAttacker];
gTasks[taskId].data[1] = species;
gTasks[taskId].data[2] = pan;
if (species != SPECIES_NONE)
{
PlayCry3(species, pan, 4);
gTasks[taskId].func = sub_80DD390;
}
else
{
DestroyAnimVisualTask(taskId);
}
}
static void sub_80DD390(u8 taskId)
{
if (gTasks[taskId].data[9] < 2)
{
++gTasks[taskId].data[9];
}
else if (!IsCryPlaying())
{
u16 species = gTasks[taskId].data[1];
s8 pan = gTasks[taskId].data[2];
PlayCry3(species, pan, 6);
DestroyAnimVisualTask(taskId);
}
}
void sub_80DD3DC(u8 taskId)
{
u16 songId = gBattleAnimArgs[0];
s8 pan = BattleAnimAdjustPanning(gBattleAnimArgs[1]);
PlaySE1WithPanning(songId, pan);
DestroyAnimVisualTask(taskId);
}
void sub_80DD410(u8 taskId)
{
u16 songId = gBattleAnimArgs[0];
s8 pan = BattleAnimAdjustPanning(gBattleAnimArgs[1]);
PlaySE2WithPanning(songId, pan);
DestroyAnimVisualTask(taskId);
}
void sub_80DD444(u8 taskId)
{
s8 targetPan = gBattleAnimArgs[1];
s8 panIncrement = gBattleAnimArgs[2];
u16 r9 = gBattleAnimArgs[3];
s8 sourcePan = BattleAnimAdjustPanning(gBattleAnimArgs[0]);
targetPan = BattleAnimAdjustPanning(targetPan);
panIncrement = CalculatePanIncrement(sourcePan, targetPan, panIncrement);
gTasks[taskId].data[1] = sourcePan;
gTasks[taskId].data[2] = targetPan;
gTasks[taskId].data[3] = panIncrement;
gTasks[taskId].data[5] = r9;
gTasks[taskId].data[10] = 0;
gTasks[taskId].data[11] = sourcePan;
gTasks[taskId].func = sub_80DD4D4;
sub_80DD4D4(taskId);
}
static void sub_80DD4D4(u8 taskId)
{
u16 oldPan, panIncrement = gTasks[taskId].data[3];
if (gTasks[taskId].data[10]++ == gTasks[taskId].data[5])
{
gTasks[taskId].data[10] = 0;
oldPan = gTasks[taskId].data[11];
gTasks[taskId].data[11] = panIncrement + oldPan;
gTasks[taskId].data[11] = KeepPanInRange(gTasks[taskId].data[11], oldPan);
}
gUnknown_2037F24 = gTasks[taskId].data[11];
if (gTasks[taskId].data[11] == gTasks[taskId].data[2])
DestroyAnimVisualTask(taskId);
}
+946
View File
@@ -0,0 +1,946 @@
#include "global.h"
#include "battle.h"
#include "battle_anim.h"
#include "gpu_regs.h"
#include "graphics.h"
#include "malloc.h"
#include "palette.h"
#include "sound.h"
#include "sprite.h"
#include "task.h"
#include "util.h"
#include "constants/songs.h"
struct AnimStatsChangeData
{
u8 battler1;
u8 battler2;
u8 higherPriority;
s16 data[8];
u16 species;
};
static void StartBlendAnimSpriteColor(u8 taskId, u32 selectedPalettes);
static void AnimTask_BlendSpriteColor_Step2(u8 taskId);
static void sub_80BAB78(u8 taskId);
static void sub_80BABD0(u8 taskId);
static void sub_80BACA8(struct Sprite *sprite);
static void sub_80BAF38(u8 taskId);
static void sub_80BB0D8(u8 taskId);
static void sub_80BB2A0(u8 taskId);
static void sub_80BB4B8(u8 taskId);
static void sub_80BB6CC(u8 taskId);
static void sub_80BB790(u32 selectedPalettes, u16 color);
static void sub_80BB8A4(u8 taskId);
static void sub_80BBC2C(u8 taskId);
static void sub_80BC19C(u8 taskId);
static EWRAM_DATA struct AnimStatsChangeData *sAnimStatsChangeData = NULL;
static const u16 gUnknown_83E7CC8[] = { RGB(31, 31, 31) };
const u8 gUnknown_83E7CCA[] = { REG_OFFSET_BG0CNT, REG_OFFSET_BG1CNT, REG_OFFSET_BG2CNT, REG_OFFSET_BG3CNT };
const u8 gUnknown_83E7CCE[] = { REG_OFFSET_BG0CNT, REG_OFFSET_BG1CNT, REG_OFFSET_BG2CNT, REG_OFFSET_BG3CNT };
void sub_80BA7F8(u8 taskId)
{
u32 selectedPalettes = UnpackSelectedBattleAnimPalettes(gBattleAnimArgs[0]);
selectedPalettes |= sub_8075CB8((gBattleAnimArgs[0] >> 7) & 1,
(gBattleAnimArgs[0] >> 8) & 1,
(gBattleAnimArgs[0] >> 9) & 1,
(gBattleAnimArgs[0] >> 10) & 1);
StartBlendAnimSpriteColor(taskId, selectedPalettes);
}
void sub_80BA83C(u8 taskId)
{
u8 battler;
u32 selectedPalettes;
u8 animBattlers[2];
animBattlers[1] = 0xFF;
selectedPalettes = UnpackSelectedBattleAnimPalettes(1);
switch (gBattleAnimArgs[0])
{
case 2:
selectedPalettes = 0;
// fall through
case 0:
animBattlers[0] = gBattleAnimAttacker;
break;
case 3:
selectedPalettes = 0;
// fall through
case 1:
animBattlers[0] = gBattleAnimTarget;
break;
case 4:
animBattlers[0] = gBattleAnimAttacker;
animBattlers[1] = gBattleAnimTarget;
break;
case 5:
animBattlers[0] = 0xFF;
break;
case 6:
selectedPalettes = 0;
animBattlers[0] = BATTLE_PARTNER(gBattleAnimAttacker);
break;
case 7:
selectedPalettes = 0;
animBattlers[0] = BATTLE_PARTNER(gBattleAnimTarget);
break;
}
for (battler = 0; battler < MAX_BATTLERS_COUNT; ++battler)
{
if (battler != animBattlers[0]
&& battler != animBattlers[1]
&& IsBattlerSpriteVisible(battler))
selectedPalettes |= 0x10000 << sub_8075D80(battler);
}
StartBlendAnimSpriteColor(taskId, selectedPalettes);
}
void AnimTask_SetCamouflageBlend(u8 taskId)
{
u32 selectedPalettes = UnpackSelectedBattleAnimPalettes(gBattleAnimArgs[0]);
switch (gBattleTerrain)
{
case BATTLE_TERRAIN_GRASS:
gBattleAnimArgs[4] = RGB(12, 24, 2);
break;
case BATTLE_TERRAIN_LONG_GRASS:
gBattleAnimArgs[4] = RGB(0, 15, 2);
break;
case BATTLE_TERRAIN_SAND:
gBattleAnimArgs[4] = RGB(30, 24, 11);
break;
case BATTLE_TERRAIN_UNDERWATER:
gBattleAnimArgs[4] = RGB(0, 0, 18);
break;
case BATTLE_TERRAIN_WATER:
gBattleAnimArgs[4] = RGB(11, 22, 31);
break;
case BATTLE_TERRAIN_POND:
gBattleAnimArgs[4] = RGB(11, 22, 31);
break;
case BATTLE_TERRAIN_MOUNTAIN:
gBattleAnimArgs[4] = RGB(22, 16, 10);
break;
case BATTLE_TERRAIN_CAVE:
gBattleAnimArgs[4] = RGB(14, 9, 3);
break;
case BATTLE_TERRAIN_BUILDING:
gBattleAnimArgs[4] = RGB(31, 31, 31);
break;
case BATTLE_TERRAIN_PLAIN:
gBattleAnimArgs[4] = RGB(31, 31, 31);
break;
}
StartBlendAnimSpriteColor(taskId, selectedPalettes);
}
void AnimTask_BlendParticle(u8 taskId)
{
u8 paletteIndex = IndexOfSpritePaletteTag(gBattleAnimArgs[0]);
u32 selectedPalettes = 1 << (paletteIndex + 16);
StartBlendAnimSpriteColor(taskId, selectedPalettes);
}
static void StartBlendAnimSpriteColor(u8 taskId, u32 selectedPalettes)
{
gTasks[taskId].data[0] = selectedPalettes;
gTasks[taskId].data[1] = selectedPalettes >> 16;
gTasks[taskId].data[2] = gBattleAnimArgs[1];
gTasks[taskId].data[3] = gBattleAnimArgs[2];
gTasks[taskId].data[4] = gBattleAnimArgs[3];
gTasks[taskId].data[5] = gBattleAnimArgs[4];
gTasks[taskId].data[10] = gBattleAnimArgs[2];
gTasks[taskId].func = AnimTask_BlendSpriteColor_Step2;
gTasks[taskId].func(taskId);
}
static void AnimTask_BlendSpriteColor_Step2(u8 taskId)
{
u32 selectedPalettes;
u16 singlePaletteMask = 0;
if (gTasks[taskId].data[9] == gTasks[taskId].data[2])
{
gTasks[taskId].data[9] = 0;
selectedPalettes = gTasks[taskId].data[0] | (gTasks[taskId].data[1] << 16);
while (selectedPalettes)
{
if (selectedPalettes & 1)
BlendPalette(singlePaletteMask, 16, gTasks[taskId].data[10], gTasks[taskId].data[5]);
singlePaletteMask += 0x10;
selectedPalettes >>= 1;
}
if (gTasks[taskId].data[10] < gTasks[taskId].data[4])
++gTasks[taskId].data[10];
else if (gTasks[taskId].data[10] > gTasks[taskId].data[4])
--gTasks[taskId].data[10];
else
DestroyAnimVisualTask(taskId);
}
else
{
++gTasks[taskId].data[9];
}
}
void sub_80BAB38(u8 taskId)
{
BeginHardwarePaletteFade(gBattleAnimArgs[0],
gBattleAnimArgs[1],
gBattleAnimArgs[2],
gBattleAnimArgs[3],
gBattleAnimArgs[4]);
gTasks[taskId].func = sub_80BAB78;
}
static void sub_80BAB78(u8 taskId)
{
if (!gPaletteFade.active)
DestroyAnimVisualTask(taskId);
}
void sub_80BAB98(u8 taskId)
{
struct Task *task = &gTasks[taskId];
task->data[0] = gBattleAnimArgs[0];
task->data[1] = 0;
task->data[2] = gBattleAnimArgs[1];
task->data[3] = gBattleAnimArgs[2];
task->data[4] = gBattleAnimArgs[3];
task->data[5] = 0;
task->func = sub_80BABD0;
}
static void sub_80BABD0(u8 taskId)
{
struct Task *task = &gTasks[taskId];
if (task->data[4])
{
if (task->data[1])
{
--task->data[1];
}
else
{
task->data[6] = CloneBattlerSpriteWithBlend(task->data[0]);
if (task->data[6] >= 0)
{
gSprites[task->data[6]].oam.priority = task->data[0] ? 1 : 2;
gSprites[task->data[6]].data[0] = task->data[3];
gSprites[task->data[6]].data[1] = taskId;
gSprites[task->data[6]].data[2] = 5;
gSprites[task->data[6]].callback = sub_80BACA8;
++task->data[5];
}
--task->data[4];
task->data[1] = task->data[2];
}
}
else if (task->data[5] == 0)
{
DestroyAnimVisualTask(taskId);
}
}
static void sub_80BACA8(struct Sprite *sprite)
{
if (sprite->data[0])
{
--sprite->data[0];
}
else
{
--gTasks[sprite->data[1]].data[sprite->data[2]];
obj_delete_but_dont_free_vram(sprite);
}
}
void sub_80BACEC(u8 taskId)
{
u16 species;
s32 newSpriteId;
u16 var0;
u16 bg1Cnt;
u8 spriteId;
struct BattleAnimBgData animBgData;
var0 = 0;
gBattle_WIN0H = 0;
gBattle_WIN0V = 0;
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR
| WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR
| WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON);
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(8, 12));
bg1Cnt = GetGpuReg(REG_OFFSET_BG1CNT);
((struct BgCnt *)&bg1Cnt)->priority = 0;
((struct BgCnt *)&bg1Cnt)->screenSize = 0;
SetGpuReg(REG_OFFSET_BG1CNT, bg1Cnt);
if (!IsContest())
{
((struct BgCnt *)&bg1Cnt)->charBaseBlock = 1;
SetGpuReg(REG_OFFSET_BG1CNT, bg1Cnt);
}
if (IsDoubleBattle() && !IsContest())
{
if (GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_OPPONENT_RIGHT
|| GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_PLAYER_LEFT)
{
if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)) == TRUE)
{
gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]].oam.priority -= 1;
((struct BgCnt *)&bg1Cnt)->priority = 1;
SetGpuReg(REG_OFFSET_BG1CNT, bg1Cnt);
var0 = 1;
}
}
}
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES);
else
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES);
spriteId = GetAnimBattlerSpriteId(0);
newSpriteId = sub_8076E34(gBattleAnimAttacker, spriteId, species);
sub_80752A0(&animBgData);
AnimLoadCompressedBgTilemap(animBgData.bgId, gFile_graphics_battle_anims_masks_curse_tilemap);
if (IsContest())
sub_80730C0(animBgData.paletteId, animBgData.bgTilemap, 0, 0);
AnimLoadCompressedBgGfx(animBgData.bgId, gFile_graphics_battle_anims_masks_curse_sheet, animBgData.tilesOffset);
LoadPalette(gUnknown_83E7CC8, animBgData.paletteId * 16 + 1, 2);
gBattle_BG1_X = -gSprites[spriteId].pos1.x + 32;
gBattle_BG1_Y = -gSprites[spriteId].pos1.y + 32;
gTasks[taskId].data[0] = newSpriteId;
gTasks[taskId].data[6] = var0;
gTasks[taskId].func = sub_80BAF38;
}
static void sub_80BAF38(u8 taskId)
{
struct BattleAnimBgData animBgData;
struct Sprite *sprite;
u16 bg1Cnt;
gTasks[taskId].data[10] += 4;
gBattle_BG1_Y -= 4;
if (gTasks[taskId].data[10] == 64)
{
gTasks[taskId].data[10] = 0;
gBattle_BG1_Y += 64;
if (++gTasks[taskId].data[11] == 4)
{
sub_8073128(0);
gBattle_WIN0H = 0;
gBattle_WIN0V = 0;
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR
| WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR
| WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
if (!IsContest())
{
bg1Cnt = GetGpuReg(REG_OFFSET_BG1CNT);
((struct BgCnt *)&bg1Cnt)->charBaseBlock = 0;
SetGpuReg(REG_OFFSET_BG1CNT, bg1Cnt);
}
SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON);
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
sprite = &gSprites[GetAnimBattlerSpriteId(0)]; // unused
sprite = &gSprites[gTasks[taskId].data[0]];
DestroySprite(sprite);
sub_80752A0(&animBgData);
sub_8075358(animBgData.bgId);
if (gTasks[taskId].data[6] == 1)
++gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]].oam.priority;
gBattle_BG1_Y = 0;
DestroyAnimVisualTask(taskId);
}
}
}
void sub_80BB088(u8 taskId)
{
u8 i;
sAnimStatsChangeData = AllocZeroed(sizeof(struct AnimStatsChangeData));
for (i = 0; i < 8; ++i)
sAnimStatsChangeData->data[i] = gBattleAnimArgs[i];
gTasks[taskId].func = sub_80BB0D8;
}
static void sub_80BB0D8(u8 taskId)
{
if (sAnimStatsChangeData->data[2] == 0)
sAnimStatsChangeData->battler1 = gBattleAnimAttacker;
else
sAnimStatsChangeData->battler1 = gBattleAnimTarget;
sAnimStatsChangeData->battler2 = BATTLE_PARTNER(sAnimStatsChangeData->battler1);
if (IsContest() || (sAnimStatsChangeData->data[3] && !IsBattlerSpriteVisible(sAnimStatsChangeData->battler2)))
sAnimStatsChangeData->data[3] = 0;
gBattle_WIN0H = 0;
gBattle_WIN0V = 0;
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR
| WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR
| WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON);
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 0);
SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0);
if (!IsContest())
SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1);
if (IsDoubleBattle() && sAnimStatsChangeData->data[3] == 0)
{
if (GetBattlerPosition(sAnimStatsChangeData->battler1) == B_POSITION_OPPONENT_RIGHT
|| GetBattlerPosition(sAnimStatsChangeData->battler1) == B_POSITION_PLAYER_LEFT)
{
if (IsBattlerSpriteVisible(sAnimStatsChangeData->battler2) == TRUE)
{
gSprites[gBattlerSpriteIds[sAnimStatsChangeData->battler2]].oam.priority -= 1;
SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
sAnimStatsChangeData->higherPriority = 1;
}
}
}
if (GetBattlerSide(sAnimStatsChangeData->battler1) != B_SIDE_PLAYER)
sAnimStatsChangeData->species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[sAnimStatsChangeData->battler1]], MON_DATA_SPECIES);
else
sAnimStatsChangeData->species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[sAnimStatsChangeData->battler1]], MON_DATA_SPECIES);
gTasks[taskId].func = sub_80BB2A0;
}
static void sub_80BB2A0(u8 taskId)
{
struct BattleAnimBgData animBgData;
u8 spriteId, newSpriteId = 0;
u8 battlerSpriteId;
battlerSpriteId = gBattlerSpriteIds[sAnimStatsChangeData->battler1];
spriteId = sub_8076E34(sAnimStatsChangeData->battler1, battlerSpriteId, sAnimStatsChangeData->species);
if (sAnimStatsChangeData->data[3])
{
battlerSpriteId = gBattlerSpriteIds[sAnimStatsChangeData->battler2];
newSpriteId = sub_8076E34(sAnimStatsChangeData->battler2, battlerSpriteId, sAnimStatsChangeData->species);
}
sub_80752A0(&animBgData);
if (sAnimStatsChangeData->data[0] == 0)
AnimLoadCompressedBgTilemap(animBgData.bgId, gBattleStatMask1_Tilemap);
else
AnimLoadCompressedBgTilemap(animBgData.bgId, gBattleStatMask2_Tilemap);
if (IsContest())
sub_80730C0(animBgData.paletteId, animBgData.bgTilemap, 0, 0);
AnimLoadCompressedBgGfx(animBgData.bgId, gBattleStatMask_Gfx, animBgData.tilesOffset);
switch (sAnimStatsChangeData->data[1])
{
case 0:
LoadCompressedPalette(gBattleStatMask2_Pal, animBgData.paletteId * 16, 32);
break;
case 1:
LoadCompressedPalette(gBattleStatMask1_Pal, animBgData.paletteId * 16, 32);
break;
case 2:
LoadCompressedPalette(gBattleStatMask3_Pal, animBgData.paletteId * 16, 32);
break;
case 3:
LoadCompressedPalette(gBattleStatMask4_Pal, animBgData.paletteId * 16, 32);
break;
case 4:
LoadCompressedPalette(gBattleStatMask6_Pal, animBgData.paletteId * 16, 32);
break;
case 5:
LoadCompressedPalette(gBattleStatMask7_Pal, animBgData.paletteId * 16, 32);
break;
case 6:
LoadCompressedPalette(gBattleStatMask8_Pal, animBgData.paletteId * 16, 32);
break;
default:
LoadCompressedPalette(gBattleStatMask5_Pal, animBgData.paletteId * 16, 32);
break;
}
gBattle_BG1_X = 0;
gBattle_BG1_Y = 0;
if (sAnimStatsChangeData->data[0] == 1)
{
gBattle_BG1_X = 64;
gTasks[taskId].data[1] = -3;
}
else
{
gTasks[taskId].data[1] = 3;
}
if (sAnimStatsChangeData->data[4] == 0)
{
gTasks[taskId].data[4] = 10;
gTasks[taskId].data[5] = 20;
}
else
{
gTasks[taskId].data[4] = 13;
gTasks[taskId].data[5] = 30;
}
gTasks[taskId].data[0] = spriteId;
gTasks[taskId].data[2] = sAnimStatsChangeData->data[3];
gTasks[taskId].data[3] = newSpriteId;
gTasks[taskId].data[6] = sAnimStatsChangeData->higherPriority;
gTasks[taskId].data[7] = gBattlerSpriteIds[sAnimStatsChangeData->battler2];
gTasks[taskId].func = sub_80BB4B8;
if (sAnimStatsChangeData->data[0] == 0)
PlaySE12WithPanning(SE_W287, BattleAnimAdjustPanning2(PAN_SIDE_PLAYER));
else
PlaySE12WithPanning(SE_W287B, BattleAnimAdjustPanning2(PAN_SIDE_PLAYER));
}
static void sub_80BB4B8(u8 taskId)
{
gBattle_BG1_Y += gTasks[taskId].data[1];
switch (gTasks[taskId].data[15])
{
case 0:
if (gTasks[taskId].data[11]++ > 0)
{
gTasks[taskId].data[11] = 0;
++gTasks[taskId].data[12];
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12]));
if (gTasks[taskId].data[12] == gTasks[taskId].data[4])
++gTasks[taskId].data[15];
}
break;
case 1:
if (++gTasks[taskId].data[10] == gTasks[taskId].data[5])
++gTasks[taskId].data[15];
break;
case 2:
if (gTasks[taskId].data[11]++ > 0)
{
gTasks[taskId].data[11] = 0;
--gTasks[taskId].data[12];
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12]));
if (gTasks[taskId].data[12] == 0)
{
sub_8073128(0);
++gTasks[taskId].data[15];
}
}
break;
case 3:
gBattle_WIN0H = 0;
gBattle_WIN0V = 0;
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR
| WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR
| WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
if (!IsContest())
SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON);
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
DestroySprite(&gSprites[gTasks[taskId].data[0]]);
if (gTasks[taskId].data[2])
DestroySprite(&gSprites[gTasks[taskId].data[3]]);
if (gTasks[taskId].data[6] == 1)
++gSprites[gTasks[taskId].data[7]].oam.priority;
Free(sAnimStatsChangeData);
sAnimStatsChangeData = NULL;
DestroyAnimVisualTask(taskId);
break;
}
}
void sub_80BB660(u8 taskId)
{
u32 selectedPalettes = sub_8075CB8(1, 1, 1, 1);
sub_80BB790(selectedPalettes, 0);
gTasks[taskId].data[14] = selectedPalettes >> 16;
selectedPalettes = sub_8075BE8(1, 0, 0, 0, 0, 0, 0) & 0xFFFF;
sub_80BB790(selectedPalettes, 0xFFFF);
gTasks[taskId].data[15] = selectedPalettes;
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 0;
gTasks[taskId].func = sub_80BB6CC;
}
static void sub_80BB6CC(u8 taskId)
{
u16 i;
struct Task *task = &gTasks[taskId];
switch (task->data[0])
{
case 0:
if (++task->data[1] > 6)
{
task->data[1] = 0;
task->data[2] = 16;
++task->data[0];
}
break;
case 1:
if (++task->data[1] > 1)
{
task->data[1] = 0;
--task->data[2];
for (i = 0; i < 16; ++i)
{
if ((task->data[15] >> i) & 1)
{
u16 paletteOffset = i * 16;
BlendPalette(paletteOffset, 16, task->data[2], 0xFFFF);
}
if ((task->data[14] >> i) & 1)
{
u16 paletteOffset = i * 16 + 0x100;
BlendPalette(paletteOffset, 16, task->data[2], 0);
}
}
if (task->data[2] == 0)
++task->data[0];
}
break;
case 2:
DestroyAnimVisualTask(taskId);
break;
}
}
static void sub_80BB790(u32 selectedPalettes, u16 color)
{
u16 i, curOffset, paletteOffset;
for (i = 0; i < 32; selectedPalettes >>= 1, ++i)
if (selectedPalettes & 1)
for (curOffset = i * 16, paletteOffset = curOffset; curOffset < paletteOffset + 16; ++curOffset)
gPlttBufferFaded[curOffset] = color;
}
void sub_80BB7DC(u8 taskId)
{
s32 j;
u32 battler, selectedPalettes = 0;
for (battler = 0; battler < MAX_BATTLERS_COUNT; ++battler)
if (gBattleAnimAttacker != battler)
selectedPalettes |= 1 << (battler + 16);
for (j = 5; j != 0; --j)
gBattleAnimArgs[j] = gBattleAnimArgs[j - 1];
StartBlendAnimSpriteColor(taskId, selectedPalettes);
}
void sub_80BB82C(u8 taskId)
{
u8 newTaskId;
sub_8075458(0);
newTaskId = CreateTask(sub_80BB8A4, 5);
if (gBattleAnimArgs[2] && GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
}
gTasks[newTaskId].data[1] = gBattleAnimArgs[0];
gTasks[newTaskId].data[2] = gBattleAnimArgs[1];
gTasks[newTaskId].data[3] = gBattleAnimArgs[3];
++gTasks[newTaskId].data[0];
DestroyAnimVisualTask(taskId);
}
static void sub_80BB8A4(u8 taskId)
{
gTasks[taskId].data[10] += gTasks[taskId].data[1];
gTasks[taskId].data[11] += gTasks[taskId].data[2];
gBattle_BG3_X += gTasks[taskId].data[10] >> 8;
gBattle_BG3_Y += gTasks[taskId].data[11] >> 8;
gTasks[taskId].data[10] &= 0xFF;
gTasks[taskId].data[11] &= 0xFF;
if (gBattleAnimArgs[7] == gTasks[taskId].data[3])
{
gBattle_BG3_X = 0;
gBattle_BG3_Y = 0;
sub_8075458(1);
DestroyTask(taskId);
}
}
void AnimTask_GetAttackerSide(u8 taskId)
{
gBattleAnimArgs[7] = GetBattlerSide(gBattleAnimAttacker);
DestroyAnimVisualTask(taskId);
}
void AnimTask_GetTargetSide(u8 taskId)
{
gBattleAnimArgs[7] = GetBattlerSide(gBattleAnimTarget);
DestroyAnimVisualTask(taskId);
}
void AnimTask_GetTargetIsAttackerPartner(u8 taskId)
{
gBattleAnimArgs[7] = BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget;
DestroyAnimVisualTask(taskId);
}
void sub_80BB9B0(u8 taskId)
{
u16 battler;
for (battler = 0; battler < MAX_BATTLERS_COUNT; ++battler)
if (battler != gBattleAnimAttacker && IsBattlerSpriteVisible(battler))
gSprites[gBattlerSpriteIds[battler]].invisible = gBattleAnimArgs[0];
DestroyAnimVisualTask(taskId);
}
void sub_80BBA20(u8 taskId, s32 unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5, u8 arg6, u8 arg7, const u32 *gfx, const u32 *tilemap, const u32 *palette)
{
u16 species;
u8 spriteId, newSpriteId = 0;
u16 bg1Cnt;
struct BattleAnimBgData animBgData;
u8 battler2 = BATTLE_PARTNER(battler1);
if (IsContest() || (arg4 && !IsBattlerSpriteVisible(battler2)))
arg4 = 0;
gBattle_WIN0H = 0;
gBattle_WIN0V = 0;
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR
| WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR
| WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON);
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
bg1Cnt = GetGpuReg(REG_OFFSET_BG1CNT);
((vBgCnt *)&bg1Cnt)->priority = 0;
((vBgCnt *)&bg1Cnt)->screenSize = 0;
((vBgCnt *)&bg1Cnt)->areaOverflowMode = 1;
if (!IsContest())
((vBgCnt *)&bg1Cnt)->charBaseBlock = 1;
SetGpuReg(REG_OFFSET_BG1CNT, bg1Cnt);
if (GetBattlerSide(battler1) != B_SIDE_PLAYER)
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler1]], MON_DATA_SPECIES);
else
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler1]], MON_DATA_SPECIES);
spriteId = sub_8076E34(battler1, gBattlerSpriteIds[battler1], species);
if (arg4)
newSpriteId = sub_8076E34(battler2, gBattlerSpriteIds[battler2], species);
sub_80752A0(&animBgData);
AnimLoadCompressedBgTilemap(animBgData.bgId, tilemap);
if (IsContest())
sub_80730C0(animBgData.paletteId, animBgData.bgTilemap, 0, 0);
AnimLoadCompressedBgGfx(animBgData.bgId, gfx, animBgData.tilesOffset);
LoadCompressedPalette(palette, animBgData.paletteId * 16, 32);
gBattle_BG1_X = 0;
gBattle_BG1_Y = 0;
gTasks[taskId].data[1] = arg2;
gTasks[taskId].data[4] = arg5;
gTasks[taskId].data[5] = arg7;
gTasks[taskId].data[6] = arg6;
gTasks[taskId].data[0] = spriteId;
gTasks[taskId].data[2] = arg4;
gTasks[taskId].data[3] = newSpriteId;
gTasks[taskId].func = sub_80BBC2C;
}
static void sub_80BBC2C(u8 taskId)
{
gTasks[taskId].data[13] += gTasks[taskId].data[1] < 0 ? -gTasks[taskId].data[1] : gTasks[taskId].data[1];
if (gTasks[taskId].data[1] < 0)
gBattle_BG1_Y -= gTasks[taskId].data[13] >> 8;
else
gBattle_BG1_Y += gTasks[taskId].data[13] >> 8;
gTasks[taskId].data[13] &= 0xFF;
switch (gTasks[taskId].data[15])
{
case 0:
if (gTasks[taskId].data[11]++ >= gTasks[taskId].data[6])
{
gTasks[taskId].data[11] = 0;
++gTasks[taskId].data[12];
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12]));
if (gTasks[taskId].data[12] == gTasks[taskId].data[4])
++gTasks[taskId].data[15];
}
break;
case 1:
if (++gTasks[taskId].data[10] == gTasks[taskId].data[5])
++gTasks[taskId].data[15];
break;
case 2:
if (gTasks[taskId].data[11]++ >= gTasks[taskId].data[6])
{
gTasks[taskId].data[11] = 0;
--gTasks[taskId].data[12];
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12]));
if (gTasks[taskId].data[12] == 0)
{
sub_8073128(0);
gBattle_WIN0H = 0;
gBattle_WIN0V = 0;
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR
| WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR
| WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
if (!IsContest())
{
u16 bg1Cnt = GetGpuReg(REG_OFFSET_BG1CNT);
((vBgCnt *)&bg1Cnt)->charBaseBlock = 0;
SetGpuReg(REG_OFFSET_BG1CNT, bg1Cnt);
}
SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON);
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
DestroySprite(&gSprites[gTasks[taskId].data[0]]);
if (gTasks[taskId].data[2])
DestroySprite(&gSprites[gTasks[taskId].data[3]]);
DestroyAnimVisualTask(taskId);
}
}
break;
}
}
void AnimTask_GetBattleTerrain(u8 taskId)
{
gBattleAnimArgs[0] = gBattleTerrain;
DestroyAnimVisualTask(taskId);
}
void sub_80BBE10(u8 taskId)
{
gMonSpritesGfxPtr->field_17C = AllocZeroed(0x2000);
DestroyAnimVisualTask(taskId);
}
void sub_80BBE3C(u8 taskId)
{
FREE_AND_SET_NULL(gMonSpritesGfxPtr->field_17C);
DestroyAnimVisualTask(taskId);
}
void sub_80BBE6C(u8 taskId)
{
u32 selectedPalettes;
s32 paletteIndex = 0;
if (gBattleAnimArgs[0] == 0)
for (selectedPalettes = sub_8075BE8(1, 0, 0, 0, 0, 0, 0);
(selectedPalettes & 1) == 0;
++paletteIndex)
selectedPalettes >>= 1;
else if (gBattleAnimArgs[0] == 1)
paletteIndex = gBattleAnimAttacker + 16;
else if (gBattleAnimArgs[0] == 2)
paletteIndex = gBattleAnimTarget + 16;
memcpy(&gMonSpritesGfxPtr->field_17C[gBattleAnimArgs[1] * 16], &gPlttBufferUnfaded[paletteIndex * 16], 32);
DestroyAnimVisualTask(taskId);
}
void sub_80BBF08(u8 taskId)
{
u32 selectedPalettes;
s32 paletteIndex = 0;
if (gBattleAnimArgs[0] == 0)
for (selectedPalettes = sub_8075BE8(1, 0, 0, 0, 0, 0, 0);
(selectedPalettes & 1) == 0;
++paletteIndex)
selectedPalettes >>= 1;
else if (gBattleAnimArgs[0] == 1)
paletteIndex = gBattleAnimAttacker + 16;
else if (gBattleAnimArgs[0] == 2)
paletteIndex = gBattleAnimTarget + 16;
memcpy(&gPlttBufferUnfaded[paletteIndex * 16], &gMonSpritesGfxPtr->field_17C[gBattleAnimArgs[1] * 16], 32);
DestroyAnimVisualTask(taskId);
}
void sub_80BBFA4(u8 taskId)
{
u32 selectedPalettes;
s32 paletteIndex = 0;
if (gBattleAnimArgs[0] == 0)
for (selectedPalettes = sub_8075BE8(1, 0, 0, 0, 0, 0, 0);
(selectedPalettes & 1) == 0;
++paletteIndex)
selectedPalettes >>= 1;
else if (gBattleAnimArgs[0] == 1)
paletteIndex = gBattleAnimAttacker + 16;
else if (gBattleAnimArgs[0] == 2)
paletteIndex = gBattleAnimTarget + 16;
memcpy(&gPlttBufferUnfaded[paletteIndex * 16], &gPlttBufferFaded[paletteIndex * 16], 32);
DestroyAnimVisualTask(taskId);
}
void AnimTask_IsContest(u8 taskId)
{
if (IsContest())
gBattleAnimArgs[7] = 1;
else
gBattleAnimArgs[7] = 0;
DestroyAnimVisualTask(taskId);
}
void sub_80BC060(u8 taskId)
{
gBattleAnimAttacker = gBattlerTarget;
gBattleAnimTarget = gEffectBattler;
DestroyAnimVisualTask(taskId);
}
void AnimTask_IsTargetSameSide(u8 taskId)
{
if (GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget))
gBattleAnimArgs[7] = 1;
else
gBattleAnimArgs[7] = 0;
DestroyAnimVisualTask(taskId);
}
void sub_80BC0DC(u8 taskId)
{
gBattleAnimTarget = gBattlerTarget;
DestroyAnimVisualTask(taskId);
}
void sub_80BC0FC(u8 taskId)
{
gBattleAnimAttacker = gBattlerAttacker;
gBattleAnimTarget = gEffectBattler;
DestroyAnimVisualTask(taskId);
}
void sub_80BC12C(u8 taskId)
{
if (IsContest())
{
DestroyAnimVisualTask(taskId);
}
else
{
gTasks[taskId].data[0] = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].invisible;
gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].invisible = 1;
gTasks[taskId].func = sub_80BC19C;
--gAnimVisualTaskCount;
}
}
static void sub_80BC19C(u8 taskId)
{
if (gBattleAnimArgs[7] == 0x1000)
{
gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].invisible = (u8)gTasks[taskId].data[0] & 1;
DestroyTask(taskId);
}
}
+2 -2
View File
@@ -1191,7 +1191,7 @@ static void sub_80303A8(u8 taskId)
{
s16 *data = gTasks[taskId].data;
u8 battlerId = tExpTask_battler;
u16 v5 = sub_80768B0(battlerId);
u16 v5 = GetBattlerSpriteBGPriorityRank(battlerId);
bool32 v6 = ((v5 ^ BIT_SIDE)) != B_SIDE_PLAYER;
struct Sprite *sprite = &gSprites[gBattlerSpriteIds[battlerId]];
@@ -1222,7 +1222,7 @@ static void sub_80303A8(u8 taskId)
u32 battlerIdAlt = battlerId;
bool32 v6Alt = v6;
sub_8072E48(battlerIdAlt, v6Alt);
MoveBattlerSpriteToBG(battlerIdAlt, v6Alt);
}
++data[15];
break;
+495
View File
@@ -0,0 +1,495 @@
#include "global.h"
#include "battle.h"
#include "battle_anim.h"
#include "battle_setup.h"
#include "bg.h"
#include "gpu_regs.h"
#include "main.h"
#include "scanline_effect.h"
#include "task.h"
#include "trig.h"
#include "constants/trainers.h"
static EWRAM_DATA u16 sBgCnt = 0;
extern const u8 gUnknown_83E7CCA[];
extern const u8 gUnknown_83E7CCE[];
static void BattleIntroSlide1(u8 taskId);
static void BattleIntroSlide2(u8 taskId);
static void BattleIntroSlide3(u8 taskId);
static void BattleIntroSlideLink(u8 taskId);
static const TaskFunc sBattleIntroSlideFuncs[] =
{
BattleIntroSlide1, // BATTLE_TERRAIN_GRASS
BattleIntroSlide1, // BATTLE_TERRAIN_LONG_GRASS
BattleIntroSlide2, // BATTLE_TERRAIN_SAND
BattleIntroSlide2, // BATTLE_TERRAIN_UNDERWATER
BattleIntroSlide2, // BATTLE_TERRAIN_WATER
BattleIntroSlide1, // BATTLE_TERRAIN_POND
BattleIntroSlide1, // BATTLE_TERRAIN_MOUNTAIN
BattleIntroSlide1, // BATTLE_TERRAIN_CAVE
BattleIntroSlide3, // BATTLE_TERRAIN_BUILDING
BattleIntroSlide3, // BATTLE_TERRAIN_PLAIN
};
void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value)
{
if (bgId < 4)
{
sBgCnt = GetGpuReg(gUnknown_83E7CCA[bgId]);
switch (attributeId)
{
case BG_ANIM_SCREEN_SIZE:
((struct BgCnt *)&sBgCnt)->screenSize = value;
break;
case BG_ANIM_AREA_OVERFLOW_MODE:
((struct BgCnt *)&sBgCnt)->areaOverflowMode = value;
break;
case BG_ANIM_MOSAIC:
((struct BgCnt *)&sBgCnt)->mosaic = value;
break;
case BG_ANIM_CHAR_BASE_BLOCK:
((struct BgCnt *)&sBgCnt)->charBaseBlock = value;
break;
case BG_ANIM_PRIORITY:
((struct BgCnt *)&sBgCnt)->priority = value;
break;
case BG_ANIM_PALETTES_MODE:
((struct BgCnt *)&sBgCnt)->palettes = value;
break;
case BG_ANIM_SCREEN_BASE_BLOCK:
((struct BgCnt *)&sBgCnt)->screenBaseBlock = value;
break;
}
SetGpuReg(gUnknown_83E7CCA[bgId], sBgCnt);
}
}
s32 GetAnimBgAttribute(u8 bgId, u8 attributeId)
{
u16 bgCnt;
if (bgId < 4)
{
bgCnt = GetGpuReg(gUnknown_83E7CCE[bgId]);
switch (attributeId)
{
case BG_ANIM_SCREEN_SIZE:
return ((struct BgCnt *)&bgCnt)->screenSize;
case BG_ANIM_AREA_OVERFLOW_MODE:
return ((struct BgCnt *)&bgCnt)->areaOverflowMode;
case BG_ANIM_MOSAIC:
return ((struct BgCnt *)&bgCnt)->mosaic;
case BG_ANIM_CHAR_BASE_BLOCK:
return ((struct BgCnt *)&bgCnt)->charBaseBlock;
case BG_ANIM_PRIORITY:
return ((struct BgCnt *)&bgCnt)->priority;
case BG_ANIM_PALETTES_MODE:
return ((struct BgCnt *)&bgCnt)->palettes;
case BG_ANIM_SCREEN_BASE_BLOCK:
return ((struct BgCnt *)&bgCnt)->screenBaseBlock;
}
}
return 0;
}
void HandleIntroSlide(u8 terrain)
{
u8 taskId;
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
taskId = CreateTask(BattleIntroSlideLink, 0);
}
else if ((gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) && gGameVersion != VERSION_RUBY)
{
terrain = BATTLE_TERRAIN_UNDERWATER;
taskId = CreateTask(BattleIntroSlide2, 0);
}
else
{
taskId = CreateTask(sBattleIntroSlideFuncs[terrain], 0);
}
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = terrain;
gTasks[taskId].data[2] = 0;
gTasks[taskId].data[3] = 0;
gTasks[taskId].data[4] = 0;
gTasks[taskId].data[5] = 0;
gTasks[taskId].data[6] = 0;
}
void sub_80BC41C(u8 taskId)
{
DestroyTask(taskId);
gBattle_BG1_X = 0;
gBattle_BG1_Y = 0;
gBattle_BG2_X = 0;
gBattle_BG2_Y = 0;
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
SetGpuReg(REG_OFFSET_BLDY, 0);
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
}
static void BattleIntroSlide1(u8 taskId)
{
s32 i;
gBattle_BG1_X += 6;
switch (gTasks[taskId].data[0])
{
case 0:
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
gTasks[taskId].data[2] = 16;
++gTasks[taskId].data[0];
}
else
{
gTasks[taskId].data[2] = 1;
++gTasks[taskId].data[0];
}
break;
case 1:
if (--gTasks[taskId].data[2] == 0)
{
++gTasks[taskId].data[0];
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
}
break;
case 2:
gBattle_WIN0V -= 0xFF;
if ((gBattle_WIN0V & 0xFF00) == 0x3000)
{
++gTasks[taskId].data[0];
gTasks[taskId].data[2] = 240;
gTasks[taskId].data[3] = 32;
gIntroSlideFlags &= ~1;
}
break;
case 3:
if (gTasks[taskId].data[3])
{
--gTasks[taskId].data[3];
}
else
{
if (gTasks[taskId].data[1] == 1)
{
if (gBattle_BG1_Y != 0xFFB0)
gBattle_BG1_Y -= 2;
}
else if (gBattle_BG1_Y != 0xFFC8)
{
gBattle_BG1_Y -= 1;
}
}
if (gBattle_WIN0V & 0xFF00)
gBattle_WIN0V -= 0x3FC;
if (gTasks[taskId].data[2])
gTasks[taskId].data[2] -= 2;
// Scanline settings have already been set in CB2_InitBattleInternal
for (i = 0; i < 80; ++i)
gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2];
while (i < 160)
gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i++] = -gTasks[taskId].data[2];
if (!gTasks[taskId].data[2])
{
gScanlineEffect.state = 3;
++gTasks[taskId].data[0];
CpuFill32(0, (void *)BG_SCREEN_ADDR(28), BG_SCREEN_SIZE);
SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0);
SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 0);
SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(28) | BGCNT_TXT256x512);
SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(30) | BGCNT_TXT512x256);
}
break;
case 4:
sub_80BC41C(taskId);
break;
}
}
static void BattleIntroSlide2(u8 taskId)
{
s32 i;
switch (gTasks[taskId].data[1])
{
case 2:
case 4:
gBattle_BG1_X += 8;
break;
case 3:
gBattle_BG1_X += 6;
break;
}
if (gTasks[taskId].data[1] == 4)
{
gBattle_BG1_Y = Cos2(gTasks[taskId].data[6]) / 512 - 8;
if (gTasks[taskId].data[6] < 180)
gTasks[taskId].data[6] += 4;
else
gTasks[taskId].data[6] += 6;
if (gTasks[taskId].data[6] == 360)
gTasks[taskId].data[6] = 0;
}
switch (gTasks[taskId].data[0])
{
case 0:
gTasks[taskId].data[4] = 16;
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
gTasks[taskId].data[2] = 16;
++gTasks[taskId].data[0];
}
else
{
gTasks[taskId].data[2] = 1;
++gTasks[taskId].data[0];
}
break;
case 1:
if (--gTasks[taskId].data[2] == 0)
{
++gTasks[taskId].data[0];
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
}
break;
case 2:
gBattle_WIN0V -= 0xFF;
if ((gBattle_WIN0V & 0xFF00) == 0x3000)
{
++gTasks[taskId].data[0];
gTasks[taskId].data[2] = 240;
gTasks[taskId].data[3] = 32;
gTasks[taskId].data[5] = 1;
gIntroSlideFlags &= ~1;
}
break;
case 3:
if (gTasks[taskId].data[3])
{
if (--gTasks[taskId].data[3] == 0)
{
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(15, 0));
SetGpuReg(REG_OFFSET_BLDY, 0);
}
}
else if ((gTasks[taskId].data[4] & 0x1F) && --gTasks[taskId].data[5] == 0)
{
gTasks[taskId].data[4] += 0xFF;
gTasks[taskId].data[5] = 4;
}
if (gBattle_WIN0V & 0xFF00)
gBattle_WIN0V -= 0x3FC;
if (gTasks[taskId].data[2])
gTasks[taskId].data[2] -= 2;
// Scanline settings have already been set in CB2_InitBattleInternal()
for (i = 0; i < 80; ++i)
gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2];
while (i < 160)
gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i++] = -gTasks[taskId].data[2];
if (!gTasks[taskId].data[2])
{
gScanlineEffect.state = 3;
++gTasks[taskId].data[0];
CpuFill32(0, (void *)BG_SCREEN_ADDR(28), BG_SCREEN_SIZE);
SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0);
SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 0);
SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(28) | BGCNT_TXT256x512);
SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(30) | BGCNT_TXT512x256);
}
break;
case 4:
sub_80BC41C(taskId);
break;
}
if (gTasks[taskId].data[0] != 4)
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[4], 0));
}
static void BattleIntroSlide3(u8 taskId)
{
s32 i;
gBattle_BG1_X += 8;
switch (gTasks[taskId].data[0])
{
case 0:
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(8, 8));
SetGpuReg(REG_OFFSET_BLDY, 0);
gTasks[taskId].data[4] = BLDALPHA_BLEND(8, 8);
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
gTasks[taskId].data[2] = 16;
++gTasks[taskId].data[0];
}
else
{
gTasks[taskId].data[2] = 1;
++gTasks[taskId].data[0];
}
break;
case 1:
if (--gTasks[taskId].data[2] == 0)
{
++gTasks[taskId].data[0];
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
}
break;
case 2:
gBattle_WIN0V -= 0xFF;
if ((gBattle_WIN0V & 0xFF00) == 0x3000)
{
++gTasks[taskId].data[0];
gTasks[taskId].data[2] = 240;
gTasks[taskId].data[3] = 32;
gTasks[taskId].data[5] = 1;
gIntroSlideFlags &= ~1;
}
break;
case 3:
if (gTasks[taskId].data[3])
{
--gTasks[taskId].data[3];
}
else if ((gTasks[taskId].data[4] & 0xF) && --gTasks[taskId].data[5] == 0)
{
gTasks[taskId].data[4] += 0xFF;
gTasks[taskId].data[5] = 6;
}
if (gBattle_WIN0V & 0xFF00)
gBattle_WIN0V -= 0x3FC;
if (gTasks[taskId].data[2])
gTasks[taskId].data[2] -= 2;
// Scanline settings have already been set in CB2_InitBattleInternal()
for (i = 0; i < 80; ++i)
gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2];
while (i < 160)
gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i++] = -gTasks[taskId].data[2];
if (!gTasks[taskId].data[2])
{
gScanlineEffect.state = 3;
++gTasks[taskId].data[0];
CpuFill32(0, (void *)BG_SCREEN_ADDR(28), BG_SCREEN_SIZE);
SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0);
SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 0);
SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(28) | BGCNT_TXT256x512);
SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(30) | BGCNT_TXT512x256);
}
break;
case 4:
sub_80BC41C(taskId);
break;
}
if (gTasks[taskId].data[0] != 4)
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[4], 0));
}
static void BattleIntroSlideLink(u8 taskId)
{
s32 i;
if (gTasks[taskId].data[0] > 1 && !gTasks[taskId].data[4])
{
u16 var0 = gBattle_BG1_X & 0x8000;
if (var0 || gBattle_BG1_X < 80)
{
gBattle_BG1_X += 3;
gBattle_BG2_X -= 3;
}
else
{
CpuFill32(0, (void *)BG_SCREEN_ADDR(28), BG_SCREEN_SIZE);
CpuFill32(0, (void *)BG_SCREEN_ADDR(30), BG_SCREEN_SIZE);
gTasks[taskId].data[4] = 1;
}
}
switch (gTasks[taskId].data[0])
{
case 0:
gTasks[taskId].data[2] = 32;
++gTasks[taskId].data[0];
break;
case 1:
if (--gTasks[taskId].data[2] == 0)
{
++gTasks[taskId].data[0];
gSprites[gBattleStruct->linkBattleVsSpriteId_V].oam.objMode = ST_OAM_OBJ_WINDOW;
gSprites[gBattleStruct->linkBattleVsSpriteId_V].callback = sub_801182C;
gSprites[gBattleStruct->linkBattleVsSpriteId_S].oam.objMode = ST_OAM_OBJ_WINDOW;
gSprites[gBattleStruct->linkBattleVsSpriteId_S].callback = sub_801182C;
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2);
}
break;
case 2:
gBattle_WIN0V -= 0xFF;
if ((gBattle_WIN0V & 0xFF00) == 0x3000)
{
++gTasks[taskId].data[0];
gTasks[taskId].data[2] = 240;
gTasks[taskId].data[3] = 32;
gIntroSlideFlags &= ~1;
}
break;
case 3:
if (gBattle_WIN0V & 0xFF00)
gBattle_WIN0V -= 0x3FC;
if (gTasks[taskId].data[2])
gTasks[taskId].data[2] -= 2;
// Scanline settings have already been set in CB2_InitBattleInternal()
for (i = 0; i < 80; ++i)
gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2];
while (i < 160)
gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i++] = -gTasks[taskId].data[2];
if (!gTasks[taskId].data[2])
{
gScanlineEffect.state = 3;
++gTasks[taskId].data[0];
SetBgAttribute(1, BG_ATTR_CHARBASEINDEX, 0);
SetBgAttribute(2, BG_ATTR_CHARBASEINDEX, 0);
SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(28) | BGCNT_TXT256x512);
SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(30) | BGCNT_TXT512x256);
}
break;
case 4:
sub_80BC41C(taskId);
break;
}
}
void sub_80BCEF4(s32 bgId, u8 arg1, u8 arg2, u8 battlerPosition, u8 arg4, u8 *arg5, u16 *arg6, u16 tilesOffset)
{
s32 i, j;
u8 battler = GetBattlerAtPosition(battlerPosition);
s32 offset = tilesOffset;
CpuCopy16(gMonSpritesGfxPtr->sprites[battlerPosition] + BG_SCREEN_SIZE * gBattleMonForms[battler], arg5, BG_SCREEN_SIZE);
LoadBgTiles(bgId, arg5, 0x1000, tilesOffset);
for (i = arg2; i < arg2 + 8; ++i)
for (j = arg1; j < arg1 + 8; ++j)
arg6[i * 32 + j] = offset++ | (arg4 << 12);
LoadBgTilemap(bgId, arg6, BG_SCREEN_SIZE, 0);
}
// not used
static void sub_80BCFCC(u8 arg0, u8 arg1, u8 battlerPosition, u8 arg3, u8 arg4, u16 arg5, u8 arg6, u8 arg7)
{
s32 i, j, offset;
DmaCopy16(3, gMonSpritesGfxPtr->sprites[battlerPosition] + BG_SCREEN_SIZE * arg3, (void *)BG_SCREEN_ADDR(0) + arg5, BG_SCREEN_SIZE);
offset = (arg5 >> 5) - (arg7 << 9);
for (i = arg1; i < arg1 + 8; ++i)
for (j = arg0; j < arg0 + 8; ++j)
*((u16 *)(BG_VRAM) + (i * 32) + (j + (arg6 << 10))) = offset++ | (arg4 << 12);
}
+40 -42
View File
@@ -857,14 +857,14 @@ static bool8 BT_Phase2BigPokeball_Init(struct Task *task)
task->tEva = 0;
task-> tTheta = 0;
task-> tAmplitude = 0x4000;
sTransitionStructPtr->winIn = 0x3F;
sTransitionStructPtr->winIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR;
sTransitionStructPtr->winOut = 0;
sTransitionStructPtr->win0H = 240;
sTransitionStructPtr->win0V = 160;
sTransitionStructPtr->win0H = WIN_RANGE(0, 0xF0);
sTransitionStructPtr->win0V = WIN_RANGE(0, 0xA0);
sTransitionStructPtr->bldCnt = BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD;
sTransitionStructPtr->bldAlpha = (task->tEvb << 8) | task->tEva;
for (i = 0; i < 160; ++i)
gScanlineEffectRegBuffers[1][i] = 240;
gScanlineEffectRegBuffers[1][i] = 0xF0;
SetVBlankCallback(VBCB_BT_Phase2BigPokeball1);
BT_GetBg0TilemapAndTilesetBase(&tilemapAddr, &tilesetAddr);
CpuFill16(0, tilemapAddr, 0x800);
@@ -897,7 +897,7 @@ static bool8 BT_Phase2BigPokeball_UpdateWave1IncEva(struct Task *task)
++task->tEva;
task->tInterval = 1; // Broken logic. This makes the condition always TRUE.
}
sTransitionStructPtr->bldAlpha = (task->tEvb << 8) | task->tEva;
sTransitionStructPtr->bldAlpha = BLDALPHA_BLEND(task->tEva, task->tEvb);
// Increment eva until it reaches 50% coeff
if (task->tEva > 15)
++task->tState;
@@ -1148,13 +1148,11 @@ static bool8 BT_Phase2ClockwiseBlackFade_Init(struct Task *task)
BT_InitCtrlBlk();
ScanlineEffect_Clear();
sTransitionStructPtr->winIn = 0;
sTransitionStructPtr->winOut = 0x3F;
sTransitionStructPtr->win0H = 0xF0F1;
sTransitionStructPtr->win0V = 0x00A0;
sTransitionStructPtr->winOut = WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR;
sTransitionStructPtr->win0H = WIN_RANGE(0xF0, 0xF1);
sTransitionStructPtr->win0V = WIN_RANGE(0, 0xA0);
for (i = 0; i < 160; ++i)
{
gScanlineEffectRegBuffers[1][i] = 0xF3F4;
}
gScanlineEffectRegBuffers[1][i] = WIN_RANGE(0xF3, 0xF4);
SetVBlankCallback(VBCB_BT_Phase2ClockwiseBlackFade);
sTransitionStructPtr->trEndPtX = 120;
++task->tState;
@@ -1167,7 +1165,7 @@ static bool8 BT_Phase2ClockwiseBlackFade_Step1(struct Task *task)
BT_DiagonalSegment_InitParams(sTransitionStructPtr->data, 120, 80, sTransitionStructPtr->trEndPtX, -1, 1, 1);
do
{
gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = (sTransitionStructPtr->trCurrentPtX + 1) | 0x7800;
gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = WIN_RANGE(0x78, sTransitionStructPtr->trCurrentPtX + 1);
}
while (!BT_DiagonalSegment_ComputePointOnSegment(sTransitionStructPtr->data, TRUE, TRUE));
@@ -1197,7 +1195,7 @@ static bool8 BT_Phase2ClockwiseBlackFade_Step2(struct Task *task)
left = sTransitionStructPtr->trCurrentPtX;
right = 240;
}
gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = right | (left << 8);
gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = WIN_RANGE2(left, right);
if (finished)
break;
finished = BT_DiagonalSegment_ComputePointOnSegment(sTransitionStructPtr->data, TRUE, TRUE);
@@ -1211,7 +1209,7 @@ static bool8 BT_Phase2ClockwiseBlackFade_Step2(struct Task *task)
else
{
while (sTransitionStructPtr->trCurrentPtY < sTransitionStructPtr->trEndPtY)
gScanlineEffectRegBuffers[0][++sTransitionStructPtr->trCurrentPtY] = right | (left << 8);
gScanlineEffectRegBuffers[0][++sTransitionStructPtr->trCurrentPtY] = WIN_RANGE2(left, right);
}
++sTransitionStructPtr->vblankDma;
return FALSE;
@@ -1265,7 +1263,7 @@ static bool8 BT_Phase2ClockwiseBlackFade_Step4(struct Task *task)
left = 120;
right = sTransitionStructPtr->trCurrentPtX;
}
win0H = right | (left << 8);
win0H = WIN_RANGE2(left, right);
gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = win0H;
if (finished)
break;
@@ -1280,7 +1278,7 @@ static bool8 BT_Phase2ClockwiseBlackFade_Step4(struct Task *task)
else
{
while (sTransitionStructPtr->trCurrentPtY > sTransitionStructPtr->trEndPtY)
gScanlineEffectRegBuffers[0][--sTransitionStructPtr->trCurrentPtY] = right | (left << 8);
gScanlineEffectRegBuffers[0][--sTransitionStructPtr->trCurrentPtY] = WIN_RANGE2(left, right);
}
++sTransitionStructPtr->vblankDma;
return FALSE;
@@ -1301,7 +1299,7 @@ static bool8 BT_Phase2ClockwiseBlackFade_Step5(struct Task *task)
left = 0;
right = 240;
}
gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = right | (left << 8);
gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = WIN_RANGE2(left, right);
}
while (!BT_DiagonalSegment_ComputePointOnSegment(sTransitionStructPtr->data, TRUE, TRUE));
sTransitionStructPtr->trEndPtX += 32;
@@ -1431,12 +1429,12 @@ static bool8 BT_Phase2BlackWaveToRight_Init(struct Task *task)
BT_InitCtrlBlk();
ScanlineEffect_Clear();
sTransitionStructPtr->winIn = 0x3F;
sTransitionStructPtr->winIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR;
sTransitionStructPtr->winOut = 0;
sTransitionStructPtr->win0H = 240;
sTransitionStructPtr->win0V = 160;
sTransitionStructPtr->win0H = WIN_RANGE(0, 0xF0);
sTransitionStructPtr->win0V = WIN_RANGE(0, 0xA0);
for (i = 0; i < 160; ++i)
gScanlineEffectRegBuffers[1][i] = 242;
gScanlineEffectRegBuffers[1][i] = WIN_RANGE(0, 0xF2);
SetVBlankCallback(VBCB_BT_Phase2BlackWaveToRight);
++task->tState;
return TRUE;
@@ -1460,7 +1458,7 @@ static bool8 BT_Phase2BlackWaveToRight_UpdateWave(struct Task *task)
left = 0;
if (left > 240)
left = 240;
*winVal = (left << 8) | (0xF1);
*winVal = WIN_RANGE(left, 0xF1);
if (left < 240)
nextFunc = FALSE;
}
@@ -2529,10 +2527,10 @@ static bool8 BT_Phase2AntiClockwiseSpiral_Init(struct Task *task)
BT_InitCtrlBlk();
ScanlineEffect_Clear();
sTransitionStructPtr->winIn = 0;
sTransitionStructPtr->winOut = 0x3F;
sTransitionStructPtr->win0H = 0x7878;
sTransitionStructPtr->win0V = 0x3070;
sTransitionStructPtr->win1V = 0x1090;
sTransitionStructPtr->winOut = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR;
sTransitionStructPtr->win0H = WIN_RANGE(0x78, 0x78);
sTransitionStructPtr->win0V = WIN_RANGE(0x30, 0x70);
sTransitionStructPtr->win1V = WIN_RANGE(0x10, 0x90);
sTransitionStructPtr->counter = 0;
sub_80D1F64(0, 0, FALSE);
sub_80D1F64(0, 0, TRUE);
@@ -2665,11 +2663,11 @@ static bool8 BT_Phase2Mugshot_Init(struct Task *task)
task->tTheta = 0;
task->tbg0HOfsOpponent = 1;
task->tbg0HOfsPlayer = 239;
sTransitionStructPtr->winIn = 0x3F;
sTransitionStructPtr->winOut = 0x3E;
sTransitionStructPtr->win0V = 160;
sTransitionStructPtr->winIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR;
sTransitionStructPtr->winOut = WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR;
sTransitionStructPtr->win0V = WIN_RANGE(0, 0xA0);
for (i = 0; i < 160; ++i)
gScanlineEffectRegBuffers[1][i] = 0xF0F1;
gScanlineEffectRegBuffers[1][i] = WIN_RANGE(0xF0, 0xF1);
SetVBlankCallback(VBCB_BT_Phase2Mugshot1_Slide);
++task->tState;
return FALSE;
@@ -2784,7 +2782,7 @@ static bool8 BT_Phase2Mugshot_WaitForPlayerInPlace(struct Task *task)
DmaStop(0);
memset(gScanlineEffectRegBuffers[0], 0, 320);
memset(gScanlineEffectRegBuffers[1], 0, 320);
SetGpuReg(REG_OFFSET_WIN0H, 0xF0);
SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 0xF0));
SetGpuReg(REG_OFFSET_BLDY, 0);
++task->tState;
task->tCounter = 0;
@@ -3026,9 +3024,9 @@ static bool8 BT_Phase2SlicedScreen_Init(struct Task *task)
ScanlineEffect_Clear();
task->tAcc = 256;
task->tJerk = 1;
sTransitionStructPtr->winIn = 0x3F;
sTransitionStructPtr->winIn = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR;
sTransitionStructPtr->winOut = 0;
sTransitionStructPtr->win0V = 160;
sTransitionStructPtr->win0V = WIN_RANGE(0, 0xA0);
for (i = 0; i < 160; ++i)
{
gScanlineEffectRegBuffers[1][i] = sTransitionStructPtr->bg123HOfs;
@@ -3065,7 +3063,7 @@ static bool8 BT_Phase2SlicedScreen_UpdateOffsets(struct Task *task)
else
{
*ofsBuffer = sTransitionStructPtr->bg123HOfs - task->tSpeed;
*win0HBuffer = (task->tSpeed << 8) | 0xF1;
*win0HBuffer = WIN_RANGE(task->tSpeed, 0xF1);
}
}
if (task->tSpeed > 0xEF)
@@ -3126,9 +3124,9 @@ static bool8 BT_Phase2WhiteFadeInStripes_Init(struct Task *task)
ScanlineEffect_Clear();
sTransitionStructPtr->bldCnt = BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_LIGHTEN;
sTransitionStructPtr->bldY = 0;
sTransitionStructPtr->winIn = 0x1E;
sTransitionStructPtr->winOut = 0x3F;
sTransitionStructPtr->win0V = 160;
sTransitionStructPtr->winIn = WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ;
sTransitionStructPtr->winOut = WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WININ_WIN0_CLR;
sTransitionStructPtr->win0V = WIN_RANGE(0, 0xA0);
for (i = 0; i < 160; ++i)
{
gScanlineEffectRegBuffers[1][i] = 0;
@@ -3180,7 +3178,7 @@ static bool8 BT_Phase2WhiteFadeInStripes_Stop(struct Task *task)
sTransitionStructPtr->win0H = 240;
sTransitionStructPtr->bldY = 0;
sTransitionStructPtr->bldCnt = BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_DARKEN;
sTransitionStructPtr->winIn = 0x3F;
sTransitionStructPtr->winIn = WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WININ_WIN0_CLR;
sTransitionStructPtr->counter = 0;
SetVBlankCallback(VBCB_BT_Phase2WhiteFadeInStripes2);
++task->tState;
@@ -3351,11 +3349,11 @@ static bool8 BT_Phase2BlackDoodles_Init(struct Task *task)
BT_InitCtrlBlk();
ScanlineEffect_Clear();
sTransitionStructPtr->winIn = 0x3F;
sTransitionStructPtr->winIn = WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR;
sTransitionStructPtr->winOut = 0;
sTransitionStructPtr->win0V = 0xA0;
sTransitionStructPtr->win0V = WIN_RANGE(0, 0xA0);
for (i = 0; i < 160; ++i)
gScanlineEffectRegBuffers[0][i] = 0x00F0;
gScanlineEffectRegBuffers[0][i] = WIN_RANGE(0, 0xF0);
CpuSet(gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 160);
SetVBlankCallback(VBCB_BT_Phase2BlackDoodles);
++task->tState;
@@ -3394,7 +3392,7 @@ static bool8 BT_Phase2BlackDoodles_DrawSingleBrush(struct Task *task)
if (right <= left)
right = left;
}
gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = right | (left << 8);
gScanlineEffectRegBuffers[0][sTransitionStructPtr->trCurrentPtY] = WIN_RANGE2(left, right);
if (nextFunc)
{
++task->tState;
+462
View File
@@ -0,0 +1,462 @@
#include "global.h"
#include "battle_anim.h"
#include "gpu_regs.h"
#include "trig.h"
static void sub_80B3FAC(struct Sprite *sprite);
static void sub_80B407C(struct Sprite *sprite);
static void AnimTranslateWebThread(struct Sprite *sprite);
static void sub_80B41F8(struct Sprite *sprite);
static void sub_80B42C0(struct Sprite *sprite);
static void AnimTranslateStinger(struct Sprite *sprite);
static void AnimMissileArc(struct Sprite *sprite);
static void sub_80B45D8(struct Sprite *sprite);
static void sub_80B41C0(struct Sprite *sprite);
static void sub_80B4274(struct Sprite *sprite);
static void sub_80B42E8(struct Sprite *sprite);
static void sub_80B4344(struct Sprite *sprite);
static void AnimMissileArcStep(struct Sprite *sprite);
static const union AffineAnimCmd gUnknown_83E71E8[] =
{
AFFINEANIMCMD_FRAME(0x100, 0x100, 30, 0),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd gUnknown_83E71F8[] =
{
AFFINEANIMCMD_FRAME(0x100, 0x100, -99, 0),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd gUnknown_83E7208[] =
{
AFFINEANIMCMD_FRAME(0x100, 0x100, 94, 0),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd *const gUnknown_83E7218[] =
{
gUnknown_83E71E8,
gUnknown_83E71F8,
gUnknown_83E7208,
};
const struct SpriteTemplate gUnknown_83E7224 =
{
.tileTag = ANIM_TAG_HORN_HIT_2,
.paletteTag = ANIM_TAG_HORN_HIT_2,
.oam = &gOamData_83ACAB8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_83E7218,
.callback = sub_80B3FAC,
};
static const union AffineAnimCmd gUnknown_83E723C[] =
{
AFFINEANIMCMD_FRAME(0x0, 0x0, -33, 1),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd gUnknown_83E724C[] =
{
AFFINEANIMCMD_FRAME(0x0, 0x0, 96, 1),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd gUnknown_83E725C[] =
{
AFFINEANIMCMD_FRAME(0x0, 0x0, -96, 1),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd *const gUnknown_83E726C[] =
{
gUnknown_83E723C,
gUnknown_83E724C,
gUnknown_83E725C,
};
const struct SpriteTemplate gUnknown_83E7278 =
{
.tileTag = ANIM_TAG_NEEDLE,
.paletteTag = ANIM_TAG_NEEDLE,
.oam = &gOamData_83ACA30,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_83E726C,
.callback = sub_80B407C,
};
const struct SpriteTemplate gWebThreadSpriteTemplate =
{
.tileTag = ANIM_TAG_WEB_THREAD,
.paletteTag = ANIM_TAG_WEB_THREAD,
.oam = &gOamData_83AC9C8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimTranslateWebThread,
};
const struct SpriteTemplate gUnknown_83E72A8 =
{
.tileTag = ANIM_TAG_STRING,
.paletteTag = ANIM_TAG_STRING,
.oam = &gOamData_83ACA00,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80B41F8,
};
static const union AffineAnimCmd gUnknown_83E72C0[] =
{
AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
AFFINEANIMCMD_FRAME(0x6, 0x6, 0, 1),
AFFINEANIMCMD_JUMP(1),
};
static const union AffineAnimCmd *const gUnknown_83E72D8[] =
{
gUnknown_83E72C0,
};
const struct SpriteTemplate gSpiderWebSpriteTemplate =
{
.tileTag = ANIM_TAG_SPIDER_WEB,
.paletteTag = ANIM_TAG_SPIDER_WEB,
.oam = &gOamData_83ACBC0,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_83E72D8,
.callback = sub_80B42C0,
};
const struct SpriteTemplate gLinearStingerSpriteTemplate =
{
.tileTag = ANIM_TAG_NEEDLE,
.paletteTag = ANIM_TAG_NEEDLE,
.oam = &gOamData_83ACA30,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimTranslateStinger,
};
const struct SpriteTemplate gPinMissileSpriteTemplate =
{
.tileTag = ANIM_TAG_NEEDLE,
.paletteTag = ANIM_TAG_NEEDLE,
.oam = &gOamData_83ACA30,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimMissileArc,
};
const struct SpriteTemplate gIcicleSpearSpriteTemplate =
{
.tileTag = ANIM_TAG_ICICLE_SPEAR,
.paletteTag = ANIM_TAG_ICICLE_SPEAR,
.oam = &gOamData_83ACA38,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimMissileArc,
};
static const union AffineAnimCmd gUnknown_83E733C[] =
{
AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 18),
AFFINEANIMCMD_LOOP(0),
AFFINEANIMCMD_FRAME(0xFFFB, 0xFFFB, 0, 8),
AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 8),
AFFINEANIMCMD_LOOP(5),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd *const gUnknown_83E7374[] =
{
gUnknown_83E733C,
};
const struct SpriteTemplate gUnknown_83E7378 =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.oam = &gOamData_83ACB60,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_83E7374,
.callback = sub_80B45D8,
};
static void sub_80B3FAC(struct Sprite *sprite)
{
if (IsContest())
{
StartSpriteAffineAnim(sprite, 2);
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
}
else if (!GetBattlerSide(gBattleAnimTarget))
{
StartSpriteAffineAnim(sprite, 1);
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
gBattleAnimArgs[3] = -gBattleAnimArgs[3];
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
}
sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimTarget, 2) + gBattleAnimArgs[0];
sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimTarget, 3) + gBattleAnimArgs[1];
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
static void sub_80B407C(struct Sprite *sprite)
{
if (IsContest())
{
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
StartSpriteAffineAnim(sprite, 2);
}
else if (!GetBattlerSide(gBattleAnimTarget))
{
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
}
sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimTarget, 2) + gBattleAnimArgs[0];
sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimTarget, 3) + gBattleAnimArgs[1];
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
// Creates a single web thread that travels from attacker to target.
// Used by MOVE_STRING_SHOT and MOVE_SPIDER_WEB in their first move phase.
// arg 0: x
// arg 1: y
// arg 2: controls the left-to-right movement
// arg 3: amplitude
// arg 4: if targets both opponents
static void AnimTranslateWebThread(struct Sprite *sprite)
{
if (IsContest())
gBattleAnimArgs[2] /= 2;
InitSpritePosToAnimAttacker(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[1] = sprite->pos1.x;
sprite->data[3] = sprite->pos1.y;
if (!gBattleAnimArgs[4])
{
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
}
else
{
SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->data[2], &sprite->data[4]);
}
sub_8075678(sprite);
sprite->data[5] = gBattleAnimArgs[3];
sprite->callback = sub_80B41C0;
}
static void sub_80B41C0(struct Sprite *sprite)
{
if (AnimTranslateLinear(sprite))
{
DestroyAnimSprite(sprite);
return;
}
sprite->pos2.x += Sin(sprite->data[6], sprite->data[5]);
sprite->data[6] = (sprite->data[6] + 13) & 0xFF;
}
static void sub_80B41F8(struct Sprite *sprite)
{
SetAverageBattlerPositions(gBattleAnimTarget, 0, &sprite->pos1.x, &sprite->pos1.y);
if (GetBattlerSide(gBattleAnimAttacker))
sprite->pos1.x -= gBattleAnimArgs[0];
else
sprite->pos1.x += gBattleAnimArgs[0];
sprite->pos1.y += gBattleAnimArgs[1];
if (!GetBattlerSide(gBattleAnimTarget))
sprite->pos1.y += 8;
sprite->callback = sub_80B4274;
}
static void sub_80B4274(struct Sprite *sprite)
{
if (++sprite->data[0] == 3)
{
sprite->data[0] = 0;
sprite->invisible ^= 1;
}
if (++sprite->data[1] == 51)
{
DestroyAnimSprite(sprite);
}
}
static void sub_80B42C0(struct Sprite *sprite)
{
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0));
sprite->data[0] = 16;
sprite->callback = sub_80B42E8;
}
static void sub_80B42E8(struct Sprite *sprite)
{
if (sprite->data[2] < 20)
{
++sprite->data[2];
}
else if (sprite->data[1]++ & 1)
{
--sprite->data[0];
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[0], 16 - sprite->data[0]));
if (sprite->data[0] == 0)
{
sprite->invisible = TRUE;
sprite->callback = sub_80B4344;
}
}
}
static void sub_80B4344(struct Sprite *sprite)
{
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
DestroyAnimSprite(sprite);
}
// Translates a stinger sprite linearly to a destination location. The sprite is
// initially rotated so that it appears to be traveling in a straight line.
// arg 0: initial x pixel offset
// arg 1: initial y pixel offset
// arg 2: target x pixel offset
// arg 3: target y pixel offset
// arg 4: duration
static void AnimTranslateStinger(struct Sprite *sprite)
{
s16 lVarX, lVarY;
u16 rot;
if (IsContest())
{
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
}
else if (GetBattlerSide(gBattleAnimAttacker))
{
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
gBattleAnimArgs[3] = -gBattleAnimArgs[3];
}
if (!IsContest() && GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget))
{
if (GetBattlerPosition(gBattleAnimTarget) == B_POSITION_PLAYER_LEFT
|| GetBattlerPosition(gBattleAnimTarget) == B_POSITION_OPPONENT_LEFT)
{
s16 temp1, temp2;
temp1 = gBattleAnimArgs[2];
gBattleAnimArgs[2] = -temp1;
temp2 = gBattleAnimArgs[0];
gBattleAnimArgs[0] = -temp2;
}
}
InitSpritePosToAnimAttacker(sprite, 1);
lVarX = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
lVarY = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
rot = ArcTan2Neg(lVarX - sprite->pos1.x, lVarY - sprite->pos1.y);
rot += 0xC000;
TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rot);
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[2] = lVarX;
sprite->data[4] = lVarY;
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
// Rotates sprite and moves it in an arc, so that it appears like a missle or arrow traveling.
// arg 0: initial x pixel offset
// arg 1: initial y pixel offset
// arg 2: target x pixel offset
// arg 3: target y pixel offset
// arg 4: duration
// arg 5: wave amplitude
static void AnimMissileArc(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, 1);
if (GetBattlerSide(gBattleAnimAttacker))
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
sprite->data[5] = gBattleAnimArgs[5];
InitAnimArcTranslation(sprite);
sprite->callback = AnimMissileArcStep;
sprite->invisible = TRUE;
}
static void AnimMissileArcStep(struct Sprite *sprite)
{
sprite->invisible = FALSE;
if (TranslateAnimHorizontalArc(sprite))
{
DestroyAnimSprite(sprite);
}
else
{
s16 tempData[8];
u16 *data = sprite->data;
u16 x1 = sprite->pos1.x;
s16 x2 = sprite->pos2.x;
u16 y1 = sprite->pos1.y;
s16 y2 = sprite->pos2.y;
s32 i;
for (i = 0; i < 8; ++i)
tempData[i] = data[i];
x2 += x1;
y2 += y1;
if (!TranslateAnimHorizontalArc(sprite))
{
u16 rotation = ArcTan2Neg(sprite->pos1.x + sprite->pos2.x - x2,
sprite->pos1.y + sprite->pos2.y - y2);
rotation += 0xC000;
TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rotation);
for (i = 0; i < 8; ++i)
data[i] = tempData[i];
}
}
}
static void sub_80B45D8(struct Sprite *sprite)
{
if (gBattleAnimArgs[0] == 0)
{
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + 18;
}
else
{
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 18;
}
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
}
+921
View File
@@ -0,0 +1,921 @@
#include "global.h"
#include "battle_anim.h"
#include "gpu_regs.h"
#include "graphics.h"
#include "palette.h"
#include "scanline_effect.h"
#include "trig.h"
#include "util.h"
static void sub_80B7ACC(struct Sprite *sprite);
static void sub_80B7BD4(struct Sprite *sprite);
static void sub_80B7C88(struct Sprite *sprite);
static void sub_80B86B0(struct Sprite *sprite);
static void sub_80B7954(u8 taskId);
static void sub_80B7A14(u8 taskId);
static void sub_80B7B48(struct Sprite *sprite);
static void sub_80B7C10(struct Sprite *sprite);
static void sub_80B7C50(struct Sprite *sprite);
static void sub_80B7D88(struct Sprite *sprite);
static void sub_80B856C(u8 priority);
static void sub_80B7F58(u8 taskId);
static void sub_80B843C(struct Task *task);
static void sub_80B82C0(u8 taskId);
static void sub_80B8920(u8 taskId);
const struct SpriteTemplate gUnknown_83E7878 =
{
.tileTag = ANIM_TAG_TIED_BAG,
.paletteTag = ANIM_TAG_TIED_BAG,
.oam = &gOamData_83AC9D0,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80B7ACC,
};
static const union AffineAnimCmd gUnknown_83E7890[] =
{
AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 1),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd gUnknown_83E78A0[] =
{
AFFINEANIMCMD_FRAME(0x0, 0x0, 32, 1),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd gUnknown_83E78B0[] =
{
AFFINEANIMCMD_FRAME(0x0, 0x0, 64, 1),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd gUnknown_83E78C0[] =
{
AFFINEANIMCMD_FRAME(0x0, 0x0, 96, 1),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd gUnknown_83E78D0[] =
{
AFFINEANIMCMD_FRAME(0x0, 0x0, -128, 1),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd gUnknown_83E78E0[] =
{
AFFINEANIMCMD_FRAME(0x0, 0x0, -96, 1),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd gUnknown_83E78F0[] =
{
AFFINEANIMCMD_FRAME(0x0, 0x0, -64, 1),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd gUnknown_83E7900[] =
{
AFFINEANIMCMD_FRAME(0x0, 0x0, -32, 1),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd *const gUnknown_83E7910[] =
{
gUnknown_83E7890,
gUnknown_83E78A0,
gUnknown_83E78B0,
gUnknown_83E78C0,
gUnknown_83E78D0,
gUnknown_83E78E0,
gUnknown_83E78F0,
gUnknown_83E7900,
};
const struct SpriteTemplate gUnknown_83E7930 =
{
.tileTag = ANIM_TAG_SHARP_TEETH,
.paletteTag = ANIM_TAG_SHARP_TEETH,
.oam = &gOamData_83ACB60,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_83E7910,
.callback = sub_80B7BD4,
};
const struct SpriteTemplate gUnknown_83E7948 =
{
.tileTag = ANIM_TAG_CLAMP,
.paletteTag = ANIM_TAG_CLAMP,
.oam = &gOamData_83ACB60,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_83E7910,
.callback = sub_80B7BD4,
};
static const union AffineAnimCmd gUnknown_83E7960[] =
{
AFFINEANIMCMD_FRAME(0xC0, 0xC0, 80, 0),
AFFINEANIMCMD_FRAME(0x0, 0x0, -2, 8),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd gUnknown_83E7978[] =
{
AFFINEANIMCMD_FRAME(0xC0, 0xC0, -80, 0),
AFFINEANIMCMD_FRAME(0x0, 0x0, 2, 8),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd *const gUnknown_83E7990[] =
{
gUnknown_83E7960,
gUnknown_83E7978,
};
const struct SpriteTemplate gUnknown_83E7998 =
{
.tileTag = ANIM_TAG_SMALL_BUBBLES,
.paletteTag = ANIM_TAG_SMALL_BUBBLES,
.oam = &gOamData_83ACA30,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_83E7990,
.callback = sub_80B7C88,
};
static const union AnimCmd gUnknown_83E79B0[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_FRAME(16, 4),
ANIMCMD_FRAME(32, 4),
ANIMCMD_FRAME(48, 4),
ANIMCMD_FRAME(64, 4),
ANIMCMD_END,
};
static const union AnimCmd gUnknown_83E79C8[] =
{
ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
ANIMCMD_FRAME(48, 4, .hFlip = TRUE),
ANIMCMD_FRAME(64, 4, .hFlip = TRUE),
ANIMCMD_END,
};
static const union AnimCmd *const gUnknown_83E79E0[] =
{
gUnknown_83E79B0,
gUnknown_83E79C8,
};
const struct SpriteTemplate gUnknown_83E79E8 =
{
.tileTag = ANIM_TAG_CLAW_SLASH,
.paletteTag = ANIM_TAG_CLAW_SLASH,
.oam = &gOamData_83AC9D8,
.anims = gUnknown_83E79E0,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80B86B0,
};
void sub_80B78E0(u8 taskId)
{
s32 battler;
gTasks[taskId].data[0] = gBattleAnimArgs[0];
battler = gBattleAnimAttacker;
gTasks[taskId].data[1] = 16;
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0));
if (GetBattlerSpriteBGPriorityRank(battler) == 1)
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1);
else
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG2);
gTasks[taskId].func = sub_80B7954;
}
static void sub_80B7954(u8 taskId)
{
u8 blendA = gTasks[taskId].data[1] >> 8;
u8 blendB = gTasks[taskId].data[1];
if (gTasks[taskId].data[2] == (u8)gTasks[taskId].data[0])
{
++blendA;
--blendB;
gTasks[taskId].data[1] = BLDALPHA_BLEND(blendB, blendA);
SetGpuReg(REG_OFFSET_BLDALPHA, gTasks[taskId].data[1]);
gTasks[taskId].data[2] = 0;
if (blendA == 16)
{
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].invisible = TRUE;
DestroyAnimVisualTask(taskId);
}
}
else
{
++gTasks[taskId].data[2];
}
}
void sub_80B79DC(u8 taskId)
{
gTasks[taskId].data[0] = gBattleAnimArgs[0];
gTasks[taskId].data[1] = BLDALPHA_BLEND(0, 16);
gTasks[taskId].func = sub_80B7A14;
SetGpuReg(REG_OFFSET_BLDALPHA, gTasks[taskId].data[1]);
}
static void sub_80B7A14(u8 taskId)
{
u8 blendA = gTasks[taskId].data[1] >> 8;
u8 blendB = gTasks[taskId].data[1];
if (gTasks[taskId].data[2] == (u8)gTasks[taskId].data[0])
{
--blendA;
++blendB;
gTasks[taskId].data[1] = (blendA << 8) | blendB;
SetGpuReg(REG_OFFSET_BLDALPHA, gTasks[taskId].data[1]);
gTasks[taskId].data[2] = 0;
if (blendA == 0)
{
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
DestroyAnimVisualTask(taskId);
}
}
else
{
++gTasks[taskId].data[2];
}
}
void sub_80B7A80(u8 taskId)
{
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1)
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1);
else
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG2);
DestroyAnimVisualTask(taskId);
}
static void sub_80B7ACC(struct Sprite *sprite)
{
sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->data[3] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[0] = 0x7E;
InitSpriteDataForLinearTranslation(sprite);
sprite->data[3] = -sprite->data[1];
sprite->data[4] = -sprite->data[2];
sprite->data[6] = 0xFFD8;
sprite->callback = sub_80B7B48;
sprite->callback(sprite);
}
static void sub_80B7B48(struct Sprite *sprite)
{
sprite->data[3] += sprite->data[1];
sprite->data[4] += sprite->data[2];
sprite->pos2.x = sprite->data[3] >> 8;
sprite->pos2.y = sprite->data[4] >> 8;
if (sprite->data[7] == 0)
{
sprite->data[3] += sprite->data[1];
sprite->data[4] += sprite->data[2];
sprite->pos2.x = sprite->data[3] >> 8;
sprite->pos2.y = sprite->data[4] >> 8;
--sprite->data[0];
}
sprite->pos2.y += Sin(sprite->data[5], sprite->data[6]);
sprite->data[5] = (sprite->data[5] + 3) & 0xFF;
if (sprite->data[5] > 0x7F)
{
sprite->data[5] = 0;
sprite->data[6] += 20;
++sprite->data[7];
}
if (--sprite->data[0] == 0)
DestroyAnimSprite(sprite);
}
static void sub_80B7BD4(struct Sprite *sprite)
{
sprite->pos1.x += gBattleAnimArgs[0];
sprite->pos1.y += gBattleAnimArgs[1];
StartSpriteAffineAnim(sprite, gBattleAnimArgs[2]);
sprite->data[0] = gBattleAnimArgs[3];
sprite->data[1] = gBattleAnimArgs[4];
sprite->data[2] = gBattleAnimArgs[5];
sprite->callback = sub_80B7C10;
}
static void sub_80B7C10(struct Sprite *sprite)
{
sprite->data[4] += sprite->data[0];
sprite->data[5] += sprite->data[1];
sprite->pos2.x = sprite->data[4] >> 8;
sprite->pos2.y = sprite->data[5] >> 8;
if (++sprite->data[3] == sprite->data[2])
sprite->callback = sub_80B7C50;
}
static void sub_80B7C50(struct Sprite *sprite)
{
sprite->data[4] -= sprite->data[0];
sprite->data[5] -= sprite->data[1];
sprite->pos2.x = sprite->data[4] >> 8;
sprite->pos2.y = sprite->data[5] >> 8;
if (--sprite->data[3] == 0)
DestroySpriteAndMatrix(sprite);
}
static void sub_80B7C88(struct Sprite *sprite)
{
u8 battler;
s8 xOffset;
if (gBattleAnimArgs[0] == 0)
battler = gBattleAnimAttacker;
else
battler = gBattleAnimTarget;
xOffset = 20;
sprite->oam.tileNum += 4;
switch (gBattleAnimArgs[1])
{
case 0:
sprite->pos1.x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_RIGHT) - 8;
sprite->pos1.y = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_TOP) + 8;
break;
case 1:
sprite->pos1.x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_RIGHT) - 14;
sprite->pos1.y = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_TOP) + 16;
break;
case 2:
sprite->pos1.x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_LEFT) + 8;
sprite->pos1.y = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_TOP) + 8;
StartSpriteAffineAnim(sprite, 1);
xOffset = -20;
break;
case 3:
sprite->pos1.x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_LEFT) + 14;
sprite->pos1.y = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_TOP) + 16;
StartSpriteAffineAnim(sprite, 1);
xOffset = -20;
break;
}
sprite->data[0] = 32;
sprite->data[2] = sprite->pos1.x + xOffset;
sprite->data[4] = sprite->pos1.y + 12;
sprite->data[5] = -12;
InitAnimArcTranslation(sprite);
sprite->callback = sub_80B7D88;
}
static void sub_80B7D88(struct Sprite *sprite)
{
if (TranslateAnimHorizontalArc(sprite))
DestroySpriteAndMatrix(sprite);
}
void sub_80B7DA4(u8 taskId)
{
struct ScanlineEffectParams scanlineParams;
struct BattleAnimBgData animBg;
u16 i;
u8 pos;
s32 var0;
struct Task *task = &gTasks[taskId];
task->data[7] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y) + 31;
task->data[6] = GetBattlerSpriteCoordAttr(gBattleAnimAttacker, BATTLER_COORD_ATTR_TOP) - 7;
task->data[5] = task->data[7];
task->data[4] = task->data[6];
task->data[13] = (task->data[7] - task->data[6]) << 8;
pos = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
task->data[14] = pos - 32;
task->data[15] = pos + 32;
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
task->data[8] = -12;
else
task->data[8] = -64;
task->data[3] = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker);
if (task->data[3] == 1)
{
sub_80752A0(&animBg);
task->data[10] = gBattle_BG1_Y;
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1);
FillPalette(0, animBg.paletteId * 16, 32);
scanlineParams.dmaDest = &REG_BG1VOFS;
var0 = WINOUT_WIN01_BG1;
if (!IsContest())
gBattle_BG2_X += 240;
}
else
{
task->data[10] = gBattle_BG2_Y;
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG2);
FillPalette(0, 144, 32);
scanlineParams.dmaDest = &REG_BG2VOFS;
var0 = WINOUT_WIN01_BG2;
if (!IsContest())
gBattle_BG1_X += 240;
}
scanlineParams.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
scanlineParams.initState = 1;
scanlineParams.unused9 = 0;
task->data[11] = 0;
task->data[12] = 16;
task->data[0] = 0;
task->data[1] = 0;
task->data[2] = 0;
sub_80B856C(3);
for (i = 0; i < 112; ++i)
{
gScanlineEffectRegBuffers[0][i] = task->data[10];
gScanlineEffectRegBuffers[1][i] = task->data[10];
}
ScanlineEffect_SetParams(scanlineParams);
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | (var0 ^ (WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR)));
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
gBattle_WIN0H = (task->data[14] << 8) | task->data[15];
gBattle_WIN0V = 160;
task->func = sub_80B7F58;
}
static void sub_80B7F58(u8 taskId)
{
struct Task *task = &gTasks[taskId];
switch (task->data[0])
{
case 0:
if (++task->data[1] > 1)
{
task->data[1] = 0;
if (++task->data[2] & 1)
{
if (task->data[11] != 12)
++task->data[11];
}
else if (task->data[12] != 8)
{
--task->data[12];
}
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[11], task->data[12]));
if (task->data[11] == 12 && task->data[12] == 8)
++task->data[0];
}
break;
case 1:
task->data[4] -= 8;
sub_80B843C(task);
if (task->data[4] < task->data[8])
++task->data[0];
break;
case 2:
task->data[4] -= 8;
sub_80B843C(task);
task->data[14] += 4;
task->data[15] -= 4;
if (task->data[14] >= task->data[15])
task->data[14] = task->data[15];
gBattle_WIN0H = (task->data[14] << 8) | task->data[15];
if (task->data[14] == task->data[15])
++task->data[0];
break;
case 3:
gScanlineEffect.state = 3;
++task->data[0];
break;
case 4:
DestroyAnimVisualTask(taskId);
break;
}
}
void sub_80B8070(u8 taskId)
{
struct BattleAnimBgData animBg;
struct ScanlineEffectParams scanlineParams;
u8 x;
u16 i;
struct Task *task = &gTasks[taskId];
switch (task->data[0])
{
case 0:
if (IsContest() == TRUE)
{
gBattle_WIN0H = 0;
gBattle_WIN0V = 0;
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR);
DestroyAnimVisualTask(taskId);
}
else
{
task->data[3] = GetBattlerSpriteBGPriorityRank(gBattleAnimTarget);
if (task->data[3] == 1)
{
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1);
gBattle_BG2_X += 240;
}
else
{
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG2);
gBattle_BG1_X += 240;
}
++task->data[0];
}
break;
case 1:
if (task->data[3] == 1)
{
sub_80752A0(&animBg);
task->data[10] = gBattle_BG1_Y;
FillPalette(0, animBg.paletteId * 16, 32);
}
else
{
task->data[10] = gBattle_BG2_Y;
FillPalette(0, 9 * 16, 32);
}
sub_80B856C(3);
++task->data[0];
break;
case 2:
task->data[7] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 31;
task->data[6] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_TOP) - 7;
task->data[13] = (task->data[7] - task->data[6]) << 8;
x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
task->data[14] = x - 4;
task->data[15] = x + 4;
if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
task->data[8] = -12;
else
task->data[8] = -64;
task->data[4] = task->data[8];
task->data[5] = task->data[8];
task->data[11] = 12;
task->data[12] = 8;
++task->data[0];
break;
case 3:
if (task->data[3] == 1)
scanlineParams.dmaDest = &REG_BG1VOFS;
else
scanlineParams.dmaDest = &REG_BG2VOFS;
for (i = 0; i < 112; ++i)
{
gScanlineEffectRegBuffers[0][i] = task->data[10] + (159 - i);
gScanlineEffectRegBuffers[1][i] = task->data[10] + (159 - i);
}
scanlineParams.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
scanlineParams.initState = 1;
scanlineParams.unused9 = 0;
ScanlineEffect_SetParams(scanlineParams);
++task->data[0];
break;
case 4:
if (task->data[3] == 1)
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | WINOUT_WIN01_BG0 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR);
else
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR);
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
gBattle_WIN0H = (task->data[14] << 8) | task->data[15];
gBattle_WIN0V = 160;
task->data[0] = 0;
task->data[1] = 0;
task->data[2] = 0;
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 8));
task->func = sub_80B82C0;
break;
}
}
static void sub_80B82C0(u8 taskId)
{
u8 pos;
u16 i;
struct Task *task = &gTasks[taskId];
switch (task->data[0])
{
case 0:
task->data[5] += 8;
if (task->data[5] >= task->data[7])
task->data[5] = task->data[7];
sub_80B843C(task);
if (task->data[5] == task->data[7])
++task->data[0];
break;
case 1:
if (task->data[15] - task->data[14] < 0x40)
{
task->data[14] -= 4;
task->data[15] += 4;
}
else
{
task->data[1] = 1;
}
gBattle_WIN0H = (task->data[14] << 8) | task->data[15];
task->data[4] += 8;
if (task->data[4] >= task->data[6])
task->data[4] = task->data[6];
sub_80B843C(task);
if (task->data[4] == task->data[6] && task->data[1])
{
task->data[1] = 0;
++task->data[0];
}
break;
case 2:
if (++task->data[1] > 1)
{
task->data[1] = 0;
++task->data[2];
if (task->data[2] & 1)
{
if (task->data[11])
--task->data[11];
}
else if (task->data[12] < 16)
{
++task->data[12];
}
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[11], task->data[12]));
if (task->data[11] == 0 && task->data[12] == 16)
++task->data[0];
}
break;
case 3:
gScanlineEffect.state = 3;
++task->data[0];
break;
case 4:
gBattle_WIN0H = 0;
gBattle_WIN0V = 0;
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR);
DestroyAnimVisualTask(taskId);
break;
}
}
static void sub_80B843C(struct Task *task)
{
s32 var0, var1, var4;
s16 var2, i;
var2 = task->data[5] - task->data[4];
if (var2 != 0)
{
var0 = task->data[13] / var2;
var1 = task->data[6] << 8;
for (i = 0; i < task->data[4]; ++i)
gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[10] - (i - 159);
for (i = task->data[4]; i <= task->data[5]; ++i)
{
if (i >= 0)
{
s16 var3 = (var1 >> 8) - i;
gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = var3 + task->data[10];
}
var1 += var0;
}
var4 = task->data[10] - (i - 159);
for (; i < task->data[7]; ++i)
if (i >= 0)
gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = var4--;
}
else
{
var4 = task->data[10] + 159;
for (i = 0; i < 112; ++i)
{
gScanlineEffectRegBuffers[0][i] = var4;
gScanlineEffectRegBuffers[1][i] = var4;
--var4;
}
}
}
static void sub_80B856C(u8 priority)
{
u16 i;
for (i = 0; i < MAX_BATTLERS_COUNT; ++i)
{
u8 spriteId = GetAnimBattlerSpriteId(i);
if (spriteId != 0xFF)
gSprites[spriteId].oam.priority = priority;
}
}
void sub_80B85B8(u8 taskId)
{
u8 toBG2 = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) ^ 1 ? 1 : 0;
MoveBattlerSpriteToBG(gBattleAnimAttacker, toBG2);
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].invisible = FALSE;
if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)))
{
MoveBattlerSpriteToBG(gBattleAnimAttacker ^ 2, toBG2 ^ 1);
gSprites[gBattlerSpriteIds[gBattleAnimAttacker ^ 2]].invisible = FALSE;
}
DestroyAnimVisualTask(taskId);
}
void sub_80B8664(u8 taskId)
{
u8 toBG2 = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) ^ 1 ? 1 : 0;
sub_8073128(toBG2);
if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)))
sub_8073128(toBG2 ^ 1);
DestroyAnimVisualTask(taskId);
}
static void sub_80B86B0(struct Sprite *sprite)
{
sprite->pos1.x += gBattleAnimArgs[0];
sprite->pos1.y += gBattleAnimArgs[1];
StartSpriteAnim(sprite, gBattleAnimArgs[2]);
sprite->callback = RunStoredCallbackWhenAnimEnds;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
// Makes the attacker metallic and shining.
// Used by MOVE_HARDEN and MOVE_IRON_DEFENSE.
// arg0: if true won't change battler's palette back
// arg1: if true, use custom color
// arg2: custom color
// Custom color argument is used in MOVE_POISON_TAIL to make the mon turn purplish/pinkish as if became cloaked in poison.
void AnimTask_MetallicShine(u8 taskId)
{
u16 species;
u8 spriteId, newSpriteId;
u16 paletteNum;
struct BattleAnimBgData animBg;
bool32 priorityChanged = FALSE;
gBattle_WIN0H = 0;
gBattle_WIN0V = 0;
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | WINOUT_WIN01_BG0 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR);
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON);
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(8, 12));
SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 0);
SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0);
if (!IsContest())
SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1);
if (IsDoubleBattle() && !IsContest())
{
if (GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_OPPONENT_RIGHT || GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_PLAYER_LEFT)
{
if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)) == TRUE)
{
gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]].oam.priority--;
SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
priorityChanged = TRUE;
}
}
}
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES);
else
species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES);
spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
newSpriteId = sub_8076E34(gBattleAnimAttacker, spriteId, species);
sub_80752A0(&animBg);
AnimLoadCompressedBgTilemap(animBg.bgId, gMetalShineTilemap);
AnimLoadCompressedBgGfx(animBg.bgId, gMetalShineGfx, animBg.tilesOffset);
LoadCompressedPalette(gMetalShinePalette, animBg.paletteId * 16, 32);
gBattle_BG1_X = -gSprites[spriteId].pos1.x + 96;
gBattle_BG1_Y = -gSprites[spriteId].pos1.y + 32;
paletteNum = 16 + gSprites[spriteId].oam.paletteNum;
if (gBattleAnimArgs[1] == 0)
SetGreyscaleOrOriginalPalette(paletteNum, FALSE);
else
BlendPalette(paletteNum * 16, 16, 11, gBattleAnimArgs[2]);
gTasks[taskId].data[0] = newSpriteId;
gTasks[taskId].data[1] = gBattleAnimArgs[0];
gTasks[taskId].data[2] = gBattleAnimArgs[1];
gTasks[taskId].data[3] = gBattleAnimArgs[2];
gTasks[taskId].data[6] = priorityChanged;
gTasks[taskId].func = sub_80B8920;
}
static void sub_80B8920(u8 taskId)
{
struct BattleAnimBgData animBg;
u16 paletteNum;
u8 spriteId;
gTasks[taskId].data[10] += 4;
gBattle_BG1_X -= 4;
if (gTasks[taskId].data[10] == 128)
{
gTasks[taskId].data[10] = 0;
gBattle_BG1_X += 128;
gTasks[taskId].data[11]++;
if (gTasks[taskId].data[11] == 2)
{
spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
paletteNum = 16 + gSprites[spriteId].oam.paletteNum;
if (gTasks[taskId].data[1] == 0)
SetGreyscaleOrOriginalPalette(paletteNum, 1);
DestroySprite(&gSprites[gTasks[taskId].data[0]]);
sub_80752A0(&animBg);
sub_8075358(animBg.bgId);
if (gTasks[taskId].data[6] == 1)
gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]].oam.priority++;
}
else if (gTasks[taskId].data[11] == 3)
{
gBattle_WIN0H = 0;
gBattle_WIN0V = 0;
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR);
if (!IsContest())
SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON);
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
DestroyAnimVisualTask(taskId);
}
}
}
// Changes battler's palette to either greyscale or original.
// arg0: which battler
// arg1: 0 grayscale, 1 original
void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId)
{
u8 spriteId, battler;
bool8 calcSpriteId = FALSE;
u8 position = B_POSITION_PLAYER_LEFT;
switch (gBattleAnimArgs[0])
{
case 0:
case 1:
case 2:
case 3:
spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
break;
case 4:
position = B_POSITION_PLAYER_LEFT;
calcSpriteId = TRUE;
break;
case 5:
position = B_POSITION_PLAYER_RIGHT;
calcSpriteId = TRUE;
break;
case 6:
position = B_POSITION_OPPONENT_LEFT;
calcSpriteId = TRUE;
break;
case 7:
position = B_POSITION_OPPONENT_RIGHT;
calcSpriteId = TRUE;
break;
default:
spriteId = 0xFF;
break;
}
if (calcSpriteId)
{
battler = GetBattlerAtPosition(position);
if (IsBattlerSpriteVisible(battler))
spriteId = gBattlerSpriteIds[battler];
else
spriteId = 0xFF;
}
if (spriteId != 0xFF)
SetGreyscaleOrOriginalPalette(gSprites[spriteId].oam.paletteNum + 16, gBattleAnimArgs[1]);
DestroyAnimVisualTask(taskId);
}
void sub_80B8B38(u8 taskId)
{
if (gAnimMoveTurn < 2)
gBattleAnimArgs[7] = 0;
if (gAnimMoveTurn == 2)
gBattleAnimArgs[7] = 1;
DestroyAnimVisualTask(taskId);
}
+2 -2
View File
@@ -2087,7 +2087,7 @@ struct UnkStruct_82349CC
u8 field_3;
};
extern const struct UnkStruct_82349CC gUnknown_82349CC[NUM_SPECIES];
extern const struct UnkStruct_82349CC gMonFrontPicCoords[NUM_SPECIES];
static void SpriteCB_Egg_2(struct Sprite* sprite)
{
@@ -2101,7 +2101,7 @@ static void SpriteCB_Egg_2(struct Sprite* sprite)
sprite->data[0] = 0;
species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES);
gSprites[sEggHatchData->pokeSpriteID].pos2.x = 0;
gSprites[sEggHatchData->pokeSpriteID].pos2.y = gUnknown_82349CC[species].field_1;
gSprites[sEggHatchData->pokeSpriteID].pos2.y = gMonFrontPicCoords[species].field_1;
}
else
{
+431
View File
@@ -0,0 +1,431 @@
#include "global.h"
#include "battle_anim.h"
#include "scanline_effect.h"
#include "task.h"
#include "trig.h"
static void sub_80B725C(struct Sprite *sprite);
static void sub_80B741C(struct Sprite *sprite);
static void sub_80B73AC(struct Sprite *sprite);
static void sub_80B7448(struct Sprite *sprite);
static void sub_80B77E4(struct Sprite *sprite);
static void sub_80B74D8(struct Sprite *sprite);
static void sub_80B76B0(u8 taskId);
static void sub_80B776C(struct Task *task);
static void sub_80B7894(struct Sprite *sprite);
static EWRAM_DATA u16 gUnknown_20399A4[7] = {0};
static const union AnimCmd gUnknown_83E7710[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_FRAME(16, 4),
ANIMCMD_FRAME(32, 4),
ANIMCMD_FRAME(48, 4),
ANIMCMD_FRAME(64, 4),
ANIMCMD_JUMP(0),
};
static const union AnimCmd *const gUnknown_83E7728[] =
{
gUnknown_83E7710,
};
const struct SpriteTemplate gUnknown_83E772C =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gOamData_83AC9D8,
.anims = gUnknown_83E7728,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80B725C,
};
static const union AnimCmd gUnknown_83E7744[] =
{
ANIMCMD_FRAME(16, 3),
ANIMCMD_FRAME(32, 3),
ANIMCMD_FRAME(48, 3),
ANIMCMD_JUMP(0),
};
static const union AnimCmd gUnknown_83E7754[] =
{
ANIMCMD_FRAME(16, 3, .vFlip = TRUE, .hFlip = TRUE),
ANIMCMD_FRAME(32, 3, .vFlip = TRUE, .hFlip = TRUE),
ANIMCMD_FRAME(48, 3, .vFlip = TRUE, .hFlip = TRUE),
ANIMCMD_JUMP(0),
};
static const union AnimCmd *const gUnknown_83E7764[] =
{
gUnknown_83E7744,
gUnknown_83E7754,
};
static const union AffineAnimCmd gUnknown_83E776C[] =
{
AFFINEANIMCMD_FRAME(0x50, 0x50, 127, 0),
AFFINEANIMCMD_FRAME(0xD, 0xD, 0, 100),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd gUnknown_83E7784[] =
{
AFFINEANIMCMD_FRAME(0x50, 0x50, 0, 0),
AFFINEANIMCMD_FRAME(0xD, 0xD, 0, 100),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd *const gUnknown_83E779C[] =
{
gUnknown_83E776C,
gUnknown_83E7784,
};
const struct SpriteTemplate gUnknown_83E77A4 =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gOamData_83ACA98,
.anims = gUnknown_83E7764,
.images = NULL,
.affineAnims = gUnknown_83E779C,
.callback = sub_80B741C,
};
const union AnimCmd gUnknown_83E77BC[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_FRAME(16, 5),
ANIMCMD_FRAME(32, 5),
ANIMCMD_FRAME(48, 5),
ANIMCMD_FRAME(64, 5),
ANIMCMD_END,
};
static const union AnimCmd *const gUnknown_83E77D4[] =
{
gUnknown_83E77BC,
};
const struct SpriteTemplate gUnknown_83E77D8 =
{
.tileTag = ANIM_TAG_FIRE_PLUME,
.paletteTag = ANIM_TAG_FIRE_PLUME,
.oam = &gOamData_83AC9D8,
.anims = gUnknown_83E77D4,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80B73AC,
};
static const union AnimCmd gUnknown_83E77F0[] =
{
ANIMCMD_FRAME(16, 3),
ANIMCMD_FRAME(32, 3),
ANIMCMD_FRAME(48, 3),
ANIMCMD_JUMP(0),
};
static const union AnimCmd *const gUnknown_83E7800[] =
{
gUnknown_83E77F0,
gUnknown_83E77F0,
};
static const union AffineAnimCmd gUnknown_83E7808[] =
{
AFFINEANIMCMD_FRAME(0x64, 0x64, 127, 1),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd gUnknown_83E7818[] =
{
AFFINEANIMCMD_FRAME(0x64, 0x64, 0, 1),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd *const gUnknown_83E7828[] =
{
gUnknown_83E7808,
gUnknown_83E7818,
};
const struct SpriteTemplate gUnknown_83E7830 =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gOamData_83ACA98,
.anims = gUnknown_83E7800,
.images = NULL,
.affineAnims = gUnknown_83E7828,
.callback = sub_80B741C,
};
const struct SpriteTemplate gUnknown_83E7848 =
{
.tileTag = ANIM_TAG_HOLLOW_ORB,
.paletteTag = ANIM_TAG_HOLLOW_ORB,
.oam = &gOamData_83AC9D0,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80B7448,
};
const struct SpriteTemplate gUnknown_83E7860 =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gOamData_83AC9D8,
.anims = gUnknown_83E7728,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80B77E4,
};
static void sub_80B725C(struct Sprite *sprite)
{
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
sprite->pos1.x -= gBattleAnimArgs[0];
gBattleAnimArgs[3] = -gBattleAnimArgs[3];
gBattleAnimArgs[4] = -gBattleAnimArgs[4];
}
else
{
sprite->pos1.x += gBattleAnimArgs[0];
}
sprite->pos1.y += gBattleAnimArgs[1];
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[1] = gBattleAnimArgs[3];
sprite->data[3] = gBattleAnimArgs[4];
sprite->data[5] = gBattleAnimArgs[5];
sprite->invisible = TRUE;
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
sprite->callback = TranslateSpriteLinearAndFlicker;
}
static void sub_80B72F8(struct Sprite *sprite)
{
SetSpriteCoordsToAnimAttackerCoords(sprite);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
sprite->pos1.x -= gBattleAnimArgs[1];
sprite->pos1.y += gBattleAnimArgs[1];
sprite->data[2] -= gBattleAnimArgs[2];
sprite->data[4] += gBattleAnimArgs[3];
}
else
{
sprite->pos1.x += gBattleAnimArgs[0];
sprite->pos1.y += gBattleAnimArgs[1];
sprite->data[2] += gBattleAnimArgs[2];
sprite->data[4] += gBattleAnimArgs[3];
StartSpriteAnim(sprite, 1);
}
sprite->data[0] = gBattleAnimArgs[4];
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
}
static void sub_80B73AC(struct Sprite *sprite)
{
if (gBattleAnimArgs[0] == 0)
{
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
}
else
{
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
}
SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[1]);
sprite->pos1.y += gBattleAnimArgs[2];
sprite->callback = RunStoredCallbackWhenAnimEnds;
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
}
static void sub_80B741C(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
StartSpriteAffineAnim(sprite, 1);
sub_80B72F8(sprite);
}
static void sub_80B7448(struct Sprite *sprite)
{
u16 r5;
u16 r0;
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
sprite->data[4] = 0;
sprite->data[5] = 1;
sprite->data[6] = gBattleAnimArgs[0];
r5 = GetBattlerSpriteCoordAttr(gBattlerAttacker, BATTLER_COORD_ATTR_HEIGHT);
r0 = GetBattlerSpriteCoordAttr(gBattlerAttacker, BATTLER_COORD_ATTR_WIDTH);
if (r5 > r0)
sprite->data[7] = r5 / 2;
else
sprite->data[7] = r0 / 2;
sprite->pos2.x = Cos(sprite->data[6], sprite->data[7]);
sprite->pos2.y = Sin(sprite->data[6], sprite->data[7]);
sprite->callback = sub_80B74D8;
}
static void sub_80B74D8(struct Sprite *sprite)
{
switch (sprite->data[0])
{
case 0:
sprite->data[6] = (sprite->data[6] - sprite->data[5]) & 0xFF;
sprite->pos2.x = Cos(sprite->data[6], sprite->data[7]);
sprite->pos2.y = Sin(sprite->data[6], sprite->data[7]);
if (++sprite->data[4] > 5)
{
sprite->data[4] = 0;
if (sprite->data[5] <= 15 && ++sprite->data[5] > 15)
sprite->data[5] = 16;
}
if (++sprite->data[3] > 0x3C)
{
sprite->data[3] = 0;
++sprite->data[0];
}
break;
case 1:
sprite->data[6] = (sprite->data[6] - sprite->data[5]) & 0xFF;
if (sprite->data[7] <= 0x95 && (sprite->data[7] += 8) > 0x95)
sprite->data[7] = 0x96;
sprite->pos2.x = Cos(sprite->data[6], sprite->data[7]);
sprite->pos2.y = Sin(sprite->data[6], sprite->data[7]);
if (++sprite->data[4] > 5)
{
sprite->data[4] = 0;
if (sprite->data[5] <= 15 && ++sprite->data[5] > 15)
sprite->data[5] = 16;
}
if (++sprite->data[3] > 20)
DestroyAnimSprite(sprite);
break;
}
}
void sub_80B75E0(u8 taskId)
{
struct ScanlineEffectParams sp;
struct Task *task = &gTasks[taskId];
u16 i;
u8 r1;
if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1)
{
sp.dmaDest = &REG_BG1HOFS;
task->data[2] = gBattle_BG1_X;
}
else
{
sp.dmaDest = &REG_BG2HOFS;
task->data[2] = gBattle_BG2_X;
}
sp.dmaControl = 0xA2600001;
sp.initState = 1;
sp.unused9 = 0;
r1 = GetBattlerYCoordWithElevation(gBattleAnimAttacker);
task->data[3] = r1 - 32;
task->data[4] = r1 + 32;
if (task->data[3] < 0)
task->data[3] = 0;
for (i = task->data[3]; i <= task->data[4]; ++i)
{
gScanlineEffectRegBuffers[0][i] = task->data[2];
gScanlineEffectRegBuffers[1][i] = task->data[2];
}
ScanlineEffect_SetParams(sp);
task->func = sub_80B76B0;
}
static void sub_80B76B0(u8 taskId)
{
struct Task *task = &gTasks[taskId];
switch (task->data[0])
{
case 0:
if (++task->data[7] > 1)
{
task->data[7] = 0;
if (++task->data[6] == 3)
++task->data[0];
}
sub_80B776C(task);
break;
case 1:
if (++task->data[1] > 0x3C)
++task->data[0];
sub_80B776C(task);
break;
case 2:
if (++task->data[7] > 1)
{
task->data[7] = 0;
if (--task->data[6] == 0)
++task->data[0];
}
sub_80B776C(task);
break;
case 3:
gScanlineEffect.state = 3;
++task->data[0];
break;
case 4:
DestroyAnimVisualTask(taskId);
break;
}
}
static void sub_80B776C(struct Task *task)
{
u16 i, r3 = task->data[5];
for (i = task->data[3]; i <= task->data[4]; ++i)
{
gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = ((gSineTable[r3] * task->data[6]) >> 7) + task->data[2];
r3 = (r3 + 8) & 0xFF;
}
task->data[5] = (task->data[5] + 9) & 0xFF;
}
static void sub_80B77E4(struct Sprite *sprite)
{
s32 i, r6 = (gBattleAnimArgs[2] * 3) / 5;
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[4];
sprite->data[1] = Cos(gBattleAnimArgs[1], gBattleAnimArgs[2]);
sprite->data[2] = Sin(gBattleAnimArgs[1], r6);
sprite->pos1.x += sprite->data[1] * gBattleAnimArgs[0];
sprite->pos1.y += sprite->data[2] * gBattleAnimArgs[0];
sprite->data[3] = gBattleAnimArgs[3];
sprite->callback = sub_80B7894;
for (i = 0; i < 7; ++i)
gUnknown_20399A4[i] = sprite->data[i];
}
static void sub_80B7894(struct Sprite *sprite)
{
sprite->data[4] += sprite->data[1];
sprite->data[5] += sprite->data[2];
sprite->pos2.x = sprite->data[4] / 10;
sprite->pos2.y = sprite->data[5] / 10;
if (++sprite->data[0] > sprite->data[3])
DestroyAnimSprite(sprite);
}
+1289
View File
File diff suppressed because it is too large Load Diff
+1484
View File
File diff suppressed because it is too large Load Diff
+724
View File
@@ -0,0 +1,724 @@
#include "global.h"
#include "battle_anim.h"
#include "random.h"
#include "scanline_effect.h"
#include "task.h"
#include "trig.h"
static void AnimBonemerangProjectile(struct Sprite *sprite);
static void AnimBoneHitProjectile(struct Sprite *sprite);
static void AnimDirtScatter(struct Sprite *sprite);
static void AnimMudSportDirt(struct Sprite *sprite);
static void AnimFissureDirtPlumeParticle(struct Sprite *sprite);
static void AnimDigDirtMound(struct Sprite *sprite);
static void AnimBonemerangProjectileStep(struct Sprite *sprite);
static void AnimBonemerangProjectileEnd(struct Sprite *sprite);
static void AnimMudSportDirtRising(struct Sprite *sprite);
static void AnimMudSportDirtFalling(struct Sprite *sprite);
static void sub_80B8ED4(u8 taskId);
static void sub_80B908C(u8 taskId);
static void sub_80B92B8(u8 useBg1, s16 y, s16 endY);
static void sub_80B912C(u8 taskId);
static void sub_80B91B0(u8 taskId);
static void AnimFissureDirtPlumeParticleStep(struct Sprite *sprite);
static void sub_80B9584(u8 taskId);
static void sub_80B967C(u8 taskId);
static void sub_80B9760(struct Task *task);
static void sub_80B98A8(u8 taskId);
static const union AffineAnimCmd gUnknown_83E7A00[] =
{
AFFINEANIMCMD_FRAME(0x0, 0x0, 15, 1),
AFFINEANIMCMD_JUMP(0),
};
static const union AffineAnimCmd gUnknown_83E7A10[] =
{
AFFINEANIMCMD_FRAME(0x0, 0x0, 20, 1),
AFFINEANIMCMD_JUMP(0),
};
static const union AffineAnimCmd *const gUnknown_83E7A20[] =
{
gUnknown_83E7A00,
};
static const union AffineAnimCmd *const gUnknown_83E7A24[] =
{
gUnknown_83E7A10,
};
const struct SpriteTemplate gUnknown_83E7A28 =
{
.tileTag = ANIM_TAG_BONE,
.paletteTag = ANIM_TAG_BONE,
.oam = &gOamData_83ACA38,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_83E7A20,
.callback = AnimBonemerangProjectile,
};
const struct SpriteTemplate gUnknown_83E7A40 =
{
.tileTag = ANIM_TAG_BONE,
.paletteTag = ANIM_TAG_BONE,
.oam = &gOamData_83ACA38,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_83E7A24,
.callback = AnimBoneHitProjectile,
};
const struct SpriteTemplate gUnknown_83E7A58 =
{
.tileTag = ANIM_TAG_MUD_SAND,
.paletteTag = ANIM_TAG_MUD_SAND,
.oam = &gOamData_83AC9C8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimDirtScatter,
};
static const union AnimCmd gUnknown_83E7A70[] =
{
ANIMCMD_FRAME(1, 1),
ANIMCMD_END,
};
static const union AnimCmd *const gUnknown_83E7A78[] =
{
gUnknown_83E7A70,
};
const struct SpriteTemplate gUnknown_83E7A7C =
{
.tileTag = ANIM_TAG_MUD_SAND,
.paletteTag = ANIM_TAG_MUD_SAND,
.oam = &gOamData_83AC9D0,
.anims = gUnknown_83E7A78,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimDirtScatter,
};
const struct SpriteTemplate gUnknown_83E7A94 =
{
.tileTag = ANIM_TAG_MUD_SAND,
.paletteTag = ANIM_TAG_MUD_SAND,
.oam = &gOamData_83AC9D0,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimMudSportDirt,
};
const struct SpriteTemplate gUnknown_83E7AAC =
{
.tileTag = ANIM_TAG_MUD_SAND,
.paletteTag = ANIM_TAG_MUD_SAND,
.oam = &gOamData_83AC9C8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimFissureDirtPlumeParticle,
};
const struct SpriteTemplate gUnknown_83E7AC4 =
{
.tileTag = ANIM_TAG_DIRT_MOUND,
.paletteTag = ANIM_TAG_DIRT_MOUND,
.oam = &gOamData_83AC9F8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimDigDirtMound,
};
// Moves a bone projectile towards the target mon, which moves like
// a boomerang. After hitting the target mon, it comes back to the user.
static void AnimBonemerangProjectile(struct Sprite *sprite)
{
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
sprite->data[0] = 20;
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
sprite->data[5] = -40;
InitAnimArcTranslation(sprite);
sprite->callback = AnimBonemerangProjectileStep;
}
static void AnimBonemerangProjectileStep(struct Sprite *sprite)
{
if (TranslateAnimHorizontalArc(sprite))
{
sprite->pos1.x += sprite->pos2.x;
sprite->pos1.y += sprite->pos2.y;
sprite->pos2.y = 0;
sprite->pos2.x = 0;
sprite->data[0] = 20;
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
sprite->data[5] = 40;
InitAnimArcTranslation(sprite);
sprite->callback = AnimBonemerangProjectileEnd;
}
}
static void AnimBonemerangProjectileEnd(struct Sprite *sprite)
{
if (TranslateAnimHorizontalArc(sprite))
DestroyAnimSprite(sprite);
}
// Moves a bone projectile towards the target mon, starting right next to
// the target mon.
// arg 0: initial x pixel offset
// arg 1: initial y pixel offset
// arg 2: target x pixel offset
// arg 3: target y pixel offset
// arg 4: duration
static void AnimBoneHitProjectile(struct Sprite *sprite)
{
InitSpritePosToAnimTarget(sprite, TRUE);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
// Moves a small dirt projectile towards the target mon.
// arg 0: initial x pixel offset
// arg 1: initial y pixel offset
// arg 2: duration
// arg 3: target x pixel offset
// arg 4: target y pixel offset
static void AnimDirtScatter(struct Sprite *sprite)
{
u8 targetXPos, targetYPos;
s16 xOffset, yOffset;
InitSpritePosToAnimAttacker(sprite, 1);
targetXPos = GetBattlerSpriteCoord2(gBattleAnimTarget, 2);
targetYPos = GetBattlerSpriteCoord2(gBattleAnimTarget, 3);
xOffset = Random() & 0x1F;
yOffset = Random() & 0x1F;
if (xOffset > 16)
xOffset = 16 - xOffset;
if (yOffset > 16)
yOffset = 16 - yOffset;
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[2] = targetXPos + xOffset;
sprite->data[4] = targetYPos + yOffset;
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
}
// Moves a particle of dirt in the Mud Sport animation.
// The dirt can either be rising upward, or falling down.
// arg 0: 0 = dirt is rising into the air, 1 = dirt is falling down
// arg 1: initial x pixel offset
// arg 2: initial y pixel offset
static void AnimMudSportDirt(struct Sprite *sprite)
{
++sprite->oam.tileNum;
if (gBattleAnimArgs[0] == 0)
{
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1];
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[1] > 0 ? 1 : -1;
sprite->callback = AnimMudSportDirtRising;
}
else
{
sprite->pos1.x = gBattleAnimArgs[1];
sprite->pos1.y = gBattleAnimArgs[2];
sprite->pos2.y = -gBattleAnimArgs[2];
sprite->callback = AnimMudSportDirtFalling;
}
}
static void AnimMudSportDirtRising(struct Sprite *sprite)
{
if (++sprite->data[1] > 1)
{
sprite->data[1] = 0;
sprite->pos1.x += sprite->data[0];
}
sprite->pos1.y -= 4;
if (sprite->pos1.y < -4)
DestroyAnimSprite(sprite);
}
static void AnimMudSportDirtFalling(struct Sprite *sprite)
{
switch (sprite->data[0])
{
case 0:
sprite->pos2.y += 4;
if (sprite->pos2.y >= 0)
{
sprite->pos2.y = 0;
++sprite->data[0];
}
break;
case 1:
if (++sprite->data[1] > 0)
{
sprite->data[1] = 0;
sprite->invisible ^= 1;
if (++sprite->data[2] == 10)
DestroyAnimSprite(sprite);
}
break;
}
}
void sub_80B8E94(u8 taskId)
{
struct Task *task = &gTasks[taskId];
if (gBattleAnimArgs[0] == 0)
task->func = sub_80B8ED4;
else
task->func = sub_80B908C;
task->func(taskId);
}
static void sub_80B8ED4(u8 taskId)
{
u8 var0;
struct Task *task = &gTasks[taskId];
switch (task->data[0])
{
case 0:
task->data[10] = GetAnimBattlerSpriteId(0);
task->data[11] = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker);
if (task->data[11] == 1)
{
task->data[12] = gBattle_BG1_X;
task->data[13] = gBattle_BG1_Y;
}
else
{
task->data[12] = gBattle_BG2_X;
task->data[13] = gBattle_BG2_Y;
}
var0 = GetBattlerYCoordWithElevation(gBattleAnimAttacker);
task->data[14] = var0 - 32;
task->data[15] = var0 + 32;
if (task->data[14] < 0)
task->data[14] = 0;
gSprites[task->data[10]].invisible = TRUE;
++task->data[0];
break;
case 1:
sub_80B92B8(task->data[11], task->data[14], task->data[15]);
++task->data[0];
break;
case 2:
task->data[2] = (task->data[2] + 6) & 0x7F;
if (++task->data[4] > 2)
{
task->data[4] = 0;
++task->data[3];
}
task->data[5] = task->data[3] + (gSineTable[task->data[2]] >> 4);
if (task->data[11] == 1)
gBattle_BG1_Y = task->data[13] - task->data[5];
else
gBattle_BG2_Y = task->data[13] - task->data[5];
if (task->data[5] > 63)
{
task->data[5] = 120 - task->data[14];
if (task->data[11] == 1)
gBattle_BG1_Y = task->data[13] - task->data[5];
else
gBattle_BG2_Y = task->data[13] - task->data[5];
gSprites[task->data[10]].pos2.x = 272 - gSprites[task->data[10]].pos1.x;
++task->data[0];
}
break;
case 3:
gScanlineEffect.state = 3;
++task->data[0];
break;
case 4:
DestroyAnimVisualTask(taskId);
gSprites[task->data[10]].invisible = TRUE;
break;
}
}
static void sub_80B908C(u8 taskId)
{
u8 spriteId = GetAnimBattlerSpriteId(0);
gSprites[spriteId].invisible = TRUE;
gSprites[spriteId].pos2.x = 0;
gSprites[spriteId].pos2.y = 0;
if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1)
gBattle_BG1_Y = 0;
else
gBattle_BG2_Y = 0;
DestroyAnimVisualTask(taskId);
}
void sub_80B90EC(u8 taskId)
{
struct Task *task = &gTasks[taskId];
if (gBattleAnimArgs[0] == 0)
task->func = sub_80B912C;
else
task->func = sub_80B91B0;
task->func(taskId);
}
static void sub_80B912C(u8 taskId)
{
struct Task *task = &gTasks[taskId];
switch (task->data[0])
{
case 0:
task->data[10] = GetAnimBattlerSpriteId(0);
gSprites[task->data[10]].invisible = FALSE;
gSprites[task->data[10]].pos2.x = 0;
gSprites[task->data[10]].pos2.y = 160 - gSprites[task->data[10]].pos1.y;
++task->data[0];
break;
case 1:
DestroyAnimVisualTask(taskId);
}
}
static void sub_80B91B0(u8 taskId)
{
u8 var0;
struct Task *task = &gTasks[taskId];
switch (task->data[0])
{
case 0:
task->data[10] = GetAnimBattlerSpriteId(0);
task->data[11] = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker);
if (task->data[11] == 1)
task->data[12] = gBattle_BG1_X;
else
task->data[12] = gBattle_BG2_X;
var0 = GetBattlerYCoordWithElevation(gBattleAnimAttacker);
task->data[14] = var0 - 32;
task->data[15] = var0 + 32;
++task->data[0];
break;
case 1:
sub_80B92B8(task->data[11], 0, task->data[15]);
++task->data[0];
break;
case 2:
gSprites[task->data[10]].pos2.y = 96;
++task->data[0];
break;
case 3:
gSprites[task->data[10]].pos2.y -= 8;
if (gSprites[task->data[10]].pos2.y == 0)
{
gScanlineEffect.state = 3;
++task->data[0];
}
break;
case 4:
DestroyAnimVisualTask(taskId);
break;
}
}
static void sub_80B92B8(u8 useBG1, s16 y, s16 endY)
{
s16 bgX;
struct ScanlineEffectParams scanlineParams;
if (useBG1 == 1)
{
bgX = gBattle_BG1_X;
scanlineParams.dmaDest = &REG_BG1HOFS;
}
else
{
bgX = gBattle_BG2_X;
scanlineParams.dmaDest = &REG_BG2HOFS;
}
if (y < 0)
y = 0;
while (y < endY)
{
gScanlineEffectRegBuffers[0][y] = bgX;
gScanlineEffectRegBuffers[1][y] = bgX;
++y;
}
while (y < 160)
{
gScanlineEffectRegBuffers[0][y] = bgX + 240;
gScanlineEffectRegBuffers[1][y] = bgX + 240;
++y;
}
scanlineParams.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
scanlineParams.initState = 1;
scanlineParams.unused9 = 0;
ScanlineEffect_SetParams(scanlineParams);
}
// Moves a particle of dirt in a plume of dirt. Used in Fissure and Dig.
// arg 0: which mon (0 = attacker, 1 = target)
// arg 1: which side of mon (0 = left, 1 = right)
// arg 2: target x offset
// arg 3: target y offset
// arg 4: wave amplitude
// arg 5: duration
static void AnimFissureDirtPlumeParticle(struct Sprite *sprite)
{
s8 battler;
s16 xOffset;
if (gBattleAnimArgs[0] == 0)
battler = gBattleAnimAttacker;
else
battler = gBattleAnimTarget;
xOffset = 24;
if (gBattleAnimArgs[1] == 1)
{
xOffset *= -1;
gBattleAnimArgs[2] *= -1;
}
sprite->pos1.x = GetBattlerSpriteCoord(battler, 2) + xOffset;
sprite->pos1.y = GetBattlerYCoordWithElevation(battler) + 30;
sprite->data[0] = gBattleAnimArgs[5];
sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2];
sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[3];
sprite->data[5] = gBattleAnimArgs[4];
InitAnimArcTranslation(sprite);
sprite->callback = AnimFissureDirtPlumeParticleStep;
}
static void AnimFissureDirtPlumeParticleStep(struct Sprite *sprite)
{
if (TranslateAnimHorizontalArc(sprite))
DestroyAnimSprite(sprite);
}
// Displays the dirt mound seen in the move Dig for set duration.
// The dirt mound image is too large for a single sprite, so two
// sprites are lined up next to each other.
// arg 0: which mon (0 = attacker, 1 = target)
// arg 1: oam tile num (0 = left half of image, 1 = right half of image)
// arg 2: duration
static void AnimDigDirtMound(struct Sprite *sprite)
{
s8 battler;
if (gBattleAnimArgs[0] == 0)
battler = gBattleAnimAttacker;
else
battler = gBattleAnimTarget;
sprite->pos1.x = GetBattlerSpriteCoord(battler, 0) - 16 + (gBattleAnimArgs[1] * 32);
sprite->pos1.y = GetBattlerYCoordWithElevation(battler) + 32;
sprite->oam.tileNum += gBattleAnimArgs[1] * 8;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
sprite->data[0] = gBattleAnimArgs[2];
sprite->callback = WaitAnimForDuration;
}
void sub_80B94B4(u8 taskId)
{
u16 i;
struct Task *task = &gTasks[taskId];
if (gBattleAnimArgs[1])
task->data[14] = task->data[15] = gBattleAnimArgs[1] + 3;
else
task->data[14] = task->data[15] = (gAnimMovePower / 10) + 3;
task->data[3] = gBattleAnimArgs[2];
switch (gBattleAnimArgs[0])
{
case 5:
task->data[13] = gBattle_BG3_X;
task->func = sub_80B9584;
break;
case 4:
task->data[13] = 0;
for (i = 0; i < MAX_BATTLERS_COUNT; ++i)
{
if (IsBattlerSpriteVisible(i))
{
task->data[task->data[13] + 9] = gBattlerSpriteIds[i];
++task->data[13];
}
}
task->func = sub_80B967C;
break;
default:
task->data[9] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
if (task->data[9] == 0xFF)
{
DestroyAnimVisualTask(taskId);
}
else
{
task->data[13] = 1;
task->func = sub_80B967C;
}
break;
}
}
static void sub_80B9584(u8 taskId)
{
struct Task *task = &gTasks[taskId];
switch (task->data[0])
{
case 0:
if (++task->data[1] > 1)
{
task->data[1] = 0;
if ((task->data[2] & 1) == 0)
gBattle_BG3_X = task->data[13] + task->data[15];
else
gBattle_BG3_X = task->data[13] - task->data[15];
if (++task->data[2] == task->data[3])
{
task->data[2] = 0;
--task->data[14];
++task->data[0];
}
}
break;
case 1:
if (++task->data[1] > 1)
{
task->data[1] = 0;
if ((task->data[2] & 1) == 0)
gBattle_BG3_X = task->data[13] + task->data[14];
else
gBattle_BG3_X = task->data[13] - task->data[14];
if (++task->data[2] == 4)
{
task->data[2] = 0;
if (--task->data[14] == 0)
++task->data[0];
}
}
break;
case 2:
gBattle_BG3_X = task->data[13];
DestroyAnimVisualTask(taskId);
break;
}
}
static void sub_80B967C(u8 taskId)
{
u16 i;
struct Task *task = &gTasks[taskId];
switch (task->data[0])
{
case 0:
if (++task->data[1] > 1)
{
task->data[1] = 0;
sub_80B9760(task);
if (++task->data[2] == task->data[3])
{
task->data[2] = 0;
--task->data[14];
++task->data[0];
}
}
break;
case 1:
if (++task->data[1] > 1)
{
task->data[1] = 0;
sub_80B9760(task);
if (++task->data[2] == 4)
{
task->data[2] = 0;
if (--task->data[14] == 0)
++task->data[0];
}
}
break;
case 2:
for (i = 0; i < task->data[13]; ++i)
gSprites[task->data[9 + i]].pos2.x = 0;
DestroyAnimVisualTask(taskId);
break;
}
}
static void sub_80B9760(struct Task *task)
{
u16 i, xOffset;
if ((task->data[2] & 1) == 0)
xOffset = (task->data[14] / 2) + (task->data[14] & 1);
else
xOffset = -(task->data[14] / 2);
for (i = 0; i < task->data[13]; ++i)
gSprites[task->data[9 + i]].pos2.x = xOffset;
}
void AnimTask_IsPowerOver99(u8 taskId)
{
gBattleAnimArgs[15] = gAnimMovePower > 99;
DestroyAnimVisualTask(taskId);
}
void sub_80B9800(u8 taskId)
{
struct Task *newTask;
u8 battler = (gBattleAnimArgs[0] & 1) ? gBattleAnimTarget : gBattleAnimAttacker;
if (gBattleAnimArgs[0] > 1)
battler ^= BIT_FLANK;
newTask = &gTasks[CreateTask(sub_80B98A8, gBattleAnimArgs[1])];
newTask->data[1] = (32 - GetBattlerSpriteCoord(battler, 2)) & 0x1FF;
newTask->data[2] = (64 - GetBattlerSpriteCoord(battler, 3)) & 0xFF;
gBattle_BG3_X = newTask->data[1];
gBattle_BG3_Y = newTask->data[2];
newTask->data[3] = gBattleAnimArgs[2];
DestroyAnimVisualTask(taskId);
}
static void sub_80B98A8(u8 taskId)
{
struct Task *task = &gTasks[taskId];
if (gBattleAnimArgs[7] == task->data[3])
{
gBattle_BG3_X = 0;
gBattle_BG3_Y = 0;
DestroyTask(taskId);
}
else
{
gBattle_BG3_X = task->data[1];
gBattle_BG3_Y = task->data[2];
}
}
+916
View File
@@ -0,0 +1,916 @@
#include "global.h"
#include "battle_anim.h"
#include "palette.h"
#include "random.h"
#include "task.h"
#include "trig.h"
static void AnimConfusionDuck(struct Sprite *sprite);
static void AnimSimplePaletteBlend(struct Sprite *sprite);
static void sub_80B9A7C(struct Sprite *sprite);
static void sub_80B9B8C(struct Sprite *sprite);
static void sub_80BA27C(struct Sprite *sprite);
static void sub_80BA560(struct Sprite *sprite);
static void sub_80BA5F8(struct Sprite *sprite);
static void sub_80BA630(struct Sprite *sprite);
static void sub_80BA6C8(struct Sprite *sprite);
static void sub_80BA738(struct Sprite *sprite);
static void sub_80BA780(struct Sprite *sprite);
static void sub_80BA5A8(struct Sprite *sprite);
static void AnimConfusionDuckStep(struct Sprite *sprite);
static void AnimSimplePaletteBlendStep(struct Sprite *sprite);
static void sub_80B9AD0(struct Sprite *sprite);
static void sub_80B9B5C(struct Sprite *sprite);
static void sub_80B9C2C(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount);
static void sub_80B9C7C(u8 taskId);
static void sub_80B9DA0(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount);
static void sub_80B9DF0(u8 taskId);
static void sub_80B9EA8(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount);
static void sub_80B9F04(u8 taskId);
static void sub_80B9FD8(u8 taskId);
static void sub_80BA090(u8 taskId);
static void sub_80BA3CC(void);
static void sub_80BA320(struct Sprite *sprite);
static void sub_80BA4D0(u8 taskId);
static void sub_80BA7BC(struct Sprite *sprite);
static const union AnimCmd gUnknown_83E7ADC[] =
{
ANIMCMD_FRAME(0, 8),
ANIMCMD_FRAME(4, 8),
ANIMCMD_FRAME(0, 8, .hFlip = TRUE),
ANIMCMD_FRAME(8, 8),
ANIMCMD_JUMP(0),
};
static const union AnimCmd gUnknown_83E7AF0[] =
{
ANIMCMD_FRAME(0, 8, .hFlip = TRUE),
ANIMCMD_FRAME(4, 8),
ANIMCMD_FRAME(0, 8),
ANIMCMD_FRAME(8, 8),
ANIMCMD_JUMP(0),
};
static const union AnimCmd *const gUnknown_83E7B04[] =
{
gUnknown_83E7ADC,
gUnknown_83E7AF0,
};
const struct SpriteTemplate gConfusionDuckSpriteTemplate =
{
.tileTag = ANIM_TAG_DUCK,
.paletteTag = ANIM_TAG_DUCK,
.oam = &gOamData_83AC9D0,
.anims = gUnknown_83E7B04,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimConfusionDuck,
};
const struct SpriteTemplate gSimplePaletteBlendSpriteTemplate =
{
.tileTag = 0,
.paletteTag = 0,
.oam = &gDummyOamData,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSimplePaletteBlend,
};
const struct SpriteTemplate gComplexPaletteBlendSpriteTemplate =
{
.tileTag = 0,
.paletteTag = 0,
.oam = &gDummyOamData,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80B9A7C,
};
static const union AnimCmd gUnknown_83E7B54[] =
{
ANIMCMD_FRAME(0, 3),
ANIMCMD_FRAME(16, 3),
ANIMCMD_FRAME(32, 3),
ANIMCMD_FRAME(48, 3),
ANIMCMD_FRAME(64, 3),
ANIMCMD_JUMP(0),
};
static const union AnimCmd *const gUnknown_83E7B6C[] =
{
gUnknown_83E7B54,
};
const struct SpriteTemplate gUnknown_83E7B70 =
{
.tileTag = ANIM_TAG_SPARKLE_4,
.paletteTag = ANIM_TAG_SPARKLE_4,
.oam = &gOamData_83AC9D8,
.anims = gUnknown_83E7B6C,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80B9B8C,
};
const struct SpriteTemplate gUnknown_83E7B88 =
{
.tileTag = 0,
.paletteTag = 0,
.oam = &gDummyOamData,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80BA27C,
};
static const union AffineAnimCmd gUnknown_83E7BA0[] =
{
AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd gUnknown_83E7BB0[] =
{
AFFINEANIMCMD_FRAME(0xD8, 0xD8, 0, 0),
AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd gUnknown_83E7BC8[] =
{
AFFINEANIMCMD_FRAME(0xB0, 0xB0, 0, 0),
AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd gUnknown_83E7BE0[] =
{
AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
AFFINEANIMCMD_END,
};
static const union AffineAnimCmd *const gUnknown_83E7BF8[] =
{
gUnknown_83E7BA0,
gUnknown_83E7BB0,
gUnknown_83E7BC8,
gUnknown_83E7BE0,
};
const struct SpriteTemplate gBasicHitSplatSpriteTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_IMPACT,
.oam = &gOamData_83ACB58,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_83E7BF8,
.callback = sub_80BA560,
};
const struct SpriteTemplate gUnknown_83E7C20 =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_IMPACT,
.oam = &gOamData_83ACB58,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_83E7BF8,
.callback = sub_80BA5F8,
};
const struct SpriteTemplate gUnknown_83E7C38 =
{
.tileTag = ANIM_TAG_WATER_IMPACT,
.paletteTag = ANIM_TAG_WATER_IMPACT,
.oam = &gOamData_83ACB58,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_83E7BF8,
.callback = sub_80BA560,
};
const struct SpriteTemplate gUnknown_83E7C50 =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_IMPACT,
.oam = &gOamData_83ACB58,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_83E7BF8,
.callback = sub_80BA630,
};
const struct SpriteTemplate gUnknown_83E7C68 =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_IMPACT,
.oam = &gOamData_83ACB58,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_83E7BF8,
.callback = sub_80BA6C8,
};
const struct SpriteTemplate gUnknown_83E7C80 =
{
.tileTag = ANIM_TAG_CROSS_IMPACT,
.paletteTag = ANIM_TAG_CROSS_IMPACT,
.oam = &gOamData_83ACAF8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80BA738,
};
const struct SpriteTemplate gUnknown_83E7C98 =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_IMPACT,
.oam = &gOamData_83ACA38,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_83E7BF8,
.callback = sub_80BA780,
};
const struct SpriteTemplate gUnknown_83E7CB0 =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_IMPACT,
.oam = &gOamData_83ACB58,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_83E7BF8,
.callback = sub_80BA5A8,
};
// Moves a spinning duck around the mon's head.
// arg 0: initial x pixel offset
// arg 1: initial y pixel offset
// arg 2: initial wave offset
// arg 3: wave period (higher means faster wave)
// arg 4: duration
static void AnimConfusionDuck(struct Sprite *sprite)
{
sprite->pos1.x += gBattleAnimArgs[0];
sprite->pos1.y += gBattleAnimArgs[1];
sprite->data[0] = gBattleAnimArgs[2];
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
sprite->data[1] = -gBattleAnimArgs[3];
sprite->data[4] = 1;
}
else
{
sprite->data[1] = gBattleAnimArgs[3];
sprite->data[4] = 0;
StartSpriteAnim(sprite, 1);
}
sprite->data[3] = gBattleAnimArgs[4];
sprite->callback = AnimConfusionDuckStep;
sprite->callback(sprite);
}
static void AnimConfusionDuckStep(struct Sprite *sprite)
{
sprite->pos2.x = Cos(sprite->data[0], 30);
sprite->pos2.y = Sin(sprite->data[0], 10);
if ((u16)sprite->data[0] < 128)
sprite->oam.priority = 1;
else
sprite->oam.priority = 3;
sprite->data[0] = (sprite->data[0] + sprite->data[1]) & 0xFF;
if (++sprite->data[2] == sprite->data[3])
DestroyAnimSprite(sprite);
}
// Performs a simple color blend on a specified sprite.
// arg 0: palette selector
// arg 1: delay
// arg 2: start blend amount
// arg 3: end blend amount
// arg 4: blend color
static void AnimSimplePaletteBlend(struct Sprite *sprite)
{
u32 selectedPalettes = UnpackSelectedBattleAnimPalettes(gBattleAnimArgs[0]);
BeginNormalPaletteFade(selectedPalettes, gBattleAnimArgs[1], gBattleAnimArgs[2], gBattleAnimArgs[3], gBattleAnimArgs[4]);
sprite->invisible = TRUE;
sprite->callback = AnimSimplePaletteBlendStep;
}
// Unpacks a bitfield and returns a bitmask of its selected palettes.
// Bits 0-6 of the selector parameter result in the following palettes being selected:
// 0: battle background palettes (BG palettes 1, 2, and 3)
// 1: gBattleAnimAttacker OBJ palette
// 2: gBattleAnimTarget OBJ palette
// 3: gBattleAnimAttacker partner OBJ palette
// 4: gBattleAnimTarget partner OBJ palette
// 5: BG palette 4
// 6: BG palette 5
u32 UnpackSelectedBattleAnimPalettes(s16 selector)
{
u8 battleBackground = selector & 1;
u8 attacker = (selector >> 1) & 1;
u8 target = (selector >> 2) & 1;
u8 attackerPartner = (selector >> 3) & 1;
u8 targetPartner = (selector >> 4) & 1;
u8 arg5 = (selector >> 5) & 1;
u8 arg6 = (selector >> 6) & 1;
return sub_8075BE8(battleBackground, attacker, target, attackerPartner, targetPartner, arg5, arg6);
}
static void AnimSimplePaletteBlendStep(struct Sprite *sprite)
{
if (!gPaletteFade.active)
DestroyAnimSprite(sprite);
}
static void sub_80B9A7C(struct Sprite *sprite)
{
u32 selectedPalettes;
sprite->data[0] = gBattleAnimArgs[1];
sprite->data[1] = gBattleAnimArgs[1];
sprite->data[2] = gBattleAnimArgs[2];
sprite->data[3] = gBattleAnimArgs[3];
sprite->data[4] = gBattleAnimArgs[4];
sprite->data[5] = gBattleAnimArgs[5];
sprite->data[6] = gBattleAnimArgs[6];
sprite->data[7] = gBattleAnimArgs[0];
selectedPalettes = UnpackSelectedBattleAnimPalettes(sprite->data[7]);
BlendPalettes(selectedPalettes, gBattleAnimArgs[4], gBattleAnimArgs[3]);
sprite->invisible = TRUE;
sprite->callback = sub_80B9AD0;
}
static void sub_80B9AD0(struct Sprite *sprite)
{
u32 selectedPalettes;
if (sprite->data[0] > 0)
{
--sprite->data[0];
return;
}
if (gPaletteFade.active)
return;
if (sprite->data[2] == 0)
{
sprite->callback = sub_80B9B5C;
return;
}
selectedPalettes = UnpackSelectedBattleAnimPalettes(sprite->data[7]);
if (sprite->data[1] & 0x100)
BlendPalettes(selectedPalettes, sprite->data[4], sprite->data[3]);
else
BlendPalettes(selectedPalettes, sprite->data[6], sprite->data[5]);
sprite->data[1] ^= 0x100;
sprite->data[0] = sprite->data[1] & 0xFF;
--sprite->data[2];
}
static void sub_80B9B5C(struct Sprite *sprite)
{
u32 selectedPalettes;
if (!gPaletteFade.active)
{
selectedPalettes = UnpackSelectedBattleAnimPalettes(sprite->data[7]);
BlendPalettes(selectedPalettes, 0, 0);
DestroyAnimSprite(sprite);
}
}
static void sub_80B9B8C(struct Sprite *sprite)
{
sprite->pos1.x += gBattleAnimArgs[0];
sprite->pos1.y += gBattleAnimArgs[1];
sprite->data[0] = 0;
sprite->data[1] = 10;
sprite->data[2] = 8;
sprite->data[3] = 40;
sprite->data[4] = 112;
sprite->data[5] = 0;
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
sprite->callback = TranslateSpriteInGrowingCircleOverDuration;
sprite->callback(sprite);
}
void sub_80B9BDC(u8 taskId)
{
gTasks[taskId].data[0] = gBattleAnimArgs[0];
gTasks[taskId].data[1] = gBattleAnimArgs[1];
gTasks[taskId].data[2] = gBattleAnimArgs[2];
gTasks[taskId].data[3] = gBattleAnimArgs[3];
gTasks[taskId].data[4] = gBattleAnimArgs[4];
gTasks[taskId].data[5] = gBattleAnimArgs[5];
gTasks[taskId].data[8] = 0;
sub_80B9C2C(taskId, 0, gTasks[taskId].data[4]);
gTasks[taskId].func = sub_80B9C7C;
}
static void sub_80B9C2C(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount)
{
u32 selectedPalettes = UnpackSelectedBattleAnimPalettes(gTasks[taskId].data[0]);
BeginNormalPaletteFade(selectedPalettes,
gTasks[taskId].data[1],
initialBlendAmount,
targetBlendAmount,
gTasks[taskId].data[5]);
--gTasks[taskId].data[2];
gTasks[taskId].data[8] ^= 1;
}
static void sub_80B9C7C(u8 taskId)
{
u8 initialBlendAmount, targetBlendAmount;
if (!gPaletteFade.active)
{
if (gTasks[taskId].data[2] > 0)
{
if (gTasks[taskId].data[8] == 0)
{
initialBlendAmount = gTasks[taskId].data[3];
targetBlendAmount = gTasks[taskId].data[4];
}
else
{
initialBlendAmount = gTasks[taskId].data[4];
targetBlendAmount = gTasks[taskId].data[3];
}
if (gTasks[taskId].data[2] == 1)
targetBlendAmount = 0;
sub_80B9C2C(taskId, initialBlendAmount, targetBlendAmount);
}
else
{
DestroyAnimVisualTask(taskId);
}
}
}
void sub_80B9CE4(u8 taskId)
{
s32 battler;
u32 selectedPalettes = 0;
gTasks[taskId].data[0] = gBattleAnimArgs[0];
gTasks[taskId].data[1] = gBattleAnimArgs[1];
gTasks[taskId].data[2] = gBattleAnimArgs[2];
gTasks[taskId].data[3] = gBattleAnimArgs[3];
gTasks[taskId].data[4] = gBattleAnimArgs[4];
gTasks[taskId].data[5] = gBattleAnimArgs[5];
gTasks[taskId].data[8] = 0;
for (battler = 0; battler < gBattlersCount; ++battler)
if (battler != gBattleAnimAttacker && battler != gBattleAnimTarget)
selectedPalettes |= 1 << (battler + 16);
if (gBattleAnimArgs[0] == 1)
selectedPalettes |= 0xE;
gTasks[taskId].data[9] = selectedPalettes >> 16;
gTasks[taskId].data[10] = selectedPalettes & 0xFF;
sub_80B9DA0(taskId, 0, gTasks[taskId].data[4]);
gTasks[taskId].func = sub_80B9DF0;
}
static void sub_80B9DA0(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount)
{
u32 selectedPalettes = ((u16)gTasks[taskId].data[9] << 16) | (u16)gTasks[taskId].data[10];
BeginNormalPaletteFade(selectedPalettes,
gTasks[taskId].data[1],
initialBlendAmount,
targetBlendAmount,
gTasks[taskId].data[5]);
--gTasks[taskId].data[2];
gTasks[taskId].data[8] ^= 1;
}
static void sub_80B9DF0(u8 taskId)
{
u8 initialBlendAmount, targetBlendAmount;
if (!gPaletteFade.active)
{
if (gTasks[taskId].data[2] > 0)
{
if (gTasks[taskId].data[8] == 0)
{
initialBlendAmount = gTasks[taskId].data[3];
targetBlendAmount = gTasks[taskId].data[4];
}
else
{
initialBlendAmount = gTasks[taskId].data[4];
targetBlendAmount = gTasks[taskId].data[3];
}
if (gTasks[taskId].data[2] == 1)
targetBlendAmount = 0;
sub_80B9DA0(taskId, initialBlendAmount, targetBlendAmount);
}
else
{
DestroyAnimVisualTask(taskId);
}
}
}
void sub_80B9E58(u8 taskId)
{
u8 paletteIndex;
gTasks[taskId].data[0] = gBattleAnimArgs[0];
gTasks[taskId].data[1] = gBattleAnimArgs[1];
gTasks[taskId].data[2] = gBattleAnimArgs[2];
gTasks[taskId].data[3] = gBattleAnimArgs[3];
gTasks[taskId].data[4] = gBattleAnimArgs[4];
gTasks[taskId].data[5] = gBattleAnimArgs[5];
gTasks[taskId].data[8] = 0;
sub_80B9EA8(taskId, 0, gTasks[taskId].data[4]);
gTasks[taskId].func = sub_80B9F04;
}
static void sub_80B9EA8(u8 taskId, u8 initialBlendAmount, u8 targetBlendAmount)
{
u8 paletteIndex = IndexOfSpritePaletteTag(gTasks[taskId].data[0]);
BeginNormalPaletteFade(1 << (paletteIndex + 16),
gTasks[taskId].data[1],
initialBlendAmount,
targetBlendAmount,
gTasks[taskId].data[5]);
--gTasks[taskId].data[2];
gTasks[taskId].data[8] ^= 1;
}
static void sub_80B9F04(u8 taskId)
{
u8 initialBlendAmount, targetBlendAmount;
if (!gPaletteFade.active)
{
if (gTasks[taskId].data[2] > 0)
{
if (gTasks[taskId].data[8] == 0)
{
initialBlendAmount = gTasks[taskId].data[3];
targetBlendAmount = gTasks[taskId].data[4];
}
else
{
initialBlendAmount = gTasks[taskId].data[4];
targetBlendAmount = gTasks[taskId].data[3];
}
if (gTasks[taskId].data[2] == 1)
targetBlendAmount = 0;
sub_80B9EA8(taskId, initialBlendAmount, targetBlendAmount);
}
else
{
DestroyAnimVisualTask(taskId);
}
}
}
void sub_80B9F6C(u8 taskId)
{
u8 paletteIndex;
gTasks[taskId].data[0] = gBattleAnimArgs[1];
gTasks[taskId].data[1] = gBattleAnimArgs[1];
gTasks[taskId].data[2] = gBattleAnimArgs[2];
gTasks[taskId].data[3] = gBattleAnimArgs[3];
gTasks[taskId].data[4] = gBattleAnimArgs[4];
gTasks[taskId].data[5] = gBattleAnimArgs[5];
gTasks[taskId].data[6] = gBattleAnimArgs[6];
gTasks[taskId].data[7] = gBattleAnimArgs[0];
paletteIndex = IndexOfSpritePaletteTag(gBattleAnimArgs[0]);
BeginNormalPaletteFade(1 << (paletteIndex + 16),
0,
gBattleAnimArgs[4],
gBattleAnimArgs[4],
gBattleAnimArgs[3]);
gTasks[taskId].func = sub_80B9FD8;
}
static void sub_80B9FD8(u8 taskId)
{
u32 selectedPalettes;
if (gTasks[taskId].data[0] > 0)
{
--gTasks[taskId].data[0];
return;
}
if (gPaletteFade.active)
return;
if (gTasks[taskId].data[2] == 0)
{
gTasks[taskId].func = sub_80BA090;
return;
}
selectedPalettes = 1 << (IndexOfSpritePaletteTag(gTasks[taskId].data[7]) + 16);
if (gTasks[taskId].data[1] & 0x100)
BeginNormalPaletteFade(selectedPalettes,
0,
gTasks[taskId].data[4],
gTasks[taskId].data[4],
gTasks[taskId].data[3]);
else
BeginNormalPaletteFade(selectedPalettes,
0,
gTasks[taskId].data[6],
gTasks[taskId].data[6],
gTasks[taskId].data[5]);
gTasks[taskId].data[1] ^= 0x100;
gTasks[taskId].data[0] = gTasks[taskId].data[1] & 0xFF;
--gTasks[taskId].data[2];
}
static void sub_80BA090(u8 taskId)
{
u32 selectedPalettes;
if (!gPaletteFade.active)
{
selectedPalettes = 1 << (IndexOfSpritePaletteTag(gTasks[taskId].data[7]) + 16);
BeginNormalPaletteFade(selectedPalettes, 0, 0, 0, RGB(0, 0, 0));
DestroyAnimVisualTask(taskId);
}
}
void sub_80BA0E8(u8 taskId)
{
u32 selectedPalettes = 0;
u8 attackerBattler = gBattleAnimAttacker;
u8 targetBattler = gBattleAnimTarget;
if (gBattleAnimArgs[0] & 0x100)
selectedPalettes = sub_8075BE8(1, 0, 0, 0, 0, 0, 0);
if (gBattleAnimArgs[1] & 0x100)
selectedPalettes |= (0x10000 << attackerBattler);
if (gBattleAnimArgs[2] & 0x100)
selectedPalettes |= (0x10000 << targetBattler);
InvertPlttBuffer(selectedPalettes);
DestroyAnimVisualTask(taskId);
}
// not used
static void sub_80BA16C(u8 taskId)
{
u8 attackerBattler;
u8 targetBattler;
u8 paletteIndex;
u32 selectedPalettes = 0;
if (gTasks[taskId].data[0] == 0)
{
gTasks[taskId].data[2] = gBattleAnimArgs[0];
gTasks[taskId].data[3] = gBattleAnimArgs[1];
gTasks[taskId].data[4] = gBattleAnimArgs[2];
gTasks[taskId].data[1] = gBattleAnimArgs[3];
gTasks[taskId].data[5] = gBattleAnimArgs[4];
gTasks[taskId].data[6] = gBattleAnimArgs[5];
gTasks[taskId].data[7] = gBattleAnimArgs[6];
}
++gTasks[taskId].data[0];
attackerBattler = gBattleAnimAttacker;
targetBattler = gBattleAnimTarget;
if (gTasks[taskId].data[2] & 0x100)
selectedPalettes = 0x0000FFFF;
if (gTasks[taskId].data[2] & 0x1)
{
paletteIndex = IndexOfSpritePaletteTag(gSprites[gHealthboxSpriteIds[attackerBattler]].template->paletteTag);
selectedPalettes |= (1 << paletteIndex) << 16;
}
if (gTasks[taskId].data[3] & 0x100)
selectedPalettes |= (1 << attackerBattler) << 16;
if (gTasks[taskId].data[4] & 0x100)
selectedPalettes |= (1 << targetBattler) << 16;
TintPlttBuffer(selectedPalettes, gTasks[taskId].data[5], gTasks[taskId].data[6], gTasks[taskId].data[7]);
if (gTasks[taskId].data[0] == gTasks[taskId].data[1])
{
UnfadePlttBuffer(selectedPalettes);
DestroyAnimVisualTask(taskId);
}
}
static void sub_80BA27C(struct Sprite *sprite)
{
u16 var0;
sprite->invisible = TRUE;
sprite->data[0] = -gBattleAnimArgs[0];
sprite->data[1] = gBattleAnimArgs[1];
sprite->data[2] = gBattleAnimArgs[1];
sprite->data[3] = gBattleAnimArgs[2];
switch (gBattleAnimArgs[3])
{
case 0:
StoreSpriteCallbackInData6(sprite, (void *)&gBattle_BG3_X);
break;
case 1:
StoreSpriteCallbackInData6(sprite, (void *)&gBattle_BG3_Y);
break;
case 2:
StoreSpriteCallbackInData6(sprite, (void *)&gSpriteCoordOffsetX);
break;
default:
StoreSpriteCallbackInData6(sprite, (void *)&gSpriteCoordOffsetY);
break;
}
sprite->data[4] = *(u16 *)(sprite->data[6] | (sprite->data[7] << 16));
sprite->data[5] = gBattleAnimArgs[3];
var0 = sprite->data[5] - 2;
if (var0 < 2)
sub_80BA3CC();
sprite->callback = sub_80BA320;
}
static void sub_80BA320(struct Sprite *sprite)
{
u8 i;
u16 var0;
if (sprite->data[3] > 0)
{
--sprite->data[3];
if (sprite->data[1] > 0)
{
--sprite->data[1];
}
else
{
sprite->data[1] = sprite->data[2];
*(u16 *)(sprite->data[6] | (sprite->data[7] << 16)) += sprite->data[0];
sprite->data[0] = -sprite->data[0];
}
}
else
{
*(u16 *)(sprite->data[6] | (sprite->data[7] << 16)) = sprite->data[4];
var0 = sprite->data[5] - 2;
if (var0 < 2)
for (i = 0; i < gBattlersCount; ++i)
gSprites[gBattlerSpriteIds[i]].coordOffsetEnabled = 0;
DestroyAnimSprite(sprite);
}
}
static void sub_80BA3CC(void)
{
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = 0;
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = 0;
if (gBattleAnimArgs[4] == 2)
{
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = 1;
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = 1;
}
else
{
if (gBattleAnimArgs[4] == 0)
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].coordOffsetEnabled = 1;
else
gSprites[gBattlerSpriteIds[gBattleAnimTarget]].coordOffsetEnabled = 1;
}
}
void sub_80BA47C(u8 taskId)
{
gTasks[taskId].data[0] = gBattleAnimArgs[0];
gTasks[taskId].data[1] = gBattleAnimArgs[1];
gTasks[taskId].data[2] = gBattleAnimArgs[2];
gTasks[taskId].data[3] = gBattleAnimArgs[3];
gTasks[taskId].data[8] = gBattleAnimArgs[3];
gBattle_BG3_X = gBattleAnimArgs[0];
gBattle_BG3_Y = gBattleAnimArgs[1];
gTasks[taskId].func = sub_80BA4D0;
gTasks[taskId].func(taskId);
}
static void sub_80BA4D0(u8 taskId)
{
if (gTasks[taskId].data[3] == 0)
{
if (gBattle_BG3_X == gTasks[taskId].data[0])
gBattle_BG3_X = -gTasks[taskId].data[0];
else
gBattle_BG3_X = gTasks[taskId].data[0];
if (gBattle_BG3_Y == -gTasks[taskId].data[1])
gBattle_BG3_Y = 0;
else
gBattle_BG3_Y = -gTasks[taskId].data[1];
gTasks[taskId].data[3] = gTasks[taskId].data[8];
if (--gTasks[taskId].data[2] == 0)
{
gBattle_BG3_X = 0;
gBattle_BG3_Y = 0;
DestroyAnimVisualTask(taskId);
}
}
else
{
--gTasks[taskId].data[3];
}
}
static void sub_80BA560(struct Sprite *sprite)
{
StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]);
if (gBattleAnimArgs[2] == 0)
InitSpritePosToAnimAttacker(sprite, 1);
else
InitSpritePosToAnimTarget(sprite, TRUE);
sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
static void sub_80BA5A8(struct Sprite *sprite)
{
StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]);
if (gBattleAnimArgs[2] == 0)
InitSpritePosToAnimAttacker(sprite, 1);
else
InitSpritePosToAnimTarget(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[4];
sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
StoreSpriteCallbackInData6(sprite, sub_80B1D3C);
}
static void sub_80BA5F8(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER && !IsContest())
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
sub_80BA560(sprite);
}
static void sub_80BA630(struct Sprite *sprite)
{
if (gBattleAnimArgs[1] == -1)
gBattleAnimArgs[1] = Random() & 3;
StartSpriteAffineAnim(sprite, gBattleAnimArgs[1]);
if (gBattleAnimArgs[0] == 0)
InitSpritePosToAnimAttacker(sprite, 0);
else
InitSpritePosToAnimTarget(sprite, FALSE);
sprite->pos2.x += (Random() % 48) - 24;
sprite->pos2.y += (Random() % 24) - 12;
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
}
static void sub_80BA6C8(struct Sprite *sprite)
{
sprite->data[0] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
sprite->pos1.x = gSprites[sprite->data[0]].pos1.x + gSprites[sprite->data[0]].pos2.x;
sprite->pos1.y = gSprites[sprite->data[0]].pos1.y + gSprites[sprite->data[0]].pos2.y;
sprite->pos2.x = gBattleAnimArgs[1];
sprite->pos2.y = gBattleAnimArgs[2];
StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]);
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
}
static void sub_80BA738(struct Sprite *sprite)
{
if (gBattleAnimArgs[2] == 0)
InitSpritePosToAnimAttacker(sprite, 1);
else
InitSpritePosToAnimTarget(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[3];
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
sprite->callback = WaitAnimForDuration;
}
static void sub_80BA780(struct Sprite *sprite)
{
StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]);
if (gBattleAnimArgs[2] == 0)
InitSpritePosToAnimAttacker(sprite, 1);
else
InitSpritePosToAnimTarget(sprite, TRUE);
sprite->callback = sub_80BA7BC;
}
static void sub_80BA7BC(struct Sprite *sprite)
{
sprite->invisible ^= 1;
if (sprite->data[0]++ > 12)
DestroyAnimSprite(sprite);
}
-1
View File
@@ -13,7 +13,6 @@
#include "event_data.h"
#include "util.h"
#include "pokemon_storage_system.h"
#include "data.h"
#include "battle_gfx_sfx_util.h"
#include "battle_controllers.h"
#include "evolution_scene.h"
+1083
View File
File diff suppressed because it is too large Load Diff
+830
View File
@@ -0,0 +1,830 @@
#include "global.h"
#include "battle_anim.h"
#include "gpu_regs.h"
#include "graphics.h"
#include "palette.h"
#include "sound.h"
#include "task.h"
#include "trig.h"
#include "constants/songs.h"
static void sub_80B4634(struct Sprite *sprite);
static void sub_80B46F8(struct Sprite *sprite);
static void AnimDirtParticleAcrossScreen(struct Sprite *sprite);
static void AnimRaiseSprite(struct Sprite *sprite);
static void sub_80B4D00(u8 taskId);
static void sub_80B4F78(struct Sprite *sprite);
static void sub_80B4FE4(struct Sprite *sprite);
static void sub_80B5074(struct Sprite *sprite);
static void sub_80B50A0(struct Sprite *sprite);
static void sub_80B477C(struct Sprite *sprite);
static void sub_80B46B4(struct Sprite *sprite);
static void sub_80B47C4(struct Sprite *sprite);
static void sub_80B490C(u8 taskId);
static void sub_80B4E70(struct Task *task);
static u8 sub_80B4FB8(void);
static void sub_80B5024(struct Sprite *sprite);
static void sub_80B50F8(struct Sprite *sprite);
static const union AnimCmd gUnknown_83E7390[] =
{
ANIMCMD_FRAME(32, 1),
ANIMCMD_END,
};
static const union AnimCmd gUnknown_83E7398[] =
{
ANIMCMD_FRAME(48, 1),
ANIMCMD_END,
};
static const union AnimCmd gUnknown_83E73A0[] =
{
ANIMCMD_FRAME(64, 1),
ANIMCMD_END,
};
static const union AnimCmd *const gUnknown_83E73A8[] =
{
gUnknown_83E7390,
gUnknown_83E7398,
gUnknown_83E73A0,
};
const struct SpriteTemplate gUnknown_83E73B4 =
{
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_83AC9D8,
.anims = gUnknown_83E73A8,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80B4634,
};
const struct SpriteTemplate gUnknown_83E73CC =
{
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_83AC9D8,
.anims = gUnknown_83E73A8,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80B46F8,
};
const struct SpriteTemplate gUnknown_83E73E4 =
{
.tileTag = ANIM_TAG_MUD_SAND,
.paletteTag = ANIM_TAG_MUD_SAND,
.oam = &gOamData_83AC9C8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80B477C,
};
static const union AffineAnimCmd gUnknown_83E73FC[] =
{
AFFINEANIMCMD_FRAME(0xC0, 0xC0, 0, 0),
AFFINEANIMCMD_FRAME(0x2, 0xFFFD, 0, 5),
AFFINEANIMCMD_FRAME(0xFFFE, 0x3, 0, 5),
AFFINEANIMCMD_JUMP(1),
};
static const union AffineAnimCmd *const gUnknown_83E741C[] =
{
gUnknown_83E73FC,
};
const struct SpriteTemplate gUnknown_83E7420 =
{
.tileTag = ANIM_TAG_WATER_ORB,
.paletteTag = ANIM_TAG_WATER_ORB,
.oam = &gOamData_83ACB50,
.anims = gUnknown_83E5958,
.images = NULL,
.affineAnims = gUnknown_83E741C,
.callback = sub_80B477C,
};
const struct SpriteTemplate gUnknown_83E7438 =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
.oam = &gOamData_83AC9D8,
.anims = gUnknown_83E5D48,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80B477C,
};
const struct SpriteTemplate gUnknown_83E7450 =
{
.tileTag = ANIM_TAG_FLYING_DIRT,
.paletteTag = ANIM_TAG_FLYING_DIRT,
.oam = &gOamData_83AC9F8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimDirtParticleAcrossScreen,
};
static const struct Subsprite gUnknown_83E7468[] =
{
{
.x = -16,
.y = 0,
.shape = ST_OAM_H_RECTANGLE,
.size = 2,
.tileOffset = 0,
.priority = 1,
},
{
.x = 16,
.y = 0,
.shape = ST_OAM_H_RECTANGLE,
.size = 2,
.tileOffset = 8,
.priority = 1,
},
};
static const struct SubspriteTable gUnknown_83E7470[] =
{
{ ARRAY_COUNT(gUnknown_83E7468), gUnknown_83E7468 },
};
static const union AnimCmd gUnknown_83E7478[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END,
};
static const union AnimCmd gUnknown_83E7480[] =
{
ANIMCMD_FRAME(16, 1),
ANIMCMD_END,
};
static const union AnimCmd gUnknown_83E7488[] =
{
ANIMCMD_FRAME(32, 1),
ANIMCMD_END,
};
static const union AnimCmd gUnknown_83E7490[] =
{
ANIMCMD_FRAME(48, 1),
ANIMCMD_END,
};
static const union AnimCmd gUnknown_83E7498[] =
{
ANIMCMD_FRAME(64, 1),
ANIMCMD_END,
};
static const union AnimCmd gUnknown_83E74A0[] =
{
ANIMCMD_FRAME(80, 1),
ANIMCMD_END,
};
static const union AnimCmd *const gUnknown_83E74A8[] =
{
gUnknown_83E7478,
gUnknown_83E7480,
};
static const union AnimCmd *const gUnknown_83E74B0[] =
{
gUnknown_83E7488,
gUnknown_83E7490,
};
static const union AnimCmd *const gUnknown_83E74B8[] =
{
gUnknown_83E7498,
gUnknown_83E74A0,
};
const struct SpriteTemplate gUnknown_83E74C0 =
{
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_83AC9D8,
.anims = gUnknown_83E74A8,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimRaiseSprite,
};
const struct SpriteTemplate gUnknown_83E74D8 =
{
.tileTag = ANIM_TAG_MUD_SAND,
.paletteTag = ANIM_TAG_MUD_SAND,
.oam = &gOamData_83AC9C8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80B4F78,
};
const struct SpriteTemplate gUnknown_83E74F0 =
{
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_83AC9D8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80B4F78,
};
const struct SpriteTemplate gUnknown_83E7508 =
{
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_83AC9D8,
.anims = gUnknown_83E74A8,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_80B4FE4,
};
static const union AffineAnimCmd gUnknown_83E7520[] =
{
AFFINEANIMCMD_FRAME(0x0, 0x0, -5, 5),
AFFINEANIMCMD_JUMP(0),
};
static const union AffineAnimCmd gUnknown_83E7530[] =
{
AFFINEANIMCMD_FRAME(0x0, 0x0, 5, 5),
AFFINEANIMCMD_JUMP(0),
};
static const union AffineAnimCmd *const gUnknown_83E7540[] =
{
gUnknown_83E7520,
gUnknown_83E7530,
};
const struct SpriteTemplate gUnknown_83E7548 =
{
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_83ACA38,
.anims = gUnknown_83E74A8,
.images = NULL,
.affineAnims = gUnknown_83E7540,
.callback = sub_80B5074,
};
const struct SpriteTemplate gUnknown_83E7560 =
{
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_83ACA38,
.anims = gUnknown_83E74A8,
.images = NULL,
.affineAnims = gUnknown_83E7540,
.callback = sub_80B50A0,
};
const struct SpriteTemplate gUnknown_83E7578 =
{
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_83AC9D8,
.anims = gUnknown_83E74B8,
.images = NULL,
.affineAnims = gUnknown_83E7540,
.callback = AnimMoveTwisterParticle,
};
const struct SpriteTemplate gUnknown_83E7590 =
{
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
.oam = &gOamData_83ACA38,
.anims = gUnknown_83E74B0,
.images = NULL,
.affineAnims = gUnknown_83E7540,
.callback = sub_8077350,
};
static void sub_80B4634(struct Sprite *sprite)
{
if (gBattleAnimArgs[3] != 0)
SetAverageBattlerPositions(gBattleAnimTarget, 0, &sprite->pos1.x, &sprite->pos1.y);
sprite->pos1.x += gBattleAnimArgs[0];
sprite->pos1.y += 14;
StartSpriteAnim(sprite, gBattleAnimArgs[1]);
AnimateSprite(sprite);
sprite->data[0] = 0;
sprite->data[1] = 0;
sprite->data[2] = 4;
sprite->data[3] = 16;
sprite->data[4] = -70;
sprite->data[5] = gBattleAnimArgs[2];
StoreSpriteCallbackInData6(sprite, sub_80B46B4);
sprite->callback = TranslateSpriteInEllipseOverDuration;
sprite->callback(sprite);
}
static void sub_80B46B4(struct Sprite *sprite)
{
sprite->pos1.x += sprite->data[5];
sprite->data[0] = 192;
sprite->data[1] = sprite->data[5];
sprite->data[2] = 4;
sprite->data[3] = 32;
sprite->data[4] = -24;
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
sprite->callback = TranslateSpriteInEllipseOverDuration;
sprite->callback(sprite);
}
static void sub_80B46F8(struct Sprite *sprite)
{
StartSpriteAnim(sprite, gBattleAnimArgs[5]);
AnimateSprite(sprite);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
sprite->pos1.x -= gBattleAnimArgs[0];
else
sprite->pos1.x += gBattleAnimArgs[0];
sprite->pos1.y += gBattleAnimArgs[1];
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[1] = sprite->pos1.x;
sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2];
sprite->data[3] = sprite->pos1.y;
sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[3];
InitSpriteDataForLinearTranslation(sprite);
sprite->data[3] = 0;
sprite->data[4] = 0;
sprite->callback = TranslateSpriteLinearFixedPoint;
StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
}
static void sub_80B477C(struct Sprite *sprite)
{
if (gBattleAnimArgs[6] == 0)
InitSpritePosToAnimAttacker(sprite, 0);
else
InitSpritePosToAnimTarget(sprite, FALSE);
sprite->data[0] = gBattleAnimArgs[3];
sprite->data[1] = gBattleAnimArgs[2];
sprite->data[2] = gBattleAnimArgs[4];
sprite->data[3] = gBattleAnimArgs[5];
sprite->callback = sub_80B47C4;
}
static void sub_80B47C4(struct Sprite *sprite)
{
sprite->data[4] += sprite->data[1];
sprite->pos2.y = -(sprite->data[4] >> 8);
sprite->pos2.x = Sin(sprite->data[5], sprite->data[3]);
sprite->data[5] = (sprite->data[5] + sprite->data[2]) & 0xFF;
if (--sprite->data[0] == -1)
{
DestroyAnimSprite(sprite);
}
}
void AnimTask_LoadSandstormBackground(u8 taskId)
{
s32 var0;
struct BattleAnimBgData animBg;
var0 = 0;
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0);
if (!IsContest())
SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1);
gBattle_BG1_X = 0;
gBattle_BG1_Y = 0;
SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
sub_80752A0(&animBg);
AnimLoadCompressedBgTilemap(animBg.bgId, gFile_graphics_battle_anims_backgrounds_sandstorm_brew_tilemap);
AnimLoadCompressedBgGfx(animBg.bgId, gFile_graphics_battle_anims_backgrounds_sandstorm_brew_sheet, animBg.tilesOffset);
LoadCompressedPalette(gBattleAnimSpritePal_FlyingDirt, animBg.paletteId * 16, 32);
if (IsContest())
sub_80730C0(animBg.paletteId, animBg.bgTilemap, 0, 0);
if (gBattleAnimArgs[0] && GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
var0 = 1;
gTasks[taskId].data[0] = var0;
gTasks[taskId].func = sub_80B490C;
}
static void sub_80B490C(u8 taskId)
{
struct BattleAnimBgData animBg;
if (gTasks[taskId].data[0] == 0)
gBattle_BG1_X += -6;
else
gBattle_BG1_X += 6;
gBattle_BG1_Y += -1;
switch (gTasks[taskId].data[12])
{
case 0:
if (++gTasks[taskId].data[10] == 4)
{
gTasks[taskId].data[10] = 0;
++gTasks[taskId].data[11];
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
if (gTasks[taskId].data[11] == 7)
{
++gTasks[taskId].data[12];
gTasks[taskId].data[11] = 0;
}
}
break;
case 1:
if (++gTasks[taskId].data[11] == 101)
{
gTasks[taskId].data[11] = 7;
++gTasks[taskId].data[12];
}
break;
case 2:
if (++gTasks[taskId].data[10] == 4)
{
gTasks[taskId].data[10] = 0;
--gTasks[taskId].data[11];
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
if (gTasks[taskId].data[11] == 0)
{
++gTasks[taskId].data[12];
gTasks[taskId].data[11] = 0;
}
}
break;
case 3:
sub_80752A0(&animBg);
sub_8075358(animBg.bgId);
++gTasks[taskId].data[12];
break;
case 4:
if (!IsContest())
SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
gBattle_BG1_X = 0;
gBattle_BG1_Y = 0;
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
DestroyAnimVisualTask(taskId);
break;
}
}
// Animates the sprites that fly diagonally across the screen
// in Sandstorm and Heat Wave.
// arg 0: initial y pixel offset
// arg 1: projectile speed
// arg 2: y pixel drop
// arg 3: ??? unknown (possibly a color bit)
static void AnimDirtParticleAcrossScreen(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
{
if (gBattleAnimArgs[3] != 0 && GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
{
sprite->pos1.x = 304;
gBattleAnimArgs[1] = -gBattleAnimArgs[1];
sprite->data[5] = 1;
sprite->oam.matrixNum = ST_OAM_HFLIP;
}
else
{
sprite->pos1.x = -64;
}
sprite->pos1.y = gBattleAnimArgs[0];
SetSubspriteTables(sprite, gUnknown_83E7470);
sprite->data[1] = gBattleAnimArgs[1];
sprite->data[2] = gBattleAnimArgs[2];
++sprite->data[0];
}
else
{
sprite->data[3] += sprite->data[1];
sprite->data[4] += sprite->data[2];
sprite->pos2.x += (sprite->data[3] >> 8);
sprite->pos2.y += (sprite->data[4] >> 8);
sprite->data[3] &= 0xFF;
sprite->data[4] &= 0xFF;
if (sprite->data[5] == 0)
{
if (sprite->pos1.x + sprite->pos2.x > 272)
{
sprite->callback = DestroyAnimSprite;
}
}
else if (sprite->pos1.x + sprite->pos2.x < -32)
{
sprite->callback = DestroyAnimSprite;
}
}
}
// Animates the rising rocks in Ancient Power.
// arg 0: initial x pixel offset
// arg 1: initial y pixel offset
// arg 2: terminal y offset
// arg 3: duration
// arg 4: sprite size [1,5]
static void AnimRaiseSprite(struct Sprite *sprite)
{
StartSpriteAnim(sprite, gBattleAnimArgs[4]);
InitSpritePosToAnimAttacker(sprite, 0);
sprite->data[0] = gBattleAnimArgs[3];
sprite->data[2] = sprite->pos1.x;
sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[2];
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
void sub_80B4BD0(u8 taskId)
{
u16 var0, var1, var2, var3;
u8 var4;
s32 var5;
s16 pan1, pan2;
struct Task *task;
task = &gTasks[taskId];
var0 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
var1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 24;
var2 = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
var3 = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 24;
if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget)
var3 = var1;
var4 = sub_80B4FB8();
if (var4 == 1)
task->data[8] = 32;
else
task->data[8] = 48 - (var4 * 8);
task->data[0] = 0;
task->data[11] = 0;
task->data[9] = 0;
task->data[12] = 1;
var5 = task->data[8];
if (var5 < 0)
var5 += 7;
task->data[10] = (var5 >> 3) - 1;
task->data[2] = var0 * 8;
task->data[3] = var1 * 8;
task->data[4] = ((var2 - var0) * 8) / task->data[8];
task->data[5] = ((var3 - var1) * 8) / task->data[8];
task->data[6] = 0;
task->data[7] = 0;
pan1 = BattleAnimAdjustPanning(PAN_SIDE_PLAYER);
pan2 = BattleAnimAdjustPanning(PAN_SIDE_OPPONENT);
task->data[13] = pan1;
task->data[14] = (pan2 - pan1) / task->data[8];
task->data[1] = var4;
task->data[15] = GetAnimBattlerSpriteId(0);
task->func = sub_80B4D00;
}
static void sub_80B4D00(u8 taskId)
{
struct Task *task;
task = &gTasks[taskId];
switch (task->data[0])
{
case 0:
task->data[6] -= task->data[4];
task->data[7] -= task->data[5];
gSprites[task->data[15]].pos2.x = task->data[6] >> 3;
gSprites[task->data[15]].pos2.y = task->data[7] >> 3;
if (++task->data[9] == 10)
{
task->data[11] = 20;
++task->data[0];
}
PlaySE12WithPanning(SE_W029, task->data[13]);
break;
case 1:
if (--task->data[11] == 0)
++task->data[0];
break;
case 2:
if (--task->data[9] != 0)
{
task->data[6] += task->data[4];
task->data[7] += task->data[5];
}
else
{
task->data[6] = 0;
task->data[7] = 0;
++task->data[0];
}
gSprites[task->data[15]].pos2.x = task->data[6] >> 3;
gSprites[task->data[15]].pos2.y = task->data[7] >> 3;
break;
case 3:
task->data[2] += task->data[4];
task->data[3] += task->data[5];
if (++task->data[9] >= task->data[10])
{
task->data[9] = 0;
sub_80B4E70(task);
task->data[13] += task->data[14];
PlaySE12WithPanning(SE_W091, task->data[13]);
}
if (--task->data[8] == 0)
{
++task->data[0];
}
break;
case 4:
if (task->data[11] == 0)
DestroyAnimVisualTask(taskId);
break;
}
}
static void sub_80B4E70(struct Task *task)
{
const struct SpriteTemplate *spriteTemplate;
s32 var0;
u16 x, y;
u8 spriteId;
switch (task->data[1])
{
case 1:
spriteTemplate = &gUnknown_83E74D8;
var0 = 0;
break;
case 2:
case 3:
spriteTemplate = &gUnknown_83E74F0;
var0 = 80;
break;
case 4:
spriteTemplate = &gUnknown_83E74F0;
var0 = 64;
break;
case 5:
spriteTemplate = &gUnknown_83E74F0;
var0 = 48;
break;
default:
return;
}
x = task->data[2] >> 3;
y = task->data[3] >> 3;
x += (task->data[12] * 4);
spriteId = CreateSprite(spriteTemplate, x, y, 35);
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].data[0] = 18;
gSprites[spriteId].data[2] = ((task->data[12] * 20) + x) + (task->data[1] * 3);
gSprites[spriteId].data[4] = y;
gSprites[spriteId].data[5] = -16 - (task->data[1] * 2);
gSprites[spriteId].oam.tileNum += var0;
InitAnimArcTranslation(&gSprites[spriteId]);
++task->data[11];
}
task->data[12] *= -1;
}
static void sub_80B4F78(struct Sprite *sprite)
{
if (TranslateAnimHorizontalArc(sprite))
{
u8 taskId = FindTaskIdByFunc(sub_80B4D00);
if (taskId != TASK_NONE)
--gTasks[taskId].data[11];
DestroySprite(sprite);
}
}
static u8 sub_80B4FB8(void)
{
u8 retVal = gAnimDisableStructPtr->rolloutTimerStartValue - gAnimDisableStructPtr->rolloutTimer;
u8 var0 = retVal - 1;
if (var0 > 4)
retVal = 1;
return retVal;
}
static void sub_80B4FE4(struct Sprite *sprite)
{
StartSpriteAnim(sprite, gBattleAnimArgs[4]);
sprite->pos2.x = gBattleAnimArgs[0];
sprite->data[2] = gBattleAnimArgs[1];
sprite->data[3] -= gBattleAnimArgs[2];
sprite->data[0] = 3;
sprite->data[1] = gBattleAnimArgs[3];
sprite->callback = sub_80B5024;
sprite->invisible = TRUE;
}
static void sub_80B5024(struct Sprite *sprite)
{
sprite->invisible = FALSE;
if (sprite->data[3] != 0)
{
sprite->pos2.y = sprite->data[2] + sprite->data[3];
sprite->data[3] += sprite->data[0];
++sprite->data[0];
if (sprite->data[3] > 0)
{
sprite->data[3] = 0;
}
}
else if (--sprite->data[1] == 0)
{
DestroyAnimSprite(sprite);
}
}
static void sub_80B5074(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
StartSpriteAffineAnim(sprite, 1);
TranslateAnimSpriteToTargetMonLocation(sprite);
}
static void sub_80B50A0(struct Sprite *sprite)
{
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
sprite->pos1.x += gBattleAnimArgs[0];
sprite->pos1.y += gBattleAnimArgs[1];
sprite->data[1] = gBattleAnimArgs[0];
sprite->data[2] = gBattleAnimArgs[1];
sprite->data[5] = gBattleAnimArgs[2];
StartSpriteAnim(sprite, gBattleAnimArgs[3]);
sprite->callback = sub_80B50F8;
}
static void sub_80B50F8(struct Sprite *sprite)
{
sprite->data[0] += 8;
sprite->data[3] += sprite->data[1];
sprite->data[4] += sprite->data[2];
sprite->pos2.x += sprite->data[3] / 40;
sprite->pos2.y -= Sin(sprite->data[0], sprite->data[5]);
if (sprite->data[0] > 140)
DestroyAnimSprite(sprite);
}
void AnimTask_GetSeismicTossDamageLevel(u8 taskId)
{
if (gAnimMoveDmg < 33)
gBattleAnimArgs[7] = 0;
if ((u32)gAnimMoveDmg - 33 < 33)
gBattleAnimArgs[7] = 1;
if (gAnimMoveDmg > 65)
gBattleAnimArgs[7] = 2;
DestroyAnimVisualTask(taskId);
}
void sub_80B5188(u8 taskId)
{
if (gTasks[taskId].data[0] == 0)
{
sub_8075458(0);
gTasks[taskId].data[1] = 200;
}
gBattle_BG3_Y += gTasks[taskId].data[1] / 10;
gTasks[taskId].data[1] -= 3;
if (gTasks[taskId].data[0] == 120)
{
sub_8075458(1);
DestroyAnimVisualTask(taskId);
}
++gTasks[taskId].data[0];
}
void sub_80B51EC(u8 taskId)
{
if (gTasks[taskId].data[0] == 0)
{
sub_8075458(0);
++gTasks[taskId].data[0];
gTasks[taskId].data[2] = gBattle_BG3_Y;
}
gTasks[taskId].data[1] += 80;
gTasks[taskId].data[1] &= 0xFF;
gBattle_BG3_Y = gTasks[taskId].data[2] + Cos(4, gTasks[taskId].data[1]);
if (gBattleAnimArgs[7] == 0xFFF)
{
gBattle_BG3_Y = 0;
sub_8075458(1);
DestroyAnimVisualTask(taskId);
}
}
+9 -16
View File
@@ -44,10 +44,10 @@ gBattle_BG3_X: @ 2022980
gBattle_BG3_Y: @ 2022982
.space 0x2
gUnknown_2022984: @ 2022984
gBattle_WIN0H: @ 2022984
.space 0x2
gUnknown_2022986: @ 2022986
gBattle_WIN0V: @ 2022986
.space 0x2
gUnknown_2022988: @ 2022988
@@ -621,7 +621,7 @@ gUnknown_2037EE0: @ 2037EE0
gAnimScriptActive: @ 2037EE1
.space 0x1
gUnknown_2037EE2: @ 2037EE2
gAnimVisualTaskCount: @ 2037EE2
.space 0x1
gUnknown_2037EE3: @ 2037EE3
@@ -669,16 +669,13 @@ gBattleAnimAttacker: @ 2037F1A
gBattleAnimTarget: @ 2037F1B
.space 0x1
gUnknown_2037F1C: @ 2037F1C
gAnimBattlerSpecies: @ 2037F1C
.space 0x8
gUnknown_2037F24: @ 2037F24
.space 0x4
gUnknown_2037F28: @ 2037F28
.space 0x8
.align 2
.include "src/battle_anim_mons.o"
.include "src/title_screen.o"
.align 2
@@ -881,15 +878,11 @@ gUnknown_203998C: @ 203998C
gUnknown_203999C: @ 203999C
.space 0x8
gUnknown_20399A4: @ 20399A4
.space 0x10
gUnknown_20399B4: @ 20399B4
.space 0x4
gUnknown_20399B8: @ 20399B8
.space 0x4
.include "src/dragon.o"
.include "src/battle_anim_utility_funcs.o"
.include "src/battle_intro.o"
.align 2
gUnknown_20399BC: @ 20399BC
.space 0x4