diff options
author | garakmon <thomastaps194@comcast.net> | 2018-07-22 10:41:14 -0400 |
---|---|---|
committer | garakmon <thomastaps194@comcast.net> | 2018-07-22 10:41:14 -0400 |
commit | 94e54887d42bdfd563923d6f3bc72005c1411e51 (patch) | |
tree | e076e6ad3faec16192a35ab9064f3234e0347ce8 /src | |
parent | 9b13705ebdc4d0ee0ffef6f6e39d88133fcff72f (diff) |
decompile more ice.s
Diffstat (limited to 'src')
-rw-r--r-- | src/battle/anim/ice.c | 2305 |
1 files changed, 2290 insertions, 15 deletions
diff --git a/src/battle/anim/ice.c b/src/battle/anim/ice.c index e9dc4c099..2e005e606 100644 --- a/src/battle/anim/ice.c +++ b/src/battle/anim/ice.c @@ -1,21 +1,29 @@ #include "global.h" +#include "main.h" #include "trig.h" #include "rom_8077ABC.h" +#include "battle.h" #include "battle_anim.h" #include "constants/battle_constants.h" #include "task.h" +#include "decompress.h" +#include "palette.h" +#include "random.h" extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +extern u8 gAnimVisualTaskCount; +extern u8 gBanksBySide[]; +extern u8 gBankSpriteIds[]; // ? extern u16 gBattle_BG1_X; extern u16 gBattle_BG1_Y; -extern const u8 gUnknown_083970E8[]; // or u16?? +extern const u8 gUnknown_083970E8[]; -//extern u16 temp_1; -//extern u16 temp_2; +extern struct INCBIN_U8 gBattleAnimFogTilemap; +extern struct INCBIN_U8 gWeatherFog1Tiles; // is this ok or? void sub_80D7704(struct Sprite *sprite); void sub_80D78EC(struct Sprite *sprite); @@ -37,6 +45,15 @@ void sub_80D7C08(struct Sprite *sprite); void sub_80D7C8C(struct Sprite *sprite); void sub_80D7E18(struct Sprite *sprite); void sub_80D8048(struct Sprite *sprite); +void sub_80D8874(struct Sprite *sprite); +void sub_80D8E00(struct Sprite *sprite); +void sub_80D8EE0(struct Sprite *sprite); +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 taskId); const union AnimCmd gSpriteAnim_83D9B58[] = { @@ -521,15 +538,47 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_83D9F0C = // NOT EQUIVALENT void sub_80D7704(struct Sprite *sprite) { + // + u8 r9, r8, r3, r6; + s16 r4, r10; + sprite->oam.tileNum += 7; + r9 = GetBattlerSpriteCoord(gAnimBankTarget, 2); + r8 = GetBattlerSpriteCoord(gAnimBankTarget, 3); + r3 = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + r6 = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + + sprite->data[0] = gBattleAnimArgs[4]; + + sprite->data[1] = r3 + gBattleAnimArgs[0]; //??? + sprite->data[2] = r9 + gBattleAnimArgs[2]; + sprite->data[3] = r6 + gBattleAnimArgs[1]; + sprite->data[4] = r8 + gBattleAnimArgs[3]; + + sub_8078314(sprite); + + if ((u32)(r9 + 32) <= 304 || (u32)(r8 + 32) <= 224) // cmp 1 + { + r4 = sprite->data[1]; + r10 = 304; + // _080D77AA + } + // _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]; + sprite->data[1] = gBattleAnimArgs[0];*/ } #else NAKED void sub_80D7704(struct Sprite *sprite) @@ -724,7 +773,7 @@ NAKED void sub_80D7704(struct Sprite *sprite) "\t.align 2, 0\n" "_080D7884: .4byte sub_80D7888"); } -#endif // NONMATCHING +#endif // NONMATCHING // MATCHING void sub_80D7888(struct Sprite *sprite) @@ -834,7 +883,6 @@ void sub_80D7A64(struct Sprite *sprite) sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2); sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3]; } - else SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]); @@ -888,7 +936,7 @@ void sub_80D7BA0(struct Sprite *sprite) sprite->data[0] = 128; - tempVar = GetBattlerSide(gAnimBankAttacker) << 24 != 0 ? 20 : 65516; + tempVar = GetBattlerSide(gAnimBankAttacker) != 0 ? 20 : 65516; sprite->data[3] = Sin(sprite->data[0], tempVar); sprite->data[4] = Cos(sprite->data[0], 0xF); @@ -902,7 +950,7 @@ void sub_80D7BA0(struct Sprite *sprite) void sub_80D7C08(struct Sprite *sprite) { s16 tempVar; - tempVar = GetBattlerSide(gAnimBankAttacker) << 24 != 0 ? 20 : 65516; + tempVar = GetBattlerSide(gAnimBankAttacker) != 0 ? 20 : 65516; if (sprite->data[5] <= 31) { @@ -959,7 +1007,7 @@ void sub_80D7CD4(struct Sprite *sprite) else SetAverageBattlerPositions(gAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]); - if (GetBattlerSide(gAnimBankAttacker) << 24 != B_SIDE_PLAYER) + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) sprite->data[2] -= gBattleAnimArgs[2]; else @@ -1031,7 +1079,7 @@ void sub_80D7E88(struct Sprite *sprite) { SetAverageBattlerPositions(gAnimBankTarget, 0, &sprite->pos1.x, &sprite->pos1.y); - if (GetBattlerSide(gAnimBankAttacker) << 24 != B_SIDE_PLAYER) + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) gBattleAnimArgs[0] = -gBattleAnimArgs[0]; sprite->pos1.x += gBattleAnimArgs[0]; @@ -1059,7 +1107,7 @@ void sub_80D7F10(struct Sprite *sprite) { SetAverageBattlerPositions(gAnimBankAttacker, 0, &sprite->pos1.x, &sprite->pos1.y); - if (GetBattlerSide(gAnimBankAttacker) << 24 != B_SIDE_PLAYER) + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) sprite->pos1.x -= gBattleAnimArgs[0]; else @@ -1078,7 +1126,7 @@ void sub_80D7F10(struct Sprite *sprite) { SetAverageBattlerPositions(gAnimBankTarget, 0, &sprite->pos1.x, &sprite->pos1.y); - if (GetBattlerSide(gAnimBankTarget) << 24 != B_SIDE_PLAYER) + if (GetBattlerSide(gAnimBankTarget) != B_SIDE_PLAYER) sprite->pos1.x -= gBattleAnimArgs[0]; else @@ -1090,7 +1138,7 @@ void sub_80D7F10(struct Sprite *sprite) } sprite->data[7] = battler; - if (gBattleAnimArgs[5] == 0 || IsDoubleBattle() << 24 == 0) + if (gBattleAnimArgs[5] == 0 || IsDoubleBattle() == 0) tempVar = 0x20; else @@ -1098,7 +1146,7 @@ void sub_80D7F10(struct Sprite *sprite) sprite->data[6] = tempVar; - if (GetBattlerSide(gAnimBankTarget) << 24 == B_SIDE_PLAYER) + if (GetBattlerSide(gAnimBankTarget) == B_SIDE_PLAYER) sprite->pos1.y += 8; sprite->data[0] = gBattleAnimArgs[3]; @@ -1118,7 +1166,7 @@ void sub_80D7F10(struct Sprite *sprite) // MATCHING void sub_80D8048(struct Sprite *sprite) { - if (TranslateAnimLinear(sprite) << 24 == 0) + if (TranslateAnimLinear(sprite) == 0) { sprite->pos2.x += Sin(sprite->data[5], sprite->data[6]); sprite->pos2.y += Cos(sprite->data[5], -6); @@ -1135,22 +1183,2249 @@ void sub_80D8048(struct Sprite *sprite) DestroyAnimSprite(sprite); } +#ifdef NONMATCHING +// haze? +// +void sub_80D80E0(u8 taskId)//?? +{ + struct Struct_sub_8078914 subStruct; + + // + REG_BLDCNT = 0x3F42; // + + REG_BLDALPHA = 0x1000; // + + + // + REG_BG1CNT_BITFIELD.priority = 1;//charBaseBlock = 1; // normal.c <1131> + + REG_BG1CNT_BITFIELD.screenSize = 0; // + // dark.c <844> + + // this bit is different + if (!IsContest()) + REG_BG1CNT_BITFIELD.charBaseBlock = 1; + + // + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + sub_8078914(&subStruct); + + // <-- ? + DmaFill32Defvars(3, 0, subStruct.field_4, 0x1000); + DmaCopy32Defvars(3, &gWeatherFog1Tiles, subStruct.field_0, 0x1000); + + LZDecompressVram(&gBattleAnimFogTilemap, subStruct.field_4); + // ? --> + + LoadPalette(&gUnknown_083970E8, subStruct.field_8 * 16, 32); + + if (IsContest()) // + + sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0); // + + + // + gTasks[taskId].func = sub_80D81E0; // + +} + +#else +NAKED void sub_80D80E0(u8 taskId) +{ + asm_unified(".equ REG_BLDCNT, 0x4000050\n" + ".equ REG_BG1CNT, 0x400000A\n" + ".equ REG_BG1HOFS, 0x4000014\n" + "\tpush {r4,r5,lr}\n" + "\tsub sp, 0x10\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tldr r1, _080D81A8 @ =REG_BLDCNT\n" + "\tldr r2, _080D81AC @ =0x00003f42\n" + "\tadds r0, r2, 0\n" + "\tstrh r0, [r1]\n" + "\tadds r1, 0x2\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 5\n" + "\tadds r0, r2, 0\n" + "\tstrh r0, [r1]\n" + "\tldr r4, _080D81B0 @ =REG_BG1CNT\n" + "\tldrb r1, [r4]\n" + "\tmovs r0, 0x4\n" + "\tnegs r0, r0\n" + "\tands r0, r1\n" + "\tmovs r1, 0x1\n" + "\torrs r0, r1\n" + "\tstrb r0, [r4]\n" + "\tldrb r1, [r4, 0x1]\n" + "\tmovs r0, 0x3F\n" + "\tands r0, r1\n" + "\tstrb r0, [r4, 0x1]\n" + "\tbl IsContest\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _080D812A\n" + "\tldrb r0, [r4]\n" + "\tmovs r1, 0xD\n" + "\tnegs r1, r1\n" + "\tands r1, r0\n" + "\tmovs r0, 0x4\n" + "\torrs r1, r0\n" + "\tstrb r1, [r4]\n" + "_080D812A:\n" + "\tldr r0, _080D81B4 @ =gBattle_BG1_X\n" + "\tmovs r1, 0\n" + "\tstrh r1, [r0]\n" + "\tldr r0, _080D81B8 @ =gBattle_BG1_Y\n" + "\tstrh r1, [r0]\n" + "\tldr r0, _080D81BC @ =REG_BG1HOFS\n" + "\tstrh r1, [r0]\n" + "\tadds r0, 0x2\n" + "\tstrh r1, [r0]\n" + "\tmov r0, sp\n" + "\tbl sub_8078914\n" + "\tldr r1, [sp, 0x4]\n" + "\tmovs r0, 0\n" + "\tstr r0, [sp, 0xC]\n" + "\tldr r0, _080D81C0 @ =0x040000d4\n" + "\tadd r2, sp, 0xC\n" + "\tstr r2, [r0]\n" + "\tstr r1, [r0, 0x4]\n" + "\tldr r2, _080D81C4 @ =0x85000400\n" + "\tstr r2, [r0, 0x8]\n" + "\tldr r2, [r0, 0x8]\n" + "\tldr r2, _080D81C8 @ =gWeatherFog1Tiles\n" + "\tldr r3, [sp]\n" + "\tstr r2, [r0]\n" + "\tstr r3, [r0, 0x4]\n" + "\tldr r2, _080D81CC @ =0x80000400\n" + "\tstr r2, [r0, 0x8]\n" + "\tldr r0, [r0, 0x8]\n" + "\tldr r0, _080D81D0 @ =gBattleAnimFogTilemap\n" + "\tbl LZDecompressVram\n" + "\tldr r0, _080D81D4 @ =gUnknown_083970E8\n" + "\tmov r1, sp\n" + "\tldrb r1, [r1, 0x8]\n" + "\tlsls r1, 4\n" + "\tmovs r2, 0x20\n" + "\tbl LoadPalette\n" + "\tbl IsContest\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _080D8190\n" + "\tmov r0, sp\n" + "\tldrb r0, [r0, 0x8]\n" + "\tldr r1, [sp, 0x4]\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0\n" + "\tbl sub_80763FC\n" + "_080D8190:\n" + "\tldr r0, _080D81D8 @ =gTasks\n" + "\tlsls r1, r5, 2\n" + "\tadds r1, r5\n" + "\tlsls r1, 3\n" + "\tadds r1, r0\n" + "\tldr r0, _080D81DC @ =sub_80D81E0\n" + "\tstr r0, [r1]\n" + "\tadd sp, 0x10\n" + "\tpop {r4,r5}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_080D81A8: .4byte REG_BLDCNT\n" + "_080D81AC: .4byte 0x00003f42\n" + "_080D81B0: .4byte REG_BG1CNT\n" + "_080D81B4: .4byte gBattle_BG1_X\n" + "_080D81B8: .4byte gBattle_BG1_Y\n" + "_080D81BC: .4byte REG_BG1HOFS\n" + "_080D81C0: .4byte 0x040000d4\n" + "_080D81C4: .4byte 0x85000400\n" + "_080D81C8: .4byte gWeatherFog1Tiles\n" + "_080D81CC: .4byte 0x80000400\n" + "_080D81D0: .4byte gBattleAnimFogTilemap\n" + "_080D81D4: .4byte gUnknown_083970E8\n" + "_080D81D8: .4byte gTasks\n" + "_080D81DC: .4byte sub_80D81E0"); +} +#endif // NONMATCHING +// +// static void sub_80D81E0(u8 taskId); +#ifdef NONMATCHING +// +void sub_80D81E0(u8 taskId) +{ + // + gBattle_BG1_X += 0xFFFF; +} +#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) +{ + // + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + sprite->callback = TranslateAnimSpriteToTargetMonLocation; +} +#ifdef NONMATCHING +// write down the 0x85000400, 0x040000d4 offset keys +void sub_80D8414(u8 taskId) +{ + // + struct Struct_sub_8078914 subStruct; + // + REG_BLDCNT = 0x3F42; // + + REG_BLDALPHA = 0x1000; // + + // + REG_BG1CNT_BITFIELD.priority = 1; + REG_BG1CNT_BITFIELD.screenSize = 0; + if (!IsContest()) + REG_BG1CNT_BITFIELD.charBaseBlock = 1; + // + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + sub_8078914(&subStruct); + // <-- ? + DmaFill32Defvars(3, 0, subStruct.field_4, 0x1000); + DmaCopy32Defvars(3, &gWeatherFog1Tiles, subStruct.field_0, 0x1000); + LZDecompressVram(&gBattleAnimFogTilemap, subStruct.field_4); + // ? --> + LoadPalette(&gUnknown_083970E8, subStruct.field_8 * 16, 32); + if (IsContest()) // + + sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0); // + + gTasks[taskId].data[15] = 0xFFFF; + gTasks[taskId].func = sub_80D851C; +} +#else +NAKED +void sub_80D8414(u8 taskId) +{ + asm_unified(".equ REG_BLDCNT, 0x4000050\n" + ".equ REG_BG1CNT, 0x400000A\n" + ".equ REG_BG1HOFS, 0x4000014\n" + "\tpush {r4,r5,lr}\n" + "\tsub sp, 0x10\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tldr r1, _080D84E0 @ =REG_BLDCNT\n" + "\tldr r2, _080D84E4 @ =0x00003f42\n" + "\tadds r0, r2, 0\n" + "\tstrh r0, [r1]\n" + "\tadds r1, 0x2\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 5\n" + "\tadds r0, r2, 0\n" + "\tstrh r0, [r1]\n" + "\tldr r4, _080D84E8 @ =REG_BG1CNT\n" + "\tldrb r1, [r4]\n" + "\tmovs r0, 0x4\n" + "\tnegs r0, r0\n" + "\tands r0, r1\n" + "\tmovs r1, 0x1\n" + "\torrs r0, r1\n" + "\tstrb r0, [r4]\n" + "\tldrb r1, [r4, 0x1]\n" + "\tmovs r0, 0x3F\n" + "\tands r0, r1\n" + "\tstrb r0, [r4, 0x1]\n" + "\tbl IsContest\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _080D845E\n" + "\tldrb r0, [r4]\n" + "\tmovs r1, 0xD\n" + "\tnegs r1, r1\n" + "\tands r1, r0\n" + "\tmovs r0, 0x4\n" + "\torrs r1, r0\n" + "\tstrb r1, [r4]\n" + "_080D845E:\n" + "\tldr r0, _080D84EC @ =gBattle_BG1_X\n" + "\tmovs r1, 0\n" + "\tstrh r1, [r0]\n" + "\tldr r0, _080D84F0 @ =gBattle_BG1_Y\n" + "\tstrh r1, [r0]\n" + "\tldr r0, _080D84F4 @ =REG_BG1HOFS\n" + "\tstrh r1, [r0]\n" + "\tadds r0, 0x2\n" + "\tstrh r1, [r0]\n" + "\tmov r0, sp\n" + "\tbl sub_8078914\n" + "\tldr r1, [sp, 0x4]\n" + "\tmovs r0, 0\n" + "\tstr r0, [sp, 0xC]\n" + "\tldr r0, _080D84F8 @ =0x040000d4\n" + "\tadd r2, sp, 0xC\n" + "\tstr r2, [r0]\n" + "\tstr r1, [r0, 0x4]\n" + "\tldr r2, _080D84FC @ =0x85000400\n" + "\tstr r2, [r0, 0x8]\n" + "\tldr r2, [r0, 0x8]\n" + "\tldr r2, _080D8500 @ =gWeatherFog1Tiles\n" + "\tldr r3, [sp]\n" + "\tstr r2, [r0]\n" + "\tstr r3, [r0, 0x4]\n" + "\tldr r2, _080D8504 @ =0x80000400\n" + "\tstr r2, [r0, 0x8]\n" + "\tldr r0, [r0, 0x8]\n" + "\tldr r0, _080D8508 @ =gBattleAnimFogTilemap\n" + "\tbl LZDecompressVram\n" + "\tldr r0, _080D850C @ =gUnknown_083970E8\n" + "\tmov r1, sp\n" + "\tldrb r1, [r1, 0x8]\n" + "\tlsls r1, 4\n" + "\tmovs r2, 0x20\n" + "\tbl LoadPalette\n" + "\tbl IsContest\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _080D84C4\n" + "\tmov r0, sp\n" + "\tldrb r0, [r0, 0x8]\n" + "\tldr r1, [sp, 0x4]\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0\n" + "\tbl sub_80763FC\n" + "_080D84C4:\n" + "\tldr r1, _080D8510 @ =gTasks\n" + "\tlsls r0, r5, 2\n" + "\tadds r0, r5\n" + "\tlsls r0, 3\n" + "\tadds r0, r1\n" + "\tldr r1, _080D8514 @ =0x0000ffff\n" + "\tstrh r1, [r0, 0x26]\n" + "\tldr r1, _080D8518 @ =sub_80D851C\n" + "\tstr r1, [r0]\n" + "\tadd sp, 0x10\n" + "\tpop {r4,r5}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_080D84E0: .4byte REG_BLDCNT\n" + "_080D84E4: .4byte 0x00003f42\n" + "_080D84E8: .4byte REG_BG1CNT\n" + "_080D84EC: .4byte gBattle_BG1_X\n" + "_080D84F0: .4byte gBattle_BG1_Y\n" + "_080D84F4: .4byte REG_BG1HOFS\n" + "_080D84F8: .4byte 0x040000d4\n" + "_080D84FC: .4byte 0x85000400\n" + "_080D8500: .4byte gWeatherFog1Tiles\n" + "_080D8504: .4byte 0x80000400\n" + "_080D8508: .4byte gBattleAnimFogTilemap\n" + "_080D850C: .4byte gUnknown_083970E8\n" + "_080D8510: .4byte gTasks\n" + "_080D8514: .4byte 0x0000ffff\n" + "_080D8518: .4byte sub_80D851C"); +} +#endif // NONMATCHING +// +// NAKED +NAKED 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"); +} + +#ifdef NONMATCHING +// +void sub_80D8700(struct Sprite *sprite) +{ + // + u8 tempVar; + u8 attackerCoord; + u8 targetCoord; + //u32 + u8 battler; // battler + + sprite->data[0] = gBattleAnimArgs[0]; + + attackerCoord = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + targetCoord = GetBattlerSpriteCoord(gAnimBankTarget, 2); + + // maybe these need to be temp vars + //if ((u8)(GetBattlerSpriteCoord(gAnimBankAttacker, 2) << 24) > + // (u8)(GetBattlerSpriteCoord(gAnimBankTarget, 2) << 24)) + if ((u32)attackerCoord > (u32)targetCoord) // there were << 24 here + { + // is this a temp var? or... + sprite->data[7] = 0x8000; + } + + // B_SIDE_PLAYER? + if ((gBanksBySide[gAnimBankTarget] & 1) == 0) + { + // + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + + if ((sprite->data[7] & 0x8000) != 0 + && (gBanksBySide[gAnimBankAttacker] & 1) == 0) + { + // u8 spriteId = GetAnimBattlerSpriteId(1) + sprite->subpriority = gSprites[gBankSpriteIds[GetAnimBattlerSpriteId(1)]].subpriority + 1; + } + sprite->data[6] = 1; + } + // + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankAttacker, 2); + sprite->pos1.y = GetBattlerSpriteCoord(gAnimBankAttacker, 3); + + if (gBattleAnimArgs[7] != 0) + { + // + sprite->data[1] = sprite->pos1.x + gBattleAnimArgs[1]; + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2) + gBattleAnimArgs[3]; + sprite->data[3] = sprite->pos1.y + gBattleAnimArgs[2]; + battler = gAnimBankAttacker; + tempVar = 3; + } // r1 = 3 ; r0 = gAnimBankAttacker + else + { + // + sprite->data[1] = sprite->pos1.x + gBattleAnimArgs[1]; + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 0) + gBattleAnimArgs[3]; + sprite->data[3] = sprite->pos1.y + gBattleAnimArgs[2]; + battler = gAnimBankTarget; + tempVar = 1; + } // r1 = 1 ; r0 = gAnimBankTarget + sprite->data[4] = GetBattlerSpriteCoord(battler, tempVar) + gBattleAnimArgs[4]; + sprite->data[7] |= (u16)sub_8079ED4(battler); + + // + + if (IsContest() != 0) + { + sprite->data[6] = 1; + sprite->subpriority = 0x80; + } + + InitAnimLinearTranslation(sprite); // + + sprite->callback = sub_80D8874; // + + +} +#else +NAKED void sub_80D8700(struct Sprite *sprite) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r8\n" + "\tpush {r7}\n" + "\tadds r5, r0, 0\n" + "\tldr r6, _080D87E8 @ =gBattleAnimArgs\n" + "\tldrh r0, [r6]\n" + "\tstrh r0, [r5, 0x2E]\n" + "\tldr r0, _080D87EC @ =gAnimBankAttacker\n" + "\tmov r8, r0\n" + "\tldrb r0, [r0]\n" + "\tmovs r1, 0x2\n" + "\tbl GetBattlerSpriteCoord\n" + "\tadds r4, r0, 0\n" + "\tldr r7, _080D87F0 @ =gAnimBankTarget\n" + "\tldrb r0, [r7]\n" + "\tmovs r1, 0x2\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r4, 24\n" + "\tlsls r0, 24\n" + "\tcmp r4, r0\n" + "\tbcs _080D8734\n" + "\tmovs r0, 0x80\n" + "\tlsls r0, 8\n" + "\tstrh r0, [r5, 0x3C]\n" + "_080D8734:\n" + "\tldr r3, _080D87F4 @ =gBanksBySide\n" + "\tldrb r0, [r7]\n" + "\tadds r0, r3\n" + "\tldrb r1, [r0]\n" + "\tmovs r2, 0x1\n" + "\tadds r0, r2, 0\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbne _080D8794\n" + "\tldrh r0, [r6, 0x2]\n" + "\tnegs r0, r0\n" + "\tstrh r0, [r6, 0x2]\n" + "\tldrh r0, [r6, 0x6]\n" + "\tnegs r0, r0\n" + "\tstrh r0, [r6, 0x6]\n" + "\tmovs r1, 0x3C\n" + "\tldrsh r0, [r5, r1]\n" + "\tmovs r1, 0x80\n" + "\tlsls r1, 8\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _080D8790\n" + "\tmov r1, r8\n" + "\tldrb r0, [r1]\n" + "\tadds r0, r3\n" + "\tldrb r1, [r0]\n" + "\tadds r0, r2, 0\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbne _080D8790\n" + "\tmovs r0, 0x1\n" + "\tbl GetAnimBattlerSpriteId\n" + "\tldr r2, _080D87F8 @ =gSprites\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tlsls r1, r0, 4\n" + "\tadds r1, r0\n" + "\tlsls r1, 2\n" + "\tadds r1, r2\n" + "\tadds r1, 0x43\n" + "\tldrb r0, [r1]\n" + "\tadds r0, 0x1\n" + "\tadds r1, r5, 0\n" + "\tadds r1, 0x43\n" + "\tstrb r0, [r1]\n" + "_080D8790:\n" + "\tmovs r0, 0x1\n" + "\tstrh r0, [r5, 0x3A]\n" + "_080D8794:\n" + "\tldr r4, _080D87EC @ =gAnimBankAttacker\n" + "\tldrb r0, [r4]\n" + "\tmovs r1, 0x2\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tstrh r0, [r5, 0x20]\n" + "\tldrb r0, [r4]\n" + "\tmovs r1, 0x3\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tstrh r0, [r5, 0x22]\n" + "\tldr r6, _080D87E8 @ =gBattleAnimArgs\n" + "\tmovs r1, 0xE\n" + "\tldrsh r0, [r6, r1]\n" + "\tcmp r0, 0\n" + "\tbeq _080D87FC\n" + "\tldrh r0, [r6, 0x2]\n" + "\tldrh r1, [r5, 0x20]\n" + "\tadds r0, r1\n" + "\tstrh r0, [r5, 0x30]\n" + "\tldr r4, _080D87F0 @ =gAnimBankTarget\n" + "\tldrb r0, [r4]\n" + "\tmovs r1, 0x2\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tldrh r1, [r6, 0x6]\n" + "\tadds r0, r1\n" + "\tstrh r0, [r5, 0x32]\n" + "\tldrh r0, [r6, 0x4]\n" + "\tldrh r1, [r5, 0x22]\n" + "\tadds r0, r1\n" + "\tstrh r0, [r5, 0x34]\n" + "\tldrb r0, [r4]\n" + "\tmovs r1, 0x3\n" + "\tb _080D8824\n" + "\t.align 2, 0\n" + "_080D87E8: .4byte gBattleAnimArgs\n" + "_080D87EC: .4byte gAnimBankAttacker\n" + "_080D87F0: .4byte gAnimBankTarget\n" + "_080D87F4: .4byte gBanksBySide\n" + "_080D87F8: .4byte gSprites\n" + "_080D87FC:\n" + "\tldrh r0, [r6, 0x2]\n" + "\tldrh r1, [r5, 0x20]\n" + "\tadds r0, r1\n" + "\tstrh r0, [r5, 0x30]\n" + "\tldr r4, _080D886C @ =gAnimBankTarget\n" + "\tldrb r0, [r4]\n" + "\tmovs r1, 0\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tldrh r1, [r6, 0x6]\n" + "\tadds r0, r1\n" + "\tstrh r0, [r5, 0x32]\n" + "\tldrh r0, [r6, 0x4]\n" + "\tldrh r1, [r5, 0x22]\n" + "\tadds r0, r1\n" + "\tstrh r0, [r5, 0x34]\n" + "\tldrb r0, [r4]\n" + "\tmovs r1, 0x1\n" + "_080D8824:\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tldrh r6, [r6, 0x8]\n" + "\tadds r0, r6\n" + "\tstrh r0, [r5, 0x36]\n" + "\tldrb r0, [r4]\n" + "\tbl sub_8079ED4\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 16\n" + "\tldrh r1, [r5, 0x3C]\n" + "\torrs r0, r1\n" + "\tstrh r0, [r5, 0x3C]\n" + "\tbl IsContest\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _080D8858\n" + "\tmovs r0, 0x1\n" + "\tstrh r0, [r5, 0x3A]\n" + "\tadds r1, r5, 0\n" + "\tadds r1, 0x43\n" + "\tmovs r0, 0x80\n" + "\tstrb r0, [r1]\n" + "_080D8858:\n" + "\tadds r0, r5, 0\n" + "\tbl InitAnimLinearTranslation\n" + "\tldr r0, _080D8870 @ =sub_80D8874\n" + "\tstr r0, [r5, 0x1C]\n" + "\tpop {r3}\n" + "\tmov r8, r3\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_080D886C: .4byte gAnimBankTarget\n" + "_080D8870: .4byte sub_80D8874"); +} +#endif // NONMATCHING + +#ifdef NONMATCHING +// https://pastebin.com/8wvBFV2F +// +void sub_80D8874(struct Sprite *sprite) +{ + s16 r0, r3; + s8 r1; + + // is this a temp var? + if ((sprite->data[7] & 0xFF) != 1) // cmp 1 + { + // + if ((sprite->data[7] & 0xFF) <= 1) // cmp 2 + { + // + if ((sprite->data[7] & 0xFF) != 0) // cmp 3 + { + // _AD0 + return; + } + // _896 (else?) + TranslateAnimLinear(sprite); + sprite->pos2.x += ((sprite->data[5] * 2 + gSineTable[0]) >> 4); + + if (sprite->data[6] != 0) // cmp 5 + { + // ... + r0 = sprite->data[5] - 8; + } + else // == + { + // _8C4 + r0 = sprite->data[5] + 8; + } + // _8C8 + sprite->data[5] = r0 & 0xFF; + + if (sprite->data[0] >= 0) // cmp 6 + { + // _AD0 + return; + } + // < _8D6 (else?) + // is this a temp var? + sprite->pos1.x = GetBattlerSpriteCoord(gAnimBankTarget, 0); + sprite->data[1] = GetBattlerSpriteCoord(gAnimBankTarget, 0); + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 0); + + // is sprite->pos2.y + sprite->pos1.y also a temp var??? + sprite->pos1.y += sprite->pos2.y; + sprite->data[3] = sprite->pos2.y + sprite->pos1.y; + sprite->data[4] = sprite->pos2.y + sprite->pos1.y + 0x1D; + + sprite->data[7] += 1; + + if ((gMain.inBattle & 2) != 0 + || (gBanksBySide[gAnimBankTarget] & 1) != 0) // cmp 7 || cmp 8 + { + // ... + sprite->data[5] = 204; + } + else + { + // _938 + sprite->data[5] = 80; + } + // _93A + sprite->pos2.y = 0; + + sprite->pos2.x = (sprite->data[5] * 2 + gSineTable[0]) >> 3; + sprite->data[5] = (sprite->data[5] + 2) & 0xFF; + + InitAnimLinearTranslation(sprite); + + return; + } + else // > // /?????????? this little bit is at the end + { + // _88E // could this be an else if? + if ((sprite->data[7] & 0xFF) == 2) // cmp 4 + { + // _A94 + if (TranslateAnimLinear(sprite) != 0) // cmp 15 + { + if ((sprite->oam.affineMode & 1) != 0) // cmp 16 + { + //... + FreeOamMatrix(sprite->oam.matrixNum); + sprite->oam.affineMode = (sprite->oam.affineMode & -4); + } + // _AC2 + DestroySprite(sprite); // &sprite? + gAnimVisualTaskCount--; + + return; + } // else? + return; + } + else + { + // _894 + return; + } + } + } + else // == + { + // _968 + TranslateAnimLinear(sprite); + + sprite->pos2.x += (sprite->data[5] * 2 + gSineTable[0]) >> 3; // ??? + sprite->pos2.y += (-3 * gSineTable[(sprite->data[5] + 64) << 1]) >> 8; // which one of these is closer? + + if ((gMain.inBattle & 2) != 0) // cmp 9 + { + // + r3 = sprite->data[5]; + + if ((u16)(sprite->data[5] - 64) <= 0x7F) // cmp 10 + { + // ... + r1 = sprite->data[7]; + } + else + { + // _9D4 + r1 = sprite->data[7] + 1; + } + // _9DC + sprite->oam.priority = (sprite->oam.priority & -13) | (r1 & 3) << 2; + r0 = r3 + 4; + } + else // == + { + // _9F2 + if ((u16)(sprite->data[5] - 64) <= 0x7F) // cmp 11 + { + // ... &spite->subpriority ??? + r1 = sprite->subpriority; + r0 = 128; + } + else // > + { + // _A06 + r1 = sprite->subpriority; + r0 = 140; + } + // _A0C // *r1 ??? + sprite->subpriority = r0; + r0 = sprite->data[5] - 4; + } + // _A12 + sprite->data[5] = r0 & 0xFF; + sprite->data[0] = 768; + + sprite->pos1.x = sprite->pos2.x + sprite->pos1.x;//+= sprite->pos2.x; + sprite->data[1] = sprite->pos2.x + sprite->pos1.x; + + sprite->pos1.y = sprite->pos2.y + sprite->pos1.y; + sprite->data[3] = sprite->pos2.y + sprite->pos1.y; + + sprite->data[4] = sprite->pos2.y + sprite->pos1.y + 4; + + if (sprite->data[0] <= 0) // cmp 12 + { + // + if ((gMain.inBattle & 2) != 0 + || (gBanksBySide[gAnimBankTarget] & 1) != 0) // cmp 13 || cmp 14 + { + // + r0 = 0x80 << 1; + } + else + { + // _A78 + r0 = 0xFFF0; + } + // _A7A + sprite->data[2] = r0; + sprite->data[7] += 1; + + sprite->pos2.y = 0; + sprite->pos1.x = 0; + + sub_8078BD4(sprite); + } + // _AD0 + return; + } + + // _AD0 / return + return; +} +#else +NAKED void sub_80D8874(struct Sprite *sprite) +{ + asm_unified("\tpush {r4-r6,lr}\n" + "\tadds r4, r0, 0\n" + "\tldrh r0, [r4, 0x3C]\n" + "\tmovs r5, 0xFF\n" + "\tmovs r1, 0xFF\n" + "\tands r1, r0\n" + "\tcmp r1, 0x1\n" + "\tbeq _080D8968\n" + "\tcmp r1, 0x1\n" + "\tbgt _080D888E\n" + "\tcmp r1, 0\n" + "\tbeq _080D8896\n" + "\tb _080D8AD0\n" + "_080D888E:\n" + "\tcmp r1, 0x2\n" + "\tbne _080D8894\n" + "\tb _080D8A94\n" + "_080D8894:\n" + "\tb _080D8AD0\n" + "_080D8896:\n" + "\tadds r0, r4, 0\n" + "\tbl TranslateAnimLinear\n" + "\tldr r1, _080D88C0 @ =gSineTable\n" + "\tmovs r2, 0x38\n" + "\tldrsh r0, [r4, r2]\n" + "\tlsls r0, 1\n" + "\tadds r0, r1\n" + "\tmovs r1, 0\n" + "\tldrsh r0, [r0, r1]\n" + "\tasrs r0, 4\n" + "\tldrh r2, [r4, 0x24]\n" + "\tadds r0, r2\n" + "\tstrh r0, [r4, 0x24]\n" + "\tmovs r1, 0x3A\n" + "\tldrsh r0, [r4, r1]\n" + "\tcmp r0, 0\n" + "\tbeq _080D88C4\n" + "\tldrh r0, [r4, 0x38]\n" + "\tsubs r0, 0x8\n" + "\tb _080D88C8\n" + "\t.align 2, 0\n" + "_080D88C0: .4byte gSineTable\n" + "_080D88C4:\n" + "\tldrh r0, [r4, 0x38]\n" + "\tadds r0, 0x8\n" + "_080D88C8:\n" + "\tands r0, r5\n" + "\tstrh r0, [r4, 0x38]\n" + "\tmovs r2, 0x2E\n" + "\tldrsh r0, [r4, r2]\n" + "\tcmp r0, 0\n" + "\tble _080D88D6\n" + "\tb _080D8AD0\n" + "_080D88D6:\n" + "\tmovs r5, 0x50\n" + "\tstrh r5, [r4, 0x2E]\n" + "\tldr r6, _080D8928 @ =gAnimBankTarget\n" + "\tldrb r0, [r6]\n" + "\tmovs r1, 0\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tstrh r0, [r4, 0x20]\n" + "\tstrh r0, [r4, 0x30]\n" + "\tstrh r0, [r4, 0x32]\n" + "\tldrh r0, [r4, 0x26]\n" + "\tldrh r1, [r4, 0x22]\n" + "\tadds r0, r1\n" + "\tstrh r0, [r4, 0x22]\n" + "\tstrh r0, [r4, 0x34]\n" + "\tadds r0, 0x1D\n" + "\tstrh r0, [r4, 0x36]\n" + "\tldrh r0, [r4, 0x3C]\n" + "\tadds r0, 0x1\n" + "\tstrh r0, [r4, 0x3C]\n" + "\tldr r0, _080D892C @ =gMain\n" + "\tldr r2, _080D8930 @ =0x0000043d\n" + "\tadds r0, r2\n" + "\tldrb r1, [r0]\n" + "\tmovs r0, 0x2\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _080D8938\n" + "\tldr r1, _080D8934 @ =gBanksBySide\n" + "\tldrb r0, [r6]\n" + "\tadds r0, r1\n" + "\tldrb r1, [r0]\n" + "\tmovs r0, 0x1\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _080D8938\n" + "\tmovs r0, 0xCC\n" + "\tstrh r0, [r4, 0x38]\n" + "\tb _080D893A\n" + "\t.align 2, 0\n" + "_080D8928: .4byte gAnimBankTarget\n" + "_080D892C: .4byte gMain\n" + "_080D8930: .4byte 0x0000043d\n" + "_080D8934: .4byte gBanksBySide\n" + "_080D8938:\n" + "\tstrh r5, [r4, 0x38]\n" + "_080D893A:\n" + "\tmovs r0, 0\n" + "\tstrh r0, [r4, 0x26]\n" + "\tldr r1, _080D8964 @ =gSineTable\n" + "\tmovs r2, 0x38\n" + "\tldrsh r0, [r4, r2]\n" + "\tlsls r0, 1\n" + "\tadds r0, r1\n" + "\tmovs r1, 0\n" + "\tldrsh r0, [r0, r1]\n" + "\tasrs r0, 3\n" + "\tstrh r0, [r4, 0x24]\n" + "\tldrh r0, [r4, 0x38]\n" + "\tadds r0, 0x2\n" + "\tmovs r1, 0xFF\n" + "\tands r0, r1\n" + "\tstrh r0, [r4, 0x38]\n" + "\tadds r0, r4, 0\n" + "\tbl InitAnimLinearTranslation\n" + "\tb _080D8AD0\n" + "\t.align 2, 0\n" + "_080D8964: .4byte gSineTable\n" + "_080D8968:\n" + "\tadds r0, r4, 0\n" + "\tbl TranslateAnimLinear\n" + "\tldr r1, _080D89C8 @ =gSineTable\n" + "\tmovs r2, 0x38\n" + "\tldrsh r0, [r4, r2]\n" + "\tlsls r0, 1\n" + "\tadds r0, r1\n" + "\tmovs r2, 0\n" + "\tldrsh r0, [r0, r2]\n" + "\tasrs r0, 3\n" + "\tldrh r2, [r4, 0x24]\n" + "\tadds r0, r2\n" + "\tstrh r0, [r4, 0x24]\n" + "\tmovs r2, 0x38\n" + "\tldrsh r0, [r4, r2]\n" + "\tadds r0, 0x40\n" + "\tlsls r0, 1\n" + "\tadds r0, r1\n" + "\tmovs r2, 0\n" + "\tldrsh r1, [r0, r2]\n" + "\tlsls r0, r1, 1\n" + "\tadds r0, r1\n" + "\tnegs r0, r0\n" + "\tasrs r0, 8\n" + "\tldrh r1, [r4, 0x26]\n" + "\tadds r0, r1\n" + "\tstrh r0, [r4, 0x26]\n" + "\tldr r0, _080D89CC @ =gMain\n" + "\tldr r2, _080D89D0 @ =0x0000043d\n" + "\tadds r0, r2\n" + "\tldrb r1, [r0]\n" + "\tmovs r0, 0x2\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _080D89F2\n" + "\tldrh r1, [r4, 0x38]\n" + "\tadds r0, r1, 0\n" + "\tsubs r0, 0x40\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tadds r3, r1, 0\n" + "\tcmp r0, 0x7F\n" + "\tbhi _080D89D4\n" + "\tldrh r1, [r4, 0x3C]\n" + "\tlsls r1, 16\n" + "\tasrs r1, 24\n" + "\tb _080D89DC\n" + "\t.align 2, 0\n" + "_080D89C8: .4byte gSineTable\n" + "_080D89CC: .4byte gMain\n" + "_080D89D0: .4byte 0x0000043d\n" + "_080D89D4:\n" + "\tldrh r1, [r4, 0x3C]\n" + "\tlsls r1, 16\n" + "\tasrs r1, 24\n" + "\tadds r1, 0x1\n" + "_080D89DC:\n" + "\tmovs r0, 0x3\n" + "\tands r1, r0\n" + "\tlsls r1, 2\n" + "\tldrb r2, [r4, 0x5]\n" + "\tmovs r0, 0xD\n" + "\tnegs r0, r0\n" + "\tands r0, r2\n" + "\torrs r0, r1\n" + "\tstrb r0, [r4, 0x5]\n" + "\tadds r0, r3, 0x4\n" + "\tb _080D8A12\n" + "_080D89F2:\n" + "\tldrh r0, [r4, 0x38]\n" + "\tsubs r0, 0x40\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tcmp r0, 0x7F\n" + "\tbhi _080D8A06\n" + "\tadds r1, r4, 0\n" + "\tadds r1, 0x43\n" + "\tmovs r0, 0x80\n" + "\tb _080D8A0C\n" + "_080D8A06:\n" + "\tadds r1, r4, 0\n" + "\tadds r1, 0x43\n" + "\tmovs r0, 0x8C\n" + "_080D8A0C:\n" + "\tstrb r0, [r1]\n" + "\tldrh r0, [r4, 0x38]\n" + "\tsubs r0, 0x4\n" + "_080D8A12:\n" + "\tmovs r1, 0xFF\n" + "\tands r0, r1\n" + "\tstrh r0, [r4, 0x38]\n" + "\tmovs r1, 0x2E\n" + "\tldrsh r0, [r4, r1]\n" + "\tcmp r0, 0\n" + "\tbgt _080D8AD0\n" + "\tmovs r2, 0\n" + "\tmovs r0, 0xC0\n" + "\tlsls r0, 2\n" + "\tstrh r0, [r4, 0x2E]\n" + "\tldrh r0, [r4, 0x24]\n" + "\tldrh r1, [r4, 0x20]\n" + "\tadds r0, r1\n" + "\tstrh r0, [r4, 0x20]\n" + "\tstrh r0, [r4, 0x30]\n" + "\tldrh r0, [r4, 0x26]\n" + "\tldrh r1, [r4, 0x22]\n" + "\tadds r0, r1\n" + "\tstrh r0, [r4, 0x22]\n" + "\tstrh r0, [r4, 0x34]\n" + "\tadds r0, 0x4\n" + "\tstrh r0, [r4, 0x36]\n" + "\tldr r0, _080D8A68 @ =gMain\n" + "\tldr r1, _080D8A6C @ =0x0000043d\n" + "\tadds r0, r1\n" + "\tldrb r1, [r0]\n" + "\tmovs r0, 0x2\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _080D8A78\n" + "\tldr r1, _080D8A70 @ =gBanksBySide\n" + "\tldr r0, _080D8A74 @ =gAnimBankTarget\n" + "\tldrb r0, [r0]\n" + "\tadds r0, r1\n" + "\tldrb r1, [r0]\n" + "\tmovs r0, 0x1\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _080D8A78\n" + "\tmovs r0, 0x80\n" + "\tlsls r0, 1\n" + "\tb _080D8A7A\n" + "\t.align 2, 0\n" + "_080D8A68: .4byte gMain\n" + "_080D8A6C: .4byte 0x0000043d\n" + "_080D8A70: .4byte gBanksBySide\n" + "_080D8A74: .4byte gAnimBankTarget\n" + "_080D8A78:\n" + "\tldr r0, _080D8A90 @ =0x0000fff0\n" + "_080D8A7A:\n" + "\tstrh r0, [r4, 0x32]\n" + "\tldrh r0, [r4, 0x3C]\n" + "\tadds r0, 0x1\n" + "\tmovs r1, 0\n" + "\tstrh r0, [r4, 0x3C]\n" + "\tstrh r1, [r4, 0x26]\n" + "\tstrh r1, [r4, 0x24]\n" + "\tadds r0, r4, 0\n" + "\tbl sub_8078BD4\n" + "\tb _080D8AD0\n" + "\t.align 2, 0\n" + "_080D8A90: .4byte 0x0000fff0\n" + "_080D8A94:\n" + "\tadds r0, r4, 0\n" + "\tbl TranslateAnimLinear\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _080D8AD0\n" + "\tldrb r0, [r4, 0x1]\n" + "\tlsls r0, 30\n" + "\tlsrs r0, 30\n" + "\tmovs r1, 0x1\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _080D8AC2\n" + "\tldrb r0, [r4, 0x3]\n" + "\tlsls r0, 26\n" + "\tlsrs r0, 27\n" + "\tbl FreeOamMatrix\n" + "\tldrb r1, [r4, 0x1]\n" + "\tmovs r0, 0x4\n" + "\tnegs r0, r0\n" + "\tands r0, r1\n" + "\tstrb r0, [r4, 0x1]\n" + "_080D8AC2:\n" + "\tadds r0, r4, 0\n" + "\tbl DestroySprite\n" + "\tldr r1, _080D8AD8 @ =gAnimVisualTaskCount\n" + "\tldrb r0, [r1]\n" + "\tsubs r0, 0x1\n" + "\tstrb r0, [r1]\n" + "_080D8AD0:\n" + "\tpop {r4-r6}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_080D8AD8: .4byte gAnimVisualTaskCount"); +} +#endif + +// MATCHING +void sub_80D8ADC(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->func = sub_80D8AF8; +} + +#ifdef NONMATCHING +// +void sub_80D8AF8(u8 taskId) +{ + // + struct Task *task = &gTasks[taskId]; + + // + 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 + { + // + task->data[4] = 2; + task->data[5] = 2; + task->data[2] = 2; + } + else // > + { + // ... + return; + } + } + } + else // > + { + // _20 + if (task->data[0] != 2) // cmp 4 + { + // + return; + } + // _92 + + if (task->data[1] != 0) // cmp 10 + { + // + return; + } + // ... + DestroyAnimVisualTask(taskId); + + return; + } + } + else // == + { + // _3C + + if (task->data[5] == 0) // cmp 6 + { + // ... + sub_80D8BA8(task->data[3]); + + if ((task->data[3]) != 0) // cmp 7 // << 24 + { + // ... + task->data[1] += 1; + } + // _5C + task->data[2] += 1; + + if ((s16)(task->data[2]) == 3) // cmp 8 + { + // ... + task->data[3] += 1; + + if ((s16)(task->data[3]) != 10) // cmp 9 + { + // _80 ... + task->data[0] -= 1; + + return; + } + } + else + { + // _88 + task->data[5] = 2; + + return; + } + } + else + { + // _8C + task->data[5] -= 1; + + return; + } + } + + // _78 + task->data[0] += 1; + + return; +} +#else +NAKED void sub_80D8AF8(u8 taskId) +{ + asm_unified("\tpush {r4,r5,lr}\n" + "\tlsls r0, 24\n" + "\tlsrs r2, r0, 24\n" + "\tlsls r0, r2, 2\n" + "\tadds r0, r2\n" + "\tlsls r0, 3\n" + "\tldr r1, _080D8B1C @ =gTasks\n" + "\tadds r4, r0, r1\n" + "\tmovs r0, 0x8\n" + "\tldrsh r5, [r4, r0]\n" + "\tcmp r5, 0x1\n" + "\tbeq _080D8B3C\n" + "\tcmp r5, 0x1\n" + "\tbgt _080D8B20\n" + "\tcmp r5, 0\n" + "\tbeq _080D8B26\n" + "\tb _080D8BA0\n" + "\t.align 2, 0\n" + "_080D8B1C: .4byte gTasks\n" + "_080D8B20:\n" + "\tcmp r5, 0x2\n" + "\tbeq _080D8B92\n" + "\tb _080D8BA0\n" + "_080D8B26:\n" + "\tldrh r0, [r4, 0x10]\n" + "\tadds r0, 0x1\n" + "\tstrh r0, [r4, 0x10]\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tble _080D8BA0\n" + "\tstrh r5, [r4, 0x10]\n" + "\tstrh r5, [r4, 0x12]\n" + "\tstrh r5, [r4, 0xC]\n" + "\tb _080D8B78\n" + "_080D8B3C:\n" + "\tldrh r1, [r4, 0x12]\n" + "\tmovs r3, 0x12\n" + "\tldrsh r0, [r4, r3]\n" + "\tcmp r0, 0\n" + "\tbne _080D8B8C\n" + "\tldrb r0, [r4, 0xE]\n" + "\tldrb r1, [r4, 0xC]\n" + "\tmovs r3, 0x1\n" + "\tbl sub_80D8BA8\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _080D8B5C\n" + "\tldrh r0, [r4, 0xA]\n" + "\tadds r0, 0x1\n" + "\tstrh r0, [r4, 0xA]\n" + "_080D8B5C:\n" + "\tldrh r0, [r4, 0xC]\n" + "\tadds r0, 0x1\n" + "\tstrh r0, [r4, 0xC]\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x3\n" + "\tbne _080D8B88\n" + "\tldrh r0, [r4, 0xE]\n" + "\tadds r0, 0x1\n" + "\tstrh r0, [r4, 0xE]\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0xA\n" + "\tbne _080D8B80\n" + "_080D8B78:\n" + "\tldrh r0, [r4, 0x8]\n" + "\tadds r0, 0x1\n" + "\tstrh r0, [r4, 0x8]\n" + "\tb _080D8BA0\n" + "_080D8B80:\n" + "\tldrh r0, [r4, 0x8]\n" + "\tsubs r0, 0x1\n" + "\tstrh r0, [r4, 0x8]\n" + "\tb _080D8BA0\n" + "_080D8B88:\n" + "\tstrh r5, [r4, 0x12]\n" + "\tb _080D8BA0\n" + "_080D8B8C:\n" + "\tsubs r0, r1, 0x1\n" + "\tstrh r0, [r4, 0x12]\n" + "\tb _080D8BA0\n" + "_080D8B92:\n" + "\tmovs r1, 0xA\n" + "\tldrsh r0, [r4, r1]\n" + "\tcmp r0, 0\n" + "\tbne _080D8BA0\n" + "\tadds r0, r2, 0\n" + "\tbl DestroyAnimVisualTask\n" + "_080D8BA0:\n" + "\tpop {r4,r5}\n" + "\tpop {r0}\n" + "\tbx r0"); +} +#endif // NONMATCHING + +// NOT MATCHING / NONMATCHING +NAKED void sub_80D8BA8(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, 0x8\n" + "\tlsls r0, 24\n" + "\tlsls r1, 24\n" + "\tlsrs r1, 24\n" + "\tmov r9, r1\n" + "\tlsls r2, 24\n" + "\tlsrs r2, 24\n" + "\tstr r2, [sp]\n" + "\tlsls r3, 24\n" + "\tlsrs r3, 24\n" + "\tmov r10, r3\n" + "\tmovs r1, 0\n" + "\tstr r1, [sp, 0x4]\n" + "\tldr r1, _080D8C20 @ =gUnknown_083D9DC4\n" + "\tlsrs r0, 22\n" + "\tadds r4, r0, r1\n" + "\tldrb r0, [r4, 0x3]\n" + "\tlsls r0, 24\n" + "\tasrs r0, 28\n" + "\tmov r8, r0\n" + "\tcmp r0, 0x2\n" + "\tbeq _080D8C94\n" + "\tldrh r0, [r4, 0x2]\n" + "\tlsls r0, 20\n" + "\tlsrs r0, 24\n" + "\tbl GetBattlerAtPosition\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tadds r0, r5, 0\n" + "\tbl IsAnimBankSpriteVisible\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _080D8C94\n" + "\tmovs r0, 0x1\n" + "\tstr r0, [sp, 0x4]\n" + "\tadds r0, r5, 0\n" + "\tmovs r1, 0x2\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r7, r0, 24\n" + "\tadds r0, r5, 0\n" + "\tmovs r1, 0x3\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r6, r0, 24\n" + "\tmov r1, r8\n" + "\tcmp r1, 0\n" + "\tbeq _080D8C24\n" + "\tcmp r1, 0x1\n" + "\tbeq _080D8C5A\n" + "\tb _080D8CA6\n" + "\t.align 2, 0\n" + "_080D8C20: .4byte gUnknown_083D9DC4\n" + "_080D8C24:\n" + "\tadds r0, r5, 0\n" + "\tmovs r1, 0x1\n" + "\tbl sub_807A100\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tmovs r1, 0x6\n" + "\tbl __divsi3\n" + "\tlsls r1, r7, 16\n" + "\tasrs r1, 16\n" + "\tsubs r1, r0\n" + "\tlsls r1, 16\n" + "\tlsrs r7, r1, 16\n" + "\tadds r0, r5, 0\n" + "\tmovs r1, 0\n" + "\tbl sub_807A100\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tmovs r1, 0x6\n" + "\tbl __divsi3\n" + "\tlsls r1, r6, 16\n" + "\tasrs r1, 16\n" + "\tsubs r1, r0\n" + "\tb _080D8C8E\n" + "_080D8C5A:\n" + "\tadds r0, r5, 0\n" + "\tmovs r1, 0x1\n" + "\tbl sub_807A100\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tmovs r1, 0x6\n" + "\tbl __divsi3\n" + "\tlsls r1, r7, 16\n" + "\tasrs r1, 16\n" + "\tadds r1, r0\n" + "\tlsls r1, 16\n" + "\tlsrs r7, r1, 16\n" + "\tadds r0, r5, 0\n" + "\tmovs r1, 0\n" + "\tbl sub_807A100\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tmovs r1, 0x6\n" + "\tbl __divsi3\n" + "\tlsls r1, r6, 16\n" + "\tasrs r1, 16\n" + "\tadds r1, r0\n" + "_080D8C8E:\n" + "\tlsls r1, 16\n" + "\tlsrs r6, r1, 16\n" + "\tb _080D8CA6\n" + "_080D8C94:\n" + "\tldrh r0, [r4]\n" + "\tlsls r0, 22\n" + "\tasrs r0, 6\n" + "\tlsrs r7, r0, 16\n" + "\tldr r0, [r4]\n" + "\tlsls r0, 12\n" + "\tasrs r0, 22\n" + "\tlsls r0, 16\n" + "\tlsrs r6, r0, 16\n" + "_080D8CA6:\n" + "\tlsls r0, r6, 16\n" + "\tasrs r0, 16\n" + "\tadds r0, 0x8\n" + "\tlsrs r1, r0, 31\n" + "\tadds r0, r1\n" + "\tasrs r0, 1\n" + "\tlsls r1, r7, 16\n" + "\tasrs r1, 16\n" + "\tsubs r1, r0\n" + "\tldr r0, _080D8D00 @ =gSpriteTemplate_83D9E3C\n" + "\tlsls r1, 16\n" + "\tasrs r1, 16\n" + "\tmovs r2, 0x8\n" + "\tnegs r2, r2\n" + "\tmovs r3, 0x12\n" + "\tbl CreateSprite\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tcmp r5, 0x40\n" + "\tbeq _080D8D08\n" + "\tlsls r4, r5, 4\n" + "\tadds r4, r5\n" + "\tlsls r4, 2\n" + "\tldr r0, _080D8D04 @ =gSprites\n" + "\tadds r4, r0\n" + "\tadds r0, r4, 0\n" + "\tmov r1, r9\n" + "\tbl StartSpriteAffineAnim\n" + "\tmov r0, sp\n" + "\tldrh r0, [r0, 0x4]\n" + "\tstrh r0, [r4, 0x2E]\n" + "\tstrh r7, [r4, 0x34]\n" + "\tstrh r6, [r4, 0x36]\n" + "\tmov r1, r9\n" + "\tstrh r1, [r4, 0x38]\n" + "\tmov r0, sp\n" + "\tldrh r0, [r0]\n" + "\tstrh r0, [r4, 0x3A]\n" + "\tmov r1, r10\n" + "\tstrh r1, [r4, 0x3C]\n" + "\tmovs r0, 0x1\n" + "\tb _080D8D0A\n" + "\t.align 2, 0\n" + "_080D8D00: .4byte gSpriteTemplate_83D9E3C\n" + "_080D8D04: .4byte gSprites\n" + "_080D8D08:\n" + "\tmovs r0, 0\n" + "_080D8D0A:\n" + "\tadd sp, 0x8\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r1}\n" + "\tbx r1"); +} + +// MATCHING +void sub_80D8D1C(struct Sprite *sprite) +{ + u8 spriteId; + + sprite->pos1.x += 4; + sprite->pos1.y += 8; + + if ((s16)sprite->pos1.x < sprite->data[3] + && (s16)sprite->pos1.y < sprite->data[4]) + return; + + if (sprite->data[0] == 1 && sprite->data[5] == 0) + { + spriteId = CreateSprite(&gBattleAnimSpriteTemplate_83D9C78, + sprite->data[3], sprite->data[4], sprite->subpriority); + + sprite->data[0] = spriteId; + + if (spriteId != 64) + { + gSprites[sprite->data[0]].callback = sub_80D8E00; + + gSprites[sprite->data[0]].data[6] = sprite->data[6]; + gSprites[sprite->data[0]].data[7] = sprite->data[7]; + } + FreeOamMatrix(sprite->oam.matrixNum); + DestroySprite(sprite); + } + else + { + gTasks[sprite->data[6]].data[sprite->data[7]]--; + + FreeOamMatrix(sprite->oam.matrixNum); + DestroySprite(sprite); + } +} + +// MATCHING +void sub_80D8E00(struct Sprite *sprite) +{ + sprite->data[0]++; + + if (sprite->data[0] == 20) + { + gTasks[sprite->data[6]].data[sprite->data[7]]--; + + FreeOamMatrix(sprite->oam.matrixNum); + DestroySprite(sprite); + } +} + +// used for icicle spear?? +// MATCHING +void unc_080B06FC(struct Sprite *sprite) +{ + u8 animNum = gAnimDisableStructPtr->rolloutTimer2 - gAnimDisableStructPtr->rolloutTimer1 - 1; + + if (animNum > 4) + animNum = 4; + + StartSpriteAffineAnim(sprite, animNum); + InitAnimSpritePos(sprite, 1); + + sprite->data[0] = gBattleAnimArgs[4]; + + if (GetBattlerSide(gAnimBankAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + + sprite->data[2] = GetBattlerSpriteCoord(gAnimBankTarget, 2) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gAnimBankTarget, 3) + gBattleAnimArgs[3]; + sprite->data[5] = gBattleAnimArgs[5]; + + InitAnimArcTranslation(sprite); + + sprite->callback = sub_80D8EE0; +} + +// MATCHING +void sub_80D8EE0(struct Sprite *sprite) +{ + if (!TranslateAnimArc(sprite)) + return; + + StartSpriteAnim(sprite, 1); + + sprite->callback = sub_8078600; + + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); +} + +// MATCHING (but consider renaming temp variables) +void sub_80D8F10(struct Sprite *sprite) +{ + s16 a, b; // x, y ? + + sprite->oam.tileNum += 8; + + sub_8078764(sprite, 1); + + a = (Random() & 0xFF) + 256; + b = Random() & 0x1FF; + + if (b > 0xFF) + b = 256 - b; + + sprite->data[1] = a; + sprite->data[2] = b; + + sprite->callback = sub_80D8F74; +} + +#ifdef NONMATCHING +// NONMATCHING +void sub_80D8F74(struct Sprite *sprite) +{ + // + s16 r0; + + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + + if ((sprite->data[1] & 1) != 0) + { + // + r0 = -(sprite->data[1] + sprite->data[3]); // problem 1 + } + else + { + r0 = (sprite->data[1] + sprite->data[3]); // problem 2 + } + + sprite->pos2.x = r0; + sprite->pos2.y = sprite->data[4]; + + sprite->data[0]++; + + if (sprite->data[0] == 0x15) + { + DestroyAnimSprite(sprite); + } +} +#else +NAKED void sub_80D8F74(struct Sprite *sprite) +{ + asm_unified("\tpush {r4,lr}\n" + "\tadds r2, r0, 0\n" + "\tldrh r0, [r2, 0x30]\n" + "\tldrh r1, [r2, 0x34]\n" + "\tadds r3, r0, r1\n" + "\tstrh r3, [r2, 0x34]\n" + "\tldrh r1, [r2, 0x32]\n" + "\tldrh r4, [r2, 0x36]\n" + "\tadds r1, r4\n" + "\tstrh r1, [r2, 0x36]\n" + "\tmovs r1, 0x1\n" + "\tands r1, r0\n" + "\tcmp r1, 0\n" + "\tbeq _080D8F98\n" + "\tlsls r0, r3, 16\n" + "\tasrs r0, 24\n" + "\tnegs r0, r0\n" + "\tb _080D8F9C\n" + "_080D8F98:\n" + "\tlsls r0, r3, 16\n" + "\tasrs r0, 24\n" + "_080D8F9C:\n" + "\tstrh r0, [r2, 0x24]\n" + "\tldrh r0, [r2, 0x36]\n" + "\tlsls r0, 16\n" + "\tasrs r0, 24\n" + "\tstrh r0, [r2, 0x26]\n" + "\tldrh r0, [r2, 0x2E]\n" + "\tadds r0, 0x1\n" + "\tstrh r0, [r2, 0x2E]\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x15\n" + "\tbne _080D8FBA\n" + "\tadds r0, r2, 0\n" + "\tbl DestroyAnimSprite\n" + "_080D8FBA:\n" + "\tpop {r4}\n" + "\tpop {r0}\n" + "\tbx r0"); +} +#endif // NONMATCHING + +#ifdef NONMATCHING +// should be counter for icicle spear? +// +void sub_80D8FC0(u8 taskId)//struct Sprite *sprte) +{ + // + ///u8 r3 = gAnimDisableStructPtr->rolloutTimer2 - gAnimDisableStructPtr->rolloutTimer1 - 1; + gBattleAnimArgs[3] = gAnimDisableStructPtr->rolloutTimer2 - gAnimDisableStructPtr->rolloutTimer1 - 1;//r3; + ///gBattleAnimArgs[3] = gAnimDisableStructPtr->rolloutTimer2 - gAnimDisableStructPtr->rolloutTimer1 - 1; + //s16 r0[] = *gBattleAnimArgs; + //r0 = r0 << 1; + //r0 = r0 + *gBattleAnimArgs; + //&r0 = gAnimDisableStructPtr->rolloutTimer2 - gAnimDisableStructPtr->rolloutTimer1 - 1; + + DestroyAnimVisualTask(taskId); +} +#else +NAKED void sub_80D8FC0(u8 taskId) +{ + asm_unified("\tpush {lr}\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tldr r1, _080D8FE8 @ =gBattleAnimArgs\n" + "\tldrb r3, [r1]\n" + "\tlsls r3, 1\n" + "\tadds r3, r1\n" + "\tldr r1, _080D8FEC @ =gAnimDisableStructPtr\n" + "\tldr r1, [r1]\n" + "\tldrb r1, [r1, 0x11]\n" + "\tlsrs r2, r1, 4\n" + "\tlsls r1, 28\n" + "\tlsrs r1, 28\n" + "\tsubs r2, r1\n" + "\tsubs r2, 0x1\n" + "\tstrh r2, [r3]\n" + "\tbl DestroyAnimVisualTask\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_080D8FE8: .4byte gBattleAnimArgs\n" + "_080D8FEC: .4byte gAnimDisableStructPtr"); +} +#endif // NONMATCHING +// 20 MATCHING +// 11 NONMATCHING / NAKED smh
\ No newline at end of file |