diff options
author | camthesaxman <cameronghall@cox.net> | 2017-06-07 15:23:27 -0500 |
---|---|---|
committer | camthesaxman <cameronghall@cox.net> | 2017-06-07 15:23:27 -0500 |
commit | a6e1eb7f7522c3fef4a6c93c37c1a138524a1aa2 (patch) | |
tree | fc3440323a2ddacd375ae9213c501a6d77a03146 | |
parent | 3c700c6eb77be99f7864e52e8f3747491f050265 (diff) |
decompile sub_811FF30
-rw-r--r-- | asm/battle_811DA74.s | 176 | ||||
-rw-r--r-- | include/battle.h | 4 | ||||
-rw-r--r-- | src/battle_2.c | 2 | ||||
-rw-r--r-- | src/battle_811DA74.c | 130 |
4 files changed, 100 insertions, 212 deletions
diff --git a/asm/battle_811DA74.s b/asm/battle_811DA74.s index fa26110e4..3d452712f 100644 --- a/asm/battle_811DA74.s +++ b/asm/battle_811DA74.s @@ -6,182 +6,6 @@ .text - thumb_func_start sub_811FF30 -sub_811FF30: @ 811FF30 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r2, _0811FF74 @ =gUnknown_02023A60 - ldr r5, _0811FF78 @ =gUnknown_02024A60 - ldrb r3, [r5] - lsls r1, r3, 9 - adds r0, r2, 0x1 - mov r9, r0 - adds r0, r1, r0 - ldrb r4, [r0] - adds r6, r2, 0x2 - mov r8, r6 - adds r0, r1, r6 - ldrb r0, [r0] - lsls r0, 8 - orrs r4, r0 - adds r2, 0xB - adds r1, r2 - ldrb r7, [r1] - lsls r0, r3, 1 - adds r0, r3 - lsls r0, 2 - ldr r6, _0811FF7C @ =0x02017810 - adds r0, r6 - ldrb r2, [r0, 0x4] - cmp r2, 0x1 - beq _0811FFBE - cmp r2, 0x1 - bgt _0811FF80 - cmp r2, 0 - beq _0811FF8A - b _08120088 - .align 2, 0 -_0811FF74: .4byte gUnknown_02023A60 -_0811FF78: .4byte gUnknown_02024A60 -_0811FF7C: .4byte 0x02017810 -_0811FF80: - cmp r2, 0x2 - beq _0811FFE4 - cmp r2, 0x3 - beq _08120050 - b _08120088 -_0811FF8A: - lsls r1, r3, 2 - adds r0, r6, 0 - subs r0, 0x10 - adds r1, r0 - ldrb r2, [r1] - movs r0, 0xC - ands r0, r2 - cmp r0, 0x4 - bne _0811FFAE - movs r0, 0x8 - orrs r0, r2 - strb r0, [r1] - ldrb r2, [r5] - adds r0, r2, 0 - adds r1, r2, 0 - movs r3, 0x5 - bl move_anim_start_t4 -_0811FFAE: - ldrb r0, [r5] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - movs r0, 0x1 - strb r0, [r1, 0x4] - b _08120088 -_0811FFBE: - ldrb r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne _08120088 - movs r0, 0 - bl sub_80326EC - adds r0, r4, 0 - bl ExecuteMoveAnim - ldrb r0, [r5] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - movs r0, 0x2 - strb r0, [r1, 0x4] - b _08120088 -_0811FFE4: - ldr r0, _08120040 @ =gAnimScriptCallback - ldr r0, [r0] - bl _call_via_r0 - ldr r0, _08120044 @ =gAnimScriptActive - ldrb r0, [r0] - cmp r0, 0 - bne _08120088 - movs r0, 0x1 - bl sub_80326EC - ldrb r2, [r5] - lsls r0, r2, 2 - adds r4, r6, 0 - subs r4, 0x10 - adds r0, r4 - ldrb r1, [r0] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _0812002C - cmp r7, 0x1 - bhi _0812002C - adds r0, r2, 0 - adds r1, r2, 0 - movs r3, 0x6 - bl move_anim_start_t4 - ldrb r0, [r5] - lsls r0, 2 - adds r0, r4 - ldrb r2, [r0] - movs r1, 0x9 - negs r1, r1 - ands r1, r2 - strb r1, [r0] -_0812002C: - ldr r0, _08120048 @ =gUnknown_02024A60 - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r1, _0812004C @ =0x02017810 - adds r0, r1 - movs r1, 0x3 - strb r1, [r0, 0x4] - b _08120088 - .align 2, 0 -_08120040: .4byte gAnimScriptCallback -_08120044: .4byte gAnimScriptActive -_08120048: .4byte gUnknown_02024A60 -_0812004C: .4byte 0x02017810 -_08120050: - ldrb r1, [r0] - movs r0, 0x40 - ands r0, r1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _08120088 - bl sub_8031F24 - ldrb r0, [r5] - lsls r2, r0, 9 - mov r3, r9 - adds r1, r2, r3 - ldrb r1, [r1] - add r2, r8 - ldrb r2, [r2] - lsls r2, 8 - orrs r1, r2 - bl sub_80324BC - ldrb r1, [r5] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - strb r4, [r0, 0x4] - bl dp01_tbl3_exec_completed -_08120088: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_811FF30 - thumb_func_start sub_8120094 sub_8120094: @ 8120094 push {r4,lr} diff --git a/include/battle.h b/include/battle.h index f72333a9d..3b4771869 100644 --- a/include/battle.h +++ b/include/battle.h @@ -122,7 +122,7 @@ struct BattleStruct /* 0x2000000 */ /* 0x16A00 */ struct UnkBattleStruct1 unk_2016A00_2; }; -struct UnknownStruct4 +struct UnkBattleStruct4 { /*0x00*/ u8 filler0[0x3]; /*0x04*/ u16 unk4; @@ -143,7 +143,7 @@ struct UnknownStruct4 }; extern struct UnknownStruct1 unk_2016A00; -extern struct UnknownStruct4 gUnknown_02024CA8[]; +extern struct UnkBattleStruct4 gUnknown_02024CA8[]; extern struct AI_ThinkingStruct gAIThinkingSpace; #endif // GUARD_BATTLE_H diff --git a/src/battle_2.c b/src/battle_2.c index e5091bd08..79d62ce69 100644 --- a/src/battle_2.c +++ b/src/battle_2.c @@ -1821,7 +1821,7 @@ void sub_8010874(void) void sub_8010B88(void) { - struct UnknownStruct4 sp0 = gUnknown_02024CA8[gUnknown_02024A60]; + struct UnkBattleStruct4 sp0 = gUnknown_02024CA8[gUnknown_02024A60]; s32 i; u8 *ptr; u32 *ptr2; diff --git a/src/battle_811DA74.c b/src/battle_811DA74.c index 8152645bc..a1b41d7bb 100644 --- a/src/battle_811DA74.c +++ b/src/battle_811DA74.c @@ -39,6 +39,13 @@ struct UnknownStruct3 u8 ppBonuses; }; +struct UnknownStruct4 +{ + u8 unk0_0:2; + u8 unk0_2:1; + u8 unk0_3:1; +}; + extern u32 gBitTable[]; extern u16 gBattleTypeFlags; @@ -62,13 +69,19 @@ extern void (*gUnknown_03004330[])(void); extern u8 gUnknown_03004340[]; extern u8 gUnknown_0300434C[]; extern u8 gBattleMonForms[]; +extern u8 gAnimScriptActive; +extern void (*gAnimScriptCallback)(void); extern void (*const gUnknown_083FE4F4[])(void); -extern u8 unk_2000000[]; +extern u8 ewram[]; -#define EWRAM_17800 ((u8 *)(unk_2000000 + 0x17800)) -#define EWRAM_17810 ((struct UnknownStruct2 *)(unk_2000000 + 0x17810)) +#define ewram17800 ((struct UnknownStruct4 *)(ewram + 0x17800)) +#define ewram17810 ((struct UnknownStruct2 *)(ewram + 0x17810)) +extern void sub_8031F24(void); +extern void sub_80326EC(); +extern void ExecuteMoveAnim(); +extern void sub_80324BC(); extern u8 sub_8031720(); extern u8 mplay_80342A4(); extern void oamt_add_pos2_onto_pos1(); @@ -150,9 +163,9 @@ void sub_811DB1C(void) void sub_811DB84(void) { - if ((--EWRAM_17810[gUnknown_02024A60].unk9) == 0xFF) + if ((--ewram17810[gUnknown_02024A60].unk9) == 0xFF) { - EWRAM_17810[gUnknown_02024A60].unk9 = 0; + ewram17810[gUnknown_02024A60].unk9 = 0; dp01_tbl3_exec_completed(); } } @@ -176,7 +189,7 @@ void sub_811DBC0(void) r6 = FALSE; if (r6) { - EWRAM_17810[gUnknown_02024A60].unk9 = 3; + ewram17810[gUnknown_02024A60].unk9 = 3; gUnknown_03004330[gUnknown_02024A60] = sub_811DB84; } } @@ -185,12 +198,12 @@ void sub_811DCA0(void) { u8 r2; - if (!(EWRAM_17810[gUnknown_02024A60].unk0 & 8)) + if (!(ewram17810[gUnknown_02024A60].unk0 & 8)) { - r2 = EWRAM_17810[gUnknown_02024A60 ^ 2].unk0 & 8; - if (!r2 && (++EWRAM_17810[gUnknown_02024A60].unk9) != 1) + r2 = ewram17810[gUnknown_02024A60 ^ 2].unk0 & 8; + if (!r2 && (++ewram17810[gUnknown_02024A60].unk9) != 1) { - EWRAM_17810[gUnknown_02024A60].unk9 = r2; + ewram17810[gUnknown_02024A60].unk9 = r2; if (IsDoubleBattle() && !(gBattleTypeFlags & 0x40)) { DestroySprite(&gSprites[gUnknown_0300434C[gUnknown_02024A60 ^ 2]]); @@ -202,7 +215,7 @@ void sub_811DCA0(void) sub_8045A5C(gUnknown_03004340[gUnknown_02024A60], &gPlayerParty[gUnknown_02024A6A[gUnknown_02024A60]], 0); sub_804777C(gUnknown_02024A60); sub_8043DFC(gUnknown_03004340[gUnknown_02024A60]); - (s8)EWRAM_17810[4].unk9 &= ~1; + (s8)ewram17810[4].unk9 &= ~1; gUnknown_03004330[gUnknown_02024A60] = sub_811DBC0; } } @@ -246,7 +259,7 @@ void sub_811DE98(void) void sub_811DF34(void) { - if (!(EWRAM_17810[gUnknown_02024A60].unk0 & 0x40)) + if (!(ewram17810[gUnknown_02024A60].unk0 & 0x40)) { FreeSpriteOamMatrix(&gSprites[gUnknown_02024BE0[gUnknown_02024A60]]); DestroySprite(&gSprites[gUnknown_02024BE0[gUnknown_02024A60]]); @@ -285,7 +298,7 @@ void sub_811E034(void) { if (gSprites[gUnknown_03004340[gUnknown_02024A60]].callback == SpriteCallbackDummy) { - if (EWRAM_17800[gUnknown_02024A60 * 4] & 4) + if (ewram17800[gUnknown_02024A60].unk0_2) move_anim_start_t4(gUnknown_02024A60, gUnknown_02024A60, gUnknown_02024A60, 6); gUnknown_03004330[gUnknown_02024A60] = sub_811E0A0; } @@ -293,16 +306,16 @@ void sub_811E034(void) void sub_811E0A0(void) { - if (!(EWRAM_17810[gUnknown_02024A60].unk0 & 0x40)) + if (!(ewram17810[gUnknown_02024A60].unk0 & 0x40)) dp01_tbl3_exec_completed(); } void sub_811E0CC(void) { - if (EWRAM_17810[gUnknown_02024A60].unk1 & 1) + if (ewram17810[gUnknown_02024A60].unk1 & 1) { - EWRAM_17810[gUnknown_02024A60].unk0 &= 0x7F; - (s8)EWRAM_17810[gUnknown_02024A60].unk1 &= ~1; + ewram17810[gUnknown_02024A60].unk0 &= 0x7F; + (s8)ewram17810[gUnknown_02024A60].unk1 &= ~1; FreeSpriteTilesByTag(0x27F9); FreeSpritePaletteByTag(0x27F9); CreateTask(c3_0802FDF4, 10); @@ -318,10 +331,10 @@ void sub_811E0CC(void) void sub_811E1BC(void) { - if (!(EWRAM_17810[gUnknown_02024A60].unk0 & 0x88)) + if (!(ewram17810[gUnknown_02024A60].unk0 & 0x88)) sub_8141828(gUnknown_02024A60, &gPlayerParty[gUnknown_02024A6A[gUnknown_02024A60]]); if (gSprites[gUnknown_0300434C[gUnknown_02024A60]].callback == SpriteCallbackDummy - && !(EWRAM_17810[gUnknown_02024A60].unk0 & 8)) + && !(ewram17810[gUnknown_02024A60].unk0 & 8)) { DestroySprite(&gSprites[gUnknown_0300434C[gUnknown_02024A60]]); gUnknown_03004330[gUnknown_02024A60] = sub_811E0CC; @@ -377,13 +390,13 @@ void dp01_tbl3_exec_completed(void) void sub_811E38C(void) { - if (!(EWRAM_17810[gUnknown_02024A60].unk0 & 0x10)) + if (!(ewram17810[gUnknown_02024A60].unk0 & 0x10)) dp01_tbl3_exec_completed(); } void sub_811E3B8(void) { - if (!(EWRAM_17810[gUnknown_02024A60].unk0 & 0x20)) + if (!(ewram17810[gUnknown_02024A60].unk0 & 0x20)) dp01_tbl3_exec_completed(); } @@ -1027,7 +1040,7 @@ void sub_811F9D0(void) { if (gUnknown_02023A60[gUnknown_02024A60][1] == 0) { - EWRAM_17810[gUnknown_02024A60].unk4 = 0; + ewram17810[gUnknown_02024A60].unk4 = 0; gUnknown_03004330[gUnknown_02024A60] = sub_811FA5C; } else @@ -1041,17 +1054,17 @@ void sub_811F9D0(void) void sub_811FA5C(void) { - switch (EWRAM_17810[gUnknown_02024A60].unk4) + switch (ewram17810[gUnknown_02024A60].unk4) { case 0: - if (EWRAM_17800[gUnknown_02024A60 * 4] & 4) + if (ewram17800[gUnknown_02024A60].unk0_2) move_anim_start_t4(gUnknown_02024A60, gUnknown_02024A60, gUnknown_02024A60, 5); - EWRAM_17810[gUnknown_02024A60].unk4 = 1; + ewram17810[gUnknown_02024A60].unk4 = 1; break; case 1: - if (!(EWRAM_17810[gUnknown_02024A60].unk0 & 0x40)) + if (!(ewram17810[gUnknown_02024A60].unk0 & 0x40)) { - EWRAM_17810[gUnknown_02024A60].unk4 = 0; + ewram17810[gUnknown_02024A60].unk4 = 0; move_anim_start_t4(gUnknown_02024A60, gUnknown_02024A60, gUnknown_02024A60, 1); gUnknown_03004330[gUnknown_02024A60] = sub_811DF34; } @@ -1108,15 +1121,15 @@ void sub_811FC3C(void) void sub_811FCE8(void) { - if (EWRAM_17810[gUnknown_02024A60].unk4 == 0) + if (ewram17810[gUnknown_02024A60].unk4 == 0) { - if (EWRAM_17800[gUnknown_02024A60 * 4] & 4) + if (ewram17800[gUnknown_02024A60].unk0_2) move_anim_start_t4(gUnknown_02024A60, gUnknown_02024A60, gUnknown_02024A60, 5); - EWRAM_17810[gUnknown_02024A60].unk4++; + ewram17810[gUnknown_02024A60].unk4++; } - else if (!(EWRAM_17810[gUnknown_02024A60].unk0 & 0x40)) + else if (!(ewram17810[gUnknown_02024A60].unk0 & 0x40)) { - EWRAM_17810[gUnknown_02024A60].unk4 = 0; + ewram17810[gUnknown_02024A60].unk4 = 0; sub_80324F8(&gPlayerParty[gUnknown_02024A6A[gUnknown_02024A60]], gUnknown_02024A60); PlaySE12WithPanning(SE_POKE_DEAD, -64); gSprites[gUnknown_02024BE0[gUnknown_02024A60]].data1 = 0; @@ -1170,8 +1183,59 @@ void sub_811FDFC(void) dp01_tbl3_exec_completed(); else { - EWRAM_17810[gUnknown_02024A60].unk4 = 0; + ewram17810[gUnknown_02024A60].unk4 = 0; gUnknown_03004330[gUnknown_02024A60] = sub_811FF30; } } } + +void sub_811FF30(void) +{ + u16 r4 = gUnknown_02023A60[gUnknown_02024A60][1] + | (gUnknown_02023A60[gUnknown_02024A60][2] << 8); + u8 r7 = gUnknown_02023A60[gUnknown_02024A60][11]; + + switch (ewram17810[gUnknown_02024A60].unk4) + { + case 0: + if (ewram17800[gUnknown_02024A60].unk0_2 && !ewram17800[gUnknown_02024A60].unk0_3) + { + ewram17800[gUnknown_02024A60].unk0_3 = 1; + move_anim_start_t4(gUnknown_02024A60, gUnknown_02024A60, gUnknown_02024A60, 5); + } + ewram17810[gUnknown_02024A60].unk4 = 1; + break; + case 1: + if (!(ewram17810[gUnknown_02024A60].unk0 & 0x40)) + { + sub_80326EC(0); + ExecuteMoveAnim(r4); + ewram17810[gUnknown_02024A60].unk4 = 2; + } + break; + case 2: + gAnimScriptCallback(); + if (!gAnimScriptActive) + { + sub_80326EC(1); + if ((ewram17800[gUnknown_02024A60].unk0_2) && r7 <= 1) + { + move_anim_start_t4(gUnknown_02024A60, gUnknown_02024A60, gUnknown_02024A60, 6); + ewram17800[gUnknown_02024A60].unk0_3 = 0; + } + ewram17810[gUnknown_02024A60].unk4 = 3; + } + break; + case 3: + if (!(ewram17810[gUnknown_02024A60].unk0 & 0x40)) + { + sub_8031F24(); + sub_80324BC( + gUnknown_02024A60, + gUnknown_02023A60[gUnknown_02024A60][1] | (gUnknown_02023A60[gUnknown_02024A60][2] << 8)); + ewram17810[gUnknown_02024A60].unk4 = 0; + dp01_tbl3_exec_completed(); + } + break; + } +} |