summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/rom_8077ABC.c733
1 files changed, 349 insertions, 384 deletions
diff --git a/src/rom_8077ABC.c b/src/rom_8077ABC.c
index ed700f657..412361161 100644
--- a/src/rom_8077ABC.c
+++ b/src/rom_8077ABC.c
@@ -1,11 +1,32 @@
#include "global.h"
+#include "battle.h"
#include "sprite.h"
#include "species.h"
#include "trig.h"
#include "task.h"
#include "blend_palette.h"
+#include "decompress.h"
+#include "palette.h"
+
+#define GET_UNOWN_LETTER(personality) ((\
+ (((personality & 0x03000000) >> 24) << 6) \
+ | (((personality & 0x00030000) >> 16) << 4) \
+ | (((personality & 0x00000300) >> 8) << 2) \
+ | (((personality & 0x00000003) >> 0) << 0) \
+) % 28)
+
+#define IS_DOUBLE_BATTLE() ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) ? TRUE : FALSE)
+
+#define NUM_BATTLE_SLOTS 4
+
+#define gBattleMonPartyPositions gUnknown_02024A6A
+#define gBattleMonForms gUnknown_02024E84
+#define gCastformFrontSpriteCoords gUnknownCastformCoords_0837F598
+#define gCastformElevations gUnknownCastformData_0837F5A8
+#define gCastformBackSpriteYCoords gUnknown_0837F5AC
+#define gTransformPersonalities gUnknown_02024E70
+#define gBattleMonSprites gUnknown_02024BE0
-extern u16 gUnknown_02024A6A[];
struct Struct_unk_2019348 {
u16 field_0;
@@ -16,14 +37,15 @@ struct Struct_unk_2019348 {
u32 field_10;
};
-struct Struct_unk_2017800 {
- u8 field_0;
- u8 field_1;
- u16 field_2;
+struct TransformStatus {
+ u16 unknown;
+ u16 species;
};
struct MonCoords {
- u8 coords;
+ // This would use a bitfield, but sub_8079F44
+ // uses it as a u8 and casting won't match.
+ u8 coords; // u8 x:4, y:4;
u8 y_offset;
};
@@ -32,16 +54,122 @@ struct Struct_gUnknown_0837F578 {
u8 field_1;
};
+struct OamMatrix {
+ s16 a;
+ s16 b;
+ s16 c;
+ s16 d;
+};
+
+struct Struct_2017810 {
+ u8 filler_0[6];
+ u8 field_6;
+ u8 filler_7[5];
+};
+
+struct Color {
+ u16 r:5;
+ u16 g:5;
+ u16 b:5;
+};
+
+struct Struct_sub_8078914 {
+ u8 *field_0;
+ u8 *field_4;
+ u8 field_8;
+};
+
+struct BGCnt {
+ u16 priority:2;
+ u16 charBase:2;
+ u16 unused:2;
+ u16 mosaic:1;
+ u16 colorMode:1;
+ u16 screenBase:5;
+ u16 overflow:1;
+ u16 size:2;
+};
+
+struct Struct_0202F7D4 {
+ s16 field_0;
+ s16 field_2;
+ u8 field_4;
+ u8 field_5;
+};
+
+#define BG1CNT (*(volatile struct BGCnt*)REG_ADDR_BG1CNT)
+#define BG2CNT (*(volatile struct BGCnt*)REG_ADDR_BG2CNT)
+#define BG3CNT (*(volatile struct BGCnt*)REG_ADDR_BG3CNT)
+
+extern struct OamData gOamData_837DF9C[];
+extern const union AnimCmd *const gDummySpriteAnimTable[];
+extern const union AffineAnimCmd *const gDummySpriteAffineAnimTable[];
+extern u8 gMiscBlank_Gfx[];
+
extern struct Struct_unk_2019348 unk_2019348;
-extern struct Struct_unk_2017800 unk_2017800[];
+extern struct TransformStatus gTransformStatuses[];
+extern u16 gBattleMonPartyPositions[];
extern u16 gBattleTypeFlags;
extern struct MonCoords gMonBackPicCoords[];
extern struct MonCoords gMonFrontPicCoords[];
-extern u32 gUnknown_02024E70[4];
-extern u8 gUnknown_02024E84[4];
+extern u32 gTransformPersonalities[NUM_BATTLE_SLOTS];
+extern u8 gBattleMonForms[NUM_BATTLE_SLOTS];
+extern u8 gEnemyMonElevation[];
+extern u16 gUnknown_0202F7CA[];
+extern u8 gBattleMonSprites[NUM_BATTLE_SLOTS];
+extern u8 gUnknown_0202F7C8;
+extern u8 gUnknown_0202F7C9;
+extern s16 gBattleAnimArgs[8];
+extern u8 gUnknown_02024A72[NUM_BATTLE_SLOTS];
+extern u8 gUnknown_02024A68; // gNumBattleMons?
+extern struct OamMatrix gOamMatrices[];
+extern struct Struct_2017810 unk_2017810[];
+extern u8 gUnknown_0202F7BE;
+extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7C18;
+extern struct SpriteSheet gMonFrontPicTable[];
+extern struct SpriteSheet gMonBackPicTable[];
+
+extern u8 sub_8076BE0();
+extern bool8 sub_8078874(u8);
+extern bool8 b_side_obj__get_some_boolean(u8);
+extern void UpdateMonIconFrame(struct Sprite *sprite);
+extern void CalcCenterToCornerVec(struct Sprite *sprite, u8 shape, u8 size, u8 affineMode);
+extern void *species_and_otid_get_pal(u32, u32, u32);
+extern void FreeSpriteOamMatrix(struct Sprite *sprite);
+extern void ResetPaletteStructByUid(u16);
+extern void move_anim_task_del(u8 task);
+extern u8 CreateInvisibleSpriteWithCallback(void (*callback)(struct Sprite *));
+
+u8 sub_8077E44(u8 slot, u16 species, u8 a3);
+u8 battle_get_per_side_status(u8 slot);
+u8 battle_side_get_owner(u8 slot);
+void sub_8078314(struct Sprite *sprite);
+void sub_8078364(struct Sprite *sprite);
+void move_anim_8072740(struct Sprite *sprite);
+void obj_translate_based_on_private_1_2_3_4(struct Sprite *sprite);
+bool8 sub_8078B5C(struct Sprite *sprite);
+u8 battle_get_per_side_status_permutated(u8 slot);
+void sub_8078A5C(struct Sprite *sprite);
+void sub_8078BB8(struct Sprite *sprite);
+void sub_8078D44(struct Sprite *sprite);
+bool8 sub_8078E38();
+void sub_8079518(struct Sprite *sprite);
+void sub_80796F8(u8 task);
+void sub_80797EC(struct Task *task);
+void sub_8079814(u8 taskId);
+void sub_8079BF4(s16 *bottom, s16 *top, void *ptr);
+void *sub_8079BFC(s16 bottom, s16 top);
+void sub_8079A64(u8 sprite);
+u16 sub_8079B10(u8 sprite);
+u8 sub_8079E90(u8 slot);
+void sub_807A784(u8 taskId);
+void sub_807A850(struct Task *task, u8 taskId);
+void sub_807A8D4(struct Sprite *sprite);
+void sub_807A960(struct Sprite *sprite);
+
-u8 battle_get_per_side_status(u8);
-u8 battle_side_get_owner(u8);
+EWRAM_DATA struct Struct_0202F7D4 *gUnknown_0202F7D4 = NULL;
+EWRAM_DATA u32 filler_0202F7D8[3] = {0};
const struct Struct_gUnknown_0837F578 gUnknown_0837F578[][4] = {
{
@@ -61,26 +189,28 @@ const struct Struct_gUnknown_0837F578 gUnknown_0837F578[][4] = {
// One entry for each of the four Castform forms.
// Coords are probably front pic coords or back pic coords, but this data does not seem to be
// used during battle, party summary, or pokedex screens.
-const struct MonCoords gUnknownCastformCoords_0837F598[] = {
- { 0x44, 17 },
- { 0x66, 9 },
- { 0x46, 9 },
- { 0x86, 8 },
+const struct MonCoords gCastformFrontSpriteCoords[] = {
+ { 0x44, 17 }, // NORMAL
+ { 0x66, 9 }, // SUN
+ { 0x46, 9 }, // RAIN
+ { 0x86, 8 }, // HAIL
};
-const u8 gUnknownCastformData_0837F5A8[] = {
- 0xd, 0xe, 0xd, 0xd,
+const u8 gCastformElevations[] = {
+ 13, // NORMAL
+ 14, // SUN
+ 13, // RAIN
+ 13, // HAIL
};
// Y position of the backsprite for each of the four Castform forms.
-const u8 gUnknown_0837F5AC[] = {
- 0, 0, 0, 0
+const u8 gCastformBackSpriteYCoords[] = {
+ 0, // NORMAL
+ 0, // SUN
+ 0, // RAIN
+ 0, // HAIL
};
-extern struct OamData gOamData_837DF9C[];
-extern const union AnimCmd *const gDummySpriteAnimTable[];
-extern const union AffineAnimCmd *const gDummySpriteAffineAnimTable[];
-
const struct SpriteTemplate gSpriteTemplate_837F5B0[] = {
{
.tileTag = 55125,
@@ -101,33 +231,29 @@ const struct SpriteTemplate gSpriteTemplate_837F5B0[] = {
}
};
-extern u8 gMiscBlank_Gfx[];
-
const struct SpriteSheet gUnknown_0837F5E0[] = {
{ gMiscBlank_Gfx, 0x800, 55125, },
{ gMiscBlank_Gfx, 0x800, 55126, },
};
-extern u8 sub_8076BE0();
-u8 sub_8077E44(u8, u16 species, u8);
-u8 sub_8077ABC(u8 a1, u8 a2) {
+u8 sub_8077ABC(u8 slot, u8 a2) {
u8 var;
u16 species;
- struct Struct_unk_2017800 *unk;
+ struct TransformStatus *transform;
if (sub_8076BE0()) {
- if (a2 == 3 && a1 == 3) {
+ if (a2 == 3 && slot == 3) {
a2 = 1;
}
}
switch (a2) {
case 0:
case 2:
- var = gUnknown_0837F578[gBattleTypeFlags & 1][battle_get_per_side_status(a1)].field_0;
+ var = gUnknown_0837F578[IS_DOUBLE_BATTLE()][battle_get_per_side_status(slot)].field_0;
break;
case 1:
- var = gUnknown_0837F578[gBattleTypeFlags & 1][battle_get_per_side_status(a1)].field_1;
+ var = gUnknown_0837F578[IS_DOUBLE_BATTLE()][battle_get_per_side_status(slot)].field_1;
break;
case 3:
case 4:
@@ -139,40 +265,40 @@ u8 sub_8077ABC(u8 a1, u8 a2) {
species = unk_2019348.field_0;
}
} else {
- if (battle_side_get_owner(a1)) {
- unk = &unk_2017800[a1];
- if (!unk->field_2) {
- species = GetMonData(&gEnemyParty[gUnknown_02024A6A[a1]], MON_DATA_SPECIES);
+ if (battle_side_get_owner(slot)) {
+ transform = &gTransformStatuses[slot];
+ if (!transform->species) {
+ species = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES);
} else {
- species = unk->field_2;
+ species = transform->species;
}
} else {
- unk = &unk_2017800[a1];
- if (!unk->field_2) {
- species = GetMonData(&gPlayerParty[gUnknown_02024A6A[a1]], MON_DATA_SPECIES);
+ transform = &gTransformStatuses[slot];
+ if (!transform->species) {
+ species = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES);
} else {
- species = unk->field_2;
+ species = transform->species;
}
}
}
if (a2 == 3) {
- var = sub_8077E44(a1, species, 1);
+ var = sub_8077E44(slot, species, 1);
} else {
- var = sub_8077E44(a1, species, 0);
+ var = sub_8077E44(slot, species, 0);
}
break;
}
return var;
}
-u8 sub_8077BFC(u8 a1, u16 species) {
+u8 sub_8077BFC(u8 slot, u16 species) {
u16 letter;
u32 personality;
- struct Struct_unk_2017800 *unk;
+ struct TransformStatus *transform;
u8 ret;
u16 var;
- if (!battle_side_get_owner(a1) || sub_8076BE0()) {
+ if (!battle_side_get_owner(slot) || sub_8076BE0()) {
if (species == SPECIES_UNOWN) {
if (sub_8076BE0()) {
if (unk_2019348.field_4 & 1) {
@@ -181,18 +307,14 @@ u8 sub_8077BFC(u8 a1, u16 species) {
personality = unk_2019348.field_8;
}
} else {
- unk = &unk_2017800[a1];
- if (!unk->field_2) {
- personality = GetMonData(&gPlayerParty[gUnknown_02024A6A[a1]], MON_DATA_PERSONALITY);
+ transform = &gTransformStatuses[slot];
+ if (!transform->species) {
+ personality = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY);
} else {
- personality = gUnknown_02024E70[a1];
+ personality = gTransformPersonalities[slot];
}
}
- letter = (((personality & 0x03000000) >> 24) << 6
- | ((personality & 0x00030000) >> 16) << 4
- | ((personality & 0x00000300) >> 8) << 2
- | ((personality & 0x00000003) >> 0) << 0
- ) % 28;
+ letter = GET_UNOWN_LETTER(personality);
if (!letter) {
var = species;
} else {
@@ -200,7 +322,7 @@ u8 sub_8077BFC(u8 a1, u16 species) {
}
ret = gMonBackPicCoords[var].y_offset;
} else if (species == SPECIES_CASTFORM) {
- ret = gUnknown_0837F5AC[gUnknown_02024E84[a1]];
+ ret = gCastformBackSpriteYCoords[gBattleMonForms[slot]];
} else if (species > NUM_SPECIES) {
ret = gMonBackPicCoords[0].y_offset;
} else {
@@ -208,17 +330,13 @@ u8 sub_8077BFC(u8 a1, u16 species) {
}
} else {
if (species == SPECIES_UNOWN) {
- unk = &unk_2017800[a1];
- if (!unk->field_2) {
- personality = GetMonData(&gEnemyParty[gUnknown_02024A6A[a1]], MON_DATA_PERSONALITY);
+ transform = &gTransformStatuses[slot];
+ if (!transform->species) {
+ personality = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY);
} else {
- personality = gUnknown_02024E70[a1];
+ personality = gTransformPersonalities[slot];
}
- letter = (((personality & 0x03000000) >> 24) << 6
- | ((personality & 0x00030000) >> 16) << 4
- | ((personality & 0x00000300) >> 8) << 2
- | ((personality & 0x00000003) >> 0) << 0
- ) % 28;
+ letter = GET_UNOWN_LETTER(personality);
if (!letter) {
var = species;
} else {
@@ -226,7 +344,7 @@ u8 sub_8077BFC(u8 a1, u16 species) {
}
ret = gMonFrontPicCoords[var].y_offset;
} else if (species == SPECIES_CASTFORM) {
- ret = gUnknownCastformCoords_0837F598[gUnknown_02024E84[a1]].y_offset;
+ ret = gCastformFrontSpriteCoords[gBattleMonForms[slot]].y_offset;
} else if (species > NUM_SPECIES) {
ret = gMonFrontPicCoords[0].y_offset;
} else {
@@ -236,14 +354,12 @@ u8 sub_8077BFC(u8 a1, u16 species) {
return ret;
}
-extern u8 gEnemyMonElevation[];
-
-u8 sub_8077DD8(u8 a1, u16 species) {
+u8 sub_8077DD8(u8 slot, u16 species) {
u8 ret = 0;
- if (battle_side_get_owner(a1) == 1) {
+ if (battle_side_get_owner(slot) == 1) {
if (!sub_8076BE0()) {
if (species == SPECIES_CASTFORM) {
- ret = gUnknownCastformData_0837F5A8[gUnknown_02024E84[a1]];
+ ret = gCastformElevations[gBattleMonForms[slot]];
} else if (species > NUM_SPECIES) {
ret = gEnemyMonElevation[0];
} else {
@@ -254,18 +370,18 @@ u8 sub_8077DD8(u8 a1, u16 species) {
return ret;
}
-u8 sub_8077E44(u8 a1, u16 species, u8 a3) {
+u8 sub_8077E44(u8 slot, u16 species, u8 a3) {
u16 offset;
u8 y;
- if (battle_side_get_owner(a1) == 0 || sub_8076BE0()) {
- offset = sub_8077BFC(a1, species);
+ if (battle_side_get_owner(slot) == 0 || sub_8076BE0()) {
+ offset = sub_8077BFC(slot, species);
} else {
- offset = sub_8077BFC(a1, species);
- offset -= sub_8077DD8(a1, species);
+ offset = sub_8077BFC(slot, species);
+ offset -= sub_8077DD8(slot, species);
}
- y = offset + gUnknown_0837F578[gBattleTypeFlags & 1][battle_get_per_side_status(a1)].field_1;
+ y = offset + gUnknown_0837F578[IS_DOUBLE_BATTLE()][battle_get_per_side_status(slot)].field_1;
if (a3) {
- if (battle_side_get_owner(a1) == 0) {
+ if (battle_side_get_owner(slot) == 0) {
y += 8;
}
if (y > 104) y = 104;
@@ -273,11 +389,9 @@ u8 sub_8077E44(u8 a1, u16 species, u8 a3) {
return y;
}
-extern u16 gUnknown_0202F7CA[];
-
-u8 sub_8077EE4(u8 a1, u8 a2) {
+u8 sub_8077EE4(u8 slot, u8 a2) {
u16 species;
- struct Struct_unk_2017800 *unk;
+ struct TransformStatus *transform;
if (a2 == 3 || a2 == 4) {
if (sub_8076BE0()) {
if (unk_2019348.field_4 & 1) {
@@ -286,84 +400,78 @@ u8 sub_8077EE4(u8 a1, u8 a2) {
species = unk_2019348.field_0;
}
} else {
- unk = &unk_2017800[a1];
- if (!unk->field_2) {
- species = gUnknown_0202F7CA[a1];
+ transform = &gTransformStatuses[slot];
+ if (!transform->species) {
+ species = gUnknown_0202F7CA[slot];
} else {
- species = unk->field_2;
+ species = transform->species;
}
}
if (a2 == 3) {
- return sub_8077E44(a1, species, 1);
+ return sub_8077E44(slot, species, 1);
} else {
- return sub_8077E44(a1, species, 0);
+ return sub_8077E44(slot, species, 0);
}
} else {
- return sub_8077ABC(a1, a2);
+ return sub_8077ABC(slot, a2);
}
}
-u8 sub_8077F68(u8 a1) {
- return sub_8077ABC(a1, 4);
+u8 sub_8077F68(u8 slot) {
+ return sub_8077ABC(slot, 4);
}
-u8 sub_8077F7C(u8 a1) {
+u8 sub_8077F7C(u8 slot) {
u16 var;
- if (battle_side_get_owner(a1)) {
- var = sub_8077ABC(a1, 1) + 16;
+ if (battle_side_get_owner(slot)) {
+ var = sub_8077ABC(slot, 1) + 16;
} else {
- var = sub_8077ABC(a1, 1) + 17;
+ var = sub_8077ABC(slot, 1) + 17;
}
return var;
}
-u8 sub_8077FC0(u8 a1) {
+u8 sub_8077FC0(u8 slot) {
u16 var;
u8 r6;
- struct Struct_unk_2017800 *unk;
- r6 = sub_8077ABC(a1, 1);
+ struct TransformStatus *transform;
+ r6 = sub_8077ABC(slot, 1);
if (!sub_8076BE0()) {
- if (battle_side_get_owner(a1)) {
- unk = &unk_2017800[a1];
- if (!unk->field_2) {
- var = GetMonData(&gEnemyParty[gUnknown_02024A6A[a1]], MON_DATA_SPECIES);
+ if (battle_side_get_owner(slot)) {
+ transform = &gTransformStatuses[slot];
+ if (!transform->species) {
+ var = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES);
} else {
- var = unk->field_2;
+ var = transform->species;
}
} else {
- unk = &unk_2017800[a1];
- if (!unk->field_2) {
- var = GetMonData(&gPlayerParty[gUnknown_02024A6A[a1]], MON_DATA_SPECIES);
+ transform = &gTransformStatuses[slot];
+ if (!transform->species) {
+ var = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES);
} else {
- var = unk->field_2;
+ var = transform->species;
}
}
- if (battle_side_get_owner(a1)) {
- r6 -= sub_8077DD8(a1, var);
+ if (battle_side_get_owner(slot)) {
+ r6 -= sub_8077DD8(slot, var);
}
}
return r6;
}
-extern bool8 sub_8078874(u8);
-extern bool8 b_side_obj__get_some_boolean(u8);
-extern u8 gUnknown_02024BE0[4];
-extern u8 gUnknown_0202F7C8;
-extern u8 gUnknown_0202F7C9;
-
u8 obj_id_for_side_relative_to_move(u8 a1) {
- u8 *v1;
+ u8 *sprites;
if (a1 == 0) {
if (sub_8078874(gUnknown_0202F7C8)) {
- v1 = gUnknown_02024BE0;
- return v1[gUnknown_0202F7C8];
+ sprites = gBattleMonSprites;
+ return sprites[gUnknown_0202F7C8];
} else {
return 0xff;
}
} else if (a1 == 1) {
if (sub_8078874(gUnknown_0202F7C9)) {
- v1 = gUnknown_02024BE0;
- return v1[gUnknown_0202F7C9];
+ sprites = gBattleMonSprites;
+ return sprites[gUnknown_0202F7C9];
} else {
return 0xff;
}
@@ -371,11 +479,11 @@ u8 obj_id_for_side_relative_to_move(u8 a1) {
if (!b_side_obj__get_some_boolean(gUnknown_0202F7C8 ^ 2)) {
return 0xff;
} else {
- return gUnknown_02024BE0[gUnknown_0202F7C8 ^ 2];
+ return gBattleMonSprites[gUnknown_0202F7C8 ^ 2];
}
} else {
if (b_side_obj__get_some_boolean(gUnknown_0202F7C9 ^ 2)) {
- return gUnknown_02024BE0[gUnknown_0202F7C9 ^ 2];
+ return gBattleMonSprites[gUnknown_0202F7C9 ^ 2];
} else {
return 0xff;
}
@@ -471,9 +579,6 @@ void sub_80782D8(struct Sprite *sprite) {
}
}
-void sub_8078314(struct Sprite *sprite);
-void sub_8078364(struct Sprite *sprite);
-
void sub_80782F8(struct Sprite *sprite) {
sub_8078314(sprite);
sprite->callback = sub_8078364;
@@ -515,8 +620,6 @@ void sub_8078394(struct Sprite *sprite) {
}
}
-void UpdateMonIconFrame(struct Sprite *sprite);
-
void sub_80783D0(struct Sprite *sprite) {
if (sprite->data0 > 0) {
sprite->data0--;
@@ -577,9 +680,6 @@ void sub_8078504(struct Sprite *sprite) {
}
}
-void FreeSpriteOamMatrix(struct Sprite *sprite);
-void move_anim_8072740(struct Sprite *sprite);
-
void move_anim_8074EE0(struct Sprite *sprite) {
FreeSpriteOamMatrix(sprite);
move_anim_8072740(sprite);
@@ -593,8 +693,6 @@ void unref_sub_8078588(struct Sprite *sprite) {
sprite->callback = sub_80782F8;
}
-void ResetPaletteStructByUid(u16);
-
void unref_sub_80785CC(struct Sprite *sprite) {
ResetPaletteStructByUid(sprite->data5);
move_anim_8074EE0(sprite);
@@ -618,8 +716,6 @@ void sub_807861C(struct Sprite *sprite) {
move_anim_8072740(sprite);
}
-void move_anim_task_del(u8 task);
-
void sub_8078634(u8 task) {
REG_BLDCNT = 0;
REG_BLDALPHA = 0;
@@ -647,8 +743,6 @@ void sub_807867C(struct Sprite *sprite, s16 a2) {
}
}
-void obj_translate_based_on_private_1_2_3_4(struct Sprite *sprite);
-
void sub_80786EC(struct Sprite *sprite) {
sprite->data1 = sprite->pos1.x;
sprite->data3 = sprite->pos1.y;
@@ -657,8 +751,6 @@ void sub_80786EC(struct Sprite *sprite) {
sprite->data7 = 0;
}
-bool8 sub_8078B5C(struct Sprite *sprite);
-
bool8 sub_8078718(struct Sprite *sprite) {
if (sub_8078B5C(sprite)) {
return TRUE;
@@ -675,8 +767,6 @@ void oamt_add_pos2_onto_pos1(struct Sprite *sprite) {
sprite->pos2.y = 0;
}
-extern s16 gBattleAnimArgs[8];
-
void sub_8078764(struct Sprite *sprite, u8 a2) {
if (!a2) {
sprite->pos1.x = sub_8077EE4(gUnknown_0202F7C9, 0);
@@ -698,47 +788,43 @@ void sub_80787B0(struct Sprite *sprite, u8 a2) {
sprite->pos1.y += gBattleAnimArgs[1];
}
-extern u8 gUnknown_02024A72[4];
-
-u8 battle_side_get_owner(u8 a1) {
- return gUnknown_02024A72[a1] & 1;
+u8 battle_side_get_owner(u8 slot) {
+ return gUnknown_02024A72[slot] & 1;
}
-u8 battle_get_per_side_status(u8 a1) {
- return gUnknown_02024A72[a1];
+u8 battle_get_per_side_status(u8 slot) {
+ return gUnknown_02024A72[slot];
}
-extern u8 gUnknown_02024A68;
-
-u8 battle_get_side_with_given_state(u8 a1) {
+u8 battle_get_side_with_given_state(u8 slot) {
u8 i;
for (i = 0; i < gUnknown_02024A68; i++) {
- if (gUnknown_02024A72[i] == a1) {
+ if (gUnknown_02024A72[i] == slot) {
break;
}
}
return i;
}
-bool8 sub_8078874(u8 a1) {
+bool8 sub_8078874(u8 slot) {
if (sub_8076BE0()) {
- if (gUnknown_0202F7C8 == a1) {
+ if (gUnknown_0202F7C8 == slot) {
return TRUE;
}
- if (gUnknown_0202F7C9 == a1) {
+ if (gUnknown_0202F7C9 == slot) {
return TRUE;
}
return FALSE;
} else {
- if (gUnknown_02024A72[a1] == 0xff) {
+ if (gUnknown_02024A72[slot] == 0xff) {
return FALSE;
}
- if (battle_side_get_owner(a1)) {
- if (GetMonData(&gEnemyParty[gUnknown_02024A6A[a1]], MON_DATA_HP)) {
+ if (battle_side_get_owner(slot)) {
+ if (GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_HP) != 0) {
return TRUE;
}
} else {
- if (GetMonData(&gPlayerParty[gUnknown_02024A6A[a1]], MON_DATA_HP)) {
+ if (GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_HP) != 0) {
return TRUE;
}
}
@@ -747,15 +833,9 @@ bool8 sub_8078874(u8 a1) {
}
bool8 IsDoubleBattle() {
- return gBattleTypeFlags & 1;
+ return IS_DOUBLE_BATTLE();
}
-struct Struct_sub_8078914 {
- u8 *field_0;
- u8 *field_4;
- u8 field_8;
-};
-
void sub_8078914(struct Struct_sub_8078914 *unk) {
if (sub_8076BE0()) {
unk->field_0 = (u8 *)0x6008000;
@@ -768,8 +848,6 @@ void sub_8078914(struct Struct_sub_8078914 *unk) {
}
}
-u8 battle_get_per_side_status_permutated(u8);
-
void sub_8078954(struct Struct_sub_8078914 *unk) {
if (sub_8076BE0()) {
unk->field_0 = (u8 *)0x6008000;
@@ -793,28 +871,19 @@ u8 sub_80789BC() {
return 2;
}
-struct BG3Cnt {
- u16 field_0:13;
- u16 field_d:1;
- u16 field_e:2;
-};
-
void sub_80789D4(bool8 a1) {
-#define BG3CNT (*(volatile struct BG3Cnt*)REG_ADDR_BG3CNT)
if (!a1) {
- BG3CNT.field_e = 0;
- BG3CNT.field_d = 1;
+ BG3CNT.size = 0;
+ BG3CNT.overflow = 1;
} else if (sub_8076BE0()) {
- BG3CNT.field_e = 0;
- BG3CNT.field_d = 1;
+ BG3CNT.size = 0;
+ BG3CNT.overflow = 1;
} else {
- BG3CNT.field_e = 1;
- BG3CNT.field_d = 0;
+ BG3CNT.size = 1;
+ BG3CNT.overflow = 0;
}
}
-void sub_8078A5C(struct Sprite *sprite);
-
void sub_8078A34(struct Sprite *sprite) {
sprite->data1 = sprite->pos1.x;
sprite->data3 = sprite->pos1.y;
@@ -857,8 +926,6 @@ void obj_translate_based_on_private_1_2_3_4(struct Sprite *sprite) {
sprite->data3 = 0;
}
-void sub_8078BB8(struct Sprite *sprite);
-
void sub_8078B34(struct Sprite *sprite) {
sprite->data1 = sprite->pos1.x;
sprite->data3 = sprite->pos1.y;
@@ -939,8 +1006,6 @@ void sub_8078C28(struct Sprite *sprite) {
sprite->data3 = 0;
}
-void sub_8078D44(struct Sprite *sprite);
-
void sub_8078CC0(struct Sprite *sprite) {
sprite->data1 = sprite->pos1.x;
sprite->data3 = sprite->pos1.y;
@@ -996,18 +1061,6 @@ void sub_8078D8C(struct Sprite *sprite) {
sprite->callback(sprite);
}
-bool8 sub_8078E38();
-
-struct OamMatrix
-{
- s16 a;
- s16 b;
- s16 c;
- s16 d;
-};
-
-extern struct OamMatrix gOamMatrices[];
-
void obj_id_set_rotscale(u8 sprite, s16 xScale, s16 yScale, u16 rotation) {
int i;
struct ObjAffineSrcData src;
@@ -1028,7 +1081,7 @@ void obj_id_set_rotscale(u8 sprite, s16 xScale, s16 yScale, u16 rotation) {
bool8 sub_8078E38() {
if (sub_8076BE0()) {
- if (gSprites[obj_id_for_side_relative_to_move(0)].data2 == 0xc9) {
+ if (gSprites[obj_id_for_side_relative_to_move(0)].data2 == 0xc9 /* XXX SPECIES_UNOWN? */) {
return FALSE;
}
return TRUE;
@@ -1036,18 +1089,6 @@ bool8 sub_8078E38() {
return FALSE;
}
-struct Struct_2017810 {
- u8 filler_0[3];
- u8 field_3_0:6;
- u8 filler_4[2];
- u8 field_6;
- u8 filler_7[5];
-};
-
-extern struct Struct_2017810 unk_2017810[];
-
-void CalcCenterToCornerVec(struct Sprite *sprite, u8 shape, u8 size, u8 affineMode);
-
void sub_8078E70(u8 sprite, u8 a2) {
struct Struct_2017810 *unk;
u8 r7 = gSprites[sprite].data0;
@@ -1121,15 +1162,6 @@ u16 sub_80790F0(s16 a, s16 b) {
return -var;
}
-extern u16 gPlttBufferUnfaded[];
-extern u16 gPlttBufferFaded[];
-
-struct Color {
- u16 r:5;
- u16 g:5;
- u16 b:5;
-};
-
void sub_8079108(u16 a1, bool8 a2) {
int i;
struct Color *c;
@@ -1287,8 +1319,6 @@ void sub_807941C(struct Sprite *sprite) {
oamt_set_x3A_32(sprite, move_anim_8072740);
}
-void sub_8079518(struct Sprite *sprite);
-
void sub_80794A8(struct Sprite *sprite) {
sub_80787B0(sprite, 1);
if (battle_side_get_owner(gUnknown_0202F7C8)) {
@@ -1309,7 +1339,7 @@ void sub_8079518(struct Sprite *sprite) {
}
void sub_8079534(struct Sprite *sprite) {
- u8 r4, r6, r7;
+ u8 r4, slot, r7;
if (!gBattleAnimArgs[6]) {
r4 = 1;
r7 = 3;
@@ -1319,18 +1349,18 @@ void sub_8079534(struct Sprite *sprite) {
}
if (!gBattleAnimArgs[5]) {
sub_80787B0(sprite, r4);
- r6 = gUnknown_0202F7C8;
+ slot = gUnknown_0202F7C8;
} else {
sub_8078764(sprite, r4);
- r6 = gUnknown_0202F7C9;
+ slot = gUnknown_0202F7C9;
}
if (battle_side_get_owner(gUnknown_0202F7C8)) {
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
}
sub_8078764(sprite, r4);
sprite->data0 = gBattleAnimArgs[4];
- sprite->data2 = sub_8077ABC(r6, 2) + gBattleAnimArgs[2];
- sprite->data4 = sub_8077ABC(r6, r7) + gBattleAnimArgs[3];
+ sprite->data2 = sub_8077ABC(slot, 2) + gBattleAnimArgs[2];
+ sprite->data4 = sub_8077ABC(slot, r7) + gBattleAnimArgs[3];
sprite->callback = sub_8078B34;
oamt_set_x3A_32(sprite, move_anim_8072740);
}
@@ -1357,30 +1387,28 @@ void obj_delete_but_dont_free_vram(struct Sprite *sprite) {
DestroySprite(sprite);
}
-void sub_80796F8(u8 task);
-
void sub_8079670(u8 task) {
- s16 r5 = 0;
- s16 r3 = 0;
+ s16 v1 = 0;
+ s16 v2 = 0;
if (gBattleAnimArgs[2] > gBattleAnimArgs[0]) {
- r3 = 1;
+ v2 = 1;
}
if (gBattleAnimArgs[2] < gBattleAnimArgs[0]) {
- r3 = -1;
+ v2 = -1;
}
if (gBattleAnimArgs[3] > gBattleAnimArgs[1]) {
- r5 = 1;
+ v1 = 1;
}
if (gBattleAnimArgs[3] < gBattleAnimArgs[1]) {
- r5 = -1;
+ v1 = -1;
}
gTasks[task].data[0] = 0;
gTasks[task].data[1] = gBattleAnimArgs[4];
gTasks[task].data[2] = 0;
gTasks[task].data[3] = gBattleAnimArgs[0];
gTasks[task].data[4] = gBattleAnimArgs[1];
- gTasks[task].data[5] = r3;
- gTasks[task].data[6] = r5;
+ gTasks[task].data[5] = v2;
+ gTasks[task].data[6] = v1;
gTasks[task].data[7] = gBattleAnimArgs[2];
gTasks[task].data[8] = gBattleAnimArgs[3];
REG_BLDALPHA = (gBattleAnimArgs[1] << 8) | gBattleAnimArgs[0];
@@ -1408,20 +1436,16 @@ void sub_80796F8(u8 taskId) {
}
}
-void sub_80797EC(struct Task *task);
-
void sub_8079790(u8 task) {
u8 sprite = obj_id_for_side_relative_to_move(gBattleAnimArgs[0]);
if (sprite == 0xff) {
move_anim_task_del(task);
return;
}
- gTasks[task].data[0] = (gSprites[sprite].oam.paletteNum << 4) + 0x101;
+ gTasks[task].data[0] = (gSprites[sprite].oam.paletteNum * 0x10) + 0x101;
sub_80797EC(&gTasks[task]);
}
-void sub_8079814(u8 taskId);
-
void sub_80797EC(struct Task *task) {
task->data[1] = gBattleAnimArgs[1];
task->data[2] = 0;
@@ -1460,17 +1484,15 @@ void sub_8079814(u8 taskId) {
}
void sub_80798AC(u8 task) {
- u8 index = IndexOfSpritePaletteTag(gBattleAnimArgs[0]);
- if (index == 0xff) {
+ u8 palette = IndexOfSpritePaletteTag(gBattleAnimArgs[0]);
+ if (palette == 0xff) {
move_anim_task_del(task);
return;
}
- gTasks[task].data[0] = (index << 4) + 0x101;
+ gTasks[task].data[0] = (palette * 0x10) + 0x101;
sub_80797EC(&gTasks[task]);
}
-void sub_8079BF4(s16 *, s16 *, void *);
-
void sub_80798F4(struct Task *task, u8 a2, void *a3) {
task->data[7] = 0;
task->data[8] = 0;
@@ -1483,19 +1505,6 @@ void sub_80798F4(struct Task *task, u8 a2, void *a3) {
sub_8078E70(a2, 0);
}
-struct Struct_0202F7D4 {
- s16 field_0;
- s16 field_2;
- u8 field_4;
- u8 field_5;
-};
-
-extern struct Struct_0202F7D4 *gUnknown_0202F7D4;
-
-void *sub_8079BFC(s16, s16);
-
-void sub_8079A64(u8);
-
bool8 sub_807992C(struct Task *task) {
gUnknown_0202F7D4 = sub_8079BFC(task->data[13], task->data[14]) + (task->data[7] << 3);
switch (gUnknown_0202F7D4->field_0) {
@@ -1559,8 +1568,6 @@ bool8 sub_807992C(struct Task *task) {
return TRUE;
}
-u16 sub_8079B10(u8 sprite);
-
void sub_8079A64(u8 sprite) {
int var = 0x40 - sub_8079B10(sprite) * 2;
u16 matrix = gSprites[sprite].oam.matrixNum;
@@ -1571,41 +1578,41 @@ void sub_8079A64(u8 sprite) {
gSprites[sprite].pos2.y = (var - var2) / 2;
}
-void sub_8079AB8(u8 a1, u8 a2) {
- int var = 0x40 - sub_8079B10(a2) * 2;
- u16 matrix = gSprites[a1].oam.matrixNum;
+void sub_8079AB8(u8 sprite, u8 sprite2) {
+ int var = 0x40 - sub_8079B10(sprite2) * 2;
+ u16 matrix = gSprites[sprite].oam.matrixNum;
int var2 = (var << 8) / gOamMatrices[matrix].d;
if (var2 > 0x80) {
var2 = 0x80;
}
- gSprites[a1].pos2.y = (var - var2) / 2;
+ gSprites[sprite].pos2.y = (var - var2) / 2;
}
u16 sub_8079B10(u8 sprite) {
- struct Struct_unk_2017800 *unk;
- u8 r5 = gSprites[sprite].data0;
+ struct TransformStatus *transform;
+ u8 slot = gSprites[sprite].data0;
u16 species;
u16 i;
- for (i = 0; i < sizeof(gUnknown_02024BE0); i++) {
- if (gUnknown_02024BE0[i] == sprite) {
+ for (i = 0; i < (sizeof(gBattleMonSprites) / sizeof(u8)); i++) {
+ if (gBattleMonSprites[i] == sprite) {
if (sub_8076BE0()) {
species = unk_2019348.field_0;
return gMonBackPicCoords[species].y_offset;
} else {
if (!battle_side_get_owner(i)) {
- unk = &unk_2017800[r5];
- if (!unk->field_2) {
- species = GetMonData(&gPlayerParty[gUnknown_02024A6A[i]], MON_DATA_SPECIES);
+ transform = &gTransformStatuses[slot];
+ if (!transform->species) {
+ species = GetMonData(&gPlayerParty[gBattleMonPartyPositions[i]], MON_DATA_SPECIES);
} else {
- species = unk->field_2;
+ species = transform->species;
}
return gMonBackPicCoords[species].y_offset;
} else {
- unk = &unk_2017800[r5];
- if (!unk->field_2) {
- species = GetMonData(&gEnemyParty[gUnknown_02024A6A[i]], MON_DATA_SPECIES);
+ transform = &gTransformStatuses[slot];
+ if (!transform->species) {
+ species = GetMonData(&gEnemyParty[gBattleMonPartyPositions[i]], MON_DATA_SPECIES);
} else {
- species = unk->field_2;
+ species = transform->species;
}
return gMonFrontPicCoords[species].y_offset;
}
@@ -1658,8 +1665,6 @@ u8 sub_8079C74(struct Task *task) {
return task->data[8];
}
-extern u8 gUnknown_0202F7BE;
-
void sub_8079CEC(u8 task) {
u16 v1;
if (gUnknown_0202F7BE <= 30) {
@@ -1675,44 +1680,42 @@ void sub_8079CEC(u8 task) {
move_anim_task_del(task);
}
-void unref_sub_8079D20(u8 a1) {
+void unref_sub_8079D20(u8 priority) {
if (b_side_obj__get_some_boolean(gUnknown_0202F7C9)) {
- gSprites[gUnknown_02024BE0[gUnknown_0202F7C9]].oam.priority = a1;
+ gSprites[gBattleMonSprites[gUnknown_0202F7C9]].oam.priority = priority;
}
if (b_side_obj__get_some_boolean(gUnknown_0202F7C8)) {
- gSprites[gUnknown_02024BE0[gUnknown_0202F7C8]].oam.priority = a1;
+ gSprites[gBattleMonSprites[gUnknown_0202F7C8]].oam.priority = priority;
}
if (b_side_obj__get_some_boolean(gUnknown_0202F7C9 ^ 2)) {
- gSprites[gUnknown_02024BE0[gUnknown_0202F7C9 ^ 2]].oam.priority = a1;
+ gSprites[gBattleMonSprites[gUnknown_0202F7C9 ^ 2]].oam.priority = priority;
}
if (b_side_obj__get_some_boolean(gUnknown_0202F7C8 ^ 2)) {
- gSprites[gUnknown_02024BE0[gUnknown_0202F7C8 ^ 2]].oam.priority = a1;
+ gSprites[gBattleMonSprites[gUnknown_0202F7C8 ^ 2]].oam.priority = priority;
}
}
-u8 sub_8079E90(u8);
-
void sub_8079E24() {
int i;
for (i = 0; i < gUnknown_02024A68; i++) {
if (b_side_obj__get_some_boolean(i)) {
- gSprites[gUnknown_02024BE0[i]].subpriority = sub_8079E90(i);
- gSprites[gUnknown_02024BE0[i]].oam.priority = 2;
+ gSprites[gBattleMonSprites[i]].subpriority = sub_8079E90(i);
+ gSprites[gBattleMonSprites[i]].oam.priority = 2;
}
}
}
-u8 sub_8079E90(u8 a1) {
+u8 sub_8079E90(u8 slot) {
u8 status;
u8 ret;
if (sub_8076BE0()) {
- if (a1 == 2) {
+ if (slot == 2) {
return 30;
} else {
return 40;
}
} else {
- status = battle_get_per_side_status(a1);
+ status = battle_get_per_side_status(slot);
if (status == 0) {
ret = 30;
} else if (status == 2) {
@@ -1726,28 +1729,22 @@ u8 sub_8079E90(u8 a1) {
return ret;
}
-struct BGCnt {
- u16 field_0:2;
-};
-
-u8 sub_8079ED4(u8 a1) {
-#define BG1CNT (*(volatile struct BGCnt*)REG_ADDR_BG1CNT)
-#define BG2CNT (*(volatile struct BGCnt*)REG_ADDR_BG2CNT)
- u8 status = battle_get_per_side_status(a1);
+u8 sub_8079ED4(u8 slot) {
+ u8 status = battle_get_per_side_status(slot);
if (sub_8076BE0()) {
return 2;
}
if (status == 0 || status == 3) {
- return BG2CNT.field_0;
+ return BG2CNT.priority;
} else {
- return BG1CNT.field_0;
+ return BG1CNT.priority;
}
}
-u8 battle_get_per_side_status_permutated(u8 a1) {
+u8 battle_get_per_side_status_permutated(u8 slot) {
u8 status;
if (!sub_8076BE0()) {
- status = battle_get_per_side_status(a1);
+ status = battle_get_per_side_status(slot);
if (status == 0 || status == 3) {
return 2;
} else {
@@ -1757,17 +1754,7 @@ u8 battle_get_per_side_status_permutated(u8 a1) {
return 1;
}
-extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7C18;
-
-extern struct SpriteSheet gMonFrontPicTable[];
-extern struct SpriteSheet gMonBackPicTable[];
-
-extern void *species_and_otid_get_pal(u32, u32, u32);
-
-#include "decompress.h"
-#include "palette.h"
-
-u8 sub_8079F44(u16 a1, u8 a2, u8 a3, s16 a4, s16 a5, u8 a6, u32 a7, u32 a8) {
+u8 sub_8079F44(u16 species, u8 isBackpic, u8 a3, s16 a4, s16 a5, u8 a6, u32 a7, u32 a8) {
void *src;
void *dest;
int size;
@@ -1775,42 +1762,42 @@ u8 sub_8079F44(u16 a1, u8 a2, u8 a3, s16 a4, s16 a5, u8 a6, u32 a7, u32 a8) {
u8 sprite;
u16 sheet = LoadSpriteSheet(&gUnknown_0837F5E0[a3]);
u16 palette = AllocSpritePalette(gSpriteTemplate_837F5B0[a3].paletteTag);
- if (!a2) {
- LoadCompressedPalette(species_and_otid_get_pal(a1, a8, a7), (palette << 4) + 0x100, 0x20);
+ if (!isBackpic) {
+ LoadCompressedPalette(species_and_otid_get_pal(species, a8, a7), (palette * 0x10) + 0x100, 0x20);
LoadSpecialPokePic(
- &gMonFrontPicTable[a1],
- gMonFrontPicCoords[a1].coords,
- gMonFrontPicCoords[a1].y_offset,
+ &gMonFrontPicTable[species],
+ gMonFrontPicCoords[species].coords,
+ gMonFrontPicCoords[species].y_offset,
0x2000000,
(void *)0x2000000,
- a1,
+ species,
a7,
1
);
} else {
LoadCompressedPalette(
- species_and_otid_get_pal(a1, a8, a7), (palette << 4) + 0x100, 0x20);
+ species_and_otid_get_pal(species, a8, a7), (palette * 0x10) + 0x100, 0x20);
LoadSpecialPokePic(
- &gMonBackPicTable[a1],
- gMonBackPicCoords[a1].coords,
- gMonBackPicCoords[a1].y_offset,
+ &gMonBackPicTable[species],
+ gMonBackPicCoords[species].coords,
+ gMonBackPicCoords[species].y_offset,
0x2000000,
(void *)0x2000000,
- a1,
+ species,
a7,
0
);
}
src = (void *)0x2000000;
- dest = (void *)(0x6010000 + (sheet << 5));
+ dest = (void *)(0x6010000 + (sheet * 0x20));
size = 0x800;
DmaCopy32(3, src, dest, size);
- if (!a2) {
- sprite = CreateSprite(&gSpriteTemplate_837F5B0[a3], a4, a5 + gMonFrontPicCoords[a1].y_offset, a6);
+ if (!isBackpic) {
+ sprite = CreateSprite(&gSpriteTemplate_837F5B0[a3], a4, a5 + gMonFrontPicCoords[species].y_offset, a6);
} else {
- sprite = CreateSprite(&gSpriteTemplate_837F5B0[a3], a4, a5 + gMonBackPicCoords[a1].y_offset, a6);
+ sprite = CreateSprite(&gSpriteTemplate_837F5B0[a3], a4, a5 + gMonBackPicCoords[species].y_offset, a6);
}
if (sub_8076BE0()) {
gSprites[sprite].affineAnims = &gSpriteAffineAnimTable_81E7C18;
@@ -1823,14 +1810,14 @@ void sub_807A0F4(struct Sprite *sprite) {
DestroySpriteAndFreeResources(sprite);
}
-int sub_807A100(u8 a1, u8 a2) {
+int sub_807A100(u8 slot, u8 a2) {
u16 species;
u32 personality;
u16 letter;
u16 var;
int ret;
const struct MonCoords *coords;
- struct Struct_unk_2017800 *unk;
+ struct TransformStatus *transform;
if (sub_8076BE0()) {
if (unk_2019348.field_4 & 1) {
species = unk_2019348.field_2;
@@ -1840,11 +1827,7 @@ int sub_807A100(u8 a1, u8 a2) {
personality = unk_2019348.field_8;
}
if (species == SPECIES_UNOWN) {
- letter = (((personality & 0x03000000) >> 24) << 6
- | ((personality & 0x00030000) >> 16) << 4
- | ((personality & 0x00000300) >> 8) << 2
- | ((personality & 0x00000003) >> 0) << 0
- ) % 28;
+ letter = GET_UNOWN_LETTER(personality);
if (!letter) {
var = SPECIES_UNOWN;
} else {
@@ -1852,28 +1835,24 @@ int sub_807A100(u8 a1, u8 a2) {
}
coords = &gMonBackPicCoords[var];
} else if (species == SPECIES_CASTFORM) {
- coords = &gUnknownCastformCoords_0837F598[gUnknown_02024E84[a1]];
+ coords = &gCastformFrontSpriteCoords[gBattleMonForms[slot]];
} else if (species <= SPECIES_EGG) {
coords = &gMonBackPicCoords[species];
} else {
coords = &gMonBackPicCoords[0];
}
} else {
- if (!battle_side_get_owner(a1)) {
- unk = &unk_2017800[a1];
- if (!unk->field_2) {
- species = GetMonData(&gPlayerParty[gUnknown_02024A6A[a1]], MON_DATA_SPECIES);
- personality = GetMonData(&gPlayerParty[gUnknown_02024A6A[a1]], MON_DATA_PERSONALITY);
+ if (!battle_side_get_owner(slot)) {
+ transform = &gTransformStatuses[slot];
+ if (!transform->species) {
+ species = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES);
+ personality = GetMonData(&gPlayerParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY);
} else {
- species = unk->field_2;
- personality = gUnknown_02024E70[a1];
+ species = transform->species;
+ personality = gTransformPersonalities[slot];
}
if (species == SPECIES_UNOWN) {
- letter = (((personality & 0x03000000) >> 24) << 6
- | ((personality & 0x00030000) >> 16) << 4
- | ((personality & 0x00000300) >> 8) << 2
- | ((personality & 0x00000003) >> 0) << 0
- ) % 28;
+ letter = GET_UNOWN_LETTER(personality);
if (!letter) {
var = SPECIES_UNOWN;
} else {
@@ -1886,20 +1865,16 @@ int sub_807A100(u8 a1, u8 a2) {
coords = &gMonBackPicCoords[species];
}
} else {
- unk = &unk_2017800[a1];
- if (!unk->field_2) {
- species = GetMonData(&gEnemyParty[gUnknown_02024A6A[a1]], MON_DATA_SPECIES);
- personality = GetMonData(&gEnemyParty[gUnknown_02024A6A[a1]], MON_DATA_PERSONALITY);
+ transform = &gTransformStatuses[slot];
+ if (!transform->species) {
+ species = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_SPECIES);
+ personality = GetMonData(&gEnemyParty[gBattleMonPartyPositions[slot]], MON_DATA_PERSONALITY);
} else {
- species = unk->field_2;
- personality = gUnknown_02024E70[a1];
+ species = transform->species;
+ personality = gTransformPersonalities[slot];
}
if (species == SPECIES_UNOWN) {
- letter = (((personality & 0x03000000) >> 24) << 6
- | ((personality & 0x00030000) >> 16) << 4
- | ((personality & 0x00000300) >> 8) << 2
- | ((personality & 0x00000003) >> 0) << 0
- ) % 28;
+ letter = GET_UNOWN_LETTER(personality);
if (!letter) {
var = SPECIES_UNOWN;
} else {
@@ -1907,7 +1882,7 @@ int sub_807A100(u8 a1, u8 a2) {
}
coords = &gMonFrontPicCoords[var];
} else if (species == SPECIES_CASTFORM) {
- coords = &gUnknownCastformCoords_0837F598[gUnknown_02024E84[a1]];
+ coords = &gCastformFrontSpriteCoords[gBattleMonForms[slot]];
} else if (species > SPECIES_EGG) {
coords = &gMonFrontPicCoords[0];
} else {
@@ -1922,22 +1897,22 @@ int sub_807A100(u8 a1, u8 a2) {
case 1:
return (coords->coords >> 4) * 8;
case 4:
- return sub_8077ABC(a1, 2) - ((coords->coords >> 4) * 4);
+ return sub_8077ABC(slot, 2) - ((coords->coords >> 4) * 4);
case 5:
- return sub_8077ABC(a1, 2) + ((coords->coords >> 4) * 4);
+ return sub_8077ABC(slot, 2) + ((coords->coords >> 4) * 4);
case 2:
- return sub_8077ABC(a1, 3) - ((coords->coords & 0xf) * 4);
+ return sub_8077ABC(slot, 3) - ((coords->coords & 0xf) * 4);
case 3:
- return sub_8077ABC(a1, 3) + ((coords->coords & 0xf) * 4);
+ return sub_8077ABC(slot, 3) + ((coords->coords & 0xf) * 4);
case 6:
- ret = sub_8077ABC(a1, 1) + 0x1f;
+ ret = sub_8077ABC(slot, 1) + 0x1f;
return ret - coords->y_offset;
default:
return 0;
}
}
-void sub_807A3FC(u8 a1, u8 a2, s16 *a3, s16 *a4) {
+void sub_807A3FC(u8 slot, u8 a2, s16 *a3, s16 *a4) {
u8 v1, v2;
s16 v3, v4;
s16 v5, v6;
@@ -1948,11 +1923,11 @@ void sub_807A3FC(u8 a1, u8 a2, s16 *a3, s16 *a4) {
v1 = 2;
v2 = 3;
}
- v3 = sub_8077ABC(a1, v1);
- v4 = sub_8077ABC(a1, v2);
+ v3 = sub_8077ABC(slot, v1);
+ v4 = sub_8077ABC(slot, v2);
if (IsDoubleBattle() && !sub_8076BE0()) {
- v5 = sub_8077ABC(a1 ^ 2, v1);
- v6 = sub_8077ABC(a1 ^ 2, v2);
+ v5 = sub_8077ABC(slot ^ 2, v1);
+ v6 = sub_8077ABC(slot ^ 2, v2);
} else {
v5 = v3;
v6 = v4;
@@ -1961,8 +1936,6 @@ void sub_807A3FC(u8 a1, u8 a2, s16 *a3, s16 *a4) {
*a4 = (v4 + v6) / 2;
}
-extern u8 CreateInvisibleSpriteWithCallback(void (*callback)(struct Sprite *));
-
u8 sub_807A4A0(int a1, u8 sprite, int a3) {
u8 new_sprite = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
gSprites[new_sprite] = gSprites[sprite];
@@ -2021,8 +1994,6 @@ void sub_807A63C(struct Sprite *sprite) {
oamt_set_x3A_32(sprite, move_anim_8072740);
}
-void sub_807A784(u8 taskId);
-
void sub_807A69C(u8 taskId) {
u16 src;
u16 dest;
@@ -2035,8 +2006,8 @@ void sub_807A69C(u8 taskId) {
task->data[4] = AllocSpritePalette(10097);
task->data[5] = 0;
- dest = ((task->data[4] + 0x10) << 20) >> 16;
- src = (gSprites[task->data[0]].oam.paletteNum + 0x10) << 4;
+ dest = (task->data[4] + 0x10) * 0x10;
+ src = (gSprites[task->data[0]].oam.paletteNum + 0x10) * 0x10;
task->data[6] = sub_8079E90(gUnknown_0202F7C8);
if (task->data[6] == 20 || task->data[6] == 40) {
task->data[6] = 2;
@@ -2048,8 +2019,6 @@ void sub_807A69C(u8 taskId) {
task->func = sub_807A784;
}
-void sub_807A850(struct Task *task, u8 taskId);
-
void sub_807A784(u8 taskId) {
struct Task *task = &gTasks[taskId];
switch (task->data[2]) {
@@ -2078,8 +2047,6 @@ void sub_807A784(u8 taskId) {
}
}
-void sub_807A8D4(struct Sprite *sprite);
-
void sub_807A850(struct Task *task, u8 taskId) {
s16 sprite = duplicate_obj_of_side_rel2move_in_transparent_mode(0);
if (sprite >= 0) {
@@ -2101,8 +2068,6 @@ void sub_807A8D4(struct Sprite *sprite) {
}
}
-void sub_807A960(struct Sprite *sprite);
-
void sub_807A908(struct Sprite *sprite) {
sprite->pos1.x = sub_8077ABC(gUnknown_0202F7C8, 2);
sprite->pos1.y = sub_8077ABC(gUnknown_0202F7C8, 3);