diff options
author | camthesaxman <cameronghall@cox.net> | 2017-06-10 14:40:36 -0500 |
---|---|---|
committer | camthesaxman <cameronghall@cox.net> | 2017-06-10 14:40:36 -0500 |
commit | b91879759462841b88ad3f0515ba205bedc84b90 (patch) | |
tree | 799231dd99f9eb28a0bb7c7f02990ceca8e6912d | |
parent | 16db220259f321860e503282db86837124f3c66a (diff) |
decompile sub_8031FC4
-rw-r--r-- | asm/battle_7.s | 408 | ||||
-rw-r--r-- | src/battle_7.c | 115 |
2 files changed, 115 insertions, 408 deletions
diff --git a/asm/battle_7.s b/asm/battle_7.s index 1e4e2013a..a1159e66a 100644 --- a/asm/battle_7.s +++ b/asm/battle_7.s @@ -6,414 +6,6 @@ .text - thumb_func_start sub_8031FC4 -sub_8031FC4: @ 8031FC4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r1, 24 - lsrs r1, 24 - str r1, [sp, 0xC] - lsls r2, 24 - cmp r2, 0 - beq _08032088 - ldr r0, _08032064 @ =gUnknown_02024BE0 - mov r1, r8 - adds r6, r1, r0 - ldrb r1, [r6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r7, _08032068 @ =gSprites - adds r0, r7 - ldr r4, _0803206C @ =0x02017840 - ldrb r1, [r4] - bl StartSpriteAnim - mov r2, r8 - lsls r0, r2, 20 - movs r5, 0x80 - lsls r5, 17 - adds r0, r5 - lsrs r5, r0, 16 - ldrh r0, [r4] - lsls r0, 5 - ldr r2, _08032070 @ =0xffffebc0 - adds r1, r4, r2 - adds r0, r1 - adds r1, r5, 0 - movs r2, 0x20 - bl LoadPalette - ldr r0, _08032074 @ =gBattleMonForms - add r0, r8 - ldrh r1, [r4] - strb r1, [r0] - mov r1, r8 - lsls r0, r1, 2 - subs r4, 0x40 - adds r0, r4 - ldrh r0, [r0, 0x2] - cmp r0, 0 - beq _0803204C - ldr r3, _08032078 @ =0x00007fff - adds r0, r5, 0 - movs r1, 0x10 - movs r2, 0x6 - bl BlendPalette - lsls r1, r5, 1 - ldr r0, _0803207C @ =gPlttBufferFaded - adds r0, r1, r0 - ldr r2, _08032080 @ =gPlttBufferUnfaded - adds r1, r2 - ldr r2, _08032084 @ =REG_BG0CNT - bl CpuSet -_0803204C: - mov r0, r8 - bl sub_8077F68 - ldrb r2, [r6] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r7 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0x22] - b _080322F6 - .align 2, 0 -_08032064: .4byte gUnknown_02024BE0 -_08032068: .4byte gSprites -_0803206C: .4byte 0x02017840 -_08032070: .4byte 0xffffebc0 -_08032074: .4byte gBattleMonForms -_08032078: .4byte 0x00007fff -_0803207C: .4byte gPlttBufferFaded -_08032080: .4byte gPlttBufferUnfaded -_08032084: .4byte REG_BG0CNT -_08032088: - bl IsContest - lsls r0, 24 - cmp r0, 0 - beq _080320D0 - movs r2, 0 - mov r10, r2 - ldr r5, _080320C0 @ =0x02019348 - ldrh r7, [r5, 0x2] - ldr r4, [r5, 0x8] - mov r9, r4 - ldr r6, [r5, 0xC] - lsls r0, r7, 3 - ldr r1, _080320C4 @ =gMonBackPicTable - adds r0, r1 - ldr r1, _080320C8 @ =gMonBackPicCoords - lsls r2, r7, 2 - adds r2, r1 - ldrb r1, [r2] - ldrb r2, [r2, 0x1] - movs r3, 0x80 - lsls r3, 18 - ldr r4, _080320CC @ =gUnknown_081FAF4C - ldr r4, [r4] - str r4, [sp] - str r7, [sp, 0x4] - ldr r4, [r5, 0x10] - b _08032184 - .align 2, 0 -_080320C0: .4byte 0x02019348 -_080320C4: .4byte gMonBackPicTable -_080320C8: .4byte gMonBackPicCoords -_080320CC: .4byte gUnknown_081FAF4C -_080320D0: - mov r0, r8 - bl battle_get_per_side_status - lsls r0, 24 - lsrs r0, 24 - mov r10, r0 - ldr r0, [sp, 0xC] - bl battle_side_get_owner - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08032104 - ldr r1, _080320FC @ =gUnknown_02024A6A - ldr r5, [sp, 0xC] - lsls r0, r5, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08032100 @ =gEnemyParty - b _08032114 - .align 2, 0 -_080320FC: .4byte gUnknown_02024A6A -_08032100: .4byte gEnemyParty -_08032104: - ldr r1, _0803218C @ =gUnknown_02024A6A - ldr r2, [sp, 0xC] - lsls r0, r2, 1 - adds r0, r1 - ldrh r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08032190 @ =gPlayerParty -_08032114: - adds r0, r1 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r7, r0, 16 - mov r0, r8 - bl battle_side_get_owner - lsls r0, 24 - cmp r0, 0 - bne _080321A4 - ldr r0, _0803218C @ =gUnknown_02024A6A - mov r5, r8 - lsls r4, r5, 1 - adds r4, r0 - ldrh r0, [r4] - movs r6, 0x64 - muls r0, r6 - ldr r5, _08032190 @ =gPlayerParty - adds r0, r5 - movs r1, 0 - bl GetMonData - mov r9, r0 - ldrh r0, [r4] - muls r0, r6 - adds r0, r5 - movs r1, 0x1 - bl GetMonData - adds r6, r0, 0 - lsls r0, r7, 3 - ldr r1, _08032194 @ =gMonBackPicTable - adds r0, r1 - ldr r1, _08032198 @ =gMonBackPicCoords - lsls r2, r7, 2 - adds r2, r1 - ldrb r1, [r2] - ldrb r2, [r2, 0x1] - movs r3, 0x80 - lsls r3, 18 - ldr r4, _0803219C @ =gUnknown_081FAF4C - mov r12, r4 - mov r5, r10 - lsls r4, r5, 2 - add r4, r12 - ldr r4, [r4] - str r4, [sp] - str r7, [sp, 0x4] - ldr r4, _080321A0 @ =gUnknown_02024E70 - mov r12, r4 - mov r5, r8 - lsls r4, r5, 2 - add r4, r12 - ldr r4, [r4] -_08032184: - str r4, [sp, 0x8] - bl HandleLoadSpecialPokePic - b _08032202 - .align 2, 0 -_0803218C: .4byte gUnknown_02024A6A -_08032190: .4byte gPlayerParty -_08032194: .4byte gMonBackPicTable -_08032198: .4byte gMonBackPicCoords -_0803219C: .4byte gUnknown_081FAF4C -_080321A0: .4byte gUnknown_02024E70 -_080321A4: - ldr r0, _08032308 @ =gUnknown_02024A6A - mov r1, r8 - lsls r4, r1, 1 - adds r4, r0 - ldrh r0, [r4] - movs r6, 0x64 - muls r0, r6 - ldr r5, _0803230C @ =gEnemyParty - adds r0, r5 - movs r1, 0 - bl GetMonData - mov r9, r0 - ldrh r0, [r4] - muls r0, r6 - adds r0, r5 - movs r1, 0x1 - bl GetMonData - adds r6, r0, 0 - lsls r0, r7, 3 - ldr r1, _08032310 @ =gMonFrontPicTable - adds r0, r1 - ldr r1, _08032314 @ =gMonFrontPicCoords - lsls r2, r7, 2 - adds r2, r1 - ldrb r1, [r2] - ldrb r2, [r2, 0x1] - movs r3, 0x80 - lsls r3, 18 - ldr r4, _08032318 @ =gUnknown_081FAF4C - mov r12, r4 - mov r5, r10 - lsls r4, r5, 2 - add r4, r12 - ldr r4, [r4] - str r4, [sp] - str r7, [sp, 0x4] - ldr r4, _0803231C @ =gUnknown_02024E70 - mov r12, r4 - mov r5, r8 - lsls r4, r5, 2 - add r4, r12 - ldr r4, [r4] - str r4, [sp, 0x8] - bl HandleLoadSpecialPokePic -_08032202: - ldr r1, _08032318 @ =gUnknown_081FAF4C - mov r2, r10 - lsls r0, r2, 2 - adds r0, r1 - ldr r2, [r0] - ldr r0, _08032320 @ =gUnknown_02024BE0 - add r0, r8 - mov r10, r0 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _08032324 @ =gSprites - adds r0, r4 - ldrh r0, [r0, 0x4] - lsls r0, 22 - lsrs r0, 17 - ldr r1, _08032328 @ =0x06010000 - adds r0, r1 - ldr r1, _0803232C @ =0x040000d4 - str r2, [r1] - str r0, [r1, 0x4] - ldr r0, _08032330 @ =0x84000200 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - mov r5, r8 - lsls r0, r5, 20 - movs r1, 0x80 - lsls r1, 17 - adds r0, r1 - lsrs r5, r0, 16 - adds r0, r7, 0 - adds r1, r6, 0 - mov r2, r9 - bl species_and_otid_get_pal - adds r6, r0, 0 - ldr r2, _08032334 @ =0x02000000 - mov r9, r2 - mov r1, r9 - bl sub_800D238 - mov r0, r9 - adds r1, r5, 0 - movs r2, 0x20 - bl LoadPalette - ldr r0, _08032338 @ =SPECIES_CASTFORM - cmp r7, r0 - bne _08032288 - movs r4, 0xB2 - lsls r4, 9 - add r4, r9 - adds r0, r6, 0 - adds r1, r4, 0 - bl sub_800D238 - ldr r0, _0803233C @ =gBattleMonForms - ldr r1, [sp, 0xC] - adds r0, r1, r0 - ldrb r0, [r0] - lsls r0, 5 - adds r0, r4 - adds r1, r5, 0 - movs r2, 0x20 - bl LoadPalette -_08032288: - ldr r3, _08032340 @ =0x00007fff - adds r0, r5, 0 - movs r1, 0x10 - movs r2, 0x6 - bl BlendPalette - lsls r1, r5, 1 - ldr r0, _08032344 @ =gPlttBufferFaded - adds r0, r1, r0 - ldr r2, _08032348 @ =gPlttBufferUnfaded - adds r1, r2 - ldr r2, _0803234C @ =REG_BG0CNT - bl CpuSet - bl IsContest - lsls r0, 24 - cmp r0, 0 - bne _080322C8 - mov r2, r8 - lsls r0, r2, 2 - movs r1, 0xBC - lsls r1, 9 - add r1, r9 - adds r0, r1 - strh r7, [r0, 0x2] - ldr r0, _0803233C @ =gBattleMonForms - adds r1, r2, r0 - ldr r4, [sp, 0xC] - adds r0, r4, r0 - ldrb r0, [r0] - strb r0, [r1] -_080322C8: - mov r0, r8 - bl sub_8077F68 - mov r5, r10 - ldrb r2, [r5] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - ldr r2, _08032324 @ =gSprites - adds r1, r2 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0x22] - ldrb r1, [r5] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldr r1, _0803233C @ =gBattleMonForms - add r1, r8 - ldrb r1, [r1] - bl StartSpriteAnim -_080322F6: - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08032308: .4byte gUnknown_02024A6A -_0803230C: .4byte gEnemyParty -_08032310: .4byte gMonFrontPicTable -_08032314: .4byte gMonFrontPicCoords -_08032318: .4byte gUnknown_081FAF4C -_0803231C: .4byte gUnknown_02024E70 -_08032320: .4byte gUnknown_02024BE0 -_08032324: .4byte gSprites -_08032328: .4byte 0x06010000 -_0803232C: .4byte 0x040000d4 -_08032330: .4byte 0x84000200 -_08032334: .4byte 0x02000000 -_08032338: .4byte SPECIES_CASTFORM -_0803233C: .4byte gBattleMonForms -_08032340: .4byte 0x00007fff -_08032344: .4byte gPlttBufferFaded -_08032348: .4byte gPlttBufferUnfaded -_0803234C: .4byte REG_BG0CNT - thumb_func_end sub_8031FC4 - thumb_func_start sub_8032350 sub_8032350: @ 8032350 push {r4-r7,lr} diff --git a/src/battle_7.c b/src/battle_7.c index 1acadf7db..d909ceffc 100644 --- a/src/battle_7.c +++ b/src/battle_7.c @@ -14,6 +14,16 @@ #include "task.h" #include "gba/m4a_internal.h" +struct Struct2019348 +{ + u8 filler0[2]; + u16 unk2; + u8 filler4[4]; + u32 unk8; + u32 unkC; + u32 unk10; +}; + extern struct MusicPlayerInfo gMPlay_SE1; extern struct MusicPlayerInfo gMPlay_SE2; extern u8 gUnknown_02024A60; @@ -44,6 +54,9 @@ extern const struct SpriteSheet gUnknown_0820A4B4[]; extern const struct SpritePalette gUnknown_0820A4D4[]; extern const u8 gUnknown_08D09C48[]; +#define ewram19348 (*(struct Struct2019348 *)(ewram + 0x19348)) + +extern u8 sub_8077F68(u8); extern void sub_8094958(void); extern const u16 *pokemon_get_pal(struct Pokemon *); extern void sub_80105DC(struct Sprite *); @@ -572,3 +585,105 @@ void sub_8031F88(u8 a) { ewram17800[a].unk0_0 = gSprites[gUnknown_02024BE0[a]].invisible; } + +void sub_8031FC4(u8 a, u8 b, bool8 c) +{ + u16 paletteOffset; + u16 species; + u32 personalityValue; + u32 otId; + u8 r10; + const u16 *palette; + + if (c) + { + StartSpriteAnim(&gSprites[gUnknown_02024BE0[a]], ewram17840.unk0); + paletteOffset = 0x100 + a * 16; + LoadPalette(ewram + 0x16400 + ewram17840.unk0 * 32, paletteOffset, 32); + gBattleMonForms[a] = ewram17840.unk0; + if (ewram17800[a].unk2 != 0) + { + BlendPalette(paletteOffset, 16, 6, 0x7FFF); + CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); + } + gSprites[gUnknown_02024BE0[a]].pos1.y = sub_8077F68(a); + } + else + { + const void *src; + void *dst; + + if (IsContest()) + { + r10 = 0; + species = ewram19348.unk2; + personalityValue = ewram19348.unk8; + otId = ewram19348.unkC; + HandleLoadSpecialPokePic( + &gMonBackPicTable[species], + gMonBackPicCoords[species].coords, + gMonBackPicCoords[species].y_offset, + 0x02000000, + gUnknown_081FAF4C[0], + species, + ewram19348.unk10); + } + else + { + r10 = battle_get_per_side_status(a); + if (battle_side_get_owner(b) == 1) + species = GetMonData(&gEnemyParty[gUnknown_02024A6A[b]], MON_DATA_SPECIES); + else + species = GetMonData(&gPlayerParty[gUnknown_02024A6A[b]], MON_DATA_SPECIES); + if (battle_side_get_owner(a) == 0) + { + personalityValue = GetMonData(&gPlayerParty[gUnknown_02024A6A[a]], MON_DATA_PERSONALITY); + otId = GetMonData(&gPlayerParty[gUnknown_02024A6A[a]], MON_DATA_OT_ID); + HandleLoadSpecialPokePic( + &gMonBackPicTable[species], + gMonBackPicCoords[species].coords, + gMonBackPicCoords[species].y_offset, + 0x02000000, + gUnknown_081FAF4C[r10], + species, + gUnknown_02024E70[a]); + } + else + { + personalityValue = GetMonData(&gEnemyParty[gUnknown_02024A6A[a]], MON_DATA_PERSONALITY); + otId = GetMonData(&gEnemyParty[gUnknown_02024A6A[a]], MON_DATA_OT_ID); + HandleLoadSpecialPokePic( + &gMonFrontPicTable[species], + gMonFrontPicCoords[species].coords, + gMonFrontPicCoords[species].y_offset, + 0x02000000, + gUnknown_081FAF4C[r10], + species, + gUnknown_02024E70[a]); + } + } + src = gUnknown_081FAF4C[r10]; + dst = (void *)(VRAM + 0x10000 + gSprites[gUnknown_02024BE0[a]].oam.tileNum * 32); + DmaCopy32(3, src, dst, 0x800); + paletteOffset = 0x100 + a * 16; + palette = species_and_otid_get_pal(species, otId, personalityValue); + sub_800D238(palette, ewram); + LoadPalette(ewram, paletteOffset, 32); + if (species == SPECIES_CASTFORM) + { + u16 *paletteSrc = (u16 *)(ewram + 0x16400); + + sub_800D238(palette, paletteSrc); + LoadPalette(paletteSrc + gBattleMonForms[b] * 16, paletteOffset, 32); + } + BlendPalette(paletteOffset, 16, 6, 0x7FFF); + CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); + if (!IsContest()) + { + ewram17800[a].unk2 = species; + gBattleMonForms[a] = gBattleMonForms[b]; + } + gSprites[gUnknown_02024BE0[a]].pos1.y = sub_8077F68(a); + StartSpriteAnim(&gSprites[gUnknown_02024BE0[a]], gBattleMonForms[a]); + } +} |