diff options
-rw-r--r-- | asm/battle_7.s | 389 | ||||
-rw-r--r-- | include/data2.h | 4 | ||||
-rw-r--r-- | src/battle_7.c | 140 |
3 files changed, 142 insertions, 391 deletions
diff --git a/asm/battle_7.s b/asm/battle_7.s index b9eb6d0db..dc9c0b640 100644 --- a/asm/battle_7.s +++ b/asm/battle_7.s @@ -6,395 +6,6 @@ .text - thumb_func_start sub_80318FC -sub_80318FC: @ 80318FC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - mov r8, r0 - lsls r1, 24 - lsrs r1, 24 - mov r9, r1 - movs r1, 0 - bl GetMonData - str r0, [sp, 0xC] - mov r0, r9 - lsls r1, r0, 2 - ldr r0, _08031938 @ =0x02017800 - adds r2, r1, r0 - ldrh r0, [r2, 0x2] - cmp r0, 0 - bne _0803193C - mov r0, r8 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - lsrs r6, r0, 16 - ldr r7, [sp, 0xC] - b _08031944 - .align 2, 0 -_08031938: .4byte 0x02017800 -_0803193C: - ldrh r6, [r2, 0x2] - ldr r0, _080319A0 @ =gUnknown_02024E70 - adds r0, r1, r0 - ldr r7, [r0] -_08031944: - mov r0, r8 - movs r1, 0x1 - bl GetMonData - mov r10, r0 - mov r0, r9 - bl battle_get_per_side_status - lsls r0, 24 - lsls r5, r6, 3 - ldr r1, _080319A4 @ =gMonBackPicTable - adds r5, r1 - ldr r1, _080319A8 @ =gMonBackPicCoords - lsls r2, r6, 2 - adds r2, r1 - ldrb r1, [r2] - ldrb r2, [r2, 0x1] - movs r3, 0x80 - lsls r3, 18 - ldr r4, _080319AC @ =gUnknown_081FAF4C - lsrs r0, 22 - adds r0, r4 - ldr r0, [r0] - str r0, [sp] - str r6, [sp, 0x4] - str r7, [sp, 0x8] - adds r0, r5, 0 - bl HandleLoadSpecialPokePic - mov r1, r9 - lsls r2, r1, 4 - movs r0, 0x80 - lsls r0, 1 - adds r7, r2, r0 - lsls r1, 2 - ldr r0, _080319B0 @ =0x02017800 - adds r0, r1, r0 - ldrh r0, [r0, 0x2] - str r1, [sp, 0x10] - adds r4, r2, 0 - cmp r0, 0 - bne _080319B4 - mov r0, r8 - bl pokemon_get_pal - b _080319BE - .align 2, 0 -_080319A0: .4byte gUnknown_02024E70 -_080319A4: .4byte gMonBackPicTable -_080319A8: .4byte gMonBackPicCoords -_080319AC: .4byte gUnknown_081FAF4C -_080319B0: .4byte 0x02017800 -_080319B4: - adds r0, r6, 0 - mov r1, r10 - ldr r2, [sp, 0xC] - bl species_and_otid_get_pal -_080319BE: - adds r5, r0, 0 - ldr r1, _08031A48 @ =0x02000000 - mov r8, r1 - adds r0, r5, 0 - bl sub_800D238 - mov r0, r8 - adds r1, r7, 0 - movs r2, 0x20 - bl LoadPalette - adds r1, r4, 0 - adds r1, 0x80 - mov r0, r8 - movs r2, 0x20 - bl LoadPalette - ldr r0, _08031A4C @ =SPECIES_CASTFORM - cmp r6, r0 - bne _08031A0A - subs r0, 0x81 - adds r7, r4, r0 - movs r4, 0xB2 - lsls r4, 9 - add r4, r8 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_800D238 - ldr r0, _08031A50 @ =gBattleMonForms - add r0, r9 - ldrb r0, [r0] - lsls r0, 5 - adds r0, r4 - adds r1, r7, 0 - movs r2, 0x20 - bl LoadPalette -_08031A0A: - movs r0, 0xBC - lsls r0, 9 - add r0, r8 - ldr r1, [sp, 0x10] - adds r0, r1, r0 - ldrh r0, [r0, 0x2] - cmp r0, 0 - beq _08031A36 - ldr r3, _08031A54 @ =0x00007fff - adds r0, r7, 0 - movs r1, 0x10 - movs r2, 0x6 - bl BlendPalette - lsls r1, r7, 1 - ldr r0, _08031A58 @ =gPlttBufferFaded - adds r0, r1, r0 - ldr r2, _08031A5C @ =gPlttBufferUnfaded - adds r1, r2 - ldr r2, _08031A60 @ =REG_BG0CNT - bl CpuSet -_08031A36: - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08031A48: .4byte 0x02000000 -_08031A4C: .4byte SPECIES_CASTFORM -_08031A50: .4byte gBattleMonForms -_08031A54: .4byte 0x00007fff -_08031A58: .4byte gPlttBufferFaded -_08031A5C: .4byte gPlttBufferUnfaded -_08031A60: .4byte REG_BG0CNT - thumb_func_end sub_80318FC - - thumb_func_start unref_sub_8031A64 -unref_sub_8031A64: @ 8031A64 - bx lr - thumb_func_end unref_sub_8031A64 - - thumb_func_start nullsub_9 -nullsub_9: @ 8031A68 - bx lr - thumb_func_end nullsub_9 - - thumb_func_start sub_8031A6C -sub_8031A6C: @ 8031A6C - push {r4-r6,lr} - sub sp, 0x10 - adds r4, r0, 0 - adds r0, r1, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r0, 24 - lsrs r0, 24 - bl battle_get_per_side_status - lsls r0, 24 - lsls r6, r4, 3 - ldr r5, _08031ADC @ =gTrainerFrontPicTable - adds r5, r6, r5 - ldr r1, _08031AE0 @ =gTrainerFrontPicCoords - lsls r4, 2 - adds r4, r1 - ldrb r1, [r4] - ldrb r2, [r4, 0x1] - movs r3, 0x80 - lsls r3, 18 - ldr r4, _08031AE4 @ =gUnknown_081FAF4C - lsrs r0, 22 - adds r0, r4 - ldr r4, [r0] - str r4, [sp] - movs r0, 0 - str r0, [sp, 0x4] - adds r0, r5, 0 - bl DecompressPicFromTable_2 - str r4, [sp, 0x8] - ldrh r2, [r5, 0x4] - ldr r0, _08031AE8 @ =0xffff0000 - ldr r1, [sp, 0xC] - ands r1, r0 - orrs r1, r2 - str r1, [sp, 0xC] - ldrh r2, [r5, 0x6] - lsls r2, 16 - ldr r0, _08031AEC @ =0x0000ffff - ands r0, r1 - orrs r0, r2 - str r0, [sp, 0xC] - add r0, sp, 0x8 - bl LoadCompressedObjectPic - ldr r0, _08031AF0 @ =gTrainerFrontPicPaletteTable - adds r6, r0 - adds r0, r6, 0 - bl LoadCompressedObjectPalette - add sp, 0x10 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08031ADC: .4byte gTrainerFrontPicTable -_08031AE0: .4byte gTrainerFrontPicCoords -_08031AE4: .4byte gUnknown_081FAF4C -_08031AE8: .4byte 0xffff0000 -_08031AEC: .4byte 0x0000ffff -_08031AF0: .4byte gTrainerFrontPicPaletteTable - thumb_func_end sub_8031A6C - - thumb_func_start sub_8031AF4 -sub_8031AF4: @ 8031AF4 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0x8 - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 24 - lsrs r5, 24 - adds r0, r5, 0 - bl battle_get_per_side_status - lsls r0, 24 - lsls r1, r4, 3 - mov r8, r1 - ldr r6, _08031B60 @ =gTrainerBackPicTable - add r6, r8 - ldr r1, _08031B64 @ =gTrainerBackPicCoords - lsls r4, 2 - adds r4, r1 - ldrb r1, [r4] - ldrb r2, [r4, 0x1] - movs r3, 0x80 - lsls r3, 18 - ldr r4, _08031B68 @ =gUnknown_081FAF4C - lsrs r0, 22 - adds r0, r4 - ldr r0, [r0] - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - adds r0, r6, 0 - bl DecompressPicFromTable_2 - ldr r0, _08031B6C @ =gTrainerBackPicPaletteTable - add r8, r0 - mov r1, r8 - ldr r0, [r1] - lsls r5, 20 - movs r1, 0x80 - lsls r1, 17 - adds r5, r1 - lsrs r5, 16 - adds r1, r5, 0 - movs r2, 0x20 - bl LoadCompressedPalette - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08031B60: .4byte gTrainerBackPicTable -_08031B64: .4byte gTrainerBackPicCoords -_08031B68: .4byte gUnknown_081FAF4C -_08031B6C: .4byte gTrainerBackPicPaletteTable - thumb_func_end sub_8031AF4 - - thumb_func_start nullsub_10 -nullsub_10: @ 8031B70 - bx lr - thumb_func_end nullsub_10 - - thumb_func_start sub_8031B74 -sub_8031B74: @ 8031B74 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 16 - ldr r0, _08031B98 @ =gTrainerFrontPicPaletteTable - lsrs r4, 13 - adds r0, r4, r0 - ldrh r0, [r0, 0x4] - bl FreeSpritePaletteByTag - ldr r0, _08031B9C @ =gTrainerFrontPicTable - adds r4, r0 - ldrh r0, [r4, 0x6] - bl FreeSpriteTilesByTag - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08031B98: .4byte gTrainerFrontPicPaletteTable -_08031B9C: .4byte gTrainerFrontPicTable - thumb_func_end sub_8031B74 - - thumb_func_start unref_sub_8031BA0 -unref_sub_8031BA0: @ 8031BA0 - push {r4-r7,lr} - ldr r4, _08031BCC @ =gUnknown_0820A4D4 - adds r0, r4, 0 - bl LoadSpritePalette - adds r4, 0x8 - adds r0, r4, 0 - bl LoadSpritePalette - bl IsDoubleBattle - lsls r0, 24 - cmp r0, 0 - bne _08031BD8 - ldr r0, _08031BD0 @ =gUnknown_0820A47C - bl LoadCompressedObjectPic - ldr r0, _08031BD4 @ =gUnknown_0820A484 - bl LoadCompressedObjectPic - movs r5, 0x2 - b _08031BFA - .align 2, 0 -_08031BCC: .4byte gUnknown_0820A4D4 -_08031BD0: .4byte gUnknown_0820A47C -_08031BD4: .4byte gUnknown_0820A484 -_08031BD8: - ldr r4, _08031C20 @ =gUnknown_0820A48C - adds r0, r4, 0 - bl LoadCompressedObjectPic - adds r4, 0x8 - adds r0, r4, 0 - bl LoadCompressedObjectPic - ldr r4, _08031C24 @ =gUnknown_0820A49C - adds r0, r4, 0 - bl LoadCompressedObjectPic - adds r4, 0x8 - adds r0, r4, 0 - bl LoadCompressedObjectPic - movs r5, 0x4 -_08031BFA: - movs r4, 0 - cmp r4, r5 - bcs _08031C1A - ldr r7, _08031C28 @ =gUnknown_02024A72 - ldr r6, _08031C2C @ =gUnknown_0820A4B4 -_08031C04: - adds r0, r4, r7 - ldrb r0, [r0] - lsls r0, 3 - adds r0, r6 - bl LoadCompressedObjectPic - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, r5 - bcc _08031C04 -_08031C1A: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08031C20: .4byte gUnknown_0820A48C -_08031C24: .4byte gUnknown_0820A49C -_08031C28: .4byte gUnknown_02024A72 -_08031C2C: .4byte gUnknown_0820A4B4 - thumb_func_end unref_sub_8031BA0 - thumb_func_start sub_8031C30 sub_8031C30: @ 8031C30 push {r4-r6,lr} diff --git a/include/data2.h b/include/data2.h index 987c7cb2e..759efe3d3 100644 --- a/include/data2.h +++ b/include/data2.h @@ -29,7 +29,7 @@ extern const union AnimCmd *const *const gUnknown_081EC2A4[]; extern const union AnimCmd *const *const gUnknown_081ECACC[]; extern struct MonCoords gTrainerBackPicCoords[]; extern struct SpriteSheet gTrainerBackPicTable[]; -extern struct SpritePalette gTrainerBackPicPaletteTable[]; +extern const struct SpritePalette gTrainerBackPicPaletteTable[]; extern u8 gEnemyMonElevation[]; extern const u8 gTrainerClassNames[][13]; extern const struct Trainer gTrainers[]; @@ -40,7 +40,7 @@ extern const u8 gUnknown_081F96C8[]; extern struct SpriteSheet gUnknown_081FAEA4; extern struct SpritePalette gUnknown_081FAEAC; extern const struct SpriteTemplate gSpriteTemplate_81FAF0C; -extern void *gUnknown_081FAF4C[]; +extern void *const gUnknown_081FAF4C[]; extern struct BattleMove gBattleMoves[]; #endif // GUARD_DATA2_H diff --git a/src/battle_7.c b/src/battle_7.c index 8a2f462bd..567377222 100644 --- a/src/battle_7.c +++ b/src/battle_7.c @@ -58,6 +58,7 @@ extern u8 ewram[]; extern struct MusicPlayerInfo gMPlay_SE1; extern struct MusicPlayerInfo gMPlay_SE2; extern u8 gUnknown_02024A60; +extern u8 gUnknown_02024A72[]; extern u8 gUnknown_02024BE0[]; extern u16 gUnknown_02024DE8; extern u32 gUnknown_02024E70[]; @@ -68,6 +69,15 @@ extern void (*gAnimScriptCallback)(void); extern u8 gAnimScriptActive; extern const u8 *const gBattleAnims_Unknown1[]; extern const u8 *const gBattleAnims_Unknown2[]; +extern const struct SpriteSheet gTrainerFrontPicTable[]; +extern const struct MonCoords gTrainerFrontPicCoords[]; +extern const struct SpritePalette gTrainerFrontPicPaletteTable[]; +extern const struct SpriteSheet gUnknown_0820A47C; +extern const struct SpriteSheet gUnknown_0820A484; +extern const struct SpriteSheet gUnknown_0820A48C[]; +extern const struct SpriteSheet gUnknown_0820A49C[]; +extern const struct SpriteSheet gUnknown_0820A4B4[]; +extern const struct SpritePalette gUnknown_0820A4D4[]; extern const u16 *pokemon_get_pal(struct Pokemon *); extern void sub_80105DC(struct Sprite *); @@ -304,3 +314,133 @@ void sub_8031794(struct Pokemon *pkmn, u8 b) CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); } } + +void sub_80318FC(struct Pokemon *pkmn, u8 b) +{ + u32 personalityValue; + u16 species; + u32 r7; + u32 otId; + u8 var; + u16 paletteOffset; + const u16 *palette; + + personalityValue = GetMonData(pkmn, MON_DATA_PERSONALITY); + if (ewram17800[b].unk2 == 0) + { + species = GetMonData(pkmn, MON_DATA_SPECIES); + r7 = personalityValue; + } + else + { + species = ewram17800[b].unk2; + r7 = gUnknown_02024E70[b]; + } + otId = GetMonData(pkmn, MON_DATA_OT_ID); + var = battle_get_per_side_status(b); + HandleLoadSpecialPokePic( + &gMonBackPicTable[species], + gMonBackPicCoords[species].coords, + gMonBackPicCoords[species].y_offset, + 0x02000000, + gUnknown_081FAF4C[var], + species, + r7); + paletteOffset = 0x100 + b * 16; + if (ewram17800[b].unk2 == 0) + palette = pokemon_get_pal(pkmn); + else + palette = species_and_otid_get_pal(species, otId, personalityValue); + sub_800D238(palette, ewram); + LoadPalette(ewram, paletteOffset, 0x20); + LoadPalette(ewram, 0x80 + b * 16, 0x20); + if (species == SPECIES_CASTFORM) + { + paletteOffset = 0x100 + b * 16; + sub_800D238(palette, ewram + 0x16400); + LoadPalette(ewram + 0x16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20); + } + if (ewram17800[b].unk2 != 0) + { + BlendPalette(paletteOffset, 16, 6, 0x7FFF); + CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32); + } +} + +void unref_sub_8031A64(void) +{ +} + +void nullsub_9(u16 unused) +{ +} + +void sub_8031A6C(u16 a, u8 b) +{ + u8 status; + struct SpriteSheet spriteSheet; + + status = battle_get_per_side_status(b); + DecompressPicFromTable_2( + &gTrainerFrontPicTable[a], + gTrainerFrontPicCoords[a].coords, + gTrainerFrontPicCoords[a].y_offset, + (void *)0x02000000, + gUnknown_081FAF4C[status], + 0); + spriteSheet.data = gUnknown_081FAF4C[status]; + spriteSheet.size = gTrainerFrontPicTable[a].size; + spriteSheet.tag = gTrainerFrontPicTable[a].tag; + LoadCompressedObjectPic(&spriteSheet); + LoadCompressedObjectPalette(&gTrainerFrontPicPaletteTable[a]); +} + +void sub_8031AF4(u16 a, u8 b) +{ + u8 status; + + status = battle_get_per_side_status(b); + DecompressPicFromTable_2( + &gTrainerBackPicTable[a], + gTrainerBackPicCoords[a].coords, + gTrainerBackPicCoords[a].y_offset, + (void *)0x02000000, + gUnknown_081FAF4C[status], + 0); + LoadCompressedPalette(gTrainerBackPicPaletteTable[a].data, 0x100 + b * 16, 32); +} + +void nullsub_10(int unused) +{ +} + +void sub_8031B74(u16 a) +{ + FreeSpritePaletteByTag(gTrainerFrontPicPaletteTable[a].tag); + FreeSpriteTilesByTag(gTrainerFrontPicTable[a].tag); +} + +void unref_sub_8031BA0(void) +{ + u8 count; + u8 i; + + LoadSpritePalette(&gUnknown_0820A4D4[0]); + LoadSpritePalette(&gUnknown_0820A4D4[1]); + if (!IsDoubleBattle()) + { + LoadCompressedObjectPic(&gUnknown_0820A47C); + LoadCompressedObjectPic(&gUnknown_0820A484); + count = 2; + } + else + { + LoadCompressedObjectPic(&gUnknown_0820A48C[0]); + LoadCompressedObjectPic(&gUnknown_0820A48C[1]); + LoadCompressedObjectPic(&gUnknown_0820A49C[0]); + LoadCompressedObjectPic(&gUnknown_0820A49C[1]); + count = 4; + } + for (i = 0; i < count; i++) + LoadCompressedObjectPic(&gUnknown_0820A4B4[gUnknown_02024A72[i]]); +} |