diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/battle_ai.c | 1709 | ||||
-rw-r--r-- | src/battle_setup.c | 58 | ||||
-rw-r--r-- | src/berry.c | 5 | ||||
-rw-r--r-- | src/berry_tag_screen.c | 3 | ||||
-rw-r--r-- | src/calculate_base_damage.c | 5 | ||||
-rw-r--r-- | src/credits.c | 544 | ||||
-rw-r--r-- | src/field_player_avatar.c | 2 | ||||
-rw-r--r-- | src/field_poison.c | 2 | ||||
-rw-r--r-- | src/fldeff_emotion.c | 78 | ||||
-rw-r--r-- | src/item_use.c | 2 | ||||
-rw-r--r-- | src/lottery_corner.c | 12 | ||||
-rw-r--r-- | src/mail.c | 16 | ||||
-rw-r--r-- | src/new_game.c | 25 | ||||
-rw-r--r-- | src/pokemon_1.c | 3 | ||||
-rw-r--r-- | src/pokemon_3.c | 9 | ||||
-rw-r--r-- | src/pokemon_size_record.c | 84 | ||||
-rw-r--r-- | src/rom4.c | 93 | ||||
-rw-r--r-- | src/rom_800D42C.c | 15 | ||||
-rw-r--r-- | src/safari_zone.c | 2 | ||||
-rw-r--r-- | src/save.c | 4 | ||||
-rw-r--r-- | src/scrcmd.c | 2 | ||||
-rw-r--r-- | src/start_menu.c | 4 | ||||
-rw-r--r-- | src/trainer_card.c | 6 | ||||
-rw-r--r-- | src/trainer_see.c | 70 | ||||
-rw-r--r-- | src/wild_encounter.c | 2 |
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(); } |