diff options
author | Kaz <kazbloxmc@gmail.com> | 2020-05-26 07:56:51 -0400 |
---|---|---|
committer | Kaz <kazbloxmc@gmail.com> | 2020-05-26 08:13:51 -0400 |
commit | 30a515168f9e726e0d3d03ba3db4ebabed794d2f (patch) | |
tree | f129b85b1316fa9bf0d097a41ffbf22ff8d1d549 /src | |
parent | 391218127657ddd6535906e446cbb3f7a3ecb563 (diff) |
battle/anim/water.c: AnimTask_CreateSurfWave OK, pokeemerald/firered
consistency
Diffstat (limited to 'src')
-rw-r--r-- | src/battle/anim/water.c | 403 |
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) |