diff options
author | garak <garakmon@gmail.com> | 2018-08-17 20:03:50 -0400 |
---|---|---|
committer | garak <garakmon@gmail.com> | 2018-08-17 20:03:50 -0400 |
commit | 22d7df5cae31e446d695934fd2035b284dbdfba9 (patch) | |
tree | 6445c4424debe4a47d1a451a9f1c95d28ab9ab0e | |
parent | 48c955e399ba841daf38cf85870429d5bcc7a6f5 (diff) |
more decomp of ice (4 remaining)
-rw-r--r-- | src/battle/anim/ice.c | 822 |
1 files changed, 279 insertions, 543 deletions
diff --git a/src/battle/anim/ice.c b/src/battle/anim/ice.c index 5a0acd10c..d4332b16e 100644 --- a/src/battle/anim/ice.c +++ b/src/battle/anim/ice.c @@ -55,7 +55,7 @@ void sub_80D8F74(struct Sprite *sprite); void sub_80D81E0(u8 taskId); // static? void sub_80D851C(u8 taskId); void sub_80D8AF8(u8 taskId); -void sub_80D8BA8(u8 spriteId, u8 taskId, u8 a3, u8 a4);//(u8 taskId); +void sub_80D8BA8(u8 a1, u8 a2, u8 a3, u8 a4);//(u8 taskId); const union AnimCmd gSpriteAnim_83D9B58[] = { @@ -536,17 +536,33 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9F0C = * mist, powder snow, sheer cold, */ - -#ifdef NONMATCHING +/* // NOT EQUIVALENT void sub_80D7704(struct Sprite *sprite) { // - u8 r9, r8, r3, r6; - s16 r4, r10; + //u16 battler1, battler2, battler3, battler4; // + u16 r9, r8, r3, r6; + //s16 r4, r10; sprite->oam.tileNum += 7; + //u8 battler1, battler2, battler3, battler4; + + //battler1 = GetBattlerSpriteCoord(gAnimBankTarget, 2); + //battler2 = GetBattlerSpriteCoord(gAnimBankTarget, 3); + //battler3 = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + //battler4 = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + + //sprite->oam.tileNum += 7; + + //sprite->data[0] = gBattleAnimArgs[4]; + + //sprite->data[1] = battler3 + gBattleAnimArgs[0]; //??? + //sprite->data[2] = battler1 + gBattleAnimArgs[2]; + //sprite->data[3] = battler4 + gBattleAnimArgs[1]; + //sprite->data[4] = battler2 + gBattleAnimArgs[3]; + r9 = GetBattlerSpriteCoord(gAnimBankTarget, 2); r8 = GetBattlerSpriteCoord(gAnimBankTarget, 3); r3 = GetBattlerSpriteCoord(gAnimBankAttacker, 2); @@ -559,31 +575,31 @@ void sub_80D7704(struct Sprite *sprite) sprite->data[3] = r6 + gBattleAnimArgs[1]; sprite->data[4] = r8 + gBattleAnimArgs[3]; + //sprite->data[0] = gBattleAnimArgs; + + sub_8078314(sprite); if ((u32)(r9 + 32) <= 304 || (u32)(r8 + 32) <= 224) // cmp 1 { r4 = sprite->data[1]; r10 = 304; + // _080D77AA + for (int i = 0; i < 3; i++) + { + // + if (((u32)((s16)r9 + r4) + (0x80 << 14)) >> 16 > 304 + || ((u32)((s16)r8 + r4) + (0x80 << 14)) >> 16 > 0xE0) + { + break; + } + } } // _080D77DE - - - - - - /*sprite->oam.tileNum += 7; - - sprite->data[1] = GetBattlerSpriteCoord(gAnimBankTarget, 2); - sprite->data[3] = GetBattlerSpriteCoord(gAnimBankTarget, 3); - sprite->data[2] = GetBattlerSpriteCoord(gAnimBankAttacker, 2); - sprite->data[4] = GetBattlerSpriteCoord(gAnimBankAttacker, 3); - - sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[1] = gBattleAnimArgs[0];*/ } -#else +*/ + NAKED void sub_80D7704(struct Sprite *sprite) { asm_unified("\tpush {r4-r7,lr}\n" @@ -776,7 +792,6 @@ NAKED void sub_80D7704(struct Sprite *sprite) "\t.align 2, 0\n" "_080D7884: .4byte sub_80D7888"); } -#endif // NONMATCHING // MATCHING void sub_80D7888(struct Sprite *sprite) @@ -1223,272 +1238,97 @@ void sub_80D80E0(u8 taskId) gTasks[taskId].func = sub_80D81E0; } -// -// static void sub_80D81E0(u8 taskId); - -#ifdef NONMATCHING -// +// MATCHING void sub_80D81E0(u8 taskId) { - // + struct Struct_sub_8078914 subStruct; + gBattle_BG1_X += 0xFFFF; + gBattle_BG1_Y += 0; + + switch(gTasks[taskId].data[12]) + { + case 0: + + gTasks[taskId].data[10] += 1; + + if (gTasks[taskId].data[10] != 4) + break; + + else + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[9] += 1; + + gTasks[taskId].data[11] = gUnknown_083D9D6C[gTasks[taskId].data[9]]; + + REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); + + if (gTasks[taskId].data[11] != 9) + break; + + else + { + gTasks[taskId].data[12] += 1; + gTasks[taskId].data[11] = 0; + break; + } + } + + case 1: + + gTasks[taskId].data[11] += 1; + + if (gTasks[taskId].data[11] == 0x51) + { + gTasks[taskId].data[11] = 9; + gTasks[taskId].data[12] += 1; + } + break; + + case 2: + + gTasks[taskId].data[10] += 1; + + if (gTasks[taskId].data[10] == 4) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11] -= 1; + + REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); + + if (gTasks[taskId].data[11] == 0) + { + gTasks[taskId].data[12] += 1; + gTasks[taskId].data[11] = 0; + } + } + break; + + case 3: + + sub_8078914(&subStruct); + + DmaFill32Large(3, 0, subStruct.field_0, 0x2000, 0x1000); + DmaClear32(3, subStruct.field_4, 0x800); + + if (!IsContest()) + REG_BG1CNT_BITFIELD.charBaseBlock = 0; + + gTasks[taskId].data[12] += 1; + + case 4: + + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + + REG_BG1CNT_BITFIELD.priority = 1; + DestroyAnimVisualTask(taskId); + } } -#else -NAKED void sub_80D81E0(u8 taskId) -{ - asm_unified(".equ REG_BLDCNT, 0x4000050\n" - ".equ REG_BLDALPHA, 0x4000052\n" - ".equ REG_BG1CNT, 0x400000A\n" - ".equ REG_BG1HOFS, 0x4000014\n" - "\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0x10\n" - "\tlsls r0, 24\n" - "\tlsrs r6, r0, 24\n" - "\tldr r2, _080D8220 @ =gBattle_BG1_X\n" - "\tldr r1, _080D8224 @ =0x0000ffff\n" - "\tadds r0, r1, 0\n" - "\tldrh r4, [r2]\n" - "\tadds r0, r4\n" - "\tstrh r0, [r2]\n" - "\tldr r1, _080D8228 @ =gBattle_BG1_Y\n" - "\tldr r3, _080D822C @ =gTasks\n" - "\tlsls r0, r6, 2\n" - "\tadds r0, r6\n" - "\tlsls r0, 3\n" - "\tadds r0, r3\n" - "\tmovs r4, 0x20\n" - "\tldrsh r0, [r0, r4]\n" - "\tadds r4, r1, 0\n" - "\tcmp r0, 0x4\n" - "\tbls _080D8214\n" - "\tb _080D83B0\n" - "_080D8214:\n" - "\tlsls r0, 2\n" - "\tldr r1, _080D8230 @ =_080D8234\n" - "\tadds r0, r1\n" - "\tldr r0, [r0]\n" - "\tmov pc, r0\n" - "\t.align 2, 0\n" - "_080D8220: .4byte gBattle_BG1_X\n" - "_080D8224: .4byte 0x0000ffff\n" - "_080D8228: .4byte gBattle_BG1_Y\n" - "_080D822C: .4byte gTasks\n" - "_080D8230: .4byte _080D8234\n" - "\t.align 2, 0\n" - "_080D8234:\n" - "\t.4byte _080D8248\n" - "\t.4byte _080D82A0\n" - "\t.4byte _080D82C2\n" - "\t.4byte _080D8304\n" - "\t.4byte _080D838C\n" - "_080D8248:\n" - "\tlsls r0, r6, 2\n" - "\tadds r0, r6\n" - "\tlsls r0, 3\n" - "\tadds r3, r0, r3\n" - "\tldrh r0, [r3, 0x1C]\n" - "\tadds r0, 0x1\n" - "\tmovs r4, 0\n" - "\tstrh r0, [r3, 0x1C]\n" - "\tlsls r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x4\n" - "\tbeq _080D8262\n" - "\tb _080D83B0\n" - "_080D8262:\n" - "\tstrh r4, [r3, 0x1C]\n" - "\tldrh r0, [r3, 0x1A]\n" - "\tadds r0, 0x1\n" - "\tstrh r0, [r3, 0x1A]\n" - "\tldr r1, _080D8298 @ =gUnknown_083D9D6C\n" - "\tmovs r2, 0x1A\n" - "\tldrsh r0, [r3, r2]\n" - "\tadds r0, r1\n" - "\tldrb r1, [r0]\n" - "\tstrh r1, [r3, 0x1E]\n" - "\tldr r2, _080D829C @ =REG_BLDALPHA\n" - "\tmovs r0, 0x10\n" - "\tsubs r0, r1\n" - "\tlsls r0, 8\n" - "\torrs r1, r0\n" - "\tstrh r1, [r2]\n" - "\tmovs r1, 0x1E\n" - "\tldrsh r0, [r3, r1]\n" - "\tcmp r0, 0x9\n" - "\tbeq _080D828C\n" - "\tb _080D83B0\n" - "_080D828C:\n" - "\tldrh r0, [r3, 0x20]\n" - "\tadds r0, 0x1\n" - "\tstrh r0, [r3, 0x20]\n" - "\tstrh r4, [r3, 0x1E]\n" - "\tb _080D83B0\n" - "\t.align 2, 0\n" - "_080D8298: .4byte gUnknown_083D9D6C\n" - "_080D829C: .4byte REG_BLDALPHA\n" - "_080D82A0:\n" - "\tlsls r0, r6, 2\n" - "\tadds r0, r6\n" - "\tlsls r0, 3\n" - "\tadds r3, r0, r3\n" - "\tldrh r0, [r3, 0x1E]\n" - "\tadds r0, 0x1\n" - "\tstrh r0, [r3, 0x1E]\n" - "\tlsls r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x51\n" - "\tbne _080D83B0\n" - "\tmovs r0, 0x9\n" - "\tstrh r0, [r3, 0x1E]\n" - "\tldrh r0, [r3, 0x20]\n" - "\tadds r0, 0x1\n" - "\tstrh r0, [r3, 0x20]\n" - "\tb _080D83B0\n" - "_080D82C2:\n" - "\tlsls r0, r6, 2\n" - "\tadds r0, r6\n" - "\tlsls r0, 3\n" - "\tadds r3, r0, r3\n" - "\tldrh r0, [r3, 0x1C]\n" - "\tadds r0, 0x1\n" - "\tstrh r0, [r3, 0x1C]\n" - "\tlsls r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x4\n" - "\tbne _080D83B0\n" - "\tmovs r0, 0\n" - "\tstrh r0, [r3, 0x1C]\n" - "\tldrh r1, [r3, 0x1E]\n" - "\tsubs r1, 0x1\n" - "\tstrh r1, [r3, 0x1E]\n" - "\tldr r2, _080D8300 @ =REG_BLDALPHA\n" - "\tmovs r0, 0x10\n" - "\tsubs r0, r1\n" - "\tlsls r0, 8\n" - "\torrs r1, r0\n" - "\tstrh r1, [r2]\n" - "\tmovs r2, 0x1E\n" - "\tldrsh r1, [r3, r2]\n" - "\tcmp r1, 0\n" - "\tbne _080D83B0\n" - "\tldrh r0, [r3, 0x20]\n" - "\tadds r0, 0x1\n" - "\tstrh r0, [r3, 0x20]\n" - "\tstrh r1, [r3, 0x1E]\n" - "\tb _080D83B0\n" - "\t.align 2, 0\n" - "_080D8300: .4byte REG_BLDALPHA\n" - "_080D8304:\n" - "\tmov r0, sp\n" - "\tbl sub_8078914\n" - "\tldr r2, [sp]\n" - "\tmovs r3, 0x80\n" - "\tlsls r3, 6\n" - "\tlsls r4, r6, 2\n" - "\tmov r10, r4\n" - "\tadd r5, sp, 0xC\n" - "\tmovs r7, 0\n" - "\tldr r1, _080D83C0 @ =0x040000d4\n" - "\tmovs r4, 0x80\n" - "\tlsls r4, 5\n" - "\tmov r8, r5\n" - "\tldr r0, _080D83C4 @ =0x85000400\n" - "\tmov r12, r0\n" - "\tmovs r0, 0x85\n" - "\tlsls r0, 24\n" - "\tmov r9, r0\n" - "_080D832A:\n" - "\tstr r7, [sp, 0xC]\n" - "\tmov r0, r8\n" - "\tstr r0, [r1]\n" - "\tstr r2, [r1, 0x4]\n" - "\tmov r0, r12\n" - "\tstr r0, [r1, 0x8]\n" - "\tldr r0, [r1, 0x8]\n" - "\tadds r2, r4\n" - "\tsubs r3, r4\n" - "\tcmp r3, r4\n" - "\tbhi _080D832A\n" - "\tstr r7, [sp, 0xC]\n" - "\tstr r5, [r1]\n" - "\tstr r2, [r1, 0x4]\n" - "\tlsrs r0, r3, 2\n" - "\tmov r2, r9\n" - "\torrs r0, r2\n" - "\tstr r0, [r1, 0x8]\n" - "\tldr r0, [r1, 0x8]\n" - "\tldr r1, [sp, 0x4]\n" - "\tmovs r0, 0\n" - "\tstr r0, [sp, 0xC]\n" - "\tldr r0, _080D83C0 @ =0x040000d4\n" - "\tstr r5, [r0]\n" - "\tstr r1, [r0, 0x4]\n" - "\tldr r1, _080D83C8 @ =0x85000200\n" - "\tstr r1, [r0, 0x8]\n" - "\tldr r0, [r0, 0x8]\n" - "\tbl IsContest\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbne _080D8378\n" - "\tldr r2, _080D83CC @ =REG_BG1CNT\n" - "\tldrb r1, [r2]\n" - "\tmovs r0, 0xD\n" - "\tnegs r0, r0\n" - "\tands r0, r1\n" - "\tstrb r0, [r2]\n" - "_080D8378:\n" - "\tldr r0, _080D83D0 @ =gTasks\n" - "\tmov r4, r10\n" - "\tadds r1, r4, r6\n" - "\tlsls r1, 3\n" - "\tadds r1, r0\n" - "\tldrh r0, [r1, 0x20]\n" - "\tadds r0, 0x1\n" - "\tstrh r0, [r1, 0x20]\n" - "\tldr r2, _080D83D4 @ =gBattle_BG1_X\n" - "\tldr r4, _080D83D8 @ =gBattle_BG1_Y\n" - "_080D838C:\n" - "\tmovs r1, 0\n" - "\tstrh r1, [r2]\n" - "\tstrh r1, [r4]\n" - "\tldr r0, _080D83DC @ =REG_BLDCNT\n" - "\tstrh r1, [r0]\n" - "\tadds r0, 0x2\n" - "\tstrh r1, [r0]\n" - "\tldr r2, _080D83CC @ =REG_BG1CNT\n" - "\tldrb r1, [r2]\n" - "\tmovs r0, 0x4\n" - "\tnegs r0, r0\n" - "\tands r0, r1\n" - "\tmovs r1, 0x1\n" - "\torrs r0, r1\n" - "\tstrb r0, [r2]\n" - "\tadds r0, r6, 0\n" - "\tbl DestroyAnimVisualTask\n" - "_080D83B0:\n" - "\tadd sp, 0x10\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_080D83C0: .4byte 0x040000d4\n" - "_080D83C4: .4byte 0x85000400\n" - "_080D83C8: .4byte 0x85000200\n" - "_080D83CC: .4byte REG_BG1CNT\n" - "_080D83D0: .4byte gTasks\n" - "_080D83D4: .4byte gBattle_BG1_X\n" - "_080D83D8: .4byte gBattle_BG1_Y\n" - "_080D83DC: .4byte REG_BLDCNT"); -} -#endif // NONMATCHING // MATCHING void sub_80D83E0(struct Sprite *sprite) @@ -1509,7 +1349,6 @@ void sub_80D8414(u8 taskId) REG_BLDALPHA = 0x1000; REG_BG1CNT_BITFIELD.priority = 1; - REG_BG1CNT_BITFIELD.screenSize = 0; if (!IsContest()) @@ -1537,244 +1376,85 @@ void sub_80D8414(u8 taskId) gTasks[taskId].func = sub_80D851C; } -// -// NAKED -NAKED void sub_80D851C(u8 taskId) +// MATCHING +// but try task struct? +void sub_80D851C(u8 taskId) { - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0x10\n" - "\tlsls r0, 24\n" - "\tlsrs r6, r0, 24\n" - "\tldr r3, _080D8558 @ =gBattle_BG1_X\n" - "\tldr r4, _080D855C @ =gTasks\n" - "\tlsls r1, r6, 2\n" - "\tadds r1, r6\n" - "\tlsls r1, 3\n" - "\tadds r1, r4\n" - "\tldrh r0, [r1, 0x26]\n" - "\tldrh r2, [r3]\n" - "\tadds r0, r2\n" - "\tstrh r0, [r3]\n" - "\tldr r2, _080D8560 @ =gBattle_BG1_Y\n" - "\tmovs r5, 0x20\n" - "\tldrsh r0, [r1, r5]\n" - "\tcmp r0, 0x4\n" - "\tbls _080D854C\n" - "\tb _080D86D0\n" - "_080D854C:\n" - "\tlsls r0, 2\n" - "\tldr r1, _080D8564 @ =_080D8568\n" - "\tadds r0, r1\n" - "\tldr r0, [r0]\n" - "\tmov pc, r0\n" - "\t.align 2, 0\n" - "_080D8558: .4byte gBattle_BG1_X\n" - "_080D855C: .4byte gTasks\n" - "_080D8560: .4byte gBattle_BG1_Y\n" - "_080D8564: .4byte _080D8568\n" - "\t.align 2, 0\n" - "_080D8568:\n" - "\t.4byte _080D857C\n" - "\t.4byte _080D85C0\n" - "\t.4byte _080D85E2\n" - "\t.4byte _080D8624\n" - "\t.4byte _080D86AC\n" - "_080D857C:\n" - "\tlsls r0, r6, 2\n" - "\tadds r0, r6\n" - "\tlsls r0, 3\n" - "\tadds r4, r0, r4\n" - "\tldrh r0, [r4, 0x1A]\n" - "\tadds r0, 0x1\n" - "\tstrh r0, [r4, 0x1A]\n" - "\tldr r1, _080D85B8 @ =gUnknown_083D9D98\n" - "\tmovs r2, 0x1A\n" - "\tldrsh r0, [r4, r2]\n" - "\tadds r0, r1\n" - "\tldrb r1, [r0]\n" - "\tstrh r1, [r4, 0x1E]\n" - "\tldr r2, _080D85BC @ =REG_BLDALPHA\n" - "\tmovs r0, 0x11\n" - "\tsubs r0, r1\n" - "\tlsls r0, 8\n" - "\torrs r1, r0\n" - "\tstrh r1, [r2]\n" - "\tmovs r5, 0x1E\n" - "\tldrsh r0, [r4, r5]\n" - "\tcmp r0, 0x5\n" - "\tbeq _080D85AC\n" - "\tb _080D86D0\n" - "_080D85AC:\n" - "\tldrh r0, [r4, 0x20]\n" - "\tadds r0, 0x1\n" - "\tstrh r0, [r4, 0x20]\n" - "\tmovs r0, 0\n" - "\tstrh r0, [r4, 0x1E]\n" - "\tb _080D86D0\n" - "\t.align 2, 0\n" - "_080D85B8: .4byte gUnknown_083D9D98\n" - "_080D85BC: .4byte REG_BLDALPHA\n" - "_080D85C0:\n" - "\tlsls r0, r6, 2\n" - "\tadds r0, r6\n" - "\tlsls r0, 3\n" - "\tadds r1, r0, r4\n" - "\tldrh r0, [r1, 0x1E]\n" - "\tadds r0, 0x1\n" - "\tstrh r0, [r1, 0x1E]\n" - "\tlsls r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x51\n" - "\tbne _080D86D0\n" - "\tmovs r0, 0x5\n" - "\tstrh r0, [r1, 0x1E]\n" - "\tldrh r0, [r1, 0x20]\n" - "\tadds r0, 0x1\n" - "\tstrh r0, [r1, 0x20]\n" - "\tb _080D86D0\n" - "_080D85E2:\n" - "\tlsls r0, r6, 2\n" - "\tadds r0, r6\n" - "\tlsls r0, 3\n" - "\tadds r4, r0, r4\n" - "\tldrh r0, [r4, 0x1C]\n" - "\tadds r0, 0x1\n" - "\tstrh r0, [r4, 0x1C]\n" - "\tlsls r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x4\n" - "\tbne _080D86D0\n" - "\tmovs r0, 0\n" - "\tstrh r0, [r4, 0x1C]\n" - "\tldrh r1, [r4, 0x1E]\n" - "\tsubs r1, 0x1\n" - "\tstrh r1, [r4, 0x1E]\n" - "\tldr r2, _080D8620 @ =REG_BLDALPHA\n" - "\tmovs r0, 0x10\n" - "\tsubs r0, r1\n" - "\tlsls r0, 8\n" - "\torrs r1, r0\n" - "\tstrh r1, [r2]\n" - "\tmovs r0, 0x1E\n" - "\tldrsh r1, [r4, r0]\n" - "\tcmp r1, 0\n" - "\tbne _080D86D0\n" - "\tldrh r0, [r4, 0x20]\n" - "\tadds r0, 0x1\n" - "\tstrh r0, [r4, 0x20]\n" - "\tstrh r1, [r4, 0x1E]\n" - "\tb _080D86D0\n" - "\t.align 2, 0\n" - "_080D8620: .4byte REG_BLDALPHA\n" - "_080D8624:\n" - "\tmov r0, sp\n" - "\tbl sub_8078914\n" - "\tldr r2, [sp]\n" - "\tmovs r3, 0x80\n" - "\tlsls r3, 6\n" - "\tlsls r1, r6, 2\n" - "\tmov r10, r1\n" - "\tadd r5, sp, 0xC\n" - "\tmovs r7, 0\n" - "\tldr r1, _080D86E0 @ =0x040000d4\n" - "\tmovs r4, 0x80\n" - "\tlsls r4, 5\n" - "\tmov r8, r5\n" - "\tldr r0, _080D86E4 @ =0x85000400\n" - "\tmov r12, r0\n" - "\tmovs r0, 0x85\n" - "\tlsls r0, 24\n" - "\tmov r9, r0\n" - "_080D864A:\n" - "\tstr r7, [sp, 0xC]\n" - "\tmov r0, r8\n" - "\tstr r0, [r1]\n" - "\tstr r2, [r1, 0x4]\n" - "\tmov r0, r12\n" - "\tstr r0, [r1, 0x8]\n" - "\tldr r0, [r1, 0x8]\n" - "\tadds r2, r4\n" - "\tsubs r3, r4\n" - "\tcmp r3, r4\n" - "\tbhi _080D864A\n" - "\tstr r7, [sp, 0xC]\n" - "\tstr r5, [r1]\n" - "\tstr r2, [r1, 0x4]\n" - "\tlsrs r0, r3, 2\n" - "\tmov r2, r9\n" - "\torrs r0, r2\n" - "\tstr r0, [r1, 0x8]\n" - "\tldr r0, [r1, 0x8]\n" - "\tldr r1, [sp, 0x4]\n" - "\tmovs r0, 0\n" - "\tstr r0, [sp, 0xC]\n" - "\tldr r0, _080D86E0 @ =0x040000d4\n" - "\tstr r5, [r0]\n" - "\tstr r1, [r0, 0x4]\n" - "\tldr r1, _080D86E8 @ =0x85000200\n" - "\tstr r1, [r0, 0x8]\n" - "\tldr r0, [r0, 0x8]\n" - "\tbl IsContest\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbne _080D8698\n" - "\tldr r2, _080D86EC @ =REG_BG1CNT\n" - "\tldrb r1, [r2]\n" - "\tmovs r0, 0xD\n" - "\tnegs r0, r0\n" - "\tands r0, r1\n" - "\tstrb r0, [r2]\n" - "_080D8698:\n" - "\tldr r0, _080D86F0 @ =gTasks\n" - "\tmov r5, r10\n" - "\tadds r1, r5, r6\n" - "\tlsls r1, 3\n" - "\tadds r1, r0\n" - "\tldrh r0, [r1, 0x20]\n" - "\tadds r0, 0x1\n" - "\tstrh r0, [r1, 0x20]\n" - "\tldr r3, _080D86F4 @ =gBattle_BG1_X\n" - "\tldr r2, _080D86F8 @ =gBattle_BG1_Y\n" - "_080D86AC:\n" - "\tmovs r1, 0\n" - "\tstrh r1, [r3]\n" - "\tstrh r1, [r2]\n" - "\tldr r0, _080D86FC @ =REG_BLDCNT\n" - "\tstrh r1, [r0]\n" - "\tadds r0, 0x2\n" - "\tstrh r1, [r0]\n" - "\tldr r2, _080D86EC @ =REG_BG1CNT\n" - "\tldrb r1, [r2]\n" - "\tmovs r0, 0x4\n" - "\tnegs r0, r0\n" - "\tands r0, r1\n" - "\tmovs r1, 0x1\n" - "\torrs r0, r1\n" - "\tstrb r0, [r2]\n" - "\tadds r0, r6, 0\n" - "\tbl DestroyAnimVisualTask\n" - "_080D86D0:\n" - "\tadd sp, 0x10\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_080D86E0: .4byte 0x040000d4\n" - "_080D86E4: .4byte 0x85000400\n" - "_080D86E8: .4byte 0x85000200\n" - "_080D86EC: .4byte REG_BG1CNT\n" - "_080D86F0: .4byte gTasks\n" - "_080D86F4: .4byte gBattle_BG1_X\n" - "_080D86F8: .4byte gBattle_BG1_Y\n" - "_080D86FC: .4byte REG_BLDCNT"); + struct Struct_sub_8078914 subStruct; + + gBattle_BG1_X += gTasks[taskId].data[15]; + gBattle_BG1_Y += 0; + + switch (gTasks[taskId].data[12]) + { + case 0: + + gTasks[taskId].data[9] += 1; + gTasks[taskId].data[11] = gUnknown_083D9D98[gTasks[taskId].data[9]]; + + REG_BLDALPHA = gTasks[taskId].data[11] | ((17 - gTasks[taskId].data[11]) << 8); + + if (gTasks[taskId].data[11] == 5) + { + gTasks[taskId].data[12] += 1; + gTasks[taskId].data[11] = 0; + } + break; + + case 1: + + gTasks[taskId].data[11] += 1; + + if (gTasks[taskId].data[11] == 0x51) + { + gTasks[taskId].data[11] = 5; + gTasks[taskId].data[12] += 1; + } + break; + + case 2: + + gTasks[taskId].data[10] += 1; + + if (gTasks[taskId].data[10] == 4) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11] -= 1; + + REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); + + if (gTasks[taskId].data[11] == 0) + { + gTasks[taskId].data[12] += 1; + gTasks[taskId].data[11] = 0; + } + } + break; + + case 3: + + sub_8078914(&subStruct); + + DmaFill32Large(3, 0, subStruct.field_0, 0x2000, 0x1000); + DmaClear32(3, subStruct.field_4, 0x800); + + if (!IsContest()) + REG_BG1CNT_BITFIELD.charBaseBlock = 0; + + gTasks[taskId].data[12] += 1; + + case 4: + + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + + REG_BG1CNT_BITFIELD.priority = 1; + + DestroyAnimVisualTask(taskId); + } } // MATCHING @@ -1830,7 +1510,6 @@ void sub_80D8700(struct Sprite *sprite) } -#ifdef NONMATCHING // https://pastebin.com/8wvBFV2F // void sub_80D8874(struct Sprite *sprite) @@ -2023,7 +1702,8 @@ void sub_80D8874(struct Sprite *sprite) // _AD0 / return return; } -#else + +/* NAKED void sub_80D8874(struct Sprite *sprite) { asm_unified("\tpush {r4-r6,lr}\n" @@ -2337,7 +2017,7 @@ NAKED void sub_80D8874(struct Sprite *sprite) "\t.align 2, 0\n" "_080D8AD8: .4byte gAnimVisualTaskCount"); } -#endif +*/ // MATCHING void sub_80D8ADC(u8 taskId) @@ -2347,28 +2027,69 @@ void sub_80D8ADC(u8 taskId) task->func = sub_80D8AF8; } -#ifdef NONMATCHING -// -void sub_80D8AF8(u8 taskId) +// +/*void sub_80D8AF8(u8 taskId) { // struct Task *task = &gTasks[taskId]; // - if (task->data[0] != 1) // cmp 1 + +} +//*/ + +/*void sub_80D8AF8(u8 taskId) +{ + // + struct Task *task = &gTasks[taskId]; + + if () // cmp 1 != { // - if (task->data[0] <= 1) //cmp 2 + if () // cmp 2 <= { - // - if (task->data[0] != 0) // cmp 3 + // + if () // cmp 3 != { // return; } - else // == + else // cmp 3 == { // _26 + if () // cmp 5 <= + { + // + return; + } + } + } + else // cmp 2 > + { + // _20 + } + } + else // cmp 1 == + { + // _3C + } + // _78 + + // + /*if (task->data[0] != 1) // cmp 1 + { + // + if (task->data[0] <= 1) //cmp 2 + { + // + if (task->data[0] == 0) // cmp 3 + { + // + // return; + //} + //else // == + //{ + // _26 task->data[4] += 1; if ((s16)task->data[4] > 2) // cmp 5 @@ -2413,7 +2134,8 @@ void sub_80D8AF8(u8 taskId) if (task->data[5] == 0) // cmp 6 { // ... - sub_80D8BA8(task->data[3]); + //sub_80D8BA8(task->data[3]); + sub_80D8BA8(task->data[3], task->data[2], taskId, 1); if ((task->data[3]) != 0) // cmp 7 // << 24 { @@ -2456,9 +2178,10 @@ void sub_80D8AF8(u8 taskId) // _78 task->data[0] += 1; - //return; -} -#else + //return;*/ +//} +//*/ + NAKED void sub_80D8AF8(u8 taskId) { asm_unified("\tpush {r4,r5,lr}\n" @@ -2556,16 +2279,29 @@ NAKED void sub_80D8AF8(u8 taskId) "\tpop {r0}\n" "\tbx r0"); } -#endif // NONMATCHING /* // NOT NONMATCHING void sub_80D8BA8(u8 a1, u8 a2, u8 a3, u8 a4)//(u8 spriteId, u8 taskId, u8 a3)//(u8 taskId) { // - //struct Task *task = &gTasks[taskId]; + //struct Task *task = &gTasks[a2]; //u16 i, j; -} */ + //task->data[3]++; + //u8 r5bank = ; + + if (gUnknown_083D9DC4[a1+0x3] >> 4 != 2 + || IsAnimBankSpriteVisible(GetBattlerAtPosition(gUnknown_083D9DC4[a1+0x2]))) + { + // + } + else + { + // _C94 + } + // _CA6 +} +*/ NAKED void sub_80D8BA8(u8 a1, u8 a2, u8 a3, u8 a4)//spriteId, u8 taskId, u8 a3)//(u8 taskId) { @@ -2745,7 +2481,7 @@ NAKED void sub_80D8BA8(u8 a1, u8 a2, u8 a3, u8 a4)//spriteId, u8 taskId, u8 a3)/ "\tpop {r4-r7}\n" "\tpop {r1}\n" "\tbx r1"); -}//*/ +} // MATCHING void sub_80D8D1C(struct Sprite *sprite) @@ -2762,7 +2498,7 @@ void sub_80D8D1C(struct Sprite *sprite) if (sprite->data[0] == 1 && sprite->data[5] == 0) { spriteId = CreateSprite(&gBattleAnimSpriteTemplate_83D9C78, - sprite->data[3], sprite->data[4], sprite->subpriority); + sprite->data[3], sprite->data[4], sprite->subpriority); sprite->data[0] = spriteId; @@ -2888,5 +2624,5 @@ void sub_80D8FC0(u8 taskId) DestroyAnimVisualTask(taskId); } -// 26 MATCHING -// 05 NONMATCHING (1 NAKED)
\ No newline at end of file +// 28 MATCHING +// 04 NAKED |