summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcamthesaxman <cameronghall@cox.net>2017-06-08 00:36:54 -0500
committercamthesaxman <cameronghall@cox.net>2017-06-08 00:36:54 -0500
commit5847f8186942d8180f8648e166111d9c0cb06ad8 (patch)
tree0e7fc42886a4fbaa311e1b9af40b768124109bb0
parentd462cac183b52cee8758f71bec921c9909c782db (diff)
decompile sub_8031794
-rw-r--r--asm/battle_7.s164
-rw-r--r--src/battle_7.c62
2 files changed, 62 insertions, 164 deletions
diff --git a/asm/battle_7.s b/asm/battle_7.s
index 95a85aa6a..b9eb6d0db 100644
--- a/asm/battle_7.s
+++ b/asm/battle_7.s
@@ -6,170 +6,6 @@
.text
- thumb_func_start sub_8031794
-sub_8031794: @ 8031794
- 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, _080317D0 @ =0x02017800
- adds r2, r1, r0
- ldrh r0, [r2, 0x2]
- cmp r0, 0
- bne _080317D4
- mov r0, r8
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r7, [sp, 0xC]
- b _080317DC
- .align 2, 0
-_080317D0: .4byte 0x02017800
-_080317D4:
- ldrh r6, [r2, 0x2]
- ldr r0, _08031838 @ =gUnknown_02024E70
- adds r0, r1, r0
- ldr r7, [r0]
-_080317DC:
- 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, _0803183C @ =gMonFrontPicTable
- adds r5, r1
- ldr r1, _08031840 @ =gMonFrontPicCoords
- lsls r2, r6, 2
- adds r2, r1
- ldrb r1, [r2]
- ldrb r2, [r2, 0x1]
- movs r3, 0x80
- lsls r3, 18
- ldr r4, _08031844 @ =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, _08031848 @ =0x02017800
- adds r0, r1, r0
- ldrh r0, [r0, 0x2]
- str r1, [sp, 0x10]
- adds r4, r2, 0
- cmp r0, 0
- bne _0803184C
- mov r0, r8
- bl pokemon_get_pal
- b _08031856
- .align 2, 0
-_08031838: .4byte gUnknown_02024E70
-_0803183C: .4byte gMonFrontPicTable
-_08031840: .4byte gMonFrontPicCoords
-_08031844: .4byte gUnknown_081FAF4C
-_08031848: .4byte 0x02017800
-_0803184C:
- adds r0, r6, 0
- mov r1, r10
- ldr r2, [sp, 0xC]
- bl species_and_otid_get_pal
-_08031856:
- adds r5, r0, 0
- ldr r1, _080318E0 @ =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, _080318E4 @ =SPECIES_CASTFORM
- cmp r6, r0
- bne _080318A2
- 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, _080318E8 @ =gBattleMonForms
- add r0, r9
- ldrb r0, [r0]
- lsls r0, 5
- adds r0, r4
- adds r1, r7, 0
- movs r2, 0x20
- bl LoadPalette
-_080318A2:
- 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 _080318CE
- ldr r3, _080318EC @ =0x00007fff
- adds r0, r7, 0
- movs r1, 0x10
- movs r2, 0x6
- bl BlendPalette
- lsls r1, r7, 1
- ldr r0, _080318F0 @ =gPlttBufferFaded
- adds r0, r1, r0
- ldr r2, _080318F4 @ =gPlttBufferUnfaded
- adds r1, r2
- ldr r2, _080318F8 @ =REG_BG0CNT
- bl CpuSet
-_080318CE:
- 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
-_080318E0: .4byte 0x02000000
-_080318E4: .4byte SPECIES_CASTFORM
-_080318E8: .4byte gBattleMonForms
-_080318EC: .4byte 0x00007fff
-_080318F0: .4byte gPlttBufferFaded
-_080318F4: .4byte gPlttBufferUnfaded
-_080318F8: .4byte REG_BG0CNT
- thumb_func_end sub_8031794
-
thumb_func_start sub_80318FC
sub_80318FC: @ 80318FC
push {r4-r7,lr}
diff --git a/src/battle_7.c b/src/battle_7.c
index 07bb1d99e..8a2f462bd 100644
--- a/src/battle_7.c
+++ b/src/battle_7.c
@@ -3,7 +3,13 @@
// Include this when my other PR gets merged
//#include "battle.h"
#include "battle_anim.h"
+#include "blend_palette.h"
+#include "data2.h"
+#include "decompress.h"
+#include "palette.h"
+#include "pokemon.h"
#include "sound.h"
+#include "species.h"
#include "sprite.h"
#include "task.h"
#include "gba/m4a_internal.h"
@@ -33,6 +39,7 @@ struct UnknownStruct4
u8 unk0_0:2;
u8 unk0_2:1;
u8 unk0_3:1;
+ u16 unk2;
};
struct UnknownStruct6
@@ -53,6 +60,7 @@ extern struct MusicPlayerInfo gMPlay_SE2;
extern u8 gUnknown_02024A60;
extern u8 gUnknown_02024BE0[];
extern u16 gUnknown_02024DE8;
+extern u32 gUnknown_02024E70[];
extern u8 gBattleMonForms[];
extern u8 gBattleAnimPlayerMonIndex;
extern u8 gBattleAnimEnemyMonIndex;
@@ -61,10 +69,12 @@ extern u8 gAnimScriptActive;
extern const u8 *const gBattleAnims_Unknown1[];
extern const u8 *const gBattleAnims_Unknown2[];
+extern const u16 *pokemon_get_pal(struct Pokemon *);
extern void sub_80105DC(struct Sprite *);
extern void move_anim_start_t2();
extern void refresh_graphics_maybe();
extern void sub_80324E0();
+extern const u16 *species_and_otid_get_pal();
void sub_80315E8(u8);
u8 sub_803163C(u8);
@@ -242,3 +252,55 @@ bool8 mplay_80342A4(u8 a)
}
return TRUE;
}
+
+void sub_8031794(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(
+ &gMonFrontPicTable[species],
+ gMonFrontPicCoords[species].coords,
+ gMonFrontPicCoords[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);
+ }
+}