summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/battle/anim/water.c403
1 files changed, 28 insertions, 375 deletions
diff --git a/src/battle/anim/water.c b/src/battle/anim/water.c
index 635416939..ce66c2ec1 100644
--- a/src/battle/anim/water.c
+++ b/src/battle/anim/water.c
@@ -263,111 +263,84 @@ static void sub_80D3874(struct Sprite *sprite)
}
}
-/*
- Many games use wasteful NOPs; some of which are
- even moreso than regular ones. This is so that
- hardware operations can finish.
-
- GF perhaps used a macro to stall the CPU for a bit
- of time, presumably so that DMA can finish, likely
- for debugging purposes. It looks to have been purged
- by FireRed, as it is missing in there.
-
- It could have looked like this:
-*/
-#define cpuWait() \
-{ \
- vu8 cpuDelay = 0; \
- cpuDelay = 0; \
-}
-
-/*
- Despite how close the attempt is, there's still a regswap
- that throws everything over. Could the way data is currently
- linked be the problem here?
-*/
-#ifdef NONMATCHING
void AnimTask_CreateSurfWave(u8 taskId)
{
struct Struct_sub_8078914 subStruct;
u8 taskId2;
- u16* x = &gBattle_BG1_X;
- u16* y = &gBattle_BG1_Y;
+ 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);
- DmaFill32Defvars(3, 0, subStruct.field_0, 0x2000);
- cpuWait(); // wait for DMA to finish
- DmaFill32Defvars(3, 0, subStruct.field_4, 0x1000);
-
- if (IsContest() == 0)
+ // 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())
{
- *x = -80;
- *y = -48;
+ *BGptrX = -80;
+ *BGptrY = -48;
gTasks[taskId].data[0] = 2;
gTasks[taskId].data[1] = 1;
gTasks[taskId2].data[3] = 0;
}
- else if (GetBattlerSide(gBattleAnimAttacker) == 1)
+ else if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
{
- *x = -224;
- *y = 256;
+ *BGptrX = -224;
+ *BGptrY = 256;
gTasks[taskId].data[0] = 2;
gTasks[taskId].data[1] = -1;
gTasks[taskId2].data[3] = 1;
}
else
{
- *x = 0;
- *y = -48;
+ *BGptrX = 0;
+ *BGptrY = -48;
gTasks[taskId].data[0] = -2;
gTasks[taskId].data[1] = 1;
gTasks[taskId2].data[3] = 0;
}
-
- REG_BG1HOFS = *x;
- REG_BG1VOFS = *y;
-
+ REG_BG1HOFS = *BGptrX;
+ REG_BG1VOFS = *BGptrY;
if(gTasks[taskId2].data[3] == 0)
{
gTasks[taskId2].data[4] = 48;
@@ -378,329 +351,9 @@ void AnimTask_CreateSurfWave(u8 taskId)
gTasks[taskId2].data[4] = 0;
gTasks[taskId2].data[5] = 0;
}
-
gTasks[taskId].data[6] = 1;
gTasks[taskId].func = sub_80D3B60;
}
-#else
-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");
-}
-#endif // NONMATCHING
#ifdef NONMATCHING
void sub_80D3B60(u8 taskId)