Some nonmatchings

This commit is contained in:
DizzyEggg 2019-04-11 12:05:56 +02:00 committed by huderlem
parent 5bc640da9b
commit 518f9c0638
5 changed files with 331 additions and 1725 deletions

508
src/ice.c
View File

@ -47,7 +47,7 @@ void AnimIceBallParticle(struct Sprite *);
void AnimTask_Haze2(u8);
void AnimTask_OverlayFogTiles(u8);
void AnimTask_Hail2(u8);
bool8 GenerateHailParticle(u8, u8, u8, u8);
bool8 GenerateHailParticle(u8 hailStructId, u8 affineAnimNum, u8 taskId, u8 c);
const union AnimCmd gUnknown_08595A48[] =
{
@ -522,37 +522,33 @@ const struct SpriteTemplate gUnknown_08595DFC =
.callback = InitIceBallParticle,
};
// probably unused
#ifdef NONMATCHING
static void sub_810B6C4(struct Sprite *sprite)
{
s16 targetX, targetY, attackerX, attackerY;
s16 i;
sprite->oam.tileNum += 7;
targetX = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
targetY = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
attackerX = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
attackerY = 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_80A64EC(sprite);
while ((targetX >= -32 && targetX <= 272) && (targetY >= -32 && targetY <= 192))
{
targetX += sprite->data[1];
targetY += sprite->data[2];
}
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];
while ((attackerX >= -32 && attackerX <= 272) && (attackerY >= -32 && attackerY <= 192))
{
attackerX += sprite->data[1];
attackerY += 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];
@ -565,195 +561,6 @@ static void sub_810B6C4(struct Sprite *sprite)
sprite->data[4] = gBattleAnimArgs[6];
sprite->callback = sub_810B848;
}
#else
NAKED
static void sub_810B6C4(struct Sprite *sprite)
{
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, 0x4\n\
adds r5, r0, 0\n\
ldrh r2, [r5, 0x4]\n\
lsls r1, r2, 22\n\
lsrs r1, 22\n\
adds r1, 0x7\n\
ldr r3, =0x000003ff\n\
adds r0, r3, 0\n\
ands r1, r0\n\
ldr r0, =0xfffffc00\n\
ands r0, r2\n\
orrs r0, r1\n\
strh r0, [r5, 0x4]\n\
ldr r4, =gBattleAnimTarget\n\
ldrb r0, [r4]\n\
movs r1, 0x2\n\
bl GetBattlerSpriteCoord\n\
lsls r0, 24\n\
lsrs r0, 24\n\
mov r9, r0\n\
ldrb r0, [r4]\n\
movs r1, 0x3\n\
bl GetBattlerSpriteCoord\n\
lsls r0, 24\n\
lsrs r0, 24\n\
mov r8, r0\n\
ldr r4, =gBattleAnimAttacker\n\
ldrb r0, [r4]\n\
movs r1, 0x2\n\
bl GetBattlerSpriteCoord\n\
lsls r0, 24\n\
lsrs r3, r0, 24\n\
ldrb r0, [r4]\n\
movs r1, 0x3\n\
str r3, [sp]\n\
bl GetBattlerSpriteCoord\n\
lsls r0, 24\n\
lsrs r6, r0, 24\n\
ldr r1, =gBattleAnimArgs\n\
ldrh r0, [r1, 0x8]\n\
strh r0, [r5, 0x2E]\n\
ldrh r0, [r1]\n\
ldr r3, [sp]\n\
adds r0, r3\n\
strh r0, [r5, 0x30]\n\
ldrh r0, [r1, 0x4]\n\
mov r4, r9\n\
adds r0, r4, r0\n\
strh r0, [r5, 0x32]\n\
ldrh r0, [r1, 0x2]\n\
adds r0, r6\n\
strh r0, [r5, 0x34]\n\
ldrh r0, [r1, 0x6]\n\
mov r7, r8\n\
adds r0, r7, r0\n\
strh r0, [r5, 0x36]\n\
adds r0, r5, 0\n\
bl sub_80A64EC\n\
adds r4, 0x20\n\
movs r0, 0x98\n\
lsls r0, 1\n\
mov r12, r0\n\
ldr r3, [sp]\n\
cmp r4, r12\n\
bhi _0810B79E\n\
adds r0, r7, 0\n\
adds r0, 0x20\n\
ldrh r1, [r5, 0x30]\n\
ldrh r2, [r5, 0x32]\n\
cmp r0, 0xE0\n\
bhi _0810B79E\n\
adds r4, r1, 0\n\
mov r10, r12\n\
_0810B76A:\n\
mov r7, r9\n\
lsls r1, r7, 16\n\
asrs r1, 16\n\
adds r1, r4\n\
lsls r1, 16\n\
mov r7, r8\n\
lsls r0, r7, 16\n\
asrs r0, 16\n\
adds r0, r2\n\
lsls r0, 16\n\
lsrs r0, 16\n\
mov r8, r0\n\
lsrs r0, r1, 16\n\
mov r9, r0\n\
movs r7, 0x80\n\
lsls r7, 14\n\
adds r1, r7\n\
lsrs r1, 16\n\
cmp r1, r10\n\
bhi _0810B79E\n\
mov r1, r8\n\
lsls r0, r1, 16\n\
adds r0, r7\n\
lsrs r0, 16\n\
cmp r0, 0xE0\n\
bls _0810B76A\n\
_0810B79E:\n\
ldrh r0, [r5, 0x30]\n\
negs r7, r0\n\
strh r7, [r5, 0x30]\n\
ldrh r0, [r5, 0x32]\n\
negs r4, r0\n\
strh r4, [r5, 0x32]\n\
lsls r0, r3, 16\n\
movs r1, 0x80\n\
lsls r1, 14\n\
adds r0, r1\n\
lsrs r0, 16\n\
movs r2, 0x98\n\
lsls r2, 1\n\
mov r12, r2\n\
ldr r1, =gBattleAnimArgs\n\
mov r10, r1\n\
cmp r0, r12\n\
bhi _0810B80A\n\
lsls r1, r6, 16\n\
movs r2, 0x80\n\
lsls r2, 14\n\
adds r0, r1, r2\n\
b _0810B802\n\
.pool\n\
_0810B7E0:\n\
lsls r1, r3, 16\n\
asrs r1, 16\n\
adds r1, r7\n\
lsls r1, 16\n\
asrs r0, r2, 16\n\
adds r0, r4\n\
lsls r0, 16\n\
lsrs r6, r0, 16\n\
lsrs r3, r1, 16\n\
movs r0, 0x80\n\
lsls r0, 14\n\
adds r1, r0\n\
lsrs r1, 16\n\
cmp r1, r12\n\
bhi _0810B80A\n\
lsls r1, r6, 16\n\
adds r0, r1, r0\n\
_0810B802:\n\
lsrs r0, 16\n\
adds r2, r1, 0\n\
cmp r0, 0xE0\n\
bls _0810B7E0\n\
_0810B80A:\n\
strh r3, [r5, 0x20]\n\
strh r6, [r5, 0x22]\n\
mov r1, r10\n\
ldrh r0, [r1, 0x8]\n\
strh r0, [r5, 0x2E]\n\
strh r3, [r5, 0x30]\n\
mov r2, r9\n\
strh r2, [r5, 0x32]\n\
strh r6, [r5, 0x34]\n\
mov r3, r8\n\
strh r3, [r5, 0x36]\n\
adds r0, r5, 0\n\
bl sub_80A64EC\n\
mov r7, r10\n\
ldrh r0, [r7, 0xA]\n\
strh r0, [r5, 0x34]\n\
ldrh r0, [r7, 0xC]\n\
strh r0, [r5, 0x36]\n\
ldr r0, =sub_810B848\n\
str r0, [r5, 0x1C]\n\
add sp, 0x4\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\
.pool\n");
}
#endif
void sub_810B848(struct Sprite *sprite)
{
@ -797,14 +604,14 @@ void AnimIcePunchSwirlingParticle(struct Sprite *sprite)
void AnimIceBeamParticle(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, TRUE);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
sprite->data[2] -= gBattleAnimArgs[2];
else
sprite->data[2] += gBattleAnimArgs[2];
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
sprite->data[0] = gBattleAnimArgs[4];
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
sprite->callback = StartAnimLinearTranslation;
@ -863,8 +670,8 @@ void AnimSwirlingSnowball_Step1(struct Sprite *sprite)
if (!gBattleAnimArgs[5])
{
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
}
else
{
@ -983,8 +790,8 @@ void AnimMoveParticleBeyondTarget(struct Sprite *sprite)
if (!gBattleAnimArgs[7])
{
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
}
else
{
@ -1274,8 +1081,8 @@ void AnimTask_Haze2(u8 taskId)
// arg 5: ??? unknown (seems to vibrate target mon somehow)
void AnimThrowMistBall(struct Sprite *sprite)
{
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
sprite->callback = TranslateAnimSpriteToTargetMonLocation;
}
@ -1380,7 +1187,7 @@ void InitPoisonGasCloudAnim(struct Sprite *sprite)
{
sprite->data[0] = gBattleAnimArgs[0];
if (GetBattlerSpriteCoord(gBattleAnimAttacker, 2) < GetBattlerSpriteCoord(gBattleAnimTarget, 2))
if (GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) < GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2))
sprite->data[7] = 0x8000;
if (!(gBattlerPositions[gBattleAnimTarget] & 1))
@ -1394,22 +1201,22 @@ void InitPoisonGasCloudAnim(struct Sprite *sprite)
sprite->data[6] = 1;
}
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
if (gBattleAnimArgs[7])
{
sprite->data[1] = sprite->pos1.x + gBattleAnimArgs[1];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[3];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[3];
sprite->data[3] = sprite->pos1.y + gBattleAnimArgs[2];
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[4];
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[4];
sprite->data[7] |= GetBattlerSpriteBGPriority(gBattleAnimTarget) << 8;
}
else
{
sprite->data[1] = sprite->pos1.x + gBattleAnimArgs[1];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[3];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[3];
sprite->data[3] = sprite->pos1.y + gBattleAnimArgs[2];
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[4];
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[4];
sprite->data[7] |= GetBattlerSpriteBGPriority(gBattleAnimTarget) << 8;
}
@ -1441,7 +1248,7 @@ void MovePoisonGasCloud(struct Sprite *sprite)
if (sprite->data[0] <= 0)
{
sprite->data[0] = 80;
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
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;
@ -1575,238 +1382,63 @@ void AnimTask_Hail2(u8 taskId)
}
}
#ifdef NONMATCHING
bool8 GenerateHailParticle(u8 a, u8 b, u8 taskId, u8 c)
bool8 GenerateHailParticle(u8 hailStructId, u8 affineAnimNum, u8 taskId, u8 c)
{
bool8 possibleBool = FALSE;
// s8 unk = gUnknown_08595CB4[a].unk3;
const struct HailStruct *hailData = &gUnknown_08595CB4[a];
s8 unk = hailData->unk3;
u8 battler;
u8 id;
s16 battlerX, battlerY;
u8 spriteId;
// struct Sprite *sprite;
s16 spriteX;
bool8 possibleBool = FALSE;
s8 unk = gUnknown_08595CB4[hailStructId].unk3;
if (unk != 2)
{
battler = GetBattlerAtPosition(hailData->unk2);
if (IsBattlerSpriteVisible(battler))
id = GetBattlerAtPosition(gUnknown_08595CB4[hailStructId].unk2);
if (IsBattlerSpriteVisible(id))
{
possibleBool = TRUE;
battlerX = GetBattlerSpriteCoord(battler, 2);
battlerY = GetBattlerSpriteCoord(battler, 3);
battlerX = GetBattlerSpriteCoord(id, BATTLER_COORD_X_2);
battlerY = GetBattlerSpriteCoord(id, BATTLER_COORD_Y_PIC_OFFSET);
switch (unk)
{
case 0:
battlerX -= GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_WIDTH) / 6;
battlerY -= GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_HEIGHT) / 6;
break;
case 1:
battlerX += GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_WIDTH) / 6;
battlerY += GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_HEIGHT) / 6;
break;
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_08595CB4[hailStructId].unk0);
battlerY = (gUnknown_08595CB4[hailStructId].unk1);
}
}
else
{
battlerX = (hailData->unk0);
battlerY = (hailData->unk1);
battlerX = (gUnknown_08595CB4[hailStructId].unk0);
battlerY = (gUnknown_08595CB4[hailStructId].unk1);
}
spriteX = battlerX - ((battlerY + 8) / 2);
spriteId = CreateSprite(&gUnknown_08595D2C, spriteX, -8, 18);
if (spriteId == MAX_SPRITES)
id = CreateSprite(&gUnknown_08595D2C, spriteX, -8, 18);
if (id == MAX_SPRITES)
{
return FALSE;
// sprite = &gSprites[spriteId];
StartSpriteAffineAnim(&gSprites[spriteId], b);
gSprites[spriteId].data[0] = possibleBool;
gSprites[spriteId].data[3] = battlerX;
gSprites[spriteId].data[4] = battlerY;
gSprites[spriteId].data[5] = b;
gSprites[spriteId].data[6] = taskId;
gSprites[spriteId].data[7] = c;
return TRUE;
}
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;
}
}
#else
NAKED
bool8 GenerateHailParticle(u8 a, u8 b, u8 taskId, u8 c)
{
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, 0x8\n\
lsls r0, 24\n\
lsls r1, 24\n\
lsrs r1, 24\n\
mov r9, r1\n\
lsls r2, 24\n\
lsrs r2, 24\n\
str r2, [sp]\n\
lsls r3, 24\n\
lsrs r3, 24\n\
mov r10, r3\n\
movs r1, 0\n\
str r1, [sp, 0x4]\n\
ldr r1, =gUnknown_08595CB4\n\
lsrs r0, 22\n\
adds r4, r0, r1\n\
ldrb r0, [r4, 0x3]\n\
lsls r0, 24\n\
asrs r0, 28\n\
mov r8, r0\n\
cmp r0, 0x2\n\
beq _0810CAD0\n\
ldrh r0, [r4, 0x2]\n\
lsls r0, 20\n\
lsrs r0, 24\n\
bl GetBattlerAtPosition\n\
lsls r0, 24\n\
lsrs r5, r0, 24\n\
adds r0, r5, 0\n\
bl IsBattlerSpriteVisible\n\
lsls r0, 24\n\
cmp r0, 0\n\
beq _0810CAD0\n\
movs r0, 0x1\n\
str r0, [sp, 0x4]\n\
adds r0, r5, 0\n\
movs r1, 0x2\n\
bl GetBattlerSpriteCoord\n\
lsls r0, 24\n\
lsrs r7, r0, 24\n\
adds r0, r5, 0\n\
movs r1, 0x3\n\
bl GetBattlerSpriteCoord\n\
lsls r0, 24\n\
lsrs r6, r0, 24\n\
mov r1, r8\n\
cmp r1, 0\n\
beq _0810CA60\n\
cmp r1, 0x1\n\
beq _0810CA96\n\
b _0810CAE2\n\
.pool\n\
_0810CA60:\n\
adds r0, r5, 0\n\
movs r1, 0x1\n\
bl GetBattlerSpriteCoordAttr\n\
lsls r0, 16\n\
asrs r0, 16\n\
movs r1, 0x6\n\
bl __divsi3\n\
lsls r1, r7, 16\n\
asrs r1, 16\n\
subs r1, r0\n\
lsls r1, 16\n\
lsrs r7, r1, 16\n\
adds r0, r5, 0\n\
movs r1, 0\n\
bl GetBattlerSpriteCoordAttr\n\
lsls r0, 16\n\
asrs r0, 16\n\
movs r1, 0x6\n\
bl __divsi3\n\
lsls r1, r6, 16\n\
asrs r1, 16\n\
subs r1, r0\n\
b _0810CACA\n\
_0810CA96:\n\
adds r0, r5, 0\n\
movs r1, 0x1\n\
bl GetBattlerSpriteCoordAttr\n\
lsls r0, 16\n\
asrs r0, 16\n\
movs r1, 0x6\n\
bl __divsi3\n\
lsls r1, r7, 16\n\
asrs r1, 16\n\
adds r1, r0\n\
lsls r1, 16\n\
lsrs r7, r1, 16\n\
adds r0, r5, 0\n\
movs r1, 0\n\
bl GetBattlerSpriteCoordAttr\n\
lsls r0, 16\n\
asrs r0, 16\n\
movs r1, 0x6\n\
bl __divsi3\n\
lsls r1, r6, 16\n\
asrs r1, 16\n\
adds r1, r0\n\
_0810CACA:\n\
lsls r1, 16\n\
lsrs r6, r1, 16\n\
b _0810CAE2\n\
_0810CAD0:\n\
ldrh r0, [r4]\n\
lsls r0, 22\n\
asrs r0, 6\n\
lsrs r7, r0, 16\n\
ldr r0, [r4]\n\
lsls r0, 12\n\
asrs r0, 22\n\
lsls r0, 16\n\
lsrs r6, r0, 16\n\
_0810CAE2:\n\
lsls r0, r6, 16\n\
asrs r0, 16\n\
adds r0, 0x8\n\
lsrs r1, r0, 31\n\
adds r0, r1\n\
asrs r0, 1\n\
lsls r1, r7, 16\n\
asrs r1, 16\n\
subs r1, r0\n\
ldr r0, =gUnknown_08595D2C\n\
lsls r1, 16\n\
asrs r1, 16\n\
movs r2, 0x8\n\
negs r2, r2\n\
movs r3, 0x12\n\
bl CreateSprite\n\
lsls r0, 24\n\
lsrs r5, r0, 24\n\
cmp r5, 0x40\n\
beq _0810CB44\n\
lsls r4, r5, 4\n\
adds r4, r5\n\
lsls r4, 2\n\
ldr r0, =gSprites\n\
adds r4, r0\n\
adds r0, r4, 0\n\
mov r1, r9\n\
bl StartSpriteAffineAnim\n\
mov r0, sp\n\
ldrh r0, [r0, 0x4]\n\
strh r0, [r4, 0x2E]\n\
strh r7, [r4, 0x34]\n\
strh r6, [r4, 0x36]\n\
mov r1, r9\n\
strh r1, [r4, 0x38]\n\
mov r0, sp\n\
ldrh r0, [r0]\n\
strh r0, [r4, 0x3A]\n\
mov r1, r10\n\
strh r1, [r4, 0x3C]\n\
movs r0, 0x1\n\
b _0810CB46\n\
.pool\n\
_0810CB44:\n\
movs r0, 0\n\
_0810CB46:\n\
add sp, 0x8\n\
pop {r3-r5}\n\
mov r8, r3\n\
mov r9, r4\n\
mov r10, r5\n\
pop {r4-r7}\n\
pop {r1}\n\
bx r1\n");
}
#endif
void AnimHailBegin(struct Sprite *sprite)
{
@ -1874,8 +1506,8 @@ void InitIceBallAnim(struct Sprite *sprite)
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
sprite->data[5] = gBattleAnimArgs[5];
InitAnimArcTranslation(sprite);

View File

@ -205,7 +205,7 @@ void blockset_load_palette_to_gpu(u8);
void sub_80C01CC(struct Sprite *sprite);
void sub_80C020C(u32, u32, u32, u32);
void sub_80C0354(u16, u8, u8);
void sub_80C0460(u16, u8, u8);
void sub_80C0460(u16 weight, u8 left, u8 top);
void sub_80C09B0(u16);
u8 sub_80C0B44(u8, u16, u8, u8);
void sub_80C0D30(u8, u16);
@ -3926,9 +3926,6 @@ void sub_80C020C(u32 num, u32 value, u32 c, u32 d)
sub_80BE8DC(text3, GetStringCenterAlignXOffset(1, text3, 0xF0), 0x5F);
}
#define CHAR_PRIME (0xB4)
#define CHAR_DOUBLE_PRIME (0xB2)
void sub_80C0354(u16 height, u8 left, u8 top)
{
u8 buffer[16];
@ -3954,10 +3951,10 @@ void sub_80C0354(u16 height, u8 left, u8 top)
buffer[i++] = feet / 10 + CHAR_0;
buffer[i++] = (feet % 10) + CHAR_0;
}
buffer[i++] = CHAR_PRIME;
buffer[i++] = CHAR_SGL_QUOT_RIGHT;
buffer[i++] = (inches / 10) + CHAR_0;
buffer[i++] = (inches % 10) + CHAR_0;
buffer[i++] = CHAR_DOUBLE_PRIME;
buffer[i++] = CHAR_DBL_QUOT_RIGHT;
buffer[i++] = EOS;
sub_80BE8DC(buffer, left, top);
}
@ -3968,12 +3965,11 @@ void sub_80C0354(u16 height, u8 left, u8 top)
void sub_80C0460(u16 weight, u8 left, u8 top)
{
u8 buffer[16];
u32 lbs;
u8 i = 0;
bool8 output;
u8 i = 0;
u32 lbs = (weight * 100000) / 4536;
lbs = (weight * 100000) / 4536;
if (lbs % 10 >= 5)
if (lbs % 10u >= 5)
lbs += 10;
output = FALSE;
@ -3988,9 +3984,9 @@ void sub_80C0460(u16 weight, u8 left, u8 top)
i++;
}
lbs = (lbs % 100000);
lbs %= 100000;
buffer[i] = (lbs / 10000) + CHAR_0;
if (buffer[i] == CHAR_0 && output == FALSE)
if (buffer[i] == CHAR_0 && !output)
{
buffer[i++] = 0x77;
}
@ -4000,9 +3996,9 @@ void sub_80C0460(u16 weight, u8 left, u8 top)
i++;
}
lbs = (lbs % 10000);
lbs %= 10000;
buffer[i] = (lbs / 1000) + CHAR_0;
if (buffer[i] == CHAR_0 && output == FALSE)
if (buffer[i] == CHAR_0 && !output)
{
buffer[i++] = 0x77;
}
@ -4010,9 +4006,10 @@ void sub_80C0460(u16 weight, u8 left, u8 top)
{
i++;
}
lbs = (lbs % 1000);
lbs %= 1000;
buffer[i++] = (lbs / 100) + CHAR_0;
lbs = (lbs % 100);
lbs %= 100;
buffer[i++] = CHAR_PERIOD;
buffer[i++] = (lbs / 10) + CHAR_0;
buffer[i++] = CHAR_SPACE;

View File

@ -451,11 +451,9 @@ void sub_802AA94(struct PokemonJump1 *arg0)
}
}
#ifdef NONMATCHING
void sub_802AB20(void)
{
int i;
s16 index;
int i, index;
for (i = 0; i < MAX_RFU_PLAYERS; i++)
{
@ -465,61 +463,6 @@ void sub_802AB20(void)
gUnknown_02022CFC->unk83AC = &gUnknown_02022CFC->unk82E4[gUnknown_02022CFC->unk6];
}
#else
NAKED
void sub_802AB20(void)
{
asm_unified("\n\
push {r4-r7,lr}\n\
mov r7, r8\n\
push {r7}\n\
ldr r7, =gUnknown_02022CFC\n\
movs r6, 0\n\
movs r5, 0\n\
ldr r0, =gPkmnJumpSpecies\n\
mov r8, r0\n\
movs r4, 0x4\n\
_0802AB32:\n\
ldr r0, [r7]\n\
adds r0, r5\n\
ldr r1, =0x000082a8\n\
adds r0, r1\n\
ldrh r0, [r0]\n\
bl sub_802AC00\n\
lsls r0, 16\n\
ldr r1, [r7]\n\
adds r1, r6\n\
asrs r0, 14\n\
add r0, r8\n\
ldrh r0, [r0, 0x2]\n\
ldr r2, =0x000082f0\n\
adds r1, r2\n\
strh r0, [r1]\n\
adds r6, 0x28\n\
adds r5, 0xC\n\
subs r4, 0x1\n\
cmp r4, 0\n\
bge _0802AB32\n\
ldr r0, =gUnknown_02022CFC\n\
ldr r1, [r0]\n\
ldr r0, =0x000083ac\n\
adds r3, r1, r0\n\
ldrb r2, [r1, 0x6]\n\
lsls r0, r2, 2\n\
adds r0, r2\n\
lsls r0, 3\n\
ldr r2, =0x000082e4\n\
adds r0, r2\n\
adds r1, r0\n\
str r1, [r3]\n\
pop {r3}\n\
mov r8, r3\n\
pop {r4-r7}\n\
pop {r0}\n\
bx r0\n\
.pool");
}
#endif // NONMATCHING
static void sub_802AB98(void)
{

View File

@ -902,7 +902,7 @@ static void sub_8140470(void)
{
sub_815168C(&gUnknown_0203AB88->varB8, i, &gUnknown_085B6388[i]);
}
for (i = 0; i < PARTY_SIZE; i++)
{
switch (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2))
@ -953,7 +953,7 @@ static void sub_81405CC(void)
case 4:
if (free_temp_tile_data_buffers_if_possible())
return;
sub_8140470();
CopyToBgTilemapBuffer(2, gUnknown_085B5FA0, 0, 0);
break;
@ -1379,8 +1379,6 @@ static u8 sub_814118C(u16 r0, u16 r1)
}
}
// r7/r8 swap
#ifdef NONMATCHING
static void sub_8141344(u8 taskId)
{
u8 randf;
@ -1412,8 +1410,7 @@ static void sub_8141344(u8 taskId)
g = S16TOPOSFLOAT(g) / 5.0f;
gUnknown_0203AB88->var82 = g * 3;
gUnknown_0203AB88->var84 = g;
gUnknown_0203AB88->var86 = g;
gUnknown_0203AB88->var86 = gUnknown_0203AB88->var84 = g;
gUnknown_0203AB88->var88 = S16TOPOSFLOAT(angles[(rand & 1) + r5]);
gUnknown_0203AB88->var8C = S16TOPOSFLOAT(gUnknown_085B6348[gUnknown_0203AB88->var04_0].var18);
@ -1424,260 +1421,6 @@ static void sub_8141344(u8 taskId)
gUnknown_0203AB88->varA0 = 36.0f;
gTasks[taskId].func = sub_814155C;
}
#else
static const u16 gUnknown_085B6422[4] = {0, 180, 90, 270};
NAKED
static void sub_8141344(u8 taskId)
{
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, 0x8\n\
lsls r0, 24\n\
lsrs r0, 24\n\
mov r10, r0\n\
movs r4, 0\n\
ldr r1, =gUnknown_085B6422\n\
mov r0, sp\n\
movs r2, 0x8\n\
bl memcpy\n\
bl Random\n\
lsls r0, 16\n\
lsrs r7, r0, 16\n\
adds r0, r7, 0\n\
movs r1, 0x64\n\
bl __umodsi3\n\
lsls r0, 16\n\
lsrs r6, r0, 16\n\
ldr r3, =gUnknown_0203AB88\n\
ldr r0, [r3]\n\
ldr r2, =gTasks\n\
mov r5, r10\n\
lsls r1, r5, 2\n\
add r1, r10\n\
lsls r1, 3\n\
adds r1, r2\n\
ldrh r2, [r1, 0x14]\n\
adds r0, 0x7C\n\
strb r2, [r0]\n\
ldr r0, [r3]\n\
adds r2, r0, 0\n\
adds r2, 0x7F\n\
strb r4, [r2]\n\
subs r2, 0x1\n\
strb r4, [r2]\n\
adds r0, 0x7D\n\
strb r4, [r0]\n\
ldrh r0, [r1, 0x18]\n\
adds r1, r7, 0\n\
bl sub_814118C\n\
adds r4, r0, 0\n\
lsls r4, 24\n\
lsrs r1, r4, 24\n\
adds r0, r7, 0\n\
bl __modsi3\n\
lsrs r4, 25\n\
subs r0, r4\n\
lsls r0, 24\n\
lsrs r4, r0, 24\n\
ldr r0, =gLocalTime\n\
ldrb r0, [r0, 0x2]\n\
lsls r0, 24\n\
asrs r0, 24\n\
movs r5, 0x1\n\
cmp r0, 0xC\n\
bgt _081413C8\n\
movs r5, 0\n\
_081413C8:\n\
cmp r6, 0x4F\n\
bhi _081413E0\n\
lsls r0, r5, 25\n\
b _081413EA\n\
.pool\n\
_081413E0:\n\
lsls r1, r5, 24\n\
asrs r1, 24\n\
movs r0, 0x1\n\
subs r0, r1\n\
lsls r0, 25\n\
_081413EA:\n\
lsrs r5, r0, 24\n\
ldr r0, _08141530 @ =gUnknown_0203AB88\n\
ldr r6, [r0]\n\
ldrb r0, [r6, 0x4]\n\
lsls r0, 30\n\
lsrs r0, 25\n\
ldr r1, _08141534 @ =gUnknown_085B6348\n\
adds r0, r1\n\
lsls r4, 24\n\
asrs r4, 24\n\
ldrh r0, [r0, 0x1A]\n\
adds r4, r0\n\
adds r0, r6, 0\n\
adds r0, 0x80\n\
strh r4, [r0]\n\
lsls r4, 16\n\
asrs r4, 16\n\
adds r0, r4, 0\n\
bl __floatsisf\n\
cmp r4, 0\n\
bge _0814141C\n\
ldr r1, _08141538 @ =0x47800000\n\
bl __addsf3\n\
_0814141C:\n\
ldr r1, _0814153C @ =0x40A00000\n\
bl __divsf3\n\
bl __fixunssfsi\n\
lsls r0, 16\n\
lsrs r4, r0, 16\n\
lsls r0, r4, 1\n\
adds r0, r4\n\
movs r2, 0x82\n\
adds r2, r6\n\
mov r8, r2\n\
strh r0, [r2]\n\
adds r0, r6, 0\n\
adds r0, 0x84\n\
strh r4, [r0]\n\
adds r0, 0x2\n\
strh r4, [r0]\n\
movs r0, 0x88\n\
adds r0, r6\n\
mov r9, r0\n\
movs r0, 0x1\n\
ands r0, r7\n\
lsls r1, r5, 24\n\
asrs r1, 24\n\
adds r0, r1\n\
lsls r0, 1\n\
add r0, sp\n\
movs r1, 0\n\
ldrsh r4, [r0, r1]\n\
adds r0, r4, 0\n\
bl __floatsisf\n\
cmp r4, 0\n\
bge _08141468\n\
ldr r1, _08141538 @ =0x47800000\n\
bl __addsf3\n\
_08141468:\n\
mov r2, r9\n\
str r0, [r2]\n\
adds r7, r6, 0\n\
adds r7, 0x8C\n\
ldrb r0, [r6, 0x4]\n\
lsls r0, 30\n\
lsrs r0, 25\n\
ldr r5, _08141534 @ =gUnknown_085B6348\n\
adds r0, r5\n\
movs r1, 0x18\n\
ldrsh r4, [r0, r1]\n\
adds r0, r4, 0\n\
bl __floatsisf\n\
adds r5, r0, 0\n\
cmp r4, 0\n\
bge _08141492\n\
ldr r1, _08141538 @ =0x47800000\n\
bl __addsf3\n\
adds r5, r0, 0\n\
_08141492:\n\
str r5, [r7]\n\
adds r7, r6, 0\n\
adds r7, 0x90\n\
ldr r1, _08141540 @ =0x3F000000\n\
adds r0, r5, 0\n\
bl __mulsf3\n\
adds r1, r5, 0\n\
bl __subsf3\n\
adds r5, r0, 0\n\
mov r2, r8\n\
movs r0, 0\n\
ldrsh r4, [r2, r0]\n\
adds r0, r4, 0\n\
bl __floatsisf\n\
adds r2, r0, 0\n\
cmp r4, 0\n\
bge _081414C2\n\
ldr r1, _08141538 @ =0x47800000\n\
bl __addsf3\n\
adds r2, r0, 0\n\
_081414C2:\n\
adds r0, r5, 0\n\
adds r1, r2, 0\n\
bl __divsf3\n\
str r0, [r7]\n\
adds r1, r6, 0\n\
adds r1, 0x94\n\
ldr r0, _08141544 @ =0x42880000\n\
str r0, [r1]\n\
adds r1, 0x8\n\
ldr r0, _08141548 @ =0x00000000\n\
str r0, [r1]\n\
adds r5, r6, 0\n\
adds r5, 0x98\n\
mov r1, r8\n\
movs r2, 0\n\
ldrsh r4, [r1, r2]\n\
adds r0, r4, 0\n\
bl __floatsisf\n\
adds r2, r0, 0\n\
cmp r4, 0\n\
bge _081414F8\n\
ldr r1, _08141538 @ =0x47800000\n\
bl __addsf3\n\
adds r2, r0, 0\n\
_081414F8:\n\
ldr r0, _0814154C @ =0x41000000\n\
adds r1, r2, 0\n\
bl __divsf3\n\
bl __negsf2\n\
str r0, [r5]\n\
adds r1, r6, 0\n\
adds r1, 0xA0\n\
ldr r0, _08141550 @ =0x42100000\n\
str r0, [r1]\n\
ldr r1, _08141554 @ =gTasks\n\
mov r5, r10\n\
lsls r0, r5, 2\n\
add r0, r10\n\
lsls r0, 3\n\
adds r0, r1\n\
ldr r1, _08141558 @ =sub_814155C\n\
str r1, [r0]\n\
add sp, 0x8\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\
_08141530:\n\
.4byte gUnknown_0203AB88\n\
_08141534:\n\
.4byte gUnknown_085B6348\n\
_08141538:\n\
.4byte 0x47800000\n\
_0814153C:\n\
.4byte 0x40A00000\n\
_08141540:\n\
.4byte 0x3F000000\n\
_08141544:\n\
.4byte 0x42880000\n\
_08141548:\n\
.4byte 0x00000000\n\
_0814154C:\n\
.4byte 0x41000000\n\
_08141550:\n\
.4byte 0x42100000\n\
_08141554:\n\
.4byte gTasks\n\
_08141558:\n\
.4byte sub_814155C");
}
#endif // NONMATCHING
static void sub_814155C(u8 taskId)
{
@ -4345,17 +4088,17 @@ static void sub_81448B8(struct Sprite *sprite)
gUnknown_0203AB88->var38 = sprite;
}
#ifdef NONMATCHING
static void sub_8144A24(struct Sprite *sprite)
{
u8 z;
u16 o;
u8 h = 0; // r10 (sp+0xc)
u8 j = 5; // r9 (r9)
u8 p = 0; // sp+0xc (sp+0x10)
u8 i;
u8 s[10] = {}; // sp+0 (sp+0)
u16 t = Random(); // sp+0x10 (r10)
u8 h = 0;
u8 j = 5;
u8 p = 0;
u8 i = 0;
u8 val;
u8 s[10] = {};
u16 rand = Random();
gUnknown_0203AB88->var7D = 1;
gUnknown_0203AB88->var03_5 = TRUE;
@ -4364,13 +4107,14 @@ static void sub_8144A24(struct Sprite *sprite)
gUnknown_0203AB88->var88 = sprite->data[3];
gUnknown_0203AB88->var98 = 0.0f;
gUnknown_0203AB88->var8C = gUnknown_085B6348[gUnknown_0203AB88->var04_0].var1C;
o = (gUnknown_0203AB88->var04_0 * 30 + 33) + (0x1 - gUnknown_0203AB88->var03_0) * 15;
for (i = 0; i < 4; i++)
{
if (o < sprite->data[3] && sprite->data[3] <= o + 90)
{
sprite->data[0] = i / 2;
gUnknown_0203AB88->var03_0 = i & 1;
gUnknown_0203AB88->var03_0 = i % 2;
break;
}
if (i == 3)
@ -4381,354 +4125,52 @@ static void sub_8144A24(struct Sprite *sprite)
}
o += 90;
}
if (gUnknown_0203AB88->var03_0)
{
if (sprite->data[0])
{
PlayCry1(SPECIES_TAILLOW, -63);
}
else
{
PlayCry1(SPECIES_TAILLOW, 63);
}
}
else
{
PlayCry1(SPECIES_SHROOMISH, -63);
}
i = 2;
val = 2;
z = (gUnknown_0203AB88->var7F + 2) % 12;
if (gUnknown_0203AB88->var03_0 == 1 && gUnknown_0203AB88->var04_0 == 1)
j += 6;
else
j += i;
for (; i < j; i++)
j += val;
for (i = val; i < j; i++)
{
if (!(gUnknown_0203AB88->var08 & gUnknown_085B62E4[z].var04))
{
s[h++] = i;
if (!p && (gUnknown_085B62E4[z].var04 & gUnknown_085B6154[gUnknown_0203AB88->var1B[gUnknown_0203AB88->var1A_0]].var00))
{
if (p == 0 && (gUnknown_085B62E4[z].var04 & gUnknown_085B6154[gUnknown_0203AB88->var1B[gUnknown_0203AB88->var1A_0]].var0C))
p = i;
}
}
z = (z + 1) % 0xC;
}
if ((gUnknown_0203AB88->var03_0 + 1) & gUnknown_0203AB88->var02)
{
if (p && (t & 0xFF) < 0xc0)
{
if (p && (rand & 0xFF) < 0xc0)
sprite->data[7] = p;
}
else
{
sprite->data[7] = s[t % h];
}
sprite->data[7] = s[rand % h];
}
else
{
sprite->data[7] = s[t % h];
sprite->data[7] = s[rand % h];
}
sprite->callback = sub_8144168;
}
#else
NAKED
static void sub_8144A24(struct Sprite *sprite)
{
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, 0x14\n\
adds r7, r0, 0\n\
movs r0, 0\n\
mov r9, r0\n\
movs r1, 0x5\n\
mov r8, r1\n\
str r0, [sp, 0xC]\n\
mov r0, sp\n\
movs r1, 0\n\
movs r2, 0xA\n\
bl memset\n\
bl Random\n\
lsls r0, 16\n\
lsrs r0, 16\n\
str r0, [sp, 0x10]\n\
ldr r3, _08144B10 @ =gUnknown_0203AB88\n\
ldr r0, [r3]\n\
adds r0, 0x7D\n\
movs r5, 0x1\n\
strb r5, [r0]\n\
ldr r2, [r3]\n\
ldrb r0, [r2, 0x3]\n\
movs r1, 0x20\n\
orrs r0, r1\n\
strb r0, [r2, 0x3]\n\
ldr r2, [r3]\n\
ldrb r1, [r2, 0x3]\n\
movs r0, 0x41\n\
negs r0, r0\n\
ands r0, r1\n\
strb r0, [r2, 0x3]\n\
ldr r0, [r3]\n\
adds r0, 0x7E\n\
movs r1, 0xFF\n\
strb r1, [r0]\n\
ldr r6, [r3]\n\
adds r4, r6, 0\n\
adds r4, 0x88\n\
movs r1, 0x34\n\
ldrsh r0, [r7, r1]\n\
bl __floatsisf\n\
str r0, [r4]\n\
adds r1, r6, 0\n\
adds r1, 0x98\n\
ldr r0, _08144B14 @ =0x00000000\n\
str r0, [r1]\n\
adds r2, r6, 0\n\
adds r2, 0x8C\n\
ldr r1, _08144B18 @ =gUnknown_085B6348\n\
ldrb r0, [r6, 0x4]\n\
lsls r0, 30\n\
lsrs r0, 25\n\
adds r1, 0x1C\n\
adds r0, r1\n\
ldr r0, [r0]\n\
str r0, [r2]\n\
ldrb r0, [r6, 0x4]\n\
lsls r0, 30\n\
lsrs r0, 30\n\
lsls r1, r0, 4\n\
subs r1, r0\n\
lsls r1, 1\n\
adds r1, 0x21\n\
ldrb r0, [r6, 0x3]\n\
lsls r0, 27\n\
lsrs r0, 27\n\
subs r5, r0\n\
lsls r0, r5, 4\n\
subs r0, r5\n\
adds r1, r0\n\
lsls r1, 16\n\
lsrs r1, 16\n\
mov r5, r9\n\
movs r0, 0x34\n\
ldrsh r2, [r7, r0]\n\
_08144ACA:\n\
cmp r1, r2\n\
bge _08144AD6\n\
adds r0, r1, 0\n\
adds r0, 0x5A\n\
cmp r2, r0\n\
ble _08144B38\n\
_08144AD6:\n\
cmp r5, 0x3\n\
beq _08144B1C\n\
adds r0, r1, 0\n\
adds r0, 0x5A\n\
lsls r0, 16\n\
lsrs r1, r0, 16\n\
adds r0, r5, 0x1\n\
lsls r0, 24\n\
lsrs r5, r0, 24\n\
cmp r5, 0x3\n\
bls _08144ACA\n\
_08144AEC:\n\
ldr r0, _08144B10 @ =gUnknown_0203AB88\n\
ldr r0, [r0]\n\
ldrb r1, [r0, 0x3]\n\
movs r0, 0x1F\n\
ands r0, r1\n\
cmp r0, 0\n\
beq _08144B64\n\
movs r1, 0x2E\n\
ldrsh r0, [r7, r1]\n\
cmp r0, 0\n\
beq _08144B58\n\
movs r0, 0x98\n\
lsls r0, 1\n\
movs r1, 0x3F\n\
negs r1, r1\n\
bl PlayCry1\n\
b _08144B70\n\
.align 2, 0\n\
_08144B10:\n\
.4byte gUnknown_0203AB88\n\
_08144B14:\n\
.4byte 0x00000000\n\
_08144B18:\n\
.4byte gUnknown_085B6348\n\
_08144B1C:\n\
movs r0, 0x1\n\
strh r0, [r7, 0x2E]\n\
ldr r0, =gUnknown_0203AB88\n\
ldr r2, [r0]\n\
ldrb r1, [r2, 0x3]\n\
movs r0, 0x20\n\
negs r0, r0\n\
ands r0, r1\n\
movs r1, 0x1\n\
orrs r0, r1\n\
strb r0, [r2, 0x3]\n\
b _08144AEC\n\
.pool\n\
_08144B38:\n\
lsrs r0, r5, 1\n\
strh r0, [r7, 0x2E]\n\
ldr r0, =gUnknown_0203AB88\n\
ldr r3, [r0]\n\
movs r1, 0x1\n\
ands r1, r5\n\
ldrb r2, [r3, 0x3]\n\
movs r0, 0x20\n\
negs r0, r0\n\
ands r0, r2\n\
orrs r0, r1\n\
strb r0, [r3, 0x3]\n\
b _08144AEC\n\
.pool\n\
_08144B58:\n\
movs r0, 0x98\n\
lsls r0, 1\n\
movs r1, 0x3F\n\
bl PlayCry1\n\
b _08144B70\n\
_08144B64:\n\
movs r0, 0x99\n\
lsls r0, 1\n\
movs r1, 0x3F\n\
negs r1, r1\n\
bl PlayCry1\n\
_08144B70:\n\
movs r0, 0x2\n\
mov r10, r0\n\
ldr r4, =gUnknown_0203AB88\n\
ldr r5, [r4]\n\
adds r0, r5, 0\n\
adds r0, 0x7F\n\
ldrb r0, [r0]\n\
adds r0, 0x2\n\
movs r1, 0xC\n\
bl __modsi3\n\
lsls r0, 24\n\
lsrs r6, r0, 24\n\
ldrb r1, [r5, 0x3]\n\
movs r0, 0x1F\n\
ands r0, r1\n\
cmp r0, 0x1\n\
bne _08144BA8\n\
ldrb r1, [r5, 0x4]\n\
movs r0, 0x3\n\
ands r0, r1\n\
cmp r0, 0x1\n\
bne _08144BA8\n\
mov r0, r8\n\
adds r0, 0x6\n\
b _08144BAC\n\
.pool\n\
_08144BA8:\n\
mov r0, r8\n\
add r0, r10\n\
_08144BAC:\n\
lsls r0, 24\n\
lsrs r0, 24\n\
mov r8, r0\n\
mov r5, r10\n\
cmp r5, r8\n\
bcs _08144C18\n\
ldr r1, =gUnknown_085B6154+0xC\n\
mov r10, r1\n\
_08144BBC:\n\
ldr r3, [r4]\n\
lsls r0, r6, 3\n\
ldr r1, =gUnknown_085B62E4+0x4\n\
adds r0, r1\n\
ldr r1, [r3, 0x8]\n\
ldr r2, [r0]\n\
ands r1, r2\n\
cmp r1, 0\n\
bne _08144C02\n\
mov r0, r9\n\
adds r1, r0, 0x1\n\
lsls r1, 24\n\
lsrs r1, 24\n\
mov r9, r1\n\
add r0, sp\n\
strb r5, [r0]\n\
ldr r0, [sp, 0xC]\n\
cmp r0, 0\n\
bne _08144C02\n\
ldrb r1, [r3, 0x1A]\n\
lsls r1, 28\n\
lsrs r1, 28\n\
adds r0, r3, 0\n\
adds r0, 0x1B\n\
adds r0, r1\n\
ldrb r1, [r0]\n\
lsls r0, r1, 2\n\
adds r0, r1\n\
lsls r0, 2\n\
add r0, r10\n\
ldr r0, [r0]\n\
ands r2, r0\n\
cmp r2, 0\n\
beq _08144C02\n\
str r5, [sp, 0xC]\n\
_08144C02:\n\
adds r0, r6, 0x1\n\
movs r1, 0xC\n\
bl __modsi3\n\
lsls r0, 24\n\
lsrs r6, r0, 24\n\
adds r0, r5, 0x1\n\
lsls r0, 24\n\
lsrs r5, r0, 24\n\
cmp r5, r8\n\
bcc _08144BBC\n\
_08144C18:\n\
ldr r0, [r4]\n\
ldrb r1, [r0, 0x3]\n\
lsls r1, 27\n\
lsrs r1, 27\n\
adds r1, 0x1\n\
ldrb r0, [r0, 0x2]\n\
ands r1, r0\n\
cmp r1, 0\n\
beq _08144C48\n\
ldr r1, [sp, 0xC]\n\
cmp r1, 0\n\
beq _08144C48\n\
movs r0, 0xFF\n\
ldr r1, [sp, 0x10]\n\
ands r0, r1\n\
cmp r0, 0xBF\n\
bhi _08144C48\n\
mov r0, sp\n\
ldrh r0, [r0, 0xC]\n\
b _08144C54\n\
.pool\n\
_08144C48:\n\
ldr r0, [sp, 0x10]\n\
mov r1, r9\n\
bl __modsi3\n\
add r0, sp\n\
ldrb r0, [r0]\n\
_08144C54:\n\
strh r0, [r7, 0x3C]\n\
ldr r1, =sub_8144168\n\
str r1, [r7, 0x1C]\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\
.pool");
}
#endif // NONMATCHING
static const u16 gUnknown_085B7B1A[] = {
0x907,
@ -4955,7 +4397,7 @@ static void sub_81450D8(struct Sprite *sprite)
static void sub_8145218(struct Sprite *sprite)
{
s8 t[2] = {-1, 1};
if (sprite->data[1]-- >= 0)
{
sprite->pos1.x += t[gUnknown_0203AB88->var38->data[0]] * 2;

View File

@ -1405,479 +1405,71 @@ void sub_8107CC4(u8 taskId)
}
}
#ifdef NONMATCHING
void sub_8107D58(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));
}
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));
}
for (i = task->data[5]; i < 160; i++)
{
gScanlineEffectRegBuffers[1][i] = task->data[2];
gScanlineEffectRegBuffers[0][i] = (u16)((int)(task->data[2] & 0xFFFF));
}
if (task->data[4] == 0)
{
gScanlineEffectRegBuffers[1][i] = task->data[1];
gScanlineEffectRegBuffers[0][i] = task->data[1];
}
else
{
gScanlineEffectRegBuffers[1][i] = task->data[2];
gScanlineEffectRegBuffers[0][i] = task->data[2];
}
params.dmaDest = (vu16 *)REG_ADDR_BLDALPHA;
params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
params.initState = 1;
params.unused9 = 0;
ScanlineEffect_SetParams(params);
task->data[0]++;
break;
case 1:
if (task->data[3] == 0)
{
if (--task->data[4] <= 0)
{
task->data[4] = 0;
task->data[0]++;
}
}
else if (++task->data[5] > 111)
case 0:
for (i = 0; i < task->data[4]; i++)
gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[2];
for (i = task->data[4]; i < task->data[5]; i++)
gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[1];
for (i = task->data[5]; i < 160; i++)
gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[2];
if (task->data[4] == 0)
gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[1];
else
gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[1][i] = task->data[2];
params.dmaDest = (vu16 *)REG_ADDR_BLDALPHA;
params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
params.initState = 1;
params.unused9 = 0;
ScanlineEffect_SetParams(params);
task->data[0]++;
break;
case 1:
if (task->data[3] == 0)
{
if (--task->data[4] <= 0)
{
task->data[4] = 0;
task->data[0]++;
}
for (i = 0; i < task->data[4]; i++)
{
gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[2];
}
for (i = task->data[4]; i < task->data[5]; i++)
{
gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[1];
}
for (i = task->data[5]; i < 160; i++)
{
gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[2];
}
break;
case 2:
for (i = 0; i < task->data[4]; i++)
{
gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[2];
}
for (i = task->data[4]; i < task->data[5]; i++)
{
gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[1];
}
for (i = task->data[5]; i < 160; i++)
{
gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[2];
}
if (task->data[15] == -1)
{
ScanlineEffect_Stop();
DestroyTask(taskId);
}
break;
}
else if (++task->data[5] > 111)
{
task->data[0]++;
}
for (i = 0; i < task->data[4]; i++)
gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[2];
for (i = task->data[4]; i < task->data[5]; i++)
gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[1];
for (i = task->data[5]; i < 160; i++)
gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[2];
break;
case 2:
for (i = 0; i < task->data[4]; i++)
gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[2];
for (i = task->data[4]; i < task->data[5]; i++)
gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[1];
for (i = task->data[5]; i < 160; i++)
gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[2];
if (task->data[15] == -1)
{
ScanlineEffect_Stop();
DestroyTask(taskId);
}
break;
}
}
#else
NAKED
void sub_8107D58(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 _08107D74\n\
b _08107EAC\n\
_08107D74:\n\
cmp r0, 0x1\n\
bgt _08107D84\n\
cmp r0, 0\n\
beq _08107D8C\n\
b _08108022\n\
.pool\n\
_08107D84:\n\
cmp r0, 0x2\n\
bne _08107D8A\n\
b _08107F78\n\
_08107D8A:\n\
b _08108022\n\
_08107D8C:\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 _08107DCA\n\
mov r7, r12\n\
movs r5, 0xF0\n\
lsls r5, 3\n\
add r5, r12\n\
ldr r6, =0x0000ffff\n\
_08107DA4:\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 _08107DA4\n\
_08107DCA:\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 _08107E04\n\
ldr r5, =gScanlineEffectRegBuffers\n\
movs r0, 0xF0\n\
lsls r0, 3\n\
adds r6, r5, r0\n\
ldr r7, =0x0000ffff\n\
_08107DE2:\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 _08107DE2\n\
_08107E04:\n\
ldrh r3, [r4, 0x12]\n\
lsls r2, r3, 16\n\
asrs r0, r2, 16\n\
cmp r0, 0x9F\n\
bgt _08107E3A\n\
ldr r5, =gScanlineEffectRegBuffers\n\
movs r0, 0xF0\n\
lsls r0, 3\n\
adds r6, r5, r0\n\
ldr r7, =0x0000ffff\n\
_08107E18:\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 _08107E18\n\
_08107E3A:\n\
movs r1, 0x10\n\
ldrsh r0, [r4, r1]\n\
cmp r0, 0\n\
bne _08107E64\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 _08107E7A\n\
.pool\n\
_08107E64:\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\
_08107E7A:\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 _08108022\n\
.pool\n\
_08107EAC:\n\
movs r2, 0xE\n\
ldrsh r1, [r4, r2]\n\
cmp r1, 0\n\
bne _08107EC4\n\
ldrh r0, [r4, 0x10]\n\
subs r0, 0x1\n\
strh r0, [r4, 0x10]\n\
lsls r0, 16\n\
cmp r0, 0\n\
bgt _08107ED8\n\
strh r1, [r4, 0x10]\n\
b _08107ED2\n\
_08107EC4:\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 _08107ED8\n\
_08107ED2:\n\
ldrh r0, [r4, 0x8]\n\
adds r0, 0x1\n\
strh r0, [r4, 0x8]\n\
_08107ED8:\n\
movs r3, 0\n\
movs r1, 0x10\n\
ldrsh r0, [r4, r1]\n\
cmp r3, r0\n\
bge _08107F0C\n\
ldr r6, =gScanlineEffectRegBuffers\n\
ldr r5, =gScanlineEffect\n\
_08107EE6:\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 _08107EE6\n\
_08107F0C:\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 _08107F40\n\
ldr r6, =gScanlineEffectRegBuffers\n\
ldr r5, =gScanlineEffect\n\
_08107F1E:\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 _08107F1E\n\
_08107F40:\n\
ldrh r3, [r4, 0x12]\n\
lsls r1, r3, 16\n\
asrs r0, r1, 16\n\
cmp r0, 0x9F\n\
bgt _08108022\n\
ldr r6, =gScanlineEffectRegBuffers\n\
ldr r5, =gScanlineEffect\n\
_08107F4E:\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 _08107F4E\n\
b _08108022\n\
.pool\n\
_08107F78:\n\
movs r3, 0\n\
movs r1, 0x10\n\
ldrsh r0, [r4, r1]\n\
cmp r3, r0\n\
bge _08107FAC\n\
ldr r6, =gScanlineEffectRegBuffers\n\
ldr r5, =gScanlineEffect\n\
_08107F86:\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 _08107F86\n\
_08107FAC:\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 _08107FE0\n\
ldr r6, =gScanlineEffectRegBuffers\n\
ldr r5, =gScanlineEffect\n\
_08107FBE:\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 _08107FBE\n\
_08107FE0:\n\
ldrh r3, [r4, 0x12]\n\
lsls r1, r3, 16\n\
asrs r0, r1, 16\n\
cmp r0, 0x9F\n\
bgt _0810800C\n\
ldr r6, =gScanlineEffectRegBuffers\n\
ldr r5, =gScanlineEffect\n\
_08107FEE:\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 _08107FEE\n\
_0810800C:\n\
movs r0, 0x26\n\
ldrsh r1, [r4, r0]\n\
movs r0, 0x1\n\
negs r0, r0\n\
cmp r1, r0\n\
bne _08108022\n\
bl ScanlineEffect_Stop\n\
adds r0, r7, 0\n\
bl DestroyTask\n\
_08108022:\n\
add sp, 0xC\n\
pop {r4-r7}\n\
pop {r0}\n\
bx r0\n\
.pool\n");
}
#endif
void sub_8108034(struct Sprite *sprite)
{
@ -1925,82 +1517,82 @@ void sub_8108140(u8 taskId)
switch (task->data[0])
{
case 0:
sub_80A805C(task, task->data[15], 0x100, 0x100, 224, 0x200, 32);
case 0:
sub_80A805C(task, task->data[15], 0x100, 0x100, 224, 0x200, 32);
task->data[0]++;
case 1:
if (++task->data[3] > 1)
{
task->data[3] = 0;
if (++task->data[4] & 1)
{
gSprites[task->data[15]].pos2.x = 3;
gSprites[task->data[15]].pos1.y++;
}
else
{
gSprites[task->data[15]].pos2.x = -3;
}
}
if (sub_80A80C8(task) == 0)
{
SetBattlerSpriteYOffsetFromYScale(task->data[15]);
gSprites[task->data[15]].pos2.x = 0;
task->data[3] = 0;
task->data[4] = 0;
task->data[0]++;
case 1:
if (++task->data[3] > 1)
{
task->data[3] = 0;
if (++task->data[4] & 1)
{
gSprites[task->data[15]].pos2.x = 3;
gSprites[task->data[15]].pos1.y++;
}
else
{
gSprites[task->data[15]].pos2.x = -3;
}
}
if (sub_80A80C8(task) == 0)
{
SetBattlerSpriteYOffsetFromYScale(task->data[15]);
gSprites[task->data[15]].pos2.x = 0;
task->data[3] = 0;
task->data[4] = 0;
task->data[0]++;
}
break;
case 2:
if (++task->data[3] > 4)
{
sub_80A805C(task, task->data[15], 224, 0x200, 384, 224, 8);
task->data[3] = 0;
task->data[0]++;
}
break;
case 3:
if (sub_80A80C8(task) == 0)
{
task->data[3] = 0;
task->data[4] = 0;
task->data[0]++;
}
break;
case 4:
sub_8108408(task, taskId);
}
break;
case 2:
if (++task->data[3] > 4)
{
sub_80A805C(task, task->data[15], 224, 0x200, 384, 224, 8);
task->data[3] = 0;
task->data[0]++;
case 5:
if (++task->data[3] > 1)
}
break;
case 3:
if (sub_80A80C8(task) == 0)
{
task->data[3] = 0;
task->data[4] = 0;
task->data[0]++;
}
break;
case 4:
sub_8108408(task, taskId);
task->data[0]++;
case 5:
if (++task->data[3] > 1)
{
task->data[3] = 0;
if (++task->data[4] & 1)
gSprites[task->data[15]].pos2.y += 2;
else
gSprites[task->data[15]].pos2.y -= 2;
if (task->data[4] == 10)
{
sub_80A805C(task, task->data[15], 384, 224, 0x100, 0x100, 8);
task->data[3] = 0;
if (++task->data[4] & 1)
gSprites[task->data[15]].pos2.y += 2;
else
gSprites[task->data[15]].pos2.y -= 2;
if (task->data[4] == 10)
{
sub_80A805C(task, task->data[15], 384, 224, 0x100, 0x100, 8);
task->data[3] = 0;
task->data[4] = 0;
task->data[0]++;
}
}
break;
case 6:
gSprites[task->data[15]].pos1.y--;
if (sub_80A80C8(task) == 0)
{
ResetSpriteRotScale(task->data[15]);
gSprites[task->data[15]].pos1.y = task->data[5];
task->data[4] = 0;
task->data[0]++;
}
break;
case 7:
if (task->data[2] == 0)
DestroyAnimVisualTask(taskId);
break;
}
break;
case 6:
gSprites[task->data[15]].pos1.y--;
if (sub_80A80C8(task) == 0)
{
ResetSpriteRotScale(task->data[15]);
gSprites[task->data[15]].pos1.y = task->data[5];
task->data[4] = 0;
task->data[0]++;
}
break;
case 7:
if (task->data[2] == 0)
DestroyAnimVisualTask(taskId);
break;
}
}
@ -2073,21 +1665,21 @@ void sub_810851C(struct Sprite *sprite)
{
switch (sprite->data[0])
{
case 0:
sprite->data[4] += (sprite->data[1] % 6) * 3;
sprite->data[5] += (sprite->data[1] % 3) * 3;
sprite->data[0]++;
case 1:
sprite->data[2] += sprite->data[4];
sprite->data[3] += sprite->data[5];
sprite->pos1.x = sprite->data[2] >> 4;
sprite->pos1.y = sprite->data[3] >> 4;
if (sprite->pos1.x < -8 || sprite->pos1.x > 248 || sprite->pos1.y < -8 || sprite->pos1.y > 120)
{
gTasks[sprite->data[6]].data[sprite->data[7]]--;
DestroySprite(sprite);
}
break;
case 0:
sprite->data[4] += (sprite->data[1] % 6) * 3;
sprite->data[5] += (sprite->data[1] % 3) * 3;
sprite->data[0]++;
case 1:
sprite->data[2] += sprite->data[4];
sprite->data[3] += sprite->data[5];
sprite->pos1.x = sprite->data[2] >> 4;
sprite->pos1.y = sprite->data[3] >> 4;
if (sprite->pos1.x < -8 || sprite->pos1.x > 248 || sprite->pos1.y < -8 || sprite->pos1.y > 120)
{
gTasks[sprite->data[6]].data[sprite->data[7]]--;
DestroySprite(sprite);
}
break;
}
}
@ -2119,39 +1711,39 @@ void sub_810862C(u8 taskId)
switch (task->data[0])
{
case 0:
if (++task->data[2] > 2)
case 0:
if (++task->data[2] > 2)
{
task->data[2] = 0;
sub_810871C(task, taskId);
}
if (task->data[10] != 0 && task->data[13] == 0)
{
gBattleAnimArgs[0] = 1;
gBattleAnimArgs[1] = 0;
gBattleAnimArgs[2] = 12;
taskId2 = CreateTask(sub_81152DC, 80);
if (taskId2 != 0xFF)
{
task->data[2] = 0;
sub_810871C(task, taskId);
gTasks[taskId2].func(taskId2);
gAnimVisualTaskCount++;
}
if (task->data[10] != 0 && task->data[13] == 0)
gBattleAnimArgs[0] = 3;
taskId2 = CreateTask(sub_81152DC, 80);
if (taskId2 != 0xFF)
{
gBattleAnimArgs[0] = 1;
gBattleAnimArgs[1] = 0;
gBattleAnimArgs[2] = 12;
taskId2 = CreateTask(sub_81152DC, 80);
if (taskId2 != 0xFF)
{
gTasks[taskId2].func(taskId2);
gAnimVisualTaskCount++;
}
gBattleAnimArgs[0] = 3;
taskId2 = CreateTask(sub_81152DC, 80);
if (taskId2 != 0xFF)
{
gTasks[taskId2].func(taskId2);
gAnimVisualTaskCount++;
}
task->data[13] = 1;
gTasks[taskId2].func(taskId2);
gAnimVisualTaskCount++;
}
if (task->data[11] >= task->data[12])
task->data[0]++;
break;
case 1:
if (task->data[9] == 0)
DestroyAnimVisualTask(taskId);
break;
task->data[13] = 1;
}
if (task->data[11] >= task->data[12])
task->data[0]++;
break;
case 1:
if (task->data[9] == 0)
DestroyAnimVisualTask(taskId);
break;
}
}
@ -2232,66 +1824,66 @@ void sub_8108978(u8 taskId)
switch (task->data[0])
{
case 0:
sub_8108AC0(task);
if (task->data[10] != 0)
task->data[0]++;
break;
case 1:
sub_8108AC0(task);
if (++task->data[1] > 16)
case 0:
sub_8108AC0(task);
if (task->data[10] != 0)
task->data[0]++;
break;
case 1:
sub_8108AC0(task);
if (++task->data[1] > 16)
{
task->data[1] = 0;
task->data[0]++;
}
break;
case 2:
sub_8108AC0(task);
task->data[5] += task->data[7] * 6;
if (!(task->data[5] >= -16 && task->data[5] <= 256))
{
if (++task->data[12] > 2)
{
task->data[13] = 1;
task->data[0] = 6;
task->data[1] = 0;
}
else
{
task->data[1] = 0;
task->data[0]++;
}
break;
case 2:
sub_8108AC0(task);
task->data[5] += task->data[7] * 6;
if (!(task->data[5] >= -16 && task->data[5] <= 256))
{
if (++task->data[12] > 2)
{
task->data[13] = 1;
task->data[0] = 6;
task->data[1] = 0;
}
else
{
task->data[1] = 0;
task->data[0]++;
}
}
break;
case 3:
sub_8108AC0(task);
task->data[6] -= task->data[7] * 2;
if (++task->data[1] > 7)
task->data[0]++;
break;
case 4:
sub_8108AC0(task);
task->data[5] -= task->data[7] * 6;
if (!(task->data[5] >= -16 && task->data[5] <= 256))
{
task->data[12]++;
task->data[1] = 0;
task->data[0]++;
}
break;
case 5:
sub_8108AC0(task);
task->data[6] -= task->data[7] * 2;
if (++task->data[1] > 7)
task->data[0] = 2;
break;
case 6:
if (task->data[8] == 0)
task->data[0]++;
break;
default:
DestroyAnimVisualTask(taskId);
break;
}
break;
case 3:
sub_8108AC0(task);
task->data[6] -= task->data[7] * 2;
if (++task->data[1] > 7)
task->data[0]++;
break;
case 4:
sub_8108AC0(task);
task->data[5] -= task->data[7] * 6;
if (!(task->data[5] >= -16 && task->data[5] <= 256))
{
task->data[12]++;
task->data[1] = 0;
task->data[0]++;
}
break;
case 5:
sub_8108AC0(task);
task->data[6] -= task->data[7] * 2;
if (++task->data[1] > 7)
task->data[0] = 2;
break;
case 6:
if (task->data[8] == 0)
task->data[0]++;
break;
default:
DestroyAnimVisualTask(taskId);
break;
}
}