summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/battle_ai.c1709
-rw-r--r--src/battle_setup.c58
-rw-r--r--src/berry.c5
-rw-r--r--src/berry_tag_screen.c3
-rw-r--r--src/calculate_base_damage.c5
-rw-r--r--src/credits.c544
-rw-r--r--src/field_player_avatar.c2
-rw-r--r--src/field_poison.c2
-rw-r--r--src/fldeff_emotion.c78
-rw-r--r--src/item_use.c2
-rw-r--r--src/lottery_corner.c12
-rw-r--r--src/mail.c16
-rw-r--r--src/new_game.c25
-rw-r--r--src/pokemon_1.c3
-rw-r--r--src/pokemon_3.c9
-rw-r--r--src/pokemon_size_record.c84
-rw-r--r--src/rom4.c93
-rw-r--r--src/rom_800D42C.c15
-rw-r--r--src/safari_zone.c2
-rw-r--r--src/save.c4
-rw-r--r--src/scrcmd.c2
-rw-r--r--src/start_menu.c4
-rw-r--r--src/trainer_card.c6
-rw-r--r--src/trainer_see.c70
-rw-r--r--src/wild_encounter.c2
25 files changed, 1552 insertions, 1203 deletions
diff --git a/src/battle_ai.c b/src/battle_ai.c
index 19ccfef99..e60bf478f 100644
--- a/src/battle_ai.c
+++ b/src/battle_ai.c
@@ -12,28 +12,28 @@
enum
{
- TARGET,
- USER
+ TARGET,
+ USER
};
+extern void move_effectiveness_something(u16, u8, u8);
+
extern u16 gBattleTypeFlags;
extern u8 gUnknown_02024A60;
-extern u8 gUnknown_02024C07;
-extern u8 gUnknown_02024C08;
+extern u16 gUnknown_02024BE6;
+extern u32 gUnknown_02024BEC;
+extern u8 gUnknown_02024C07; // something player?
+extern u8 gUnknown_02024C08; // something opponent?
extern u8 gUnknown_02024C0C;
-extern u16 gUnknown_02024DEC;
extern u8 gUnknown_02024C68;
-extern u32 gUnknown_02024BEC;
-extern u8 gUnknown_0201601C;
-extern u8 gUnknown_0201601F;
-extern u16 gUnknown_02024BE6;
-extern u8 gCritMultiplier;
+extern u16 gUnknown_02024DEC;
extern u16 gUnknown_02024C34[];
extern u32 gUnknown_02024ACC[];
extern u32 gUnknown_02024C98[];
extern u16 gUnknown_02024C7A[];
extern struct BattlePokemon gUnknown_02024A8C[];
extern u8 gUnknown_030042E0[];
+extern u8 gCritMultiplier;
extern u16 gTrainerBattleOpponent;
extern u32 gBitTable[];
extern u8 *BattleAIs[];
@@ -43,10 +43,10 @@ extern struct BattleMove gBattleMoves[];
extern struct BaseStats gBaseStats[];
extern void (*gBattleAICmdTable[])(void);
-/*
-gAIScriptPtr is a pointer to the next battle AI cmd command to read.
-when a command finishes processing, gAIScriptPtr is incremented by
-the number of bytes that the current command had reserved for arguments
+/*
+gAIScriptPtr is a pointer to the next battle AI cmd command to read.
+when a command finishes processing, gAIScriptPtr is incremented by
+the number of bytes that the current command had reserved for arguments
in order to read the next command correctly. refer to battle_ai_scripts.s for the
AI scripts.
*/
@@ -61,43 +61,12 @@ struct UnknownStruct1
/* 0x2C */ u8 unk8;
};
-struct AI_ThinkingStruct /* 0x2016800 */
-{
-/* 0x00 */ u8 unk0;
-/* 0x01 */ u8 moveConsidered;
-/* 0x02 */ u16 unk2;
-/* 0x04 */ s8 score[4]; // score?
-/* 0x08 */ u32 unk8;
-/* 0x0C */ u32 aiFlags;
-/* 0x10 */ u8 unk10;
-/* 0x11 */ u8 aiLogicId;
-/* 0x12 */ u8 filler12[6];
-/* 0x18 */ u8 unk18[4];
-};
-
struct UnknownStruct3
{
u8 filler0[0x20];
u8 unk20;
};
-struct SmallBattleStruct1
-{
- u8 unk1;
- u8 unk2;
- u8 unk3;
- u8 unk4;
-};
-
-// move to battle.h before PR.
-struct BattleStruct /* 0x2000000 */
-{
- u8 filler0[0x1601C];
- struct SmallBattleStruct1 unk;
-};
-
-extern struct BattleStruct unk_2000000;
-extern struct AI_ThinkingStruct gAIThinkingSpace;
extern struct UnknownStruct1 unk_2016A00;
extern struct UnknownStruct3 unk_2016C00;
@@ -110,10 +79,10 @@ void BattleAI_HandleItemUseBeforeAISetup(void)
{
s32 i;
u8 *data = (u8 *)&unk_2016A00;
-
+
for (i = 0; (u32)i < 48; i++)
data[i] = 0;
- if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)
&& gTrainerBattleOpponent != 0x400
&& !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER)))
{
@@ -147,7 +116,7 @@ void BattleAI_SetupAIData(void)
for(i = 0; i < 4; i++)
{
u16 rand;
-
+
if(gBitTable[i] & r7)
gAIThinkingSpace.score[i] = 0;
rand = Random();
@@ -156,11 +125,11 @@ void BattleAI_SetupAIData(void)
unk_2016C00.unk20 = 0;
gUnknown_02024C07 = gUnknown_02024A60;
-
+
if(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
gUnknown_02024C08 = Random() & 2;
-
+
if(gUnknown_02024C0C & gBitTable[gUnknown_02024C08])
gUnknown_02024C08 ^= 2;
}
@@ -184,7 +153,7 @@ u8 BattleAI_GetAIActionToUse(void)
u8 arr2[4];
u8 r5;
s32 i;
-
+
sub_810745C();
while(gAIThinkingSpace.aiFlags != 0)
{
@@ -263,68 +232,25 @@ void BattleAI_DoAIProcessing(void)
}
}
-#ifdef NONMATCHING
void sub_810745C(void)
{
s32 i;
-
+
for(i = 0; i < 8; i++)
{
- if(unk_2016A00.unk0[gUnknown_02024C08 / 2][i] == 0)
+ // this is the same as dividing it by 2, but for some reason, >> 1 is needed to match the asm.
+ if(unk_2016A00.unk0[gUnknown_02024C08 >> 1][i] == 0)
{
- //gUnknown_02024C34[gUnknown_02024C08] += 0;
- unk_2016A00.unk0[gUnknown_02024C08 / 2][i] = gUnknown_02024C34[gUnknown_02024C08];
+ unk_2016A00.unk0[gUnknown_02024C08 >> 1][i] = gUnknown_02024C34[gUnknown_02024C08];
return;
}
}
}
-#else
-__attribute__((naked))
-void sub_810745C(void)
-{
- asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- movs r2, 0\n\
- ldr r3, _08107488 @ =gUnknown_02024C08\n\
- ldr r5, _0810748C @ =0x02016a00\n\
- ldr r6, _08107490 @ =gUnknown_02024C34\n\
- adds r4, r3, 0\n\
-_08107468:\n\
- lsls r0, r2, 1\n\
- ldrb r1, [r4]\n\
- lsrs r1, 1\n\
- lsls r1, 4\n\
- adds r0, r1\n\
- adds r1, r0, r5\n\
- ldrh r0, [r1]\n\
- cmp r0, 0\n\
- bne _08107494\n\
- ldrb r0, [r3]\n\
- lsls r0, 1\n\
- adds r0, r6\n\
- ldrh r0, [r0]\n\
- strh r0, [r1]\n\
- b _0810749A\n\
- .align 2, 0\n\
-_08107488: .4byte gUnknown_02024C08\n\
-_0810748C: .4byte 0x02016a00\n\
-_08107490: .4byte gUnknown_02024C34\n\
-_08107494:\n\
- adds r2, 0x1\n\
- cmp r2, 0x7\n\
- ble _08107468\n\
-_0810749A:\n\
- pop {r4-r6}\n\
- pop {r0}\n\
- bx r0\n\
- .syntax divided");
-}
-#endif
void unref_sub_81074A0(u8 a)
{
s32 i;
-
+
for(i = 0; i < 8; i++)
unk_2016A00.unk0[a / 2][i] = 0;
}
@@ -343,358 +269,358 @@ void sub_81074F8(u8 a, u8 b)
void BattleAICmd_if_random(void)
{
- u16 random = Random();
-
- if (!(random % 256 >= gAIScriptPtr[1])) // roll a random value. is it less than the parameter of the if_random call? (96 on if_random 80 will return true)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
+ u16 random = Random();
+
+ if (!(random % 256 >= gAIScriptPtr[1])) // roll a random value. is it less than the parameter of the if_random call? (96 on if_random 80 will return true)
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ else
+ gAIScriptPtr += 6;
}
void BattleAICmd_if_not_random(void)
{
- u16 random = Random();
-
- if (!(random % 256 <= gAIScriptPtr[1])) // roll a random value. is it greater than the parameter of the if_random call? (96 on if_random 80 will return true)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
+ u16 random = Random();
+
+ if (!(random % 256 <= gAIScriptPtr[1])) // roll a random value. is it greater than the parameter of the if_random call? (96 on if_random 80 will return true)
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ else
+ gAIScriptPtr += 6;
}
void BattleAICmd_if_random_1(void) // if RNG Value equal to
{
- u16 random = Random();
-
- if (random % 256 == gAIScriptPtr[1]) // roll a random value. is it greater than the parameter of the if_random call? (96 on if_random 80 will return true)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
+ u16 random = Random();
+
+ if (random % 256 == gAIScriptPtr[1]) // roll a random value. is it greater than the parameter of the if_random call? (96 on if_random 80 will return true)
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ else
+ gAIScriptPtr += 6;
}
void BattleAICmd_if_not_random_1(void) // if RNG value not equal to
{
- u16 random = Random();
-
- if (random % 256 != gAIScriptPtr[1]) // roll a random value. is it greater than the parameter of the if_random call? (96 on if_random 80 will return true)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
+ u16 random = Random();
+
+ if (random % 256 != gAIScriptPtr[1]) // roll a random value. is it greater than the parameter of the if_random call? (96 on if_random 80 will return true)
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ else
+ gAIScriptPtr += 6;
}
void BattleAICmd_score(void)
{
- gAIThinkingSpace.score[gAIThinkingSpace.moveConsidered] += gAIScriptPtr[1]; // add the result to the array of the move consider's score.
-
- if(gAIThinkingSpace.score[gAIThinkingSpace.moveConsidered] < 0) // if the score is negative, flatten it to 0.
- gAIThinkingSpace.score[gAIThinkingSpace.moveConsidered] = 0;
+ gAIThinkingSpace.score[gAIThinkingSpace.moveConsidered] += gAIScriptPtr[1]; // add the result to the array of the move consider's score.
- gAIScriptPtr += 2; // AI return.
+ if(gAIThinkingSpace.score[gAIThinkingSpace.moveConsidered] < 0) // if the score is negative, flatten it to 0.
+ gAIThinkingSpace.score[gAIThinkingSpace.moveConsidered] = 0;
+
+ gAIScriptPtr += 2; // AI return.
}
void BattleAICmd_if_hp_less_than(void)
{
- u16 var;
-
- if (gAIScriptPtr[1] == USER)
- var = gUnknown_02024C07;
- else
- var = gUnknown_02024C08;
-
- if ((u32)(100 * gBattleMons[var].hp / gBattleMons[var].maxHP) < gAIScriptPtr[2])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
- else
- gAIScriptPtr += 7;
+ u16 var;
+
+ if (gAIScriptPtr[1] == USER)
+ var = gUnknown_02024C07;
+ else
+ var = gUnknown_02024C08;
+
+ if ((u32)(100 * gBattleMons[var].hp / gBattleMons[var].maxHP) < gAIScriptPtr[2])
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ else
+ gAIScriptPtr += 7;
}
void BattleAICmd_if_hp_more_than(void)
{
- u16 var;
-
- if (gAIScriptPtr[1] == USER)
- var = gUnknown_02024C07;
- else
- var = gUnknown_02024C08;
-
- if ((u32)(100 * gBattleMons[var].hp / gBattleMons[var].maxHP) > gAIScriptPtr[2])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
- else
- gAIScriptPtr += 7;
+ u16 var;
+
+ if (gAIScriptPtr[1] == USER)
+ var = gUnknown_02024C07;
+ else
+ var = gUnknown_02024C08;
+
+ if ((u32)(100 * gBattleMons[var].hp / gBattleMons[var].maxHP) > gAIScriptPtr[2])
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ else
+ gAIScriptPtr += 7;
}
void BattleAICmd_if_hp_equal(void)
{
- u16 var;
-
- if (gAIScriptPtr[1] == USER)
- var = gUnknown_02024C07;
- else
- var = gUnknown_02024C08;
-
- if ((u32)(100 * gBattleMons[var].hp / gBattleMons[var].maxHP) == gAIScriptPtr[2])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
- else
- gAIScriptPtr += 7;
+ u16 var;
+
+ if (gAIScriptPtr[1] == USER)
+ var = gUnknown_02024C07;
+ else
+ var = gUnknown_02024C08;
+
+ if ((u32)(100 * gBattleMons[var].hp / gBattleMons[var].maxHP) == gAIScriptPtr[2])
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ else
+ gAIScriptPtr += 7;
}
void BattleAICmd_if_hp_not_equal(void)
{
- u16 var;
-
- if (gAIScriptPtr[1] == USER)
- var = gUnknown_02024C07;
- else
- var = gUnknown_02024C08;
-
- if ((u32)(100 * gBattleMons[var].hp / gBattleMons[var].maxHP) != gAIScriptPtr[2])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
- else
- gAIScriptPtr += 7;
+ u16 var;
+
+ if (gAIScriptPtr[1] == USER)
+ var = gUnknown_02024C07;
+ else
+ var = gUnknown_02024C08;
+
+ if ((u32)(100 * gBattleMons[var].hp / gBattleMons[var].maxHP) != gAIScriptPtr[2])
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ else
+ gAIScriptPtr += 7;
}
void BattleAICmd_if_status(void)
{
- u16 var;
- u32 temp;
-
- if (gAIScriptPtr[1] == USER)
- var = gUnknown_02024C07;
- else
- var = gUnknown_02024C08;
-
- temp = AIScriptRead32(gAIScriptPtr + 2);
-
- if (gBattleMons[var].status1 & temp)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
- else
- gAIScriptPtr += 10;
+ u16 var;
+ u32 temp;
+
+ if (gAIScriptPtr[1] == USER)
+ var = gUnknown_02024C07;
+ else
+ var = gUnknown_02024C08;
+
+ temp = AIScriptRead32(gAIScriptPtr + 2);
+
+ if (gBattleMons[var].status1 & temp)
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ else
+ gAIScriptPtr += 10;
}
void BattleAICmd_if_not_status(void)
{
- u16 var;
- u32 temp;
-
- if (gAIScriptPtr[1] == USER)
- var = gUnknown_02024C07;
- else
- var = gUnknown_02024C08;
-
- temp = AIScriptRead32(gAIScriptPtr + 2);
-
- if (!(gBattleMons[var].status1 & temp))
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
- else
- gAIScriptPtr += 10;
+ u16 var;
+ u32 temp;
+
+ if (gAIScriptPtr[1] == USER)
+ var = gUnknown_02024C07;
+ else
+ var = gUnknown_02024C08;
+
+ temp = AIScriptRead32(gAIScriptPtr + 2);
+
+ if (!(gBattleMons[var].status1 & temp))
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ else
+ gAIScriptPtr += 10;
}
void BattleAICmd_if_status2(void)
{
- u8 var;
- u32 temp;
-
- if (gAIScriptPtr[1] == USER)
- var = gUnknown_02024C07;
- else
- var = gUnknown_02024C08;
-
- temp = AIScriptRead32(gAIScriptPtr + 2);
-
- if (gBattleMons[var].status2 & temp)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
- else
- gAIScriptPtr += 10;
+ u8 var;
+ u32 temp;
+
+ if (gAIScriptPtr[1] == USER)
+ var = gUnknown_02024C07;
+ else
+ var = gUnknown_02024C08;
+
+ temp = AIScriptRead32(gAIScriptPtr + 2);
+
+ if (gBattleMons[var].status2 & temp)
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ else
+ gAIScriptPtr += 10;
}
void BattleAICmd_if_not_status2(void)
{
- u8 var;
- u32 temp;
-
- if (gAIScriptPtr[1] == USER)
- var = gUnknown_02024C07;
- else
- var = gUnknown_02024C08;
-
- temp = AIScriptRead32(gAIScriptPtr + 2);
-
- if (!(gBattleMons[var].status2 & temp))
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
- else
- gAIScriptPtr += 10;
+ u8 var;
+ u32 temp;
+
+ if (gAIScriptPtr[1] == USER)
+ var = gUnknown_02024C07;
+ else
+ var = gUnknown_02024C08;
+
+ temp = AIScriptRead32(gAIScriptPtr + 2);
+
+ if (!(gBattleMons[var].status2 & temp))
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ else
+ gAIScriptPtr += 10;
}
void BattleAICmd_if_status3(void)
{
- u8 var;
- u32 temp;
-
- if (gAIScriptPtr[1] == USER)
- var = gUnknown_02024C07;
- else
- var = gUnknown_02024C08;
-
- temp = AIScriptRead32(gAIScriptPtr + 2);
-
- if ( gUnknown_02024C98[var] & temp )
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
- else
- gAIScriptPtr += 10;
+ u8 var;
+ u32 temp;
+
+ if (gAIScriptPtr[1] == USER)
+ var = gUnknown_02024C07;
+ else
+ var = gUnknown_02024C08;
+
+ temp = AIScriptRead32(gAIScriptPtr + 2);
+
+ if ( gUnknown_02024C98[var] & temp )
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ else
+ gAIScriptPtr += 10;
}
void BattleAICmd_if_not_status3(void)
{
- u8 var;
- u32 temp;
-
- if (gAIScriptPtr[1] == USER)
- var = gUnknown_02024C07;
- else
- var = gUnknown_02024C08;
-
- temp = AIScriptRead32(gAIScriptPtr + 2);
-
- if (!(gUnknown_02024C98[var] & temp))
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
- else
- gAIScriptPtr += 10;
+ u8 var;
+ u32 temp;
+
+ if (gAIScriptPtr[1] == USER)
+ var = gUnknown_02024C07;
+ else
+ var = gUnknown_02024C08;
+
+ temp = AIScriptRead32(gAIScriptPtr + 2);
+
+ if (!(gUnknown_02024C98[var] & temp))
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ else
+ gAIScriptPtr += 10;
}
void BattleAICmd_if_status4(void)
{
- u8 var;
- u32 temp;
- u32 temp2;
-
- if (gAIScriptPtr[1] == USER)
- var = gUnknown_02024C07;
- else
- var = gUnknown_02024C08;
-
- temp = battle_get_per_side_status(var) & 1;
- temp2 = AIScriptRead32(gAIScriptPtr + 2);
-
- if ( gUnknown_02024C7A[temp] & temp2 )
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
- else
- gAIScriptPtr += 10;
+ u8 var;
+ u32 temp;
+ u32 temp2;
+
+ if (gAIScriptPtr[1] == USER)
+ var = gUnknown_02024C07;
+ else
+ var = gUnknown_02024C08;
+
+ temp = battle_get_per_side_status(var) & 1;
+ temp2 = AIScriptRead32(gAIScriptPtr + 2);
+
+ if ( gUnknown_02024C7A[temp] & temp2 )
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ else
+ gAIScriptPtr += 10;
}
void BattleAICmd_if_not_status4(void)
{
- u8 var;
- u32 temp;
- u32 temp2;
-
- if (gAIScriptPtr[1] == USER)
- var = gUnknown_02024C07;
- else
- var = gUnknown_02024C08;
-
- temp = battle_get_per_side_status(var) & 1;
- temp2 = AIScriptRead32(gAIScriptPtr + 2);
-
- if (!(gUnknown_02024C7A[temp] & temp2))
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
- else
- gAIScriptPtr += 10;
+ u8 var;
+ u32 temp;
+ u32 temp2;
+
+ if (gAIScriptPtr[1] == USER)
+ var = gUnknown_02024C07;
+ else
+ var = gUnknown_02024C08;
+
+ temp = battle_get_per_side_status(var) & 1;
+ temp2 = AIScriptRead32(gAIScriptPtr + 2);
+
+ if (!(gUnknown_02024C7A[temp] & temp2))
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ else
+ gAIScriptPtr += 10;
}
void BattleAICmd_if_less_than(void)
{
- if (gAIThinkingSpace.unk8 < gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
+ if (gAIThinkingSpace.unk8 < gAIScriptPtr[1])
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ else
+ gAIScriptPtr += 6;
}
void BattleAICmd_if_more_than(void)
{
- if (gAIThinkingSpace.unk8 > gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
+ if (gAIThinkingSpace.unk8 > gAIScriptPtr[1])
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ else
+ gAIScriptPtr += 6;
}
void BattleAICmd_if_equal(void)
{
- if (gAIThinkingSpace.unk8 == gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
+ if (gAIThinkingSpace.unk8 == gAIScriptPtr[1])
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ else
+ gAIScriptPtr += 6;
}
void BattleAICmd_if_not_equal(void)
{
- if (gAIThinkingSpace.unk8 != gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
+ if (gAIThinkingSpace.unk8 != gAIScriptPtr[1])
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ else
+ gAIScriptPtr += 6;
}
void BattleAICmd_if_less_than_32(void)
{
- u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1);
+ u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1);
- if (gAIThinkingSpace.unk8 < *temp)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
- else
- gAIScriptPtr += 9;
+ if (gAIThinkingSpace.unk8 < *temp)
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
+ else
+ gAIScriptPtr += 9;
}
void BattleAICmd_if_more_than_32(void)
{
- u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1);
+ u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1);
- if (gAIThinkingSpace.unk8 > *temp)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
- else
- gAIScriptPtr += 9;
+ if (gAIThinkingSpace.unk8 > *temp)
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
+ else
+ gAIScriptPtr += 9;
}
void BattleAICmd_if_equal_32(void)
{
- u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1);
+ u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1);
- if (gAIThinkingSpace.unk8 == *temp)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
- else
- gAIScriptPtr += 9;
+ if (gAIThinkingSpace.unk8 == *temp)
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
+ else
+ gAIScriptPtr += 9;
}
void BattleAICmd_if_not_equal_32(void)
{
- u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1);
+ u8 *temp = AIScriptReadPtr(gAIScriptPtr + 1);
- if (gAIThinkingSpace.unk8 != *temp)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
- else
- gAIScriptPtr += 9;
+ if (gAIThinkingSpace.unk8 != *temp)
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
+ else
+ gAIScriptPtr += 9;
}
void BattleAICmd_if_move(void)
{
- u16 move = AIScriptRead16(gAIScriptPtr + 1);
+ u16 move = AIScriptRead16(gAIScriptPtr + 1);
- if (gAIThinkingSpace.unk2 == move)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
- else
- gAIScriptPtr += 7;
+ if (gAIThinkingSpace.unk2 == move)
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ else
+ gAIScriptPtr += 7;
}
void BattleAICmd_if_not_move(void)
{
- u16 move = AIScriptRead16(gAIScriptPtr + 1);
+ u16 move = AIScriptRead16(gAIScriptPtr + 1);
- if (gAIThinkingSpace.unk2 != move)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
- else
- gAIScriptPtr += 7;
+ if (gAIThinkingSpace.unk2 != move)
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ else
+ gAIScriptPtr += 7;
}
void BattleAICmd_if_in_bytes(void)
{
u8 *ptr = AIScriptReadPtr(gAIScriptPtr + 1);
-
+
while(*ptr != 0xFF)
{
if(gAIThinkingSpace.unk8 == *ptr)
@@ -710,7 +636,7 @@ void BattleAICmd_if_in_bytes(void)
void BattleAICmd_if_not_in_bytes(void)
{
u8 *ptr = AIScriptReadPtr(gAIScriptPtr + 1);
-
+
while(*ptr != 0xFF)
{
if(gAIThinkingSpace.unk8 == *ptr)
@@ -726,7 +652,7 @@ void BattleAICmd_if_not_in_bytes(void)
void BattleAICmd_if_in_words(void)
{
u16 *ptr = (u16 *)AIScriptReadPtr(gAIScriptPtr + 1);
-
+
while(*ptr != 0xFFFF)
{
if(gAIThinkingSpace.unk8 == *ptr)
@@ -742,7 +668,7 @@ void BattleAICmd_if_in_words(void)
void BattleAICmd_if_not_in_words(void)
{
u16 *ptr = (u16 *)AIScriptReadPtr(gAIScriptPtr + 1);
-
+
while(*ptr != 0xFFFF)
{
if(gAIThinkingSpace.unk8 == *ptr)
@@ -758,7 +684,7 @@ void BattleAICmd_if_not_in_words(void)
void BattleAICmd_if_user_can_damage(void)
{
s32 i;
-
+
for(i = 0; i < 4; i++)
{
if (gBattleMons[gUnknown_02024C07].moves[i] != 0
@@ -774,7 +700,7 @@ void BattleAICmd_if_user_can_damage(void)
void BattleAICmd_if_user_cant_damage(void)
{
s32 i;
-
+
for(i = 0; i < 4; i++)
{
if (gBattleMons[gUnknown_02024C07].moves[i] != 0
@@ -789,204 +715,204 @@ void BattleAICmd_if_user_cant_damage(void)
void BattleAICmd_unk_21(void)
{
- gAIThinkingSpace.unk8 = gUnknown_030042E0[19];
- gAIScriptPtr += 1;
+ gAIThinkingSpace.unk8 = gUnknown_030042E0[19];
+ gAIScriptPtr += 1;
}
void BattleAICmd_get_type(void)
{
- u8 typeVar = gAIScriptPtr[1];
-
- switch(typeVar)
- {
- case 1:
- gAIThinkingSpace.unk8 = gBattleMons[gUnknown_02024C07].type1;
- break;
- case 0:
- gAIThinkingSpace.unk8 = gBattleMons[gUnknown_02024C08].type1;
- break;
- case 3:
- gAIThinkingSpace.unk8 = gBattleMons[gUnknown_02024C07].type2;
- break;
- case 2:
- gAIThinkingSpace.unk8 = gBattleMons[gUnknown_02024C08].type2;
- break;
- case 4:
- gAIThinkingSpace.unk8 = gBattleMoves[gAIThinkingSpace.unk2].type;
- break;
- }
- gAIScriptPtr += 2;
+ u8 typeVar = gAIScriptPtr[1];
+
+ switch(typeVar)
+ {
+ case 1:
+ gAIThinkingSpace.unk8 = gBattleMons[gUnknown_02024C07].type1;
+ break;
+ case 0:
+ gAIThinkingSpace.unk8 = gBattleMons[gUnknown_02024C08].type1;
+ break;
+ case 3:
+ gAIThinkingSpace.unk8 = gBattleMons[gUnknown_02024C07].type2;
+ break;
+ case 2:
+ gAIThinkingSpace.unk8 = gBattleMons[gUnknown_02024C08].type2;
+ break;
+ case 4:
+ gAIThinkingSpace.unk8 = gBattleMoves[gAIThinkingSpace.unk2].type;
+ break;
+ }
+ gAIScriptPtr += 2;
}
void BattleAICmd_unk_23(void)
{
- gAIThinkingSpace.unk8 = gBattleMoves[gAIThinkingSpace.unk2].power;
- gAIScriptPtr += 1;
+ gAIThinkingSpace.unk8 = gBattleMoves[gAIThinkingSpace.unk2].power;
+ gAIScriptPtr += 1;
}
__attribute__((naked))
void BattleAICmd_unk_24(void)
{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x14\n\
- movs r3, 0\n\
- ldr r0, _08108328 @ =gUnknown_083F62BC\n\
- ldrh r1, [r0]\n\
- ldr r4, _0810832C @ =0x0000ffff\n\
- ldr r6, _08108330 @ =gBattleMoves\n\
- ldr r5, _08108334 @ =0x02016800\n\
- cmp r1, r4\n\
- beq _0810822E\n\
- ldrh r1, [r5, 0x2]\n\
- lsls r0, r1, 1\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r6\n\
- ldrb r2, [r0]\n\
- ldr r1, _08108328 @ =gUnknown_083F62BC\n\
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x14\n\
+ movs r3, 0\n\
+ ldr r0, _08108328 @ =gUnknown_083F62BC\n\
+ ldrh r1, [r0]\n\
+ ldr r4, _0810832C @ =0x0000ffff\n\
+ ldr r6, _08108330 @ =gBattleMoves\n\
+ ldr r5, _08108334 @ =0x02016800\n\
+ cmp r1, r4\n\
+ beq _0810822E\n\
+ ldrh r1, [r5, 0x2]\n\
+ lsls r0, r1, 1\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r6\n\
+ ldrb r2, [r0]\n\
+ ldr r1, _08108328 @ =gUnknown_083F62BC\n\
_0810821E:\n\
- ldrh r0, [r1]\n\
- cmp r2, r0\n\
- beq _0810822E\n\
- adds r1, 0x2\n\
- adds r3, 0x1\n\
- ldrh r0, [r1]\n\
- cmp r0, r4\n\
- bne _0810821E\n\
+ ldrh r0, [r1]\n\
+ cmp r2, r0\n\
+ beq _0810822E\n\
+ adds r1, 0x2\n\
+ adds r3, 0x1\n\
+ ldrh r0, [r1]\n\
+ cmp r0, r4\n\
+ bne _0810821E\n\
_0810822E:\n\
- ldrh r0, [r5, 0x2]\n\
- lsls r1, r0, 1\n\
- adds r1, r0\n\
- lsls r1, 2\n\
- adds r1, r6\n\
- ldrb r0, [r1, 0x1]\n\
- cmp r0, 0x1\n\
- bhi _08108240\n\
- b _081083B2\n\
+ ldrh r0, [r5, 0x2]\n\
+ lsls r1, r0, 1\n\
+ adds r1, r0\n\
+ lsls r1, 2\n\
+ adds r1, r6\n\
+ ldrb r0, [r1, 0x1]\n\
+ cmp r0, 0x1\n\
+ bhi _08108240\n\
+ b _081083B2\n\
_08108240:\n\
- lsls r0, r3, 1\n\
- ldr r1, _08108328 @ =gUnknown_083F62BC\n\
- adds r0, r1\n\
- ldrh r3, [r0]\n\
- ldr r0, _0810832C @ =0x0000ffff\n\
- cmp r3, r0\n\
- beq _08108250\n\
- b _081083B2\n\
+ lsls r0, r3, 1\n\
+ ldr r1, _08108328 @ =gUnknown_083F62BC\n\
+ adds r0, r1\n\
+ ldrh r3, [r0]\n\
+ ldr r0, _0810832C @ =0x0000ffff\n\
+ cmp r3, r0\n\
+ beq _08108250\n\
+ b _081083B2\n\
_08108250:\n\
- ldr r0, _08108338 @ =gUnknown_02024DEC\n\
- movs r1, 0\n\
- strh r1, [r0]\n\
- ldr r2, _0810833C @ =0xfffff81c\n\
- adds r0, r5, r2\n\
- strb r1, [r0]\n\
- adds r2, 0x3\n\
- adds r0, r5, r2\n\
- movs r2, 0x1\n\
- strb r2, [r0]\n\
- ldr r0, _08108340 @ =gUnknown_02024C68\n\
- strb r1, [r0]\n\
- ldr r0, _08108344 @ =gCritMultiplier\n\
- strb r2, [r0]\n\
- movs r6, 0\n\
- mov r9, r3\n\
- ldr r0, _08108328 @ =gUnknown_083F62BC\n\
- ldrh r0, [r0]\n\
- str r0, [sp, 0x10]\n\
+ ldr r0, _08108338 @ =gUnknown_02024DEC\n\
+ movs r1, 0\n\
+ strh r1, [r0]\n\
+ ldr r2, _0810833C @ =0xfffff81c\n\
+ adds r0, r5, r2\n\
+ strb r1, [r0]\n\
+ adds r2, 0x3\n\
+ adds r0, r5, r2\n\
+ movs r2, 0x1\n\
+ strb r2, [r0]\n\
+ ldr r0, _08108340 @ =gUnknown_02024C68\n\
+ strb r1, [r0]\n\
+ ldr r0, _08108344 @ =gCritMultiplier\n\
+ strb r2, [r0]\n\
+ movs r6, 0\n\
+ mov r9, r3\n\
+ ldr r0, _08108328 @ =gUnknown_083F62BC\n\
+ ldrh r0, [r0]\n\
+ str r0, [sp, 0x10]\n\
_08108276:\n\
- movs r3, 0\n\
- ldr r5, _08108348 @ =gBattleMons\n\
- lsls r4, r6, 1\n\
- ldr r7, _0810834C @ =gUnknown_02024C07\n\
- lsls r1, r6, 2\n\
- mov r8, r1\n\
- adds r2, r6, 0x1\n\
- mov r10, r2\n\
- ldr r0, [sp, 0x10]\n\
- cmp r0, r9\n\
- beq _081082BA\n\
- ldr r2, _08108330 @ =gBattleMoves\n\
- ldrb r1, [r7]\n\
- movs r0, 0x58\n\
- muls r0, r1\n\
- adds r0, r4, r0\n\
- adds r1, r5, 0\n\
- adds r1, 0xC\n\
- adds r0, r1\n\
- ldrh r1, [r0]\n\
- lsls r0, r1, 1\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r2\n\
- ldrb r2, [r0]\n\
- ldr r1, _08108328 @ =gUnknown_083F62BC\n\
+ movs r3, 0\n\
+ ldr r5, _08108348 @ =gBattleMons\n\
+ lsls r4, r6, 1\n\
+ ldr r7, _0810834C @ =gUnknown_02024C07\n\
+ lsls r1, r6, 2\n\
+ mov r8, r1\n\
+ adds r2, r6, 0x1\n\
+ mov r10, r2\n\
+ ldr r0, [sp, 0x10]\n\
+ cmp r0, r9\n\
+ beq _081082BA\n\
+ ldr r2, _08108330 @ =gBattleMoves\n\
+ ldrb r1, [r7]\n\
+ movs r0, 0x58\n\
+ muls r0, r1\n\
+ adds r0, r4, r0\n\
+ adds r1, r5, 0\n\
+ adds r1, 0xC\n\
+ adds r0, r1\n\
+ ldrh r1, [r0]\n\
+ lsls r0, r1, 1\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r2\n\
+ ldrb r2, [r0]\n\
+ ldr r1, _08108328 @ =gUnknown_083F62BC\n\
_081082AA:\n\
- ldrh r0, [r1]\n\
- cmp r2, r0\n\
- beq _081082BA\n\
- adds r1, 0x2\n\
- adds r3, 0x1\n\
- ldrh r0, [r1]\n\
- cmp r0, r9\n\
- bne _081082AA\n\
+ ldrh r0, [r1]\n\
+ cmp r2, r0\n\
+ beq _081082BA\n\
+ adds r1, 0x2\n\
+ adds r3, 0x1\n\
+ ldrh r0, [r1]\n\
+ cmp r0, r9\n\
+ bne _081082AA\n\
_081082BA:\n\
- ldrb r1, [r7]\n\
- movs r0, 0x58\n\
- muls r0, r1\n\
- adds r0, r4, r0\n\
- adds r1, r5, 0\n\
- adds r1, 0xC\n\
- adds r1, r0, r1\n\
- ldrh r0, [r1]\n\
- cmp r0, 0\n\
- beq _0810835C\n\
- lsls r0, r3, 1\n\
- ldr r2, _08108328 @ =gUnknown_083F62BC\n\
- adds r0, r2\n\
- ldrh r0, [r0]\n\
- cmp r0, r9\n\
- bne _0810835C\n\
- ldr r0, _08108330 @ =gBattleMoves\n\
- ldrh r2, [r1]\n\
- lsls r1, r2, 1\n\
- adds r1, r2\n\
- lsls r1, 2\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x1]\n\
- cmp r0, 0x1\n\
- bls _0810835C\n\
- ldr r5, _08108350 @ =gUnknown_02024BE6\n\
- strh r2, [r5]\n\
- ldrb r0, [r7]\n\
- ldr r4, _08108354 @ =gUnknown_02024C08\n\
- ldrb r1, [r4]\n\
- bl sub_801CAF8\n\
- ldrh r0, [r5]\n\
- ldrb r1, [r7]\n\
- ldrb r2, [r4]\n\
- bl move_effectiveness_something\n\
- mov r4, sp\n\
- add r4, r8\n\
- ldr r2, _08108358 @ =gUnknown_02024BEC\n\
- ldr r0, _08108334 @ =0x02016800\n\
- adds r0, 0x18\n\
- adds r0, r6, r0\n\
- ldrb r1, [r0]\n\
- ldr r0, [r2]\n\
- muls r0, r1\n\
- movs r1, 0x64\n\
- bl __divsi3\n\
- str r0, [r4]\n\
- cmp r0, 0\n\
- bne _08108364\n\
- movs r0, 0x1\n\
- str r0, [r4]\n\
- b _08108364\n\
- .align 2, 0\n\
+ ldrb r1, [r7]\n\
+ movs r0, 0x58\n\
+ muls r0, r1\n\
+ adds r0, r4, r0\n\
+ adds r1, r5, 0\n\
+ adds r1, 0xC\n\
+ adds r1, r0, r1\n\
+ ldrh r0, [r1]\n\
+ cmp r0, 0\n\
+ beq _0810835C\n\
+ lsls r0, r3, 1\n\
+ ldr r2, _08108328 @ =gUnknown_083F62BC\n\
+ adds r0, r2\n\
+ ldrh r0, [r0]\n\
+ cmp r0, r9\n\
+ bne _0810835C\n\
+ ldr r0, _08108330 @ =gBattleMoves\n\
+ ldrh r2, [r1]\n\
+ lsls r1, r2, 1\n\
+ adds r1, r2\n\
+ lsls r1, 2\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x1]\n\
+ cmp r0, 0x1\n\
+ bls _0810835C\n\
+ ldr r5, _08108350 @ =gUnknown_02024BE6\n\
+ strh r2, [r5]\n\
+ ldrb r0, [r7]\n\
+ ldr r4, _08108354 @ =gUnknown_02024C08\n\
+ ldrb r1, [r4]\n\
+ bl sub_801CAF8\n\
+ ldrh r0, [r5]\n\
+ ldrb r1, [r7]\n\
+ ldrb r2, [r4]\n\
+ bl move_effectiveness_something\n\
+ mov r4, sp\n\
+ add r4, r8\n\
+ ldr r2, _08108358 @ =gUnknown_02024BEC\n\
+ ldr r0, _08108334 @ =0x02016800\n\
+ adds r0, 0x18\n\
+ adds r0, r6, r0\n\
+ ldrb r1, [r0]\n\
+ ldr r0, [r2]\n\
+ muls r0, r1\n\
+ movs r1, 0x64\n\
+ bl __divsi3\n\
+ str r0, [r4]\n\
+ cmp r0, 0\n\
+ bne _08108364\n\
+ movs r0, 0x1\n\
+ str r0, [r4]\n\
+ b _08108364\n\
+ .align 2, 0\n\
_08108328: .4byte gUnknown_083F62BC\n\
_0810832C: .4byte 0x0000ffff\n\
_08108330: .4byte gBattleMoves\n\
@@ -1001,113 +927,113 @@ _08108350: .4byte gUnknown_02024BE6\n\
_08108354: .4byte gUnknown_02024C08\n\
_08108358: .4byte gUnknown_02024BEC\n\
_0810835C:\n\
- mov r1, sp\n\
- add r1, r8\n\
- movs r0, 0\n\
- str r0, [r1]\n\
+ mov r1, sp\n\
+ add r1, r8\n\
+ movs r0, 0\n\
+ str r0, [r1]\n\
_08108364:\n\
- mov r6, r10\n\
- cmp r6, 0x3\n\
- ble _08108276\n\
- movs r6, 0\n\
- ldr r1, _081083A4 @ =0x02016800\n\
- ldrb r0, [r1, 0x1]\n\
- lsls r0, 2\n\
- add r0, sp\n\
- ldr r2, [sp]\n\
- ldr r0, [r0]\n\
- adds r5, r1, 0\n\
- ldr r4, _081083A8 @ =gAIScriptPtr\n\
- cmp r2, r0\n\
- bgt _0810839A\n\
- adds r3, r5, 0\n\
- mov r2, sp\n\
+ mov r6, r10\n\
+ cmp r6, 0x3\n\
+ ble _08108276\n\
+ movs r6, 0\n\
+ ldr r1, _081083A4 @ =0x02016800\n\
+ ldrb r0, [r1, 0x1]\n\
+ lsls r0, 2\n\
+ add r0, sp\n\
+ ldr r2, [sp]\n\
+ ldr r0, [r0]\n\
+ adds r5, r1, 0\n\
+ ldr r4, _081083A8 @ =gAIScriptPtr\n\
+ cmp r2, r0\n\
+ bgt _0810839A\n\
+ adds r3, r5, 0\n\
+ mov r2, sp\n\
_08108384:\n\
- adds r2, 0x4\n\
- adds r6, 0x1\n\
- cmp r6, 0x3\n\
- bgt _0810839A\n\
- ldrb r0, [r3, 0x1]\n\
- lsls r0, 2\n\
- add r0, sp\n\
- ldr r1, [r2]\n\
- ldr r0, [r0]\n\
- cmp r1, r0\n\
- ble _08108384\n\
+ adds r2, 0x4\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x3\n\
+ bgt _0810839A\n\
+ ldrb r0, [r3, 0x1]\n\
+ lsls r0, 2\n\
+ add r0, sp\n\
+ ldr r1, [r2]\n\
+ ldr r0, [r0]\n\
+ cmp r1, r0\n\
+ ble _08108384\n\
_0810839A:\n\
- cmp r6, 0x4\n\
- bne _081083AC\n\
- movs r0, 0x2\n\
- str r0, [r5, 0x8]\n\
- b _081083B8\n\
- .align 2, 0\n\
+ cmp r6, 0x4\n\
+ bne _081083AC\n\
+ movs r0, 0x2\n\
+ str r0, [r5, 0x8]\n\
+ b _081083B8\n\
+ .align 2, 0\n\
_081083A4: .4byte 0x02016800\n\
_081083A8: .4byte gAIScriptPtr\n\
_081083AC:\n\
- movs r0, 0x1\n\
- str r0, [r5, 0x8]\n\
- b _081083B8\n\
+ movs r0, 0x1\n\
+ str r0, [r5, 0x8]\n\
+ b _081083B8\n\
_081083B2:\n\
- movs r0, 0\n\
- str r0, [r5, 0x8]\n\
- ldr r4, _081083D0 @ =gAIScriptPtr\n\
+ movs r0, 0\n\
+ str r0, [r5, 0x8]\n\
+ ldr r4, _081083D0 @ =gAIScriptPtr\n\
_081083B8:\n\
- ldr r0, [r4]\n\
- adds r0, 0x1\n\
- str r0, [r4]\n\
- add sp, 0x14\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
+ ldr r0, [r4]\n\
+ adds r0, 0x1\n\
+ str r0, [r4]\n\
+ add sp, 0x14\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
_081083D0: .4byte gAIScriptPtr\n\
- .syntax divided\n");
+ .syntax divided\n");
}
void BattleAICmd_get_move(void)
{
- if (gAIScriptPtr[1] == USER)
- gAIThinkingSpace.unk8 = gUnknown_02024C34[gUnknown_02024C07];
- else
- gAIThinkingSpace.unk8 = gUnknown_02024C34[gUnknown_02024C08];
+ if (gAIScriptPtr[1] == USER)
+ gAIThinkingSpace.unk8 = gUnknown_02024C34[gUnknown_02024C07];
+ else
+ gAIThinkingSpace.unk8 = gUnknown_02024C34[gUnknown_02024C08];
- gAIScriptPtr += 2;
+ gAIScriptPtr += 2;
}
void BattleAICmd_if_type(void)
{
- if ( gAIScriptPtr[1] == gAIThinkingSpace.unk8 )
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
+ if ( gAIScriptPtr[1] == gAIThinkingSpace.unk8 )
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ else
+ gAIScriptPtr += 6;
}
void BattleAICmd_unk_27(void) // if_not_type
{
- if ( gAIScriptPtr[1] != gAIThinkingSpace.unk8 )
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
+ if ( gAIScriptPtr[1] != gAIThinkingSpace.unk8 )
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ else
+ gAIScriptPtr += 6;
}
void BattleAICmd_if_would_go_first(void)
{
- if ( b_first_side(gUnknown_02024C07, gUnknown_02024C08, 1) == gAIScriptPtr[1] )
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
+ if ( b_first_side(gUnknown_02024C07, gUnknown_02024C08, 1) == gAIScriptPtr[1] )
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ else
+ gAIScriptPtr += 6;
}
void BattleAICmd_if_would_not_go_first(void)
{
- if ( b_first_side(gUnknown_02024C07, gUnknown_02024C08, 1) != gAIScriptPtr[1] )
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
- else
- gAIScriptPtr += 6;
+ if ( b_first_side(gUnknown_02024C07, gUnknown_02024C08, 1) != gAIScriptPtr[1] )
+ gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ else
+ gAIScriptPtr += 6;
}
void BattleAICmd_unk_2A(void)
@@ -1119,143 +1045,143 @@ void BattleAICmd_unk_2B(void)
__attribute__((naked))
void BattleAICmd_count_alive_pokemon(void)
{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r9\n\
- mov r6, r8\n\
- push {r6,r7}\n\
- ldr r1, _08108550 @ =0x02016800\n\
- movs r0, 0\n\
- str r0, [r1, 0x8]\n\
- ldr r0, _08108554 @ =gAIScriptPtr\n\
- ldr r0, [r0]\n\
- ldrb r0, [r0, 0x1]\n\
- cmp r0, 0x1\n\
- bne _0810855C\n\
- ldr r0, _08108558 @ =gUnknown_02024C07\n\
- b _0810855E\n\
- .align 2, 0\n\
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r9\n\
+ mov r6, r8\n\
+ push {r6,r7}\n\
+ ldr r1, _08108550 @ =0x02016800\n\
+ movs r0, 0\n\
+ str r0, [r1, 0x8]\n\
+ ldr r0, _08108554 @ =gAIScriptPtr\n\
+ ldr r0, [r0]\n\
+ ldrb r0, [r0, 0x1]\n\
+ cmp r0, 0x1\n\
+ bne _0810855C\n\
+ ldr r0, _08108558 @ =gUnknown_02024C07\n\
+ b _0810855E\n\
+ .align 2, 0\n\
_08108550: .4byte 0x02016800\n\
_08108554: .4byte gAIScriptPtr\n\
_08108558: .4byte gUnknown_02024C07\n\
_0810855C:\n\
- ldr r0, _081085A8 @ =gUnknown_02024C08\n\
+ ldr r0, _081085A8 @ =gUnknown_02024C08\n\
_0810855E:\n\
- ldrb r5, [r0]\n\
- adds r0, r5, 0\n\
- bl battle_side_get_owner\n\
- lsls r0, 24\n\
- ldr r1, _081085AC @ =gEnemyParty\n\
- mov r9, r1\n\
- cmp r0, 0\n\
- bne _08108574\n\
- ldr r0, _081085B0 @ =gPlayerParty\n\
- mov r9, r0\n\
+ ldrb r5, [r0]\n\
+ adds r0, r5, 0\n\
+ bl battle_side_get_owner\n\
+ lsls r0, 24\n\
+ ldr r1, _081085AC @ =gEnemyParty\n\
+ mov r9, r1\n\
+ cmp r0, 0\n\
+ bne _08108574\n\
+ ldr r0, _081085B0 @ =gPlayerParty\n\
+ mov r9, r0\n\
_08108574:\n\
- ldr r0, _081085B4 @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _081085BC\n\
- ldr r4, _081085B8 @ =gUnknown_02024A6A\n\
- lsls r0, r5, 1\n\
- adds r0, r4\n\
- ldrb r0, [r0]\n\
- mov r8, r0\n\
- adds r0, r5, 0\n\
- bl battle_get_per_side_status\n\
- movs r1, 0x2\n\
- eors r0, r1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- bl battle_get_side_with_given_state\n\
- lsls r0, 24\n\
- lsrs r0, 23\n\
- adds r0, r4\n\
- ldrb r6, [r0]\n\
- b _081085C6\n\
- .align 2, 0\n\
+ ldr r0, _081085B4 @ =gBattleTypeFlags\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _081085BC\n\
+ ldr r4, _081085B8 @ =gUnknown_02024A6A\n\
+ lsls r0, r5, 1\n\
+ adds r0, r4\n\
+ ldrb r0, [r0]\n\
+ mov r8, r0\n\
+ adds r0, r5, 0\n\
+ bl battle_get_per_side_status\n\
+ movs r1, 0x2\n\
+ eors r0, r1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ bl battle_get_side_with_given_state\n\
+ lsls r0, 24\n\
+ lsrs r0, 23\n\
+ adds r0, r4\n\
+ ldrb r6, [r0]\n\
+ b _081085C6\n\
+ .align 2, 0\n\
_081085A8: .4byte gUnknown_02024C08\n\
_081085AC: .4byte gEnemyParty\n\
_081085B0: .4byte gPlayerParty\n\
_081085B4: .4byte gBattleTypeFlags\n\
_081085B8: .4byte gUnknown_02024A6A\n\
_081085BC:\n\
- ldr r1, _08108624 @ =gUnknown_02024A6A\n\
- lsls r0, r5, 1\n\
- adds r0, r1\n\
- ldrb r6, [r0]\n\
- mov r8, r6\n\
+ ldr r1, _08108624 @ =gUnknown_02024A6A\n\
+ lsls r0, r5, 1\n\
+ adds r0, r1\n\
+ ldrb r6, [r0]\n\
+ mov r8, r6\n\
_081085C6:\n\
- movs r5, 0\n\
- ldr r7, _08108628 @ =0x02016800\n\
+ movs r5, 0\n\
+ ldr r7, _08108628 @ =0x02016800\n\
_081085CA:\n\
- cmp r5, r8\n\
- beq _08108608\n\
- cmp r5, r6\n\
- beq _08108608\n\
- movs r0, 0x64\n\
- muls r0, r5\n\
- mov r1, r9\n\
- adds r4, r1, r0\n\
- adds r0, r4, 0\n\
- movs r1, 0x39\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _08108608\n\
- adds r0, r4, 0\n\
- movs r1, 0x41\n\
- bl GetMonData\n\
- cmp r0, 0\n\
- beq _08108608\n\
- adds r0, r4, 0\n\
- movs r1, 0x41\n\
- bl GetMonData\n\
- movs r1, 0xCE\n\
- lsls r1, 1\n\
- cmp r0, r1\n\
- beq _08108608\n\
- ldr r0, [r7, 0x8]\n\
- adds r0, 0x1\n\
- str r0, [r7, 0x8]\n\
+ cmp r5, r8\n\
+ beq _08108608\n\
+ cmp r5, r6\n\
+ beq _08108608\n\
+ movs r0, 0x64\n\
+ muls r0, r5\n\
+ mov r1, r9\n\
+ adds r4, r1, r0\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x39\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ beq _08108608\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x41\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ beq _08108608\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x41\n\
+ bl GetMonData\n\
+ movs r1, 0xCE\n\
+ lsls r1, 1\n\
+ cmp r0, r1\n\
+ beq _08108608\n\
+ ldr r0, [r7, 0x8]\n\
+ adds r0, 0x1\n\
+ str r0, [r7, 0x8]\n\
_08108608:\n\
- adds r5, 0x1\n\
- cmp r5, 0x5\n\
- ble _081085CA\n\
- ldr r1, _0810862C @ =gAIScriptPtr\n\
- ldr r0, [r1]\n\
- adds r0, 0x2\n\
- str r0, [r1]\n\
- pop {r3,r4}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
+ adds r5, 0x1\n\
+ cmp r5, 0x5\n\
+ ble _081085CA\n\
+ ldr r1, _0810862C @ =gAIScriptPtr\n\
+ ldr r0, [r1]\n\
+ adds r0, 0x2\n\
+ str r0, [r1]\n\
+ pop {r3,r4}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
_08108624: .4byte gUnknown_02024A6A\n\
_08108628: .4byte 0x02016800\n\
_0810862C: .4byte gAIScriptPtr\n\
- .syntax divided");
+ .syntax divided");
}
void BattleAICmd_unk_2D(void)
{
- gAIThinkingSpace.unk8 = gAIThinkingSpace.unk2;
- gAIScriptPtr += 1;
+ gAIThinkingSpace.unk8 = gAIThinkingSpace.unk2;
+ gAIScriptPtr += 1;
}
void BattleAICmd_unk_2E(void)
{
- gAIThinkingSpace.unk8 = gBattleMoves[gAIThinkingSpace.unk2].effect;
- gAIScriptPtr += 1;
+ gAIThinkingSpace.unk8 = gBattleMoves[gAIThinkingSpace.unk2].effect;
+ gAIScriptPtr += 1;
}
void BattleAICmd_get_ability(void)
{
u8 var;
-
+
if(gAIScriptPtr[1] == USER)
var = gUnknown_02024C07;
else
@@ -1321,270 +1247,137 @@ void BattleAICmd_get_ability(void)
}
}
-// this should probably be in battle.h after this file is fully decompiled.
-extern struct
-{
- u8 unknownStuff[0x16000];
- struct
- {
- u8 filler0[0x1C];
- u8 unk1C;
- u8 filler1D[2];
- u8 unk1F;
- u8 filler16020[0x7E0];
- } unk_2016000;
- struct AI_ThinkingStruct gAIThinkingSpace;
-} ewram; //0x02000000
-
-#ifdef NONMATCHING
void BattleAICmd_unk_30(void)
{
- s32 loopCounter;
-
- gUnknown_02024DEC = 0;
- ewram.unk_2016000.unk1C = 0;
- ewram.unk_2016000.unk1F = 1;
- gUnknown_02024C68 = 0;
- gCritMultiplier = 1;
- ewram.gAIThinkingSpace.unk8 = 0;
-
- for(loopCounter = 0; loopCounter <= 3; loopCounter++)
- {
- gUnknown_02024BEC = 40;
- gUnknown_02024BE6 = gBattleMons[gUnknown_02024C07].moves[loopCounter];
-
- if (gUnknown_02024BE6)
- {
- move_effectiveness_something(gUnknown_02024BE6, gUnknown_02024C07, gUnknown_02024C08);
-
- // reduce by 1/3.
- if (gUnknown_02024BEC == 120)
- gUnknown_02024BEC = 80;
- if(gUnknown_02024BEC == 240)
- gUnknown_02024BEC = 160;
- if(gUnknown_02024BEC == 30)
- gUnknown_02024BEC = 20;
- if(gUnknown_02024BEC == 15)
- gUnknown_02024BEC = 10;
-
- if(gUnknown_02024C68 & 8)
- gUnknown_02024BEC = 0;
-
- if (ewram.gAIThinkingSpace.unk8 < gUnknown_02024BEC)
- ewram.gAIThinkingSpace.unk8 = gUnknown_02024BEC;
- }
- }
- gAIScriptPtr += 1;
-}
-#else
-__attribute__((naked))
-void BattleAICmd_unk_30(void)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- ldr r0, _0810885C @ =gUnknown_02024DEC\n\
- movs r2, 0\n\
- strh r2, [r0]\n\
- ldr r1, _08108860 @ =0x02000000\n\
- ldr r3, _08108864 @ =0x0001601c\n\
- adds r0, r1, r3\n\
- movs r4, 0\n\
- strb r2, [r0]\n\
- adds r3, 0x3\n\
- adds r0, r1, r3\n\
- movs r3, 0x1\n\
- strb r3, [r0]\n\
- ldr r0, _08108868 @ =gUnknown_02024C68\n\
- strb r2, [r0]\n\
- ldr r0, _0810886C @ =gCritMultiplier\n\
- strb r3, [r0]\n\
- movs r0, 0xB4\n\
- lsls r0, 9\n\
- adds r1, r0\n\
- str r4, [r1, 0x8]\n\
- movs r5, 0\n\
- ldr r4, _08108870 @ =gUnknown_02024BEC\n\
- ldr r7, _08108874 @ =gUnknown_02024BE6\n\
- ldr r3, _08108878 @ =gUnknown_02024A8C\n\
- mov r8, r3\n\
- ldr r6, _0810887C @ =gUnknown_02024C07\n\
-_081087DA:\n\
- movs r0, 0x28\n\
- str r0, [r4]\n\
- lsls r1, r5, 1\n\
- ldrb r2, [r6]\n\
- movs r0, 0x58\n\
- muls r0, r2\n\
- adds r1, r0\n\
- add r1, r8\n\
- ldrh r0, [r1]\n\
- strh r0, [r7]\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- beq _08108844\n\
- ldrh r0, [r7]\n\
- ldrb r1, [r6]\n\
- ldr r2, _08108880 @ =gUnknown_02024C08\n\
- ldrb r2, [r2]\n\
- bl move_effectiveness_something\n\
- ldr r0, [r4]\n\
- cmp r0, 0x78\n\
- bne _0810880A\n\
- movs r0, 0x50\n\
- str r0, [r4]\n\
-_0810880A:\n\
- ldr r0, [r4]\n\
- cmp r0, 0xF0\n\
- bne _08108814\n\
- movs r0, 0xA0\n\
- str r0, [r4]\n\
-_08108814:\n\
- ldr r0, [r4]\n\
- cmp r0, 0x1E\n\
- bne _0810881E\n\
- movs r0, 0x14\n\
- str r0, [r4]\n\
-_0810881E:\n\
- ldr r0, [r4]\n\
- cmp r0, 0xF\n\
- bne _08108828\n\
- movs r0, 0xA\n\
- str r0, [r4]\n\
-_08108828:\n\
- ldr r0, _08108868 @ =gUnknown_02024C68\n\
- ldrb r1, [r0]\n\
- movs r0, 0x8\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08108838\n\
- movs r0, 0\n\
- str r0, [r4]\n\
-_08108838:\n\
- ldr r2, _08108884 @ =0x02016800\n\
- ldr r0, [r2, 0x8]\n\
- ldr r1, [r4]\n\
- cmp r0, r1\n\
- bcs _08108844\n\
- str r1, [r2, 0x8]\n\
-_08108844:\n\
- adds r5, 0x1\n\
- cmp r5, 0x3\n\
- ble _081087DA\n\
- ldr r1, _08108888 @ =gAIScriptPtr\n\
- ldr r0, [r1]\n\
- adds r0, 0x1\n\
- str r0, [r1]\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_0810885C: .4byte gUnknown_02024DEC\n\
-_08108860: .4byte 0x02000000\n\
-_08108864: .4byte 0x0001601c\n\
-_08108868: .4byte gUnknown_02024C68\n\
-_0810886C: .4byte gCritMultiplier\n\
-_08108870: .4byte gUnknown_02024BEC\n\
-_08108874: .4byte gUnknown_02024BE6\n\
-_08108878: .4byte gUnknown_02024A8C\n\
-_0810887C: .4byte gUnknown_02024C07\n\
-_08108880: .4byte gUnknown_02024C08\n\
-_08108884: .4byte 0x02016800\n\
-_08108888: .4byte gAIScriptPtr\n\
- .syntax divided\n");
+ s32 i;
+ struct AI_ThinkingStruct *ai;
+ struct AI_ThinkingStruct *ai2;
+
+ gUnknown_02024DEC = 0;
+ battle_2000000.unk.unk1 = 0;
+ battle_2000000.unk.unk4 = 1;
+ gUnknown_02024C68 = 0;
+ gCritMultiplier = 1;
+ ai = &battle_2000000.ai;
+ ai->unk8 = 0;
+
+ for(i = 0; i < 4; i++)
+ {
+ gUnknown_02024BEC = 40;
+ gUnknown_02024BE6 = gBattleMons[gUnknown_02024C07].moves[i];
+
+ if (gUnknown_02024BE6)
+ {
+ move_effectiveness_something(gUnknown_02024BE6, gUnknown_02024C07, gUnknown_02024C08);
+
+ // reduce by 1/3.
+ if (gUnknown_02024BEC == 120)
+ gUnknown_02024BEC = 80;
+ if(gUnknown_02024BEC == 240)
+ gUnknown_02024BEC = 160;
+ if(gUnknown_02024BEC == 30)
+ gUnknown_02024BEC = 20;
+ if(gUnknown_02024BEC == 15)
+ gUnknown_02024BEC = 10;
+
+ if(gUnknown_02024C68 & 8)
+ gUnknown_02024BEC = 0;
+
+ ai2 = &battle_2000000.ai;
+ if (ai2->unk8 < gUnknown_02024BEC)
+ ai2->unk8 = gUnknown_02024BEC;
+ }
+ }
+ gAIScriptPtr += 1;
}
-#endif
// same function as above but no for loop.
__attribute__((naked))
void BattleAICmd_if_damage_bonus(void)
{
- asm(".syntax unified\n\
- push {r4,r5,lr}\n\
- ldr r0, _08108928 @ =gUnknown_02024DEC\n\
- movs r1, 0\n\
- strh r1, [r0]\n\
- ldr r2, _0810892C @ =0x02000000\n\
- ldr r3, _08108930 @ =0x0001601c\n\
- adds r0, r2, r3\n\
- strb r1, [r0]\n\
- adds r3, 0x3\n\
- adds r0, r2, r3\n\
- movs r3, 0x1\n\
- strb r3, [r0]\n\
- ldr r5, _08108934 @ =gUnknown_02024C68\n\
- strb r1, [r5]\n\
- ldr r0, _08108938 @ =gCritMultiplier\n\
- strb r3, [r0]\n\
- ldr r4, _0810893C @ =gUnknown_02024BEC\n\
- movs r0, 0x28\n\
- str r0, [r4]\n\
- ldr r1, _08108940 @ =gUnknown_02024BE6\n\
- movs r0, 0xB4\n\
- lsls r0, 9\n\
- adds r2, r0\n\
- ldrh r0, [r2, 0x2]\n\
- strh r0, [r1]\n\
- ldrh r0, [r1]\n\
- ldr r1, _08108944 @ =gUnknown_02024C07\n\
- ldrb r1, [r1]\n\
- ldr r2, _08108948 @ =gUnknown_02024C08\n\
- ldrb r2, [r2]\n\
- bl move_effectiveness_something\n\
- ldr r0, [r4]\n\
- cmp r0, 0x78\n\
- bne _081088D6\n\
- movs r0, 0x50\n\
- str r0, [r4]\n\
+ asm(".syntax unified\n\
+ push {r4,r5,lr}\n\
+ ldr r0, _08108928 @ =gUnknown_02024DEC\n\
+ movs r1, 0\n\
+ strh r1, [r0]\n\
+ ldr r2, _0810892C @ =0x02000000\n\
+ ldr r3, _08108930 @ =0x0001601c\n\
+ adds r0, r2, r3\n\
+ strb r1, [r0]\n\
+ adds r3, 0x3\n\
+ adds r0, r2, r3\n\
+ movs r3, 0x1\n\
+ strb r3, [r0]\n\
+ ldr r5, _08108934 @ =gUnknown_02024C68\n\
+ strb r1, [r5]\n\
+ ldr r0, _08108938 @ =gCritMultiplier\n\
+ strb r3, [r0]\n\
+ ldr r4, _0810893C @ =gUnknown_02024BEC\n\
+ movs r0, 0x28\n\
+ str r0, [r4]\n\
+ ldr r1, _08108940 @ =gUnknown_02024BE6\n\
+ movs r0, 0xB4\n\
+ lsls r0, 9\n\
+ adds r2, r0\n\
+ ldrh r0, [r2, 0x2]\n\
+ strh r0, [r1]\n\
+ ldrh r0, [r1]\n\
+ ldr r1, _08108944 @ =gUnknown_02024C07\n\
+ ldrb r1, [r1]\n\
+ ldr r2, _08108948 @ =gUnknown_02024C08\n\
+ ldrb r2, [r2]\n\
+ bl move_effectiveness_something\n\
+ ldr r0, [r4]\n\
+ cmp r0, 0x78\n\
+ bne _081088D6\n\
+ movs r0, 0x50\n\
+ str r0, [r4]\n\
_081088D6:\n\
- ldr r0, [r4]\n\
- cmp r0, 0xF0\n\
- bne _081088E0\n\
- movs r0, 0xA0\n\
- str r0, [r4]\n\
+ ldr r0, [r4]\n\
+ cmp r0, 0xF0\n\
+ bne _081088E0\n\
+ movs r0, 0xA0\n\
+ str r0, [r4]\n\
_081088E0:\n\
- ldr r0, [r4]\n\
- cmp r0, 0x1E\n\
- bne _081088EA\n\
- movs r0, 0x14\n\
- str r0, [r4]\n\
+ ldr r0, [r4]\n\
+ cmp r0, 0x1E\n\
+ bne _081088EA\n\
+ movs r0, 0x14\n\
+ str r0, [r4]\n\
_081088EA:\n\
- ldr r0, [r4]\n\
- cmp r0, 0xF\n\
- bne _081088F4\n\
- movs r0, 0xA\n\
- str r0, [r4]\n\
+ ldr r0, [r4]\n\
+ cmp r0, 0xF\n\
+ bne _081088F4\n\
+ movs r0, 0xA\n\
+ str r0, [r4]\n\
_081088F4:\n\
- ldrb r1, [r5]\n\
- movs r0, 0x8\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08108902\n\
- movs r0, 0\n\
- str r0, [r4]\n\
+ ldrb r1, [r5]\n\
+ movs r0, 0x8\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08108902\n\
+ movs r0, 0\n\
+ str r0, [r4]\n\
_08108902:\n\
- ldrb r0, [r4]\n\
- ldr r3, _0810894C @ =gAIScriptPtr\n\
- ldr r2, [r3]\n\
- ldrb r1, [r2, 0x1]\n\
- cmp r0, r1\n\
- bne _08108950\n\
- ldrb r1, [r2, 0x2]\n\
- ldrb r0, [r2, 0x3]\n\
- lsls r0, 8\n\
- orrs r1, r0\n\
- ldrb r0, [r2, 0x4]\n\
- lsls r0, 16\n\
- orrs r1, r0\n\
- ldrb r0, [r2, 0x5]\n\
- lsls r0, 24\n\
- orrs r1, r0\n\
- str r1, [r3]\n\
- b _08108954\n\
- .align 2, 0\n\
+ ldrb r0, [r4]\n\
+ ldr r3, _0810894C @ =gAIScriptPtr\n\
+ ldr r2, [r3]\n\
+ ldrb r1, [r2, 0x1]\n\
+ cmp r0, r1\n\
+ bne _08108950\n\
+ ldrb r1, [r2, 0x2]\n\
+ ldrb r0, [r2, 0x3]\n\
+ lsls r0, 8\n\
+ orrs r1, r0\n\
+ ldrb r0, [r2, 0x4]\n\
+ lsls r0, 16\n\
+ orrs r1, r0\n\
+ ldrb r0, [r2, 0x5]\n\
+ lsls r0, 24\n\
+ orrs r1, r0\n\
+ str r1, [r3]\n\
+ b _08108954\n\
+ .align 2, 0\n\
_08108928: .4byte gUnknown_02024DEC\n\
_0810892C: .4byte 0x02000000\n\
_08108930: .4byte 0x0001601c\n\
@@ -1596,13 +1389,13 @@ _08108944: .4byte gUnknown_02024C07\n\
_08108948: .4byte gUnknown_02024C08\n\
_0810894C: .4byte gAIScriptPtr\n\
_08108950:\n\
- adds r0, r2, 0x6\n\
- str r0, [r3]\n\
+ adds r0, r2, 0x6\n\
+ str r0, [r3]\n\
_08108954:\n\
- pop {r4,r5}\n\
- pop {r0}\n\
- bx r0\n\
- .syntax divided\n");
+ pop {r4,r5}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .syntax divided\n");
}
void BattleAICmd_unk_32(void)
diff --git a/src/battle_setup.c b/src/battle_setup.c
index 5296f1923..1c3e8e836 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -26,6 +26,7 @@
extern u16 gScriptResult;
+// IV + LEVEL + SPECIES
struct TrainerPartyMember0
{
u16 iv;
@@ -33,6 +34,7 @@ struct TrainerPartyMember0
u16 species;
};
+// IV + LEVEL + SPECIES + MOVES
struct TrainerPartyMember1
{
u16 iv;
@@ -41,6 +43,7 @@ struct TrainerPartyMember1
u16 moves[4];
};
+// IV + LEVEL + SPECIES + ITEMS
struct TrainerPartyMember2
{
u16 iv;
@@ -49,6 +52,7 @@ struct TrainerPartyMember2
u16 heldItem;
};
+// IV + LEVEL + SPECIES + ITEMS + MOVES
struct TrainerPartyMember3
{
u16 iv;
@@ -167,8 +171,8 @@ void StartBattle_StandardWild(void)
gMain.savedCallback = HandleWildBattleEnd;
gBattleTypeFlags = 0;
task_add_01_battle_start(GetWildBattleTransition(), 0);
- sav12_xor_increment(7);
- sav12_xor_increment(8);
+ IncrementGameStat(7);
+ IncrementGameStat(8);
}
void StartBattle_Roamer(void)
@@ -179,8 +183,8 @@ void StartBattle_Roamer(void)
gMain.savedCallback = HandleWildBattleEnd;
gBattleTypeFlags = BATTLE_TYPE_ROAMER;
task_add_01_battle_start(GetWildBattleTransition(), 0);
- sav12_xor_increment(7);
- sav12_xor_increment(8);
+ IncrementGameStat(7);
+ IncrementGameStat(8);
}
void StartBattle_Safari(void)
@@ -196,8 +200,8 @@ void StartBattle_Safari(void)
void task_add_01_battle_start_with_music_and_stats(void)
{
task_add_01_battle_start(GetTrainerBattleTransition(), 0);
- sav12_xor_increment(7);
- sav12_xor_increment(9);
+ IncrementGameStat(7);
+ IncrementGameStat(9);
}
//Initiates battle where Wally catches Ralts
@@ -216,8 +220,8 @@ void StartBattle_ScriptedWild(void)
gMain.savedCallback = HandleScriptedWildBattleEnd;
gBattleTypeFlags = 0;
task_add_01_battle_start(GetWildBattleTransition(), 0);
- sav12_xor_increment(7);
- sav12_xor_increment(8);
+ IncrementGameStat(7);
+ IncrementGameStat(8);
}
void StartBattle_SouthernIsland(void)
@@ -226,8 +230,8 @@ void StartBattle_SouthernIsland(void)
gMain.savedCallback = HandleScriptedWildBattleEnd;
gBattleTypeFlags = BATTLE_TYPE_LEGENDARY;
task_add_01_battle_start(GetWildBattleTransition(), 0);
- sav12_xor_increment(7);
- sav12_xor_increment(8);
+ IncrementGameStat(7);
+ IncrementGameStat(8);
}
void StartBattle_Rayquaza(void)
@@ -236,8 +240,8 @@ void StartBattle_Rayquaza(void)
gMain.savedCallback = HandleScriptedWildBattleEnd;
gBattleTypeFlags = BATTLE_TYPE_LEGENDARY;
task_add_01_battle_start(0, BGM_BATTLE34);
- sav12_xor_increment(7);
- sav12_xor_increment(8);
+ IncrementGameStat(7);
+ IncrementGameStat(8);
}
void StartBattle_GroudonKyogre(void)
@@ -249,8 +253,8 @@ void StartBattle_GroudonKyogre(void)
task_add_01_battle_start(0xB, BGM_BATTLE34); // KYOGRE
else
task_add_01_battle_start(0x6, BGM_BATTLE34); // GROUDON
- sav12_xor_increment(7);
- sav12_xor_increment(8);
+ IncrementGameStat(7);
+ IncrementGameStat(8);
}
void StartBattle_Regi(void)
@@ -259,8 +263,8 @@ void StartBattle_Regi(void)
gMain.savedCallback = HandleScriptedWildBattleEnd;
gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI;
task_add_01_battle_start(0xA, BGM_BATTLE36);
- sav12_xor_increment(7);
- sav12_xor_increment(8);
+ IncrementGameStat(7);
+ IncrementGameStat(8);
}
void HandleWildBattleEnd(void)
@@ -270,7 +274,7 @@ void HandleWildBattleEnd(void)
if (battle_exit_is_player_defeat(gUnknown_02024D26) == TRUE)
{
- SetMainCallback2(c2_whiteout);
+ SetMainCallback2(CB2_WhiteOut);
}
else
{
@@ -285,7 +289,7 @@ void HandleScriptedWildBattleEnd(void)
ResetOamRange(0, 128);
if (battle_exit_is_player_defeat(gUnknown_02024D26) == TRUE)
- SetMainCallback2(c2_whiteout);
+ SetMainCallback2(CB2_WhiteOut);
else
SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
}
@@ -448,7 +452,7 @@ u8 GetWildBattleTransition(void)
u8 GetTrainerBattleTransition(void)
{
struct Trainer *trainer;
- u8 partyCount;
+ u8 minPartyCount;
u8 flashVar;
u8 level;
@@ -474,14 +478,14 @@ u8 GetTrainerBattleTransition(void)
return 16;
if (trainer[gTrainerBattleOpponent].doubleBattle == TRUE)
- partyCount = 2; // double battles always at least have 2 pokemon.
+ minPartyCount = 2; // double battles always at least have 2 pokemon.
else
- partyCount = 1;
+ minPartyCount = 1;
flashVar = GetBattleTransitionTypeByMap();
- level = GetSumOfEnemyPartyLevel(gTrainerBattleOpponent, partyCount);
+ level = GetSumOfEnemyPartyLevel(gTrainerBattleOpponent, minPartyCount);
- if (level < (u8)GetSumOfPartyMonLevel(partyCount)) // is wild mon level than the player's mon level?
+ if (level < (u8)GetSumOfPartyMonLevel(minPartyCount)) // is wild mon level than the player's mon level?
return gBattleTransitionTable_Trainer[flashVar][0];
else
return gBattleTransitionTable_Trainer[flashVar][1];
@@ -528,8 +532,8 @@ void CB2_StartFirstBattle(void)
SetMainCallback2(sub_800E7C4);
prev_quest_postbuffer_cursor_backup_reset();
overworld_poison_timer_set();
- sav12_xor_increment(7);
- sav12_xor_increment(8);
+ IncrementGameStat(7);
+ IncrementGameStat(8);
}
}
@@ -747,7 +751,7 @@ void sub_808260C(void)
}
else if (battle_exit_is_player_defeat(gUnknown_02024D26) == TRUE)
{
- SetMainCallback2(c2_whiteout);
+ SetMainCallback2(CB2_WhiteOut);
}
else
{
@@ -764,7 +768,7 @@ void do_choose_name_or_words_screen(void)
}
else if (battle_exit_is_player_defeat(gUnknown_02024D26) == TRUE)
{
- SetMainCallback2(c2_whiteout);
+ SetMainCallback2(CB2_WhiteOut);
}
else
{
diff --git a/src/berry.c b/src/berry.c
index 9f641262d..84db22a27 100644
--- a/src/berry.c
+++ b/src/berry.c
@@ -5,9 +5,10 @@
#include "main.h"
#include "text.h"
#include "rng.h"
+#include "items.h"
-#define FIRST_BERRY 0x85 // ITEM_CHERI_BERRY
-#define LAST_BERRY 0xaf // ITEM_ENIGMA_BERRY
+#define FIRST_BERRY ITEM_CHERI_BERRY
+#define LAST_BERRY ITEM_ENIGMA_BERRY
extern struct Berry gBerries[];
extern u8 BerryTreeScript;
diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c
index e7ef9ca76..1b432fe70 100644
--- a/src/berry_tag_screen.c
+++ b/src/berry_tag_screen.c
@@ -13,9 +13,10 @@
#include "string_util.h"
#include "task.h"
#include "text.h"
+#include "items.h"
#define OFFSET_7B (123)
-#define FIRST_BERRY (0x85) // ITEM_CHERI_BERRY
+#define FIRST_BERRY ITEM_CHERI_BERRY
struct Struct2000000 {
/*0x00*/ u8 filler_0[0x1FFFF];
diff --git a/src/calculate_base_damage.c b/src/calculate_base_damage.c
index e6fd49444..86446e588 100644
--- a/src/calculate_base_damage.c
+++ b/src/calculate_base_damage.c
@@ -11,6 +11,7 @@
#include "hold_effects.h"
#include "event_data.h"
#include "battle.h"
+#include "items.h"
extern u8 gPlayerPartyCount;
extern struct Pokemon gPlayerParty[6];
@@ -89,7 +90,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
spAttack = attacker->spAttack;
spDefense = defender->spDefense;
- if (attacker->item == 175)
+ if (attacker->item == ITEM_ENIGMA_BERRY)
{
attackerHoldEffect = gEnigmaBerries[a7].holdEffect;
attackerHoldEffectParam = gEnigmaBerries[a7].holdEffectParam;
@@ -100,7 +101,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
attackerHoldEffectParam = ItemId_GetHoldEffectParam(attacker->item);
}
- if (defender->item == 175)
+ if (defender->item == ITEM_ENIGMA_BERRY)
{
defenderHoldEffect = gEnigmaBerries[a8].holdEffect;
defenderHoldEffectParam = gEnigmaBerries[a8].holdEffectParam;
diff --git a/src/credits.c b/src/credits.c
new file mode 100644
index 000000000..196a3a112
--- /dev/null
+++ b/src/credits.c
@@ -0,0 +1,544 @@
+#include "global.h"
+#include "m4a.h"
+#include "main.h"
+#include "menu.h"
+#include "palette.h"
+#include "songs.h"
+#include "sprite.h"
+#include "task.h"
+#include "text.h"
+
+struct Unk201C000 {
+ u8 pad_00[0x88];
+ u16 var_88;
+ u16 var_8A;
+ u16 var_8C;
+};
+
+struct HallOfFame {
+ u8 sheet0[0x800];
+ u8 sheet1[0x800];
+ u8 sheet2[0x800];
+};
+
+extern struct Unk201C000 unk_201C000;
+
+extern struct HallOfFame gHallOfFame;
+extern u8 unk_201e800[0x800];
+extern u8 unk_201f000[0x800];
+extern u16 unk_201f800[];
+
+extern s16 gUnknown_02039320;
+extern u16 gUnknown_02039322;
+extern u8 gUnknown_02039324;
+extern u8 gUnknown_02039325;
+extern u16 gUnknown_0203935C;
+
+extern u8 gReservedSpritePaletteCount;
+
+// data/starter_choose
+extern u16 gBirchBagGrassPal[32];
+extern u8 gBirchBagTilemap[];
+extern u8 gBirchHelpGfx[];
+
+// data/credits
+extern u16 gUnknown_0840B7BC[32];
+extern u16 gUnknown_0840B7FC[32];
+extern struct SpriteSheet gUnknown_0840CAA0;
+extern struct SpritePalette gUnknown_0840CAB0;
+
+void sub_8143B38(u8 taskId);
+void sub_8143B68(u8 taskId);
+static void sub_8143BFC(u8 taskId);
+static void c2_080C9BFC(u8 taskId);
+static void sub_8143CC0(u8 taskId);
+static void sub_8143D04(u8 taskId);
+static void sub_8143EBC(u8 taskId);
+static void sub_8143F04(u8 taskId);
+static void sub_8143F3C(u8 taskId);
+
+void sub_8143FDC(u8 taskId);
+void sub_8144130(void);
+void sub_81441B8(u8 taskId);
+void sub_8144514(u8 taskId);
+u8 sub_8144ECC(u8 data, u8 taskId);
+void sub_81450AC(u8 taskId);
+void sub_8145128(u16, u16, u16);
+void sub_81458DC(void);
+
+static void sub_8143948(void) {
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+static void sub_814395C(void) {
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+
+ if (!(gMain.heldKeys & B_BUTTON)) {
+ return;
+ }
+
+ if (!gUnknown_02039324) {
+ return;
+ }
+
+ if (gTasks[gUnknown_02039322].func != sub_8143B68) {
+ return;
+ }
+
+ sub_8143948();
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+ gUnknown_02039325 = 1;
+}
+
+void sub_81439D0(void) {
+ u8 taskId;
+ s16 taskId3;
+ u8 taskId2;
+ u16 savedIme;
+ struct Unk201C000 * c000;
+
+ sub_8144130();
+ SetVBlankCallback(NULL);
+ ResetPaletteFade();
+ ResetTasks();
+
+ taskId = CreateTask(sub_8143B38, 0);
+
+ gTasks[taskId].data[4] = 0;
+ gTasks[taskId].data[7] = 0;
+ gTasks[taskId].data[11] = 0;
+ gTasks[taskId].data[13] = 1;
+
+ while (TRUE) {
+ if (sub_8144ECC(0, taskId)) {
+ break;
+ }
+ }
+
+ taskId3 = gTasks[taskId].data[1];
+ gTasks[taskId3].data[0] = 40;
+
+ SetUpWindowConfig(&gWindowConfig_81E7208);
+ InitMenuWindow(&gWindowConfig_81E7208);
+ LoadPalette(&gUnknown_0840B7BC, 0x80, sizeof(gUnknown_0840B7BC));
+
+ CpuCopy16(&gUnknown_0840B7FC, (void *) (VRAM + 0xBEE0), sizeof(gUnknown_0840B7FC));
+
+ REG_BG0VOFS = 0xFFFC;
+
+ taskId2 = CreateTask(sub_81441B8, 0);
+
+ gTasks[taskId2].data[1] = taskId;
+ gTasks[taskId].data[15] = taskId2;
+
+ BeginNormalPaletteFade(-1, 0, 16, 0, 0);
+
+
+ savedIme = REG_IME;
+ REG_IME = 0;
+ REG_IE |= INTR_FLAG_VBLANK;
+ REG_IME = savedIme;
+ REG_DISPSTAT |= DISPSTAT_VBLANK_INTR;
+
+
+ SetVBlankCallback(sub_8143948);
+ m4aSongNumStart(BGM_THANKFOR);
+ SetMainCallback2(sub_814395C);
+ gUnknown_02039325 = 0;
+
+ c000 = &unk_201C000;
+
+ sub_81458DC();
+
+ c000->var_88 = 0;
+ c000->var_8A = 0;
+ c000->var_8C = 0;
+
+ gUnknown_02039322 = taskId;
+}
+
+void sub_8143B38(u8 taskId) {
+ if (gPaletteFade.active) {
+ return;
+ }
+
+ gTasks[taskId].func = sub_8143B68;
+}
+
+void sub_8143B68(u8 taskId) {
+ u16 data11;
+
+ if (gTasks[taskId].data[4]) {
+ s16 secondaryTaskId;
+
+ secondaryTaskId = gTasks[taskId].data[1];
+ gTasks[secondaryTaskId].data[0] = 30;
+
+ gTasks[taskId].data[12] = 0x100;
+ gTasks[taskId].func = sub_8143EBC;
+ return;
+ }
+
+ gUnknown_02039320 = 0;
+ data11 = gTasks[taskId].data[11];
+
+ if (gTasks[taskId].data[11] == 1) {
+ gTasks[taskId].data[13] = data11;
+ gTasks[taskId].data[11] = 0;
+ BeginNormalPaletteFade(-1, 0, 0, 16, 0);
+ gTasks[taskId].func = sub_8143BFC;
+ } else if (gTasks[taskId].data[11] == 2) {
+ gTasks[taskId].data[13] = data11;
+ gTasks[taskId].data[11] = 0;
+ BeginNormalPaletteFade(-1, 0, 0, 16, 0);
+ gTasks[taskId].func = sub_8143CC0;
+ }
+}
+
+static void sub_8143BFC(u8 taskId) {
+ if (gPaletteFade.active) {
+ return;
+ }
+
+ REG_DISPCNT = 0;
+ sub_81450AC(taskId);
+ gTasks[taskId].func = c2_080C9BFC;
+}
+
+static void c2_080C9BFC(u8 taskId) {
+ u16 backup;
+
+ SetVBlankCallback(NULL);
+
+ if (!sub_8144ECC(gTasks[taskId].data[7], taskId)) {
+ return;
+ }
+
+ BeginNormalPaletteFade(-1, 0, 16, 0, 0);
+
+ backup = REG_IME;
+ REG_IME = 0;
+ REG_IE |= INTR_FLAG_VBLANK;
+ REG_IME = backup;
+ REG_DISPSTAT |= DISPSTAT_VBLANK_INTR;
+
+ SetVBlankCallback(sub_8143948);
+ gTasks[taskId].func = sub_8143B38;
+}
+
+static void sub_8143CC0(u8 taskId) {
+ if (gPaletteFade.active) {
+ return;
+ }
+
+ REG_DISPCNT = 0;
+ sub_81450AC(taskId);
+ gTasks[taskId].func = sub_8143D04;
+}
+
+#ifdef NONMATCHING
+static void sub_8143D04(u8 taskId) {
+ switch (gMain.state) {
+ default:
+ case 0: {
+ u16 i;
+
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ gReservedSpritePaletteCount = 8;
+ LZ77UnCompVram(&gBirchHelpGfx, (void *) VRAM);
+ LZ77UnCompVram(&gBirchBagTilemap, (void *) (VRAM + 0x3800));
+ LoadPalette(gBirchBagGrassPal + 2, 1, 31 * 2);
+
+ for (i = 0; i < 0x800; i++) {
+ gHallOfFame.sheet0[i] = 0x11;
+ }
+
+ for (i = 0; i < 0x800; i++) {
+ gHallOfFame.sheet1[i] = 0x22;
+ }
+
+ for (i = 0; i < 0x800; i++) {
+ gHallOfFame.sheet2[i] = 0x33;
+ }
+
+ unk_201f800[0] = 0;
+ unk_201f800[1] = 0x53FF;
+ unk_201f800[2] = 0x529F;
+ unk_201f800[3] = 0x7E94;
+
+ LoadSpriteSheet(&gUnknown_0840CAA0);
+ LoadSpritePalette(&gUnknown_0840CAB0);
+
+ gMain.state += 1;
+ break;
+ }
+
+ case 1: {
+ gTasks[taskId].data[3] = CreateTask(sub_8144514, 0);
+ gTasks[gTasks[taskId].data[3]].data[0] = 1;
+ gTasks[gTasks[taskId].data[3]].data[1] = taskId;
+ gTasks[gTasks[taskId].data[3]].data[2] = gTasks[taskId].data[7];
+
+ BeginNormalPaletteFade(-1, 0, 16, 0, 0);
+ REG_BG3HOFS = 0;
+ REG_BG3VOFS = 32;
+ REG_BG3CNT = 0x703;
+ REG_DISPCNT = 0x1940;
+
+ gMain.state = 0;
+ gUnknown_0203935C = 0;
+ gTasks[taskId].func = sub_8143B38;
+ break;
+ }
+ }
+}
+#else
+__attribute__((naked))
+static void sub_8143D04(u8 taskId) {
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r9\n\
+ mov r6, r8\n\
+ push {r6,r7}\n\
+ sub sp, 0x4\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ ldr r0, _08143DC8 @ =gMain\n\
+ ldr r1, _08143DCC @ =0x0000043c\n\
+ adds r1, r0\n\
+ mov r8, r1\n\
+ ldrb r7, [r1]\n\
+ cmp r7, 0\n\
+ beq _08143D24\n\
+ cmp r7, 0x1\n\
+ beq _08143E0C\n\
+_08143D24:\n\
+ bl ResetSpriteData\n\
+ bl FreeAllSpritePalettes\n\
+ ldr r1, _08143DD0 @ =gReservedSpritePaletteCount\n\
+ movs r0, 0x8\n\
+ strb r0, [r1]\n\
+ ldr r0, _08143DD4 @ =gBirchHelpGfx\n\
+ movs r1, 0xC0\n\
+ lsls r1, 19\n\
+ bl LZ77UnCompVram\n\
+ ldr r0, _08143DD8 @ =gBirchGrassTilemap\n\
+ ldr r1, _08143DDC @ =0x06003800\n\
+ bl LZ77UnCompVram\n\
+ ldr r0, _08143DE0 @ =0x0840281a\n\
+ movs r1, 0x1\n\
+ movs r2, 0x3E\n\
+ bl LoadPalette\n\
+ movs r1, 0\n\
+ ldr r4, _08143DE4 @ =0x0201e000\n\
+ movs r3, 0x11\n\
+ ldr r2, _08143DE8 @ =0x000007ff\n\
+_08143D56:\n\
+ adds r0, r1, r4\n\
+ strb r3, [r0]\n\
+ adds r0, r1, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r1, r0, 16\n\
+ cmp r1, r2\n\
+ bls _08143D56\n\
+ movs r1, 0\n\
+ ldr r2, _08143DEC @ =0x0201f800\n\
+ ldr r6, _08143DF0 @ =gUnknown_0840CAA0\n\
+ ldr r0, _08143DF4 @ =0xfffff000\n\
+ adds r5, r2, r0\n\
+ movs r4, 0x22\n\
+ ldr r3, _08143DE8 @ =0x000007ff\n\
+_08143D72:\n\
+ adds r0, r1, r5\n\
+ strb r4, [r0]\n\
+ adds r0, r1, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r1, r0, 16\n\
+ cmp r1, r3\n\
+ bls _08143D72\n\
+ movs r1, 0\n\
+ ldr r5, _08143DF8 @ =0x0201f000\n\
+ movs r4, 0x33\n\
+ ldr r3, _08143DE8 @ =0x000007ff\n\
+_08143D88:\n\
+ adds r0, r1, r5\n\
+ strb r4, [r0]\n\
+ adds r0, r1, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r1, r0, 16\n\
+ cmp r1, r3\n\
+ bls _08143D88\n\
+ movs r0, 0\n\
+ strh r0, [r2]\n\
+ ldr r1, _08143DFC @ =0x000053ff\n\
+ adds r0, r1, 0\n\
+ strh r0, [r2, 0x2]\n\
+ ldr r1, _08143E00 @ =0x0000529f\n\
+ adds r0, r1, 0\n\
+ strh r0, [r2, 0x4]\n\
+ ldr r1, _08143E04 @ =0x00007e94\n\
+ adds r0, r1, 0\n\
+ strh r0, [r2, 0x6]\n\
+ adds r0, r6, 0\n\
+ bl LoadSpriteSheet\n\
+ ldr r0, _08143E08 @ =gUnknown_0840CAB0\n\
+ bl LoadSpritePalette\n\
+ ldr r1, _08143DC8 @ =gMain\n\
+ ldr r2, _08143DCC @ =0x0000043c\n\
+ adds r1, r2\n\
+ ldrb r0, [r1]\n\
+ adds r0, 0x1\n\
+ strb r0, [r1]\n\
+ b _08143E90\n\
+ .align 2, 0\n\
+_08143DC8: .4byte gMain\n\
+_08143DCC: .4byte 0x0000043c\n\
+_08143DD0: .4byte gReservedSpritePaletteCount\n\
+_08143DD4: .4byte gBirchHelpGfx\n\
+_08143DD8: .4byte gBirchGrassTilemap\n\
+_08143DDC: .4byte 0x06003800\n\
+_08143DE0: .4byte gBirchBagGrassPal + 2\n\
+_08143DE4: .4byte 0x0201e000\n\
+_08143DE8: .4byte 0x000007ff\n\
+_08143DEC: .4byte 0x0201f800\n\
+_08143DF0: .4byte gUnknown_0840CAA0\n\
+_08143DF4: .4byte 0xfffff000\n\
+_08143DF8: .4byte 0x0201f000\n\
+_08143DFC: .4byte 0x000053ff\n\
+_08143E00: .4byte 0x0000529f\n\
+_08143E04: .4byte 0x00007e94\n\
+_08143E08: .4byte gUnknown_0840CAB0\n\
+_08143E0C:\n\
+ ldr r0, _08143EA0 @ =sub_8144514\n\
+ movs r1, 0\n\
+ bl CreateTask\n\
+ ldr r2, _08143EA4 @ =gTasks\n\
+ lsls r4, r6, 2\n\
+ adds r4, r6\n\
+ lsls r4, 3\n\
+ adds r4, r2\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ movs r1, 0\n\
+ mov r9, r1\n\
+ movs r5, 0\n\
+ strh r0, [r4, 0xE]\n\
+ movs r0, 0xE\n\
+ ldrsh r1, [r4, r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 3\n\
+ adds r0, r2\n\
+ strh r7, [r0, 0x8]\n\
+ movs r0, 0xE\n\
+ ldrsh r1, [r4, r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 3\n\
+ adds r0, r2\n\
+ strh r6, [r0, 0xA]\n\
+ movs r0, 0xE\n\
+ ldrsh r1, [r4, r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 3\n\
+ adds r0, r2\n\
+ ldrh r1, [r4, 0x16]\n\
+ strh r1, [r0, 0xC]\n\
+ movs r0, 0x1\n\
+ negs r0, r0\n\
+ str r5, [sp]\n\
+ movs r1, 0\n\
+ movs r2, 0x10\n\
+ movs r3, 0\n\
+ bl BeginNormalPaletteFade\n\
+ ldr r0, _08143EA8 @ =REG_BG3HOFS\n\
+ strh r5, [r0]\n\
+ ldr r1, _08143EAC @ =REG_BG3VOFS\n\
+ movs r0, 0x20\n\
+ strh r0, [r1]\n\
+ subs r1, 0x10\n\
+ ldr r2, _08143EB0 @ =0x00000703\n\
+ adds r0, r2, 0\n\
+ strh r0, [r1]\n\
+ subs r1, 0xE\n\
+ movs r2, 0xCA\n\
+ lsls r2, 5\n\
+ adds r0, r2, 0\n\
+ strh r0, [r1]\n\
+ mov r1, r9\n\
+ mov r0, r8\n\
+ strb r1, [r0]\n\
+ ldr r0, _08143EB4 @ =gUnknown_0203935C\n\
+ strh r5, [r0]\n\
+ ldr r0, _08143EB8 @ =sub_8143B38\n\
+ str r0, [r4]\n\
+_08143E90:\n\
+ add sp, 0x4\n\
+ pop {r3,r4}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
+_08143EA0: .4byte sub_8144514\n\
+_08143EA4: .4byte gTasks\n\
+_08143EA8: .4byte 0x4000000 + 0x1c\n\
+_08143EAC: .4byte 0x4000000 + 0x1e\n\
+_08143EB0: .4byte 0x00000703\n\
+_08143EB4: .4byte gUnknown_0203935C\n\
+_08143EB8: .4byte sub_8143B38\n\
+ .syntax divided\n");
+}
+#endif
+
+static void sub_8143EBC(u8 taskId) {
+ if (gTasks[taskId].data[12]) {
+ gTasks[taskId].data[12] -= 1;
+ return;
+ }
+
+ BeginNormalPaletteFade(-1, 12, 0, 16, 0);
+ gTasks[taskId].func = sub_8143F04;
+}
+
+static void sub_8143F04(u8 taskId) {
+ if (gPaletteFade.active) {
+ return;
+ }
+
+ sub_81450AC(taskId);
+ gTasks[taskId].func = sub_8143F3C;
+}
+
+static void sub_8143F3C(u8 taskId) {
+ u16 backup;
+
+ sub_8144130();
+ ResetPaletteFade();
+ sub_8145128(0, 0x3800, 0);
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ BeginNormalPaletteFade(-1, 8, 16, 0, 0);
+
+ REG_BG0CNT = 0x700;
+ backup = REG_IME;
+ REG_IME = 0;
+ REG_IE |= INTR_FLAG_VBLANK;
+ REG_IME = backup;
+ REG_DISPSTAT |= DISPSTAT_VBLANK_INTR;
+ REG_DISPCNT = 0x140;
+
+ gTasks[taskId].data[0] = 0x100;
+ gTasks[taskId].func = sub_8143FDC;
+}
diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c
index 7e4e5aed6..fdd5ae5c5 100644
--- a/src/field_player_avatar.c
+++ b/src/field_player_avatar.c
@@ -415,7 +415,7 @@ u8 CheckForFieldObjectCollision(struct MapObject *a, s16 b, s16 c, u8 d, u8 e)
return 5;
if (ShouldJumpLedge(b, c, d))
{
- sav12_xor_increment(0x2B);
+ IncrementGameStat(0x2B);
return 6;
}
if (sp0 == 4 && sub_8058F6C(b, c, d))
diff --git a/src/field_poison.c b/src/field_poison.c
index 309ec1d71..9b21ac5f3 100644
--- a/src/field_poison.c
+++ b/src/field_poison.c
@@ -100,7 +100,7 @@ void Task_WhiteOut(u8 taskId)
}
}
-void DoWhiteOut(void)
+void ExecuteWhiteOut(void)
{
CreateTask(Task_WhiteOut, 0x50);
ScriptContext1_Stop();
diff --git a/src/fldeff_emotion.c b/src/fldeff_emotion.c
deleted file mode 100644
index efe4ef683..000000000
--- a/src/fldeff_emotion.c
+++ /dev/null
@@ -1,78 +0,0 @@
-#include "global.h"
-#include "asm.h"
-#include "sprite.h"
-#include "asm_fieldmap.h"
-#include "field_effect.h"
-
-extern u32 gUnknown_0202FF84[];
-
-extern struct SpriteTemplate gSpriteTemplate_839B510;
-extern struct SpriteTemplate gSpriteTemplate_839B528;
-
-u8 FldEff_ExclamationMarkIcon1(void)
-{
- u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839B510, 0, 0, 0x53);
-
- if (spriteId != 64)
- sub_8084894(&gSprites[spriteId], 0, 0);
-
- return 0;
-}
-
-u8 FldEff_ExclamationMarkIcon2(void)
-{
- u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839B510, 0, 0, 0x52);
-
- if (spriteId != 64)
- sub_8084894(&gSprites[spriteId], 33, 1);
-
- return 0;
-}
-
-u8 FldEff_HeartIcon(void)
-{
- u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839B528, 0, 0, 0x52);
-
- if (spriteId != 64)
- sub_8084894(&gSprites[spriteId], 46, 0);
-
- return 0;
-}
-
-void sub_8084894(struct Sprite *sprite, u16 a2, u8 a3)
-{
- sprite->oam.priority = 1;
- sprite->coordOffsetEnabled = 1;
-
- sprite->data0 = gUnknown_0202FF84[0];
- sprite->data1 = gUnknown_0202FF84[1];
- sprite->data2 = gUnknown_0202FF84[2];
- sprite->data3 = -5;
- sprite->data7 = a2;
-
- StartSpriteAnim(sprite, a3);
-}
-
-void objc_exclamation_mark_probably(struct Sprite *sprite)
-{
- u8 mapObjId;
-
- if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjId)
- || sprite->animEnded)
- {
- FieldEffectStop(sprite, (u8)sprite->data7);
- }
- else
- {
- struct Sprite *mapObjSprite = &gSprites[gMapObjects[mapObjId].spriteId];
- sprite->data4 += sprite->data3;
- sprite->pos1.x = mapObjSprite->pos1.x;
- sprite->pos1.y = mapObjSprite->pos1.y - 16;
- sprite->pos2.x = mapObjSprite->pos2.x;
- sprite->pos2.y = mapObjSprite->pos2.y + sprite->data4;
- if (sprite->data4)
- sprite->data3++;
- else
- sprite->data3 = 0;
- }
-} \ No newline at end of file
diff --git a/src/item_use.c b/src/item_use.c
index af22eddae..557705460 100644
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -231,7 +231,7 @@ void ItemUseOnFieldCB_Rod(u8 taskId)
void ItemUseOutOfBattle_Itemfinder(u8 var)
{
- sav12_xor_increment(0x27);
+ IncrementGameStat(0x27);
gUnknown_03005D00 = (void *)ItemUseOnFieldCB_Itemfinder;
SetUpItemUseOnFieldCallback(var);
}
diff --git a/src/lottery_corner.c b/src/lottery_corner.c
index 4d80f86c2..c18aeef48 100644
--- a/src/lottery_corner.c
+++ b/src/lottery_corner.c
@@ -4,17 +4,25 @@
#include "string_util.h"
#include "event_data.h"
#include "species.h"
+#include "items.h"
extern u16 gScriptResult;
extern u16 gSpecialVar_0x8004;
extern struct Pokemon gPlayerParty[6];
extern struct PokemonStorage gPokemonStorage;
extern u16 gSpecialVar_0x8005;
-extern u16 gUnknown_0840CB04[];
extern u16 gSpecialVar_0x8006;
static EWRAM_DATA u16 sWinNumberDigit = 0;
static EWRAM_DATA u16 sOtIdDigit = 0;
+static const u16 sLotteryPrizes[] =
+{
+ ITEM_PP_UP,
+ ITEM_EXP_SHARE,
+ ITEM_MAX_REVIVE,
+ ITEM_MASTER_BALL,
+};
+
static u8 GetMatchingDigits(u16, u16);
void ResetLotteryCorner(void)
@@ -103,7 +111,7 @@ void PickLotteryCornerTicket(void)
if(gSpecialVar_0x8004 != 0)
{
- gSpecialVar_0x8005 = gUnknown_0840CB04[gSpecialVar_0x8004 - 1];
+ gSpecialVar_0x8005 = sLotteryPrizes[gSpecialVar_0x8004 - 1];
if(box == 14)
{
diff --git a/src/mail.c b/src/mail.c
index 14f63c52a..6cff514a1 100644
--- a/src/mail.c
+++ b/src/mail.c
@@ -8,6 +8,7 @@
#include "string_util.h"
#include "task.h"
#include "text.h"
+#include "items.h"
struct UnkMailStruct
{
@@ -56,21 +57,6 @@ struct MailGraphics {
u16 color12;
};
-enum {
- ITEM_ORANGE_MAIL = 0x79,
- ITEM_HARBOR_MAIL,
- ITEM_GLITTER_MAIL,
- ITEM_MECH_MAIL,
- ITEM_WOOD_MAIL,
- ITEM_WAVE_MAIL,
- ITEM_BEAD_MAIL,
- ITEM_SHADOW_MAIL,
- ITEM_TROPIC_MAIL,
- ITEM_DREAM_MAIL,
- ITEM_FAB_MAIL,
- ITEM_RETRO_MAIL,
-};
-
extern struct Unk2000000 unk_2000000;
extern struct MailGraphics gMailGraphicsTable[];
extern u16 gUnknown_083E562C[][2];
diff --git a/src/new_game.c b/src/new_game.c
index aced10a47..4f93e4e3c 100644
--- a/src/new_game.c
+++ b/src/new_game.c
@@ -29,19 +29,19 @@ const struct SB1_2EFC_Struct gUnknown_08216604 =
}
};
-void write_word_to_mem(u32 a1, u8 *a2)
+void write_word_to_mem(u32 var, u8 *dataPtr)
{
- a2[0] = a1;
- a2[1] = a1 >> 8;
- a2[2] = a1 >> 16;
- a2[3] = a1 >> 24;
+ dataPtr[0] = var;
+ dataPtr[1] = var >> 8;
+ dataPtr[2] = var >> 16;
+ dataPtr[3] = var >> 24;
}
-void sub_8052D10(u8 *a1, u8 *a2)
+void copy_word_to_mem(u8 *copyTo, u8 *copyFrom)
{
s32 i;
for (i = 0; i < 4; i++)
- a1[i] = a2[i];
+ copyTo[i] = copyFrom[i];
}
void set_player_trainer_id(void)
@@ -49,6 +49,7 @@ void set_player_trainer_id(void)
write_word_to_mem((Random() << 16) | Random(), gSaveBlock2.playerTrainerId);
}
+// L=A isnt set here for some reason.
void SetDefaultOptions(void)
{
gSaveBlock2.optionsTextSpeed = OPTIONS_TEXT_SPEED_MID;
@@ -59,7 +60,7 @@ void SetDefaultOptions(void)
gSaveBlock2.regionMapZoom = FALSE;
}
-void sub_8052D78(void)
+void ClearPokedexFlags(void)
{
gUnknown_03005CE8 = 0;
memset(&gSaveBlock2.pokedex.owned, 0, sizeof(gSaveBlock2.pokedex.owned));
@@ -79,7 +80,7 @@ void sub_8052DE4(void)
CpuFill32(0, &gSaveBlock2.filler_A8, sizeof(gSaveBlock2.filler_A8));
}
-void sub_8052E04(void)
+void WarpToTruck(void)
{
warp1_set(25, 40, -1, -1, -1); // inside of truck
warp_in();
@@ -114,7 +115,7 @@ void NewGameInitData(void)
gSaveBlock2.specialSaveWarp = 0;
set_player_trainer_id();
PlayTimeCounter_Reset();
- sub_8052D78();
+ ClearPokedexFlags();
InitEventData();
sub_80BD7A8();
sub_80BDAB4();
@@ -122,7 +123,7 @@ void NewGameInitData(void)
ClearBerryTrees();
gSaveBlock1.money = 3000;
sub_80AB1B0();
- sub_80530AC();
+ ResetGameStats();
sub_8052DA8();
InitLinkBattleRecords();
InitShroomishSizeRecord();
@@ -142,6 +143,6 @@ void NewGameInitData(void)
sub_80FA17C();
sub_810FA54();
ResetLotteryCorner();
- sub_8052E04();
+ WarpToTruck();
ScriptContext2_RunNewScript(gUnknown_0819FA81);
}
diff --git a/src/pokemon_1.c b/src/pokemon_1.c
index d6f475171..b8735fbc4 100644
--- a/src/pokemon_1.c
+++ b/src/pokemon_1.c
@@ -8,6 +8,7 @@
#include "main.h"
#include "rng.h"
#include "sprite.h"
+#include "items.h"
//Extracts the upper 16 bits of a 32-bit number
#define HIHALF(n) (((n) & 0xFFFF0000) >> 16)
@@ -341,7 +342,7 @@ void sub_803AF78(struct Pokemon *mon, struct UnknownPokemonStruct *dest)
dest->species = GetMonData(mon, MON_DATA_SPECIES, NULL);
heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL);
- if (heldItem == 175)
+ if (heldItem == ITEM_ENIGMA_BERRY)
heldItem = 0;
dest->heldItem = heldItem;
diff --git a/src/pokemon_3.c b/src/pokemon_3.c
index fe64a6cf4..cf172b122 100644
--- a/src/pokemon_3.c
+++ b/src/pokemon_3.c
@@ -10,6 +10,7 @@
#include "event_data.h"
#include "rtc.h"
#include "item.h"
+#include "items.h"
#define EVO_FRIENDSHIP 0x0001 // Pokémon levels up with friendship ≥ 220
#define EVO_FRIENDSHIP_DAY 0x0002 // Pokémon levels up during the day with friendship ≥ 220
@@ -100,10 +101,10 @@ u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit)
temp = gItemEffectTable[itemId - 13];
- if (!temp && itemId != 175)
+ if (!temp && itemId != ITEM_ENIGMA_BERRY)
return 0;
- if (itemId == 175)
+ if (itemId == ITEM_ENIGMA_BERRY)
{
temp = gEnigmaBerries[gUnknown_02024A60].itemEffect;
}
@@ -213,7 +214,7 @@ u8 *sub_803F378(u16 itemId)
int i;
u8 *itemEffect;
- if (itemId == 175)
+ if (itemId == ITEM_ENIGMA_BERRY)
{
if (gMain.inBattle)
{
@@ -281,7 +282,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem)
u16 upperPersonality = personality >> 16;
u8 holdEffect;
- if (heldItem == 175)
+ if (heldItem == ITEM_ENIGMA_BERRY)
holdEffect = gSaveBlock1.enigmaBerry.holdEffect;
else
holdEffect = ItemId_GetHoldEffect(heldItem);
diff --git a/src/pokemon_size_record.c b/src/pokemon_size_record.c
index 51d24b71b..6cf3411a9 100644
--- a/src/pokemon_size_record.c
+++ b/src/pokemon_size_record.c
@@ -5,7 +5,7 @@
#include "event_data.h"
extern u16 SpeciesToNationalPokedexNum(u16);
-extern u16 sub_8090D54(u16, u8);
+extern u16 GetPokedexHeightWeight(u16, u8);
struct UnknownStruct
{
@@ -14,15 +14,30 @@ struct UnknownStruct
u16 unk4;
};
-extern struct UnknownStruct gUnknown_083D180C[];
-extern u8 gOtherText_DecimalPoint[];
extern u8 gOtherText_Marco[];
extern u16 gScriptResult;
extern u8 gSpeciesNames[][11];
-extern u8 gUnknown_083D188E[];
-#define VAR_SHROOMISH_SIZE_RECORD 0x4047
-#define VAR_BARBOACH_SIZE_RECORD 0x404F
+static const struct UnknownStruct sBigMonSizeTable[] =
+{
+ { 290, 1, 0 },
+ { 300, 1, 10 },
+ { 400, 2, 110 },
+ { 500, 4, 310 },
+ { 600, 20, 710 },
+ { 700, 50, 2710 },
+ { 800, 100, 7710 },
+ { 900, 150, 17710 },
+ { 1000, 150, 32710 },
+ { 1100, 100, -17826 },
+ { 1200, 50, -7826 },
+ { 1300, 20, -2826 },
+ { 1400, 5, -826 },
+ { 1500, 2, -326 },
+ { 1600, 1, -126 },
+ { 1700, 1, -26 },
+};
+
#define CM_PER_INCH 2.54
static u32 GetMonSizeHash(struct Pokemon *pkmn)
@@ -37,17 +52,17 @@ static u32 GetMonSizeHash(struct Pokemon *pkmn)
u16 spDefIV = GetMonData(pkmn, MON_DATA_SPDEF_IV) & 0xF;
u32 hibyte = ((attackIV ^ defenseIV) * hpIV) ^ (personality & 0xFF);
u32 lobyte = ((spAtkIV ^ spDefIV) * speedIV) ^ (personality >> 8);
-
+
return (hibyte << 8) + lobyte;
}
static u8 TranslateBigMonSizeTableIndex(u16 a)
{
u8 i;
-
+
for(i = 1; i < 15; i++)
{
- if(a < gUnknown_083D180C[i].unk4)
+ if(a < sBigMonSizeTable[i].unk4)
return i - 1;
}
return i;
@@ -58,23 +73,22 @@ static u32 GetMonSize(u16 species, u16 b)
u64 unk2;
u64 unk4;
u64 unk0;
- u32 r7;
+ u32 height;
u32 var;
-
- r7 = sub_8090D54(SpeciesToNationalPokedexNum(species), 0);
+
+ height = GetPokedexHeightWeight(SpeciesToNationalPokedexNum(species), 0);
var = TranslateBigMonSizeTableIndex(b);
- unk0 = gUnknown_083D180C[var].unk0;
- unk2 = gUnknown_083D180C[var].unk2;
- unk4 = gUnknown_083D180C[var].unk4;
+ unk0 = sBigMonSizeTable[var].unk0;
+ unk2 = sBigMonSizeTable[var].unk2;
+ unk4 = sBigMonSizeTable[var].unk4;
unk0 += (b - unk4) / unk2;
- return r7 * unk0 / 10;
+ return height * unk0 / 10;
}
static void FormatMonSizeRecord(u8 *string, u32 size)
{
- u8 decimalPoint[2];
-
- memcpy(decimalPoint, gOtherText_DecimalPoint, 2);
+ u8 decimalPoint[] = _".";
+
//Convert size from centimeters to inches
size = (double)(size * 10) / (CM_PER_INCH * 10);
string = ConvertIntToDecimalStringN(string, size / 10, 0, 8);
@@ -83,29 +97,34 @@ static void FormatMonSizeRecord(u8 *string, u32 size)
}
static u8 CompareMonSize(u16 species, u16 *sizeRecord)
-{
+{
if(gScriptResult == 0xFF)
+ {
return 0;
+ }
else
{
struct Pokemon *pkmn = &gPlayerParty[gScriptResult];
-
+
// UB: Too few arguments for function 'GetMonData'
if(GetMonData(pkmn, MON_DATA_IS_EGG) == TRUE || GetMonData(pkmn, MON_DATA_SPECIES) != species)
+ {
return 1;
+ }
else
{
u32 oldSize;
u32 newSize;
u16 sizeParams;
- u16 *ptr = &sizeParams; //Why the pointer?
-
- *ptr = GetMonSizeHash(pkmn);
+
+ *(&sizeParams) = GetMonSizeHash(pkmn);
newSize = GetMonSize(species, sizeParams);
oldSize = GetMonSize(species, *sizeRecord);
FormatMonSizeRecord(gStringVar2, newSize);
if(newSize <= oldSize)
+ {
return 2;
+ }
else
{
*sizeRecord = sizeParams;
@@ -119,7 +138,7 @@ static u8 CompareMonSize(u16 species, u16 *sizeRecord)
static void GetMonSizeRecordInfo(u16 species, u16 *sizeRecord)
{
u32 size = GetMonSize(species, *sizeRecord);
-
+
FormatMonSizeRecord(gStringVar3, size);
StringCopy(gStringVar1, gSpeciesNames[species]);
if(*sizeRecord == 0x8100)
@@ -136,14 +155,14 @@ void InitShroomishSizeRecord(void)
void GetShroomishSizeRecordInfo(void)
{
u16 *sizeRecord = GetVarPointer(VAR_SHROOMISH_SIZE_RECORD);
-
+
GetMonSizeRecordInfo(SPECIES_SHROOMISH, sizeRecord);
}
void CompareShroomishSize(void)
{
u16 *sizeRecord = GetVarPointer(VAR_SHROOMISH_SIZE_RECORD);
-
+
gScriptResult = CompareMonSize(SPECIES_SHROOMISH, sizeRecord);
}
@@ -155,32 +174,31 @@ void InitBarboachSizeRecord(void)
void GetBarboachSizeRecordInfo(void)
{
u16 *sizeRecord = GetVarPointer(VAR_BARBOACH_SIZE_RECORD);
-
+
GetMonSizeRecordInfo(SPECIES_BARBOACH, sizeRecord);
}
void CompareBarboachSize(void)
{
u16 *sizeRecord = GetVarPointer(VAR_BARBOACH_SIZE_RECORD);
-
+
gScriptResult = CompareMonSize(SPECIES_BARBOACH, sizeRecord);
}
void GiveGiftRibbonToParty(u8 index, u8 ribbonId)
{
s32 i;
- u8 arr[7];
bool32 gotRibbon = FALSE;
u8 data = 1;
-
- memcpy(arr, gUnknown_083D188E, 7);
+ u8 arr[] = { 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E };
+
if(index < 11 && ribbonId < 65)
{
gSaveBlock1.giftRibbons[index] = ribbonId;
for(i = 0; i < 6; i++)
{
struct Pokemon *pkmn = &gPlayerParty[i];
-
+
if(GetMonData(pkmn, MON_DATA_SPECIES) != 0 && GetMonData(pkmn, MON_DATA_SANITY_BIT3) == 0)
{
SetMonData(pkmn, arr[index], &data);
diff --git a/src/rom4.c b/src/rom4.c
index e7c28f474..4f3e35fea 100644
--- a/src/rom4.c
+++ b/src/rom4.c
@@ -74,25 +74,25 @@ extern struct UnkTVStruct gUnknown_03004870;
extern u16 gUnknown_03004898;
extern u16 gUnknown_0300489C;
-extern u8 gUnknown_0819FC74[];
+extern u8 EventScript_LeagueWhiteOut[];
extern u8 gUnknown_0819FC9F[];
-extern u8 gUnknown_081A436F[];
-extern u8 gUnknown_081A4379[];
-extern u8 gUnknown_081A4383[];
-extern u8 gUnknown_081A439E[];
-extern u8 gUnknown_081A43B9[];
-extern u8 gUnknown_081A43D4[];
-extern u8 gUnknown_081A43F0[];
-extern u8 gUnknown_081A43FA[];
-extern u8 gUnknown_081A4418[];
-extern u8 gUnknown_081A442D[];
-extern u8 gUnknown_081A4442[];
-extern u8 gUnknown_081A4457[];
-extern u8 gUnknown_081A4479[];
-extern u8 gUnknown_081A4487[];
-extern u8 gUnknown_081A4495[];
-extern u8 gUnknown_081A44E5[];
-extern u8 gUnknown_081A44FE[];
+extern u8 SingleBattleColosseum_EventScript_1A436F[];
+extern u8 SingleBattleColosseum_EventScript_1A4379[];
+extern u8 DoubleBattleColosseum_EventScript_1A4383[];
+extern u8 DoubleBattleColosseum_EventScript_1A439E[];
+extern u8 DoubleBattleColosseum_EventScript_1A43B9[];
+extern u8 DoubleBattleColosseum_EventScript_1A43D4[];
+extern u8 TradeCenter_EventScript_1A43F0[];
+extern u8 TradeCenter_EventScript_1A43FA[];
+extern u8 RecordCorner_EventScript_1A4418[];
+extern u8 RecordCorner_EventScript_1A442D[];
+extern u8 RecordCorner_EventScript_1A4442[];
+extern u8 RecordCorner_EventScript_1A4457[];
+extern u8 TradeRoom_ReadTrainerCard1[];
+extern u8 TradeRoom_ReadTrainerCard2[];
+extern u8 TradeRoom_TooBusyToNotice[];
+extern u8 TradeRoom_PromptToCancelLink[];
+extern u8 TradeRoom_TerminateLink[];
extern u8 gUnknown_081A4508[];
extern struct UCoords32 gUnknown_0821664C[];
@@ -108,9 +108,9 @@ extern s32 gUnknown_0839ACE8;
extern u32 gUnknown_08216694[];
-void sub_8052F5C(void)
+void DoWhiteOut(void)
{
- ScriptContext2_RunNewScript(gUnknown_0819FC74);
+ ScriptContext2_RunNewScript(EventScript_LeagueWhiteOut);
gSaveBlock1.money /= 2;
HealPlayerParty();
sub_8053050();
@@ -168,14 +168,15 @@ void sub_805308C(void)
sub_8134348();
}
-void sub_80530AC(void)
+void ResetGameStats(void)
{
s32 i;
+
for (i = 0; i < NUM_GAME_STATS; i++)
gSaveBlock1.gameStats[i] = 0;
}
-void sav12_xor_increment(u8 index)
+void IncrementGameStat(u8 index)
{
if (index < NUM_GAME_STATS)
{
@@ -186,7 +187,7 @@ void sav12_xor_increment(u8 index)
}
}
-u32 sub_8053108(u8 index)
+u32 GetGameStat(u8 index)
{
if (index >= NUM_GAME_STATS)
return 0;
@@ -194,7 +195,7 @@ u32 sub_8053108(u8 index)
return gSaveBlock1.gameStats[index];
}
-void sav12_xor_set(u8 index, u32 value)
+void SetGameStat(u8 index, u32 value)
{
if (index < NUM_GAME_STATS)
gSaveBlock1.gameStats[index] = value;
@@ -512,6 +513,7 @@ bool8 sub_80538D0(u16 x, u16 y)
void sub_80538F0(u8 mapGroup, u8 mapNum)
{
s32 i;
+
warp1_set(mapGroup, mapNum, -1, -1, -1);
sub_8053F0C();
warp_shift();
@@ -530,8 +532,10 @@ void sub_80538F0(u8 mapGroup, u8 mapNum)
not_trainer_hill_battle_pyramid();
sub_8056D38(gMapHeader.mapData);
apply_map_tileset2_palette(gMapHeader.mapData);
+
for (i = 6; i < 12; i++)
sub_807D874(i);
+
sub_8072ED0();
mapnumbers_history_shift_sav1_0_2_4_out();
sub_8134394();
@@ -1106,7 +1110,7 @@ void CB2_NewGame(void)
SetMainCallback2(c2_overworld);
}
-void c2_whiteout(void)
+void CB2_WhiteOut(void)
{
u8 val;
gMain.state++;
@@ -1115,7 +1119,7 @@ void c2_whiteout(void)
FieldClearVBlankHBlankCallbacks();
StopMapMusic();
ResetSafariZoneFlag_();
- sub_8052F5C();
+ DoWhiteOut();
player_avatar_init_params_reset();
ScriptContext1_Init();
ScriptContext2_Disable();
@@ -2155,12 +2159,13 @@ u8 *sub_805568C(struct UnkStruct_8054FF8 *a1)
if (linkPlayerId != 4)
{
if (!a1->b)
- return gUnknown_081A4495;
+ return TradeRoom_TooBusyToNotice;
if (gUnknown_03000580[linkPlayerId] != 0x80)
- return gUnknown_081A4495;
+ return TradeRoom_TooBusyToNotice;
if (!sub_8083BF4(linkPlayerId))
- return gUnknown_081A4479;
- return gUnknown_081A4487;
+ return TradeRoom_ReadTrainerCard1;
+ else
+ return TradeRoom_ReadTrainerCard2;
}
return sub_80682A8(&unkStruct, a1->field_C, a1->d);
@@ -2168,29 +2173,29 @@ u8 *sub_805568C(struct UnkStruct_8054FF8 *a1)
u16 sub_8055758(u8 *script)
{
- if (script == gUnknown_081A4383)
+ if (script == DoubleBattleColosseum_EventScript_1A4383)
return 10;
- if (script == gUnknown_081A439E)
+ if (script == DoubleBattleColosseum_EventScript_1A439E)
return 9;
- if (script == gUnknown_081A43B9)
+ if (script == DoubleBattleColosseum_EventScript_1A43B9)
return 10;
- if (script == gUnknown_081A43D4)
+ if (script == DoubleBattleColosseum_EventScript_1A43D4)
return 9;
- if (script == gUnknown_081A4418)
+ if (script == RecordCorner_EventScript_1A4418)
return 10;
- if (script == gUnknown_081A442D)
+ if (script == RecordCorner_EventScript_1A442D)
return 9;
- if (script == gUnknown_081A4442)
+ if (script == RecordCorner_EventScript_1A4442)
return 10;
- if (script == gUnknown_081A4457)
+ if (script == RecordCorner_EventScript_1A4457)
return 9;
- if (script == gUnknown_081A436F)
+ if (script == SingleBattleColosseum_EventScript_1A436F)
return 10;
- if (script == gUnknown_081A4379)
+ if (script == SingleBattleColosseum_EventScript_1A4379)
return 9;
- if (script == gUnknown_081A43F0)
+ if (script == TradeCenter_EventScript_1A43F0)
return 10;
- if (script == gUnknown_081A43FA)
+ if (script == TradeCenter_EventScript_1A43FA)
return 9;
return 0;
}
@@ -2217,7 +2222,7 @@ void sub_8055808(u8 *script)
void sub_8055824(void)
{
PlaySE(SE_WIN_OPEN);
- ScriptContext1_SetupScript(gUnknown_081A44E5);
+ ScriptContext1_SetupScript(TradeRoom_PromptToCancelLink);
ScriptContext2_Enable();
}
@@ -2230,7 +2235,7 @@ void sub_8055840(u8 *script)
void sub_805585C(void)
{
- ScriptContext1_SetupScript(gUnknown_081A44FE);
+ ScriptContext1_SetupScript(TradeRoom_TerminateLink);
ScriptContext2_Enable();
}
diff --git a/src/rom_800D42C.c b/src/rom_800D42C.c
index 43819f991..e9c816818 100644
--- a/src/rom_800D42C.c
+++ b/src/rom_800D42C.c
@@ -3,13 +3,6 @@
#include "link.h"
#include "text.h"
-struct Unk2000000
-{
- u8 filler0[0x160CB];
- /* 0x160CB */ u8 linkPlayerIndex;
-};
-
-extern struct Unk2000000 unk_2000000;
extern u16 gBattleTypeFlags;
extern u8 gUnknown_02024D26;
@@ -46,7 +39,7 @@ void sub_800DC24(void) {
if (gUnknown_02024D26 == 1) {
// lp_field_18 = player position?
- switch (gLinkPlayers[unk_2000000.linkPlayerIndex].lp_field_18) {
+ switch (gLinkPlayers[battle_2000000.linkPlayerIndex].lp_field_18) {
case 0:
case 2: PRINT_MESSAGE_LEFT(BattleText_Win, 160);
PRINT_MESSAGE_RIGHT(BattleText_Loss, 168);
@@ -59,7 +52,7 @@ void sub_800DC24(void) {
}
} else {
- switch (gLinkPlayers[unk_2000000.linkPlayerIndex].lp_field_18) {
+ switch (gLinkPlayers[battle_2000000.linkPlayerIndex].lp_field_18) {
case 1:
case 3: PRINT_MESSAGE_LEFT(BattleText_Win, 160);
PRINT_MESSAGE_RIGHT(BattleText_Loss, 168);
@@ -77,7 +70,7 @@ void sub_800DC24(void) {
if (gUnknown_02024D26 == 1) {
- if (gLinkPlayers[unk_2000000.linkPlayerIndex].lp_field_18 != 0) {
+ if (gLinkPlayers[battle_2000000.linkPlayerIndex].lp_field_18 != 0) {
PRINT_MESSAGE_RIGHT(BattleText_Win, 160);
PRINT_MESSAGE_LEFT(BattleText_Loss, 168);
} else {
@@ -85,7 +78,7 @@ void sub_800DC24(void) {
PRINT_MESSAGE_RIGHT(BattleText_Loss, 168);
}
} else {
- if (gLinkPlayers[unk_2000000.linkPlayerIndex].lp_field_18 != 0) {
+ if (gLinkPlayers[battle_2000000.linkPlayerIndex].lp_field_18 != 0) {
PRINT_MESSAGE_LEFT(BattleText_Win, 160);
PRINT_MESSAGE_RIGHT(BattleText_Loss, 168);
} else {
diff --git a/src/safari_zone.c b/src/safari_zone.c
index 6ecb5cc44..08bfbefbf 100644
--- a/src/safari_zone.c
+++ b/src/safari_zone.c
@@ -55,7 +55,7 @@ void ResetSafariZoneFlag(void)
void EnterSafariMode(void)
{
- sav12_xor_increment(0x11);
+ IncrementGameStat(0x11);
SetSafariZoneFlag();
ClearAllPokeblockFeeders();
gNumSafariBalls = 30;
diff --git a/src/save.c b/src/save.c
index 2771b4ea5..49db679f8 100644
--- a/src/save.c
+++ b/src/save.c
@@ -548,8 +548,8 @@ u8 sub_8125C3C(u8 a1)
for (i = 28; i < 32; i++)
EraseFlashSector(i);
case 3:
- if (sub_8053108(10) < 999)
- sav12_xor_increment(10);
+ if (GetGameStat(10) < 999)
+ IncrementGameStat(10);
for (i = 0; i < 2; i++)
sub_81253C8(28 + i, gHallOfFameSaveSectionLocations[i].data, gHallOfFameSaveSectionLocations[i].size);
SaveSerializedGame();
diff --git a/src/scrcmd.c b/src/scrcmd.c
index 4dc7a38dc..d3d28f923 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -543,7 +543,7 @@ bool8 ScrCmd_checkflag(struct ScriptContext *ctx)
bool8 ScrCmd_inccounter(struct ScriptContext *ctx)
{
- sav12_xor_increment(ScriptReadByte(ctx));
+ IncrementGameStat(ScriptReadByte(ctx));
return FALSE;
}
diff --git a/src/start_menu.c b/src/start_menu.c
index 87cb3f593..31ba31766 100644
--- a/src/start_menu.c
+++ b/src/start_menu.c
@@ -357,7 +357,7 @@ static u8 StartMenu_PokedexCallback(void)
{
if(!gPaletteFade.active)
{
- sav12_xor_increment(0x29);
+ IncrementGameStat(0x29);
PlayRainSoundEffect();
SetMainCallback2(CB2_InitPokedex);
return 1;
@@ -679,7 +679,7 @@ static u8 SaveDialogCB_DoSave(void)
{
u8 a;
- sav12_xor_increment(0);
+ IncrementGameStat(0);
if(gUnknown_020297EC == TRUE)
{
a = sub_8125D44(4);
diff --git a/src/trainer_card.c b/src/trainer_card.c
index d2d6b922d..83551eb2b 100644
--- a/src/trainer_card.c
+++ b/src/trainer_card.c
@@ -283,8 +283,8 @@ void sub_8093390(struct TrainerCard *arg1) {
arg1->playTimeHours = gSaveBlock2.playTimeHours;
arg1->playTimeMinutes = gSaveBlock2.playTimeMinutes;
- playTime = sub_8053108(GAME_STAT_FIRST_HOF_PLAY_TIME);
- enteredHallOfFame = sub_8053108(GAME_STAT_ENTERED_HOF);
+ playTime = GetGameStat(GAME_STAT_FIRST_HOF_PLAY_TIME);
+ enteredHallOfFame = GetGameStat(GAME_STAT_ENTERED_HOF);
if (!enteredHallOfFame) {
playTime = 0;
}
@@ -345,7 +345,7 @@ u8 sub_80934C4(u8 id) {
}
static u32 sav12_xor_get_clamped_above(u8 index, u32 maxVal) {
- u32 value = sub_8053108(index);
+ u32 value = GetGameStat(index);
if (value > maxVal) {
value = maxVal;
diff --git a/src/trainer_see.c b/src/trainer_see.c
index 2b4ecbcc1..c6cdc5658 100644
--- a/src/trainer_see.c
+++ b/src/trainer_see.c
@@ -16,6 +16,8 @@ extern bool8 (*gTrainerSeeFuncList2[])(u8, struct Task *, struct MapObject *);
extern u32 gUnknown_0202FF84[];
+extern struct SpriteTemplate gSpriteTemplate_839B510;
+extern struct SpriteTemplate gSpriteTemplate_839B528;
bool8 CheckTrainers(void)
{
@@ -386,3 +388,71 @@ void sub_80847D8(u8 taskId)
DestroyTask(taskId);
EnableBothScriptContexts();
}
+
+u8 FldEff_ExclamationMarkIcon1(void)
+{
+ u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839B510, 0, 0, 0x53);
+
+ if (spriteId != 64)
+ sub_8084894(&gSprites[spriteId], 0, 0);
+
+ return 0;
+}
+
+u8 FldEff_ExclamationMarkIcon2(void)
+{
+ u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839B510, 0, 0, 0x52);
+
+ if (spriteId != 64)
+ sub_8084894(&gSprites[spriteId], 33, 1);
+
+ return 0;
+}
+
+u8 FldEff_HeartIcon(void)
+{
+ u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839B528, 0, 0, 0x52);
+
+ if (spriteId != 64)
+ sub_8084894(&gSprites[spriteId], 46, 0);
+
+ return 0;
+}
+
+void sub_8084894(struct Sprite *sprite, u16 a2, u8 a3)
+{
+ sprite->oam.priority = 1;
+ sprite->coordOffsetEnabled = 1;
+
+ sprite->data0 = gUnknown_0202FF84[0];
+ sprite->data1 = gUnknown_0202FF84[1];
+ sprite->data2 = gUnknown_0202FF84[2];
+ sprite->data3 = -5;
+ sprite->data7 = a2;
+
+ StartSpriteAnim(sprite, a3);
+}
+
+void objc_exclamation_mark_probably(struct Sprite *sprite)
+{
+ u8 mapObjId;
+
+ if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjId)
+ || sprite->animEnded)
+ {
+ FieldEffectStop(sprite, (u8)sprite->data7);
+ }
+ else
+ {
+ struct Sprite *mapObjSprite = &gSprites[gMapObjects[mapObjId].spriteId];
+ sprite->data4 += sprite->data3;
+ sprite->pos1.x = mapObjSprite->pos1.x;
+ sprite->pos1.y = mapObjSprite->pos1.y - 16;
+ sprite->pos2.x = mapObjSprite->pos2.x;
+ sprite->pos2.y = mapObjSprite->pos2.y + sprite->data4;
+ if (sprite->data4)
+ sprite->data3++;
+ else
+ sprite->data3 = 0;
+ }
+}
diff --git a/src/wild_encounter.c b/src/wild_encounter.c
index 48e0c1d1c..8e983c300 100644
--- a/src/wild_encounter.c
+++ b/src/wild_encounter.c
@@ -596,7 +596,7 @@ void FishingWildEncounter(u8 rod)
gWildMonHeaders[GetCurrentMapWildMonHeader()].fishingMonsInfo,
rod);
}
- sav12_xor_increment(12);
+ IncrementGameStat(12);
sub_80BEA50(species);
CheckForSafariZoneAndProceed();
}