summaryrefslogtreecommitdiff
path: root/src/battle/anim
diff options
context:
space:
mode:
Diffstat (limited to 'src/battle/anim')
-rw-r--r--src/battle/anim/dark.c254
-rw-r--r--src/battle/anim/flying.c208
-rw-r--r--src/battle/anim/ice.c939
-rw-r--r--src/battle/anim/psychic.c135
-rw-r--r--src/battle/anim/water.c1043
5 files changed, 327 insertions, 2252 deletions
diff --git a/src/battle/anim/dark.c b/src/battle/anim/dark.c
index d3d992bda..08aafe195 100644
--- a/src/battle/anim/dark.c
+++ b/src/battle/anim/dark.c
@@ -730,215 +730,55 @@ static void sub_80E0620(u8 taskId)
}
}
-// static void sub_80E079C(struct Task *task)
-// {
-// int var0, var1;
-// s16 var2;
-// s16 i, j;
-
-// var2 = task->data[5] - task->data[4];
-// if (var2 != 0)
-// {
-// var0 = task->data[13] / var2;
-// var1 = task->data[6];
-
-// 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)
-// {
-// gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = (var1 - i) + task->data[10];
-// }
-
-// var1 += var0;
-// }
-
-// for (j = i; j < task->data[7]; j++)
-// {
-// if (j >= 0)
-// {
-// gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][j] = (task->data[10] + 159) - j;
-// }
-// }
-// }
-// else
-// {
-// for (i = 0; i < 112; i++)
-// {
-// gScanlineEffectRegBuffers[0][i] = task->data[10] + 159 - i;
-// gScanlineEffectRegBuffers[1][i] = task->data[10] + 159 - i;
-// }
-// }
-// }
-
-NAKED
static void sub_80E079C(struct Task *task)
{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- adds r6, r0, 0\n\
- ldrh r0, [r6, 0x12]\n\
- ldrh r4, [r6, 0x10]\n\
- subs r0, r4\n\
- lsls r0, 16\n\
- asrs r1, r0, 16\n\
- cmp r1, 0\n\
- beq _080E0890\n\
- movs r2, 0x22\n\
- ldrsh r0, [r6, r2]\n\
- bl __divsi3\n\
- mov r8, r0\n\
- movs r3, 0x14\n\
- ldrsh r0, [r6, r3]\n\
- lsls r5, r0, 8\n\
- lsls r0, r4, 16\n\
- movs r4, 0\n\
- cmp r0, 0\n\
- ble _080E07FC\n\
- ldr r0, _080E0888 @ =gScanlineEffectRegBuffers\n\
- mov r12, r0\n\
- ldr r7, _080E088C @ =gScanlineEffect\n\
-_080E07D0:\n\
- lsls r2, r4, 16\n\
- asrs r2, 16\n\
- lsls r3, r2, 1\n\
- ldrb r1, [r7, 0x14]\n\
- lsls r0, r1, 4\n\
- subs r0, r1\n\
- lsls r0, 7\n\
- adds r3, r0\n\
- add r3, r12\n\
- adds r1, r2, 0\n\
- subs r1, 0x9F\n\
- ldrh r0, [r6, 0x1C]\n\
- subs r0, r1\n\
- strh r0, [r3]\n\
- adds r2, 0x1\n\
- lsls r2, 16\n\
- lsrs r4, r2, 16\n\
- asrs r2, 16\n\
- movs r1, 0x10\n\
- ldrsh r0, [r6, r1]\n\
- cmp r2, r0\n\
- blt _080E07D0\n\
-_080E07FC:\n\
- ldrh r4, [r6, 0x10]\n\
- lsls r3, r4, 16\n\
- asrs r1, r3, 16\n\
- movs r2, 0x12\n\
- ldrsh r0, [r6, r2]\n\
- cmp r1, r0\n\
- bgt _080E0846\n\
- ldr r0, _080E0888 @ =gScanlineEffectRegBuffers\n\
- mov r12, r0\n\
- ldr r7, _080E088C @ =gScanlineEffect\n\
-_080E0810:\n\
- asrs r4, r3, 16\n\
- cmp r4, 0\n\
- blt _080E0832\n\
- asrs r1, r5, 8\n\
- subs r1, r4\n\
- lsls r3, r4, 1\n\
- ldrb r2, [r7, 0x14]\n\
- lsls r0, r2, 4\n\
- subs r0, r2\n\
- lsls r0, 7\n\
- adds r3, r0\n\
- add r3, r12\n\
- lsls r1, 16\n\
- asrs r1, 16\n\
- ldrh r2, [r6, 0x1C]\n\
- adds r1, r2\n\
- strh r1, [r3]\n\
-_080E0832:\n\
- add r5, r8\n\
- adds r0, r4, 0x1\n\
- lsls r0, 16\n\
- lsrs r4, r0, 16\n\
- lsls r3, r4, 16\n\
- asrs r1, r3, 16\n\
- movs r2, 0x12\n\
- ldrsh r0, [r6, r2]\n\
- cmp r1, r0\n\
- ble _080E0810\n\
-_080E0846:\n\
- movs r3, 0x1C\n\
- ldrsh r0, [r6, r3]\n\
- adds r0, 0x9F\n\
- lsls r2, r4, 16\n\
- asrs r1, r2, 16\n\
- subs r5, r0, r1\n\
- movs r3, 0x16\n\
- ldrsh r0, [r6, r3]\n\
- cmp r1, r0\n\
- bge _080E08BE\n\
- ldr r7, _080E0888 @ =gScanlineEffectRegBuffers\n\
- ldr r4, _080E088C @ =gScanlineEffect\n\
-_080E085E:\n\
- asrs r3, r2, 16\n\
- cmp r3, 0\n\
- blt _080E0876\n\
- lsls r2, r3, 1\n\
- ldrb r1, [r4, 0x14]\n\
- lsls r0, r1, 4\n\
- subs r0, r1\n\
- lsls r0, 7\n\
- adds r2, r0\n\
- adds r2, r7\n\
- strh r5, [r2]\n\
- subs r5, 0x1\n\
-_080E0876:\n\
- adds r0, r3, 0x1\n\
- lsls r2, r0, 16\n\
- asrs r1, r2, 16\n\
- movs r3, 0x16\n\
- ldrsh r0, [r6, r3]\n\
- cmp r1, r0\n\
- blt _080E085E\n\
- b _080E08BE\n\
- .align 2, 0\n\
-_080E0888: .4byte gScanlineEffectRegBuffers\n\
-_080E088C: .4byte gScanlineEffect\n\
-_080E0890:\n\
- movs r1, 0x1C\n\
- ldrsh r0, [r6, r1]\n\
- adds r5, r0, 0\n\
- adds r5, 0x9F\n\
- movs r4, 0\n\
- ldr r3, _080E08C8 @ =gScanlineEffectRegBuffers\n\
- movs r2, 0xF0\n\
- lsls r2, 3\n\
- adds r6, r3, r2\n\
-_080E08A2:\n\
- lsls r0, r4, 16\n\
- asrs r0, 16\n\
- lsls r2, r0, 1\n\
- adds r1, r2, r3\n\
- strh r5, [r1]\n\
- adds r2, r6\n\
- strh r5, [r2]\n\
- subs r5, 0x1\n\
- adds r0, 0x1\n\
- lsls r0, 16\n\
- lsrs r4, r0, 16\n\
- asrs r0, 16\n\
- cmp r0, 0x6F\n\
- ble _080E08A2\n\
-_080E08BE:\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080E08C8: .4byte gScanlineEffectRegBuffers\n\
- .syntax divided\n");
+ int var0, var1;
+ s16 var2;
+ s16 i;
+ int var4;
+
+ 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 = i; i < task->data[7]; i++)
+ {
+ if (i >= 0)
+ {
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = var4;
+ 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_80E08CC(u8 priority)
diff --git a/src/battle/anim/flying.c b/src/battle/anim/flying.c
index 407c9a08f..64991d161 100644
--- a/src/battle/anim/flying.c
+++ b/src/battle/anim/flying.c
@@ -2330,195 +2330,59 @@ void sub_80DB330(struct Sprite *sprite)
}
}
-#ifdef NONMATCHING
void sub_80DB374(struct Sprite *sprite)
{
- // NONMATCHING - Functionally equivalent - slight register swap at end
-
u32 matrixNum;
- int t1, t3;
- s16 t2;
+ int t1, t2;
switch (sprite->data[0])
{
+ case 0:
+ if (!gBattleAnimArgs[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);
+ }
- case 0:
- if (!gBattleAnimArgs[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);
- }
-
- sprite->data[1] = 512;
+ sprite->data[1] = 512;
- sub_8078FDC(sprite, 0, 256, sprite->data[1], 0);
- ++sprite->data[0];
- break;
- case 1:
- if (sprite->data[2] <= 11)
- {
- sprite->data[1] -= 40;
- }
- else
- {
- sprite->data[1] += 40;
- }
+ sub_8078FDC(sprite, 0, 256, sprite->data[1], 0);
+ sprite->data[0]++;
+ break;
+ case 1:
+ if (sprite->data[2] <= 11)
+ sprite->data[1] -= 40;
+ else
+ sprite->data[1] += 40;
- ++sprite->data[2];
+ sprite->data[2]++;
- sub_8078FDC(sprite, 0, 256, sprite->data[1], 0);
+ sub_8078FDC(sprite, 0, 256, sprite->data[1], 0);
- matrixNum = sprite->oam.matrixNum;
+ matrixNum = sprite->oam.matrixNum;
- t1 = 15616;
- t2 = gOamMatrices[matrixNum].d;
- t3 = t1 / t2 + 1;
+ t1 = 15616;
+ t2 = t1 / gOamMatrices[matrixNum].d + 1;
- if (t3 > 128)
- {
- t3 = 128;
- }
+ if (t2 > 128)
+ t2 = 128;
- /* NONMATCHING
- * compiles to:
- * asr r0, r0, #0x1
- strh r0, [r5, #0x26]
- * needed:
- * asrs r1, r0, 1
- * strh r1, [r5, 0x26] */
- sprite->pos2.y = (64 - t3) / 2;
+ t2 = (64 - t2) / 2;
+ sprite->pos2.y = t2;
- if (sprite->data[2] == 24)
- {
- sub_8079098(sprite);
- DestroyAnimSprite(sprite);
- }
+ if (sprite->data[2] == 24)
+ {
+ sub_8079098(sprite);
+ DestroyAnimSprite(sprite);
+ }
+ break;
}
}
-#else
-NAKED
-void sub_80DB374(struct Sprite *sprite)
-{
- asm_unified("push {r4,r5,lr}\n\
- sub sp, 0x4\n\
- adds r5, r0, 0\n\
- movs r1, 0x2E\n\
- ldrsh r0, [r5, r1]\n\
- cmp r0, 0\n\
- beq _080DB388\n\
- cmp r0, 0x1\n\
- beq _080DB3E0\n\
- b _080DB44C\n\
-_080DB388:\n\
- ldr r0, _080DB398 @ =gBattleAnimArgs\n\
- movs r2, 0\n\
- ldrsh r0, [r0, r2]\n\
- cmp r0, 0\n\
- bne _080DB3A0\n\
- ldr r4, _080DB39C @ =gBattleAnimAttacker\n\
- b _080DB3A2\n\
- .align 2, 0\n\
-_080DB398: .4byte gBattleAnimArgs\n\
-_080DB39C: .4byte gBattleAnimAttacker\n\
-_080DB3A0:\n\
- ldr r4, _080DB3DC @ =gBattleAnimTarget\n\
-_080DB3A2:\n\
- ldrb r0, [r4]\n\
- movs r1, 0\n\
- bl GetBattlerSpriteCoord\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- strh r0, [r5, 0x20]\n\
- ldrb r0, [r4]\n\
- movs r1, 0x1\n\
- bl GetBattlerSpriteCoord\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- strh r0, [r5, 0x22]\n\
- movs r0, 0\n\
- movs r3, 0x80\n\
- lsls r3, 2\n\
- strh r3, [r5, 0x30]\n\
- movs r2, 0x80\n\
- lsls r2, 1\n\
- str r0, [sp]\n\
- adds r0, r5, 0\n\
- movs r1, 0\n\
- bl sub_8078FDC\n\
- ldrh r0, [r5, 0x2E]\n\
- adds r0, 0x1\n\
- strh r0, [r5, 0x2E]\n\
- b _080DB44C\n\
- .align 2, 0\n\
-_080DB3DC: .4byte gBattleAnimTarget\n\
-_080DB3E0:\n\
- movs r1, 0x32\n\
- ldrsh r0, [r5, r1]\n\
- cmp r0, 0xB\n\
- bgt _080DB3EE\n\
- ldrh r0, [r5, 0x30]\n\
- subs r0, 0x28\n\
- b _080DB3F2\n\
-_080DB3EE:\n\
- ldrh r0, [r5, 0x30]\n\
- adds r0, 0x28\n\
-_080DB3F2:\n\
- strh r0, [r5, 0x30]\n\
- ldrh r0, [r5, 0x32]\n\
- adds r0, 0x1\n\
- movs r1, 0\n\
- strh r0, [r5, 0x32]\n\
- movs r2, 0x80\n\
- lsls r2, 1\n\
- movs r0, 0x30\n\
- ldrsh r3, [r5, r0]\n\
- str r1, [sp]\n\
- adds r0, r5, 0\n\
- bl sub_8078FDC\n\
- ldrb r1, [r5, 0x3]\n\
- lsls r1, 26\n\
- lsrs r1, 27\n\
- movs r0, 0xF4\n\
- lsls r0, 6\n\
- ldr r2, _080DB454 @ =gOamMatrices\n\
- lsls r1, 3\n\
- adds r1, r2\n\
- movs r2, 0x6\n\
- ldrsh r1, [r1, r2]\n\
- bl __divsi3\n\
- adds r1, r0, 0x1\n\
- cmp r1, 0x80\n\
- ble _080DB42C\n\
- movs r1, 0x80\n\
-_080DB42C:\n\
- movs r0, 0x40\n\
- subs r0, r1\n\
- lsrs r1, r0, 31\n\
- adds r0, r1\n\
- asrs r1, r0, 1\n\
- strh r1, [r5, 0x26]\n\
- movs r1, 0x32\n\
- ldrsh r0, [r5, r1]\n\
- cmp r0, 0x18\n\
- bne _080DB44C\n\
- adds r0, r5, 0\n\
- bl sub_8079098\n\
- adds r0, r5, 0\n\
- bl DestroyAnimSprite\n\
-_080DB44C:\n\
- add sp, 0x4\n\
- pop {r4,r5}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080DB454: .4byte gOamMatrices\n");
-}
-#endif
void sub_80DB458(struct Sprite *sprite)
{
diff --git a/src/battle/anim/ice.c b/src/battle/anim/ice.c
index e41057d72..438c61f9f 100644
--- a/src/battle/anim/ice.c
+++ b/src/battle/anim/ice.c
@@ -26,6 +26,7 @@ extern struct INCBIN_U8 gBattleAnimFogTilemap;
extern struct INCBIN_U8 gWeatherFog1Tiles;
static void sub_80D7704(struct Sprite *sprite);
+static void sub_80D7888(struct Sprite *sprite);
static void AnimIcePunchSwirlingParticle(struct Sprite *sprite);
static void AnimIceBeamParticle(struct Sprite *sprite);
static void AnimIceEffectParticle(struct Sprite *sprite);
@@ -53,7 +54,15 @@ static void AnimIceBallParticle(struct Sprite *sprite);
static void AnimTask_Haze2(u8 taskId);
static void AnimTask_OverlayFogTiles(u8 taskId);
static void AnimTask_Hail2(u8 taskId);
-bool8 sub_80D8BA8(u8 a1, u8 a2, u8 a3, u8 a4);
+bool8 sub_80D8BA8(u8 hailStructId, u8 affineAnimNum, u8 taskId, u8 c);
+
+struct HailStruct
+{
+ s32 x:10;
+ s32 y:10;
+ s32 bPosition:8;
+ s32 unk3:4;
+};
const union AnimCmd gSpriteAnim_83D9B58[] =
{
@@ -374,18 +383,18 @@ const struct SpriteTemplate gPoisonGasCloudSpriteTemplate =
.callback = InitPoisonGasCloudAnim,
};
-const u8 gUnknown_083D9DC4[][4] =
-{
- {0x64, 0xE0, 0x01, 0x20},
- {0x55, 0xE0, 0x01, 0x00},
- {0xF2, 0xE0, 0x11, 0x10},
- {0x42, 0xE0, 0x21, 0x10},
- {0xB6, 0xE0, 0x31, 0x00},
- {0x3C, 0xE0, 0x01, 0x20},
- {0xD6, 0xE0, 0x11, 0x00},
- {0x71, 0xE0, 0x01, 0x10},
- {0xD2, 0xE0, 0x31, 0x10},
- {0x26, 0xE0, 0x21, 0x00},
+const struct HailStruct gUnknown_083D9DC4[] =
+{
+ {.x = 100, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 2},
+ {.x = 85, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 0},
+ {.x = 242, .y = 120, .bPosition = B_POSITION_OPPONENT_LEFT, .unk3 = 1},
+ {.x = 66, .y = 120, .bPosition = B_POSITION_PLAYER_RIGHT, .unk3 = 1},
+ {.x = 182, .y = 120, .bPosition = B_POSITION_OPPONENT_RIGHT, .unk3 = 0},
+ {.x = 60, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 2},
+ {.x = 214, .y = 120, .bPosition = B_POSITION_OPPONENT_LEFT, .unk3 = 0},
+ {.x = 113, .y = 120, .bPosition = B_POSITION_PLAYER_LEFT, .unk3 = 1},
+ {.x = 210, .y = 120, .bPosition = B_POSITION_OPPONENT_RIGHT, .unk3 = 1},
+ {.x = 38, .y = 120, .bPosition = B_POSITION_PLAYER_RIGHT, .unk3 = 0},
};
const union AffineAnimCmd gSpriteAffineAnim_83D9DEC[] =
@@ -528,266 +537,46 @@ const struct SpriteTemplate gIceBallParticleSpriteTemplate =
.callback = InitIceBallParticle,
};
-// unknown - potentially used in weather ball
-// TODO: decompile function and name it
-/*
-// NOT EQUIVALENT
static void sub_80D7704(struct Sprite *sprite)
{
- //
- //u16 battler1, battler2, battler3, battler4; //
- u16 r9, r8, r3, r6;
- //s16 r4, r10;
+ s16 targetX, targetY, attackerX, attackerY;
sprite->oam.tileNum += 7;
-
- //u8 battler1, battler2, battler3, battler4;
-
- //battler1 = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- //battler2 = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
- //battler3 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- //battler4 = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
-
- //sprite->oam.tileNum += 7;
-
- //sprite->data[0] = gBattleAnimArgs[4];
-
- //sprite->data[1] = battler3 + gBattleAnimArgs[0]; //???
- //sprite->data[2] = battler1 + gBattleAnimArgs[2];
- //sprite->data[3] = battler4 + gBattleAnimArgs[1];
- //sprite->data[4] = battler2 + gBattleAnimArgs[3];
-
- r9 = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
- r8 = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
- r3 = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- r6 = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
-
+ targetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ targetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ attackerX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ attackerY = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[1] = gBattleAnimArgs[0] + attackerX;
+ sprite->data[2] = gBattleAnimArgs[2] + targetX;
+ sprite->data[3] = gBattleAnimArgs[1] + attackerY;
+ sprite->data[4] = gBattleAnimArgs[3] + targetY;
+ sub_8078314(sprite);
- sprite->data[1] = r3 + gBattleAnimArgs[0]; //???
- sprite->data[2] = r9 + gBattleAnimArgs[2];
- sprite->data[3] = r6 + gBattleAnimArgs[1];
- sprite->data[4] = r8 + gBattleAnimArgs[3];
-
- //sprite->data[0] = gBattleAnimArgs;
+ for (;(targetX >= -32 && targetX <= 272) && (targetY >= -32 && targetY <= 192);
+ targetX += sprite->data[1], targetY += sprite->data[2])
+ ;
+ sprite->data[1] = -sprite->data[1];
+ sprite->data[2] = -sprite->data[2];
+ for (;(attackerX >= -32 && attackerX <= 272) && (attackerY >= -32 && attackerY <= 192);
+ attackerX += sprite->data[1], attackerY += sprite->data[2])
+ ;
+ sprite->pos1.x = attackerX;
+ sprite->pos1.y = attackerY;
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[1] = attackerX;
+ sprite->data[2] = targetX;
+ sprite->data[3] = attackerY;
+ sprite->data[4] = targetY;
sub_8078314(sprite);
-
- if ((u32)(r9 + 32) <= 304 || (u32)(r8 + 32) <= 224) // cmp 1
- {
- r4 = sprite->data[1];
- r10 = 304;
-
- // _080D77AA
- for (int i = 0; i < 3; i++)
- {
- //
- if (((u32)((s16)r9 + r4) + (0x80 << 14)) >> 16 > 304
- || ((u32)((s16)r8 + r4) + (0x80 << 14)) >> 16 > 0xE0)
- {
- break;
- }
- }
- }
- // _080D77DE
-}
-*/
-
-NAKED static void sub_80D7704(struct Sprite *sprite)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tmov r7, r10\n"
- "\tmov r6, r9\n"
- "\tmov r5, r8\n"
- "\tpush {r5-r7}\n"
- "\tsub sp, 0x4\n"
- "\tadds r5, r0, 0\n"
- "\tldrh r2, [r5, 0x4]\n"
- "\tlsls r1, r2, 22\n"
- "\tlsrs r1, 22\n"
- "\tadds r1, 0x7\n"
- "\tldr r3, _080D780C @ =0x000003ff\n"
- "\tadds r0, r3, 0\n"
- "\tands r1, r0\n"
- "\tldr r0, _080D7810 @ =0xfffffc00\n"
- "\tands r0, r2\n"
- "\torrs r0, r1\n"
- "\tstrh r0, [r5, 0x4]\n"
- "\tldr r4, _080D7814 @ =gBattleAnimTarget\n"
- "\tldrb r0, [r4]\n"
- "\tmovs r1, 0x2\n"
- "\tbl GetBattlerSpriteCoord\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tmov r9, r0\n"
- "\tldrb r0, [r4]\n"
- "\tmovs r1, 0x3\n"
- "\tbl GetBattlerSpriteCoord\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tmov r8, r0\n"
- "\tldr r4, _080D7818 @ =gBattleAnimAttacker\n"
- "\tldrb r0, [r4]\n"
- "\tmovs r1, 0x2\n"
- "\tbl GetBattlerSpriteCoord\n"
- "\tlsls r0, 24\n"
- "\tlsrs r3, r0, 24\n"
- "\tldrb r0, [r4]\n"
- "\tmovs r1, 0x3\n"
- "\tstr r3, [sp]\n"
- "\tbl GetBattlerSpriteCoord\n"
- "\tlsls r0, 24\n"
- "\tlsrs r6, r0, 24\n"
- "\tldr r1, _080D781C @ =gBattleAnimArgs\n"
- "\tldrh r0, [r1, 0x8]\n"
- "\tstrh r0, [r5, 0x2E]\n"
- "\tldrh r0, [r1]\n"
- "\tldr r3, [sp]\n"
- "\tadds r0, r3\n"
- "\tstrh r0, [r5, 0x30]\n"
- "\t ldrh r0, [r1, 0x4]\n"
- "\t mov r4, r9\n"
- "\t adds r0, r4, r0\n"
- "\tstrh r0, [r5, 0x32]\n"
- "\tldrh r0, [r1, 0x2]\n"
- "\tadds r0, r6\n"
- "\tstrh r0, [r5, 0x34]\n"
- "\tldrh r0, [r1, 0x6]\n"
- "\tmov r7, r8\n"
- "\tadds r0, r7, r0\n"
- "\tstrh r0, [r5, 0x36]\n"
- "\tadds r0, r5, 0\n"
- "\tbl sub_8078314\n"
- "\tadds r4, 0x20\n"
- "\tmovs r0, 0x98\n"
- "\tlsls r0, 1\n"
- "\tmov r12, r0\n"
- "\tldr r3, [sp]\n"
- "\tcmp r4, r12\n"
- "\tbhi _080D77DE\n"
- "\tadds r0, r7, 0\n"
- "\tadds r0, 0x20\n"
- "\tldrh r1, [r5, 0x30]\n"
- "\tldrh r2, [r5, 0x32]\n"
- "\tcmp r0, 0xE0\n"
- "\tbhi _080D77DE\n"
- "\tadds r4, r1, 0\n"
- "\tmov r10, r12\n"
- "_080D77AA:\n"
- "\tmov r7, r9\n"
- "\tlsls r1, r7, 16\n"
- "\tasrs r1, 16\n"
- "\tadds r1, r4\n"
- "\tlsls r1, 16\n"
- "\tmov r7, r8\n"
- "\tlsls r0, r7, 16\n"
- "\tasrs r0, 16\n"
- "\tadds r0, r2\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tmov r8, r0\n"
- "\tlsrs r0, r1, 16\n"
- "\tmov r9, r0\n"
- "\tmovs r7, 0x80\n"
- "\tlsls r7, 14\n"
- "\tadds r1, r7\n"
- "\tlsrs r1, 16\n"
- "\tcmp r1, r10\n"
- "\tbhi _080D77DE\n"
- "\tmov r1, r8\n"
- "\tlsls r0, r1, 16\n"
- "\tadds r0, r7\n"
- "\tlsrs r0, 16\n"
- "\tcmp r0, 0xE0\n"
- "\tbls _080D77AA\n"
- "_080D77DE:\n"
- "\tldrh r0, [r5, 0x30]\n"
- "\tnegs r7, r0\n"
- "\tstrh r7, [r5, 0x30]\n"
- "\tldrh r0, [r5, 0x32]\n"
- "\tnegs r4, r0\n"
- "\tstrh r4, [r5, 0x32]\n"
- "\tlsls r0, r3, 16\n"
- "\tmovs r1, 0x80\n"
- "\tlsls r1, 14\n"
- "\tadds r0, r1\n"
- "\tlsrs r0, 16\n"
- "\tmovs r2, 0x98\n"
- "\tlsls r2, 1\n"
- "\tmov r12, r2\n"
- "\tldr r1, _080D781C @ =gBattleAnimArgs\n"
- "\tmov r10, r1\n"
- "\tcmp r0, r12\n"
- "\tbhi _080D784A\n"
- "\tlsls r1, r6, 16\n"
- "\tmovs r2, 0x80\n"
- "\tlsls r2, 14\n"
- "\tadds r0, r1, r2\n"
- "\tb _080D7842\n"
- "\t.align 2, 0\n"
- "_080D780C: .4byte 0x000003ff\n"
- "_080D7810: .4byte 0xfffffc00\n"
- "_080D7814: .4byte gBattleAnimTarget\n"
- "_080D7818: .4byte gBattleAnimAttacker\n"
- "_080D781C: .4byte gBattleAnimArgs\n"
- "_080D7820:\n"
- "\tlsls r1, r3, 16\n"
- "\tasrs r1, 16\n"
- "\tadds r1, r7\n"
- "\tlsls r1, 16\n"
- "\tasrs r0, r2, 16\n"
- "\tadds r0, r4\n"
- "\tlsls r0, 16\n"
- "\tlsrs r6, r0, 16\n"
- "\tlsrs r3, r1, 16\n"
- "\tmovs r0, 0x80\n"
- "\tlsls r0, 14\n"
- "\tadds r1, r0\n"
- "\tlsrs r1, 16\n"
- "\tcmp r1, r12\n"
- "\tbhi _080D784A\n"
- "\tlsls r1, r6, 16\n"
- "\tadds r0, r1, r0\n"
- "_080D7842:\n"
- "\tlsrs r0, 16\n"
- "\tadds r2, r1, 0\n"
- "\tcmp r0, 0xE0\n"
- "\tbls _080D7820\n"
- "_080D784A:\n"
- "\tstrh r3, [r5, 0x20]\n"
- "\tstrh r6, [r5, 0x22]\n"
- "\tmov r1, r10\n"
- "\tldrh r0, [r1, 0x8]\n"
- "\tstrh r0, [r5, 0x2E]\n"
- "\tstrh r3, [r5, 0x30]\n"
- "\tmov r2, r9\n"
- "\tstrh r2, [r5, 0x32]\n"
- "\tstrh r6, [r5, 0x34]\n"
- "\tmov r3, r8\n"
- "\tstrh r3, [r5, 0x36]\n"
- "\tadds r0, r5, 0\n"
- "\tbl sub_8078314\n"
- "\tmov r7, r10\n"
- "\tldrh r0, [r7, 0xA]\n"
- "\tstrh r0, [r5, 0x34]\n"
- "\tldrh r0, [r7, 0xC]\n"
- "\tstrh r0, [r5, 0x36]\n"
- "\tldr r0, _080D7884 @ =sub_80D7888\n"
- "\tstr r0, [r5, 0x1C]\n"
- "\tadd sp, 0x4\n"
- "\tpop {r3-r5}\n"
- "\tmov r8, r3\n"
- "\tmov r9, r4\n"
- "\tmov r10, r5\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
- "_080D7884: .4byte sub_80D7888");
+ sprite->data[3] = gBattleAnimArgs[5];
+ sprite->data[4] = gBattleAnimArgs[6];
+ sprite->callback = sub_80D7888;
}
-void sub_80D7888(struct Sprite *sprite)
+static void sub_80D7888(struct Sprite *sprite)
{
if (sprite->data[0] != 0)
{
@@ -1460,13 +1249,9 @@ static void InitPoisonGasCloudAnim(struct Sprite *sprite)
}
// Animates the gas clouds towards the target mon in Poison Gas.
-// functionally correct, but there appears to be an unused local variable causing
-// switch case 1 to not match
-#ifdef NONMATCHING
static void sub_80D8874(struct Sprite *sprite)
{
int value;
- register s16 value2 asm("r5");
switch (sprite->data[7] & 0xFF)
{
@@ -1481,19 +1266,20 @@ static void sub_80D8874(struct Sprite *sprite)
if (sprite->data[0] <= 0)
{
- value2 = 80;
- sprite->data[0] = value2;
- sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
+ sprite->data[0] = 80;
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
sprite->data[1] = sprite->pos1.x;
sprite->data[2] = sprite->pos1.x;
sprite->pos1.y += sprite->pos2.y;
sprite->data[3] = sprite->pos1.y;
sprite->data[4] = sprite->pos1.y + 29;
sprite->data[7]++;
- if (gMain.inBattle && gBattlerPositions[gBattleAnimTarget] & 1)
+ if (!gMain.inBattle)
+ sprite->data[5] = 80;
+ else if (gBattlerPositions[gBattleAnimTarget] & 1)
sprite->data[5] = 204;
else
- sprite->data[5] = value2;
+ sprite->data[5] = 80;
sprite->pos2.y = 0;
value = gSineTable[sprite->data[5]];
@@ -1530,12 +1316,13 @@ static void sub_80D8874(struct Sprite *sprite)
if (sprite->data[0] <= 0)
{
- asm("mov r2, #0"); // unused local variable?
sprite->data[0] = 0x300;
sprite->data[1] = sprite->pos1.x += sprite->pos2.x;
sprite->data[3] = sprite->pos1.y += sprite->pos2.y;
sprite->data[4] = sprite->pos1.y + 4;
- if (gMain.inBattle && gBattlerPositions[gBattleAnimTarget] & 1)
+ if (!gMain.inBattle)
+ sprite->data[2] = -0x10;
+ else if (gBattlerPositions[gBattleAnimTarget] & 1)
sprite->data[2] = 0x100;
else
sprite->data[2] = -0x10;
@@ -1560,321 +1347,6 @@ static void sub_80D8874(struct Sprite *sprite)
break;
}
}
-#else
-NAKED static void sub_80D8874(struct Sprite *sprite)
-{
- asm_unified("\tpush {r4-r6,lr}\n"
- "\tadds r4, r0, 0\n"
- "\tldrh r0, [r4, 0x3C]\n"
- "\tmovs r5, 0xFF\n"
- "\tmovs r1, 0xFF\n"
- "\tands r1, r0\n"
- "\tcmp r1, 0x1\n"
- "\tbeq _080D8968\n"
- "\tcmp r1, 0x1\n"
- "\tbgt _080D888E\n"
- "\tcmp r1, 0\n"
- "\tbeq _080D8896\n"
- "\tb _080D8AD0\n"
- "_080D888E:\n"
- "\tcmp r1, 0x2\n"
- "\tbne _080D8894\n"
- "\tb _080D8A94\n"
- "_080D8894:\n"
- "\tb _080D8AD0\n"
- "_080D8896:\n"
- "\tadds r0, r4, 0\n"
- "\tbl TranslateAnimLinear\n"
- "\tldr r1, _080D88C0 @ =gSineTable\n"
- "\tmovs r2, 0x38\n"
- "\tldrsh r0, [r4, r2]\n"
- "\tlsls r0, 1\n"
- "\tadds r0, r1\n"
- "\tmovs r1, 0\n"
- "\tldrsh r0, [r0, r1]\n"
- "\tasrs r0, 4\n"
- "\tldrh r2, [r4, 0x24]\n"
- "\tadds r0, r2\n"
- "\tstrh r0, [r4, 0x24]\n"
- "\tmovs r1, 0x3A\n"
- "\tldrsh r0, [r4, r1]\n"
- "\tcmp r0, 0\n"
- "\tbeq _080D88C4\n"
- "\tldrh r0, [r4, 0x38]\n"
- "\tsubs r0, 0x8\n"
- "\tb _080D88C8\n"
- "\t.align 2, 0\n"
- "_080D88C0: .4byte gSineTable\n"
- "_080D88C4:\n"
- "\tldrh r0, [r4, 0x38]\n"
- "\tadds r0, 0x8\n"
- "_080D88C8:\n"
- "\tands r0, r5\n"
- "\tstrh r0, [r4, 0x38]\n"
- "\tmovs r2, 0x2E\n"
- "\tldrsh r0, [r4, r2]\n"
- "\tcmp r0, 0\n"
- "\tble _080D88D6\n"
- "\tb _080D8AD0\n"
- "_080D88D6:\n"
- "\tmovs r5, 0x50\n"
- "\tstrh r5, [r4, 0x2E]\n"
- "\tldr r6, _080D8928 @ =gBattleAnimTarget\n"
- "\tldrb r0, [r6]\n"
- "\tmovs r1, 0\n"
- "\tbl GetBattlerSpriteCoord\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tstrh r0, [r4, 0x20]\n"
- "\tstrh r0, [r4, 0x30]\n"
- "\tstrh r0, [r4, 0x32]\n"
- "\tldrh r0, [r4, 0x26]\n"
- "\tldrh r1, [r4, 0x22]\n"
- "\tadds r0, r1\n"
- "\tstrh r0, [r4, 0x22]\n"
- "\tstrh r0, [r4, 0x34]\n"
- "\tadds r0, 0x1D\n"
- "\tstrh r0, [r4, 0x36]\n"
- "\tldrh r0, [r4, 0x3C]\n"
- "\tadds r0, 0x1\n"
- "\tstrh r0, [r4, 0x3C]\n"
- "\tldr r0, _080D892C @ =gMain\n"
- "\tldr r2, _080D8930 @ =0x0000043d\n"
- "\tadds r0, r2\n"
- "\tldrb r1, [r0]\n"
- "\tmovs r0, 0x2\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _080D8938\n"
- "\tldr r1, _080D8934 @ =gBattlerPositions\n"
- "\tldrb r0, [r6]\n"
- "\tadds r0, r1\n"
- "\tldrb r1, [r0]\n"
- "\tmovs r0, 0x1\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _080D8938\n"
- "\tmovs r0, 0xCC\n"
- "\tstrh r0, [r4, 0x38]\n"
- "\tb _080D893A\n"
- "\t.align 2, 0\n"
- "_080D8928: .4byte gBattleAnimTarget\n"
- "_080D892C: .4byte gMain\n"
- "_080D8930: .4byte 0x0000043d\n"
- "_080D8934: .4byte gBattlerPositions\n"
- "_080D8938:\n"
- "\tstrh r5, [r4, 0x38]\n"
- "_080D893A:\n"
- "\tmovs r0, 0\n"
- "\tstrh r0, [r4, 0x26]\n"
- "\tldr r1, _080D8964 @ =gSineTable\n"
- "\tmovs r2, 0x38\n"
- "\tldrsh r0, [r4, r2]\n"
- "\tlsls r0, 1\n"
- "\tadds r0, r1\n"
- "\tmovs r1, 0\n"
- "\tldrsh r0, [r0, r1]\n"
- "\tasrs r0, 3\n"
- "\tstrh r0, [r4, 0x24]\n"
- "\tldrh r0, [r4, 0x38]\n"
- "\tadds r0, 0x2\n"
- "\tmovs r1, 0xFF\n"
- "\tands r0, r1\n"
- "\tstrh r0, [r4, 0x38]\n"
- "\tadds r0, r4, 0\n"
- "\tbl InitAnimLinearTranslation\n"
- "\tb _080D8AD0\n"
- "\t.align 2, 0\n"
- "_080D8964: .4byte gSineTable\n"
- "_080D8968:\n"
- "\tadds r0, r4, 0\n"
- "\tbl TranslateAnimLinear\n"
- "\tldr r1, _080D89C8 @ =gSineTable\n"
- "\tmovs r2, 0x38\n"
- "\tldrsh r0, [r4, r2]\n"
- "\tlsls r0, 1\n"
- "\tadds r0, r1\n"
- "\tmovs r2, 0\n"
- "\tldrsh r0, [r0, r2]\n"
- "\tasrs r0, 3\n"
- "\tldrh r2, [r4, 0x24]\n"
- "\tadds r0, r2\n"
- "\tstrh r0, [r4, 0x24]\n"
- "\tmovs r2, 0x38\n"
- "\tldrsh r0, [r4, r2]\n"
- "\tadds r0, 0x40\n"
- "\tlsls r0, 1\n"
- "\tadds r0, r1\n"
- "\tmovs r2, 0\n"
- "\tldrsh r1, [r0, r2]\n"
- "\tlsls r0, r1, 1\n"
- "\tadds r0, r1\n"
- "\tnegs r0, r0\n"
- "\tasrs r0, 8\n"
- "\tldrh r1, [r4, 0x26]\n"
- "\tadds r0, r1\n"
- "\tstrh r0, [r4, 0x26]\n"
- "\tldr r0, _080D89CC @ =gMain\n"
- "\tldr r2, _080D89D0 @ =0x0000043d\n"
- "\tadds r0, r2\n"
- "\tldrb r1, [r0]\n"
- "\tmovs r0, 0x2\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _080D89F2\n"
- "\tldrh r1, [r4, 0x38]\n"
- "\tadds r0, r1, 0\n"
- "\tsubs r0, 0x40\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tadds r3, r1, 0\n"
- "\tcmp r0, 0x7F\n"
- "\tbhi _080D89D4\n"
- "\tldrh r1, [r4, 0x3C]\n"
- "\tlsls r1, 16\n"
- "\tasrs r1, 24\n"
- "\tb _080D89DC\n"
- "\t.align 2, 0\n"
- "_080D89C8: .4byte gSineTable\n"
- "_080D89CC: .4byte gMain\n"
- "_080D89D0: .4byte 0x0000043d\n"
- "_080D89D4:\n"
- "\tldrh r1, [r4, 0x3C]\n"
- "\tlsls r1, 16\n"
- "\tasrs r1, 24\n"
- "\tadds r1, 0x1\n"
- "_080D89DC:\n"
- "\tmovs r0, 0x3\n"
- "\tands r1, r0\n"
- "\tlsls r1, 2\n"
- "\tldrb r2, [r4, 0x5]\n"
- "\tmovs r0, 0xD\n"
- "\tnegs r0, r0\n"
- "\tands r0, r2\n"
- "\torrs r0, r1\n"
- "\tstrb r0, [r4, 0x5]\n"
- "\tadds r0, r3, 0x4\n"
- "\tb _080D8A12\n"
- "_080D89F2:\n"
- "\tldrh r0, [r4, 0x38]\n"
- "\tsubs r0, 0x40\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tcmp r0, 0x7F\n"
- "\tbhi _080D8A06\n"
- "\tadds r1, r4, 0\n"
- "\tadds r1, 0x43\n"
- "\tmovs r0, 0x80\n"
- "\tb _080D8A0C\n"
- "_080D8A06:\n"
- "\tadds r1, r4, 0\n"
- "\tadds r1, 0x43\n"
- "\tmovs r0, 0x8C\n"
- "_080D8A0C:\n"
- "\tstrb r0, [r1]\n"
- "\tldrh r0, [r4, 0x38]\n"
- "\tsubs r0, 0x4\n"
- "_080D8A12:\n"
- "\tmovs r1, 0xFF\n"
- "\tands r0, r1\n"
- "\tstrh r0, [r4, 0x38]\n"
- "\tmovs r1, 0x2E\n"
- "\tldrsh r0, [r4, r1]\n"
- "\tcmp r0, 0\n"
- "\tbgt _080D8AD0\n"
- "\tmovs r2, 0\n"
- "\tmovs r0, 0xC0\n"
- "\tlsls r0, 2\n"
- "\tstrh r0, [r4, 0x2E]\n"
- "\tldrh r0, [r4, 0x24]\n"
- "\tldrh r1, [r4, 0x20]\n"
- "\tadds r0, r1\n"
- "\tstrh r0, [r4, 0x20]\n"
- "\tstrh r0, [r4, 0x30]\n"
- "\tldrh r0, [r4, 0x26]\n"
- "\tldrh r1, [r4, 0x22]\n"
- "\tadds r0, r1\n"
- "\tstrh r0, [r4, 0x22]\n"
- "\tstrh r0, [r4, 0x34]\n"
- "\tadds r0, 0x4\n"
- "\tstrh r0, [r4, 0x36]\n"
- "\tldr r0, _080D8A68 @ =gMain\n"
- "\tldr r1, _080D8A6C @ =0x0000043d\n"
- "\tadds r0, r1\n"
- "\tldrb r1, [r0]\n"
- "\tmovs r0, 0x2\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _080D8A78\n"
- "\tldr r1, _080D8A70 @ =gBattlerPositions\n"
- "\tldr r0, _080D8A74 @ =gBattleAnimTarget\n"
- "\tldrb r0, [r0]\n"
- "\tadds r0, r1\n"
- "\tldrb r1, [r0]\n"
- "\tmovs r0, 0x1\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _080D8A78\n"
- "\tmovs r0, 0x80\n"
- "\tlsls r0, 1\n"
- "\tb _080D8A7A\n"
- "\t.align 2, 0\n"
- "_080D8A68: .4byte gMain\n"
- "_080D8A6C: .4byte 0x0000043d\n"
- "_080D8A70: .4byte gBattlerPositions\n"
- "_080D8A74: .4byte gBattleAnimTarget\n"
- "_080D8A78:\n"
- "\tldr r0, _080D8A90 @ =0x0000fff0\n"
- "_080D8A7A:\n"
- "\tstrh r0, [r4, 0x32]\n"
- "\tldrh r0, [r4, 0x3C]\n"
- "\tadds r0, 0x1\n"
- "\tmovs r1, 0\n"
- "\tstrh r0, [r4, 0x3C]\n"
- "\tstrh r1, [r4, 0x26]\n"
- "\tstrh r1, [r4, 0x24]\n"
- "\tadds r0, r4, 0\n"
- "\tbl sub_8078BD4\n"
- "\tb _080D8AD0\n"
- "\t.align 2, 0\n"
- "_080D8A90: .4byte 0x0000fff0\n"
- "_080D8A94:\n"
- "\tadds r0, r4, 0\n"
- "\tbl TranslateAnimLinear\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbeq _080D8AD0\n"
- "\tldrb r0, [r4, 0x1]\n"
- "\tlsls r0, 30\n"
- "\tlsrs r0, 30\n"
- "\tmovs r1, 0x1\n"
- "\tands r0, r1\n"
- "\tcmp r0, 0\n"
- "\tbeq _080D8AC2\n"
- "\tldrb r0, [r4, 0x3]\n"
- "\tlsls r0, 26\n"
- "\tlsrs r0, 27\n"
- "\tbl FreeOamMatrix\n"
- "\tldrb r1, [r4, 0x1]\n"
- "\tmovs r0, 0x4\n"
- "\tnegs r0, r0\n"
- "\tands r0, r1\n"
- "\tstrb r0, [r4, 0x1]\n"
- "_080D8AC2:\n"
- "\tadds r0, r4, 0\n"
- "\tbl DestroySprite\n"
- "\tldr r1, _080D8AD8 @ =gAnimVisualTaskCount\n"
- "\tldrb r0, [r1]\n"
- "\tsubs r0, 0x1\n"
- "\tstrb r0, [r1]\n"
- "_080D8AD0:\n"
- "\tpop {r4-r6}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.align 2, 0\n"
- "_080D8AD8: .4byte gAnimVisualTaskCount");
-}
-#endif // NONMATCHING
// Creates Hail.
void AnimTask_Hail1(u8 taskId)
@@ -1929,266 +1401,63 @@ static void AnimTask_Hail2(u8 taskId)
}
}
-
-/*
-// Something to do with Hail.
-// possibly equivalent, possibly not
-bool8 sub_80D8BA8(u8 a1, u8 a2, u8 a3, u8 a4)//(u8 spriteId, u8 taskId, u8 a3)//(u8 taskId)
+bool8 sub_80D8BA8(u8 hailStructId, u8 affineAnimNum, u8 taskId, u8 c)
{
- //
- //struct Task *task = &gTasks[a2];
- //u16 i, j;
- //task->data[3]++;
- //u8 r5bank = ;
-
- //const struct SpriteTemplate *spriteTemplate;
- u8 spriteId;
+ u8 id;
+ s16 battlerX, battlerY;
+ s16 spriteX;
+ bool8 possibleBool = FALSE;
+ s8 unk = gUnknown_083D9DC4[hailStructId].unk3;
- s16 r6, r7;
-
- u32 tempA, tempB; // u32? s16? u16? u8? int?
-
- //u8 r6, r7;
-
- tempA = a3 + 0;
- tempB = 0;
-
- // is that gunknown a tempvar?
-
- if (gUnknown_083D9DC4[a1][3] != 2
- || IsAnimBankSpriteVisible(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2])))
+ if (unk != 2)
{
- //return TRUE;
- tempB = 1;
-
- r7 = GetBattlerSpriteCoord(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 2);
- r6 = GetBattlerSpriteCoord(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 3);
-
- switch (gUnknown_083D9DC4[a1][3])
+ id = GetBattlerAtPosition(gUnknown_083D9DC4[hailStructId].bPosition);
+ if (IsAnimBankSpriteVisible(id))
{
- case 0:
- //
- r7 -= GetBattlerSpriteCoordAttr(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 1) / 6;
- r6 -= GetBattlerSpriteCoordAttr(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 0) / 6;
- break;
- case 1:
- //
- r7 += GetBattlerSpriteCoordAttr(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 1) / 6;
- r6 += GetBattlerSpriteCoordAttr(GetBattlerAtPosition(gUnknown_083D9DC4[a1][2]), 0) / 6;
+ possibleBool = TRUE;
+ battlerX = GetBattlerSpriteCoord(id, BATTLER_COORD_X_2);
+ battlerY = GetBattlerSpriteCoord(id, BATTLER_COORD_Y_PIC_OFFSET);
+ switch (unk)
+ {
+ case 0:
+ battlerX -= GetBattlerSpriteCoordAttr(id, BATTLER_COORD_ATTR_WIDTH) / 6;
+ battlerY -= GetBattlerSpriteCoordAttr(id, BATTLER_COORD_ATTR_HEIGHT) / 6;
+ break;
+ case 1:
+ battlerX += GetBattlerSpriteCoordAttr(id, BATTLER_COORD_ATTR_WIDTH) / 6;
+ battlerY += GetBattlerSpriteCoordAttr(id, BATTLER_COORD_ATTR_HEIGHT) / 6;
+ break;
+ }
+ }
+ else
+ {
+ battlerX = (gUnknown_083D9DC4[hailStructId].x);
+ battlerY = (gUnknown_083D9DC4[hailStructId].y);
}
}
-
else
{
- // _94
- r7 = gUnknown_083D9DC4[a1][0];
- r6 = gUnknown_083D9DC4[a1][1];
+ battlerX = (gUnknown_083D9DC4[hailStructId].x);
+ battlerY = (gUnknown_083D9DC4[hailStructId].y);
}
-
- spriteId = CreateSprite(&HailSpriteTemplate, r7 - r6, -0x8, 0x12);
-
- if (spriteId != 0x40)
+ spriteX = battlerX - ((battlerY + 8) / 2);
+ id = CreateSprite(&gHailSpriteTemplate, spriteX, -8, 18);
+ if (id == MAX_SPRITES)
{
- //
- StartSpriteAffineAnim(&gSprites[spriteId], a2);
-
- gSprites[spriteId].data[0] = tempB;
- gSprites[spriteId].data[3] = r7;
- gSprites[spriteId].data[4] = r6;
-
- gSprites[spriteId].data[5] = a2;
- gSprites[spriteId].data[6] = tempA;
- gSprites[spriteId].data[7] = a4;
-
+ return FALSE;
+ }
+ else
+ {
+ StartSpriteAffineAnim(&gSprites[id], affineAnimNum);
+ gSprites[id].data[0] = possibleBool;
+ gSprites[id].data[3] = battlerX;
+ gSprites[id].data[4] = battlerY;
+ gSprites[id].data[5] = affineAnimNum;
+ gSprites[id].data[6] = taskId;
+ gSprites[id].data[7] = c;
return TRUE;
}
-
- return FALSE;
-
-}
-//*/
-
-//*
-NAKED bool8 sub_80D8BA8(u8 a1, u8 a2, u8 a3, u8 a4)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tmov r7, r10\n"
- "\tmov r6, r9\n"
- "\tmov r5, r8\n"
- "\tpush {r5-r7}\n"
- "\tsub sp, 0x8\n"
- "\tlsls r0, 24\n"
- "\tlsls r1, 24\n"
- "\tlsrs r1, 24\n"
- "\tmov r9, r1\n"
- "\tlsls r2, 24\n"
- "\tlsrs r2, 24\n"
- "\tstr r2, [sp]\n"
- "\tlsls r3, 24\n"
- "\tlsrs r3, 24\n"
- "\tmov r10, r3\n"
- "\tmovs r1, 0\n"
- "\tstr r1, [sp, 0x4]\n"
- "\tldr r1, _080D8C20 @ =gUnknown_083D9DC4\n"
- "\tlsrs r0, 22\n"
- "\tadds r4, r0, r1\n"
- "\tldrb r0, [r4, 0x3]\n"
- "\tlsls r0, 24\n"
- "\tasrs r0, 28\n"
- "\tmov r8, r0\n"
- "\tcmp r0, 0x2\n"
- "\tbeq _080D8C94\n"
- "\tldrh r0, [r4, 0x2]\n"
- "\tlsls r0, 20\n"
- "\tlsrs r0, 24\n"
- "\tbl GetBattlerAtPosition\n"
- "\tlsls r0, 24\n"
- "\tlsrs r5, r0, 24\n"
- "\tadds r0, r5, 0\n"
- "\tbl IsAnimBankSpriteVisible\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbeq _080D8C94\n"
- "\tmovs r0, 0x1\n"
- "\tstr r0, [sp, 0x4]\n"
- "\tadds r0, r5, 0\n"
- "\tmovs r1, 0x2\n"
- "\tbl GetBattlerSpriteCoord\n"
- "\tlsls r0, 24\n"
- "\tlsrs r7, r0, 24\n"
- "\tadds r0, r5, 0\n"
- "\tmovs r1, 0x3\n"
- "\tbl GetBattlerSpriteCoord\n"
- "\tlsls r0, 24\n"
- "\tlsrs r6, r0, 24\n"
- "\tmov r1, r8\n"
- "\tcmp r1, 0\n"
- "\tbeq _080D8C24\n"
- "\tcmp r1, 0x1\n"
- "\tbeq _080D8C5A\n"
- "\tb _080D8CA6\n"
- "\t.align 2, 0\n"
- "_080D8C20: .4byte gUnknown_083D9DC4\n"
- "_080D8C24:\n"
- "\tadds r0, r5, 0\n"
- "\tmovs r1, 0x1\n"
- "\tbl GetBattlerSpriteCoordAttr\n"
- "\tlsls r0, 16\n"
- "\tasrs r0, 16\n"
- "\tmovs r1, 0x6\n"
- "\tbl __divsi3\n"
- "\tlsls r1, r7, 16\n"
- "\tasrs r1, 16\n"
- "\tsubs r1, r0\n"
- "\tlsls r1, 16\n"
- "\tlsrs r7, r1, 16\n"
- "\tadds r0, r5, 0\n"
- "\tmovs r1, 0\n"
- "\tbl GetBattlerSpriteCoordAttr\n"
- "\tlsls r0, 16\n"
- "\tasrs r0, 16\n"
- "\tmovs r1, 0x6\n"
- "\tbl __divsi3\n"
- "\tlsls r1, r6, 16\n"
- "\tasrs r1, 16\n"
- "\tsubs r1, r0\n"
- "\tb _080D8C8E\n"
- "_080D8C5A:\n"
- "\tadds r0, r5, 0\n"
- "\tmovs r1, 0x1\n"
- "\tbl GetBattlerSpriteCoordAttr\n"
- "\tlsls r0, 16\n"
- "\tasrs r0, 16\n"
- "\tmovs r1, 0x6\n"
- "\tbl __divsi3\n"
- "\tlsls r1, r7, 16\n"
- "\tasrs r1, 16\n"
- "\tadds r1, r0\n"
- "\tlsls r1, 16\n"
- "\tlsrs r7, r1, 16\n"
- "\tadds r0, r5, 0\n"
- "\tmovs r1, 0\n"
- "\tbl GetBattlerSpriteCoordAttr\n"
- "\tlsls r0, 16\n"
- "\tasrs r0, 16\n"
- "\tmovs r1, 0x6\n"
- "\tbl __divsi3\n"
- "\tlsls r1, r6, 16\n"
- "\tasrs r1, 16\n"
- "\tadds r1, r0\n"
- "_080D8C8E:\n"
- "\tlsls r1, 16\n"
- "\tlsrs r6, r1, 16\n"
- "\tb _080D8CA6\n"
- "_080D8C94:\n"
- "\tldrh r0, [r4]\n"
- "\tlsls r0, 22\n"
- "\tasrs r0, 6\n"
- "\tlsrs r7, r0, 16\n"
- "\tldr r0, [r4]\n"
- "\tlsls r0, 12\n"
- "\tasrs r0, 22\n"
- "\tlsls r0, 16\n"
- "\tlsrs r6, r0, 16\n"
- "_080D8CA6:\n"
- "\tlsls r0, r6, 16\n"
- "\tasrs r0, 16\n"
- "\tadds r0, 0x8\n"
- "\tlsrs r1, r0, 31\n"
- "\tadds r0, r1\n"
- "\tasrs r0, 1\n"
- "\tlsls r1, r7, 16\n"
- "\tasrs r1, 16\n"
- "\tsubs r1, r0\n"
- "\tldr r0, _080D8D00 @ =HailSpriteTemplate\n"
- "\tlsls r1, 16\n"
- "\tasrs r1, 16\n"
- "\tmovs r2, 0x8\n"
- "\tnegs r2, r2\n"
- "\tmovs r3, 0x12\n"
- "\tbl CreateSprite\n"
- "\tlsls r0, 24\n"
- "\tlsrs r5, r0, 24\n"
- "\tcmp r5, 0x40\n"
- "\tbeq _080D8D08\n"
- "\tlsls r4, r5, 4\n"
- "\tadds r4, r5\n"
- "\tlsls r4, 2\n"
- "\tldr r0, _080D8D04 @ =gSprites\n"
- "\tadds r4, r0\n"
- "\tadds r0, r4, 0\n"
- "\tmov r1, r9\n"
- "\tbl StartSpriteAffineAnim\n"
- "\tmov r0, sp\n"
- "\tldrh r0, [r0, 0x4]\n"
- "\tstrh r0, [r4, 0x2E]\n"
- "\tstrh r7, [r4, 0x34]\n"
- "\tstrh r6, [r4, 0x36]\n"
- "\tmov r1, r9\n"
- "\tstrh r1, [r4, 0x38]\n"
- "\tmov r0, sp\n"
- "\tldrh r0, [r0]\n"
- "\tstrh r0, [r4, 0x3A]\n"
- "\tmov r1, r10\n"
- "\tstrh r1, [r4, 0x3C]\n"
- "\tmovs r0, 0x1\n"
- "\tb _080D8D0A\n"
- "\t.align 2, 0\n"
- "_080D8D00: .4byte gHailSpriteTemplate\n"
- "_080D8D04: .4byte gSprites\n"
- "_080D8D08:\n"
- "\tmovs r0, 0\n"
- "_080D8D0A:\n"
- "\tadd sp, 0x8\n"
- "\tpop {r3-r5}\n"
- "\tmov r8, r3\n"
- "\tmov r9, r4\n"
- "\tmov r10, r5\n"
- "\tpop {r4-r7}\n"
- "\tpop {r1}\n"
- "\tbx r1");
}
-//*/
static void AnimHailBegin(struct Sprite *sprite)
{
diff --git a/src/battle/anim/psychic.c b/src/battle/anim/psychic.c
index 84a7741e1..c76e522f4 100644
--- a/src/battle/anim/psychic.c
+++ b/src/battle/anim/psychic.c
@@ -1042,17 +1042,14 @@ static void sub_80DC3F4(u8 taskId)
}
}
-#ifdef NONMATCHING
void sub_80DC4F4(u8 taskId)
{
s16 spriteId;
- u8 matrixNum;
- register u8 matrixNum2 asm("r6");
+ s16 matrixNum;
struct Task *task = &gTasks[taskId];
matrixNum = AllocOamMatrix();
- matrixNum2 = matrixNum;
- if (matrixNum2 == 0xFF)
+ if (matrixNum == 0xFF)
{
DestroyAnimVisualTask(taskId);
return;
@@ -1068,7 +1065,7 @@ void sub_80DC4F4(u8 taskId)
gSprites[spriteId].callback = SpriteCallbackDummy;
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE;
- gSprites[spriteId].oam.matrixNum = matrixNum2;
+ gSprites[spriteId].oam.matrixNum = matrixNum;
gSprites[spriteId].affineAnimPaused = 1;
gSprites[spriteId].subpriority++;
obj_id_set_rotscale(spriteId, 256, 256, 0);
@@ -1079,132 +1076,6 @@ void sub_80DC4F4(u8 taskId)
task->data[15] = spriteId;
task->func = sub_80DC5F4;
}
-#else
-NAKED
-void sub_80DC4F4(u8 taskId)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- mov r8, r4\n\
- lsls r0, r4, 2\n\
- adds r0, r4\n\
- lsls r0, 3\n\
- ldr r1, _080DC528 @ =gTasks\n\
- adds r7, r0, r1\n\
- bl AllocOamMatrix\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- mov r10, r5\n\
- adds r6, r5, 0\n\
- cmp r6, 0xFF\n\
- bne _080DC52C\n\
- adds r0, r4, 0\n\
- bl DestroyAnimVisualTask\n\
- b _080DC5D6\n\
- .align 2, 0\n\
-_080DC528: .4byte gTasks\n\
-_080DC52C:\n\
- ldr r1, _080DC550 @ =gBattleAnimArgs\n\
- ldrb r0, [r1]\n\
- bl duplicate_obj_of_side_rel2move_in_transparent_mode\n\
- lsls r0, 16\n\
- lsrs r1, r0, 16\n\
- mov r9, r1\n\
- asrs r0, 16\n\
- cmp r0, 0\n\
- bge _080DC554\n\
- adds r0, r5, 0\n\
- bl FreeOamMatrix\n\
- mov r0, r8\n\
- bl DestroyAnimVisualTask\n\
- b _080DC5D6\n\
- .align 2, 0\n\
-_080DC550: .4byte gBattleAnimArgs\n\
-_080DC554:\n\
- ldr r2, _080DC5E4 @ =gSprites\n\
- lsls r4, r0, 4\n\
- adds r4, r0\n\
- lsls r4, 2\n\
- adds r0, r2, 0\n\
- adds r0, 0x1C\n\
- adds r0, r4, r0\n\
- ldr r1, _080DC5E8 @ =SpriteCallbackDummy\n\
- str r1, [r0]\n\
- adds r4, r2\n\
- ldrb r0, [r4, 0x1]\n\
- movs r1, 0x3\n\
- orrs r0, r1\n\
- strb r0, [r4, 0x1]\n\
- movs r0, 0x1F\n\
- ands r6, r0\n\
- lsls r2, r6, 1\n\
- ldrb r1, [r4, 0x3]\n\
- movs r0, 0x3F\n\
- negs r0, r0\n\
- ands r0, r1\n\
- orrs r0, r2\n\
- strb r0, [r4, 0x3]\n\
- adds r2, r4, 0\n\
- adds r2, 0x2C\n\
- ldrb r0, [r2]\n\
- movs r1, 0x80\n\
- orrs r0, r1\n\
- strb r0, [r2]\n\
- adds r1, r4, 0\n\
- adds r1, 0x43\n\
- ldrb r0, [r1]\n\
- adds r0, 0x1\n\
- strb r0, [r1]\n\
- mov r1, r9\n\
- lsls r0, r1, 24\n\
- lsrs r0, 24\n\
- movs r2, 0x80\n\
- lsls r2, 1\n\
- adds r1, r2, 0\n\
- movs r3, 0\n\
- bl obj_id_set_rotscale\n\
- ldrb r3, [r4, 0x1]\n\
- lsrs r1, r3, 6\n\
- ldrb r2, [r4, 0x3]\n\
- lsrs r2, 6\n\
- lsls r3, 30\n\
- lsrs r3, 30\n\
- adds r0, r4, 0\n\
- bl CalcCenterToCornerVec\n\
- ldr r1, _080DC5EC @ =gBattleAnimArgs\n\
- ldrb r0, [r1]\n\
- bl GetAnimBattlerSpriteId\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- strh r0, [r7, 0x22]\n\
- mov r0, r10\n\
- strh r0, [r7, 0x24]\n\
- mov r1, r9\n\
- strh r1, [r7, 0x26]\n\
- ldr r0, _080DC5F0 @ =sub_80DC5F4\n\
- str r0, [r7]\n\
-_080DC5D6:\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080DC5E4: .4byte gSprites\n\
-_080DC5E8: .4byte SpriteCallbackDummy\n\
-_080DC5EC: .4byte gBattleAnimArgs\n\
-_080DC5F0: .4byte sub_80DC5F4\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
void sub_80DC5F4(u8 taskId)
{
diff --git a/src/battle/anim/water.c b/src/battle/anim/water.c
index 98e50f17f..135ed43cb 100644
--- a/src/battle/anim/water.c
+++ b/src/battle/anim/water.c
@@ -1,5 +1,7 @@
#include "global.h"
#include "battle.h"
+#include "decompress.h"
+#include "graphics.h"
#include "battle_anim.h"
#include "random.h"
#include "rom_8077ABC.h"
@@ -25,6 +27,7 @@ void sub_8078F40(u8);
void sub_8079A64(u8);
void sub_80D37FC(struct Sprite *sprite);
void sub_80D3838(struct Sprite *sprite);
+void sub_80D3B60(u8 taskId);
void sub_80D3D68(u8 taskId);
void sub_80D4044(struct Sprite *sprite);
void sub_80D40A8(struct Sprite *);
@@ -44,7 +47,7 @@ void sub_80D4BF0(struct Sprite *sprite);
void sub_80D4C18(struct Sprite *);
void sub_80D4CEC(struct Sprite *);
void sub_80D4C64(struct Sprite *sprite);
-void sub_80D4D64(struct Sprite*, int, int);
+void sub_80D4D64(struct Sprite*, s32, s32);
void sub_80E1864(u8);
static void sub_80D3874(struct Sprite *sprite);
@@ -260,329 +263,104 @@ static void sub_80D3874(struct Sprite *sprite)
}
}
-NAKED
void AnimTask_CreateSurfWave(u8 taskId)
{
- asm(".syntax unified\n\
- .equ REG_BLDCNT, 0x4000050\n\
- .equ REG_BG1CNT, 0x400000A\n\
- .equ REG_BG1HOFS, 0x4000014\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x14\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r10, r0\n\
- ldr r1, _080D398C @ =REG_BLDCNT\n\
- ldr r2, _080D3990 @ =0x00003f42\n\
- adds r0, r2, 0\n\
- strh r0, [r1]\n\
- adds r1, 0x2\n\
- movs r3, 0x80\n\
- lsls r3, 5\n\
- adds r0, r3, 0\n\
- strh r0, [r1]\n\
- ldr r2, _080D3994 @ =REG_BG1CNT\n\
- ldrb r1, [r2]\n\
- movs r0, 0x4\n\
- negs r0, r0\n\
- ands r0, r1\n\
- movs r1, 0x1\n\
- orrs r0, r1\n\
- strb r0, [r2]\n\
- ldrb r1, [r2, 0x1]\n\
- movs r0, 0x3F\n\
- ands r0, r1\n\
- movs r1, 0x40\n\
- orrs r0, r1\n\
- strb r0, [r2, 0x1]\n\
- mov r0, sp\n\
- bl sub_8078914\n\
- ldr r2, [sp]\n\
- movs r3, 0x80\n\
- lsls r3, 6\n\
- add r6, sp, 0x10\n\
- add r0, sp, 0xC\n\
- mov r12, r0\n\
- movs r5, 0\n\
- ldr r1, _080D3998 @ =0x040000d4\n\
- movs r4, 0x80\n\
- lsls r4, 5\n\
- mov r8, r6\n\
- ldr r7, _080D399C @ =0x85000400\n\
- movs r0, 0x85\n\
- lsls r0, 24\n\
- mov r9, r0\n\
-_080D3920:\n\
- str r5, [sp, 0x10]\n\
- mov r0, r8\n\
- str r0, [r1]\n\
- str r2, [r1, 0x4]\n\
- str r7, [r1, 0x8]\n\
- ldr r0, [r1, 0x8]\n\
- adds r2, r4\n\
- subs r3, r4\n\
- cmp r3, r4\n\
- bhi _080D3920\n\
- str r5, [sp, 0x10]\n\
- str r6, [r1]\n\
- str r2, [r1, 0x4]\n\
- lsrs r0, r3, 2\n\
- mov r2, r9\n\
- orrs r0, r2\n\
- str r0, [r1, 0x8]\n\
- ldr r0, [r1, 0x8]\n\
- movs r0, 0\n\
- mov r3, r12\n\
- strb r0, [r3]\n\
- strb r0, [r3]\n\
- ldr r1, [sp, 0x4]\n\
- movs r0, 0\n\
- str r0, [sp, 0x10]\n\
- ldr r0, _080D3998 @ =0x040000d4\n\
- str r6, [r0]\n\
- str r1, [r0, 0x4]\n\
- ldr r1, _080D399C @ =0x85000400\n\
- str r1, [r0, 0x8]\n\
- ldr r0, [r0, 0x8]\n\
- bl IsContest\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _080D39B8\n\
- ldr r2, _080D3994 @ =REG_BG1CNT\n\
- ldrb r1, [r2]\n\
- movs r0, 0xD\n\
- negs r0, r0\n\
- ands r0, r1\n\
- movs r1, 0x4\n\
- orrs r0, r1\n\
- strb r0, [r2]\n\
- ldr r0, _080D39A0 @ =gBattleAnimAttacker\n\
- ldrb r0, [r0]\n\
- bl GetBattlerSide\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x1\n\
- bne _080D39A8\n\
- ldr r0, _080D39A4 @ =gUnknown_08E70968\n\
- b _080D39AA\n\
- .align 2, 0\n\
-_080D398C: .4byte REG_BLDCNT\n\
-_080D3990: .4byte 0x00003f42\n\
-_080D3994: .4byte REG_BG1CNT\n\
-_080D3998: .4byte 0x040000d4\n\
-_080D399C: .4byte 0x85000400\n\
-_080D39A0: .4byte gBattleAnimAttacker\n\
-_080D39A4: .4byte gUnknown_08E70968\n\
-_080D39A8:\n\
- ldr r0, _080D39B4 @ =gUnknown_08E70C38\n\
-_080D39AA:\n\
- ldr r1, [sp, 0x4]\n\
- bl LZDecompressVram\n\
- b _080D39CE\n\
- .align 2, 0\n\
-_080D39B4: .4byte gUnknown_08E70C38\n\
-_080D39B8:\n\
- ldr r0, _080D39F0 @ =gUnknown_08E70F0C\n\
- ldr r1, [sp, 0x4]\n\
- bl LZDecompressVram\n\
- mov r0, sp\n\
- ldrb r0, [r0, 0x8]\n\
- ldr r1, [sp, 0x4]\n\
- movs r2, 0\n\
- movs r3, 0x1\n\
- bl sub_80763FC\n\
-_080D39CE:\n\
- ldr r0, _080D39F4 @ =gBattleAnimBackgroundImage_Surf\n\
- ldr r1, [sp]\n\
- bl LZDecompressVram\n\
- ldr r0, _080D39F8 @ =gBattleAnimArgs\n\
- movs r1, 0\n\
- ldrsh r0, [r0, r1]\n\
- cmp r0, 0\n\
- bne _080D3A00\n\
- ldr r0, _080D39FC @ =gBattleAnimBackgroundPalette_Surf\n\
- mov r1, sp\n\
- ldrb r1, [r1, 0x8]\n\
- lsls r1, 4\n\
- movs r2, 0x20\n\
- bl LoadCompressedPalette\n\
- b _080D3A0E\n\
- .align 2, 0\n\
-_080D39F0: .4byte gUnknown_08E70F0C\n\
-_080D39F4: .4byte gBattleAnimBackgroundImage_Surf\n\
-_080D39F8: .4byte gBattleAnimArgs\n\
-_080D39FC: .4byte gBattleAnimBackgroundPalette_Surf\n\
-_080D3A00:\n\
- ldr r0, _080D3A78 @ =gBattleAnimBackgroundImageMuddyWater_Pal\n\
- mov r1, sp\n\
- ldrb r1, [r1, 0x8]\n\
- lsls r1, 4\n\
- movs r2, 0x20\n\
- bl LoadCompressedPalette\n\
-_080D3A0E:\n\
- ldr r0, _080D3A7C @ =sub_80D3D68\n\
- ldr r4, _080D3A80 @ =gTasks\n\
- mov r2, r10\n\
- lsls r5, r2, 2\n\
- adds r1, r5, r2\n\
- lsls r1, 3\n\
- adds r6, r1, r4\n\
- ldrb r1, [r6, 0x7]\n\
- adds r1, 0x1\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- bl CreateTask\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r8, r0\n\
- movs r3, 0\n\
- mov r9, r3\n\
- mov r0, r8\n\
- strh r0, [r6, 0x26]\n\
- mov r1, r8\n\
- lsls r0, r1, 2\n\
- add r0, r8\n\
- lsls r0, 3\n\
- adds r7, r0, r4\n\
- mov r2, r9\n\
- strh r2, [r7, 0x8]\n\
- movs r0, 0x80\n\
- lsls r0, 5\n\
- strh r0, [r7, 0xA]\n\
- strh r0, [r7, 0xC]\n\
- bl IsContest\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- cmp r4, 0\n\
- beq _080D3A94\n\
- ldr r3, _080D3A84 @ =0x0000ffb0\n\
- adds r0, r3, 0\n\
- ldr r1, _080D3A88 @ =gBattle_BG1_X\n\
- strh r0, [r1]\n\
- ldr r2, _080D3A8C @ =0x0000ffd0\n\
- adds r0, r2, 0\n\
- ldr r3, _080D3A90 @ =gBattle_BG1_Y\n\
- strh r0, [r3]\n\
- movs r0, 0x2\n\
- strh r0, [r6, 0x8]\n\
- movs r0, 0x1\n\
- strh r0, [r6, 0xA]\n\
- mov r0, r9\n\
- strh r0, [r7, 0xE]\n\
- b _080D3AEE\n\
- .align 2, 0\n\
-_080D3A78: .4byte gBattleAnimBackgroundImageMuddyWater_Pal\n\
-_080D3A7C: .4byte sub_80D3D68\n\
-_080D3A80: .4byte gTasks\n\
-_080D3A84: .4byte 0x0000ffb0\n\
-_080D3A88: .4byte gBattle_BG1_X\n\
-_080D3A8C: .4byte 0x0000ffd0\n\
-_080D3A90: .4byte gBattle_BG1_Y\n\
-_080D3A94:\n\
- ldr r0, _080D3AC4 @ =gBattleAnimAttacker\n\
- ldrb r0, [r0]\n\
- bl GetBattlerSide\n\
- lsls r0, 24\n\
- lsrs r1, r0, 24\n\
- cmp r1, 0x1\n\
- bne _080D3AD8\n\
- ldr r2, _080D3AC8 @ =0x0000ff20\n\
- adds r0, r2, 0\n\
- ldr r3, _080D3ACC @ =gBattle_BG1_X\n\
- strh r0, [r3]\n\
- movs r2, 0x80\n\
- lsls r2, 1\n\
- adds r0, r2, 0\n\
- ldr r3, _080D3AD0 @ =gBattle_BG1_Y\n\
- strh r0, [r3]\n\
- movs r0, 0x2\n\
- strh r0, [r6, 0x8]\n\
- ldr r0, _080D3AD4 @ =0x0000ffff\n\
- strh r0, [r6, 0xA]\n\
- strh r1, [r7, 0xE]\n\
- b _080D3AEE\n\
- .align 2, 0\n\
-_080D3AC4: .4byte gBattleAnimAttacker\n\
-_080D3AC8: .4byte 0x0000ff20\n\
-_080D3ACC: .4byte gBattle_BG1_X\n\
-_080D3AD0: .4byte gBattle_BG1_Y\n\
-_080D3AD4: .4byte 0x0000ffff\n\
-_080D3AD8:\n\
- ldr r0, _080D3B1C @ =gBattle_BG1_X\n\
- strh r4, [r0]\n\
- ldr r1, _080D3B20 @ =0x0000ffd0\n\
- adds r0, r1, 0\n\
- ldr r2, _080D3B24 @ =gBattle_BG1_Y\n\
- strh r0, [r2]\n\
- ldr r0, _080D3B28 @ =0x0000fffe\n\
- strh r0, [r6, 0x8]\n\
- movs r0, 0x1\n\
- strh r0, [r6, 0xA]\n\
- strh r4, [r7, 0xE]\n\
-_080D3AEE:\n\
- ldr r1, _080D3B2C @ =REG_BG1HOFS\n\
- ldr r3, _080D3B1C @ =gBattle_BG1_X\n\
- ldrh r0, [r3]\n\
- strh r0, [r1]\n\
- adds r1, 0x2\n\
- ldr r2, _080D3B24 @ =gBattle_BG1_Y\n\
- ldrh r0, [r2]\n\
- strh r0, [r1]\n\
- ldr r1, _080D3B30 @ =gTasks\n\
- mov r3, r8\n\
- lsls r0, r3, 2\n\
- add r0, r8\n\
- lsls r0, 3\n\
- adds r2, r0, r1\n\
- movs r3, 0xE\n\
- ldrsh r0, [r2, r3]\n\
- cmp r0, 0\n\
- bne _080D3B34\n\
- movs r0, 0x30\n\
- strh r0, [r2, 0x10]\n\
- movs r0, 0x70\n\
- b _080D3B38\n\
- .align 2, 0\n\
-_080D3B1C: .4byte gBattle_BG1_X\n\
-_080D3B20: .4byte 0x0000ffd0\n\
-_080D3B24: .4byte gBattle_BG1_Y\n\
-_080D3B28: .4byte 0x0000fffe\n\
-_080D3B2C: .4byte REG_BG1HOFS\n\
-_080D3B30: .4byte gTasks\n\
-_080D3B34:\n\
- movs r0, 0\n\
- strh r0, [r2, 0x10]\n\
-_080D3B38:\n\
- strh r0, [r2, 0x12]\n\
- mov r2, r10\n\
- adds r0, r5, r2\n\
- lsls r0, 3\n\
- adds r0, r1\n\
- movs r1, 0x1\n\
- strh r1, [r0, 0x14]\n\
- ldr r1, _080D3B5C @ =sub_80D3B60\n\
- str r1, [r0]\n\
- add sp, 0x14\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080D3B5C: .4byte sub_80D3B60\n\
- .syntax divided\n");
+ struct Struct_sub_8078914 subStruct;
+ u8 taskId2;
+ u16 *BGptrX = &gBattle_BG1_X;
+ u16 *BGptrY = &gBattle_BG1_Y;
+ vu8 cpuDelay; // explanation below
+
+ REG_BLDCNT = BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL;
+ REG_BLDALPHA = 0x1000;
+ REG_BG1CNT_BITFIELD.priority = 1;
+ REG_BG1CNT_BITFIELD.screenSize = 1;
+ sub_8078914(&subStruct);
+
+ // This is gone in FireRed and Emerald.
+ Dma3FillLarge32_(0, subStruct.field_0, 0x2000); // !
+ /*
+ Many games use wasteful NOPs; some of which are
+ even moreso than regular ones. This is so that
+ hardware operations can finish.
+
+ This is just an example. Also, this is apparently
+ not a macro, as making it a macro results in a
+ NONMATCHING.
+ */
+ cpuDelay = 0; // stall the CPU
+ cpuDelay = 0; // stall the CPU
+ Dma3FillLarge32_(0, subStruct.field_4, 0x1000); // !
+
+ if (!IsContest())
+ {
+ REG_BG1CNT_BITFIELD.charBaseBlock = 1;
+ if (GetBattlerSide(gBattleAnimAttacker) == 1)
+ LZDecompressVram(&gUnknown_08E70968, subStruct.field_4);
+ else
+ LZDecompressVram(&gUnknown_08E70C38, subStruct.field_4);
+ }
+ else
+ {
+ LZDecompressVram(&gUnknown_08E70F0C, subStruct.field_4);
+ sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 1);
+ }
+ LZDecompressVram(&gBattleAnimBackgroundImage_Surf, subStruct.field_0);
+ if (gBattleAnimArgs[0] == 0)
+ LoadCompressedPalette(&gBattleAnimBackgroundPalette_Surf, 16 * subStruct.field_8, 32);
+ else
+ LoadCompressedPalette(&gBattleAnimBackgroundImageMuddyWater_Pal, 16 * subStruct.field_8, 32);
+ taskId2 = CreateTask(sub_80D3D68, gTasks[taskId].priority + 1);
+ gTasks[taskId].data[15] = taskId2;
+ gTasks[taskId2].data[0] = 0;
+ gTasks[taskId2].data[1] = 0x1000;
+ gTasks[taskId2].data[2] = 0x1000;
+ if (IsContest())
+ {
+ *BGptrX = -80;
+ *BGptrY = -48;
+ gTasks[taskId].data[0] = 2;
+ gTasks[taskId].data[1] = 1;
+ gTasks[taskId2].data[3] = 0;
+ }
+ else if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
+ {
+ *BGptrX = -224;
+ *BGptrY = 256;
+ gTasks[taskId].data[0] = 2;
+ gTasks[taskId].data[1] = -1;
+ gTasks[taskId2].data[3] = 1;
+ }
+ else
+ {
+ *BGptrX = 0;
+ *BGptrY = -48;
+ gTasks[taskId].data[0] = -2;
+ gTasks[taskId].data[1] = 1;
+ gTasks[taskId2].data[3] = 0;
+ }
+ REG_BG1HOFS = *BGptrX;
+ REG_BG1VOFS = *BGptrY;
+ if(gTasks[taskId2].data[3] == 0)
+ {
+ gTasks[taskId2].data[4] = 48;
+ gTasks[taskId2].data[5] = 112;
+ }
+ else
+ {
+ gTasks[taskId2].data[4] = 0;
+ gTasks[taskId2].data[5] = 0;
+ }
+ gTasks[taskId].data[6] = 1;
+ gTasks[taskId].func = sub_80D3B60;
}
#ifdef NONMATCHING
void sub_80D3B60(u8 taskId)
{
struct Struct_sub_8078914 unk;
+
+ vu8 cpuDelay; // yet again
u8 i;
u16 rgbBuffer;
u16 *BGptrX = &gBattle_BG1_X;
@@ -609,6 +387,7 @@ void sub_80D3B60(u8 taskId)
}
if (++gTasks[taskId].data[6] > 1)
{
+ // there is some weird math going on here
gTasks[taskId].data[6] = 0;
unkUse = ++gTasks[taskId].data[3];
if (unkUse <= 13)
@@ -624,8 +403,20 @@ void sub_80D3B60(u8 taskId)
}
if (!(gTasks[gTasks[taskId].data[15]].data[1] & 0x1F))
{
- gTasks[taskId].data[0] = gTasks[gTasks[taskId].data[15]].data[1] & 0x1F;
- gTasks[taskId].func = sub_80D3D68;
+ Dma3FillLarge32_(0, unk.field_0, 0x2000); // !
+ cpuDelay = 0; // stall the CPU
+ cpuDelay = 0; // stall the CPU
+ Dma3FillLarge32_(0, unk.field_4, 0x1000); // !
+ if (!IsContest)
+ REG_BG1CNT_BITFIELD.charBaseBlock = 1;
+ *BGptrX = 0;
+ *BGptrY = 0;
+
+ REG_BLDCNT = 0;
+ REG_BLDALPHA = 0;
+
+ gTasks[gTasks[taskId].data[15]].data[15] = 0xffff;
+ DestroyAnimVisualTask(taskId);
}
}
#else
@@ -882,44 +673,35 @@ _080D3D32:\n\
}
#endif
-#ifdef NONMATCHING
void sub_80D3D68(u8 taskId)
{
s16 i;
struct ScanlineEffectParams params;
struct Task *task = &gTasks[taskId];
- // u16 *scanlineBuffer;
switch (task->data[0])
{
case 0:
for (i = 0; i < task->data[4]; i++)
{
- /* scanlineBuffer = &gScanlineEffectRegBuffers[0][i];
- *(u16 *)(&gScanlineEffect) = task->data[2];
- *scanlineBuffer = task->data[2] & -1; */
- gScanlineEffectRegBuffers[1][i] = task->data[2];
- gScanlineEffectRegBuffers[0][i] = (u16)((int)(task->data[2] & 0xFFFF));
+ /* variable initialization isn't literal to ASM */
+ gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[2];
}
for (i = task->data[4]; i < task->data[5]; i++)
{
- gScanlineEffectRegBuffers[1][i] = task->data[1];
- gScanlineEffectRegBuffers[0][i] = (u16)((int)(task->data[1] & 0xFFFF));
+ gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[1];
}
for (i = task->data[5]; i < 160; i++)
{
- gScanlineEffectRegBuffers[1][i] = task->data[2];
- gScanlineEffectRegBuffers[0][i] = (u16)((int)(task->data[2] & 0xFFFF));
+ gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[2];
}
if (task->data[4] == 0)
{
- gScanlineEffectRegBuffers[1][i] = task->data[1];
- gScanlineEffectRegBuffers[0][i] = task->data[1];
+ gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[1];
}
else
{
- gScanlineEffectRegBuffers[1][i] = task->data[2];
- gScanlineEffectRegBuffers[0][i] = task->data[2];
+ gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[2];
}
params.dmaDest = (vu16 *)REG_ADDR_BLDALPHA;
params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
@@ -975,391 +757,6 @@ void sub_80D3D68(u8 taskId)
break;
}
}
-#else
-NAKED
-void sub_80D3D68(u8 taskId)
-{
- asm_unified("push {r4-r7,lr}\n\
- sub sp, 0xC\n\
- lsls r0, 24\n\
- lsrs r7, r0, 24\n\
- lsls r0, r7, 2\n\
- adds r0, r7\n\
- lsls r0, 3\n\
- ldr r1, =gTasks\n\
- adds r4, r0, r1\n\
- movs r1, 0x8\n\
- ldrsh r0, [r4, r1]\n\
- cmp r0, 0x1\n\
- bne _080D3D84\n\
- b _080D3EBC\n\
-_080D3D84:\n\
- cmp r0, 0x1\n\
- bgt _080D3D94\n\
- cmp r0, 0\n\
- beq _080D3D9C\n\
- b _080D4032\n\
- .align 2, 0\n\
- .pool\n\
-_080D3D94:\n\
- cmp r0, 0x2\n\
- bne _080D3D9A\n\
- b _080D3F88\n\
-_080D3D9A:\n\
- b _080D4032\n\
-_080D3D9C:\n\
- movs r3, 0\n\
- movs r2, 0x10\n\
- ldrsh r0, [r4, r2]\n\
- ldr r1, =gScanlineEffectRegBuffers\n\
- mov r12, r1\n\
- cmp r3, r0\n\
- bge _080D3DDA\n\
- mov r7, r12\n\
- movs r5, 0xF0\n\
- lsls r5, 3\n\
- add r5, r12\n\
- ldr r6, =0x0000ffff\n\
-_080D3DB4:\n\
- lsls r2, r3, 16\n\
- asrs r2, 16\n\
- lsls r1, r2, 1\n\
- adds r3, r1, r7\n\
- adds r1, r5\n\
- ldrh r0, [r4, 0xC]\n\
- strh r0, [r1]\n\
- ldrh r1, [r4, 0xC]\n\
- adds r0, r6, 0\n\
- ands r0, r1\n\
- strh r0, [r3]\n\
- adds r2, 0x1\n\
- lsls r2, 16\n\
- lsrs r3, r2, 16\n\
- asrs r2, 16\n\
- movs r1, 0x10\n\
- ldrsh r0, [r4, r1]\n\
- cmp r2, r0\n\
- blt _080D3DB4\n\
-_080D3DDA:\n\
- ldrh r3, [r4, 0x10]\n\
- lsls r2, r3, 16\n\
- asrs r1, r2, 16\n\
- movs r3, 0x12\n\
- ldrsh r0, [r4, r3]\n\
- cmp r1, r0\n\
- bge _080D3E14\n\
- ldr r5, =gScanlineEffectRegBuffers\n\
- movs r0, 0xF0\n\
- lsls r0, 3\n\
- adds r6, r5, r0\n\
- ldr r7, =0x0000ffff\n\
-_080D3DF2:\n\
- asrs r2, 16\n\
- lsls r1, r2, 1\n\
- adds r3, r1, r5\n\
- adds r1, r6\n\
- ldrh r0, [r4, 0xA]\n\
- strh r0, [r1]\n\
- ldrh r1, [r4, 0xA]\n\
- adds r0, r7, 0\n\
- ands r0, r1\n\
- strh r0, [r3]\n\
- adds r2, 0x1\n\
- lsls r2, 16\n\
- asrs r1, r2, 16\n\
- movs r3, 0x12\n\
- ldrsh r0, [r4, r3]\n\
- cmp r1, r0\n\
- blt _080D3DF2\n\
-_080D3E14:\n\
- ldrh r3, [r4, 0x12]\n\
- lsls r2, r3, 16\n\
- asrs r0, r2, 16\n\
- cmp r0, 0x9F\n\
- bgt _080D3E4A\n\
- ldr r5, =gScanlineEffectRegBuffers\n\
- movs r0, 0xF0\n\
- lsls r0, 3\n\
- adds r6, r5, r0\n\
- ldr r7, =0x0000ffff\n\
-_080D3E28:\n\
- asrs r2, 16\n\
- lsls r1, r2, 1\n\
- adds r3, r1, r5\n\
- adds r1, r6\n\
- ldrh r0, [r4, 0xC]\n\
- strh r0, [r1]\n\
- ldrh r1, [r4, 0xC]\n\
- adds r0, r7, 0\n\
- ands r0, r1\n\
- strh r0, [r3]\n\
- adds r2, 0x1\n\
- lsls r2, 16\n\
- lsrs r3, r2, 16\n\
- lsls r2, r3, 16\n\
- asrs r0, r2, 16\n\
- cmp r0, 0x9F\n\
- ble _080D3E28\n\
-_080D3E4A:\n\
- movs r1, 0x10\n\
- ldrsh r0, [r4, r1]\n\
- cmp r0, 0\n\
- bne _080D3E74\n\
- lsls r0, r3, 16\n\
- asrs r0, 15\n\
- mov r3, r12\n\
- adds r2, r0, r3\n\
- movs r1, 0xF0\n\
- lsls r1, 3\n\
- add r1, r12\n\
- adds r0, r1\n\
- ldrh r1, [r4, 0xA]\n\
- strh r1, [r0]\n\
- ldrh r0, [r4, 0xA]\n\
- b _080D3E8A\n\
- .align 2, 0\n\
- .pool\n\
-_080D3E74:\n\
- lsls r0, r3, 16\n\
- asrs r0, 15\n\
- mov r1, r12\n\
- adds r2, r0, r1\n\
- movs r1, 0xF0\n\
- lsls r1, 3\n\
- add r1, r12\n\
- adds r0, r1\n\
- ldrh r1, [r4, 0xC]\n\
- strh r1, [r0]\n\
- ldrh r0, [r4, 0xC]\n\
-_080D3E8A:\n\
- strh r0, [r2]\n\
- ldr r0, =0x04000052\n\
- str r0, [sp]\n\
- ldr r0, =0xa2600001\n\
- str r0, [sp, 0x4]\n\
- mov r1, sp\n\
- movs r2, 0\n\
- movs r0, 0x1\n\
- strb r0, [r1, 0x8]\n\
- mov r0, sp\n\
- strb r2, [r0, 0x9]\n\
- ldr r0, [sp]\n\
- ldr r1, [sp, 0x4]\n\
- ldr r2, [sp, 0x8]\n\
- bl ScanlineEffect_SetParams\n\
- ldrh r0, [r4, 0x8]\n\
- adds r0, 0x1\n\
- strh r0, [r4, 0x8]\n\
- b _080D4032\n\
- .align 2, 0\n\
- .pool\n\
-_080D3EBC:\n\
- movs r2, 0xE\n\
- ldrsh r1, [r4, r2]\n\
- cmp r1, 0\n\
- bne _080D3ED4\n\
- ldrh r0, [r4, 0x10]\n\
- subs r0, 0x1\n\
- strh r0, [r4, 0x10]\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- bgt _080D3EE8\n\
- strh r1, [r4, 0x10]\n\
- b _080D3EE2\n\
-_080D3ED4:\n\
- ldrh r0, [r4, 0x12]\n\
- adds r0, 0x1\n\
- strh r0, [r4, 0x12]\n\
- lsls r0, 16\n\
- asrs r0, 16\n\
- cmp r0, 0x6F\n\
- ble _080D3EE8\n\
-_080D3EE2:\n\
- ldrh r0, [r4, 0x8]\n\
- adds r0, 0x1\n\
- strh r0, [r4, 0x8]\n\
-_080D3EE8:\n\
- movs r3, 0\n\
- movs r1, 0x10\n\
- ldrsh r0, [r4, r1]\n\
- cmp r3, r0\n\
- bge _080D3F1C\n\
- ldr r6, =gScanlineEffectRegBuffers\n\
- ldr r5, =gScanlineEffect\n\
-_080D3EF6:\n\
- lsls r1, r3, 16\n\
- asrs r1, 16\n\
- lsls r3, r1, 1\n\
- ldrb r2, [r5, 0x14]\n\
- lsls r0, r2, 4\n\
- subs r0, r2\n\
- lsls r0, 7\n\
- adds r3, r0\n\
- adds r3, r6\n\
- ldrh r0, [r4, 0xC]\n\
- strh r0, [r3]\n\
- adds r1, 0x1\n\
- lsls r1, 16\n\
- lsrs r3, r1, 16\n\
- asrs r1, 16\n\
- movs r2, 0x10\n\
- ldrsh r0, [r4, r2]\n\
- cmp r1, r0\n\
- blt _080D3EF6\n\
-_080D3F1C:\n\
- ldrh r3, [r4, 0x10]\n\
- lsls r2, r3, 16\n\
- asrs r1, r2, 16\n\
- movs r3, 0x12\n\
- ldrsh r0, [r4, r3]\n\
- cmp r1, r0\n\
- bge _080D3F50\n\
- ldr r6, =gScanlineEffectRegBuffers\n\
- ldr r5, =gScanlineEffect\n\
-_080D3F2E:\n\
- asrs r3, r2, 16\n\
- lsls r2, r3, 1\n\
- ldrb r1, [r5, 0x14]\n\
- lsls r0, r1, 4\n\
- subs r0, r1\n\
- lsls r0, 7\n\
- adds r2, r0\n\
- adds r2, r6\n\
- ldrh r0, [r4, 0xA]\n\
- strh r0, [r2]\n\
- adds r3, 0x1\n\
- lsls r2, r3, 16\n\
- asrs r1, r2, 16\n\
- movs r3, 0x12\n\
- ldrsh r0, [r4, r3]\n\
- cmp r1, r0\n\
- blt _080D3F2E\n\
-_080D3F50:\n\
- ldrh r3, [r4, 0x12]\n\
- lsls r1, r3, 16\n\
- asrs r0, r1, 16\n\
- cmp r0, 0x9F\n\
- bgt _080D4032\n\
- ldr r6, =gScanlineEffectRegBuffers\n\
- ldr r5, =gScanlineEffect\n\
-_080D3F5E:\n\
- asrs r3, r1, 16\n\
- lsls r2, r3, 1\n\
- ldrb r1, [r5, 0x14]\n\
- lsls r0, r1, 4\n\
- subs r0, r1\n\
- lsls r0, 7\n\
- adds r2, r0\n\
- adds r2, r6\n\
- ldrh r0, [r4, 0xC]\n\
- strh r0, [r2]\n\
- adds r3, 0x1\n\
- lsls r1, r3, 16\n\
- asrs r0, r1, 16\n\
- cmp r0, 0x9F\n\
- ble _080D3F5E\n\
- b _080D4032\n\
- .align 2, 0\n\
- .pool\n\
-_080D3F88:\n\
- movs r3, 0\n\
- movs r1, 0x10\n\
- ldrsh r0, [r4, r1]\n\
- cmp r3, r0\n\
- bge _080D3FBC\n\
- ldr r6, =gScanlineEffectRegBuffers\n\
- ldr r5, =gScanlineEffect\n\
-_080D3F96:\n\
- lsls r1, r3, 16\n\
- asrs r1, 16\n\
- lsls r3, r1, 1\n\
- ldrb r2, [r5, 0x14]\n\
- lsls r0, r2, 4\n\
- subs r0, r2\n\
- lsls r0, 7\n\
- adds r3, r0\n\
- adds r3, r6\n\
- ldrh r0, [r4, 0xC]\n\
- strh r0, [r3]\n\
- adds r1, 0x1\n\
- lsls r1, 16\n\
- lsrs r3, r1, 16\n\
- asrs r1, 16\n\
- movs r2, 0x10\n\
- ldrsh r0, [r4, r2]\n\
- cmp r1, r0\n\
- blt _080D3F96\n\
-_080D3FBC:\n\
- ldrh r3, [r4, 0x10]\n\
- lsls r2, r3, 16\n\
- asrs r1, r2, 16\n\
- movs r3, 0x12\n\
- ldrsh r0, [r4, r3]\n\
- cmp r1, r0\n\
- bge _080D3FF0\n\
- ldr r6, =gScanlineEffectRegBuffers\n\
- ldr r5, =gScanlineEffect\n\
-_080D3FCE:\n\
- asrs r3, r2, 16\n\
- lsls r2, r3, 1\n\
- ldrb r1, [r5, 0x14]\n\
- lsls r0, r1, 4\n\
- subs r0, r1\n\
- lsls r0, 7\n\
- adds r2, r0\n\
- adds r2, r6\n\
- ldrh r0, [r4, 0xA]\n\
- strh r0, [r2]\n\
- adds r3, 0x1\n\
- lsls r2, r3, 16\n\
- asrs r1, r2, 16\n\
- movs r3, 0x12\n\
- ldrsh r0, [r4, r3]\n\
- cmp r1, r0\n\
- blt _080D3FCE\n\
-_080D3FF0:\n\
- ldrh r3, [r4, 0x12]\n\
- lsls r1, r3, 16\n\
- asrs r0, r1, 16\n\
- cmp r0, 0x9F\n\
- bgt _080D401C\n\
- ldr r6, =gScanlineEffectRegBuffers\n\
- ldr r5, =gScanlineEffect\n\
-_080D3FFE:\n\
- asrs r3, r1, 16\n\
- lsls r2, r3, 1\n\
- ldrb r1, [r5, 0x14]\n\
- lsls r0, r1, 4\n\
- subs r0, r1\n\
- lsls r0, 7\n\
- adds r2, r0\n\
- adds r2, r6\n\
- ldrh r0, [r4, 0xC]\n\
- strh r0, [r2]\n\
- adds r3, 0x1\n\
- lsls r1, r3, 16\n\
- asrs r0, r1, 16\n\
- cmp r0, 0x9F\n\
- ble _080D3FFE\n\
-_080D401C:\n\
- movs r0, 0x26\n\
- ldrsh r1, [r4, r0]\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- cmp r1, r0\n\
- bne _080D4032\n\
- bl ScanlineEffect_Stop\n\
- adds r0, r7, 0\n\
- bl DestroyTask\n\
-_080D4032:\n\
- add sp, 0xC\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
- .pool\n");
-}
-#endif
void sub_80D4044(struct Sprite *sprite)
{
@@ -1892,17 +1289,32 @@ void sub_80D4CEC(struct Sprite *sprite)
sprite->data[0]++;
}
-#ifdef NONMATCHING
-void sub_80D4D64(struct Sprite *sprite, int xDiff, int yDiff)
+void sub_80D4D64(struct Sprite *sprite, s32 xDiff, s32 yDiff)
{
- s16 something = sprite->data[0] / 2;
- s16 combinedX = sprite->pos1.x + sprite->pos2.x;
- s16 combinedY = sprite->pos1.y + sprite->pos2.y;
- s16 randomSomethingY = yDiff + (Random() % 10) - 5;
- s16 randomSomethingX = -xDiff + (Random() % 10) - 5;
s16 i;
u8 spriteId;
+ s16 combinedX;
+ s16 combinedY;
+ s16 something;
+ s16 randomSomethingX;
+ s16 randomSomethingY;
+
+ something = sprite->data[0] / 2;
+ // regalloc acts strange here...
+ combinedX = sprite->pos1.x + sprite->pos2.x;
+ combinedY = sprite->pos1.y + sprite->pos2.y;
+
+ // ...then goes back to normal right here.
+ // Nothing but this appears to reproduce the behavior.
+ if (xDiff) // yDiff works too, but not sprite.
+ {
+ u8 unk = -unk; // this can be any sort of negation
+ }
+
+ randomSomethingY = yDiff + (Random() % 10) - 5;
+ randomSomethingX = -xDiff + (Random() % 10) - 5;
+
for (i = 0; i <= 0; i++)
{
spriteId = CreateSprite(&gSpriteTemplate_83D9420, combinedX, combinedY + something, 130);
@@ -1926,184 +1338,3 @@ void sub_80D4D64(struct Sprite *sprite, int xDiff, int yDiff)
gSprites[spriteId].data[2] = randomSomethingX;
}
}
-#else
-NAKED
-void sub_80D4D64(struct Sprite *sprite, int xDiff, int yDiff)
-{
- asm_unified("push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x18\n\
- adds r4, r1, 0\n\
- adds r5, r2, 0\n\
- movs r2, 0x2E\n\
- ldrsh r1, [r0, r2]\n\
- lsrs r2, r1, 31\n\
- adds r1, r2\n\
- lsls r1, 15\n\
- lsrs r1, 16\n\
- str r1, [sp]\n\
- ldrh r1, [r0, 0x24]\n\
- ldrh r3, [r0, 0x20]\n\
- adds r1, r3\n\
- lsls r1, 16\n\
- lsrs r1, 16\n\
- mov r8, r1\n\
- ldrh r1, [r0, 0x26]\n\
- ldrh r0, [r0, 0x22]\n\
- adds r1, r0\n\
- lsls r1, 16\n\
- lsrs r1, 16\n\
- mov r10, r1\n\
- bl Random\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r1, 0xA\n\
- bl __umodsi3\n\
- adds r0, r5, r0\n\
- subs r0, 0x5\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- mov r9, r0\n\
- bl Random\n\
- negs r4, r4\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r1, 0xA\n\
- bl __umodsi3\n\
- adds r4, r0\n\
- subs r4, 0x5\n\
- lsls r4, 16\n\
- lsrs r7, r4, 16\n\
- movs r6, 0\n\
- mov r0, r8\n\
- lsls r0, 16\n\
- mov r8, r0\n\
- mov r1, r10\n\
- lsls r1, 16\n\
- str r1, [sp, 0xC]\n\
- ldr r2, [sp]\n\
- lsls r2, 16\n\
- str r2, [sp, 0x10]\n\
- asrs r1, 16\n\
- lsls r0, r7, 16\n\
- asrs r5, r0, 16\n\
- str r0, [sp, 0x14]\n\
- negs r3, r5\n\
- str r3, [sp, 0x4]\n\
- asrs r0, r2, 16\n\
- adds r1, r0\n\
- lsls r1, 16\n\
- mov r10, r1\n\
-_080D4DF2:\n\
- ldr r0, =gSpriteTemplate_83D9420\n\
- mov r2, r8\n\
- asrs r1, r2, 16\n\
- mov r3, r10\n\
- asrs r2, r3, 16\n\
- movs r3, 0x82\n\
- bl CreateSprite\n\
- lsls r0, 24\n\
- lsrs r2, r0, 24\n\
- ldr r1, =gSprites\n\
- lsls r0, r2, 4\n\
- adds r0, r2\n\
- lsls r0, 2\n\
- adds r4, r0, r1\n\
- movs r0, 0x14\n\
- strh r0, [r4, 0x2E]\n\
- mov r0, r9\n\
- strh r0, [r4, 0x30]\n\
- ldr r0, =gBattleAnimAttacker\n\
- ldrb r0, [r0]\n\
- bl GetBattlerSubpriority\n\
- subs r0, 0x1\n\
- adds r1, r4, 0\n\
- adds r1, 0x43\n\
- strb r0, [r1]\n\
- cmp r5, 0\n\
- bge _080D4E40\n\
- mov r1, sp\n\
- ldrh r1, [r1, 0x4]\n\
- strh r1, [r4, 0x32]\n\
- b _080D4E42\n\
- .align 2, 0\n\
- .pool\n\
-_080D4E40:\n\
- strh r7, [r4, 0x32]\n\
-_080D4E42:\n\
- lsls r0, r6, 16\n\
- movs r2, 0x80\n\
- lsls r2, 9\n\
- adds r0, r2\n\
- lsrs r6, r0, 16\n\
- cmp r0, 0\n\
- ble _080D4DF2\n\
- movs r6, 0\n\
- ldr r3, [sp, 0xC]\n\
- asrs r1, r3, 16\n\
- ldr r0, [sp, 0x14]\n\
- asrs r5, r0, 16\n\
- negs r2, r5\n\
- str r2, [sp, 0x8]\n\
- ldr r3, [sp, 0x10]\n\
- asrs r0, r3, 16\n\
- subs r1, r0\n\
- lsls r1, 16\n\
- mov r10, r1\n\
-_080D4E68:\n\
- ldr r0, =gSpriteTemplate_83D9420\n\
- mov r2, r8\n\
- asrs r1, r2, 16\n\
- mov r3, r10\n\
- asrs r2, r3, 16\n\
- movs r3, 0x82\n\
- bl CreateSprite\n\
- lsls r0, 24\n\
- lsrs r2, r0, 24\n\
- ldr r1, =gSprites\n\
- lsls r0, r2, 4\n\
- adds r0, r2\n\
- lsls r0, 2\n\
- adds r4, r0, r1\n\
- movs r0, 0x14\n\
- strh r0, [r4, 0x2E]\n\
- mov r0, r9\n\
- strh r0, [r4, 0x30]\n\
- ldr r0, =gBattleAnimAttacker\n\
- ldrb r0, [r0]\n\
- bl GetBattlerSubpriority\n\
- subs r0, 0x1\n\
- adds r1, r4, 0\n\
- adds r1, 0x43\n\
- strb r0, [r1]\n\
- cmp r5, 0\n\
- ble _080D4EB8\n\
- mov r1, sp\n\
- ldrh r1, [r1, 0x8]\n\
- strh r1, [r4, 0x32]\n\
- b _080D4EBA\n\
- .align 2, 0\n\
- .pool\n\
-_080D4EB8:\n\
- strh r7, [r4, 0x32]\n\
-_080D4EBA:\n\
- lsls r0, r6, 16\n\
- movs r2, 0x80\n\
- lsls r2, 9\n\
- adds r0, r2\n\
- lsrs r6, r0, 16\n\
- cmp r0, 0\n\
- ble _080D4E68\n\
- add sp, 0x18\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n");
-}
-#endif