Match Most of Remaining Functions

This commit is contained in:
PokeCodec
2020-08-14 22:02:49 -04:00
committed by PokeCodec
parent 4ac1b3fec5
commit 26ac9c5faf
14 changed files with 354 additions and 1570 deletions
+65 -700
View File
@@ -53,7 +53,7 @@ static void CreateWaterSpoutLaunchDroplets(struct Task*, u8);
static void CreateWaterSpoutRainDroplet(struct Task*, u8);
static void AnimTask_WaterSport_Step(u8);
static void CreateWaterSportDroplet(struct Task*);
static void CreateWaterPulseRingBubbles(struct Sprite*, int, int);
static void CreateWaterPulseRingBubbles(struct Sprite*, s32, s32);
// Both unused? Comment copied from pokeemerald
static const u8 gUnknown_83E44F4[] = INCBIN_U8("graphics/battle_anims/unk_83E4874.4bpp");
@@ -626,99 +626,24 @@ void AnimTask_RotateAuroraRingColors(u8 taskId)
gTasks[taskId].data[2] = IndexOfSpritePaletteTag(ANIM_TAG_RAINBOW_RINGS) * 16 + 256;
gTasks[taskId].func = AnimTask_RotateAuroraRingColors_Step;
}
#ifdef NONMATCHING
static void AnimTask_RotateAuroraRingColors_Step(u8 taskId)
{
int i;
u16 palIndex;
u16 *palPtr1;
u16 *palPtr2;
u16 rgbBuffer;
if (++gTasks[taskId].data[10] == 3)
{
u16 tempPlt;
gTasks[taskId].data[10] = 0;
palIndex = gTasks[taskId].data[2] + 1;
palPtr1 = &gPlttBufferFaded[palIndex];
rgbBuffer = *palPtr1;
palPtr2 = &palPtr1[1];
for (i = 0; i < 7; i++)
palPtr1[i] = palPtr2[i];
gPlttBufferFaded[palIndex + 7] = rgbBuffer;
tempPlt = gPlttBufferFaded[palIndex];
for (i = 1; i < 8; i++)
gPlttBufferFaded[palIndex + i - 1] = gPlttBufferFaded[palIndex + i];
gPlttBufferFaded[palIndex + 7] = tempPlt;
}
if (++gTasks[taskId].data[11] == gTasks[taskId].data[0])
DestroyAnimVisualTask(taskId);
}
#else
NAKED
static void AnimTask_RotateAuroraRingColors_Step(u8 taskId)
{
asm_unified("push {r4-r7,lr}\n\
lsls r0, 24\n\
lsrs r4, r0, 24\n\
ldr r1, =gTasks\n\
lsls r0, r4, 2\n\
adds r0, r4\n\
lsls r0, 3\n\
adds r2, r0, r1\n\
ldrh r0, [r2, 0x1C]\n\
adds r0, 0x1\n\
strh r0, [r2, 0x1C]\n\
lsls r0, 16\n\
asrs r0, 16\n\
mov r12, r1\n\
cmp r0, 0x3\n\
bne _081075BE\n\
movs r0, 0\n\
strh r0, [r2, 0x1C]\n\
ldrh r0, [r2, 0xC]\n\
adds r0, 0x1\n\
lsls r0, 16\n\
lsrs r5, r0, 16\n\
ldr r1, =gPlttBufferFaded\n\
lsls r0, r5, 1\n\
adds r0, r1\n\
ldrh r6, [r0]\n\
adds r7, r1, 0\n\
adds r3, r0, 0x2\n\
movs r1, 0x6\n\
adds r2, r0, 0\n\
_081075A8:\n\
ldrh r0, [r3]\n\
strh r0, [r2]\n\
adds r3, 0x2\n\
adds r2, 0x2\n\
subs r1, 0x1\n\
cmp r1, 0\n\
bge _081075A8\n\
adds r0, r5, 0x7\n\
lsls r0, 1\n\
adds r0, r7\n\
strh r6, [r0]\n\
_081075BE:\n\
lsls r0, r4, 2\n\
adds r0, r4\n\
lsls r0, 3\n\
add r0, r12\n\
ldrh r1, [r0, 0x1E]\n\
adds r1, 0x1\n\
strh r1, [r0, 0x1E]\n\
lsls r1, 16\n\
asrs r1, 16\n\
movs r2, 0x8\n\
ldrsh r0, [r0, r2]\n\
cmp r1, r0\n\
bne _081075DE\n\
adds r0, r4, 0\n\
bl DestroyAnimVisualTask\n\
_081075DE:\n\
pop {r4-r7}\n\
pop {r0}\n\
bx r0\n\
.pool\n");
}
#endif
// For animating undulating beam attacks (e.g. Flamethrower, Hydro Pump, Signal Beam)
static void AnimToTargetInSinWave(struct Sprite *sprite)
@@ -870,15 +795,18 @@ static void AnimSmallBubblePair_Step(struct Sprite *sprite)
sprite->pos2.x = Sin(sprite->data[0], 4);
sprite->data[1] += 48;
sprite->pos2.y = -(sprite->data[1] >> 8);
if (--sprite->data[7] == -1)
if (sprite->data[7]-- == 0)
DestroyAnimSprite(sprite);
}
#ifdef NONMATCHING
void AnimTask_CreateSurfWave(u8 taskId)
{
struct BattleAnimBgData animBg;
u8 taskId2;
u16 *x, *y; //These pointers are needed to match
x = &gBattle_BG1_X;
y = &gBattle_BG1_Y;
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
@@ -911,30 +839,30 @@ void AnimTask_CreateSurfWave(u8 taskId)
gTasks[taskId2].data[2] = 0x1000;
if (IsContest())
{
gBattle_BG1_X = -80;
gBattle_BG1_Y = -48;
*x = -80;
*y = -48;
gTasks[taskId].data[0] = 2;
gTasks[taskId].data[1] = 1;
gTasks[taskId2].data[3] = 0;
}
else if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
{
gBattle_BG1_X = -224;
gBattle_BG1_Y = 256;
*x = -224;
*y = 256;
gTasks[taskId].data[0] = 2;
gTasks[taskId].data[1] = -1;
gTasks[taskId2].data[3] = 1;
}
else
{
gBattle_BG1_X = 0;
gBattle_BG1_Y = -48;
*x = 0;
*y = -48;
gTasks[taskId].data[0] = -2;
gTasks[taskId].data[1] = 1;
gTasks[taskId2].data[3] = 0;
}
SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
SetGpuReg(REG_OFFSET_BG1HOFS, *x);
SetGpuReg(REG_OFFSET_BG1VOFS, *y);
if (gTasks[taskId2].data[3] == 0)
{
gTasks[taskId2].data[4] = 48;
@@ -948,250 +876,16 @@ void AnimTask_CreateSurfWave(u8 taskId)
gTasks[taskId].data[6] = 1;
gTasks[taskId].func = AnimTask_CreateSurfWave_Step1;
}
#else
NAKED
void AnimTask_CreateSurfWave(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, 0x10\n\
lsls r0, 24\n\
lsrs r0, 24\n\
mov r10, r0\n\
ldr r1, =0x00003f42\n\
movs r0, 0x50\n\
bl SetGpuReg\n\
movs r1, 0x80\n\
lsls r1, 5\n\
movs r0, 0x52\n\
bl SetGpuReg\n\
movs r0, 0x1\n\
movs r1, 0x4\n\
movs r2, 0x1\n\
bl SetAnimBgAttribute\n\
movs r0, 0x1\n\
movs r1, 0\n\
movs r2, 0x1\n\
bl SetAnimBgAttribute\n\
mov r0, sp\n\
bl sub_80752A0\n\
bl IsContest\n\
lsls r0, 24\n\
cmp r0, 0\n\
bne _081079E0\n\
movs r0, 0x1\n\
movs r1, 0x3\n\
movs r2, 0x1\n\
bl SetAnimBgAttribute\n\
ldr r0, =gBattleAnimAttacker\n\
ldrb r0, [r0]\n\
bl GetBattlerSide\n\
lsls r0, 24\n\
lsrs r0, 24\n\
cmp r0, 0x1\n\
bne _081079D0\n\
mov r0, sp\n\
ldrb r0, [r0, 0x9]\n\
ldr r1, =gBattleAnimBgTilemap_SurfOpponent\n\
bl AnimLoadCompressedBgTilemap\n\
b _081079EA\n\
.pool\n\
_081079D0:\n\
mov r0, sp\n\
ldrb r0, [r0, 0x9]\n\
ldr r1, =gBattleAnimBgTilemap_SurfPlayer\n\
bl AnimLoadCompressedBgTilemap\n\
b _081079EA\n\
.pool\n\
_081079E0:\n\
ldr r0, =gBattleAnimBgTilemap_SurfContest\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_80730C0\n\
_081079EA:\n\
mov r0, sp\n\
ldrb r0, [r0, 0x9]\n\
ldr r1, =gBattleAnimBgImage_Surf\n\
mov r2, sp\n\
ldrh r2, [r2, 0xA]\n\
bl AnimLoadCompressedBgGfx\n\
ldr r0, =gBattleAnimArgs\n\
movs r1, 0\n\
ldrsh r0, [r0, r1]\n\
cmp r0, 0\n\
bne _08107A24\n\
ldr r0, =gBattleAnimBgPalette_Surf\n\
mov r1, sp\n\
ldrb r1, [r1, 0x8]\n\
lsls r1, 4\n\
movs r2, 0x20\n\
bl LoadCompressedPalette\n\
b _08107A32\n\
.pool\n\
_08107A24:\n\
ldr r0, =gBattleAnimBgPalette_MuddyWater\n\
mov r1, sp\n\
ldrb r1, [r1, 0x8]\n\
lsls r1, 4\n\
movs r2, 0x20\n\
bl LoadCompressedPalette\n\
_08107A32:\n\
ldr r0, =AnimTask_SurfWaveScanlineEffect\n\
ldr r4, =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 r0, 0\n\
mov r9, r0\n\
mov r1, r8\n\
strh r1, [r6, 0x26]\n\
mov r2, r8\n\
lsls r0, r2, 2\n\
add r0, r8\n\
lsls r0, 3\n\
adds r7, r0, r4\n\
mov r0, r9\n\
strh r0, [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 _08107AB4\n\
ldr r1, =0x0000ffb0\n\
adds r0, r1, 0\n\
ldr r2, =gBattle_BG1_X\n\
strh r0, [r2]\n\
adds r1, 0x20\n\
adds r0, r1, 0\n\
ldr r2, =gBattle_BG1_Y\n\
strh r0, [r2]\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 _08107B0E\n\
.pool\n\
_08107AB4:\n\
ldr r0, =gBattleAnimAttacker\n\
ldrb r0, [r0]\n\
bl GetBattlerSide\n\
lsls r0, 24\n\
lsrs r1, r0, 24\n\
cmp r1, 0x1\n\
bne _08107AF8\n\
ldr r2, =0x0000ff20\n\
adds r0, r2, 0\n\
ldr r2, =gBattle_BG1_X\n\
strh r0, [r2]\n\
movs r2, 0x80\n\
lsls r2, 1\n\
adds r0, r2, 0\n\
ldr r2, =gBattle_BG1_Y\n\
strh r0, [r2]\n\
movs r0, 0x2\n\
strh r0, [r6, 0x8]\n\
ldr r0, =0x0000ffff\n\
strh r0, [r6, 0xA]\n\
strh r1, [r7, 0xE]\n\
b _08107B0E\n\
.pool\n\
_08107AF8:\n\
ldr r0, =gBattle_BG1_X\n\
strh r4, [r0]\n\
ldr r1, =0x0000ffd0\n\
adds r0, r1, 0\n\
ldr r2, =gBattle_BG1_Y\n\
strh r0, [r2]\n\
ldr r0, =0x0000fffe\n\
strh r0, [r6, 0x8]\n\
movs r0, 0x1\n\
strh r0, [r6, 0xA]\n\
strh r4, [r7, 0xE]\n\
_08107B0E:\n\
ldr r0, =gBattle_BG1_X\n\
ldrh r1, [r0]\n\
movs r0, 0x14\n\
bl SetGpuReg\n\
ldr r2, =gBattle_BG1_Y\n\
ldrh r1, [r2]\n\
movs r0, 0x16\n\
bl SetGpuReg\n\
ldr r1, =gTasks\n\
mov r2, r8\n\
lsls r0, r2, 2\n\
add r0, r8\n\
lsls r0, 3\n\
adds r1, r0, r1\n\
movs r2, 0xE\n\
ldrsh r0, [r1, r2]\n\
cmp r0, 0\n\
bne _08107B54\n\
movs r0, 0x30\n\
strh r0, [r1, 0x10]\n\
movs r0, 0x70\n\
b _08107B58\n\
.pool\n\
_08107B54:\n\
movs r0, 0\n\
strh r0, [r1, 0x10]\n\
_08107B58:\n\
strh r0, [r1, 0x12]\n\
ldr r1, =gTasks\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, =AnimTask_CreateSurfWave_Step1\n\
str r1, [r0]\n\
add sp, 0x10\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
#ifdef NONMATCHING
static void AnimTask_CreateSurfWave_Step1(u8 taskId)
{
struct BattleAnimBgData animBg;
u8 i;
u16 rgbBuffer;
u16 *BGptrX = &gBattle_BG1_X;
u16 *BGptrY = &gBattle_BG1_Y;
s16 unkUse;
u32 palOffset;
u16 palNum;
u8 i;
u16 *BGptrX, *BGptrY;
struct BattleAnimBgData animBg;
BGptrX = &gBattle_BG1_X;
BGptrY = &gBattle_BG1_Y;
*BGptrX += gTasks[taskId].data[0];
*BGptrY += gTasks[taskId].data[1];
@@ -1199,29 +893,26 @@ static void AnimTask_CreateSurfWave_Step1(u8 taskId)
gTasks[taskId].data[2] += gTasks[taskId].data[1];
if (++gTasks[taskId].data[5] == 4)
{
rgbBuffer = gPlttBufferFaded[animBg.paletteId * 16 + 7];
for (i = 6; i != 0; i--)
rgbBuffer = gPlttBufferFaded[16 * animBg.paletteId + 7];
for (i = 6; i != 0; i--) // i > 0 generates the exact same code in this context
{
palNum = animBg.paletteId * 16;
palOffset = 1 + i;
gPlttBufferFaded[palNum + palOffset] = gPlttBufferFaded[palNum + palOffset - 1];
gPlttBufferFaded[16 * animBg.paletteId + 1 + i] = gPlttBufferFaded[16 * animBg.paletteId + 1 + i - 1]; // 1 + i - 1 is needed to match for some bizarre reason
}
gPlttBufferFaded[animBg.paletteId * 16 + 1] = rgbBuffer;
gPlttBufferFaded[16 * animBg.paletteId + 1] = rgbBuffer;
gTasks[taskId].data[5] = 0;
}
if (++gTasks[taskId].data[6] > 1)
{
gTasks[taskId].data[6] = 0;
unkUse = ++gTasks[taskId].data[3];
if (unkUse <= 13)
if (++gTasks[taskId].data[3] < 14)
{
gTasks[gTasks[taskId].data[15]].data[1] = unkUse | ((16 - unkUse) * 256);
gTasks[gTasks[taskId].data[15]].data[1] = (s16)((gTasks[taskId].data[3]) | ((16 - gTasks[taskId].data[3]) << 8));
gTasks[taskId].data[4]++;
}
if (gTasks[taskId].data[3] > 54)
{
unkUse = --gTasks[taskId].data[4];
gTasks[gTasks[taskId].data[15]].data[1] = unkUse | ((16 - unkUse) * 256);
gTasks[taskId].data[4]--;
gTasks[gTasks[taskId].data[15]].data[1] = (s16)((gTasks[taskId].data[4]) | ((16 - gTasks[taskId].data[4]) << 8));
}
}
if (!(gTasks[gTasks[taskId].data[15]].data[1] & 0x1F))
@@ -1230,167 +921,6 @@ static void AnimTask_CreateSurfWave_Step1(u8 taskId)
gTasks[taskId].func = AnimTask_CreateSurfWave_Step2;
}
}
#else
NAKED
static void AnimTask_CreateSurfWave_Step1(u8 taskId)
{
asm_unified("push {r4-r7,lr}\n\
sub sp, 0x10\n\
lsls r0, 24\n\
lsrs r5, r0, 24\n\
ldr r1, =gBattle_BG1_X\n\
ldr r2, =gBattle_BG1_Y\n\
ldr r0, =gTasks\n\
lsls r4, r5, 2\n\
adds r4, r5\n\
lsls r4, 3\n\
adds r4, r0\n\
ldrh r0, [r4, 0x8]\n\
ldrh r3, [r1]\n\
adds r0, r3\n\
strh r0, [r1]\n\
ldrh r0, [r4, 0xA]\n\
ldrh r1, [r2]\n\
adds r0, r1\n\
strh r0, [r2]\n\
mov r0, sp\n\
bl sub_80752A0\n\
ldrh r0, [r4, 0xA]\n\
ldrh r3, [r4, 0xC]\n\
adds r0, r3\n\
strh r0, [r4, 0xC]\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, 0x4\n\
bne _08107C18\n\
ldr r1, =gPlttBufferFaded\n\
mov r0, sp\n\
ldrb r0, [r0, 0x8]\n\
lsls r0, 4\n\
adds r0, 0x7\n\
lsls r0, 1\n\
adds r0, r1\n\
ldrh r6, [r0]\n\
movs r2, 0x6\n\
adds r7, r1, 0\n\
adds r3, r7, 0\n\
mov r4, sp\n\
_08107BDE:\n\
ldrb r0, [r4, 0x8]\n\
lsls r0, 4\n\
adds r1, r2, 0x1\n\
adds r0, r1\n\
lsls r1, r0, 1\n\
adds r1, r3\n\
subs r0, 0x1\n\
lsls r0, 1\n\
adds r0, r3\n\
ldrh r0, [r0]\n\
strh r0, [r1]\n\
subs r0, r2, 0x1\n\
lsls r0, 24\n\
lsrs r2, r0, 24\n\
cmp r2, 0\n\
bne _08107BDE\n\
mov r0, sp\n\
ldrb r0, [r0, 0x8]\n\
lsls r0, 4\n\
adds r0, 0x1\n\
lsls r0, 1\n\
adds r0, r7\n\
strh r6, [r0]\n\
ldr r1, =gTasks\n\
lsls r0, r5, 2\n\
adds r0, r5\n\
lsls r0, 3\n\
adds r0, r1\n\
strh r2, [r0, 0x12]\n\
_08107C18:\n\
ldr r1, =gTasks\n\
lsls r2, r5, 2\n\
adds r0, r2, r5\n\
lsls r0, 3\n\
adds r3, r0, r1\n\
ldrh r0, [r3, 0x14]\n\
adds r0, 0x1\n\
strh r0, [r3, 0x14]\n\
lsls r0, 16\n\
asrs r0, 16\n\
adds r4, r1, 0\n\
adds r6, r2, 0\n\
cmp r0, 0x1\n\
ble _08107C86\n\
movs r0, 0\n\
strh r0, [r3, 0x14]\n\
ldrh r0, [r3, 0xE]\n\
adds r2, r0, 0x1\n\
strh r2, [r3, 0xE]\n\
lsls r0, r2, 16\n\
asrs r0, 16\n\
cmp r0, 0xD\n\
bgt _08107C62\n\
movs r1, 0x26\n\
ldrsh r0, [r3, r1]\n\
lsls r1, r0, 2\n\
adds r1, r0\n\
lsls r1, 3\n\
adds r1, r4\n\
movs r0, 0x10\n\
subs r0, r2\n\
lsls r0, 8\n\
orrs r2, r0\n\
strh r2, [r1, 0xA]\n\
ldrh r0, [r3, 0x10]\n\
adds r0, 0x1\n\
strh r0, [r3, 0x10]\n\
_08107C62:\n\
movs r1, 0xE\n\
ldrsh r0, [r3, r1]\n\
cmp r0, 0x36\n\
ble _08107C86\n\
ldrh r2, [r3, 0x10]\n\
subs r2, 0x1\n\
strh r2, [r3, 0x10]\n\
movs r1, 0x26\n\
ldrsh r0, [r3, r1]\n\
lsls r1, r0, 2\n\
adds r1, r0\n\
lsls r1, 3\n\
adds r1, r4\n\
movs r0, 0x10\n\
subs r0, r2\n\
lsls r0, 8\n\
orrs r2, r0\n\
strh r2, [r1, 0xA]\n\
_08107C86:\n\
adds r0, r6, r5\n\
lsls r0, 3\n\
adds r2, r0, r4\n\
movs r3, 0x26\n\
ldrsh r1, [r2, r3]\n\
lsls r0, r1, 2\n\
adds r0, r1\n\
lsls r0, 3\n\
adds r0, r4\n\
ldrh r0, [r0, 0xA]\n\
movs r3, 0x1F\n\
ands r3, r0\n\
cmp r3, 0\n\
bne _08107CA8\n\
strh r3, [r2, 0x8]\n\
ldr r0, =AnimTask_CreateSurfWave_Step2\n\
str r0, [r2]\n\
_08107CA8:\n\
add sp, 0x10\n\
pop {r4-r7}\n\
pop {r0}\n\
bx r0\n\
.pool\n");
}
#endif
static void AnimTask_CreateSurfWave_Step2(u8 taskId)
{
@@ -2014,216 +1544,51 @@ static void AnimWaterPulseRing_Step(struct Sprite *sprite)
sprite->data[0]++;
}
#ifdef NONMATCHING
static void CreateWaterPulseRingBubbles(struct Sprite *sprite, int xDiff, int yDiff)
static void CreateWaterPulseRingBubbles(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;
s16 combinedX, combinedY;
s16 i, something;
s16 unusedVar = 1; //unusedVar is needed to match
s16 somethingRandomX, somethingRandomY;
u8 spriteId;
for (i = 0; i <= 0; i++)
something = sprite->data[0] / 2;
combinedX = sprite->pos1.x + sprite->pos2.x;
combinedY = sprite->pos1.y + sprite->pos2.y;
if (yDiff < 0)
unusedVar *= -1; //Needed to Match
somethingRandomY = yDiff + (Random() % 10) - 5;
somethingRandomX = -xDiff + (Random() % 10) - 5;
for (i = 0; i < 1; i++)
{
spriteId = CreateSprite(&gWaterPulseRingBubbleSpriteTemplate, combinedX, combinedY + something, 130);
gSprites[spriteId].data[0] = 20;
gSprites[spriteId].data[1] = randomSomethingY;
gSprites[spriteId].data[1] = somethingRandomY;
gSprites[spriteId].subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1;
if (randomSomethingX < 0)
gSprites[spriteId].data[2] = -randomSomethingX;
if (somethingRandomX < 0)
{
gSprites[spriteId].data[2] = -somethingRandomX;
}
else
gSprites[spriteId].data[2] = randomSomethingX;
{
gSprites[spriteId].data[2] = somethingRandomX;
}
}
for (i = 0; i <= 0; i++)
for (i = 0; i < 1; i++)
{
spriteId = CreateSprite(&gWaterPulseRingBubbleSpriteTemplate, combinedX, combinedY - something, 130);
gSprites[spriteId].data[0] = 20;
gSprites[spriteId].data[1] = randomSomethingY;
gSprites[spriteId].data[1] = somethingRandomY;
gSprites[spriteId].subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1;
if (randomSomethingX > 0)
gSprites[spriteId].data[2] = -randomSomethingX;
if (somethingRandomX > 0)
{
gSprites[spriteId].data[2] = -somethingRandomX;
}
else
gSprites[spriteId].data[2] = randomSomethingX;
{
gSprites[spriteId].data[2] = somethingRandomX;
}
}
}
#else
NAKED
static void CreateWaterPulseRingBubbles(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\
_08108DE2:\n\
ldr r0, =gWaterPulseRingBubbleSpriteTemplate\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 GetBattlerSpriteSubpriority\n\
subs r0, 0x1\n\
adds r1, r4, 0\n\
adds r1, 0x43\n\
strb r0, [r1]\n\
cmp r5, 0\n\
bge _08108E30\n\
mov r1, sp\n\
ldrh r1, [r1, 0x4]\n\
strh r1, [r4, 0x32]\n\
b _08108E32\n\
.pool\n\
_08108E30:\n\
strh r7, [r4, 0x32]\n\
_08108E32:\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 _08108DE2\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\
_08108E58:\n\
ldr r0, =gWaterPulseRingBubbleSpriteTemplate\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 GetBattlerSpriteSubpriority\n\
subs r0, 0x1\n\
adds r1, r4, 0\n\
adds r1, 0x43\n\
strb r0, [r1]\n\
cmp r5, 0\n\
ble _08108EA8\n\
mov r1, sp\n\
ldrh r1, [r1, 0x8]\n\
strh r1, [r4, 0x32]\n\
b _08108EAA\n\
.pool\n\
_08108EA8:\n\
strh r7, [r4, 0x32]\n\
_08108EAA:\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 _08108E58\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