diff options
-rw-r--r-- | asm/battle_811DA74.s | 352 | ||||
-rw-r--r-- | include/battle.h | 6 | ||||
-rw-r--r-- | include/songs.h | 34 | ||||
-rw-r--r-- | src/battle_811DA74.c | 77 | ||||
-rw-r--r-- | src/battle_ai.c | 2 |
5 files changed, 98 insertions, 373 deletions
diff --git a/asm/battle_811DA74.s b/asm/battle_811DA74.s index c926c4699..9b7fd56e3 100644 --- a/asm/battle_811DA74.s +++ b/asm/battle_811DA74.s @@ -6,358 +6,6 @@ .text - thumb_func_start sub_811FAE4 -sub_811FAE4: @ 811FAE4 - push {r4-r6,lr} - mov r6, r8 - push {r6} - ldr r0, _0811FB14 @ =gBattleTypeFlags - ldrh r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0811FB24 - ldr r6, _0811FB18 @ =gUnknown_02024A60 - ldrb r0, [r6] - bl battle_get_per_side_status - movs r1, 0x2 - ands r1, r0 - ldr r5, _0811FB1C @ =0x0000fff0 - cmp r1, 0 - beq _0811FB0A - movs r5, 0x10 -_0811FB0A: - ldr r4, _0811FB20 @ =gLinkPlayers - ldrb r0, [r6] - bl sub_803FC34 - b _0811FB34 - .align 2, 0 -_0811FB14: .4byte gBattleTypeFlags -_0811FB18: .4byte gUnknown_02024A60 -_0811FB1C: .4byte 0x0000fff0 -_0811FB20: .4byte gLinkPlayers -_0811FB24: - movs r5, 0 - ldr r4, _0811FC08 @ =gLinkPlayers - bl GetMultiplayerId - movs r1, 0x1 - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 -_0811FB34: - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r1, r4 - ldrb r4, [r1, 0x13] - ldr r6, _0811FC0C @ =gUnknown_02024A60 - ldrb r1, [r6] - adds r0, r4, 0 - bl sub_8031AF4 - ldrb r0, [r6] - bl battle_get_per_side_status - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl GetMonSpriteTemplate_803C5A0 - ldr r0, _0811FC10 @ =gUnknown_02024E8C - mov r8, r0 - lsls r5, 16 - movs r0, 0xA0 - lsls r0, 15 - adds r5, r0 - asrs r5, 16 - ldr r0, _0811FC14 @ =gTrainerBackPicCoords - lsls r4, 2 - adds r4, r0 - ldrb r0, [r4] - movs r4, 0x8 - subs r4, r0 - lsls r4, 18 - movs r0, 0xA0 - lsls r0, 15 - adds r4, r0 - asrs r4, 16 - ldrb r0, [r6] - bl sub_8079E90 - adds r3, r0, 0 - lsls r3, 24 - lsrs r3, 24 - mov r0, r8 - adds r1, r5, 0 - adds r2, r4, 0 - bl CreateSprite - ldr r5, _0811FC18 @ =gUnknown_02024BE0 - ldrb r1, [r6] - adds r1, r5 - strb r0, [r1] - ldr r4, _0811FC1C @ =gSprites - ldrb r3, [r6] - adds r0, r3, r5 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - lsls r3, 4 - ldrb r2, [r1, 0x5] - movs r0, 0xF - ands r0, r2 - orrs r0, r3 - strb r0, [r1, 0x5] - ldrb r0, [r6] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0xF0 - strh r1, [r0, 0x24] - ldrb r0, [r6] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldr r1, _0811FC20 @ =0x0000fffe - strh r1, [r0, 0x2E] - ldrb r0, [r6] - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r4, 0x1C - adds r0, r4 - ldr r1, _0811FC24 @ =sub_80313A0 - str r1, [r0] - ldr r1, _0811FC28 @ =gUnknown_03004330 - ldrb r0, [r6] - lsls r0, 2 - adds r0, r1 - ldr r1, _0811FC2C @ =sub_811DAE4 - str r1, [r0] - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0811FC08: .4byte gLinkPlayers -_0811FC0C: .4byte gUnknown_02024A60 -_0811FC10: .4byte gUnknown_02024E8C -_0811FC14: .4byte gTrainerBackPicCoords -_0811FC18: .4byte gUnknown_02024BE0 -_0811FC1C: .4byte gSprites -_0811FC20: .4byte 0x0000fffe -_0811FC24: .4byte sub_80313A0 -_0811FC28: .4byte gUnknown_03004330 -_0811FC2C: .4byte sub_811DAE4 - thumb_func_end sub_811FAE4 - - thumb_func_start sub_811FC30 -sub_811FC30: @ 811FC30 - push {lr} - bl dp01_tbl3_exec_completed - pop {r0} - bx r0 - thumb_func_end sub_811FC30 - - thumb_func_start sub_811FC3C -sub_811FC3C: @ 811FC3C - push {r4-r6,lr} - ldr r6, _0811FCC8 @ =gUnknown_02024BE0 - ldr r4, _0811FCCC @ =gUnknown_02024A60 - ldrb r0, [r4] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r5, _0811FCD0 @ =gSprites - adds r0, r5 - bl oamt_add_pos2_onto_pos1 - ldrb r0, [r4] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r1, 0x23 - strh r1, [r0, 0x2E] - ldrb r0, [r4] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldr r1, _0811FCD4 @ =0x0000ffd8 - strh r1, [r0, 0x32] - ldrb r0, [r4] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrh r1, [r0, 0x22] - strh r1, [r0, 0x36] - ldrb r0, [r4] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r5, 0 - adds r1, 0x1C - adds r0, r1 - ldr r1, _0811FCD8 @ =sub_8078B34 - str r1, [r0] - ldrb r0, [r4] - adds r0, r6 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldr r1, _0811FCDC @ =SpriteCallbackDummy - bl oamt_set_x3A_32 - ldr r1, _0811FCE0 @ =gUnknown_03004330 - ldrb r0, [r4] - lsls r0, 2 - adds r0, r1 - ldr r1, _0811FCE4 @ =sub_811DB1C - str r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0811FCC8: .4byte gUnknown_02024BE0 -_0811FCCC: .4byte gUnknown_02024A60 -_0811FCD0: .4byte gSprites -_0811FCD4: .4byte 0x0000ffd8 -_0811FCD8: .4byte sub_8078B34 -_0811FCDC: .4byte SpriteCallbackDummy -_0811FCE0: .4byte gUnknown_03004330 -_0811FCE4: .4byte sub_811DB1C - thumb_func_end sub_811FC3C - - thumb_func_start sub_811FCE8 -sub_811FCE8: @ 811FCE8 - push {r4,r5,lr} - ldr r5, _0811FD2C @ =gUnknown_02024A60 - ldrb r2, [r5] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - ldr r4, _0811FD30 @ =0x02017810 - adds r3, r0, r4 - ldrb r0, [r3, 0x4] - cmp r0, 0 - bne _0811FD34 - lsls r0, r2, 2 - adds r1, r4, 0 - subs r1, 0x10 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _0811FD1A - adds r0, r2, 0 - adds r1, r2, 0 - movs r3, 0x5 - bl move_anim_start_t4 -_0811FD1A: - ldrb r0, [r5] - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrb r0, [r1, 0x4] - adds r0, 0x1 - strb r0, [r1, 0x4] - b _0811FDAA - .align 2, 0 -_0811FD2C: .4byte gUnknown_02024A60 -_0811FD30: .4byte 0x02017810 -_0811FD34: - ldrb r1, [r3] - movs r0, 0x40 - ands r0, r1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _0811FDAA - strb r4, [r3, 0x4] - ldr r2, _0811FDB0 @ =gUnknown_02024A6A - ldrb r1, [r5] - lsls r0, r1, 1 - adds r0, r2 - ldrh r2, [r0] - movs r0, 0x64 - muls r0, r2 - ldr r2, _0811FDB4 @ =gPlayerParty - adds r0, r2 - bl sub_80324F8 - movs r1, 0x40 - negs r1, r1 - movs r0, 0x10 - bl PlaySE12WithPanning - ldr r2, _0811FDB8 @ =gSprites - ldr r3, _0811FDBC @ =gUnknown_02024BE0 - ldrb r0, [r5] - adds r0, r3 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - strh r4, [r0, 0x30] - ldrb r0, [r5] - adds r0, r3 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x5 - strh r1, [r0, 0x32] - ldrb r0, [r5] - adds r0, r3 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r2, 0x1C - adds r0, r2 - ldr r1, _0811FDC0 @ =sub_80105EC - str r1, [r0] - ldr r1, _0811FDC4 @ =gUnknown_03004330 - ldrb r0, [r5] - lsls r0, 2 - adds r0, r1 - ldr r1, _0811FDC8 @ =sub_811DE98 - str r1, [r0] -_0811FDAA: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811FDB0: .4byte gUnknown_02024A6A -_0811FDB4: .4byte gPlayerParty -_0811FDB8: .4byte gSprites -_0811FDBC: .4byte gUnknown_02024BE0 -_0811FDC0: .4byte sub_80105EC -_0811FDC4: .4byte gUnknown_03004330 -_0811FDC8: .4byte sub_811DE98 - thumb_func_end sub_811FCE8 - thumb_func_start sub_811FDCC sub_811FDCC: @ 811FDCC push {lr} diff --git a/include/battle.h b/include/battle.h index be474b59f..f72333a9d 100644 --- a/include/battle.h +++ b/include/battle.h @@ -35,7 +35,7 @@ extern u8 unk_2000000[]; // to do: maybe try to reduce the defines needed to match? #define BATTLE_STRUCT ((struct BattleStruct *)(unk_2000000)) #define AI_THINKING_STRUCT ((struct AI_ThinkingStruct *)(unk_2000000 + 0x16800)) -#define UNK_2016A00_STRUCT ((struct UnknownStruct1 *)(unk_2000000 + 0x16A00)) +#define UNK_2016A00_STRUCT ((struct UnkBattleStruct1 *)(unk_2000000 + 0x16A00)) #define AI_STACK ((struct AI_Stack *)(unk_2000000 + 0x16C00)) #define AI_ARRAY_160CC ((struct SmallItemStruct *)(unk_2000000 + 0x160CC)) @@ -61,7 +61,7 @@ struct Trainer /*0x24*/ void *party; }; -struct UnknownStruct1 // AI_Opponent_Info? +struct UnkBattleStruct1 // AI_Opponent_Info? { /*0x00*/ u16 movesUsed[2][8]; // 0xFFFF means move not used (confuse self hit, etc) /*0x20*/ u8 unk20[2]; @@ -119,7 +119,7 @@ struct BattleStruct /* 0x2000000 */ u8 filler2[0x72E]; /* 0x16800 */ struct AI_ThinkingStruct ai; /* 0x2016800 */ u8 filler1681C[0x1E4]; - /* 0x16A00 */ struct UnknownStruct1 unk_2016A00_2; + /* 0x16A00 */ struct UnkBattleStruct1 unk_2016A00_2; }; struct UnknownStruct4 diff --git a/include/songs.h b/include/songs.h index c465ac562..d7829479f 100644 --- a/include/songs.h +++ b/include/songs.h @@ -3,23 +3,23 @@ enum { - SE_STOP, - SE_KAIFUKU, - SE_PC_LOGON, - SE_PC_OFF, - SE_PC_ON, - SE_SELECT, - SE_WIN_OPEN, - SE_WALL_HIT, - SE_DOOR, - SE_KAIDAN, - SE_DANSA, - SE_JITENSYA, - SE_KOUKA_L, - SE_KOUKA_M, - SE_KOUKA_H, - SE_BOWA2, - SE_POKE_DEAD, + /*0x00*/ SE_STOP, + /*0x01*/ SE_KAIFUKU, + /*0x02*/ SE_PC_LOGON, + /*0x03*/ SE_PC_OFF, + /*0x04*/ SE_PC_ON, + /*0x05*/ SE_SELECT, + /*0x06*/ SE_WIN_OPEN, + /*0x07*/ SE_WALL_HIT, + /*0x08*/ SE_DOOR, + /*0x09*/ SE_KAIDAN, + /*0x0A*/ SE_DANSA, + /*0x0B*/ SE_JITENSYA, + /*0x0C*/ SE_KOUKA_L, + /*0x0D*/ SE_KOUKA_M, + /*0x0E*/ SE_KOUKA_H, + /*0x0F*/ SE_BOWA2, + /*0x10*/ SE_POKE_DEAD, SE_NIGERU, SE_JIDO_DOA, SE_NAMINORI, diff --git a/src/battle_811DA74.c b/src/battle_811DA74.c index 717562f84..9be2cfe21 100644 --- a/src/battle_811DA74.c +++ b/src/battle_811DA74.c @@ -1,11 +1,14 @@ #include "global.h" #include "asm.h" +#include "battle.h" +#include "data2.h" #include "link.h" #include "m4a.h" #include "main.h" #include "palette.h" #include "pokemon.h" #include "sound.h" +#include "songs.h" #include "sprite.h" #include "string_util.h" #include "text.h" @@ -59,6 +62,13 @@ extern u8 unk_2000000[]; #define EWRAM_17800 ((u8 *)(unk_2000000 + 0x17800)) #define EWRAM_17810 ((struct UnknownStruct2 *)(unk_2000000 + 0x17810)) +extern void oamt_add_pos2_onto_pos1(); +extern void oamt_set_x3A_32(); +extern void sub_8078B34(struct Sprite *); +extern void sub_80105EC(struct Sprite *); +extern s32 sub_803FC34(u16); +extern void sub_8031AF4(); +extern void sub_80313A0(struct Sprite *); extern u8 sub_8046400(); extern void sub_80312F0(struct Sprite *); extern u8 CreateInvisibleSpriteWithCallback(); @@ -1038,3 +1048,70 @@ void sub_811FA5C(void) break; } } + +void sub_811FAE4(void) +{ + s16 xOffset; + u32 gender; + + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + if (battle_get_per_side_status(gUnknown_02024A60) & 2) + xOffset = 16; + else + xOffset = -16; + gender = gLinkPlayers[sub_803FC34(gUnknown_02024A60)].gender; + } + else + { + xOffset = 0; + gender = gLinkPlayers[GetMultiplayerId() ^ 1].gender; + } + sub_8031AF4(gender, gUnknown_02024A60); + GetMonSpriteTemplate_803C5A0(gender, battle_get_per_side_status(gUnknown_02024A60)); + gUnknown_02024BE0[gUnknown_02024A60] = CreateSprite( + &gUnknown_02024E8C, + 80 + xOffset, 80 + 4 * (8 - gTrainerBackPicCoords[gender].coords), + sub_8079E90(gUnknown_02024A60)); + gSprites[gUnknown_02024BE0[gUnknown_02024A60]].oam.paletteNum = gUnknown_02024A60; + gSprites[gUnknown_02024BE0[gUnknown_02024A60]].pos2.x = 240; + gSprites[gUnknown_02024BE0[gUnknown_02024A60]].data0 = -2; + gSprites[gUnknown_02024BE0[gUnknown_02024A60]].callback = sub_80313A0; + gUnknown_03004330[gUnknown_02024A60] = sub_811DAE4; +} + +void sub_811FC30(void) +{ + dp01_tbl3_exec_completed(); +} + +void sub_811FC3C(void) +{ + oamt_add_pos2_onto_pos1(&gSprites[gUnknown_02024BE0[gUnknown_02024A60]]); + gSprites[gUnknown_02024BE0[gUnknown_02024A60]].data0 = 35; + gSprites[gUnknown_02024BE0[gUnknown_02024A60]].data2 = -40; + gSprites[gUnknown_02024BE0[gUnknown_02024A60]].data4 = gSprites[gUnknown_02024BE0[gUnknown_02024A60]].pos1.y; + gSprites[gUnknown_02024BE0[gUnknown_02024A60]].callback = sub_8078B34; + oamt_set_x3A_32(&gSprites[gUnknown_02024BE0[gUnknown_02024A60]], SpriteCallbackDummy); + gUnknown_03004330[gUnknown_02024A60] = sub_811DB1C; +} + +void sub_811FCE8(void) +{ + if (EWRAM_17810[gUnknown_02024A60].unk4 == 0) + { + if (EWRAM_17800[gUnknown_02024A60 * 4] & 4) + move_anim_start_t4(gUnknown_02024A60, gUnknown_02024A60, gUnknown_02024A60, 5); + EWRAM_17810[gUnknown_02024A60].unk4++; + } + else if (!(EWRAM_17810[gUnknown_02024A60].unk0 & 0x40)) + { + EWRAM_17810[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; + gSprites[gUnknown_02024BE0[gUnknown_02024A60]].data2 = 5; + gSprites[gUnknown_02024BE0[gUnknown_02024A60]].callback = sub_80105EC; + gUnknown_03004330[gUnknown_02024A60] = sub_811DE98; + } +} diff --git a/src/battle_ai.c b/src/battle_ai.c index f10c6a013..dbd926000 100644 --- a/src/battle_ai.c +++ b/src/battle_ai.c @@ -269,7 +269,7 @@ void BattleAI_HandleItemUseBeforeAISetup(void) s32 i; u8 *data = (u8 *)UNK_2016A00_STRUCT; - for (i = 0; (u32)i < sizeof(struct UnknownStruct1); i++) + for (i = 0; (u32)i < sizeof(struct UnkBattleStruct1); i++) data[i] = 0; if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) |